// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
/*
 * Copyright (C) 2024 Ryan Walklin <ryan@testtoast.com>.
 */

/dts-v1/;

#include "sun50i-h616.dtsi"

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/linux-event-codes.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/leds/common.h>

/ {
	model = "Anbernic RG35XX 2024";
	chassis-type = "handset";
	compatible = "anbernic,rg35xx-2024", "allwinner,sun50i-h700";

	aliases {
		serial0 = &uart0;
	};

	chosen {
		stdout-path = "serial0:115200n8";
	};

	gpio_keys_gamepad: gpio-keys-gamepad {
		compatible = "gpio-keys";

		button-a {
			label = "Action-Pad A";
			gpios = <&pio 0 0 GPIO_ACTIVE_LOW>; /* PA0 */
			linux,input-type = <EV_KEY>;
			linux,code = <BTN_EAST>;
		};

		button-b {
			label = "Action-Pad B";
			gpios = <&pio 0 1 GPIO_ACTIVE_LOW>; /* PA1 */
			linux,input-type = <EV_KEY>;
			linux,code = <BTN_SOUTH>;
		};

		button-down {
			label = "D-Pad Down";
			gpios = <&pio 4 0 GPIO_ACTIVE_LOW>; /* PE0 */
			linux,input-type = <EV_KEY>;
			linux,code = <BTN_DPAD_DOWN>;
		};

		button-l1 {
			label = "Key L1";
			gpios = <&pio 0 10 GPIO_ACTIVE_LOW>; /* PA10 */
			linux,input-type = <EV_KEY>;
			linux,code = <BTN_TL>;
		};

		button-l2 {
			label = "Key L2";
			gpios = <&pio 0 11 GPIO_ACTIVE_LOW>; /* PA11 */
			linux,input-type = <EV_KEY>;
			linux,code = <BTN_TL2>;
		};

		button-left {
			label = "D-Pad left";
			gpios = <&pio 0 8 GPIO_ACTIVE_LOW>; /* PA8 */
			linux,input-type = <EV_KEY>;
			linux,code = <BTN_DPAD_LEFT>;
		};

		button-menu {
			label = "Key Menu";
			gpios = <&pio 4 3 GPIO_ACTIVE_LOW>; /* PE3 */
			linux,input-type = <EV_KEY>;
			linux,code = <BTN_MODE>;
		};

		button-r1 {
			label = "Key R1";
			gpios = <&pio 0 12 GPIO_ACTIVE_LOW>; /* PA12 */
			linux,input-type = <EV_KEY>;
			linux,code = <BTN_TR>;
		};

		button-r2 {
			label = "Key R2";
			gpios = <&pio 0 7 GPIO_ACTIVE_LOW>; /* PA7 */
			linux,input-type = <EV_KEY>;
			linux,code = <BTN_TR2>;
		};

		button-right {
			label = "D-Pad Right";
			gpios = <&pio 0 9 GPIO_ACTIVE_LOW>; /* PA9 */
			linux,input-type = <EV_KEY>;
			linux,code = <BTN_DPAD_RIGHT>;
		};

		button-select {
			label = "Key Select";
			gpios = <&pio 0 5 GPIO_ACTIVE_LOW>; /* PA5 */
			linux,input-type = <EV_KEY>;
			linux,code = <BTN_SELECT>;
		};
		button-start {
			label = "Key Start";
			gpios = <&pio 0 4 GPIO_ACTIVE_LOW>; /* PA4 */
			linux,input-type = <EV_KEY>;
			linux,code = <BTN_START>;
		};

		button-up {
			label = "D-Pad Up";
			gpios = <&pio 0 6 GPIO_ACTIVE_LOW>; /* PA6 */
			linux,input-type = <EV_KEY>;
			linux,code = <BTN_DPAD_UP>;
		};

		button-x {
			label = "Action-Pad X";
			gpios = <&pio 0 3 GPIO_ACTIVE_LOW>; /* PA3 */
			linux,input-type = <EV_KEY>;
			linux,code = <BTN_NORTH>;
		};

		button-y {
			label = "Action Pad Y";
			gpios = <&pio 0 2 GPIO_ACTIVE_LOW>; /* PA2 */
			linux,input-type = <EV_KEY>;
			linux,code = <BTN_WEST>;
		};
	};

	gpio-keys-volume {
		compatible = "gpio-keys";
		autorepeat;

		button-vol-up {
			label = "Key Volume Up";
			gpios = <&pio 4 1 GPIO_ACTIVE_LOW>; /* PE1 */
			linux,input-type = <EV_KEY>;
			linux,code = <KEY_VOLUMEUP>;
		};

		button-vol-down {
			label = "Key Volume Down";
			gpios = <&pio 4 2 GPIO_ACTIVE_LOW>; /* PE2 */
			linux,input-type = <EV_KEY>;
			linux,code = <KEY_VOLUMEDOWN>;
		};
	};

	leds {
		compatible = "gpio-leds";

		led-0 {
			function = LED_FUNCTION_POWER;
			color = <LED_COLOR_ID_GREEN>;
			gpios = <&pio 8 12 GPIO_ACTIVE_HIGH>; /* PI12 */
			default-state = "on";
		};
	};

	reg_vcc5v: regulator-vcc5v { /* USB-C power input */
		compatible = "regulator-fixed";
		regulator-name = "vcc-5v";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
	};
};

&cpu0 {
	cpu-supply = <&reg_dcdc1>;
};

&ehci0 {
	status = "okay";
};

&mmc0 {
	vmmc-supply = <&reg_cldo3>;
	disable-wp;
	cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>;  /* PF6 */
	bus-width = <4>;
	status = "okay";
};

&ohci0 {
	status = "okay";
};

&pio {
	vcc-pa-supply = <&reg_cldo3>;
	vcc-pc-supply = <&reg_cldo3>;
	vcc-pe-supply = <&reg_cldo3>;
	vcc-pf-supply = <&reg_cldo3>;
	vcc-pg-supply = <&reg_aldo4>;
	vcc-ph-supply = <&reg_cldo3>;
	vcc-pi-supply = <&reg_cldo3>;
};

&r_rsb {
	status = "okay";

	axp717: pmic@3a3 {
		compatible = "x-powers,axp717";
		reg = <0x3a3>;
		interrupt-controller;
		#interrupt-cells = <1>;
		interrupt-parent = <&nmi_intc>;
		interrupts = <0 IRQ_TYPE_LEVEL_LOW>;

		vin1-supply = <&reg_vcc5v>;
		vin2-supply = <&reg_vcc5v>;
		vin3-supply = <&reg_vcc5v>;
		vin4-supply = <&reg_vcc5v>;

		regulators {
			reg_dcdc1: dcdc1 {
				regulator-always-on;
				regulator-min-microvolt = <900000>;
				regulator-max-microvolt = <1100000>;
				regulator-name = "vdd-cpu";
			};

			reg_dcdc2: dcdc2 {
				regulator-always-on;
				regulator-min-microvolt = <940000>;
				regulator-max-microvolt = <940000>;
				regulator-name = "vdd-gpu-sys";
			};

			reg_dcdc3: dcdc3 {
				regulator-always-on;
				regulator-min-microvolt = <1100000>;
				regulator-max-microvolt = <1100000>;
				regulator-name = "vdd-dram";
			};

			reg_aldo1: aldo1 {
				/* 1.8v - unused */
			};

			reg_aldo2: aldo2 {
				/* 1.8v - unused */
			};

			reg_aldo3: aldo3 {
				/* 1.8v - unused */
			};

			reg_aldo4: aldo4 {
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <1800000>;
				regulator-name = "vcc-pg";
			};

			reg_bldo1: bldo1 {
				/* 1.8v - unused */
			};

			reg_bldo2: bldo2 {
				regulator-always-on;
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <1800000>;
				regulator-name = "vcc-pll";
			};

			reg_bldo3: bldo3 {
				/* 2.8v - unused */
			};

			reg_bldo4: bldo4 {
				/* 1.2v - unused */
			};

			reg_cldo1: cldo1 {
				/* 3.3v - audio codec - not yet implemented */
			};

			reg_cldo2: cldo2 {
				/* 3.3v - unused */
			};

			reg_cldo3: cldo3 {
				regulator-always-on;
				regulator-min-microvolt = <3300000>;
				regulator-max-microvolt = <3300000>;
				regulator-name = "vcc-io";
			};

			reg_cldo4: cldo4 {
				regulator-min-microvolt = <3300000>;
				regulator-max-microvolt = <3300000>;
				regulator-name = "vcc-wifi";
			};

			reg_boost: boost {
				regulator-min-microvolt = <5000000>;
				regulator-max-microvolt = <5200000>;
				regulator-name = "boost";
			};

			reg_cpusldo: cpusldo {
				/* unused */
			};
		};
	};
};

&uart0 {
	pinctrl-names = "default";
	pinctrl-0 = <&uart0_ph_pins>;
	status = "okay";
};

/* the AXP717 has USB type-C role switch functionality, not yet described by the binding */
&usbotg {
	dr_mode = "peripheral";   /* USB type-C receptable */
	status = "okay";
};

&usbphy {
	status = "okay";
};
