Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

thanks, could you merge this with 0047-arm64-dts-qcom-Add-AYN-Odin3.patch

Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
From: Anze <aanzdev@gmail.com>
Subject: [PATCH] arm64: dts: qcom: AYN Odin 3 - expose the two back paddles

The AYN Odin 3 has two extra "macro" paddles (M1, M2) on the back, below the
L1/L2 and R1/R2 shoulder buttons. They are NOT on the gamepad MCU serial
(rsinput) and NOT analog/ADC despite AYN's Android driver naming ("adckey" /
keydetect.ko) - they are two plain active-low SoC TLMM GPIOs that AYN's Android
keydetect driver polls (gpio_request(515)/gpio_request(519) = TLMM base 512 +
offsets 3 and 7; reverse-engineered from /vendor/lib/modules/keydetect.ko).

Stock ROCKNIX has no driver for them, so the paddles do nothing. Expose them as
a standard gpio-keys device:

M1 (left paddle) = TLMM GPIO 3 -> BTN_Z
M2 (right paddle) = TLMM GPIO 7 -> BTN_C

BTN_Z / BTN_C are spare gamepad button codes (unused on a modern Xbox-style
layout) and are exactly what AYN's own Android firmware reports for these
paddles. ROCKNIX's InputPlumber capability map for this controller
(ayn_mcu.yaml) already maps BTN_Z -> LeftPaddle1 and BTN_C -> RightPaddle1, so
once the kernel emits them they are forwarded as real paddle buttons usable in
games and Steam. Pins are configured input with a pull-up (released = high,
pressed = low).

---
--- a/arch/arm64/boot/dts/qcom/cq8725s-ayn-odin3.dts
+++ b/arch/arm64/boot/dts/qcom/cq8725s-ayn-odin3.dts
@@ -310,4 +310,42 @@
bias-pull-down;
drive-strength = <2>;
};
+
+ paddle_keys_default: paddle-keys-default-state {
+ pins = "gpio3", "gpio7";
+ function = "gpio";
+ bias-pull-up;
+ drive-strength = <2>;
+ };
+};
+
+/*
+ * AYN Odin 3 has two extra back paddles (M1, M2) below the shoulder
+ * triggers. They are plain active-low SoC TLMM GPIOs (M1 = GPIO_3,
+ * M2 = GPIO_7), not on the gamepad MCU UART and not ADC (despite AYN's
+ * Android "adckey"/keydetect.ko naming). Expose them as a gpio-keys
+ * device emitting BTN_Z (M1, left) / BTN_C (M2, right); ROCKNIX's
+ * InputPlumber map (ayn_mcu.yaml) already routes BTN_Z -> LeftPaddle1 and
+ * BTN_C -> RightPaddle1. RE'd from the AYN Android keydetect driver
+ * (gpio_request 515/519 = TLMM base 512 + offsets 3/7).
+ */
+/ {
+ gpio-keys-paddles {
+ compatible = "gpio-keys";
+ pinctrl-names = "default";
+ pinctrl-0 = <&paddle_keys_default>;
+
+ key-paddle-m1 {
+ label = "Back Paddle M1";
+ linux,code = <BTN_Z>;
+ gpios = <&tlmm 3 GPIO_ACTIVE_LOW>;
+ debounce-interval = <15>;
+ };
+
+ key-paddle-m2 {
+ label = "Back Paddle M2";
+ linux,code = <BTN_C>;
+ gpios = <&tlmm 7 GPIO_ACTIVE_LOW>;
+ debounce-interval = <15>;
+ };
+ };
};
Loading