diff options
| -rw-r--r-- | drivers/hid/hid-apple.c | 7 | ||||
| -rw-r--r-- | drivers/hid/hid-core.c | 4 | ||||
| -rw-r--r-- | drivers/hid/hid-ids.h | 6 | ||||
| -rw-r--r-- | drivers/hid/hid-samsung.c | 25 | ||||
| -rw-r--r-- | drivers/hid/hid-wacom.c | 4 |
5 files changed, 40 insertions, 6 deletions
diff --git a/drivers/hid/hid-apple.c b/drivers/hid/hid-apple.c index 4b96e7a898cf..5b4d66dc1a05 100644 --- a/drivers/hid/hid-apple.c +++ b/drivers/hid/hid-apple.c | |||
| @@ -431,6 +431,13 @@ static const struct hid_device_id apple_devices[] = { | |||
| 431 | .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD }, | 431 | .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD }, |
| 432 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS), | 432 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS), |
| 433 | .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, | 433 | .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, |
| 434 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI), | ||
| 435 | .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN }, | ||
| 436 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO), | ||
| 437 | .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN | | ||
| 438 | APPLE_ISO_KEYBOARD }, | ||
| 439 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS), | ||
| 440 | .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN }, | ||
| 434 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY), | 441 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY), |
| 435 | .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN }, | 442 | .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN }, |
| 436 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY), | 443 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY), |
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index 80792d38d25c..eabe5f87c6c1 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c | |||
| @@ -1285,6 +1285,9 @@ static const struct hid_device_id hid_blacklist[] = { | |||
| 1285 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI) }, | 1285 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI) }, |
| 1286 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ISO) }, | 1286 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ISO) }, |
| 1287 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS) }, | 1287 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS) }, |
| 1288 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI) }, | ||
| 1289 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO) }, | ||
| 1290 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS) }, | ||
| 1288 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) }, | 1291 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) }, |
| 1289 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) }, | 1292 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) }, |
| 1290 | { HID_USB_DEVICE(USB_VENDOR_ID_BELKIN, USB_DEVICE_ID_FLIP_KVM) }, | 1293 | { HID_USB_DEVICE(USB_VENDOR_ID_BELKIN, USB_DEVICE_ID_FLIP_KVM) }, |
| @@ -1553,6 +1556,7 @@ static const struct hid_device_id hid_ignore_list[] = { | |||
| 1553 | { HID_USB_DEVICE(USB_VENDOR_ID_DELORME, USB_DEVICE_ID_DELORME_EARTHMATE) }, | 1556 | { HID_USB_DEVICE(USB_VENDOR_ID_DELORME, USB_DEVICE_ID_DELORME_EARTHMATE) }, |
| 1554 | { HID_USB_DEVICE(USB_VENDOR_ID_DELORME, USB_DEVICE_ID_DELORME_EM_LT20) }, | 1557 | { HID_USB_DEVICE(USB_VENDOR_ID_DELORME, USB_DEVICE_ID_DELORME_EM_LT20) }, |
| 1555 | { HID_USB_DEVICE(USB_VENDOR_ID_ESSENTIAL_REALITY, USB_DEVICE_ID_ESSENTIAL_REALITY_P5) }, | 1558 | { HID_USB_DEVICE(USB_VENDOR_ID_ESSENTIAL_REALITY, USB_DEVICE_ID_ESSENTIAL_REALITY_P5) }, |
| 1559 | { HID_USB_DEVICE(USB_VENDOR_ID_ETT, USB_DEVICE_ID_TC5UH) }, | ||
| 1556 | { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0001) }, | 1560 | { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0001) }, |
| 1557 | { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0002) }, | 1561 | { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0002) }, |
| 1558 | { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0003) }, | 1562 | { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0003) }, |
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h index 3839340e293a..010368e649ed 100644 --- a/drivers/hid/hid-ids.h +++ b/drivers/hid/hid-ids.h | |||
| @@ -88,6 +88,9 @@ | |||
| 88 | #define USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI 0x0236 | 88 | #define USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI 0x0236 |
| 89 | #define USB_DEVICE_ID_APPLE_WELLSPRING3_ISO 0x0237 | 89 | #define USB_DEVICE_ID_APPLE_WELLSPRING3_ISO 0x0237 |
| 90 | #define USB_DEVICE_ID_APPLE_WELLSPRING3_JIS 0x0238 | 90 | #define USB_DEVICE_ID_APPLE_WELLSPRING3_JIS 0x0238 |
| 91 | #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI 0x0239 | ||
| 92 | #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO 0x023a | ||
| 93 | #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS 0x023b | ||
| 91 | #define USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY 0x030a | 94 | #define USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY 0x030a |
| 92 | #define USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY 0x030b | 95 | #define USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY 0x030b |
| 93 | #define USB_DEVICE_ID_APPLE_ATV_IRCONTROL 0x8241 | 96 | #define USB_DEVICE_ID_APPLE_ATV_IRCONTROL 0x8241 |
| @@ -166,6 +169,9 @@ | |||
| 166 | #define USB_VENDOR_ID_ESSENTIAL_REALITY 0x0d7f | 169 | #define USB_VENDOR_ID_ESSENTIAL_REALITY 0x0d7f |
| 167 | #define USB_DEVICE_ID_ESSENTIAL_REALITY_P5 0x0100 | 170 | #define USB_DEVICE_ID_ESSENTIAL_REALITY_P5 0x0100 |
| 168 | 171 | ||
| 172 | #define USB_VENDOR_ID_ETT 0x0664 | ||
| 173 | #define USB_DEVICE_ID_TC5UH 0x0309 | ||
| 174 | |||
| 169 | #define USB_VENDOR_ID_EZKEY 0x0518 | 175 | #define USB_VENDOR_ID_EZKEY 0x0518 |
| 170 | #define USB_DEVICE_ID_BTC_8193 0x0002 | 176 | #define USB_DEVICE_ID_BTC_8193 0x0002 |
| 171 | 177 | ||
diff --git a/drivers/hid/hid-samsung.c b/drivers/hid/hid-samsung.c index 5b222eed0692..510dd1340597 100644 --- a/drivers/hid/hid-samsung.c +++ b/drivers/hid/hid-samsung.c | |||
| @@ -39,7 +39,17 @@ | |||
| 39 | * | 39 | * |
| 40 | * 3. 135 byte report descriptor | 40 | * 3. 135 byte report descriptor |
| 41 | * Report #4 has an array field with logical range 0..17 instead of 1..14. | 41 | * Report #4 has an array field with logical range 0..17 instead of 1..14. |
| 42 | * | ||
| 43 | * 4. 171 byte report descriptor | ||
| 44 | * Report #3 has an array field with logical range 0..1 instead of 1..3. | ||
| 42 | */ | 45 | */ |
| 46 | static inline void samsung_dev_trace(struct hid_device *hdev, | ||
| 47 | unsigned int rsize) | ||
| 48 | { | ||
| 49 | dev_info(&hdev->dev, "fixing up Samsung IrDA %d byte report " | ||
| 50 | "descriptor\n", rsize); | ||
| 51 | } | ||
| 52 | |||
| 43 | static void samsung_report_fixup(struct hid_device *hdev, __u8 *rdesc, | 53 | static void samsung_report_fixup(struct hid_device *hdev, __u8 *rdesc, |
| 44 | unsigned int rsize) | 54 | unsigned int rsize) |
| 45 | { | 55 | { |
| @@ -47,8 +57,7 @@ static void samsung_report_fixup(struct hid_device *hdev, __u8 *rdesc, | |||
| 47 | rdesc[177] == 0x75 && rdesc[178] == 0x30 && | 57 | rdesc[177] == 0x75 && rdesc[178] == 0x30 && |
| 48 | rdesc[179] == 0x95 && rdesc[180] == 0x01 && | 58 | rdesc[179] == 0x95 && rdesc[180] == 0x01 && |
| 49 | rdesc[182] == 0x40) { | 59 | rdesc[182] == 0x40) { |
| 50 | dev_info(&hdev->dev, "fixing up Samsung IrDA %d byte report " | 60 | samsung_dev_trace(hdev, 184); |
| 51 | "descriptor\n", 184); | ||
| 52 | rdesc[176] = 0xff; | 61 | rdesc[176] = 0xff; |
| 53 | rdesc[178] = 0x08; | 62 | rdesc[178] = 0x08; |
| 54 | rdesc[180] = 0x06; | 63 | rdesc[180] = 0x06; |
| @@ -56,17 +65,21 @@ static void samsung_report_fixup(struct hid_device *hdev, __u8 *rdesc, | |||
| 56 | } else | 65 | } else |
| 57 | if (rsize == 203 && rdesc[192] == 0x15 && rdesc[193] == 0x0 && | 66 | if (rsize == 203 && rdesc[192] == 0x15 && rdesc[193] == 0x0 && |
| 58 | rdesc[194] == 0x25 && rdesc[195] == 0x12) { | 67 | rdesc[194] == 0x25 && rdesc[195] == 0x12) { |
| 59 | dev_info(&hdev->dev, "fixing up Samsung IrDA %d byte report " | 68 | samsung_dev_trace(hdev, 203); |
| 60 | "descriptor\n", 203); | ||
| 61 | rdesc[193] = 0x1; | 69 | rdesc[193] = 0x1; |
| 62 | rdesc[195] = 0xf; | 70 | rdesc[195] = 0xf; |
| 63 | } else | 71 | } else |
| 64 | if (rsize == 135 && rdesc[124] == 0x15 && rdesc[125] == 0x0 && | 72 | if (rsize == 135 && rdesc[124] == 0x15 && rdesc[125] == 0x0 && |
| 65 | rdesc[126] == 0x25 && rdesc[127] == 0x11) { | 73 | rdesc[126] == 0x25 && rdesc[127] == 0x11) { |
| 66 | dev_info(&hdev->dev, "fixing up Samsung IrDA %d byte report " | 74 | samsung_dev_trace(hdev, 135); |
| 67 | "descriptor\n", 135); | ||
| 68 | rdesc[125] = 0x1; | 75 | rdesc[125] = 0x1; |
| 69 | rdesc[127] = 0xe; | 76 | rdesc[127] = 0xe; |
| 77 | } else | ||
| 78 | if (rsize == 171 && rdesc[160] == 0x15 && rdesc[161] == 0x0 && | ||
| 79 | rdesc[162] == 0x25 && rdesc[163] == 0x01) { | ||
| 80 | samsung_dev_trace(hdev, 171); | ||
| 81 | rdesc[161] = 0x1; | ||
| 82 | rdesc[163] = 0x3; | ||
| 70 | } | 83 | } |
| 71 | } | 84 | } |
| 72 | 85 | ||
diff --git a/drivers/hid/hid-wacom.c b/drivers/hid/hid-wacom.c index 747542172242..12dcda529201 100644 --- a/drivers/hid/hid-wacom.c +++ b/drivers/hid/hid-wacom.c | |||
| @@ -142,6 +142,7 @@ static int wacom_raw_event(struct hid_device *hdev, struct hid_report *report, | |||
| 142 | wdata->butstate = rw; | 142 | wdata->butstate = rw; |
| 143 | input_report_key(input, BTN_0, rw & 0x02); | 143 | input_report_key(input, BTN_0, rw & 0x02); |
| 144 | input_report_key(input, BTN_1, rw & 0x01); | 144 | input_report_key(input, BTN_1, rw & 0x01); |
| 145 | input_report_key(input, BTN_TOOL_FINGER, 0xf0); | ||
| 145 | input_event(input, EV_MSC, MSC_SERIAL, 0xf0); | 146 | input_event(input, EV_MSC, MSC_SERIAL, 0xf0); |
| 146 | input_sync(input); | 147 | input_sync(input); |
| 147 | } | 148 | } |
| @@ -196,6 +197,9 @@ static int wacom_probe(struct hid_device *hdev, | |||
| 196 | /* Pad */ | 197 | /* Pad */ |
| 197 | input->evbit[0] |= BIT(EV_MSC); | 198 | input->evbit[0] |= BIT(EV_MSC); |
| 198 | input->mscbit[0] |= BIT(MSC_SERIAL); | 199 | input->mscbit[0] |= BIT(MSC_SERIAL); |
| 200 | set_bit(BTN_0, input->keybit); | ||
| 201 | set_bit(BTN_1, input->keybit); | ||
| 202 | set_bit(BTN_TOOL_FINGER, input->keybit); | ||
| 199 | 203 | ||
| 200 | /* Distance, rubber and mouse */ | 204 | /* Distance, rubber and mouse */ |
| 201 | input->absbit[0] |= BIT(ABS_DISTANCE); | 205 | input->absbit[0] |= BIT(ABS_DISTANCE); |
