mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid
Pull HID fixes from Jiri Kosina: - regression fixes for Wacom devices, from Aaron Armstrong Skomra and Ping Cheng - memory leak in hid-sony driver from Roderick Colenbrander - new device IDs support from Oscar Campos and Daniel Drake * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid: HID: wacom: generic: Wacom mouse is only provided for opaque tablets HID: corsair: Add driver Scimitar Pro RGB gaming mouse 1b1c:1b3e support to hid-corsair HID: corsair: support for K65-K70 Rapidfire and Scimitar Pro RGB HID: wacom: don't manually release resources for the EKR HID: wacom: Correct Intuos Pro 2 resolution HID: sony: Fix input device leak when connecting a DS4 twice using USB/BT HID: chicony: Add support for another ASUS Zen AiO keyboard
This commit is contained in:
commit
2c867ac395
9 changed files with 71 additions and 7 deletions
|
@ -175,11 +175,11 @@ config HID_CHERRY
|
||||||
Support for Cherry Cymotion keyboard.
|
Support for Cherry Cymotion keyboard.
|
||||||
|
|
||||||
config HID_CHICONY
|
config HID_CHICONY
|
||||||
tristate "Chicony Tactical pad"
|
tristate "Chicony devices"
|
||||||
depends on HID
|
depends on HID
|
||||||
default !EXPERT
|
default !EXPERT
|
||||||
---help---
|
---help---
|
||||||
Support for Chicony Tactical pad.
|
Support for Chicony Tactical pad and special keys on Chicony keyboards.
|
||||||
|
|
||||||
config HID_CORSAIR
|
config HID_CORSAIR
|
||||||
tristate "Corsair devices"
|
tristate "Corsair devices"
|
||||||
|
@ -190,6 +190,7 @@ config HID_CORSAIR
|
||||||
|
|
||||||
Supported devices:
|
Supported devices:
|
||||||
- Vengeance K90
|
- Vengeance K90
|
||||||
|
- Scimitar PRO RGB
|
||||||
|
|
||||||
config HID_PRODIKEYS
|
config HID_PRODIKEYS
|
||||||
tristate "Prodikeys PC-MIDI Keyboard support"
|
tristate "Prodikeys PC-MIDI Keyboard support"
|
||||||
|
|
|
@ -86,6 +86,7 @@ static const struct hid_device_id ch_devices[] = {
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS2) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS2) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_AK1D) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_AK1D) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_ACER_SWITCH12) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_ACER_SWITCH12) },
|
||||||
|
{ HID_USB_DEVICE(USB_VENDOR_ID_JESS, USB_DEVICE_ID_JESS_ZEN_AIO_KBD) },
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(hid, ch_devices);
|
MODULE_DEVICE_TABLE(hid, ch_devices);
|
||||||
|
|
|
@ -1870,6 +1870,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_AK1D) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_AK1D) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_ACER_SWITCH12) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_ACER_SWITCH12) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K90) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K90) },
|
||||||
|
{ HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_SCIMITAR_PRO_RGB) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_PRODIKEYS_PCMIDI) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_PRODIKEYS_PCMIDI) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_CYGNAL, USB_DEVICE_ID_CYGNAL_CP2112) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_CYGNAL, USB_DEVICE_ID_CYGNAL_CP2112) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_1) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_1) },
|
||||||
|
@ -1910,6 +1911,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A081) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A081) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A0C2) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A0C2) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_HUION, USB_DEVICE_ID_HUION_TABLET) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_HUION, USB_DEVICE_ID_HUION_TABLET) },
|
||||||
|
{ HID_USB_DEVICE(USB_VENDOR_ID_JESS, USB_DEVICE_ID_JESS_ZEN_AIO_KBD) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_JESS2, USB_DEVICE_ID_JESS2_COLOR_RUMBLE_PAD) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_JESS2, USB_DEVICE_ID_JESS2_COLOR_RUMBLE_PAD) },
|
||||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ION, USB_DEVICE_ID_ICADE) },
|
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ION, USB_DEVICE_ID_ICADE) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_KENSINGTON, USB_DEVICE_ID_KS_SLIMBLADE) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_KENSINGTON, USB_DEVICE_ID_KS_SLIMBLADE) },
|
||||||
|
|
|
@ -3,8 +3,10 @@
|
||||||
*
|
*
|
||||||
* Supported devices:
|
* Supported devices:
|
||||||
* - Vengeance K90 Keyboard
|
* - Vengeance K90 Keyboard
|
||||||
|
* - Scimitar PRO RGB Gaming Mouse
|
||||||
*
|
*
|
||||||
* Copyright (c) 2015 Clement Vuchener
|
* Copyright (c) 2015 Clement Vuchener
|
||||||
|
* Copyright (c) 2017 Oscar Campos
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -670,10 +672,51 @@ static int corsair_input_mapping(struct hid_device *dev,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The report descriptor of Corsair Scimitar RGB Pro gaming mouse is
|
||||||
|
* non parseable as they define two consecutive Logical Minimum for
|
||||||
|
* the Usage Page (Consumer) in rdescs bytes 75 and 77 being 77 0x16
|
||||||
|
* that should be obviousy 0x26 for Logical Magimum of 16 bits. This
|
||||||
|
* prevents poper parsing of the report descriptor due Logical
|
||||||
|
* Minimum being larger than Logical Maximum.
|
||||||
|
*
|
||||||
|
* This driver fixes the report descriptor for:
|
||||||
|
* - USB ID b1c:1b3e, sold as Scimitar RGB Pro Gaming mouse
|
||||||
|
*/
|
||||||
|
|
||||||
|
static __u8 *corsair_mouse_report_fixup(struct hid_device *hdev, __u8 *rdesc,
|
||||||
|
unsigned int *rsize)
|
||||||
|
{
|
||||||
|
struct usb_interface *intf = to_usb_interface(hdev->dev.parent);
|
||||||
|
|
||||||
|
if (intf->cur_altsetting->desc.bInterfaceNumber == 1) {
|
||||||
|
/*
|
||||||
|
* Corsair Scimitar RGB Pro report descriptor is broken and
|
||||||
|
* defines two different Logical Minimum for the Consumer
|
||||||
|
* Application. The byte 77 should be a 0x26 defining a 16
|
||||||
|
* bits integer for the Logical Maximum but it is a 0x16
|
||||||
|
* instead (Logical Minimum)
|
||||||
|
*/
|
||||||
|
switch (hdev->product) {
|
||||||
|
case USB_DEVICE_ID_CORSAIR_SCIMITAR_PRO_RGB:
|
||||||
|
if (*rsize >= 172 && rdesc[75] == 0x15 && rdesc[77] == 0x16
|
||||||
|
&& rdesc[78] == 0xff && rdesc[79] == 0x0f) {
|
||||||
|
hid_info(hdev, "Fixing up report descriptor\n");
|
||||||
|
rdesc[77] = 0x26;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return rdesc;
|
||||||
|
}
|
||||||
|
|
||||||
static const struct hid_device_id corsair_devices[] = {
|
static const struct hid_device_id corsair_devices[] = {
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K90),
|
{ HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K90),
|
||||||
.driver_data = CORSAIR_USE_K90_MACRO |
|
.driver_data = CORSAIR_USE_K90_MACRO |
|
||||||
CORSAIR_USE_K90_BACKLIGHT },
|
CORSAIR_USE_K90_BACKLIGHT },
|
||||||
|
{ HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR,
|
||||||
|
USB_DEVICE_ID_CORSAIR_SCIMITAR_PRO_RGB) },
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -686,10 +729,14 @@ static struct hid_driver corsair_driver = {
|
||||||
.event = corsair_event,
|
.event = corsair_event,
|
||||||
.remove = corsair_remove,
|
.remove = corsair_remove,
|
||||||
.input_mapping = corsair_input_mapping,
|
.input_mapping = corsair_input_mapping,
|
||||||
|
.report_fixup = corsair_mouse_report_fixup,
|
||||||
};
|
};
|
||||||
|
|
||||||
module_hid_driver(corsair_driver);
|
module_hid_driver(corsair_driver);
|
||||||
|
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
/* Original K90 driver author */
|
||||||
MODULE_AUTHOR("Clement Vuchener");
|
MODULE_AUTHOR("Clement Vuchener");
|
||||||
|
/* Scimitar PRO RGB driver author */
|
||||||
|
MODULE_AUTHOR("Oscar Campos");
|
||||||
MODULE_DESCRIPTION("HID driver for Corsair devices");
|
MODULE_DESCRIPTION("HID driver for Corsair devices");
|
||||||
|
|
|
@ -278,6 +278,9 @@
|
||||||
#define USB_DEVICE_ID_CORSAIR_K70RGB 0x1b13
|
#define USB_DEVICE_ID_CORSAIR_K70RGB 0x1b13
|
||||||
#define USB_DEVICE_ID_CORSAIR_STRAFE 0x1b15
|
#define USB_DEVICE_ID_CORSAIR_STRAFE 0x1b15
|
||||||
#define USB_DEVICE_ID_CORSAIR_K65RGB 0x1b17
|
#define USB_DEVICE_ID_CORSAIR_K65RGB 0x1b17
|
||||||
|
#define USB_DEVICE_ID_CORSAIR_K70RGB_RAPIDFIRE 0x1b38
|
||||||
|
#define USB_DEVICE_ID_CORSAIR_K65RGB_RAPIDFIRE 0x1b39
|
||||||
|
#define USB_DEVICE_ID_CORSAIR_SCIMITAR_PRO_RGB 0x1b3e
|
||||||
|
|
||||||
#define USB_VENDOR_ID_CREATIVELABS 0x041e
|
#define USB_VENDOR_ID_CREATIVELABS 0x041e
|
||||||
#define USB_DEVICE_ID_CREATIVE_SB_OMNI_SURROUND_51 0x322c
|
#define USB_DEVICE_ID_CREATIVE_SB_OMNI_SURROUND_51 0x322c
|
||||||
|
@ -557,6 +560,7 @@
|
||||||
|
|
||||||
#define USB_VENDOR_ID_JESS 0x0c45
|
#define USB_VENDOR_ID_JESS 0x0c45
|
||||||
#define USB_DEVICE_ID_JESS_YUREX 0x1010
|
#define USB_DEVICE_ID_JESS_YUREX 0x1010
|
||||||
|
#define USB_DEVICE_ID_JESS_ZEN_AIO_KBD 0x5112
|
||||||
|
|
||||||
#define USB_VENDOR_ID_JESS2 0x0f30
|
#define USB_VENDOR_ID_JESS2 0x0f30
|
||||||
#define USB_DEVICE_ID_JESS2_COLOR_RUMBLE_PAD 0x0111
|
#define USB_DEVICE_ID_JESS2_COLOR_RUMBLE_PAD 0x0111
|
||||||
|
|
|
@ -2632,6 +2632,8 @@ err_stop:
|
||||||
sony_leds_remove(sc);
|
sony_leds_remove(sc);
|
||||||
if (sc->quirks & SONY_BATTERY_SUPPORT)
|
if (sc->quirks & SONY_BATTERY_SUPPORT)
|
||||||
sony_battery_remove(sc);
|
sony_battery_remove(sc);
|
||||||
|
if (sc->touchpad)
|
||||||
|
sony_unregister_touchpad(sc);
|
||||||
sony_cancel_work_sync(sc);
|
sony_cancel_work_sync(sc);
|
||||||
kfree(sc->output_report_dmabuf);
|
kfree(sc->output_report_dmabuf);
|
||||||
sony_remove_dev_list(sc);
|
sony_remove_dev_list(sc);
|
||||||
|
|
|
@ -80,6 +80,9 @@ static const struct hid_blacklist {
|
||||||
{ USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K70RGB, HID_QUIRK_NO_INIT_REPORTS },
|
{ USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K70RGB, HID_QUIRK_NO_INIT_REPORTS },
|
||||||
{ USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K65RGB, HID_QUIRK_NO_INIT_REPORTS },
|
{ USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K65RGB, HID_QUIRK_NO_INIT_REPORTS },
|
||||||
{ USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_STRAFE, HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL },
|
{ USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_STRAFE, HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL },
|
||||||
|
{ USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K70RGB_RAPIDFIRE, HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL },
|
||||||
|
{ USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K65RGB_RAPIDFIRE, HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL },
|
||||||
|
{ USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_SCIMITAR_PRO_RGB, HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL },
|
||||||
{ USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_CREATIVE_SB_OMNI_SURROUND_51, HID_QUIRK_NOGET },
|
{ USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_CREATIVE_SB_OMNI_SURROUND_51, HID_QUIRK_NOGET },
|
||||||
{ USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
|
{ USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
|
||||||
{ USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_WIIU, HID_QUIRK_MULTI_INPUT },
|
{ USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_WIIU, HID_QUIRK_MULTI_INPUT },
|
||||||
|
|
|
@ -2579,7 +2579,9 @@ static void wacom_remove(struct hid_device *hdev)
|
||||||
|
|
||||||
/* make sure we don't trigger the LEDs */
|
/* make sure we don't trigger the LEDs */
|
||||||
wacom_led_groups_release(wacom);
|
wacom_led_groups_release(wacom);
|
||||||
wacom_release_resources(wacom);
|
|
||||||
|
if (wacom->wacom_wac.features.type != REMOTE)
|
||||||
|
wacom_release_resources(wacom);
|
||||||
|
|
||||||
hid_set_drvdata(hdev, NULL);
|
hid_set_drvdata(hdev, NULL);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1959,8 +1959,10 @@ static void wacom_wac_pen_usage_mapping(struct hid_device *hdev,
|
||||||
input_set_capability(input, EV_KEY, BTN_TOOL_BRUSH);
|
input_set_capability(input, EV_KEY, BTN_TOOL_BRUSH);
|
||||||
input_set_capability(input, EV_KEY, BTN_TOOL_PENCIL);
|
input_set_capability(input, EV_KEY, BTN_TOOL_PENCIL);
|
||||||
input_set_capability(input, EV_KEY, BTN_TOOL_AIRBRUSH);
|
input_set_capability(input, EV_KEY, BTN_TOOL_AIRBRUSH);
|
||||||
input_set_capability(input, EV_KEY, BTN_TOOL_MOUSE);
|
if (!(features->device_type & WACOM_DEVICETYPE_DIRECT)) {
|
||||||
input_set_capability(input, EV_KEY, BTN_TOOL_LENS);
|
input_set_capability(input, EV_KEY, BTN_TOOL_MOUSE);
|
||||||
|
input_set_capability(input, EV_KEY, BTN_TOOL_LENS);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case WACOM_HID_WD_FINGERWHEEL:
|
case WACOM_HID_WD_FINGERWHEEL:
|
||||||
wacom_map_usage(input, usage, field, EV_ABS, ABS_WHEEL, 0);
|
wacom_map_usage(input, usage, field, EV_ABS, ABS_WHEEL, 0);
|
||||||
|
@ -4197,10 +4199,10 @@ static const struct wacom_features wacom_features_0x343 =
|
||||||
WACOM_DTU_OFFSET, WACOM_DTU_OFFSET };
|
WACOM_DTU_OFFSET, WACOM_DTU_OFFSET };
|
||||||
static const struct wacom_features wacom_features_0x360 =
|
static const struct wacom_features wacom_features_0x360 =
|
||||||
{ "Wacom Intuos Pro M", 44800, 29600, 8191, 63,
|
{ "Wacom Intuos Pro M", 44800, 29600, 8191, 63,
|
||||||
INTUOSP2_BT, WACOM_INTUOS_RES, WACOM_INTUOS_RES, 9, .touch_max = 10 };
|
INTUOSP2_BT, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, 9, .touch_max = 10 };
|
||||||
static const struct wacom_features wacom_features_0x361 =
|
static const struct wacom_features wacom_features_0x361 =
|
||||||
{ "Wacom Intuos Pro L", 62200, 43200, 8191, 63,
|
{ "Wacom Intuos Pro L", 62200, 43200, 8191, 63,
|
||||||
INTUOSP2_BT, WACOM_INTUOS_RES, WACOM_INTUOS_RES, 9, .touch_max = 10 };
|
INTUOSP2_BT, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, 9, .touch_max = 10 };
|
||||||
|
|
||||||
static const struct wacom_features wacom_features_HID_ANY_ID =
|
static const struct wacom_features wacom_features_HID_ANY_ID =
|
||||||
{ "Wacom HID", .type = HID_GENERIC, .oVid = HID_ANY_ID, .oPid = HID_ANY_ID };
|
{ "Wacom HID", .type = HID_GENERIC, .oVid = HID_ANY_ID, .oPid = HID_ANY_ID };
|
||||||
|
|
Loading…
Add table
Reference in a new issue