Re: [PATCH] HID: nintendo: fix rumble starved by the input report cadence gate

Jiri Kosina <[email protected]> Mon, 3 Aug 2026 20:04:38 +0200 (CEST)
Newsgroups org.kernel.vger.linux-input,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
On Sat, 1 Aug 2026, Alexandre Derumier wrote:

> Rumble on third-party controllers speaking the Switch protocol is weak
> and intermittent over bluetooth, and absent on some units.
> 
> Since commit d750d1480362 ("HID: nintendo: fix rumble rate limiter"),
> joycon_enforce_subcmd_rate() requires JC_SUBCMD_VALID_DELTA_REQ (3)
> consecutive input reports spaced 8-17ms apart before releasing a
> subcommand. That window is the official Pro Controller's bluetooth
> cadence, and controllers that do not report on it cannot pass the gate,
> so their rumble is starved.
> 
> Measured over bluetooth on one host, reading the controller directly,
> fraction of reports at which the requirement is met:
> 
>   official Pro Controller     95%
>   Datafrog clone              46-52%
>   8BitDo Pro 2                2.5-4%
> 
> The Pro 2 delivers reports in pairs, so 11-19% of its deltas are 0ms and
> reset the counter. Affected controllers report Nintendo's USB IDs, and
> the MAC is no better: the Datafrog clone reports an OUI registered to
> Nintendo, so identifying them by vendor would misclassify it.
> 
> Instead, notice when the requirement cannot be met: after
> JC_SUBCMD_RATE_MAX_FAILURES exhaustions of the limiter, fall back to the
> pre-d750d1480362 throttle, which keeps the 25ms spacing and the
> transmit-after-receive synchronisation from commit e93363f716a2 ("HID:
> nintendo: ratelimit subcommands and rumble") and drops only the cadence
> requirement. Exhaustions are counted cumulatively, as an affected
> controller meets the requirement occasionally and a consecutive count
> would never be reached.
> 
> Signed-off-by: Alexandre Derumier <[email protected]>

Applied, thanks.

-- 
Jiri Kosina
SUSE Labs