From: Bastien Nocera <hadess@hadess.net>
To: Elliot Douglas <edouglas7358@gmail.com>, linux-input@vger.kernel.org
Cc: lains@riseup.net, jikos@kernel.org, bentiss@kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/2] HID: logitech-hidpp: enable reprogrammable buttons on Signature M650
Date: Wed, 17 Jun 2026 12:28:30 +0200 [thread overview]
Message-ID: <a67d0483b35e20cf126fc66efefded786480b169.camel@hadess.net> (raw)
In-Reply-To: <20260613175109.44365-3-edouglas7358@gmail.com>
Hey Elliot,
I have an m650 on hand on with which I should be able to test your
patch next week, once we've gone through a first round of reviews.
Benjamin, is there something I can capture locally that could make it
into the HID tests for this feature?
Inline comments below
On Sat, 2026-06-13 at 10:51 -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 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.
>
> Link:
> https://support.logi.com/hc/en-nz/articles/4414473810583-Getting-Started-Signature-M650
>
> Signed-off-by: Elliot Douglas <edouglas7358@gmail.com>
> ---
> drivers/hid/hid-logitech-hidpp.c | 21 ++++++++++++++++++++-
> 1 file changed, 20 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-
> logitech-hidpp.c
> index 24c9cfaa4f37..80108778ee80 100644
> --- a/drivers/hid/hid-logitech-hidpp.c
> +++ b/drivers/hid/hid-logitech-hidpp.c
> @@ -3621,6 +3621,9 @@ static int
> hidpp10_extra_mouse_buttons_raw_event(struct hidpp_device *hidpp,
>
> #define HIDPP_REPROG_CONTROLS_EVENT_DIVERTED 0x00
>
> +#define HIDPP_REPROG_CONTROL_M650_BACK 0x0053
> +#define HIDPP_REPROG_CONTROL_M650_FORWARD 0x0056
I read through the 0x1b04 docs, and I'm trying to understand whether
those CID numbers change in different hardware, or if they're hardcoded
(a back button will always have the 83/0x53 value).
Seems to me that it's the latter? The back button is listed in the
Example Control ID table in the 0x1b04 docs.
> +
> struct hidpp_reprog_control_mapping {
> u16 control;
> u16 code;
> @@ -3631,9 +3634,24 @@ struct hidpp_reprog_controls_profile {
> unsigned int mapping_count;
> };
>
> +static const struct hidpp_reprog_control_mapping
> m650_reprog_control_mappings[] = {
> + { HIDPP_REPROG_CONTROL_M650_BACK, BTN_BACK },
> + { HIDPP_REPROG_CONTROL_M650_FORWARD, BTN_FORWARD },
> +};
> +
> +static const struct hidpp_reprog_controls_profile
> m650_reprog_controls_profile = {
> + .mappings = m650_reprog_control_mappings,
> + .mapping_count = ARRAY_SIZE(m650_reprog_control_mappings),
> +};
> +
> static const struct hidpp_reprog_controls_profile *
> hidpp20_reprog_controls_get_profile(struct hidpp_device *hidpp)
> {
> + switch (hidpp->hid_dev->product) {
> + case 0xb02a:
You probably want a define for that constant.
> + return &m650_reprog_controls_profile;
> + }
> +
> return NULL;
> }
>
> @@ -4921,7 +4939,8 @@ 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, 0xb02a),
> + .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 */
prev parent reply other threads:[~2026-06-17 10:28 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-13 17:51 [PATCH 0/2] HID: logitech-hidpp: fix Signature M650 side button timing Elliot Douglas
2026-06-13 17:51 ` [PATCH 1/2] HID: logitech-hidpp: add HID++ 2.0 reprogrammable button support Elliot Douglas
2026-06-17 10:28 ` Bastien Nocera
2026-06-13 17:51 ` [PATCH 2/2] HID: logitech-hidpp: enable reprogrammable buttons on Signature M650 Elliot Douglas
2026-06-17 10:28 ` Bastien Nocera [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a67d0483b35e20cf126fc66efefded786480b169.camel@hadess.net \
--to=hadess@hadess.net \
--cc=bentiss@kernel.org \
--cc=edouglas7358@gmail.com \
--cc=jikos@kernel.org \
--cc=lains@riseup.net \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox