[PATCH v3 00/12] HID: asus: add support for ROG Ally handhelds

From: Denis Benato

Date: Sun Aug 23 2026 - 14:59:50 EST


Hi all,

This patch series adds support for ROG Ally handhelds in the HID driver for ASUS devices.

The changes include reinitialization of the device after exiting a sleep state,
gamepad configuration, vibration strength configuration, joysticks and triggers
range configuration, anti-deadzone configuration, response curve support,
force feedback support, gamepad mode support, turbo buttons support,
and button remapping support.

This driver is based on the original Luke's work, which was a great starting point
and I have reworked it to be upstreamable, while keeping the original functionality
intact and extending hid-asus to avoid regressions in functionality such as the
backlight control.

The ally support has been a surprisingly long task, spanning multiple years and
being used in Steam OS and well as other distributions for quite a while,
and I am happy to finally be submitting it.

At this time LEDs are not part of the patch series as I have work in progress to
unify LEDs handling across all ASUS devices, and I will submit that in a separate
patch series when the userspace interface will be ready to express capabilities
of these devices, but that will take some more time.

This driver is the culmination of a lot of work, from many different people,
and I want to thank Luke for his original work, as well as the many people that have
helped me test and provide feedback on the driver: Khamunetri, Jonathan, Derek,
Matthew and others that have helped during these years.

Best regards,
Denis Benato

-v2
- HID: asus: add support for ROG Ally handhelds
- release all vendor buttons on resume
- align arguments of hid_asus_ally_raw_event()
- HID: asus: add gamepad configuration
- clean up comments and kernel-doc
- HID: asus: add vibration strength configuration
- clean up comments and kernel-doc
- HID: asus: add joysticks inner and outer range configuration
- clean up comments and kernel-doc
- HID: asus: add triggers inner and outer range configuration
- clean up comments and kernel-doc
- HID: asus: add joysticks anti-deadzone configuration
- clean up comments and kernel-doc
- HID: asus: add support for response curve
- normalize kernel-doc comment
- HID: asus: add support to force feedback
- remove a stale comment
- HID: asus: add support for gamepad mode
- remove a stale comment, normalize kernel-doc
- HID: asus: add support for turbo buttons
- remove stale comments, normalize kernel-doc
- HID: asus: add support for btn remapping
- convert function comments to kernel-doc

-v3
- HID: asus: add support for ROG Ally handhelds
- take references on input devices to avoid use-after-free on unbind
- reject probes from USB devices other than the recorded controller
- add open/close callbacks to the gamepad input device
- keyboard_input is populated after hid_hw_start(): issue does not apply
- HID: asus: add gamepad configuration
- restore cached Xbox controller mode after an MCU reset
- convert remaining scoped_guard() users to guard()
- avoid printing "(null)" for unnamed sysfs groups
- HID: asus: add vibration strength configuration
- send MCU commands through ally_gamepad_send_packet()
- HID: asus: add joysticks inner and outer range configuration
- send MCU commands through ally_gamepad_send_packet()
- gate sysfs groups and callbacks on capabilities
- HID: asus: add triggers inner and outer range configuration
- send MCU commands through ally_gamepad_send_packet()
- gate sysfs groups and callbacks on capabilities
- HID: asus: add joysticks anti-deadzone configuration
- send MCU commands through ally_gamepad_send_packet()
- gate sysfs groups and callbacks on capabilities
- HID: asus: add support for response curve
- send MCU commands through ally_gamepad_send_packet()
- check resp_curve_support in show callbacks too
- HID: asus: add support to force feedback
- read ally_x_hdev under ally_data_lock and take a reference on it
- publish ally_x_hdev before registering the input device
- HID: asus: add support for gamepad mode
- convert remaining scoped_guard() users to guard()
- HID: asus: add support for turbo buttons
- pass the config pointer directly to ally_config_remove()
- run ally_config_remove() outside ally_data_lock
- restore cached values when the hardware rejects an update
- check turbo_support in show callbacks too
- reported scoped_guard warning verified as false positive
- HID: asus: add support for btn remapping
- look up default mappings by name instead of array index
- resend the old mapping when a sequential update fails midway
- allow macros regardless of the gamepad mode
- rename PAD_* codes to proper input event names
- convert remaining scoped_guard() users to guard()

Denis Benato (12):
HID: asus: reinitialize the device after exiting a sleep state
HID: asus: add support for ROG Ally handhelds
HID: asus: add gamepad configuration
HID: asus: add vibration strength configuration
HID: asus: add joysticks inner and outer range configuration
HID: asus: add triggers inner and outer range configuration
HID: asus: add joysticks anti-deadzone configuration
HID: asus: add support for response curve
HID: asus: add support to force feedback
HID: asus: add support for gamepad mode
HID: asus: add support for turbo buttons
HID: asus: add support for btn remapping

drivers/hid/hid-asus.c | 4997 ++++++++++++++++++++++++++++++++++++++--
1 file changed, 4836 insertions(+), 161 deletions(-)

--
2.47.3