From: Greg Kroah-Hartman Date: Mon, 2 Dec 2013 01:58:45 +0000 (-0800) Subject: 3.10-stable patches X-Git-Tag: v3.4.72~17 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=26f679abe11ec6cab997026d9e3a55055c94c05c;p=thirdparty%2Fkernel%2Fstable-queue.git 3.10-stable patches added patches: cpufreq-highbank-cpufreq-enable-midway-ecx-2000.patch hid-don-t-ignore-egalax-d-wav-eeti-hids.patch input-cypress_ps2-do-not-consider-data-bad-if-palm-is-detected.patch input-evdev-fall-back-to-vmalloc-for-client-event-buffer.patch input-i8042-add-pnp-modaliases.patch input-usbtouchscreen-ignore-egalax-d-wav-eeti-hids.patch --- diff --git a/queue-3.10/cpufreq-highbank-cpufreq-enable-midway-ecx-2000.patch b/queue-3.10/cpufreq-highbank-cpufreq-enable-midway-ecx-2000.patch new file mode 100644 index 00000000000..23eff31e4ef --- /dev/null +++ b/queue-3.10/cpufreq-highbank-cpufreq-enable-midway-ecx-2000.patch @@ -0,0 +1,36 @@ +From fbbc5bfb44a22e7a8ef753a1c8dfb448d7ac8b85 Mon Sep 17 00:00:00 2001 +From: Mark Langsdorf +Date: Tue, 1 Oct 2013 10:30:24 -0500 +Subject: cpufreq: highbank-cpufreq: Enable Midway/ECX-2000 + +From: Mark Langsdorf + +commit fbbc5bfb44a22e7a8ef753a1c8dfb448d7ac8b85 upstream. + +Calxeda's new ECX-2000 part uses the same cpufreq interface as highbank, +so add it to the driver's compatibility list. + +This is a minor change that can safely be applied to the 3.10 and 3.11 +stable trees. + +Signed-off-by: Mark Langsdorf +Acked-by: Viresh Kumar +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/cpufreq/highbank-cpufreq.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/drivers/cpufreq/highbank-cpufreq.c ++++ b/drivers/cpufreq/highbank-cpufreq.c +@@ -66,7 +66,8 @@ static int hb_cpufreq_driver_init(void) + struct device_node *np; + int ret; + +- if (!of_machine_is_compatible("calxeda,highbank")) ++ if ((!of_machine_is_compatible("calxeda,highbank")) && ++ (!of_machine_is_compatible("calxeda,ecx-2000"))) + return -ENODEV; + + for_each_child_of_node(of_find_node_by_path("/cpus"), np) diff --git a/queue-3.10/hid-don-t-ignore-egalax-d-wav-eeti-hids.patch b/queue-3.10/hid-don-t-ignore-egalax-d-wav-eeti-hids.patch new file mode 100644 index 00000000000..f8d4cf1a937 --- /dev/null +++ b/queue-3.10/hid-don-t-ignore-egalax-d-wav-eeti-hids.patch @@ -0,0 +1,77 @@ +From 95d50b6c5e18ff7351c5f2a6ff53afaed5f7e664 Mon Sep 17 00:00:00 2001 +From: Forest Bond +Date: Mon, 21 Oct 2013 12:38:02 -0400 +Subject: HID: don't ignore eGalax/D-Wav/EETI HIDs + +From: Forest Bond + +commit 95d50b6c5e18ff7351c5f2a6ff53afaed5f7e664 upstream. + +Certain devices with class HID, protocol None did not work with the HID +driver at one point, and as a result were bound to usbtouchscreen +instead as of commit 139ebe8 ("Input: usbtouchscreen - fix eGalax HID +ignoring"). This change was prompted by the following report: + +https://lkml.org/lkml/2009/1/25/127 + +Unfortunately, the device mentioned in this report is no longer +available for testing. + +We've recently discovered that some devices with class HID, protocol +None do not work with usbtouchscreen, but do work with usbhid. Here is +the report that made this evident: + +http://comments.gmane.org/gmane.linux.kernel.input/31710 + +Driver binding for these devices has flip-flopped a few times, so both +of the above reports were regressions. + +This situation would appear to leave us with no easy way to bind every +device to the right driver. However, in my own testing with several +devices I have not found a device with class HID that does not work with +the current HID driver. It is my belief that changes to the HID driver +since the original report have likely fixed the issue(s) that made it +unsuitable at the time, and that we should prefer it over usbtouchscreen +for these devices. In particular, HID quirks affecting these devices +were added/removed in the following commits since then: + +fe6065d HID: add multi-input quirk for eGalax Touchcontroller +77933c3 Merge branch 'egalax' into for-linus +ebd11fe HID: Add quirk for eGalax touch controler. +d34c4aa HID: add no-get quirk for eGalax touch controller + +This patch makes the HID driver no longer ignore eGalax/D-Wav/EETI +devices with class HID. If there are in fact devices with class HID +that still do not work with the HID driver, we will see another round of +regressions. In that case I propose we investigate why the device is +not working with the HID driver rather than re-introduce regressions for +functioning HID devices by again binding them to usbtouchscreen. + +The corresponding change to usbtouchscreen will be made separately. + +Signed-off-by: Forest Bond +Signed-off-by: Jiri Kosina +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/hid/hid-core.c | 9 --------- + 1 file changed, 9 deletions(-) + +--- a/drivers/hid/hid-core.c ++++ b/drivers/hid/hid-core.c +@@ -2317,15 +2317,6 @@ bool hid_ignore(struct hid_device *hdev) + hdev->type == HID_TYPE_USBNONE) + return true; + break; +- case USB_VENDOR_ID_DWAV: +- /* These are handled by usbtouchscreen. hdev->type is probably +- * HID_TYPE_USBNONE, but we say !HID_TYPE_USBMOUSE to match +- * usbtouchscreen. */ +- if ((hdev->product == USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER || +- hdev->product == USB_DEVICE_ID_DWAV_TOUCHCONTROLLER) && +- hdev->type != HID_TYPE_USBMOUSE) +- return true; +- break; + case USB_VENDOR_ID_VELLEMAN: + /* These are not HID devices. They are handled by comedi. */ + if ((hdev->product >= USB_DEVICE_ID_VELLEMAN_K8055_FIRST && diff --git a/queue-3.10/input-cypress_ps2-do-not-consider-data-bad-if-palm-is-detected.patch b/queue-3.10/input-cypress_ps2-do-not-consider-data-bad-if-palm-is-detected.patch new file mode 100644 index 00000000000..a2f7bc7110c --- /dev/null +++ b/queue-3.10/input-cypress_ps2-do-not-consider-data-bad-if-palm-is-detected.patch @@ -0,0 +1,79 @@ +From 5df682b297f6b23ec35615ed7bb50cbb25d25869 Mon Sep 17 00:00:00 2001 +From: Joseph Salisbury +Date: Wed, 16 Oct 2013 09:19:40 -0700 +Subject: Input: cypress_ps2 - do not consider data bad if palm is detected + +From: Joseph Salisbury + +commit 5df682b297f6b23ec35615ed7bb50cbb25d25869 upstream. + +If hardware (or firmware) detects palm on the surface of the device it does +not mean that the data packet is bad from the protocol standpoint. Instead +of reporting PSMOUSE_BAD_DATA in this case simply threat it as if nothing +touches the surface. + +BugLink: http://bugs.launchpad.net/bugs/1229361 + +Signed-off-by: Joseph Salisbury +Tested-by: Kamal Mostafa +Signed-off-by: Dmitry Torokhov +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/input/mouse/cypress_ps2.c | 19 +++---------------- + 1 file changed, 3 insertions(+), 16 deletions(-) + +--- a/drivers/input/mouse/cypress_ps2.c ++++ b/drivers/input/mouse/cypress_ps2.c +@@ -439,7 +439,7 @@ static int cypress_get_finger_count(unsi + case 2: return 5; + default: + /* Invalid contact (e.g. palm). Ignore it. */ +- return -1; ++ return 0; + } + } + +@@ -452,17 +452,10 @@ static int cypress_parse_packet(struct p + { + unsigned char *packet = psmouse->packet; + unsigned char header_byte = packet[0]; +- int contact_cnt; + + memset(report_data, 0, sizeof(struct cytp_report_data)); + +- contact_cnt = cypress_get_finger_count(header_byte); +- +- if (contact_cnt < 0) /* e.g. palm detect */ +- return -EINVAL; +- +- report_data->contact_cnt = contact_cnt; +- ++ report_data->contact_cnt = cypress_get_finger_count(header_byte); + report_data->tap = (header_byte & ABS_MULTIFINGER_TAP) ? 1 : 0; + + if (report_data->contact_cnt == 1) { +@@ -535,11 +528,9 @@ static void cypress_process_packet(struc + int slots[CYTP_MAX_MT_SLOTS]; + int n; + +- if (cypress_parse_packet(psmouse, cytp, &report_data)) +- return; ++ cypress_parse_packet(psmouse, cytp, &report_data); + + n = report_data.contact_cnt; +- + if (n > CYTP_MAX_MT_SLOTS) + n = CYTP_MAX_MT_SLOTS; + +@@ -605,10 +596,6 @@ static psmouse_ret_t cypress_validate_by + return PSMOUSE_BAD_DATA; + + contact_cnt = cypress_get_finger_count(packet[0]); +- +- if (contact_cnt < 0) +- return PSMOUSE_BAD_DATA; +- + if (cytp->mode & CYTP_BIT_ABS_NO_PRESSURE) + cypress_set_packet_size(psmouse, contact_cnt == 2 ? 7 : 4); + else diff --git a/queue-3.10/input-evdev-fall-back-to-vmalloc-for-client-event-buffer.patch b/queue-3.10/input-evdev-fall-back-to-vmalloc-for-client-event-buffer.patch new file mode 100644 index 00000000000..2b8fac949fd --- /dev/null +++ b/queue-3.10/input-evdev-fall-back-to-vmalloc-for-client-event-buffer.patch @@ -0,0 +1,69 @@ +From 92eb77d0ffbaa71b501a0a8dabf09a351bf4267f Mon Sep 17 00:00:00 2001 +From: Daniel Stone +Date: Thu, 31 Oct 2013 00:25:34 -0700 +Subject: Input: evdev - fall back to vmalloc for client event buffer + +From: Daniel Stone + +commit 92eb77d0ffbaa71b501a0a8dabf09a351bf4267f upstream. + +evdev always tries to allocate the event buffer for clients using +kzalloc rather than vmalloc, presumably to avoid mapping overhead where +possible. However, drivers like bcm5974, which claims support for +reporting 16 fingers simultaneously, can have an extraordinarily large +buffer. The resultant contiguous order-4 allocation attempt fails due +to fragmentation, and the device is thus unusable until reboot. + +Try kzalloc if we can to avoid the mapping overhead, but if that fails, +fall back to vzalloc. + +Signed-off-by: Daniel Stone +Signed-off-by: Dmitry Torokhov +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/input/evdev.c | 16 ++++++++++++---- + 1 file changed, 12 insertions(+), 4 deletions(-) + +--- a/drivers/input/evdev.c ++++ b/drivers/input/evdev.c +@@ -18,6 +18,8 @@ + #include + #include + #include ++#include ++#include + #include + #include + #include +@@ -289,7 +291,11 @@ static int evdev_release(struct inode *i + mutex_unlock(&evdev->mutex); + + evdev_detach_client(evdev, client); +- kfree(client); ++ ++ if (is_vmalloc_addr(client)) ++ vfree(client); ++ else ++ kfree(client); + + evdev_close_device(evdev); + +@@ -309,12 +315,14 @@ static int evdev_open(struct inode *inod + { + struct evdev *evdev = container_of(inode->i_cdev, struct evdev, cdev); + unsigned int bufsize = evdev_compute_buffer_size(evdev->handle.dev); ++ unsigned int size = sizeof(struct evdev_client) + ++ bufsize * sizeof(struct input_event); + struct evdev_client *client; + int error; + +- client = kzalloc(sizeof(struct evdev_client) + +- bufsize * sizeof(struct input_event), +- GFP_KERNEL); ++ client = kzalloc(size, GFP_KERNEL | __GFP_NOWARN); ++ if (!client) ++ client = vzalloc(size); + if (!client) + return -ENOMEM; + diff --git a/queue-3.10/input-i8042-add-pnp-modaliases.patch b/queue-3.10/input-i8042-add-pnp-modaliases.patch new file mode 100644 index 00000000000..087bb9861be --- /dev/null +++ b/queue-3.10/input-i8042-add-pnp-modaliases.patch @@ -0,0 +1,40 @@ +From 78551277e4df57864b0b0e7f85c23ede2be2edb8 Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Thu, 31 Oct 2013 00:33:54 -0700 +Subject: Input: i8042 - add PNP modaliases + +From: Tom Gundersen + +commit 78551277e4df57864b0b0e7f85c23ede2be2edb8 upstream. + +This allows the module to be autoloaded in the common case. + +In order to work on non-PnP systems the module should be compiled in or +loaded unconditionally at boot (c.f. modules-load.d(5)), as before. + +Signed-off-by: Tom Gundersen +Signed-off-by: Dmitry Torokhov +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/input/serio/i8042-x86ia64io.h | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/input/serio/i8042-x86ia64io.h ++++ b/drivers/input/serio/i8042-x86ia64io.h +@@ -765,6 +765,7 @@ static struct pnp_device_id pnp_kbd_devi + { .id = "CPQA0D7", .driver_data = 0 }, + { .id = "", }, + }; ++MODULE_DEVICE_TABLE(pnp, pnp_kbd_devids); + + static struct pnp_driver i8042_pnp_kbd_driver = { + .name = "i8042 kbd", +@@ -786,6 +787,7 @@ static struct pnp_device_id pnp_aux_devi + { .id = "SYN0801", .driver_data = 0 }, + { .id = "", }, + }; ++MODULE_DEVICE_TABLE(pnp, pnp_aux_devids); + + static struct pnp_driver i8042_pnp_aux_driver = { + .name = "i8042 aux", diff --git a/queue-3.10/input-usbtouchscreen-ignore-egalax-d-wav-eeti-hids.patch b/queue-3.10/input-usbtouchscreen-ignore-egalax-d-wav-eeti-hids.patch new file mode 100644 index 00000000000..0912c47c7a8 --- /dev/null +++ b/queue-3.10/input-usbtouchscreen-ignore-egalax-d-wav-eeti-hids.patch @@ -0,0 +1,37 @@ +From ae2aa3a512fa5f50f67feba9e66bc2efb394bd63 Mon Sep 17 00:00:00 2001 +From: Forest Bond +Date: Mon, 21 Oct 2013 12:38:18 -0400 +Subject: Input: usbtouchscreen: ignore eGalax/D-Wav/EETI HIDs + +From: Forest Bond + +commit ae2aa3a512fa5f50f67feba9e66bc2efb394bd63 upstream. + +The HID driver now handles these devices, regardless of what protocol +the device claims it supports. + +Signed-off-by: Forest Bond +Acked-by: Dmitry Torokhov +Signed-off-by: Jiri Kosina +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/input/touchscreen/usbtouchscreen.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +--- a/drivers/input/touchscreen/usbtouchscreen.c ++++ b/drivers/input/touchscreen/usbtouchscreen.c +@@ -146,12 +146,10 @@ enum { + + #define USB_DEVICE_HID_CLASS(vend, prod) \ + .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS \ +- | USB_DEVICE_ID_MATCH_INT_PROTOCOL \ + | USB_DEVICE_ID_MATCH_DEVICE, \ + .idVendor = (vend), \ + .idProduct = (prod), \ +- .bInterfaceClass = USB_INTERFACE_CLASS_HID, \ +- .bInterfaceProtocol = USB_INTERFACE_PROTOCOL_MOUSE ++ .bInterfaceClass = USB_INTERFACE_CLASS_HID + + static const struct usb_device_id usbtouch_devices[] = { + #ifdef CONFIG_TOUCHSCREEN_USB_EGALAX diff --git a/queue-3.10/series b/queue-3.10/series index 31352d0c0e6..9e3253286da 100644 --- a/queue-3.10/series +++ b/queue-3.10/series @@ -116,3 +116,9 @@ alsa-hda-create-headhpone-mic-jack-mode-when-really-needed.patch alsa-hda-initialize-missing-bass-speaker-pin-for-asus-aio-et2700.patch alsa-hda-check-leaf-nodes-to-find-aamix-amps.patch tracing-allow-events-to-have-null-strings.patch +input-evdev-fall-back-to-vmalloc-for-client-event-buffer.patch +input-cypress_ps2-do-not-consider-data-bad-if-palm-is-detected.patch +input-i8042-add-pnp-modaliases.patch +hid-don-t-ignore-egalax-d-wav-eeti-hids.patch +input-usbtouchscreen-ignore-egalax-d-wav-eeti-hids.patch +cpufreq-highbank-cpufreq-enable-midway-ecx-2000.patch