From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ej2-f27.google.com (mail-ej2-f27.google.com [74.125.228.155]) (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 06F10559CA9 for ; Tue, 22 Sep 2026 17:40:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.228.155 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790098841; cv=none; b=agRv19p6Z+8VR0alIfLSpxZNGXNN5p5b38EZ91MJT17UDcsm5xsW8Xzja0fZwjOQNQkA9HYit/8fssFf3jc+Ttjt2NMbWxsn+vSf5lJg/aEEzeXwOmEz3A4yo3OkvzjxlSOm5GV18K36Yr9njGu3uKHgaD5fSbUgFumSebR4QAM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790098841; c=relaxed/simple; bh=Tx1KkmYROfO1CWYQM4qI1q9ERT+FuFqrDr4AZWkTke8=; h=From:Subject:Date:Message-Id:MIME-Version:Content-Type:To:Cc; b=jVD+ipLaKSzbDLKG/X7/CRldDCkkr70cyjSSl0+1Y9pCwMOZSM2ziz57DBiyWt1MptqZfLw89bKASKNqzYY/fXJrDzKbyc6mHtnA3L0G0irA1/zCZQiQQmkkCIdMdoXV9Uq19X6TqB7iuVT43r7bmyDJP1nwD2HkAHLTA5ao7s4= 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=Gg748eu+; arc=none smtp.client-ip=74.125.228.155 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="Gg748eu+" Received: by mail-ej2-f27.google.com with SMTP id a640c23a62f3a-c254f6c7a58so7507866b.2 for ; Tue, 22 Sep 2026 10:40:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790098838; x=1790703638; darn=vger.kernel.org; h=cc:to:content-transfer-encoding:content-type:mime-version :message-id:date:subject:from:from:to:cc:subject:date:message-id :reply-to:content-type; bh=Ul8tZc9iDWhIoFNaZcbsvWj/hjI6Qk9FNQQIlypmcs4=; b=Gg748eu+r6u0mH1/UftyJI9i6hpUdNsQWm5YfxPlenTMa9EAHUFdzTZIQhBFfwNQ25 TGEkkbMfdi+MMhDUNsikxXohrr3RJSakEkYYC5qyZqoUaRTAU763pbR/Zsgwyj38vaNo qoomOQBQSej3RhsagH9xO0FIncqD+WW7xwTBu5/XJyjkC5q5ieJa9s2KAa318CsF3pAC nUq8SOFKykQyPtYUd3cyFzvIP9kbaBLFiflBe5d8/PimQ/TVy7Lpj+ncm1J6Bdt9oEjX S41Ro+EXw4nHC0lIMGTnXR6e7aqVX2rfDYL26/xaN3hyDdeLpp9ozFa8hAKrSyHyTm5y XWMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790098838; x=1790703638; h=cc:to:content-transfer-encoding:content-type:mime-version :message-id:date:subject:from:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to:content-type; bh=Ul8tZc9iDWhIoFNaZcbsvWj/hjI6Qk9FNQQIlypmcs4=; b=TYcmsy/nXL1zzMS9N/+Xdum4LKzjcty8JgpzfNm2G+xm3W9FXvE+AHrZGNIXLymG2c 7AplkYAA2S7sJoTOoulpAyM7m0JwAZMu3KPbOBsq0hmuNYp5rVC3PB6Ix7zkGGtXnljo ukPetRLsH7t1GtxsHj6hNr+XsNiWyVC07ugEkPPssyXGLIjMogHWg5vJy3naWwbSbyhJ G2gXnKK1zvlq6RJyxA8wNiDl5qG6hgrKVn/7xFScl7JYC1Lde3oxZJOUz2YwXNb3cwIP sJozk4T9otTB6kaCh1mvuPHl2ngMIsnZ7y0W2HoL5pnZrwvJK7WH4flOY2+mo3aHy5aO vMZw== X-Forwarded-Encrypted: i=1; AKwUvBy84zpc5WUA9vifqv9yasOod0WV2UpJSgCQ0w4LjZeJEVCRBwTEEPZG9MqHY26RlcIZjdzUMCzMdJZEsZI=@vger.kernel.org X-Gm-Message-State: AFuF++nUi78er2abM/pdNfYn7Ow2GGkRtytjsqdCr7sPqflKD4aaNKx0 o5tM33OsPv9Thx4ov5WT8ENETZewtyuO+UpFZoC0FqCg0u2T8iFSi+GG X-Gm-Gg: AYBFou3jXvuT0dssyw1lgsnYQVLeAPL1JNGZAma/r+q5lJjUgzuitKuPawoklgNMP8U p61Sh+XQMrZhT26G0UASf3ShDG8WIfGhjQSHsX6tBQGCxLZriM/8wa4l09iHN1Q5uau09W51bp6 XzXWNjNrsgirQkJb0aHjWrEZDLcaQNixn+FDh08iiuDcMJ8mYNmWkTqSp0Z2qe2EoKvp7rqbfba GwFwiuSh1NtkECdcvj8GQlEMbJ1a9RYh1oSzcLBPYlTRyLqU5XEsgFLcaaeHQWwXBhs20bQ4Qjb 2w017ab7Y6DK3e67sAdbps7iO4lLf41Dgb1wcfUeNB+aUICKhAbv8M8kEF+E+4dGBJ21R13oKLL 5d/hVA8cFE0bMeGh+KKeHqJ5a4GEh/VPgJ6r4/p0FyOSt8dGUm+ip3Yv/OF07MQklmWDDV8y2pI QL1/Tg7J3goOt1XZoGGv+HRAchZ33py4Q9vhcaHu/ANzOsNt4R1N25bt7t56uHoId6i41l/hAj3 pXFzjR0cf8k2XH6z5kxVTfgBtxuVfiakMQ9W5y6UuDtEIa9MYz4PeQ= X-Received: by 2002:a17:907:3e02:b0:c26:1649:47ad with SMTP id a640c23a62f3a-c2a15b4bcdamr1171911966b.35.1790098838000; Tue, 22 Sep 2026 10:40:38 -0700 (PDT) Received: from [192.168.86.89] (81-224-151-184-no600.tbcn.telia.com. [81.224.151.184]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c2aad5bed0asm2549666b.18.2026.09.22.10.40.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Sep 2026 10:40:33 -0700 (PDT) From: =?utf-8?q?Erik_H=C3=A5kansson?= Subject: [PATCH 0/2] HID: logitech-hidpp: fix Bolt hi-res wheel handling Date: Tue, 22 Sep 2026 19:40:26 +0200 Message-Id: <20260922-feature-bolt-fix-v1-0-63b0fa8da0d3@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit X-B4-Tracking: v=1; b=H4sIAAAAAAAC/x2MQQqAMAzAviI9W3BlDvQr4mFqqwVR2aYI4t8dH hNIHogclCO0xQOBL426bxlMWcC4+G1m1CkzUEWuasigsE9nYBz2NaHojbUYcZZs4yaBnB2Bs/6 XXf++H5bqFPtiAAAA X-Change-ID: 20260921-feature-bolt-fix-5f1f642496df To: Jiri Kosina , Benjamin Tissoires Cc: =?utf-8?q?Filipe_La=C3=ADns?= , Bastien Nocera , Rafael Passos , =?utf-8?q?Gr=C3=A9goire_Stein?= , Alexey Zagorodnikov , Oleksandr Natalenko , Roman Stingler , Lovekesh Solanki , =?utf-8?q?Kate=C5=99ina_Medv=C4=9Bdov=C3=A1?= , linux-input@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Erik_H=C3=A5kansson?= X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790098832; l=4338; i=erikhakan@gmail.com; s=20260922; h=from:subject:message-id; bh=Tx1KkmYROfO1CWYQM4qI1q9ERT+FuFqrDr4AZWkTke8=; b=Z6IQPsKCiRhe4UwSYY74dgTL0TJrDDYDgh0fZq5wwNtdk3fvcrezRtAM7jOdBduOCLRhK7det pt5odG8kOB9Cs3PxJKRu4sxmcR/FgmSccyCOPYQJHVhTZpbv4pZqgbP X-Developer-Key: i=erikhakan@gmail.com; a=ed25519; pk=brCZX79/H6Z7mPgiNX6TDY45ZjODPth0eXRDUgh1mNI= This series aims to fix high-resolution wheel handling for Logitech devices connected through Bolt receivers as well as respect user settings for scroll behaviour. Patch 1 is Rafael Passos’s original implementation: https://lore.kernel.org/linux-input/20260904034843.1340846-1-rafael@rcpassos.me/ His patch routes Bolt wheel movement through the HID++ child, where the device’s HiRes Wheel multiplier can be applied. Patch 2 builds on Rafael’s work by 1. supporting both high-resolution and low-resolution scroll events, and 2. preserving user-selected high-resolution and inversion settings. The follow-up patch was developed with reference to the patches and reported behavior in Magnetar-OS’s `logitech-bolt-hidpp-dkms` repository: https://github.com/Magnetar-OS/logitech-bolt-hidpp-dkms/tree/main/patches So my assumption right now is that the reason for the divergent results people have had with the two different fix approaches (i.e. either passing interface 0 and 1 as DJ interfaces, or Rafael's approach), where it works for some, and only sometimes, etc. is that with user settings coming from Solaar, we may end up in weird states. For example, in the original patch, high-resolution events would go through the generic HID which would treat each tick as a full wheel event, thus scaling the scroll way too far. That was solved with Rafael's patch but that would instead fail to handle low-resolution events if high resolution was turned off in Solaar while use_hidpp remained enabled, so a low-resolution delta would be treated as high-resolution, which would result instead in a too slow scroll. Possibly, when Oleksandr switched devices, Solaar reapplied some saved user settings, which conflicted with the driver logic. With this patch, user settings from Solaar (or elsewhere) for high-resolution mode and scroll inversion will be respected, and scrolling should work both in high-resolution and low-resolution mode. However, if user-space turns off the use_hidpp setting while high_resolution remains on, this will route high-resolution scroll events to generic HID. Thus, when high_resolution is on for a Bolt device, the driver will force use_hidpp to be on during initialisation or reinitialisation, because otherwise the scaling issue will return. Solaar may still, after driver initialisation, reapply a saved use_hidpp setting of off while high_resolution remains on, or the user may change it to off, which will cause the issue even with this patch. In theory, it should be possible to look at incoming setWheelMode responses or notifications and, just like on initialisation, enforce use_hidpp as long as high_resolution is set on a Bolt device. However, I don't know how Solaar will behave then. There's a risk it will trigger a back-and-forth if Solaar reapplies its saved setting after the kernel corrects it. Also, even if that doesn't happen, we should respect user choice even for use_hidpp. Perhaps the Solaar team can be informed about the problem so they can add a warning text. Note that I don't have a Bolt mouse to test this with, and my theory is mostly inferred, so I would appreciate very much if people with various Bolt mice could test it out. Also great if you try different settings in Solaar, but note that use_hidpp must be on if high_resolution is on, so either set it to on in Solaar, or to ignore. Link: https://lore.kernel.org/linux-input/20260712003051.338194-2-erikhakan@gmail.com/ Link: https://lore.kernel.org/linux-input/20260901-bolt-scroll-fix-v1-1-58bca7ae487f@protonmail.com/ Link: https://lore.kernel.org/linux-input/LYMlyJcyQt29e1KlLnEoLw@natalenko.name/ Link: https://lore.kernel.org/linux-input/20260920094508.39682-1-roman.stingler@gmail.com/ Signed-off-by: Erik Håkansson --- Erik Håkansson (1): HID: logitech-hidpp: fix Bolt wheel mode handling Rafael Passos (1): HID: logitech-hidpp: fix hi-res scroll for Bolt-connected MX Master drivers/hid/hid-logitech-hidpp.c | 147 ++++++++++++++++++++++++++++++++------- 1 file changed, 123 insertions(+), 24 deletions(-) --- base-commit: 022eb347ff3a48281e7e69c3addcb11bf24afa53 change-id: 20260921-feature-bolt-fix-5f1f642496df Best regards, -- Erik Håkansson