I recently invested in a ROG Ally to begin properly supporting it under Linux. The patch for this is a little way off being mainlined as I'm looking at different ways to actually do this functionality in a way that I can add some other ROG things like LED control, AniMe Matrix display and some other stuff. The patch so far has:
- add xpad mode
- add deadzones
- add anti-deadzones
- add gamepad button remapping
- add gamepad mapping reset for xpad and wasd modes
- add turbo mode for individual buttons
- add joystick response curves
- add vibration intensity settings
- add calibration setting
Of note is the final item "calibration setting". From what I understand there is a baseline set in production, and the values used in a calibration are a deviation of this - I now have the method to fetch these values so I will be trialling calibration methods. This patch is still in testing in the ChimeraOS discord, and likely also in Nobara Steam Deck edition. Once I get the last pieces in place I will begin upstream submission (in case I wasn't clear).
The final step might be to adjust this patch so that the ROG stuff is an additional kernel module loaded by the "hid-asus" module if required. But I dunno, in practice the extra compiled size is tiny in relation to all other things.
So after the above I will likely begin working on adding some methods to better and easier control the LEDs - but there is two big problems (or a few depending on how you look at it)
- Every laptop has different basic modes built in
- Every laptop has different "advanced/aura-sync" ability (such as multizone vs per-key) it means I need to turn this in to bitmasks, add every record here, and add a way for users to add/adjust their model if it doesn't exist in the known list.
I don't know how I want to approach this yet... do I try to move this functionality in to the kernel, or do I support only one single basic mode (static). I added similar control for the TUF laptops already which looks like:
$ cat kbd_rgb_mode_index
$ cmd mode red green blue speed
note that this isn't the LED Multicolor class that the kernel has - I tried that and it was a journey. I will revisit it however, maybe I've learned something in the last year that might help. Lastly, I'm adding some extra WMI methods soon. You can see the table of WMI methods I've built up here. These were discovered through reverse engineering using ghidra and cutter. Oh and this leads me to the on-going tablet issues, I will begin to work on these again soon.
PS: of special note is that 2023 laptops using Cirrus amps have now been fixed, or if not fixed in these patches the framework is at least added for fixing them. See the patch series by Cirrus here. This patch series has landed in 6.7.0-rc8, I am unsure if it will hit the stable branches, typically sound patches like this do but the amount of work done here might negate that.