aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2017-05-15 03:31:41 -0400
committerJiri Kosina <jkosina@suse.cz>2017-05-22 07:54:47 -0400
commit76dd1fbebbaebab294dc09230960238746b883b1 (patch)
tree489c8470c5d196bd1e42ccd45f964ea92f0edc25
parent0bb7a37f8d15e5fb5d21776875f9fbc74e10753a (diff)
HID: asus: Add support for T100 keyboard
The keyboard dock used with the Asus Transformer T100 series, uses the same vendor-defined 0xff31 usage-page as some other Asus keyboards. But with a small twist, it has a small descriptor bug which needs to be fixed up for things to work. This commit adds the USB-ID for this keyboard to the hid-asus driver and makes asus_report_fixup fix the descriptor issue, fixing various special function keys on this keyboard not working. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
-rw-r--r--drivers/hid/hid-asus.c10
-rw-r--r--drivers/hid/hid-core.c1
-rw-r--r--drivers/hid/hid-ids.h1
3 files changed, 12 insertions, 0 deletions
diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c
index 16df6cc90235..101ab2e63d18 100644
--- a/drivers/hid/hid-asus.c
+++ b/drivers/hid/hid-asus.c
@@ -69,6 +69,7 @@ MODULE_DESCRIPTION("Asus HID Keyboard and TouchPad");
69#define QUIRK_IS_MULTITOUCH BIT(3) 69#define QUIRK_IS_MULTITOUCH BIT(3)
70#define QUIRK_NO_CONSUMER_USAGES BIT(4) 70#define QUIRK_NO_CONSUMER_USAGES BIT(4)
71#define QUIRK_USE_KBD_BACKLIGHT BIT(5) 71#define QUIRK_USE_KBD_BACKLIGHT BIT(5)
72#define QUIRK_T100_KEYBOARD BIT(6)
72 73
73#define I2C_KEYBOARD_QUIRKS (QUIRK_FIX_NOTEBOOK_REPORT | \ 74#define I2C_KEYBOARD_QUIRKS (QUIRK_FIX_NOTEBOOK_REPORT | \
74 QUIRK_NO_INIT_REPORTS | \ 75 QUIRK_NO_INIT_REPORTS | \
@@ -548,6 +549,12 @@ static __u8 *asus_report_fixup(struct hid_device *hdev, __u8 *rdesc,
548 hid_info(hdev, "Fixing up Asus notebook report descriptor\n"); 549 hid_info(hdev, "Fixing up Asus notebook report descriptor\n");
549 rdesc[55] = 0xdd; 550 rdesc[55] = 0xdd;
550 } 551 }
552 if (drvdata->quirks & QUIRK_T100_KEYBOARD &&
553 *rsize == 76 && rdesc[73] == 0x81 && rdesc[74] == 0x01) {
554 hid_info(hdev, "Fixing up Asus T100 keyb report descriptor\n");
555 rdesc[74] &= ~HID_MAIN_ITEM_CONSTANT;
556 }
557
551 return rdesc; 558 return rdesc;
552} 559}
553 560
@@ -560,6 +567,9 @@ static const struct hid_device_id asus_devices[] = {
560 USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1) }, 567 USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1) },
561 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, 568 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK,
562 USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD2), QUIRK_USE_KBD_BACKLIGHT }, 569 USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD2), QUIRK_USE_KBD_BACKLIGHT },
570 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK,
571 USB_DEVICE_ID_ASUSTEK_T100_KEYBOARD),
572 QUIRK_T100_KEYBOARD | QUIRK_NO_CONSUMER_USAGES },
563 { } 573 { }
564}; 574};
565MODULE_DEVICE_TABLE(hid, asus_devices); 575MODULE_DEVICE_TABLE(hid, asus_devices);
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index 38d041510e1d..04cee65531d7 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -1855,6 +1855,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
1855 { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_I2C_TOUCHPAD) }, 1855 { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_I2C_TOUCHPAD) },
1856 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1) }, 1856 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1) },
1857 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD2) }, 1857 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD2) },
1858 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_T100_KEYBOARD) },
1858 { HID_USB_DEVICE(USB_VENDOR_ID_AUREAL, USB_DEVICE_ID_AUREAL_W01RN) }, 1859 { HID_USB_DEVICE(USB_VENDOR_ID_AUREAL, USB_DEVICE_ID_AUREAL_W01RN) },
1859 { HID_USB_DEVICE(USB_VENDOR_ID_BELKIN, USB_DEVICE_ID_FLIP_KVM) }, 1860 { HID_USB_DEVICE(USB_VENDOR_ID_BELKIN, USB_DEVICE_ID_FLIP_KVM) },
1860 { HID_USB_DEVICE(USB_VENDOR_ID_BETOP_2185BFM, 0x2208) }, 1861 { HID_USB_DEVICE(USB_VENDOR_ID_BETOP_2185BFM, 0x2208) },
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index 8e8a1baee090..8ca1e8ce0af2 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -173,6 +173,7 @@
173#define USB_VENDOR_ID_ASUSTEK 0x0b05 173#define USB_VENDOR_ID_ASUSTEK 0x0b05
174#define USB_DEVICE_ID_ASUSTEK_LCM 0x1726 174#define USB_DEVICE_ID_ASUSTEK_LCM 0x1726
175#define USB_DEVICE_ID_ASUSTEK_LCM2 0x175b 175#define USB_DEVICE_ID_ASUSTEK_LCM2 0x175b
176#define USB_DEVICE_ID_ASUSTEK_T100_KEYBOARD 0x17e0
176#define USB_DEVICE_ID_ASUSTEK_I2C_KEYBOARD 0x8585 177#define USB_DEVICE_ID_ASUSTEK_I2C_KEYBOARD 0x8585
177#define USB_DEVICE_ID_ASUSTEK_I2C_TOUCHPAD 0x0101 178#define USB_DEVICE_ID_ASUSTEK_I2C_TOUCHPAD 0x0101
178#define USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1 0x1854 179#define USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1 0x1854