diff options
| author | Jiri Kosina <jkosina@suse.cz> | 2017-11-15 05:06:22 -0500 |
|---|---|---|
| committer | Jiri Kosina <jkosina@suse.cz> | 2017-11-15 05:06:22 -0500 |
| commit | 47dd6b019edd9fc17ddc5b8c16690c80266cdbde (patch) | |
| tree | 029654a40f39c4c9ad26a1728e455222200f20f1 | |
| parent | 5cc619db5c34146ee821acd08382b9d78579b52e (diff) | |
| parent | 339ee3fcbdab736adbc30b7a3d675005c61a2a40 (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.c | 31 | ||||
| -rw-r--r-- | drivers/hid/hid-core.c | 2 | ||||
| -rw-r--r-- | drivers/hid/hid-ids.h | 1 |
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 | ||
| 674 | static const __u8 asus_g752_fixed_rdesc[] = { | ||
| 675 | 0x19, 0x00, /* Usage Minimum (0x00) */ | ||
| 676 | 0x2A, 0xFF, 0x00, /* Usage Maximum (0xFF) */ | ||
| 677 | }; | ||
| 678 | |||
| 673 | static __u8 *asus_report_fixup(struct hid_device *hdev, __u8 *rdesc, | 679 | static __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"); | |||
| 3125 | MODULE_AUTHOR("Vojtech Pavlik"); | 3126 | MODULE_AUTHOR("Vojtech Pavlik"); |
| 3126 | MODULE_AUTHOR("Jiri Kosina"); | 3127 | MODULE_AUTHOR("Jiri Kosina"); |
| 3127 | MODULE_LICENSE("GPL"); | 3128 | MODULE_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 |
