]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
arm64: dts: allwinner: anbernic-rg35xx-h: Add ADC joysticks
authorChris Morgan <macromorgan@hotmail.com>
Wed, 5 Jun 2024 17:20:49 +0000 (12:20 -0500)
committerChen-Yu Tsai <wens@csie.org>
Sat, 22 Jun 2024 12:14:34 +0000 (20:14 +0800)
Add support for the ADC joysticks found on the Anbernic RG35XX-H. The
joysticks use one channel of the GPADC which is muxed 4 ways by an ADC
mux.

Signed-off-by: Chris Morgan <macromorgan@hotmail.com>
Link: https://lore.kernel.org/r/20240605172049.231108-5-macroalpha82@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@csie.org>
arch/arm64/boot/dts/allwinner/sun50i-h700-anbernic-rg35xx-h.dts

index 63036256917f2f45fe7df8012d5a3e8fe37cfbcc..ff453336eab1d16fc67bada040fb9445f6629b9e 100644 (file)
@@ -9,6 +9,78 @@
 / {
        model = "Anbernic RG35XX H";
        compatible = "anbernic,rg35xx-h", "allwinner,sun50i-h700";
+
+       adc-joystick {
+               compatible = "adc-joystick";
+               io-channels = <&adc_mux 0>,
+                             <&adc_mux 1>,
+                             <&adc_mux 2>,
+                             <&adc_mux 3>;
+               pinctrl-0 = <&joy_mux_pin>;
+               pinctrl-names = "default";
+               poll-interval = <60>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               axis@0 {
+                       reg = <0>;
+                       abs-flat = <32>;
+                       abs-fuzz = <32>;
+                       abs-range = <4096 0>;
+                       linux,code = <ABS_X>;
+               };
+
+               axis@1 {
+                       reg = <1>;
+                       abs-flat = <32>;
+                       abs-fuzz = <32>;
+                       abs-range = <0 4096>;
+                       linux,code = <ABS_Y>;
+               };
+
+               axis@2 {
+                       reg = <2>;
+                       abs-flat = <32>;
+                       abs-fuzz = <32>;
+                       abs-range = <0 4096>;
+                       linux,code = <ABS_RX>;
+               };
+
+               axis@3 {
+                       reg = <3>;
+                       abs-flat = <32>;
+                       abs-fuzz = <32>;
+                       abs-range = <4096 0>;
+                       linux,code = <ABS_RY>;
+               };
+       };
+
+       adc_mux: adc-mux {
+               compatible = "io-channel-mux";
+               channels = "left_x", "left_y", "right_x", "right_y";
+               #io-channel-cells = <1>;
+               io-channels = <&gpadc 0>;
+               io-channel-names = "parent";
+               mux-controls = <&gpio_mux>;
+               settle-time-us = <100>;
+       };
+
+       gpio_mux: mux-controller {
+               compatible = "gpio-mux";
+               mux-gpios = <&pio 8 1 GPIO_ACTIVE_LOW>,
+                           <&pio 8 2 GPIO_ACTIVE_LOW>;
+               #mux-control-cells = <0>;
+       };
+};
+
+&gpadc {
+       #address-cells = <1>;
+       #size-cells = <0>;
+       status = "okay";
+
+       channel@0 {
+               reg = <0>;
+       };
 };
 
 &gpio_keys_gamepad {
 &ohci1 {
        status = "okay";
 };
+
+&pio {
+       joy_mux_pin: joy-mux-pin {
+               pins = "PI0";
+               function = "gpio_out";
+       };
+};