aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/hid/hid-core.c17
-rw-r--r--drivers/hid/hid-ids.h7
-rw-r--r--drivers/hid/hid-multitouch.c5
-rw-r--r--drivers/hid/hid-sensor-hub.c6
-rw-r--r--drivers/hid/usbhid/hid-quirks.c1
5 files changed, 30 insertions, 6 deletions
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index 3d9c6f8efc2a..77e040884769 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -842,7 +842,17 @@ struct hid_report *hid_validate_values(struct hid_device *hid,
842 * ->numbered being checked, which may not always be the case when 842 * ->numbered being checked, which may not always be the case when
843 * drivers go to access report values. 843 * drivers go to access report values.
844 */ 844 */
845 report = hid->report_enum[type].report_id_hash[id]; 845 if (id == 0) {
846 /*
847 * Validating on id 0 means we should examine the first
848 * report in the list.
849 */
850 report = list_entry(
851 hid->report_enum[type].report_list.next,
852 struct hid_report, list);
853 } else {
854 report = hid->report_enum[type].report_id_hash[id];
855 }
846 if (!report) { 856 if (!report) {
847 hid_err(hid, "missing %s %u\n", hid_report_names[type], id); 857 hid_err(hid, "missing %s %u\n", hid_report_names[type], id);
848 return NULL; 858 return NULL;
@@ -1253,7 +1263,8 @@ EXPORT_SYMBOL_GPL(hid_output_report);
1253 1263
1254static int hid_report_len(struct hid_report *report) 1264static int hid_report_len(struct hid_report *report)
1255{ 1265{
1256 return ((report->size - 1) >> 3) + 1 + (report->id > 0) + 7; 1266 /* equivalent to DIV_ROUND_UP(report->size, 8) + !!(report->id > 0) */
1267 return ((report->size - 1) >> 3) + 1 + (report->id > 0);
1257} 1268}
1258 1269
1259/* 1270/*
@@ -1266,7 +1277,7 @@ u8 *hid_alloc_report_buf(struct hid_report *report, gfp_t flags)
1266 * of implement() working on 8 byte chunks 1277 * of implement() working on 8 byte chunks
1267 */ 1278 */
1268 1279
1269 int len = hid_report_len(report); 1280 int len = hid_report_len(report) + 7;
1270 1281
1271 return kmalloc(len, flags); 1282 return kmalloc(len, flags);
1272} 1283}
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index 194528ffb9ad..6d00bb9366fa 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -301,6 +301,9 @@
301 301
302#define USB_VENDOR_ID_DREAM_CHEEKY 0x1d34 302#define USB_VENDOR_ID_DREAM_CHEEKY 0x1d34
303 303
304#define USB_VENDOR_ID_ELITEGROUP 0x03fc
305#define USB_DEVICE_ID_ELITEGROUP_05D8 0x05d8
306
304#define USB_VENDOR_ID_ELO 0x04E7 307#define USB_VENDOR_ID_ELO 0x04E7
305#define USB_DEVICE_ID_ELO_TS2515 0x0022 308#define USB_DEVICE_ID_ELO_TS2515 0x0022
306#define USB_DEVICE_ID_ELO_TS2700 0x0020 309#define USB_DEVICE_ID_ELO_TS2700 0x0020
@@ -843,6 +846,10 @@
843#define USB_DEVICE_ID_SYNAPTICS_LTS2 0x1d10 846#define USB_DEVICE_ID_SYNAPTICS_LTS2 0x1d10
844#define USB_DEVICE_ID_SYNAPTICS_HD 0x0ac3 847#define USB_DEVICE_ID_SYNAPTICS_HD 0x0ac3
845#define USB_DEVICE_ID_SYNAPTICS_QUAD_HD 0x1ac3 848#define USB_DEVICE_ID_SYNAPTICS_QUAD_HD 0x1ac3
849#define USB_DEVICE_ID_SYNAPTICS_TP_V103 0x5710
850
851#define USB_VENDOR_ID_TEXAS_INSTRUMENTS 0x2047
852#define USB_DEVICE_ID_TEXAS_INSTRUMENTS_LENOVO_YOGA 0x0855
846 853
847#define USB_VENDOR_ID_THINGM 0x27b8 854#define USB_VENDOR_ID_THINGM 0x27b8
848#define USB_DEVICE_ID_BLINK1 0x01ed 855#define USB_DEVICE_ID_BLINK1 0x01ed
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
index 35278e43c7a4..51e25b9407f2 100644
--- a/drivers/hid/hid-multitouch.c
+++ b/drivers/hid/hid-multitouch.c
@@ -1155,6 +1155,11 @@ static const struct hid_device_id mt_devices[] = {
1155 MT_USB_DEVICE(USB_VENDOR_ID_DWAV, 1155 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1156 USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001) }, 1156 USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001) },
1157 1157
1158 /* Elitegroup panel */
1159 { .driver_data = MT_CLS_SERIAL,
1160 MT_USB_DEVICE(USB_VENDOR_ID_ELITEGROUP,
1161 USB_DEVICE_ID_ELITEGROUP_05D8) },
1162
1158 /* Flatfrog Panels */ 1163 /* Flatfrog Panels */
1159 { .driver_data = MT_CLS_FLATFROG, 1164 { .driver_data = MT_CLS_FLATFROG,
1160 MT_USB_DEVICE(USB_VENDOR_ID_FLATFROG, 1165 MT_USB_DEVICE(USB_VENDOR_ID_FLATFROG,
diff --git a/drivers/hid/hid-sensor-hub.c b/drivers/hid/hid-sensor-hub.c
index 39bb6f253e23..a8d5c8faf8cf 100644
--- a/drivers/hid/hid-sensor-hub.c
+++ b/drivers/hid/hid-sensor-hub.c
@@ -705,9 +705,6 @@ static const struct hid_device_id sensor_hub_devices[] = {
705 { HID_DEVICE(HID_BUS_ANY, HID_GROUP_SENSOR_HUB, USB_VENDOR_ID_INTEL_1, 705 { HID_DEVICE(HID_BUS_ANY, HID_GROUP_SENSOR_HUB, USB_VENDOR_ID_INTEL_1,
706 USB_DEVICE_ID_INTEL_HID_SENSOR_1), 706 USB_DEVICE_ID_INTEL_HID_SENSOR_1),
707 .driver_data = HID_SENSOR_HUB_ENUM_QUIRK}, 707 .driver_data = HID_SENSOR_HUB_ENUM_QUIRK},
708 { HID_DEVICE(HID_BUS_ANY, HID_GROUP_SENSOR_HUB, USB_VENDOR_ID_STM_0,
709 USB_DEVICE_ID_STM_HID_SENSOR),
710 .driver_data = HID_SENSOR_HUB_ENUM_QUIRK},
711 { HID_DEVICE(HID_BUS_ANY, HID_GROUP_SENSOR_HUB, USB_VENDOR_ID_MICROSOFT, 708 { HID_DEVICE(HID_BUS_ANY, HID_GROUP_SENSOR_HUB, USB_VENDOR_ID_MICROSOFT,
712 USB_DEVICE_ID_MS_SURFACE_PRO_2), 709 USB_DEVICE_ID_MS_SURFACE_PRO_2),
713 .driver_data = HID_SENSOR_HUB_ENUM_QUIRK}, 710 .driver_data = HID_SENSOR_HUB_ENUM_QUIRK},
@@ -720,6 +717,9 @@ static const struct hid_device_id sensor_hub_devices[] = {
720 { HID_DEVICE(HID_BUS_ANY, HID_GROUP_SENSOR_HUB, USB_VENDOR_ID_STM_0, 717 { HID_DEVICE(HID_BUS_ANY, HID_GROUP_SENSOR_HUB, USB_VENDOR_ID_STM_0,
721 USB_DEVICE_ID_STM_HID_SENSOR_1), 718 USB_DEVICE_ID_STM_HID_SENSOR_1),
722 .driver_data = HID_SENSOR_HUB_ENUM_QUIRK}, 719 .driver_data = HID_SENSOR_HUB_ENUM_QUIRK},
720 { HID_DEVICE(HID_BUS_ANY, HID_GROUP_SENSOR_HUB, USB_VENDOR_ID_TEXAS_INSTRUMENTS,
721 USB_DEVICE_ID_TEXAS_INSTRUMENTS_LENOVO_YOGA),
722 .driver_data = HID_SENSOR_HUB_ENUM_QUIRK},
723 { HID_DEVICE(HID_BUS_ANY, HID_GROUP_SENSOR_HUB, HID_ANY_ID, 723 { HID_DEVICE(HID_BUS_ANY, HID_GROUP_SENSOR_HUB, HID_ANY_ID,
724 HID_ANY_ID) }, 724 HID_ANY_ID) },
725 { } 725 { }
diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
index ee0b2a8b3cc3..59badc10a08c 100644
--- a/drivers/hid/usbhid/hid-quirks.c
+++ b/drivers/hid/usbhid/hid-quirks.c
@@ -120,6 +120,7 @@ static const struct hid_blacklist {
120 { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_LTS2, HID_QUIRK_NO_INIT_REPORTS }, 120 { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_LTS2, HID_QUIRK_NO_INIT_REPORTS },
121 { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_HD, HID_QUIRK_NO_INIT_REPORTS }, 121 { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_HD, HID_QUIRK_NO_INIT_REPORTS },
122 { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_QUAD_HD, HID_QUIRK_NO_INIT_REPORTS }, 122 { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_QUAD_HD, HID_QUIRK_NO_INIT_REPORTS },
123 { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_TP_V103, HID_QUIRK_NO_INIT_REPORTS },
123 124
124 { 0, 0 } 125 { 0, 0 }
125}; 126};