This action is only compatible with arkos4clone builds dated September 17, 2025 or later.
Please update if you’re on an older image.
Patch a single DTB in your own fork using GitHub Actions. The workflow:
- fixes the AMUX mapping based on what you currently feel on the sticks,
- toggles per-axis invert flags,
- updates 8 tuning values,
- and outputs one
.dtbfile whose filename matches your input.
Workflow file:
.github/workflows/patch-one-odroidgo3.yml
Python patch script:tools/patch_og3_joypad.py
Running in your fork keeps your DTB private and avoids sharing tokens or files with anyone else. All processing happens on GitHub’s runner in your own repo; the finished file is delivered as a private Actions artifact in your fork.
- Fork this repository.
- In your fork, enable Actions (Actions tab → “Enable workflows”).
- Commit your DTB to the fork (any path is fine).
- Go to Actions → Patch ONE odroidgo3-joypad DTB → Run workflow.
- Fill the inputs (see below) and run.
- When it finishes, open the run page and download the artifact (a zip containing only your patched
.dtb, same filename as input).
Default artifact retention is 1 day. You can change
retention-daysinside the workflow if needed.
Path to your DTB inside the repository. This must match the committed file exactly (case-sensitive).
- Examples:
rk3326-xf36pro-linux.dtb(file at repo root)dtbs/og3/odroidgo3.dtb(file in a subfolder)
If the workflow says “DTB not found”, double-check the path and file name in your fork.
Tell the action what you currently feel at the four positions [LX, LY, RX, RY].
The script uses your observation to reassign the existing four values to the correct mapping and writes it back.
Accepted values:
- Any permutation of
LX, LY, RX, RY(commas/spaces/full‑width separators OK; case‑insensitive) unchanged(do not modify AMUX)
Common recipes:
LX,LY,RX,RY— everything feels correct → mapping kept as is.LX,LY,RY,RX— right stick X/Y feel swapped → script swaps the right half.RX,RY,LX,LY— left stick ↔ right stick feel swapped (whole sticks swapped).
Intuition: you describe “what you feel at each position,” the script rebuilds the canonical mapping and writes it back to the DTB.
Toggle (flip) these axes’ invert flags. Use a CSV of any of: lx, ly, rx, ry (aliases absx, absy, absrx, absry also accepted).
- If a listed invert flag already exists, it will be removed.
- If it does not exist, it will be added.
- Axes not listed remain unchanged.
- Use
unchangedto skip.
Examples:
unchanged— don’t touch any inverts.ly— only toggle left‑Y.lx,rx— toggle X of both sticks.
Dead‑zone/curve tunings. Provide either:
- a single integer (applied to all 8 entries), default
200, or - 8 integers (CSV) in this order:
x+, x-, y+, y-, rx+, rx-, ry+, ry-.
Numbers are written into the DTS as hex cells (e.g., 200 → <0xC8>). Range: 0 … 4294967295.
Examples:
200180,180,200,200,220,220,200,200
- The action uploads one file: your patched
.dtb, with the same filename as the input’s basename.- Example: input
dtbs/og3/odroidgo3.dtb→ artifact containsodroidgo3.dtb.
- Example: input
- GitHub serves artifacts as zip containers; this zip contains only that one file.
- Default artifact retention: 1 day (edit in the workflow if you need longer/shorter).
-
Fork
Click Fork in the top‑right of this repo to create your copy. -
Enable Actions in your fork
Open the Actions tab in the fork. If prompted, click Enable workflows. -
Add your DTB
Put your.dtbfile somewhere in the repo (commit/push). Remember the relative path. -
Run the workflow
Actions → Patch ONE odroidgo3-joypad DTB → Run workflow.
Fill:
dtb_path— the exact path you committed (e.g.,rk3326-xf36pro-linux.dtb).amux_map— your observed order for[LX,LY,RX,RY](orunchanged).invert_axes— CSV likely/lx,rx/unchanged.tuning—200or 8 CSV numbers.
- Download
Open the run page; in the Artifacts box, download the zip (it contains just your patched.dtb).
Right stick X/Y feel swapped
amux_map:LX,LY,RY,RXinvert_axes:unchangedtuning:200
Whole sticks feel swapped (left ↔ right)
amux_map:RX,RY,LX,LY
Only make RY feel inverted
amux_map:unchangedinvert_axes:ry
Uniform tuning
tuning:210(applied to all 8 tuning entries)
-
“DTB not found”
Check thatdtb_pathmatches a committed file in your fork (case‑sensitive). The job summary lists detected.dtbfiles to help you pick a valid path. -
dtc/ device‑tree‑compiler errors
The workflow installsdevice-tree-compiler. If the install step failed, re‑run the job. Ifdtcparsing fails (e.g., “Properties must precede subnodes”), please share logs in an issue. -
AMUX format errors
amux_mapmust be a permutation ofLX,LY,RX,RYorunchanged. Separators and case are flexible. -
No artifact?
Ensure your fork’s Actions are enabled and you ran the workflow from the fork, not the upstream repo. Confirmtools/patch_og3_joypad.pyexists in your fork (the job checks this).
- Workflow permissions are
contents: read. It does not push to your repo or publish releases. - Your DTB is processed on GitHub’s runner within your fork.
- The only output is a private Actions artifact in your fork.
- No external services or secrets are required.
- Artifact retention: change
retention-daysin the “Upload patched DTB only” step (1by default). - Add more outputs: if you also want
before.dts,after.dts, or a diff, adjust the workflow to keep and upload those files. - Stricter AMUX validation: you can restrict
amux_mapto a few common patterns intools/patch_og3_joypad.pyif you prefer failing fast on unusual permutations.
If you find ArkOS4Clone helpful and want to support future development:\ 👉 https://ko-fi.com/lcdyk
Every donation helps testing new devices, improving compatibility, and speeding up development.\ Thank you for your support! 🙏