Skip to content

hid: asus-ally-hid: add the ROG ally driver#11

Open
NeroReflex wants to merge 17 commits intoOpenGamingCollective:ogc-6.19.yfrom
NeroReflex:ogc-6.19.y
Open

hid: asus-ally-hid: add the ROG ally driver#11
NeroReflex wants to merge 17 commits intoOpenGamingCollective:ogc-6.19.yfrom
NeroReflex:ogc-6.19.y

Conversation

@NeroReflex
Copy link

@NeroReflex NeroReflex commented Feb 19, 2026

This patchset add the ROG ally driver as in use on chachyos already.

This patch series is in development and is added to avoid regressing
ROG ally and ROG ally x devices, allowing InputPlumber to control the
device.

This driver is in development: the current form is unsuitable for upstream
because it creates a subtree in drivers/hid and because of various syntactic
thing to iron out.

Link: https://lore.kernel.org/all/20240806081212.56860-1-luke@ljones.dev/

Copy link
Member

@pastaq pastaq left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please follow the guidance listed here for PR's to the kernel as it makes updating the base version much easier.

https://github.com/OpenGamingCollective/organization-governance/blob/main/kernel/kernel_patching.md

Specifically, the patches should be labeled as [FOR-UPSTREAM] since this version is not yet on the ML.

@NeroReflex NeroReflex changed the title Add ROG Ally driver hid: asus-ally-hid: add the ROG ally driver Feb 19, 2026
@NeroReflex
Copy link
Author

git just strips the tag. No idea how to retain it

@pastaq
Copy link
Member

pastaq commented Feb 19, 2026

git just strips the tag. No idea how to retain it

Use git log to find the sha of the last commit before your series. Then change pick to reword for each commit and save/close the editor. This will open each commit message in your editor and you can make the changes there, then force push your branch when done.

@NeroReflex
Copy link
Author

git just strips the tag. No idea how to retain it

Use git log to find the sha of the last commit before your series. Then change pick to reword for each commit and save/close the editor. This will open each commit message in your editor and you can make the changes there, then force push your branch when done.

done

@pastaq
Copy link
Member

pastaq commented Feb 24, 2026

Please use [FOR-UPSTREAM] to indicate that it is a WIP driver that will be upstreamed eventually and not a hack we need to maintain until a new approach is found. Also please list the reason(s) why it hasn't been submitted yet in the top comment.

flukejones and others added 17 commits February 24, 2026 20:31
Adds basic support for the joystick RGB LED rings as a multicolour LED
device with 4 LEDs. As this uses the software-mode for setting the LED
colours it also sets the MCU-mode for LED's to static + the first RGB
colour on suspend/reboot/shutdown. This is done to prevent user confusion
if the LED's were to not match what was set, and to maintain consistency.

Signed-off-by: Luke D. Jones <luke@ljones.dev>
Export the validate_mcu_fw_version() symbol in namespace and use in
hid-asus-ally if the driver is enabled.

Signed-off-by: Luke Jones <luke@ljones.dev>
Enable use of the new gamepad device created by the MCU.
- Triggers
- Buttons
- Sticks
- Vibration

Signed-off-by: Luke D. Jones <luke@ljones.dev>
Add the basics of the gamepad configuration options. Makes the gamepad
usable.

Signed-off-by: Luke D. Jones <luke@ljones.dev>
Add the full set of button remapping abilities for plain remap and macro
remap (hold one button, press another for macro mapped action).

Signed-off-by: Luke D. Jones <luke@ljones.dev>
Signed-off-by: Luke D. Jones <luke@ljones.dev>
Signed-off-by: Luke D. Jones <luke@ljones.dev>
Signed-off-by: Luke D. Jones <luke@ljones.dev>
Signed-off-by: Luke D. Jones <luke@ljones.dev>
Signed-off-by: Luke D. Jones <luke@ljones.dev>
Signed-off-by: Luke D. Jones <luke@ljones.dev>
Add the mcu_version sysfs attribute so that userspace has a way to check
the MCU FW version.

Signed-off-by: Luke Jones <luke@ljones.dev>
Signed-off-by: Luke D. Jones <luke@ljones.dev>
The hid report for the QAM button changed on the ASUS ROG Xbox Ally X,
so add the new mapping for the short press event. Otherwise, all we get
is a long press event on "Asus Keyboard".

neptune:
We're carrying this as [NOT-FOR-UPSTREAM] because the last version of
hid-asus-ally on lkml was in August of 2024, and we have some divergence
from the last submission upstream. This should be included upstream when
there is a new submission for hid-asus-ally.

Reviewed-by: Derek J. Clark <derekjohn.clark@gmail.com>
Signed-off-by: Matthew Schwartz <matthew.schwartz@linux.dev>
With the current ROG Ally patchset, the MCU will send spurious events
when the ROG Ally is in s2idle while plugged in, which can cause the
system to wake unexpectedly.

There's really no reason the N-Key needs wakeup enabled, so just
disable the capability for now. This can be dropped when the issue is
root caused and fixed within the standard ROG Ally patchset.

Closes: ValveSoftware/SteamOS#2119
Signed-off-by: Matthew Schwartz <matthew.schwartz@linux.dev>
@NeroReflex
Copy link
Author

Please use [FOR-UPSTREAM] to indicate that it is a WIP driver that will be upstreamed eventually and not a hack we need to maintain until a new approach is found. Also please list the reason(s) why it hasn't been submitted yet in the top comment.

done and done

pull bot pushed a commit that referenced this pull request Feb 27, 2026
The ETM decoder incorrectly assumed that auxtrace queue indices were
equivalent to CPU number. This assumption is used for inserting records
into the queue, and for fetching queues when given a CPU number. This
assumption held when Perf always opened a dummy event on every CPU, even
if the user provided a subset of CPUs on the commandline, resulting in
the indices aligning.

For example:

  # event : name = cs_etm//u, , id = { 2451, 2452 }, type = 11 (cs_etm), size = 136, config = 0x4010, { sample_period, samp>
  # event : name = dummy:u, , id = { 2453, 2454, 2455, 2456 }, type = 1 (PERF_TYPE_SOFTWARE), size = 136, config = 0x9 (PER>

  0 0 0x200 [0xd0]: PERF_RECORD_ID_INDEX nr: 6
  ... id: 2451  idx: 2  cpu: 2  tid: -1
  ... id: 2452  idx: 3  cpu: 3  tid: -1
  ... id: 2453  idx: 0  cpu: 0  tid: -1
  ... id: 2454  idx: 1  cpu: 1  tid: -1
  ... id: 2455  idx: 2  cpu: 2  tid: -1
  ... id: 2456  idx: 3  cpu: 3  tid: -1

Since commit 811082e ("perf parse-events: Support user CPUs mixed
with threads/processes") the dummy event no longer behaves in this way,
making the ETM event indices start from 0 on the first CPU recorded
regardless of its ID:

  # event : name = cs_etm//u, , id = { 771, 772 }, type = 11 (cs_etm), size = 144, config = 0x4010, { sample_period, sample>
  # event : name = dummy:u, , id = { 773, 774 }, type = 1 (PERF_TYPE_SOFTWARE), size = 144, config = 0x9 (PERF_COUNT_SW_DUM>

  0 0 0x200 [0x90]: PERF_RECORD_ID_INDEX nr: 4
  ... id: 771  idx: 0  cpu: 2  tid: -1
  ... id: 772  idx: 1  cpu: 3  tid: -1
  ... id: 773  idx: 0  cpu: 2  tid: -1
  ... id: 774  idx: 1  cpu: 3  tid: -1

This causes the following segfault when decoding:

  $ perf record -e cs_etm//u -C 2,3 -- true
  $ perf report

  perf: Segmentation fault
  -------- backtrace --------
  #0 0xaaaabf9fd020 in ui__signal_backtrace setup.c:110
  #1 0xffffab5c7930 in __kernel_rt_sigreturn [vdso][930]
  #2 0xaaaabfb68d30 in cs_etm_decoder__reset cs-etm-decoder.c:85
  #3 0xaaaabfb65930 in cs_etm__get_data_block cs-etm.c:2032
  #4 0xaaaabfb666fc in cs_etm__run_per_cpu_timeless_decoder cs-etm.c:2551
  #5 0xaaaabfb6692c in (cs_etm__process_timeless_queues cs-etm.c:2612
  #6 0xaaaabfb63390 in cs_etm__flush_events cs-etm.c:921
  #7 0xaaaabfb324c0 in auxtrace__flush_events auxtrace.c:2915
  #8 0xaaaabfaac378 in __perf_session__process_events session.c:2285
  #9 0xaaaabfaacc9c in perf_session__process_events session.c:2442
  #10 0xaaaabf8d3d90 in __cmd_report builtin-report.c:1085
  #11 0xaaaabf8d6944 in cmd_report builtin-report.c:1866
  #12 0xaaaabf95ebfc in run_builtin perf.c:351
  #13 0xaaaabf95eeb0 in handle_internal_command perf.c:404
  #14 0xaaaabf95f068 in run_argv perf.c:451
  #15 0xaaaabf95f390 in main perf.c:558
  #16 0xffffaab97400 in __libc_start_call_main libc_start_call_main.h:74
  #17 0xffffaab974d8 in __libc_start_main@@GLIBC_2.34 libc-start.c:128
  #18 0xaaaabf8aa8f0 in _start perf[7a8f0]

Fix it by inserting into the queues based on CPU number, rather than
using the index.

Fixes: 811082e ("perf parse-events: Support user CPUs mixed with threads/processes")
Signed-off-by: James Clark <james.clark@linaro.org>
Tested-by: Leo Yan <leo.yan@arm.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: coresight@lists.linaro.org
Cc: Ian Rogers <irogers@google.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: John Garry <john.g.garry@oracle.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Mike Leach <mike.leach@linaro.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
Cc: Thomas Falcon <thomas.falcon@intel.com>
Cc: Will Deacon <will@kernel.org>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.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.

4 participants