diff options
-rw-r--r-- | drivers/hid/hid-core.c | 17 | ||||
-rw-r--r-- | drivers/hid/hid-ids.h | 7 | ||||
-rw-r--r-- | drivers/hid/hid-multitouch.c | 5 | ||||
-rw-r--r-- | drivers/hid/hid-sensor-hub.c | 6 | ||||
-rw-r--r-- | drivers/hid/usbhid/hid-quirks.c | 1 |
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 | ||
1254 | static int hid_report_len(struct hid_report *report) | 1264 | static 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 | }; |