From: Greg Kroah-Hartman Date: Mon, 10 Nov 2014 05:08:18 +0000 (+0900) Subject: 3.17-stable patches X-Git-Tag: v3.10.60~39 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=abde5f1dcfe292f579ca44a813667051e8a79f65;p=thirdparty%2Fkernel%2Fstable-queue.git 3.17-stable patches 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 --- 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 index 00000000000..deb474080c3 --- /dev/null +++ b/queue-3.17/hid-usbhid-add-always-poll-quirk.patch @@ -0,0 +1,98 @@ +From 0b750b3baa2d64f1b77aecc10f20deeb28efe60d Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Fri, 5 Sep 2014 18:08:47 +0200 +Subject: HID: usbhid: add always-poll quirk + +From: Johan Hovold + +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 +Signed-off-by: Jiri Kosina +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..4a12707300e --- /dev/null +++ b/queue-3.17/hid-usbhid-add-another-mouse-that-needs-quirk_always_poll.patch @@ -0,0 +1,40 @@ +From 5235166fbc332c8b5dcf49e3a498a8b510a77449 Mon Sep 17 00:00:00 2001 +From: Oliver Neukum +Date: Tue, 30 Sep 2014 12:54:56 +0200 +Subject: HID: usbhid: add another mouse that needs QUIRK_ALWAYS_POLL + +From: Oliver Neukum + +commit 5235166fbc332c8b5dcf49e3a498a8b510a77449 upstream. + +There is a second mouse sharing the same vendor strings but different IDs. + +Signed-off-by: Oliver Neukum +Signed-off-by: Jiri Kosina +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..9a7b58666f4 --- /dev/null +++ b/queue-3.17/hid-usbhid-enable-always-poll-quirk-for-elan-touchscreen-009b.patch @@ -0,0 +1,40 @@ +From 29d05c2ecf396161ef2938a0635707ef5685ef58 Mon Sep 17 00:00:00 2001 +From: Adel Gadllah +Date: Thu, 9 Oct 2014 08:05:52 +0200 +Subject: HID: usbhid: enable always-poll quirk for Elan Touchscreen 009b + +From: Adel Gadllah + +commit 29d05c2ecf396161ef2938a0635707ef5685ef58 upstream. + +This device needs the quirk as well. + +Signed-off-by: Adel Gadllah +Signed-off-by: Jiri Kosina +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..552758a8844 --- /dev/null +++ b/queue-3.17/hid-usbhid-enable-always-poll-quirk-for-elan-touchscreen-016f.patch @@ -0,0 +1,41 @@ +From 1af39588f84c7c18f8c6d88342f36513a4ce383c Mon Sep 17 00:00:00 2001 +From: Adel Gadllah +Date: Thu, 9 Oct 2014 08:05:53 +0200 +Subject: HID: usbhid: enable always-poll quirk for Elan Touchscreen 016f + +From: Adel Gadllah + +commit 1af39588f84c7c18f8c6d88342f36513a4ce383c upstream. + +This device needs the quirk as well. + +Tested-by: Kevin Fenzi +Signed-off-by: Adel Gadllah +Signed-off-by: Jiri Kosina +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..a88d0a57f1d --- /dev/null +++ b/queue-3.17/hid-usbhid-enable-always-poll-quirk-for-elan-touchscreen.patch @@ -0,0 +1,52 @@ +From bfe3c873e978d78b542a5852575dd74f4d1a5838 Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Fri, 5 Sep 2014 18:08:48 +0200 +Subject: HID: usbhid: enable always-poll quirk for Elan Touchscreen + +From: Johan Hovold + +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 +Signed-off-by: Jiri Kosina +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..77dd8034d57 --- /dev/null +++ b/queue-3.17/hid-usbhid-fix-pixart-optical-mouse.patch @@ -0,0 +1,40 @@ +From 4980f95755e2966b30ac70d1841f4db66d1a8a22 Mon Sep 17 00:00:00 2001 +From: Oliver Neukum +Date: Mon, 8 Sep 2014 11:21:49 +0200 +Subject: HID: usbhid: fix PIXART optical mouse + +From: Oliver Neukum + +commit 4980f95755e2966b30ac70d1841f4db66d1a8a22 upstream. + +This mouse keeps disconnecting in runlevel 3. It needs the ALWAYS_POLL quirk. + +Signed-off-by: Oliver Neukum +Signed-off-by: Jiri Kosina +Signed-off-by: Greg Kroah-Hartman + +--- + 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 }, diff --git a/queue-3.17/series b/queue-3.17/series index 14c740d7d8f..0688828b666 100644 --- a/queue-3.17/series +++ b/queue-3.17/series @@ -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