From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8BB09386453 for ; Wed, 12 Aug 2026 19:59:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.54 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786564750; cv=none; b=bKiRxGTjhFlQ1aCQXSructseQxwdEAESnuLjWEKILdeDOmgiRrlM2eryesVAto/q5bLPXQVPxxv6pNYQDbQ18D/luJhAwmiDpP8ImePNWtTZeDqywARq4XknuavLII6r0Wvzlphm/BRQuiqRD5kncYhZRKuz2SmuZjL7UdD+OvQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786564750; c=relaxed/simple; bh=SxhLuZhNDLQB7P8JmA5d0v/iTsujFzWA4xG9cUNjap4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=K71LGOy/UwIwvVnd4nsktJK62FBNLF2Ov7ma3gKXo4DPaRvMCbolu7rqR05yPNFSiBPcLSSKMCL2JYp2ZeZob3QAGZ5WrwTcDFW76iWxSOrzLejIi5KjQ+qdXDdXI+7WXRDesSKuArlQxnZuf9tGiiMqETkZAa9E9yT7TC/fGU4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=K9WKgcL5; arc=none smtp.client-ip=209.85.221.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="K9WKgcL5" Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-47db714766aso140117f8f.0 for ; Wed, 12 Aug 2026 12:59:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786564746; x=1787169546; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=WQJkp7F9XSMUUp3rtI8dEl5NT/CiVfWiLJXvzZwRDEo=; b=K9WKgcL5euEzMwjN2GJb91Ahgso4DC6pj6zwCfBkVurTTOTsrtXMuJ8shtJx45Ozsp zfNq2t0E73gbNE2p6+H+yCoXOeUYBO2qtQl6BTNKt8gknOiRQqg34uug0Q92U86b6+v3 b27gSr23OOeYcxU0ZQcj3wY0kUt00PHzkEU6QnjgigoJB/PHdh9V5CK0VJilFqo0ksKR M5PiTs9e7vkUjqF5VDRkjQ2uFbyEDx+4WxWPOQ9i4f8jFpZxStewmM2OnfYMXs/4NaLw 1Qrec1OCm9FhZKmaO5ipWxg5wglfbXuekAljR5OMqVaZHOZFn0uf62KbH+O0f3brvR+j vfgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786564746; x=1787169546; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=WQJkp7F9XSMUUp3rtI8dEl5NT/CiVfWiLJXvzZwRDEo=; b=ag0SfH5x9fTF9L9c50XoK1NvsIaiDQBlzdH0pzaJQy1uaLmqz7yOkS+1ypYjkKuxT3 tEaKiuT4K0jtommwcD7cTnF88QxRy8eirb0R+T6S2StDcL85hrR2ouEZH8ge/5a9jwvI YirWLbAcNnCKh2tHVEsl7x1jEhGTS48/dQlv3ivPD7rVfB6hPkmuw1kpzARViiQ9naj/ fou84u4ozRCL2BfIAZDKuJRmaCxrq2wE6xTztSt4iFPN0xKaS2JpIeQWAexMgIo/S3y9 g/ddM7Tl04EpXQaDY1FqmX2FDL+XcLSwp+53ezy0ERofG21kS9//VjdIjgBmHNIzjdTE TZ0A== X-Forwarded-Encrypted: i=1; AHgh+RoV3O6HYRDaUz0zm6cgwGV0NuDUJ3gFPn+bm+B+V2A+d6ay0quKIdF4PBheeCm96+uySRPW1RMpFdTcsiQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzpLYgWBgnrhT0djhSPMea14HkPiRqmGsW9IuV4voxZunccrZnB A8EYd83RKexhQ4JGwc/eCxn1SFlhWnndORAysmQ7CPmcj0J9z0WjaS1A X-Gm-Gg: AR+sD111mNZIWJygjz4gS4p9QmKyCAHLrRxOD4NIibu91+0yxQQcWWFVw9cA64wCW+O mSEbJss6yz1rQgcr2d5BhT25u74g4DO5MchK9O87MP5ivE5hXDqKoseZfdJmHkVf5LEdsKUBHE4 NbCBsewp0c5VM/rc0n34hGPIjt4tTjI9ecdzgfVTnW8Bygnowcy84coD1t1TfauFdZinzamfDjA xlCnYSDtFveZblUbApSLLrIPv3zN6aBQ25wYSjl9wABLr3G3+Q/CtmKEkaFcGvYtmIjxhvCrK+4 GFi5Q2Y979v4O6wD5a/mVXirRuFvAvpz1WJZQZp7Xi3TQaMCa/dlG18cEgyHHm9D2hShQ/IEf6f DKzqKRi0TEmweE0fLDLMbX1n7+gMJLbYEmBNJ772rKE6OKH4ATDLIYfunxGRlcpe5Coylmb5G/i U7kI7F/1Lqc+535r8uluMsNvdmexkUrL9nQQNar7r1EqbGbuQt1YlAtv0A4dW2GhhCSH20Hmfep 5thFlIfvf08vAws X-Received: by 2002:a05:6000:2883:b0:47f:eb38:26f9 with SMTP id ffacd0b85a97d-4815a502bd1mr325002f8f.8.1786564745846; Wed, 12 Aug 2026 12:59:05 -0700 (PDT) Received: from localhost (97-115-90-76.ptld.qwest.net. [97.115.90.76]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-4815a5612b8sm148920f8f.1.2026.08.12.12.59.03 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 12 Aug 2026 12:59:05 -0700 (PDT) From: Elliot Douglas To: linux-input@vger.kernel.org Cc: lains@riseup.net, hadess@hadess.net, jikos@kernel.org, bentiss@kernel.org, linux-kernel@vger.kernel.org, edouglas7358@gmail.com Subject: [PATCH v3 2/2] HID: logitech-hidpp: enable reprogrammable buttons on Signature M650 Date: Wed, 12 Aug 2026 12:58:42 -0700 Message-ID: <20260812195842.77724-3-edouglas7358@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260812195842.77724-1-edouglas7358@gmail.com> References: <20260812195842.77724-1-edouglas7358@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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 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 Reviewed-by: Bastien Nocera Signed-off-by: Elliot Douglas --- drivers/hid/hid-ids.h | 1 + drivers/hid/hid-logitech-hidpp.c | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h index 426ff78c1c03..f4a23662888a 100644 --- a/drivers/hid/hid-ids.h +++ b/drivers/hid/hid-ids.h @@ -906,6 +906,7 @@ #define USB_DEVICE_ID_LOGITECH_Z_10_SPK 0x0a07 #define USB_DEVICE_ID_LOGITECH_AUDIOHUB 0x0a0e #define USB_DEVICE_ID_LOGITECH_T651 0xb00c +#define USB_DEVICE_ID_LOGITECH_SIGNATURE_M650 0xb02a #define USB_DEVICE_ID_LOGITECH_DINOVO_EDGE_KBD 0xb309 #define USB_DEVICE_ID_LOGITECH_CASA_TOUCHPAD 0xbb00 #define USB_DEVICE_ID_LOGITECH_C007 0xc007 diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c index f9189e14fb78..8cd762e1eb51 100644 --- a/drivers/hid/hid-logitech-hidpp.c +++ b/drivers/hid/hid-logitech-hidpp.c @@ -3624,14 +3624,28 @@ 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 + 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 USB_DEVICE_ID_LOGITECH_SIGNATURE_M650: + return m650_reprog_control_mappings; + } + return NULL; } @@ -4911,7 +4925,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, + USB_DEVICE_ID_LOGITECH_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 */ -- 2.55.0