diff options
| -rw-r--r-- | drivers/hid/hid-chicony.c | 26 | ||||
| -rw-r--r-- | drivers/hid/hid-core.c | 1 | ||||
| -rw-r--r-- | drivers/hid/hid-ids.h | 1 |
3 files changed, 28 insertions, 0 deletions
diff --git a/drivers/hid/hid-chicony.c b/drivers/hid/hid-chicony.c index b613d5a79684..bc3cec199fee 100644 --- a/drivers/hid/hid-chicony.c +++ b/drivers/hid/hid-chicony.c | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | #include <linux/input.h> | 20 | #include <linux/input.h> |
| 21 | #include <linux/hid.h> | 21 | #include <linux/hid.h> |
| 22 | #include <linux/module.h> | 22 | #include <linux/module.h> |
| 23 | #include <linux/usb.h> | ||
| 23 | 24 | ||
| 24 | #include "hid-ids.h" | 25 | #include "hid-ids.h" |
| 25 | 26 | ||
| @@ -57,10 +58,34 @@ static int ch_input_mapping(struct hid_device *hdev, struct hid_input *hi, | |||
| 57 | return 1; | 58 | return 1; |
| 58 | } | 59 | } |
| 59 | 60 | ||
| 61 | static __u8 *ch_switch12_report_fixup(struct hid_device *hdev, __u8 *rdesc, | ||
| 62 | unsigned int *rsize) | ||
| 63 | { | ||
| 64 | struct usb_interface *intf = to_usb_interface(hdev->dev.parent); | ||
| 65 | |||
| 66 | if (intf->cur_altsetting->desc.bInterfaceNumber == 1) { | ||
| 67 | /* Change usage maximum and logical maximum from 0x7fff to | ||
| 68 | * 0x2fff, so they don't exceed HID_MAX_USAGES */ | ||
| 69 | switch (hdev->product) { | ||
| 70 | case USB_DEVICE_ID_CHICONY_ACER_SWITCH12: | ||
| 71 | if (*rsize >= 128 && rdesc[64] == 0xff && rdesc[65] == 0x7f | ||
| 72 | && rdesc[69] == 0xff && rdesc[70] == 0x7f) { | ||
| 73 | hid_info(hdev, "Fixing up report descriptor\n"); | ||
| 74 | rdesc[65] = rdesc[70] = 0x2f; | ||
| 75 | } | ||
| 76 | break; | ||
| 77 | } | ||
| 78 | |||
| 79 | } | ||
| 80 | return rdesc; | ||
| 81 | } | ||
| 82 | |||
| 83 | |||
| 60 | static const struct hid_device_id ch_devices[] = { | 84 | static const struct hid_device_id ch_devices[] = { |
| 61 | { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_TACTICAL_PAD) }, | 85 | { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_TACTICAL_PAD) }, |
| 62 | { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS2) }, | 86 | { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS2) }, |
| 63 | { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_AK1D) }, | 87 | { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_AK1D) }, |
| 88 | { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_ACER_SWITCH12) }, | ||
| 64 | { } | 89 | { } |
| 65 | }; | 90 | }; |
| 66 | MODULE_DEVICE_TABLE(hid, ch_devices); | 91 | MODULE_DEVICE_TABLE(hid, ch_devices); |
| @@ -68,6 +93,7 @@ MODULE_DEVICE_TABLE(hid, ch_devices); | |||
| 68 | static struct hid_driver ch_driver = { | 93 | static struct hid_driver ch_driver = { |
| 69 | .name = "chicony", | 94 | .name = "chicony", |
| 70 | .id_table = ch_devices, | 95 | .id_table = ch_devices, |
| 96 | .report_fixup = ch_switch12_report_fixup, | ||
| 71 | .input_mapping = ch_input_mapping, | 97 | .input_mapping = ch_input_mapping, |
| 72 | }; | 98 | }; |
| 73 | module_hid_driver(ch_driver); | 99 | module_hid_driver(ch_driver); |
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index 157c62775053..a77d30388b4d 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c | |||
| @@ -1804,6 +1804,7 @@ static const struct hid_device_id hid_have_special_driver[] = { | |||
| 1804 | { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS) }, | 1804 | { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS) }, |
| 1805 | { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS2) }, | 1805 | { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS2) }, |
| 1806 | { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_AK1D) }, | 1806 | { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_AK1D) }, |
| 1807 | { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_ACER_SWITCH12) }, | ||
| 1807 | { HID_USB_DEVICE(USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_PRODIKEYS_PCMIDI) }, | 1808 | { HID_USB_DEVICE(USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_PRODIKEYS_PCMIDI) }, |
| 1808 | { HID_USB_DEVICE(USB_VENDOR_ID_CYGNAL, USB_DEVICE_ID_CYGNAL_CP2112) }, | 1809 | { HID_USB_DEVICE(USB_VENDOR_ID_CYGNAL, USB_DEVICE_ID_CYGNAL_CP2112) }, |
| 1809 | { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_1) }, | 1810 | { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_1) }, |
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h index b04b0820d816..7c712dff2ca1 100644 --- a/drivers/hid/hid-ids.h +++ b/drivers/hid/hid-ids.h | |||
| @@ -230,6 +230,7 @@ | |||
| 230 | #define USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE 0x1053 | 230 | #define USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE 0x1053 |
| 231 | #define USB_DEVICE_ID_CHICONY_WIRELESS2 0x1123 | 231 | #define USB_DEVICE_ID_CHICONY_WIRELESS2 0x1123 |
| 232 | #define USB_DEVICE_ID_CHICONY_AK1D 0x1125 | 232 | #define USB_DEVICE_ID_CHICONY_AK1D 0x1125 |
| 233 | #define USB_DEVICE_ID_CHICONY_ACER_SWITCH12 0x1421 | ||
| 233 | 234 | ||
| 234 | #define USB_VENDOR_ID_CHUNGHWAT 0x2247 | 235 | #define USB_VENDOR_ID_CHUNGHWAT 0x2247 |
| 235 | #define USB_DEVICE_ID_CHUNGHWAT_MULTITOUCH 0x0001 | 236 | #define USB_DEVICE_ID_CHUNGHWAT_MULTITOUCH 0x0001 |
