Skip to content

HID: asus: fix ROG Ally joystick ring LEDs, add strobe/direction - #3

Open
kndclark wants to merge 3 commits into
NeroReflex:allyfrom
kndclark:ally-led-fixes
Open

HID: asus: fix ROG Ally joystick ring LEDs, add strobe/direction#3
kndclark wants to merge 3 commits into
NeroReflex:allyfrom
kndclark:ally-led-fixes

Conversation

@kndclark

Copy link
Copy Markdown

First patch fixes the joystick ring on top of the multi-zone rework. hardware tested on an Ally X across all modes and suspend/resume. The remaining three restore effects that the rework didn't carry over: strobe, a background color for breathing, and direction for animated effects.

@NeroReflex
NeroReflex force-pushed the ally branch 4 times, most recently from f759008 to bbd3c71 Compare July 26, 2026 01:49
@NeroReflex
NeroReflex force-pushed the ally branch 2 times, most recently from 7c00659 to 9bc9553 Compare July 26, 2026 16:51
@kndclark
kndclark force-pushed the ally-led-fixes branch 3 times, most recently from a59abf3 to 308d8df Compare July 26, 2026 21:43
@kndclark kndclark changed the title HID: asus: fix ROG Ally joystick ring LEDs, add strobe/color2/direction HID: asus: fix ROG Ally joystick ring LEDs, add strobe/direction Jul 26, 2026
kndclark added 3 commits July 29, 2026 18:21
The Ally X gamepad interface delivers 16 byte input reports: the report
id followed by six 16-bit axes and three button bytes. The report struct
declared a fourth button byte that does not exist on the wire, so the
size check introduced alongside it required 17 bytes and rejected every
report. The events then fell through to the generic HID parser, whose
descriptor-derived gamepad exposes a different button set, scrambling
the buttons seen by userspace.

Size the struct to match the wire and pin it to the report size define
so the two cannot drift apart again.

Signed-off-by: Khamunetri Clark <khamunetriclark@gmail.com>
The multicolor LED always exposes six components, three for the primary
color and three for the background color used by two-color effects.
Userspace that expects a plain RGB device cannot interpret that, and the
SteamOS color and brightness controls stop working on the ROG Ally as a
result.

Let the hardware description say how many components a device exposes,
report three for the Ally, and drive num_colors and the color_set
attributes from it. Devices that need the background color keep
exposing all six.

Tested on a ROG Ally X.

Signed-off-by: Khamunetri Clark <khamunetriclark@gmail.com>
A long press of the left front button makes the firmware emit a
ctrl-alt-del key sequence, which is detected and rewritten in place so
the generic parser reports it as a single key instead. The report is then
treated as fully handled and withheld from the parser, so the long press
produces no event at all.

Only the gamepad reports have to be kept away from the parser, as it
would otherwise create a second, overlapping gamepad for them. Let the
keyboard reports continue on to it.

Tested on a ROG Ally X: a long press of the left front button emits
KEY_F20 again, with a matching release.

Signed-off-by: Khamunetri Clark <khamunetriclark@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant