aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiri Kosina <jkosina@suse.cz>2017-11-15 05:06:22 -0500
committerJiri Kosina <jkosina@suse.cz>2017-11-15 05:06:22 -0500
commit47dd6b019edd9fc17ddc5b8c16690c80266cdbde (patch)
tree029654a40f39c4c9ad26a1728e455222200f20f1
parent5cc619db5c34146ee821acd08382b9d78579b52e (diff)
parent339ee3fcbdab736adbc30b7a3d675005c61a2a40 (diff)
Merge branch 'for-4.15/asus' into for-linus
- Asus laptop fixes (fn keys, backlight), from Mustafa Kuscu and Maxime Bellengé
-rw-r--r--drivers/hid/hid-asus.c31
-rw-r--r--drivers/hid/hid-core.c2
-rw-r--r--drivers/hid/hid-ids.h1
3 files changed, 32 insertions, 2 deletions
diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c
index 50c294be8324..1bb7b63b3150 100644
--- a/drivers/hid/hid-asus.c
+++ b/drivers/hid/hid-asus.c
@@ -67,6 +67,7 @@ MODULE_DESCRIPTION("Asus HID Keyboard and TouchPad");
67#define QUIRK_USE_KBD_BACKLIGHT BIT(5) 67#define QUIRK_USE_KBD_BACKLIGHT BIT(5)
68#define QUIRK_T100_KEYBOARD BIT(6) 68#define QUIRK_T100_KEYBOARD BIT(6)
69#define QUIRK_T100CHI BIT(7) 69#define QUIRK_T100CHI BIT(7)
70#define QUIRK_G752_KEYBOARD BIT(8)
70 71
71#define I2C_KEYBOARD_QUIRKS (QUIRK_FIX_NOTEBOOK_REPORT | \ 72#define I2C_KEYBOARD_QUIRKS (QUIRK_FIX_NOTEBOOK_REPORT | \
72 QUIRK_NO_INIT_REPORTS | \ 73 QUIRK_NO_INIT_REPORTS | \
@@ -670,6 +671,11 @@ static void asus_remove(struct hid_device *hdev)
670 hid_hw_stop(hdev); 671 hid_hw_stop(hdev);
671} 672}
672 673
674static const __u8 asus_g752_fixed_rdesc[] = {
675 0x19, 0x00, /* Usage Minimum (0x00) */
676 0x2A, 0xFF, 0x00, /* Usage Maximum (0xFF) */
677};
678
673static __u8 *asus_report_fixup(struct hid_device *hdev, __u8 *rdesc, 679static __u8 *asus_report_fixup(struct hid_device *hdev, __u8 *rdesc,
674 unsigned int *rsize) 680 unsigned int *rsize)
675{ 681{
@@ -708,6 +714,27 @@ static __u8 *asus_report_fixup(struct hid_device *hdev, __u8 *rdesc,
708 rdesc[391] = 0xff; 714 rdesc[391] = 0xff;
709 rdesc[402] = 0x00; 715 rdesc[402] = 0x00;
710 } 716 }
717 if (drvdata->quirks & QUIRK_G752_KEYBOARD &&
718 *rsize == 75 && rdesc[61] == 0x15 && rdesc[62] == 0x00) {
719 /* report is missing usage mninum and maximum */
720 __u8 *new_rdesc;
721 size_t new_size = *rsize + sizeof(asus_g752_fixed_rdesc);
722
723 new_rdesc = devm_kzalloc(&hdev->dev, new_size, GFP_KERNEL);
724 if (new_rdesc == NULL)
725 return rdesc;
726
727 hid_info(hdev, "Fixing up Asus G752 keyb report descriptor\n");
728 /* copy the valid part */
729 memcpy(new_rdesc, rdesc, 61);
730 /* insert missing part */
731 memcpy(new_rdesc + 61, asus_g752_fixed_rdesc, sizeof(asus_g752_fixed_rdesc));
732 /* copy remaining data */
733 memcpy(new_rdesc + 61 + sizeof(asus_g752_fixed_rdesc), rdesc + 61, *rsize - 61);
734
735 *rsize = new_size;
736 rdesc = new_rdesc;
737 }
711 738
712 return rdesc; 739 return rdesc;
713} 740}
@@ -718,10 +745,12 @@ static const struct hid_device_id asus_devices[] = {
718 { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK, 745 { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK,
719 USB_DEVICE_ID_ASUSTEK_I2C_TOUCHPAD), I2C_TOUCHPAD_QUIRKS }, 746 USB_DEVICE_ID_ASUSTEK_I2C_TOUCHPAD), I2C_TOUCHPAD_QUIRKS },
720 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, 747 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK,
721 USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1) }, 748 USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1), QUIRK_USE_KBD_BACKLIGHT },
722 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, 749 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK,
723 USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD2), QUIRK_USE_KBD_BACKLIGHT }, 750 USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD2), QUIRK_USE_KBD_BACKLIGHT },
724 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, 751 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK,
752 USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD3), QUIRK_G752_KEYBOARD },
753 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK,
725 USB_DEVICE_ID_ASUSTEK_T100_KEYBOARD), 754 USB_DEVICE_ID_ASUSTEK_T100_KEYBOARD),
726 QUIRK_T100_KEYBOARD | QUIRK_NO_CONSUMER_USAGES }, 755 QUIRK_T100_KEYBOARD | QUIRK_NO_CONSUMER_USAGES },
727 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_ASUS_AK1D) }, 756 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_ASUS_AK1D) },
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index 1961aa689f32..d3f983a4245a 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -1982,6 +1982,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
1982 { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_I2C_TOUCHPAD) }, 1982 { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_I2C_TOUCHPAD) },
1983 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1) }, 1983 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1) },
1984 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD2) }, 1984 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD2) },
1985 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD3) },
1985 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_T100_KEYBOARD) }, 1986 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_T100_KEYBOARD) },
1986 { HID_USB_DEVICE(USB_VENDOR_ID_JESS, USB_DEVICE_ID_ASUS_MD_5112) }, 1987 { HID_USB_DEVICE(USB_VENDOR_ID_JESS, USB_DEVICE_ID_ASUS_MD_5112) },
1987 { HID_USB_DEVICE(USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_ASUS_MD_5110) }, 1988 { HID_USB_DEVICE(USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_ASUS_MD_5110) },
@@ -3125,4 +3126,3 @@ MODULE_AUTHOR("Andreas Gal");
3125MODULE_AUTHOR("Vojtech Pavlik"); 3126MODULE_AUTHOR("Vojtech Pavlik");
3126MODULE_AUTHOR("Jiri Kosina"); 3127MODULE_AUTHOR("Jiri Kosina");
3127MODULE_LICENSE("GPL"); 3128MODULE_LICENSE("GPL");
3128
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index 06697af9e6c1..c9f7c74b3b60 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -185,6 +185,7 @@
185#define USB_DEVICE_ID_ASUSTEK_I2C_TOUCHPAD 0x0101 185#define USB_DEVICE_ID_ASUSTEK_I2C_TOUCHPAD 0x0101
186#define USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1 0x1854 186#define USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1 0x1854
187#define USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD2 0x1837 187#define USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD2 0x1837
188#define USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD3 0x1822
188 189
189#define USB_VENDOR_ID_ATEN 0x0557 190#define USB_VENDOR_ID_ATEN 0x0557
190#define USB_DEVICE_ID_ATEN_UC100KM 0x2004 191#define USB_DEVICE_ID_ATEN_UC100KM 0x2004