mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 05:02:12 +00:00
HID: logitech-hidpp: Enable HID++ for all the Logitech Bluetooth devices
Probe for HID++ support over Bluetooth for all the Logitech Bluetooth devices. As Logitech doesn't have a list of Bluetooth devices that support HID++ over Bluetooth, probe every device. The HID++ driver will fall back to plain HID if the device does not support HID++, or to a another device-specific driver if it is part of the unhandled_hidpp_devices array, used in the match function. Note that this change might cause upower to export 2 batteries for certain Bluetooth LE devices which export their battery information through the Bluetooth BATT profile. This particular bug is tracked at: https://gitlab.freedesktop.org/upower/upower/-/issues/166 Tested with a Logitech Signature M650 mouse, over Bluetooth Signed-off-by: Bastien Nocera <hadess@hadess.net> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
parent
80305f97c3
commit
532223c8ac
@ -4219,6 +4219,21 @@ static void hidpp_remove(struct hid_device *hdev)
|
||||
mutex_destroy(&hidpp->send_mutex);
|
||||
}
|
||||
|
||||
static const struct hid_device_id unhandled_hidpp_devices[] = {
|
||||
/* Logitech Harmony Adapter for PS3, handled in hid-sony */
|
||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_HARMONY_PS3) },
|
||||
/* Handled in hid-generic */
|
||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_DINOVO_EDGE_KBD) },
|
||||
{}
|
||||
};
|
||||
|
||||
static bool hidpp_match(struct hid_device *hdev,
|
||||
bool ignore_special_driver)
|
||||
{
|
||||
/* Refuse to handle devices handled by other HID drivers */
|
||||
return !hid_match_id(hdev, unhandled_hidpp_devices);
|
||||
}
|
||||
|
||||
#define LDJ_DEVICE(product) \
|
||||
HID_DEVICE(BUS_USB, HID_GROUP_LOGITECH_DJ_DEVICE, \
|
||||
USB_VENDOR_ID_LOGITECH, (product))
|
||||
@ -4347,6 +4362,9 @@ static const struct hid_device_id hidpp_devices[] = {
|
||||
{ /* MX Master 3 mouse over Bluetooth */
|
||||
HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb023),
|
||||
.driver_data = HIDPP_QUIRK_HI_RES_SCROLL_X2121 },
|
||||
|
||||
{ /* And try to enable HID++ for all the Logitech Bluetooth devices */
|
||||
HID_DEVICE(BUS_BLUETOOTH, HID_GROUP_ANY, USB_VENDOR_ID_LOGITECH, HID_ANY_ID) },
|
||||
{}
|
||||
};
|
||||
|
||||
@ -4360,6 +4378,7 @@ static const struct hid_usage_id hidpp_usages[] = {
|
||||
static struct hid_driver hidpp_driver = {
|
||||
.name = "logitech-hidpp-device",
|
||||
.id_table = hidpp_devices,
|
||||
.match = hidpp_match,
|
||||
.report_fixup = hidpp_report_fixup,
|
||||
.probe = hidpp_probe,
|
||||
.remove = hidpp_remove,
|
||||
|
Loading…
Reference in New Issue
Block a user