Re: [PATCH v2 2/2] HID: logitech-hidpp: enable reprogrammable buttons on Signature M650

Elliot Douglas <[email protected]>
Newsgroups org.kernel.vger.linux-kernel,org.kernel.vger.linux-input
Message-ID <CAGt6S1rUrE7tt7-HiY8Tm36WTSWswQtkwWPwCVk_YLYhoUaK2g@mail.gmail.com>
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/ ?

It was about 2 seconds, I measured it.

> >  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.

I'll address this in the next patch revision.

> > +
> >  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 */
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.