Re: [PATCH v2 2/2] HID: logitech-hidpp: enable reprogrammable buttons on Signature M650
Elliot Douglas <[email protected]> Thu, 30 Jul 2026 12:33:38 -0700
| Newsgroups | org.kernel.vger.linux-input,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <CAGt6S1oVO1zE9+HZWfvVBEfgLEc6cisfG-SonUVFf+XSTft2+A@mail.gmail.com> |
Thanks for the feedback. I just left for a trip, but I'll be back and should be able to work on it on Tuesday, August 11th. On Thu, Jul 30, 2026 at 1:07 AM Bastien Nocera <[email protected]> wrote: > > On Sat, 2026-07-04 at 16:10 -0700, Elliot Douglas wrote: > > The Bluetooth Signature M650 exposes its side buttons through the > > normal > > mouse report, but the observed events are short click-like events > > emitted > > around release rather than physical press/release state. > > > > The device appears to use the held side-button state for its built-in > > gesture and side-button + wheel horizontal-scroll mode. As a result, > > holding a side button long enough > > s/long enough/more than approximately 2 seconds/ ? > > > can prevent the normal mouse report from > > emitting a usable button event at all. > > > > HID++ REPROG_CONTROLS_V4 diversion for control IDs 0x0053 and 0x0056 > > provides real press and release timing for those same controls. > > Logitech > > documents the Signature M650 side buttons as Back/Forward buttons, so > > report the diverted controls as BTN_BACK and BTN_FORWARD. > > > > The HID++ 0x1b04 documentation lists those control IDs as Back and > > Forward. The driver still verifies that the controls are present in > > the > > device control table and advertised as divertable before changing > > their > > reporting mode. > > > > Link: > > https://support.logi.com/hc/en-nz/articles/4414473810583-Getting-Started-Signature-M650 > > Signed-off-by: Elliot Douglas <[email protected]> > > Tested with my M650 mouse connected through Bluetooth. > > Reviewed-by: Bastien Nocera <[email protected]> > > > --- > > drivers/hid/hid-logitech-hidpp.c | 20 +++++++++++++++++++- > > 1 file changed, 19 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid- > > logitech-hidpp.c > > index f9189e14fb78..e71dd2457e80 100644 > > --- a/drivers/hid/hid-logitech-hidpp.c > > +++ b/drivers/hid/hid-logitech-hidpp.c > > @@ -3624,14 +3624,30 @@ static int > > hidpp10_extra_mouse_buttons_raw_event(struct hidpp_device *hidpp, > > > > #define HIDPP_REPROG_CONTROLS_EVENT_DIVERTED 0x00 > > > > +#define HIDPP_REPROG_CONTROL_BACK 0x0053 > > +#define HIDPP_REPROG_CONTROL_FORWARD 0x0056 > > + > > +#define HIDPP_PRODUCT_SIGNATURE_M650 0xb02a > > If you want to add a product ID constant, please do it in hid-ids.h > instead. > > > + > > struct hidpp_reprog_control_mapping { > > u16 control; > > u16 code; > > }; > > > > +static const struct hidpp_reprog_control_mapping > > m650_reprog_control_mappings[] = { > > + { HIDPP_REPROG_CONTROL_BACK, BTN_BACK }, > > + { HIDPP_REPROG_CONTROL_FORWARD, BTN_FORWARD }, > > + { } > > +}; > > + > > static const struct hidpp_reprog_control_mapping * > > hidpp20_reprog_controls_get_mappings(struct hidpp_device *hidpp) > > { > > + switch (hidpp->hid_dev->product) { > > + case HIDPP_PRODUCT_SIGNATURE_M650: > > + return m650_reprog_control_mappings; > > + } > > + > > return NULL; > > } > > > > @@ -4911,7 +4927,9 @@ static const struct hid_device_id > > hidpp_devices[] = { > > { /* MX Vertical mouse over Bluetooth */ > > HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb020) }, > > { /* Signature M650 over Bluetooth */ > > - HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb02a) }, > > + HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, > > + HIDPP_PRODUCT_SIGNATURE_M650), > > + .driver_data = HIDPP_QUIRK_HIDPP_REPROG_CONTROLS_BTNS }, > > { /* MX Master 3 mouse over Bluetooth */ > > HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb023) }, > > { /* MX Anywhere 3 mouse over Bluetooth */