]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.17-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 10 Nov 2014 05:08:18 +0000 (14:08 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 10 Nov 2014 05:08:18 +0000 (14:08 +0900)
added patches:
hid-usbhid-add-always-poll-quirk.patch
hid-usbhid-add-another-mouse-that-needs-quirk_always_poll.patch
hid-usbhid-enable-always-poll-quirk-for-elan-touchscreen-009b.patch
hid-usbhid-enable-always-poll-quirk-for-elan-touchscreen-016f.patch
hid-usbhid-enable-always-poll-quirk-for-elan-touchscreen.patch
hid-usbhid-fix-pixart-optical-mouse.patch

queue-3.17/hid-usbhid-add-always-poll-quirk.patch [new file with mode: 0644]
queue-3.17/hid-usbhid-add-another-mouse-that-needs-quirk_always_poll.patch [new file with mode: 0644]
queue-3.17/hid-usbhid-enable-always-poll-quirk-for-elan-touchscreen-009b.patch [new file with mode: 0644]
queue-3.17/hid-usbhid-enable-always-poll-quirk-for-elan-touchscreen-016f.patch [new file with mode: 0644]
queue-3.17/hid-usbhid-enable-always-poll-quirk-for-elan-touchscreen.patch [new file with mode: 0644]
queue-3.17/hid-usbhid-fix-pixart-optical-mouse.patch [new file with mode: 0644]
queue-3.17/series

diff --git a/queue-3.17/hid-usbhid-add-always-poll-quirk.patch b/queue-3.17/hid-usbhid-add-always-poll-quirk.patch
new file mode 100644 (file)
index 0000000..deb4740
--- /dev/null
@@ -0,0 +1,98 @@
+From 0b750b3baa2d64f1b77aecc10f20deeb28efe60d Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan@kernel.org>
+Date: Fri, 5 Sep 2014 18:08:47 +0200
+Subject: HID: usbhid: add always-poll quirk
+
+From: Johan Hovold <johan@kernel.org>
+
+commit 0b750b3baa2d64f1b77aecc10f20deeb28efe60d upstream.
+
+Add quirk to make sure that a device is always polled for input events
+even if it hasn't been opened.
+
+This is needed for devices that disconnects from the bus unless the
+interrupt endpoint has been polled at least once or when not responding
+to an input event (e.g. after having shut down X).
+
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/hid/usbhid/hid-core.c |   26 +++++++++++++++++++++++---
+ include/linux/hid.h           |    1 +
+ 2 files changed, 24 insertions(+), 3 deletions(-)
+
+--- a/drivers/hid/usbhid/hid-core.c
++++ b/drivers/hid/usbhid/hid-core.c
+@@ -82,7 +82,7 @@ static int hid_start_in(struct hid_devic
+       struct usbhid_device *usbhid = hid->driver_data;
+       spin_lock_irqsave(&usbhid->lock, flags);
+-      if (hid->open > 0 &&
++      if ((hid->open > 0 || hid->quirks & HID_QUIRK_ALWAYS_POLL) &&
+                       !test_bit(HID_DISCONNECTED, &usbhid->iofl) &&
+                       !test_bit(HID_SUSPENDED, &usbhid->iofl) &&
+                       !test_and_set_bit(HID_IN_RUNNING, &usbhid->iofl)) {
+@@ -292,6 +292,8 @@ static void hid_irq_in(struct urb *urb)
+       case 0:                 /* success */
+               usbhid_mark_busy(usbhid);
+               usbhid->retry_delay = 0;
++              if ((hid->quirks & HID_QUIRK_ALWAYS_POLL) && !hid->open)
++                      break;
+               hid_input_report(urb->context, HID_INPUT_REPORT,
+                                urb->transfer_buffer,
+                                urb->actual_length, 1);
+@@ -735,8 +737,10 @@ void usbhid_close(struct hid_device *hid
+       if (!--hid->open) {
+               spin_unlock_irq(&usbhid->lock);
+               hid_cancel_delayed_stuff(usbhid);
+-              usb_kill_urb(usbhid->urbin);
+-              usbhid->intf->needs_remote_wakeup = 0;
++              if (!(hid->quirks & HID_QUIRK_ALWAYS_POLL)) {
++                      usb_kill_urb(usbhid->urbin);
++                      usbhid->intf->needs_remote_wakeup = 0;
++              }
+       } else {
+               spin_unlock_irq(&usbhid->lock);
+       }
+@@ -1134,6 +1138,19 @@ static int usbhid_start(struct hid_devic
+       set_bit(HID_STARTED, &usbhid->iofl);
++      if (hid->quirks & HID_QUIRK_ALWAYS_POLL) {
++              ret = usb_autopm_get_interface(usbhid->intf);
++              if (ret)
++                      goto fail;
++              usbhid->intf->needs_remote_wakeup = 1;
++              ret = hid_start_in(hid);
++              if (ret) {
++                      dev_err(&hid->dev,
++                              "failed to start in urb: %d\n", ret);
++              }
++              usb_autopm_put_interface(usbhid->intf);
++      }
++
+       /* Some keyboards don't work until their LEDs have been set.
+        * Since BIOSes do set the LEDs, it must be safe for any device
+        * that supports the keyboard boot protocol.
+@@ -1166,6 +1183,9 @@ static void usbhid_stop(struct hid_devic
+       if (WARN_ON(!usbhid))
+               return;
++      if (hid->quirks & HID_QUIRK_ALWAYS_POLL)
++              usbhid->intf->needs_remote_wakeup = 0;
++
+       clear_bit(HID_STARTED, &usbhid->iofl);
+       spin_lock_irq(&usbhid->lock);   /* Sync with error and led handlers */
+       set_bit(HID_DISCONNECTED, &usbhid->iofl);
+--- a/include/linux/hid.h
++++ b/include/linux/hid.h
+@@ -287,6 +287,7 @@ struct hid_item {
+ #define HID_QUIRK_HIDINPUT_FORCE              0x00000080
+ #define HID_QUIRK_NO_EMPTY_INPUT              0x00000100
+ #define HID_QUIRK_NO_INIT_INPUT_REPORTS               0x00000200
++#define HID_QUIRK_ALWAYS_POLL                 0x00000400
+ #define HID_QUIRK_SKIP_OUTPUT_REPORTS         0x00010000
+ #define HID_QUIRK_SKIP_OUTPUT_REPORT_ID               0x00020000
+ #define HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP        0x00040000
diff --git a/queue-3.17/hid-usbhid-add-another-mouse-that-needs-quirk_always_poll.patch b/queue-3.17/hid-usbhid-add-another-mouse-that-needs-quirk_always_poll.patch
new file mode 100644 (file)
index 0000000..4a12707
--- /dev/null
@@ -0,0 +1,40 @@
+From 5235166fbc332c8b5dcf49e3a498a8b510a77449 Mon Sep 17 00:00:00 2001
+From: Oliver Neukum <oneukum@suse.de>
+Date: Tue, 30 Sep 2014 12:54:56 +0200
+Subject: HID: usbhid: add another mouse that needs QUIRK_ALWAYS_POLL
+
+From: Oliver Neukum <oneukum@suse.de>
+
+commit 5235166fbc332c8b5dcf49e3a498a8b510a77449 upstream.
+
+There is a second mouse sharing the same vendor strings but different IDs.
+
+Signed-off-by: Oliver Neukum <oneukum@suse.de>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/hid/hid-ids.h           |    1 +
+ drivers/hid/usbhid/hid-quirks.c |    1 +
+ 2 files changed, 2 insertions(+)
+
+--- a/drivers/hid/hid-ids.h
++++ b/drivers/hid/hid-ids.h
+@@ -736,6 +736,7 @@
+ #define USB_DEVICE_ID_PI_ENGINEERING_VEC_USB_FOOTPEDAL        0xff
+ #define USB_VENDOR_ID_PIXART                          0x093a
++#define USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUSE_ID2    0x0137
+ #define USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUSE                0x2510
+ #define USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN     0x8001
+ #define USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1    0x8002
+--- a/drivers/hid/usbhid/hid-quirks.c
++++ b/drivers/hid/usbhid/hid-quirks.c
+@@ -81,6 +81,7 @@ static const struct hid_blacklist {
+       { USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_1610, HID_QUIRK_NOGET },
+       { USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_1640, HID_QUIRK_NOGET },
+       { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUSE, HID_QUIRK_ALWAYS_POLL },
++      { USB_VENDOR_ID_KYE, USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUSE_ID2, HID_QUIRK_ALWAYS_POLL },
+       { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN, HID_QUIRK_NO_INIT_REPORTS },
+       { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1, HID_QUIRK_NO_INIT_REPORTS },
+       { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN2, HID_QUIRK_NO_INIT_REPORTS },
diff --git a/queue-3.17/hid-usbhid-enable-always-poll-quirk-for-elan-touchscreen-009b.patch b/queue-3.17/hid-usbhid-enable-always-poll-quirk-for-elan-touchscreen-009b.patch
new file mode 100644 (file)
index 0000000..9a7b586
--- /dev/null
@@ -0,0 +1,40 @@
+From 29d05c2ecf396161ef2938a0635707ef5685ef58 Mon Sep 17 00:00:00 2001
+From: Adel Gadllah <adel.gadllah@gmail.com>
+Date: Thu, 9 Oct 2014 08:05:52 +0200
+Subject: HID: usbhid: enable always-poll quirk for Elan Touchscreen 009b
+
+From: Adel Gadllah <adel.gadllah@gmail.com>
+
+commit 29d05c2ecf396161ef2938a0635707ef5685ef58 upstream.
+
+This device needs the quirk as well.
+
+Signed-off-by: Adel Gadllah <adel.gadllah@gmail.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/hid/hid-ids.h           |    1 +
+ drivers/hid/usbhid/hid-quirks.c |    1 +
+ 2 files changed, 2 insertions(+)
+
+--- a/drivers/hid/hid-ids.h
++++ b/drivers/hid/hid-ids.h
+@@ -298,6 +298,7 @@
+ #define USB_VENDOR_ID_ELAN            0x04f3
+ #define USB_DEVICE_ID_ELAN_TOUCHSCREEN        0x0089
++#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_009B   0x009b
+ #define USB_VENDOR_ID_ELECOM          0x056e
+ #define USB_DEVICE_ID_ELECOM_BM084    0x0061
+--- a/drivers/hid/usbhid/hid-quirks.c
++++ b/drivers/hid/usbhid/hid-quirks.c
+@@ -71,6 +71,7 @@ static const struct hid_blacklist {
+       { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_AXIS_295, HID_QUIRK_NOGET },
+       { USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
+       { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN, HID_QUIRK_ALWAYS_POLL },
++      { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_009B, HID_QUIRK_ALWAYS_POLL },
+       { USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700, HID_QUIRK_NOGET },
+       { USB_VENDOR_ID_FORMOSA, USB_DEVICE_ID_FORMOSA_IR_RECEIVER, HID_QUIRK_NO_INIT_REPORTS },
+       { USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28, HID_QUIRK_NOGET },
diff --git a/queue-3.17/hid-usbhid-enable-always-poll-quirk-for-elan-touchscreen-016f.patch b/queue-3.17/hid-usbhid-enable-always-poll-quirk-for-elan-touchscreen-016f.patch
new file mode 100644 (file)
index 0000000..552758a
--- /dev/null
@@ -0,0 +1,41 @@
+From 1af39588f84c7c18f8c6d88342f36513a4ce383c Mon Sep 17 00:00:00 2001
+From: Adel Gadllah <adel.gadllah@gmail.com>
+Date: Thu, 9 Oct 2014 08:05:53 +0200
+Subject: HID: usbhid: enable always-poll quirk for Elan Touchscreen 016f
+
+From: Adel Gadllah <adel.gadllah@gmail.com>
+
+commit 1af39588f84c7c18f8c6d88342f36513a4ce383c upstream.
+
+This device needs the quirk as well.
+
+Tested-by: Kevin Fenzi <kevin@scrye.com>
+Signed-off-by: Adel Gadllah <adel.gadllah@gmail.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/hid/hid-ids.h           |    1 +
+ drivers/hid/usbhid/hid-quirks.c |    1 +
+ 2 files changed, 2 insertions(+)
+
+--- a/drivers/hid/hid-ids.h
++++ b/drivers/hid/hid-ids.h
+@@ -299,6 +299,7 @@
+ #define USB_VENDOR_ID_ELAN            0x04f3
+ #define USB_DEVICE_ID_ELAN_TOUCHSCREEN        0x0089
+ #define USB_DEVICE_ID_ELAN_TOUCHSCREEN_009B   0x009b
++#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_016F   0x016f
+ #define USB_VENDOR_ID_ELECOM          0x056e
+ #define USB_DEVICE_ID_ELECOM_BM084    0x0061
+--- a/drivers/hid/usbhid/hid-quirks.c
++++ b/drivers/hid/usbhid/hid-quirks.c
+@@ -72,6 +72,7 @@ static const struct hid_blacklist {
+       { USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
+       { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN, HID_QUIRK_ALWAYS_POLL },
+       { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_009B, HID_QUIRK_ALWAYS_POLL },
++      { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_016F, HID_QUIRK_ALWAYS_POLL },
+       { USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700, HID_QUIRK_NOGET },
+       { USB_VENDOR_ID_FORMOSA, USB_DEVICE_ID_FORMOSA_IR_RECEIVER, HID_QUIRK_NO_INIT_REPORTS },
+       { USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28, HID_QUIRK_NOGET },
diff --git a/queue-3.17/hid-usbhid-enable-always-poll-quirk-for-elan-touchscreen.patch b/queue-3.17/hid-usbhid-enable-always-poll-quirk-for-elan-touchscreen.patch
new file mode 100644 (file)
index 0000000..a88d0a5
--- /dev/null
@@ -0,0 +1,52 @@
+From bfe3c873e978d78b542a5852575dd74f4d1a5838 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan@kernel.org>
+Date: Fri, 5 Sep 2014 18:08:48 +0200
+Subject: HID: usbhid: enable always-poll quirk for Elan Touchscreen
+
+From: Johan Hovold <johan@kernel.org>
+
+commit bfe3c873e978d78b542a5852575dd74f4d1a5838 upstream.
+
+Enable the always-poll quirk for Elan Touchscreens found on some recent
+Samsung laptops.
+
+Without this quirk the device keeps disconnecting from the bus (and is
+re-enumerated) unless opened (and kept open, should an input event
+occur).
+
+Note that while the device can be run-time suspended, the autosuspend
+timeout must be high enough to allow the device to be polled at least
+once before being suspended. Specifically, using autosuspend_delay_ms=0
+will still cause the device to disconnect on input events.
+
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/hid/hid-ids.h           |    3 +++
+ drivers/hid/usbhid/hid-quirks.c |    1 +
+ 2 files changed, 4 insertions(+)
+
+--- a/drivers/hid/hid-ids.h
++++ b/drivers/hid/hid-ids.h
+@@ -296,6 +296,9 @@
+ #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_73F7     0x73f7
+ #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001     0xa001
++#define USB_VENDOR_ID_ELAN            0x04f3
++#define USB_DEVICE_ID_ELAN_TOUCHSCREEN        0x0089
++
+ #define USB_VENDOR_ID_ELECOM          0x056e
+ #define USB_DEVICE_ID_ELECOM_BM084    0x0061
+--- a/drivers/hid/usbhid/hid-quirks.c
++++ b/drivers/hid/usbhid/hid-quirks.c
+@@ -70,6 +70,7 @@ static const struct hid_blacklist {
+       { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_3AXIS_5BUTTON_STICK, HID_QUIRK_NOGET },
+       { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_AXIS_295, HID_QUIRK_NOGET },
+       { USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
++      { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN, HID_QUIRK_ALWAYS_POLL },
+       { USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700, HID_QUIRK_NOGET },
+       { USB_VENDOR_ID_FORMOSA, USB_DEVICE_ID_FORMOSA_IR_RECEIVER, HID_QUIRK_NO_INIT_REPORTS },
+       { USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28, HID_QUIRK_NOGET },
diff --git a/queue-3.17/hid-usbhid-fix-pixart-optical-mouse.patch b/queue-3.17/hid-usbhid-fix-pixart-optical-mouse.patch
new file mode 100644 (file)
index 0000000..77dd803
--- /dev/null
@@ -0,0 +1,40 @@
+From 4980f95755e2966b30ac70d1841f4db66d1a8a22 Mon Sep 17 00:00:00 2001
+From: Oliver Neukum <oneukum@suse.de>
+Date: Mon, 8 Sep 2014 11:21:49 +0200
+Subject: HID: usbhid: fix PIXART optical mouse
+
+From: Oliver Neukum <oneukum@suse.de>
+
+commit 4980f95755e2966b30ac70d1841f4db66d1a8a22 upstream.
+
+This mouse keeps disconnecting in runlevel 3. It needs the ALWAYS_POLL quirk.
+
+Signed-off-by: Oliver Neukum <oneukum@suse.de>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/hid/hid-ids.h           |    1 +
+ drivers/hid/usbhid/hid-quirks.c |    1 +
+ 2 files changed, 2 insertions(+)
+
+--- a/drivers/hid/hid-ids.h
++++ b/drivers/hid/hid-ids.h
+@@ -736,6 +736,7 @@
+ #define USB_DEVICE_ID_PI_ENGINEERING_VEC_USB_FOOTPEDAL        0xff
+ #define USB_VENDOR_ID_PIXART                          0x093a
++#define USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUSE                0x2510
+ #define USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN     0x8001
+ #define USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1    0x8002
+ #define USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN2    0x8003
+--- a/drivers/hid/usbhid/hid-quirks.c
++++ b/drivers/hid/usbhid/hid-quirks.c
+@@ -80,6 +80,7 @@ static const struct hid_blacklist {
+       { USB_VENDOR_ID_NOVATEK, USB_DEVICE_ID_NOVATEK_MOUSE, HID_QUIRK_NO_INIT_REPORTS },
+       { USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_1610, HID_QUIRK_NOGET },
+       { USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_1640, HID_QUIRK_NOGET },
++      { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUSE, HID_QUIRK_ALWAYS_POLL },
+       { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN, HID_QUIRK_NO_INIT_REPORTS },
+       { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1, HID_QUIRK_NO_INIT_REPORTS },
+       { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN2, HID_QUIRK_NO_INIT_REPORTS },
index 14c740d7d8fc4541d8d5529a6e378ac4bc06dc7b..0688828b666ac87432b8651b0315f4810487b470 100644 (file)
@@ -223,3 +223,9 @@ usb-core-add-device-qualifier-quirk.patch
 usb-quirks-enable-device-qualifier-quirk-for-elan-touchscreen.patch
 usb-quirks-enable-device-qualifier-quirk-for-another-elan-touchscreen.patch
 usb-quirks-enable-device-qualifier-quirk-for-yet-another-elan-touchscreen.patch
+hid-usbhid-add-always-poll-quirk.patch
+hid-usbhid-enable-always-poll-quirk-for-elan-touchscreen.patch
+hid-usbhid-fix-pixart-optical-mouse.patch
+hid-usbhid-add-another-mouse-that-needs-quirk_always_poll.patch
+hid-usbhid-enable-always-poll-quirk-for-elan-touchscreen-009b.patch
+hid-usbhid-enable-always-poll-quirk-for-elan-touchscreen-016f.patch