Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Hans de Goede and committed by
Jiri Kosina
76dd1fbe 0bb7a37f

+12
+10
drivers/hid/hid-asus.c
··· 69 69 #define QUIRK_IS_MULTITOUCH BIT(3) 70 70 #define QUIRK_NO_CONSUMER_USAGES BIT(4) 71 71 #define QUIRK_USE_KBD_BACKLIGHT BIT(5) 72 + #define QUIRK_T100_KEYBOARD BIT(6) 72 73 73 74 #define I2C_KEYBOARD_QUIRKS (QUIRK_FIX_NOTEBOOK_REPORT | \ 74 75 QUIRK_NO_INIT_REPORTS | \ ··· 549 548 hid_info(hdev, "Fixing up Asus notebook report descriptor\n"); 550 549 rdesc[55] = 0xdd; 551 550 } 551 + if (drvdata->quirks & QUIRK_T100_KEYBOARD && 552 + *rsize == 76 && rdesc[73] == 0x81 && rdesc[74] == 0x01) { 553 + hid_info(hdev, "Fixing up Asus T100 keyb report descriptor\n"); 554 + rdesc[74] &= ~HID_MAIN_ITEM_CONSTANT; 555 + } 556 + 552 557 return rdesc; 553 558 } 554 559 ··· 567 560 USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1) }, 568 561 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, 569 562 USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD2), QUIRK_USE_KBD_BACKLIGHT }, 563 + { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, 564 + USB_DEVICE_ID_ASUSTEK_T100_KEYBOARD), 565 + QUIRK_T100_KEYBOARD | QUIRK_NO_CONSUMER_USAGES }, 570 566 { } 571 567 }; 572 568 MODULE_DEVICE_TABLE(hid, asus_devices);
+1
drivers/hid/hid-core.c
··· 1855 1855 { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_I2C_TOUCHPAD) }, 1856 1856 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1) }, 1857 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 1859 { HID_USB_DEVICE(USB_VENDOR_ID_AUREAL, USB_DEVICE_ID_AUREAL_W01RN) }, 1859 1860 { HID_USB_DEVICE(USB_VENDOR_ID_BELKIN, USB_DEVICE_ID_FLIP_KVM) }, 1860 1861 { HID_USB_DEVICE(USB_VENDOR_ID_BETOP_2185BFM, 0x2208) },
+1
drivers/hid/hid-ids.h
··· 173 173 #define USB_VENDOR_ID_ASUSTEK 0x0b05 174 174 #define USB_DEVICE_ID_ASUSTEK_LCM 0x1726 175 175 #define USB_DEVICE_ID_ASUSTEK_LCM2 0x175b 176 + #define USB_DEVICE_ID_ASUSTEK_T100_KEYBOARD 0x17e0 176 177 #define USB_DEVICE_ID_ASUSTEK_I2C_KEYBOARD 0x8585 177 178 #define USB_DEVICE_ID_ASUSTEK_I2C_TOUCHPAD 0x0101 178 179 #define USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1 0x1854