From: Greg Kroah-Hartman Date: Mon, 2 Dec 2013 02:44:10 +0000 (-0800) Subject: 3.12-stable patches X-Git-Tag: v3.4.72~14 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=92649913865990cacc9bb2279a35a0bad0796eed;p=thirdparty%2Fkernel%2Fstable-queue.git 3.12-stable patches added patches: gfs2-fix-ref-count-bug-relating-to-atomic_open.patch hid-hid-lg4ff-initialize-device-properties-before-we-touch-autocentering.patch hid-hid-lg4ff-scale-autocentering-force-properly-on-logitech-wheel.patch hid-hid-lg4ff-switch-autocentering-off-when-strength-is-set-to-zero.patch hid-hid-multitouch-add-support-for-sis-panels.patch hid-hid-sensor-hub-fix-report-size.patch hid-kye-add-report-fixup-for-genius-manticore-keyboard.patch hid-lg-fix-reportdescriptor-for-logitech-formula-vibration.patch hid-logitech-lg2ff-add-ids-for-formula-vibration-feedback-wheel.patch hid-multicouh-add-pid-vid-to-support-1-new-wistron-optical-touch-device.patch hid-multitouch-fix-generaltouch-products-and-add-more-pids.patch --- diff --git a/queue-3.12/gfs2-fix-ref-count-bug-relating-to-atomic_open.patch b/queue-3.12/gfs2-fix-ref-count-bug-relating-to-atomic_open.patch new file mode 100644 index 00000000000..367fd3b2696 --- /dev/null +++ b/queue-3.12/gfs2-fix-ref-count-bug-relating-to-atomic_open.patch @@ -0,0 +1,36 @@ +From ea0341e071527d5cec350917b01ab901af09d758 Mon Sep 17 00:00:00 2001 +From: Steven Whitehouse +Date: Thu, 21 Nov 2013 18:47:57 +0000 +Subject: GFS2: Fix ref count bug relating to atomic_open + +From: Steven Whitehouse + +commit ea0341e071527d5cec350917b01ab901af09d758 upstream. + +In the case that atomic_open calls finish_no_open() with +the dentry that was supplied to gfs2_atomic_open() an +extra reference count is required. This patch fixes that +issue preventing a bug trap triggering at umount time. + +Signed-off-by: Steven Whitehouse +Signed-off-by: Greg Kroah-Hartman + +--- + fs/gfs2/inode.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +--- a/fs/gfs2/inode.c ++++ b/fs/gfs2/inode.c +@@ -1168,8 +1168,11 @@ static int gfs2_atomic_open(struct inode + if (d != NULL) + dentry = d; + if (dentry->d_inode) { +- if (!(*opened & FILE_OPENED)) ++ if (!(*opened & FILE_OPENED)) { ++ if (d == NULL) ++ dget(dentry); + return finish_no_open(file, dentry); ++ } + dput(d); + return 0; + } diff --git a/queue-3.12/hid-hid-lg4ff-initialize-device-properties-before-we-touch-autocentering.patch b/queue-3.12/hid-hid-lg4ff-initialize-device-properties-before-we-touch-autocentering.patch new file mode 100644 index 00000000000..81f473f55e7 --- /dev/null +++ b/queue-3.12/hid-hid-lg4ff-initialize-device-properties-before-we-touch-autocentering.patch @@ -0,0 +1,59 @@ +From 114a55cf9dd1576e7ac56189832cd4d7dc56c218 Mon Sep 17 00:00:00 2001 +From: Simon Wood +Date: Wed, 6 Nov 2013 12:30:43 -0700 +Subject: HID:hid-lg4ff: Initialize device properties before we touch autocentering. + +From: Simon Wood + +commit 114a55cf9dd1576e7ac56189832cd4d7dc56c218 upstream. + +Re-arrange code slightly to ensure that device properties are configured +before calling auto-center command. + +Reported-by: Michal Malý +Signed-off-by: Simon Wood +Signed-off-by: Jiri Kosina +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/hid/hid-lg4ff.c | 22 +++++++++++----------- + 1 file changed, 11 insertions(+), 11 deletions(-) + +--- a/drivers/hid/hid-lg4ff.c ++++ b/drivers/hid/hid-lg4ff.c +@@ -574,17 +574,6 @@ int lg4ff_init(struct hid_device *hid) + if (error) + return error; + +- /* Check if autocentering is available and +- * set the centering force to zero by default */ +- if (test_bit(FF_AUTOCENTER, dev->ffbit)) { +- if (rev_maj == FFEX_REV_MAJ && rev_min == FFEX_REV_MIN) /* Formula Force EX expects different autocentering command */ +- dev->ff->set_autocenter = hid_lg4ff_set_autocenter_ffex; +- else +- dev->ff->set_autocenter = hid_lg4ff_set_autocenter_default; +- +- dev->ff->set_autocenter(dev, 0); +- } +- + /* Get private driver data */ + drv_data = hid_get_drvdata(hid); + if (!drv_data) { +@@ -605,6 +594,17 @@ int lg4ff_init(struct hid_device *hid) + entry->max_range = lg4ff_devices[i].max_range; + entry->set_range = lg4ff_devices[i].set_range; + ++ /* Check if autocentering is available and ++ * set the centering force to zero by default */ ++ if (test_bit(FF_AUTOCENTER, dev->ffbit)) { ++ if (rev_maj == FFEX_REV_MAJ && rev_min == FFEX_REV_MIN) /* Formula Force EX expects different autocentering command */ ++ dev->ff->set_autocenter = hid_lg4ff_set_autocenter_ffex; ++ else ++ dev->ff->set_autocenter = hid_lg4ff_set_autocenter_default; ++ ++ dev->ff->set_autocenter(dev, 0); ++ } ++ + /* Create sysfs interface */ + error = device_create_file(&hid->dev, &dev_attr_range); + if (error) diff --git a/queue-3.12/hid-hid-lg4ff-scale-autocentering-force-properly-on-logitech-wheel.patch b/queue-3.12/hid-hid-lg4ff-scale-autocentering-force-properly-on-logitech-wheel.patch new file mode 100644 index 00000000000..b9bd0d498fc --- /dev/null +++ b/queue-3.12/hid-hid-lg4ff-scale-autocentering-force-properly-on-logitech-wheel.patch @@ -0,0 +1,48 @@ +From f8c231569a7a455dfa1907294a46ba52b3aa8859 Mon Sep 17 00:00:00 2001 +From: Simon Wood +Date: Wed, 6 Nov 2013 12:30:40 -0700 +Subject: HID:hid-lg4ff: Scale autocentering force properly on Logitech wheel + +From: Simon Wood + +commit f8c231569a7a455dfa1907294a46ba52b3aa8859 upstream. + +Adjust the scaling and lineartity to match that of the Windows +driver (from MOMO testing). + +Reported-by: Elias Vanderstuyft +Signed-off-by: Simon Wood +Signed-off-by: Jiri Kosina +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/hid/hid-lg4ff.c | 15 ++++++++++++--- + 1 file changed, 12 insertions(+), 3 deletions(-) + +--- a/drivers/hid/hid-lg4ff.c ++++ b/drivers/hid/hid-lg4ff.c +@@ -218,12 +218,21 @@ static void hid_lg4ff_set_autocenter_def + struct list_head *report_list = &hid->report_enum[HID_OUTPUT_REPORT].report_list; + struct hid_report *report = list_entry(report_list->next, struct hid_report, list); + __s32 *value = report->field[0]->value; ++ __u32 expand_a, expand_b; ++ ++ if (magnitude <= 0xaaaa) { ++ expand_a = 0x0c * magnitude; ++ expand_b = 0x80 * magnitude; ++ } else { ++ expand_a = (0x0c * 0xaaaa) + 0x06 * (magnitude - 0xaaaa); ++ expand_b = (0x80 * 0xaaaa) + 0xff * (magnitude - 0xaaaa); ++ } + + value[0] = 0xfe; + value[1] = 0x0d; +- value[2] = magnitude >> 13; +- value[3] = magnitude >> 13; +- value[4] = magnitude >> 8; ++ value[2] = expand_a / 0xaaaa; ++ value[3] = expand_a / 0xaaaa; ++ value[4] = expand_b / 0xaaaa; + value[5] = 0x00; + value[6] = 0x00; + diff --git a/queue-3.12/hid-hid-lg4ff-switch-autocentering-off-when-strength-is-set-to-zero.patch b/queue-3.12/hid-hid-lg4ff-switch-autocentering-off-when-strength-is-set-to-zero.patch new file mode 100644 index 00000000000..bfe7f9b4ca3 --- /dev/null +++ b/queue-3.12/hid-hid-lg4ff-switch-autocentering-off-when-strength-is-set-to-zero.patch @@ -0,0 +1,63 @@ +From d2c02da549b468bbb28e67d269bd3c9e10683ff5 Mon Sep 17 00:00:00 2001 +From: Simon Wood +Date: Wed, 6 Nov 2013 12:30:41 -0700 +Subject: HID:hid-lg4ff: Switch autocentering off when strength is set to zero. + +From: Simon Wood + +commit d2c02da549b468bbb28e67d269bd3c9e10683ff5 upstream. + +When the autocenter is set to zero, this patch issues a command to +totally disable the autocenter - this results in less resistance +in the wheel. + +Reported-by: Elias Vanderstuyft +Signed-off-by: Simon Wood +Signed-off-by: Jiri Kosina +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/hid/hid-lg4ff.c | 25 +++++++++++++++++++++++++ + 1 file changed, 25 insertions(+) + +--- a/drivers/hid/hid-lg4ff.c ++++ b/drivers/hid/hid-lg4ff.c +@@ -220,6 +220,20 @@ static void hid_lg4ff_set_autocenter_def + __s32 *value = report->field[0]->value; + __u32 expand_a, expand_b; + ++ /* De-activate Auto-Center */ ++ if (magnitude == 0) { ++ value[0] = 0xf5; ++ value[1] = 0x00; ++ value[2] = 0x00; ++ value[3] = 0x00; ++ value[4] = 0x00; ++ value[5] = 0x00; ++ value[6] = 0x00; ++ ++ hid_hw_request(hid, report, HID_REQ_SET_REPORT); ++ return; ++ } ++ + if (magnitude <= 0xaaaa) { + expand_a = 0x0c * magnitude; + expand_b = 0x80 * magnitude; +@@ -236,6 +250,17 @@ static void hid_lg4ff_set_autocenter_def + value[5] = 0x00; + value[6] = 0x00; + ++ hid_hw_request(hid, report, HID_REQ_SET_REPORT); ++ ++ /* Activate Auto-Center */ ++ value[0] = 0x14; ++ value[1] = 0x00; ++ value[2] = 0x00; ++ value[3] = 0x00; ++ value[4] = 0x00; ++ value[5] = 0x00; ++ value[6] = 0x00; ++ + hid_hw_request(hid, report, HID_REQ_SET_REPORT); + } + diff --git a/queue-3.12/hid-hid-multitouch-add-support-for-sis-panels.patch b/queue-3.12/hid-hid-multitouch-add-support-for-sis-panels.patch new file mode 100644 index 00000000000..c67faff2fbd --- /dev/null +++ b/queue-3.12/hid-hid-multitouch-add-support-for-sis-panels.patch @@ -0,0 +1,85 @@ +From a6802e008e19845fd9669511b895f7515ef9c48b Mon Sep 17 00:00:00 2001 +From: Forest Bond +Date: Mon, 21 Oct 2013 12:38:49 -0400 +Subject: HID: hid-multitouch: add support for SiS panels + +From: Forest Bond + +commit a6802e008e19845fd9669511b895f7515ef9c48b upstream. + +Add support for SiS multitouch panels. + +Signed-off-by: Forest Bond +Signed-off-by: Jiri Kosina +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/hid/Kconfig | 1 + + drivers/hid/hid-core.c | 2 ++ + drivers/hid/hid-ids.h | 4 ++++ + drivers/hid/hid-multitouch.c | 8 ++++++++ + drivers/hid/usbhid/hid-quirks.c | 2 ++ + 5 files changed, 17 insertions(+) + +--- a/drivers/hid/Kconfig ++++ b/drivers/hid/Kconfig +@@ -455,6 +455,7 @@ config HID_MULTITOUCH + - Pixcir dual touch panels + - Quanta panels + - eGalax dual-touch panels, including the Joojoo and Wetab tablets ++ - SiS multitouch panels + - Stantum multitouch panels + - Touch International Panels + - Unitec Panels +--- a/drivers/hid/hid-core.c ++++ b/drivers/hid/hid-core.c +@@ -1817,6 +1817,8 @@ static const struct hid_device_id hid_ha + { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_PS1000) }, + { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_IR_REMOTE) }, + { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_SIS2_TOUCH, USB_DEVICE_ID_SIS9200_TOUCH) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_SIS2_TOUCH, USB_DEVICE_ID_SIS817_TOUCH) }, + { HID_USB_DEVICE(USB_VENDOR_ID_SKYCABLE, USB_DEVICE_ID_SKYCABLE_WIRELESS_PRESENTER) }, + { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_BUZZ_CONTROLLER) }, + { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER) }, +--- a/drivers/hid/hid-ids.h ++++ b/drivers/hid/hid-ids.h +@@ -751,6 +751,10 @@ + #define USB_VENDOR_ID_SIGMATEL 0x066F + #define USB_DEVICE_ID_SIGMATEL_STMP3780 0x3780 + ++#define USB_VENDOR_ID_SIS2_TOUCH 0x0457 ++#define USB_DEVICE_ID_SIS9200_TOUCH 0x9200 ++#define USB_DEVICE_ID_SIS817_TOUCH 0x0817 ++ + #define USB_VENDOR_ID_SKYCABLE 0x1223 + #define USB_DEVICE_ID_SKYCABLE_WIRELESS_PRESENTER 0x3F07 + +--- a/drivers/hid/hid-multitouch.c ++++ b/drivers/hid/hid-multitouch.c +@@ -1299,6 +1299,14 @@ static const struct hid_device_id mt_dev + MT_USB_DEVICE(USB_VENDOR_ID_QUANTA, + USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3008) }, + ++ /* SiS panels */ ++ { .driver_data = MT_CLS_DEFAULT, ++ HID_USB_DEVICE(USB_VENDOR_ID_SIS2_TOUCH, ++ USB_DEVICE_ID_SIS9200_TOUCH) }, ++ { .driver_data = MT_CLS_DEFAULT, ++ HID_USB_DEVICE(USB_VENDOR_ID_SIS2_TOUCH, ++ USB_DEVICE_ID_SIS817_TOUCH) }, ++ + /* Stantum panels */ + { .driver_data = MT_CLS_CONFIDENCE, + MT_USB_DEVICE(USB_VENDOR_ID_STANTUM, +--- a/drivers/hid/usbhid/hid-quirks.c ++++ b/drivers/hid/usbhid/hid-quirks.c +@@ -84,6 +84,8 @@ static const struct hid_blacklist { + { USB_VENDOR_ID_REALTEK, USB_DEVICE_ID_REALTEK_READER, HID_QUIRK_NO_INIT_REPORTS }, + { USB_VENDOR_ID_SENNHEISER, USB_DEVICE_ID_SENNHEISER_BTD500USB, HID_QUIRK_NOGET }, + { USB_VENDOR_ID_SIGMATEL, USB_DEVICE_ID_SIGMATEL_STMP3780, HID_QUIRK_NOGET }, ++ { USB_VENDOR_ID_SIS2_TOUCH, USB_DEVICE_ID_SIS9200_TOUCH, HID_QUIRK_NOGET }, ++ { USB_VENDOR_ID_SIS2_TOUCH, USB_DEVICE_ID_SIS817_TOUCH, HID_QUIRK_NOGET }, + { USB_VENDOR_ID_SUN, USB_DEVICE_ID_RARITAN_KVM_DONGLE, HID_QUIRK_NOGET }, + { USB_VENDOR_ID_SYMBOL, USB_DEVICE_ID_SYMBOL_SCANNER_1, HID_QUIRK_NOGET }, + { USB_VENDOR_ID_SYMBOL, USB_DEVICE_ID_SYMBOL_SCANNER_2, HID_QUIRK_NOGET }, diff --git a/queue-3.12/hid-hid-sensor-hub-fix-report-size.patch b/queue-3.12/hid-hid-sensor-hub-fix-report-size.patch new file mode 100644 index 00000000000..aa42082a6da --- /dev/null +++ b/queue-3.12/hid-hid-sensor-hub-fix-report-size.patch @@ -0,0 +1,63 @@ +From d4b1bba76171cb783e32441b28462fe841073ed8 Mon Sep 17 00:00:00 2001 +From: Srinivas Pandruvada +Date: Sat, 26 Oct 2013 10:04:09 -0700 +Subject: HID: hid-sensor-hub: fix report size + +From: Srinivas Pandruvada + +commit d4b1bba76171cb783e32441b28462fe841073ed8 upstream. + +Most of the hid sensor field size is reported in report_size field +in the report descriptor. For rotation fusion sensor the quaternion +data is 16 byte field, the report size was set to 4 and report +count field is set to 4. So the total size is 16 bytes. But the current +driver has a bug and not taking account for report count field. This +causes user space to see only 4 bytes of data sent via IIO interface. +The number of bytes in a field needs to take account of report_count +field. Need to multiply report_size and report_count to get total +number of bytes. + +Signed-off-by: Srinivas Pandruvada +Signed-off-by: Jiri Kosina +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/hid/hid-sensor-hub.c | 13 ++++++++----- + 1 file changed, 8 insertions(+), 5 deletions(-) + +--- a/drivers/hid/hid-sensor-hub.c ++++ b/drivers/hid/hid-sensor-hub.c +@@ -326,7 +326,8 @@ int sensor_hub_input_get_attribute_info( + field->logical == attr_usage_id) { + sensor_hub_fill_attr_info(info, i, report->id, + field->unit, field->unit_exponent, +- field->report_size); ++ field->report_size * ++ field->report_count); + ret = 0; + } else { + for (j = 0; j < field->maxusage; ++j) { +@@ -338,7 +339,8 @@ int sensor_hub_input_get_attribute_info( + i, report->id, + field->unit, + field->unit_exponent, +- field->report_size); ++ field->report_size * ++ field->report_count); + ret = 0; + break; + } +@@ -425,9 +427,10 @@ static int sensor_hub_raw_event(struct h + hid_dbg(hdev, "%d collection_index:%x hid:%x sz:%x\n", + i, report->field[i]->usage->collection_index, + report->field[i]->usage->hid, +- report->field[i]->report_size/8); +- +- sz = report->field[i]->report_size/8; ++ (report->field[i]->report_size * ++ report->field[i]->report_count)/8); ++ sz = (report->field[i]->report_size * ++ report->field[i]->report_count)/8; + if (pdata->pending.status && pdata->pending.attr_usage_id == + report->field[i]->usage->hid) { + hid_dbg(hdev, "data was pending ...\n"); diff --git a/queue-3.12/hid-kye-add-report-fixup-for-genius-manticore-keyboard.patch b/queue-3.12/hid-kye-add-report-fixup-for-genius-manticore-keyboard.patch new file mode 100644 index 00000000000..b369dbdddd2 --- /dev/null +++ b/queue-3.12/hid-kye-add-report-fixup-for-genius-manticore-keyboard.patch @@ -0,0 +1,65 @@ +From 4a2c94c9b6c03af61b04993340bd9559e2277de4 Mon Sep 17 00:00:00 2001 +From: Benjamin Tissoires +Date: Wed, 20 Nov 2013 09:49:41 -0500 +Subject: HID: kye: Add report fixup for Genius Manticore Keyboard + +From: Benjamin Tissoires + +commit 4a2c94c9b6c03af61b04993340bd9559e2277de4 upstream. + +Genius Manticore Keyboard presents the same problem in its report +descriptors than Genius Gila Gaming Mouse and Genius Imperator Keyboard. +Use the same fixup. + +Reported-and-tested-by: Adam Kulagowski +Signed-off-by: Benjamin Tissoires +Signed-off-by: Jiri Kosina +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/hid/hid-core.c | 1 + + drivers/hid/hid-ids.h | 1 + + drivers/hid/hid-kye.c | 5 +++++ + 3 files changed, 7 insertions(+) + +--- a/drivers/hid/hid-core.c ++++ b/drivers/hid/hid-core.c +@@ -1723,6 +1723,7 @@ static const struct hid_device_id hid_ha + { HID_USB_DEVICE(USB_VENDOR_ID_KENSINGTON, USB_DEVICE_ID_KS_SLIMBLADE) }, + { HID_USB_DEVICE(USB_VENDOR_ID_KEYTOUCH, USB_DEVICE_ID_KEYTOUCH_IEC) }, + { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_GILA_GAMING_MOUSE) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_MANTICORE) }, + { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_GX_IMPERATOR) }, + { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_ERGO_525V) }, + { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_I405X) }, +--- a/drivers/hid/hid-ids.h ++++ b/drivers/hid/hid-ids.h +@@ -488,6 +488,7 @@ + #define USB_VENDOR_ID_KYE 0x0458 + #define USB_DEVICE_ID_KYE_ERGO_525V 0x0087 + #define USB_DEVICE_ID_GENIUS_GILA_GAMING_MOUSE 0x0138 ++#define USB_DEVICE_ID_GENIUS_MANTICORE 0x0153 + #define USB_DEVICE_ID_GENIUS_GX_IMPERATOR 0x4018 + #define USB_DEVICE_ID_KYE_GPEN_560 0x5003 + #define USB_DEVICE_ID_KYE_EASYPEN_I405X 0x5010 +--- a/drivers/hid/hid-kye.c ++++ b/drivers/hid/hid-kye.c +@@ -341,6 +341,9 @@ static __u8 *kye_report_fixup(struct hid + case USB_DEVICE_ID_GENIUS_GX_IMPERATOR: + rdesc = kye_consumer_control_fixup(hdev, rdesc, rsize, 83, + "Genius Gx Imperator Keyboard"); ++ case USB_DEVICE_ID_GENIUS_MANTICORE: ++ rdesc = kye_consumer_control_fixup(hdev, rdesc, rsize, 104, ++ "Genius Manticore Keyboard"); + break; + } + return rdesc; +@@ -439,6 +442,8 @@ static const struct hid_device_id kye_de + USB_DEVICE_ID_GENIUS_GILA_GAMING_MOUSE) }, + { HID_USB_DEVICE(USB_VENDOR_ID_KYE, + USB_DEVICE_ID_GENIUS_GX_IMPERATOR) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_KYE, ++ USB_DEVICE_ID_GENIUS_MANTICORE) }, + { } + }; + MODULE_DEVICE_TABLE(hid, kye_devices); diff --git a/queue-3.12/hid-lg-fix-reportdescriptor-for-logitech-formula-vibration.patch b/queue-3.12/hid-lg-fix-reportdescriptor-for-logitech-formula-vibration.patch new file mode 100644 index 00000000000..ed18167c5fb --- /dev/null +++ b/queue-3.12/hid-lg-fix-reportdescriptor-for-logitech-formula-vibration.patch @@ -0,0 +1,121 @@ +From 7f50547059bd55ac6a98c29fd1989421bdc36ec9 Mon Sep 17 00:00:00 2001 +From: Simon Wood +Date: Thu, 10 Oct 2013 08:20:12 -0600 +Subject: HID: lg: fix ReportDescriptor for Logitech Formula Vibration + +From: Simon Wood + +commit 7f50547059bd55ac6a98c29fd1989421bdc36ec9 upstream. + +By default the Logitech Formula Vibration presents a combined accel/brake +axis ('Y'). This patch modifies the HID descriptor to present seperate +accel/brake axes ('Y' and 'Z'). + +Signed-off-by: Simon Wood +Signed-off-by: Jiri Kosina +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/hid/hid-lg.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 77 insertions(+) + +--- a/drivers/hid/hid-lg.c ++++ b/drivers/hid/hid-lg.c +@@ -45,6 +45,7 @@ + /* Size of the original descriptors of the Driving Force (and Pro) wheels */ + #define DF_RDESC_ORIG_SIZE 130 + #define DFP_RDESC_ORIG_SIZE 97 ++#define FV_RDESC_ORIG_SIZE 130 + #define MOMO_RDESC_ORIG_SIZE 87 + + /* Fixed report descriptors for Logitech Driving Force (and Pro) +@@ -170,6 +171,73 @@ static __u8 dfp_rdesc_fixed[] = { + 0xC0 /* End Collection */ + }; + ++static __u8 fv_rdesc_fixed[] = { ++0x05, 0x01, /* Usage Page (Desktop), */ ++0x09, 0x04, /* Usage (Joystik), */ ++0xA1, 0x01, /* Collection (Application), */ ++0xA1, 0x02, /* Collection (Logical), */ ++0x95, 0x01, /* Report Count (1), */ ++0x75, 0x0A, /* Report Size (10), */ ++0x15, 0x00, /* Logical Minimum (0), */ ++0x26, 0xFF, 0x03, /* Logical Maximum (1023), */ ++0x35, 0x00, /* Physical Minimum (0), */ ++0x46, 0xFF, 0x03, /* Physical Maximum (1023), */ ++0x09, 0x30, /* Usage (X), */ ++0x81, 0x02, /* Input (Variable), */ ++0x95, 0x0C, /* Report Count (12), */ ++0x75, 0x01, /* Report Size (1), */ ++0x25, 0x01, /* Logical Maximum (1), */ ++0x45, 0x01, /* Physical Maximum (1), */ ++0x05, 0x09, /* Usage Page (Button), */ ++0x19, 0x01, /* Usage Minimum (01h), */ ++0x29, 0x0C, /* Usage Maximum (0Ch), */ ++0x81, 0x02, /* Input (Variable), */ ++0x95, 0x02, /* Report Count (2), */ ++0x06, 0x00, 0xFF, /* Usage Page (FF00h), */ ++0x09, 0x01, /* Usage (01h), */ ++0x81, 0x02, /* Input (Variable), */ ++0x09, 0x02, /* Usage (02h), */ ++0x26, 0xFF, 0x00, /* Logical Maximum (255), */ ++0x46, 0xFF, 0x00, /* Physical Maximum (255), */ ++0x95, 0x01, /* Report Count (1), */ ++0x75, 0x08, /* Report Size (8), */ ++0x81, 0x02, /* Input (Variable), */ ++0x05, 0x01, /* Usage Page (Desktop), */ ++0x25, 0x07, /* Logical Maximum (7), */ ++0x46, 0x3B, 0x01, /* Physical Maximum (315), */ ++0x75, 0x04, /* Report Size (4), */ ++0x65, 0x14, /* Unit (Degrees), */ ++0x09, 0x39, /* Usage (Hat Switch), */ ++0x81, 0x42, /* Input (Variable, Null State), */ ++0x75, 0x01, /* Report Size (1), */ ++0x95, 0x04, /* Report Count (4), */ ++0x65, 0x00, /* Unit, */ ++0x06, 0x00, 0xFF, /* Usage Page (FF00h), */ ++0x09, 0x01, /* Usage (01h), */ ++0x25, 0x01, /* Logical Maximum (1), */ ++0x45, 0x01, /* Physical Maximum (1), */ ++0x81, 0x02, /* Input (Variable), */ ++0x05, 0x01, /* Usage Page (Desktop), */ ++0x95, 0x01, /* Report Count (1), */ ++0x75, 0x08, /* Report Size (8), */ ++0x26, 0xFF, 0x00, /* Logical Maximum (255), */ ++0x46, 0xFF, 0x00, /* Physical Maximum (255), */ ++0x09, 0x31, /* Usage (Y), */ ++0x81, 0x02, /* Input (Variable), */ ++0x09, 0x32, /* Usage (Z), */ ++0x81, 0x02, /* Input (Variable), */ ++0xC0, /* End Collection, */ ++0xA1, 0x02, /* Collection (Logical), */ ++0x26, 0xFF, 0x00, /* Logical Maximum (255), */ ++0x46, 0xFF, 0x00, /* Physical Maximum (255), */ ++0x95, 0x07, /* Report Count (7), */ ++0x75, 0x08, /* Report Size (8), */ ++0x09, 0x03, /* Usage (03h), */ ++0x91, 0x02, /* Output (Variable), */ ++0xC0, /* End Collection, */ ++0xC0 /* End Collection */ ++}; ++ + static __u8 momo_rdesc_fixed[] = { + 0x05, 0x01, /* Usage Page (Desktop), */ + 0x09, 0x04, /* Usage (Joystik), */ +@@ -275,6 +343,15 @@ static __u8 *lg_report_fixup(struct hid_ + } + break; + ++ case USB_DEVICE_ID_LOGITECH_VIBRATION_WHEEL: ++ if (*rsize == FV_RDESC_ORIG_SIZE) { ++ hid_info(hdev, ++ "fixing up Logitech Formula Vibration report descriptor\n"); ++ rdesc = fv_rdesc_fixed; ++ *rsize = sizeof(fv_rdesc_fixed); ++ } ++ break; ++ + case USB_DEVICE_ID_LOGITECH_DFP_WHEEL: + if (*rsize == DFP_RDESC_ORIG_SIZE) { + hid_info(hdev, diff --git a/queue-3.12/hid-logitech-lg2ff-add-ids-for-formula-vibration-feedback-wheel.patch b/queue-3.12/hid-logitech-lg2ff-add-ids-for-formula-vibration-feedback-wheel.patch new file mode 100644 index 00000000000..774b3fedbbd --- /dev/null +++ b/queue-3.12/hid-logitech-lg2ff-add-ids-for-formula-vibration-feedback-wheel.patch @@ -0,0 +1,101 @@ +From bd04363d3990c0727b7512a79a08c68436878bb0 Mon Sep 17 00:00:00 2001 +From: Elias Vanderstuyft +Date: Mon, 7 Oct 2013 19:48:12 +0300 +Subject: HID: logitech - lg2ff: Add IDs for Formula Vibration Feedback Wheel + +From: Elias Vanderstuyft + +commit bd04363d3990c0727b7512a79a08c68436878bb0 upstream. + +Add USB IDs for Logitech Formula Vibration Feedback Wheel (046d:ca04). + +The lg2ff force feedback subdriver is used for vibration and +HID_GD_MULTIAXIS is set to avoid deadzone like other Logitech wheels. + +Kconfig description etc are also updated accordingly. + +Signed-off-by: Elias Vanderstuyft +[anssi.hannula@iki.fi: added description and CCs] +Signed-off-by: Anssi Hannula +Signed-off-by: Simon Wood +Signed-off-by: Jiri Kosina +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/hid/Kconfig | 8 +++++--- + drivers/hid/hid-core.c | 1 + + drivers/hid/hid-ids.h | 1 + + drivers/hid/hid-lg.c | 3 +++ + drivers/hid/hid-lg2ff.c | 2 +- + 5 files changed, 11 insertions(+), 4 deletions(-) + +--- a/drivers/hid/Kconfig ++++ b/drivers/hid/Kconfig +@@ -369,12 +369,14 @@ config LOGITECH_FF + force feedback. + + config LOGIRUMBLEPAD2_FF +- bool "Logitech RumblePad/Rumblepad 2 force feedback support" ++ bool "Logitech force feedback support (variant 2)" + depends on HID_LOGITECH + select INPUT_FF_MEMLESS + help +- Say Y here if you want to enable force feedback support for Logitech +- RumblePad and Rumblepad 2 devices. ++ Say Y here if you want to enable force feedback support for: ++ - Logitech RumblePad ++ - Logitech Rumblepad 2 ++ - Logitech Formula Vibration Feedback Wheel + + config LOGIG940_FF + bool "Logitech Flight System G940 force feedback support" +--- a/drivers/hid/hid-core.c ++++ b/drivers/hid/hid-core.c +@@ -1754,6 +1754,7 @@ static const struct hid_device_id hid_ha + { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_FLIGHT_SYSTEM_G940) }, + { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL) }, + { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_VIBRATION_WHEEL) }, + { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_DFP_WHEEL) }, + { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_DFGT_WHEEL) }, + { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL) }, +--- a/drivers/hid/hid-ids.h ++++ b/drivers/hid/hid-ids.h +@@ -576,6 +576,7 @@ + #define USB_DEVICE_ID_DINOVO_EDGE 0xc714 + #define USB_DEVICE_ID_DINOVO_MINI 0xc71f + #define USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2 0xca03 ++#define USB_DEVICE_ID_LOGITECH_VIBRATION_WHEEL 0xca04 + + #define USB_VENDOR_ID_LUMIO 0x202e + #define USB_DEVICE_ID_CRYSTALTOUCH 0x0006 +--- a/drivers/hid/hid-lg.c ++++ b/drivers/hid/hid-lg.c +@@ -492,6 +492,7 @@ static int lg_input_mapped(struct hid_de + case USB_DEVICE_ID_LOGITECH_G27_WHEEL: + case USB_DEVICE_ID_LOGITECH_WII_WHEEL: + case USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2: ++ case USB_DEVICE_ID_LOGITECH_VIBRATION_WHEEL: + field->application = HID_GD_MULTIAXIS; + break; + default: +@@ -639,6 +640,8 @@ static const struct hid_device_id lg_dev + .driver_data = LG_NOGET | LG_FF4 }, + { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2), + .driver_data = LG_FF4 }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_VIBRATION_WHEEL), ++ .driver_data = LG_FF2 }, + { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL), + .driver_data = LG_FF4 }, + { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_DFGT_WHEEL), +--- a/drivers/hid/hid-lg2ff.c ++++ b/drivers/hid/hid-lg2ff.c +@@ -95,7 +95,7 @@ int lg2ff_init(struct hid_device *hid) + + hid_hw_request(hid, report, HID_REQ_SET_REPORT); + +- hid_info(hid, "Force feedback for Logitech RumblePad/Rumblepad 2 by Anssi Hannula \n"); ++ hid_info(hid, "Force feedback for Logitech variant 2 rumble devices by Anssi Hannula \n"); + + return 0; + } diff --git a/queue-3.12/hid-multicouh-add-pid-vid-to-support-1-new-wistron-optical-touch-device.patch b/queue-3.12/hid-multicouh-add-pid-vid-to-support-1-new-wistron-optical-touch-device.patch new file mode 100644 index 00000000000..681aaeccef3 --- /dev/null +++ b/queue-3.12/hid-multicouh-add-pid-vid-to-support-1-new-wistron-optical-touch-device.patch @@ -0,0 +1,58 @@ +From bf9d121efc18c30caa2caad85358cf9408eca117 Mon Sep 17 00:00:00 2001 +From: KaiChung Cheng +Date: Thu, 21 Nov 2013 10:04:30 +0100 +Subject: HID: multicouh: add PID VID to support 1 new Wistron optical touch device + +From: KaiChung Cheng + +commit bf9d121efc18c30caa2caad85358cf9408eca117 upstream. + +This patch adds PID VID to support for the Wistron Inc. Optical touch panel. + +Signed-off-by: KaiChung Cheng +Signed-off-by: Jiri Kosina +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/hid/Kconfig | 1 + + drivers/hid/hid-ids.h | 3 +++ + drivers/hid/hid-multitouch.c | 6 ++++++ + 3 files changed, 10 insertions(+) + +--- a/drivers/hid/Kconfig ++++ b/drivers/hid/Kconfig +@@ -459,6 +459,7 @@ config HID_MULTITOUCH + - Stantum multitouch panels + - Touch International Panels + - Unitec Panels ++ - Wistron optical touch panels + - XAT optical touch panels + - Xiroku optical touch panels + - Zytronic touch panels +--- a/drivers/hid/hid-ids.h ++++ b/drivers/hid/hid-ids.h +@@ -898,6 +898,9 @@ + #define USB_DEVICE_ID_SUPER_DUAL_BOX_PRO 0x8802 + #define USB_DEVICE_ID_SUPER_JOY_BOX_5_PRO 0x8804 + ++#define USB_VENDOR_ID_WISTRON 0x0fb8 ++#define USB_DEVICE_ID_WISTRON_OPTICAL_TOUCH 0x1109 ++ + #define USB_VENDOR_ID_X_TENSIONS 0x1ae7 + #define USB_DEVICE_ID_SPEEDLINK_VAD_CEZANNE 0x9001 + +--- a/drivers/hid/hid-multitouch.c ++++ b/drivers/hid/hid-multitouch.c +@@ -1335,6 +1335,12 @@ static const struct hid_device_id mt_dev + { .driver_data = MT_CLS_NSMU, + MT_USB_DEVICE(USB_VENDOR_ID_UNITEC, + USB_DEVICE_ID_UNITEC_USB_TOUCH_0A19) }, ++ ++ /* Wistron panels */ ++ { .driver_data = MT_CLS_NSMU, ++ MT_USB_DEVICE(USB_VENDOR_ID_WISTRON, ++ USB_DEVICE_ID_WISTRON_OPTICAL_TOUCH) }, ++ + /* XAT */ + { .driver_data = MT_CLS_NSMU, + MT_USB_DEVICE(USB_VENDOR_ID_XAT, diff --git a/queue-3.12/hid-multitouch-fix-generaltouch-products-and-add-more-pids.patch b/queue-3.12/hid-multitouch-fix-generaltouch-products-and-add-more-pids.patch new file mode 100644 index 00000000000..3de4ecf30ed --- /dev/null +++ b/queue-3.12/hid-multitouch-fix-generaltouch-products-and-add-more-pids.patch @@ -0,0 +1,79 @@ +From 7b2262920db2b98fe2cd32cde52141f02fd9eecf Mon Sep 17 00:00:00 2001 +From: Luosong +Date: Wed, 2 Oct 2013 11:20:00 +0200 +Subject: HID: multitouch: Fix GeneralTouch products and add more PIDs + +From: Luosong + +commit 7b2262920db2b98fe2cd32cde52141f02fd9eecf upstream. + +GeneralTouch products should use the quirk SLOT_IS_CONTACTID +instead of SLOT_IS_CONTACTNUMBER. + +Adding PIDs 0101,e100,0102,0106,010a from the new products. + +Tested on new and older products by GeneralTouch engineers. + +Signed-off-by: Luosong +Signed-off-by: Benjamin Tissoires +Signed-off-by: Jiri Kosina +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/hid/hid-ids.h | 5 +++++ + drivers/hid/hid-multitouch.c | 19 +++++++++++++++++-- + 2 files changed, 22 insertions(+), 2 deletions(-) + +--- a/drivers/hid/hid-ids.h ++++ b/drivers/hid/hid-ids.h +@@ -332,6 +332,11 @@ + #define USB_VENDOR_ID_GENERAL_TOUCH 0x0dfc + #define USB_DEVICE_ID_GENERAL_TOUCH_WIN7_TWOFINGERS 0x0003 + #define USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PWT_TENFINGERS 0x0100 ++#define USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_0101 0x0101 ++#define USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_0102 0x0102 ++#define USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_0106 0x0106 ++#define USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_010A 0x010a ++#define USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_E100 0xe100 + + #define USB_VENDOR_ID_GLAB 0x06c2 + #define USB_DEVICE_ID_4_PHIDGETSERVO_30 0x0038 +--- a/drivers/hid/hid-multitouch.c ++++ b/drivers/hid/hid-multitouch.c +@@ -250,12 +250,12 @@ static struct mt_class mt_classes[] = { + { .name = MT_CLS_GENERALTOUCH_TWOFINGERS, + .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP | + MT_QUIRK_VALID_IS_INRANGE | +- MT_QUIRK_SLOT_IS_CONTACTNUMBER, ++ MT_QUIRK_SLOT_IS_CONTACTID, + .maxcontacts = 2 + }, + { .name = MT_CLS_GENERALTOUCH_PWT_TENFINGERS, + .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP | +- MT_QUIRK_SLOT_IS_CONTACTNUMBER ++ MT_QUIRK_SLOT_IS_CONTACTID + }, + + { .name = MT_CLS_FLATFROG, +@@ -1173,6 +1173,21 @@ static const struct hid_device_id mt_dev + { .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS, + MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, + USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PWT_TENFINGERS) }, ++ { .driver_data = MT_CLS_GENERALTOUCH_TWOFINGERS, ++ MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, ++ USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_0101) }, ++ { .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS, ++ MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, ++ USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_0102) }, ++ { .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS, ++ MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, ++ USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_0106) }, ++ { .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS, ++ MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, ++ USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_010A) }, ++ { .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS, ++ MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, ++ USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_E100) }, + + /* Gametel game controller */ + { .driver_data = MT_CLS_NSMU, diff --git a/queue-3.12/series b/queue-3.12/series index 3bdfd007a58..45e0627975f 100644 --- a/queue-3.12/series +++ b/queue-3.12/series @@ -172,3 +172,14 @@ mfd-lpc_ich-add-device-ids-for-intel-wildcat-point-lp-pch.patch mfd-rtsx-modify-rts5249_optimize_phy.patch cpufreq-highbank-cpufreq-enable-midway-ecx-2000.patch sh-ecovec-fixup-compile-error-on-sdhi.patch +gfs2-fix-ref-count-bug-relating-to-atomic_open.patch +hid-multitouch-fix-generaltouch-products-and-add-more-pids.patch +hid-logitech-lg2ff-add-ids-for-formula-vibration-feedback-wheel.patch +hid-hid-multitouch-add-support-for-sis-panels.patch +hid-hid-sensor-hub-fix-report-size.patch +hid-multicouh-add-pid-vid-to-support-1-new-wistron-optical-touch-device.patch +hid-kye-add-report-fixup-for-genius-manticore-keyboard.patch +hid-hid-lg4ff-scale-autocentering-force-properly-on-logitech-wheel.patch +hid-hid-lg4ff-switch-autocentering-off-when-strength-is-set-to-zero.patch +hid-hid-lg4ff-initialize-device-properties-before-we-touch-autocentering.patch +hid-lg-fix-reportdescriptor-for-logitech-formula-vibration.patch