mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
Pull input fixes from Dmitry Torokhov: "Two small fixups for spaceball joystick driver and appletouch touchpad driver" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: Input: spaceball - fix parsing of movement data packets Input: appletouch - initialize work before device registration
This commit is contained in:
commit
278218f677
2 changed files with 11 additions and 4 deletions
|
@ -19,6 +19,7 @@
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
#include <linux/serio.h>
|
#include <linux/serio.h>
|
||||||
|
#include <asm/unaligned.h>
|
||||||
|
|
||||||
#define DRIVER_DESC "SpaceTec SpaceBall 2003/3003/4000 FLX driver"
|
#define DRIVER_DESC "SpaceTec SpaceBall 2003/3003/4000 FLX driver"
|
||||||
|
|
||||||
|
@ -75,9 +76,15 @@ static void spaceball_process_packet(struct spaceball* spaceball)
|
||||||
|
|
||||||
case 'D': /* Ball data */
|
case 'D': /* Ball data */
|
||||||
if (spaceball->idx != 15) return;
|
if (spaceball->idx != 15) return;
|
||||||
for (i = 0; i < 6; i++)
|
/*
|
||||||
|
* Skip first three bytes; read six axes worth of data.
|
||||||
|
* Axis values are signed 16-bit big-endian.
|
||||||
|
*/
|
||||||
|
data += 3;
|
||||||
|
for (i = 0; i < ARRAY_SIZE(spaceball_axes); i++) {
|
||||||
input_report_abs(dev, spaceball_axes[i],
|
input_report_abs(dev, spaceball_axes[i],
|
||||||
(__s16)((data[2 * i + 3] << 8) | data[2 * i + 2]));
|
(__s16)get_unaligned_be16(&data[i * 2]));
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'K': /* Button data */
|
case 'K': /* Button data */
|
||||||
|
|
|
@ -916,6 +916,8 @@ static int atp_probe(struct usb_interface *iface,
|
||||||
set_bit(BTN_TOOL_TRIPLETAP, input_dev->keybit);
|
set_bit(BTN_TOOL_TRIPLETAP, input_dev->keybit);
|
||||||
set_bit(BTN_LEFT, input_dev->keybit);
|
set_bit(BTN_LEFT, input_dev->keybit);
|
||||||
|
|
||||||
|
INIT_WORK(&dev->work, atp_reinit);
|
||||||
|
|
||||||
error = input_register_device(dev->input);
|
error = input_register_device(dev->input);
|
||||||
if (error)
|
if (error)
|
||||||
goto err_free_buffer;
|
goto err_free_buffer;
|
||||||
|
@ -923,8 +925,6 @@ static int atp_probe(struct usb_interface *iface,
|
||||||
/* save our data pointer in this interface device */
|
/* save our data pointer in this interface device */
|
||||||
usb_set_intfdata(iface, dev);
|
usb_set_intfdata(iface, dev);
|
||||||
|
|
||||||
INIT_WORK(&dev->work, atp_reinit);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_free_buffer:
|
err_free_buffer:
|
||||||
|
|
Loading…
Add table
Reference in a new issue