Commit 627fa177a1502ad24390d945851209ac022f3a36

Authored by Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
  Input: usbtouchscreen - extend coordinate range for Generaltouch devices
  Input: polldev can cause crash in case when polling disabled

Showing 2 changed files Side-by-side Diff

drivers/input/input-polldev.c
... ... @@ -100,6 +100,12 @@
100 100 struct input_polled_dev *dev = input_get_drvdata(input);
101 101  
102 102 cancel_delayed_work_sync(&dev->work);
  103 + /*
  104 + * Clean up work struct to remove references to the workqueue.
  105 + * It may be destroyed by the next call. This causes problems
  106 + * at next device open-close in case of poll_interval == 0.
  107 + */
  108 + INIT_DELAYED_WORK(&dev->work, dev->work.work.func);
103 109 input_polldev_stop_workqueue();
104 110  
105 111 if (dev->close)
drivers/input/touchscreen/usbtouchscreen.c
... ... @@ -618,8 +618,8 @@
618 618 #ifdef CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH
619 619 static int general_touch_read_data(struct usbtouch_usb *dev, unsigned char *pkt)
620 620 {
621   - dev->x = ((pkt[2] & 0x0F) << 8) | pkt[1] ;
622   - dev->y = ((pkt[4] & 0x0F) << 8) | pkt[3] ;
  621 + dev->x = (pkt[2] << 8) | pkt[1];
  622 + dev->y = (pkt[4] << 8) | pkt[3];
623 623 dev->press = pkt[5] & 0xff;
624 624 dev->touch = pkt[0] & 0x01;
625 625  
626 626  
... ... @@ -809,9 +809,9 @@
809 809 #ifdef CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH
810 810 [DEVTYPE_GENERAL_TOUCH] = {
811 811 .min_xc = 0x0,
812   - .max_xc = 0x0500,
  812 + .max_xc = 0x7fff,
813 813 .min_yc = 0x0,
814   - .max_yc = 0x0500,
  814 + .max_yc = 0x7fff,
815 815 .rept_size = 7,
816 816 .read_data = general_touch_read_data,
817 817 },