From d3bb1ded7906ef7a731e5eb4029b9547cad6a0b6 Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: May 25 2023 07:19:30 +0000 Subject: HID: logitech-hidpp: Don't use the USB serial for USB devices (git-fixes). --- diff --git a/patches.suse/HID-logitech-hidpp-Don-t-use-the-USB-serial-for-USB-.patch b/patches.suse/HID-logitech-hidpp-Don-t-use-the-USB-serial-for-USB-.patch new file mode 100644 index 0000000..6a89776 --- /dev/null +++ b/patches.suse/HID-logitech-hidpp-Don-t-use-the-USB-serial-for-USB-.patch @@ -0,0 +1,101 @@ +From 7ad1fe0da0fa91bf920b79ab05ae97bfabecc4f4 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Thu, 2 Mar 2023 14:01:16 +0100 +Subject: [PATCH] HID: logitech-hidpp: Don't use the USB serial for USB devices +Git-commit: 7ad1fe0da0fa91bf920b79ab05ae97bfabecc4f4 +Patch-mainline: v6.4-rc1 +References: git-fixes + +For devices that support the 0x0003 feature (Device Information) version 4, +set the serial based on the output of that feature, rather than relying +on the usbhid code setting the USB serial. + +This should allow the serial when connected through USB to (nearly) +match the one when connected through a unifying receiver. + +For example, on the serials on a G903 wired/wireless mouse: +- Unifying: 4067-e8-ce-cd-45 +- USB before patch: 017C385C3837 +- USB after patch: c086-e8-ce-cd-45 + +Signed-off-by: Bastien Nocera +Link: https://lore.kernel.org/r/20230302130117.3975-1-hadess@hadess.net +Signed-off-by: Benjamin Tissoires +Acked-by: Takashi Iwai + +--- + drivers/hid/hid-logitech-hidpp.c | 51 ++++++++++++++++++++++++++++++++ + 1 file changed, 51 insertions(+) + +diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c +index 5fc88a063297..66380876937f 100644 +--- a/drivers/hid/hid-logitech-hidpp.c ++++ b/drivers/hid/hid-logitech-hidpp.c +@@ -947,6 +947,55 @@ static int hidpp_root_get_protocol_version(struct hidpp_device *hidpp) + return 0; + } + ++/* -------------------------------------------------------------------------- */ ++/* 0x0003: Device Information */ ++/* -------------------------------------------------------------------------- */ ++ ++#define HIDPP_PAGE_DEVICE_INFORMATION 0x0003 ++ ++#define CMD_GET_DEVICE_INFO 0x00 ++ ++static int hidpp_get_serial(struct hidpp_device *hidpp, u32 *serial) ++{ ++ struct hidpp_report response; ++ u8 feature_type; ++ u8 feature_index; ++ int ret; ++ ++ ret = hidpp_root_get_feature(hidpp, HIDPP_PAGE_DEVICE_INFORMATION, ++ &feature_index, ++ &feature_type); ++ if (ret) ++ return ret; ++ ++ ret = hidpp_send_fap_command_sync(hidpp, feature_index, ++ CMD_GET_DEVICE_INFO, ++ NULL, 0, &response); ++ if (ret) ++ return ret; ++ ++ /* See hidpp_unifying_get_serial() */ ++ *serial = *((u32 *)&response.rap.params[1]); ++ return 0; ++} ++ ++static int hidpp_serial_init(struct hidpp_device *hidpp) ++{ ++ struct hid_device *hdev = hidpp->hid_dev; ++ u32 serial; ++ int ret; ++ ++ ret = hidpp_get_serial(hidpp, &serial); ++ if (ret) ++ return ret; ++ ++ snprintf(hdev->uniq, sizeof(hdev->uniq), "%04x-%4phD", ++ hdev->product, &serial); ++ dbg_hid("HID++ DeviceInformation: Got serial: %s\n", hdev->uniq); ++ ++ return 0; ++} ++ + /* -------------------------------------------------------------------------- */ + /* 0x0005: GetDeviceNameType */ + /* -------------------------------------------------------------------------- */ +@@ -4210,6 +4259,8 @@ static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id) + + if (hidpp->quirks & HIDPP_QUIRK_UNIFYING) + hidpp_unifying_init(hidpp); ++ else if (hid_is_usb(hidpp->hid_dev)) ++ hidpp_serial_init(hidpp); + + connected = hidpp_root_get_protocol_version(hidpp) == 0; + atomic_set(&hidpp->connected, connected); +-- +2.35.3 + diff --git a/series.conf b/series.conf index f2601da..52f2f18 100644 --- a/series.conf +++ b/series.conf @@ -19962,6 +19962,7 @@ patches.suse/ipmi-ssif-Add-send_retries-increment.patch patches.suse/ipmi-fix-SSIF-not-responding-under-certain-cond.patch patches.suse/i2c-cadence-cdns_i2c_master_xfer-Fix-runtime-PM-leak.patch + patches.suse/HID-logitech-hidpp-Don-t-use-the-USB-serial-for-USB-.patch patches.suse/HID-wacom-Set-a-default-resolution-for-older-tablets.patch patches.suse/usb-host-xhci-rcar-remove-leftover-quirk-handling.patch patches.suse/usb-dwc3-gadget-Change-condition-for-processing-susp.patch