--- /dev/null
+From ea0341e071527d5cec350917b01ab901af09d758 Mon Sep 17 00:00:00 2001
+From: Steven Whitehouse <swhiteho@redhat.com>
+Date: Thu, 21 Nov 2013 18:47:57 +0000
+Subject: GFS2: Fix ref count bug relating to atomic_open
+
+From: Steven Whitehouse <swhiteho@redhat.com>
+
+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 <swhiteho@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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;
+ }
--- /dev/null
+From 114a55cf9dd1576e7ac56189832cd4d7dc56c218 Mon Sep 17 00:00:00 2001
+From: Simon Wood <simon@mungewell.org>
+Date: Wed, 6 Nov 2013 12:30:43 -0700
+Subject: HID:hid-lg4ff: Initialize device properties before we touch autocentering.
+
+From: Simon Wood <simon@mungewell.org>
+
+commit 114a55cf9dd1576e7ac56189832cd4d7dc56c218 upstream.
+
+Re-arrange code slightly to ensure that device properties are configured
+before calling auto-center command.
+
+Reported-by: Michal MalĂ˝ <madcatxster@prifuk.cz>
+Signed-off-by: Simon Wood <simon@mungewell.org>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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)
--- /dev/null
+From f8c231569a7a455dfa1907294a46ba52b3aa8859 Mon Sep 17 00:00:00 2001
+From: Simon Wood <simon@mungewell.org>
+Date: Wed, 6 Nov 2013 12:30:40 -0700
+Subject: HID:hid-lg4ff: Scale autocentering force properly on Logitech wheel
+
+From: Simon Wood <simon@mungewell.org>
+
+commit f8c231569a7a455dfa1907294a46ba52b3aa8859 upstream.
+
+Adjust the scaling and lineartity to match that of the Windows
+driver (from MOMO testing).
+
+Reported-by: Elias Vanderstuyft <elias.vds@gmail.com>
+Signed-off-by: Simon Wood <simon@mungewell.org>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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;
+
--- /dev/null
+From d2c02da549b468bbb28e67d269bd3c9e10683ff5 Mon Sep 17 00:00:00 2001
+From: Simon Wood <simon@mungewell.org>
+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 <simon@mungewell.org>
+
+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 <elias.vds@gmail.com>
+Signed-off-by: Simon Wood <simon@mungewell.org>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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);
+ }
+
--- /dev/null
+From a6802e008e19845fd9669511b895f7515ef9c48b Mon Sep 17 00:00:00 2001
+From: Forest Bond <forest.bond@rapidrollout.com>
+Date: Mon, 21 Oct 2013 12:38:49 -0400
+Subject: HID: hid-multitouch: add support for SiS panels
+
+From: Forest Bond <forest.bond@rapidrollout.com>
+
+commit a6802e008e19845fd9669511b895f7515ef9c48b upstream.
+
+Add support for SiS multitouch panels.
+
+Signed-off-by: Forest Bond <forest.bond@rapidrollout.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 },
--- /dev/null
+From d4b1bba76171cb783e32441b28462fe841073ed8 Mon Sep 17 00:00:00 2001
+From: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
+Date: Sat, 26 Oct 2013 10:04:09 -0700
+Subject: HID: hid-sensor-hub: fix report size
+
+From: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
+
+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 <srinivas.pandruvada@linux.intel.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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");
--- /dev/null
+From 4a2c94c9b6c03af61b04993340bd9559e2277de4 Mon Sep 17 00:00:00 2001
+From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
+Date: Wed, 20 Nov 2013 09:49:41 -0500
+Subject: HID: kye: Add report fixup for Genius Manticore Keyboard
+
+From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
+
+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 <fidor@fidor.org>
+Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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);
--- /dev/null
+From 7f50547059bd55ac6a98c29fd1989421bdc36ec9 Mon Sep 17 00:00:00 2001
+From: Simon Wood <simon@mungewell.org>
+Date: Thu, 10 Oct 2013 08:20:12 -0600
+Subject: HID: lg: fix ReportDescriptor for Logitech Formula Vibration
+
+From: Simon Wood <simon@mungewell.org>
+
+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 <simon@mungewell.org>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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,
--- /dev/null
+From bd04363d3990c0727b7512a79a08c68436878bb0 Mon Sep 17 00:00:00 2001
+From: Elias Vanderstuyft <Elias.vds@gmail.com>
+Date: Mon, 7 Oct 2013 19:48:12 +0300
+Subject: HID: logitech - lg2ff: Add IDs for Formula Vibration Feedback Wheel
+
+From: Elias Vanderstuyft <Elias.vds@gmail.com>
+
+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 <Elias.vds@gmail.com>
+[anssi.hannula@iki.fi: added description and CCs]
+Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
+Signed-off-by: Simon Wood <simon@mungewell.org>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 <anssi.hannula@gmail.com>\n");
++ hid_info(hid, "Force feedback for Logitech variant 2 rumble devices by Anssi Hannula <anssi.hannula@gmail.com>\n");
+
+ return 0;
+ }
--- /dev/null
+From bf9d121efc18c30caa2caad85358cf9408eca117 Mon Sep 17 00:00:00 2001
+From: KaiChung Cheng <kenny_cheng@wistron.com>
+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 <kenny_cheng@wistron.com>
+
+commit bf9d121efc18c30caa2caad85358cf9408eca117 upstream.
+
+This patch adds PID VID to support for the Wistron Inc. Optical touch panel.
+
+Signed-off-by: KaiChung Cheng <kenny_cheng@wistron.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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,
--- /dev/null
+From 7b2262920db2b98fe2cd32cde52141f02fd9eecf Mon Sep 17 00:00:00 2001
+From: Luosong <android@generaltouch.com>
+Date: Wed, 2 Oct 2013 11:20:00 +0200
+Subject: HID: multitouch: Fix GeneralTouch products and add more PIDs
+
+From: Luosong <android@generaltouch.com>
+
+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 <android@generaltouch.com>
+Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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,
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