// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
/*
 * Device Tree Source for the RZ/V2M (r9a09g011) Evaluation Kit Board
 *
 * Copyright (C) 2022 Renesas Electronics Corp.
 */

/dts-v1/;
#include "r9a09g011.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/pinctrl/rzv2m-pinctrl.h>

/ {
	model = "RZ/V2M Evaluation Kit 2.0";
	compatible = "renesas,rzv2mevk2", "renesas,r9a09g011";

	aliases {
		serial0 = &uart0;
		ethernet0 = &avb;
	};

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

	connector {
		compatible = "usb-c-connector";
		label = "USB-C";
		data-role = "dual";

		ports {
			#address-cells = <1>;
			#size-cells = <0>;

			port@0 {
				reg = <0>;
				hs_ep: endpoint {
					remote-endpoint = <&usb3_hs_ep>;
				};
			};

			port@1 {
				reg = <1>;
				ss_ep: endpoint {
					remote-endpoint = <&hd3ss3220_in_ep>;
				};
			};
		};
	};

	memory@58000000 {
		device_type = "memory";
		/*
		 * first 1.25GiB is reserved for ISP Firmware,
		 * next 128MiB is reserved for secure area.
		 */
		reg = <0x0 0x58000000 0x0 0x28000000>;
	};

	memory@180000000 {
		device_type = "memory";
		reg = <0x1 0x80000000 0x0 0x80000000>;
	};

	reg_1v8: regulator-1v8 {
		compatible = "regulator-fixed";
		regulator-name = "fixed-1.8V";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;
		regulator-boot-on;
		regulator-always-on;
	};

	reg_3v3: regulator-3v3 {
		compatible = "regulator-fixed";
		regulator-name = "fixed-3.3V";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		regulator-boot-on;
		regulator-always-on;
	};

	vccq_sdhi0: regulator-vccq-sdhi0 {
		compatible = "regulator-gpio";

		regulator-name = "SDHI0 VccQ";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <3300000>;

		gpios = <&pwc 0 GPIO_ACTIVE_HIGH>;
		gpios-states = <1>;
		states = <3300000 0>, <1800000 1>;
	};
};

&avb {
	renesas,no-ether-link;
	phy-handle = <&phy0>;
	phy-mode = "gmii";
	status = "okay";

	phy0: ethernet-phy@0 {
		compatible = "ethernet-phy-id001c.c916",
			     "ethernet-phy-ieee802.3-c22";
		reg = <0>;
	};
};

&emmc {
	pinctrl-0 = <&emmc_pins>;
	pinctrl-1 = <&emmc_pins>;
	pinctrl-names = "default", "state_uhs";

	vmmc-supply = <&reg_3v3>;
	vqmmc-supply = <&reg_1v8>;
	bus-width = <8>;
	mmc-hs200-1_8v;
	no-sd;
	no-sdio;
	non-removable;
	fixed-emmc-driver-type = <1>;
	max-frequency = <200000000>;
	status = "okay";
};

&extal_clk {
	clock-frequency = <48000000>;
};

&i2c0 {
	pinctrl-0 = <&i2c0_pins>;
	pinctrl-names = "default";
	clock-frequency = <400000>;
	status = "okay";

	hd3ss3220@47 {
		compatible = "ti,hd3ss3220";
		reg = <0x47>;

		ports {
			#address-cells = <1>;
			#size-cells = <0>;

			port@0 {
				reg = <0>;
				hd3ss3220_in_ep: endpoint {
					remote-endpoint = <&ss_ep>;
				};
			};

			port@1 {
				reg = <1>;
				hd3ss3220_out_ep: endpoint {
					remote-endpoint = <&usb3_role_switch>;
				};
			};
		};
	};
};

&i2c2 {
	pinctrl-0 = <&i2c2_pins>;
	pinctrl-names = "default";
	clock-frequency = <100000>;
	status = "okay";
};

&pinctrl {
	emmc_pins: emmc {
		data {
			pinmux = <RZV2M_PORT_PINMUX(0, 0, 2)>, /* MMDAT0 */
				 <RZV2M_PORT_PINMUX(0, 1, 2)>, /* MMDAT1 */
				 <RZV2M_PORT_PINMUX(0, 2, 2)>, /* MMDAT2 */
				 <RZV2M_PORT_PINMUX(0, 3, 2)>, /* MMDAT3 */
				 <RZV2M_PORT_PINMUX(0, 4, 2)>, /* MMDAT4 */
				 <RZV2M_PORT_PINMUX(0, 5, 2)>, /* MMDAT5 */
				 <RZV2M_PORT_PINMUX(0, 6, 2)>, /* MMDAT6 */
				 <RZV2M_PORT_PINMUX(0, 7, 2)>; /* MMDAT7 */
			power-source = <1800>;
		};

		ctrl {
			pinmux = <RZV2M_PORT_PINMUX(0, 10, 2)>, /* MMCMD */
				 <RZV2M_PORT_PINMUX(0, 11, 2)>; /* MMCLK */
			power-source = <1800>;
		};
	};

	i2c0_pins: i2c0 {
		pinmux = <RZV2M_PORT_PINMUX(5, 0, 2)>, /* SDA */
			 <RZV2M_PORT_PINMUX(5, 1, 2)>; /* SCL */
	};

	i2c2_pins: i2c2 {
		pinmux = <RZV2M_PORT_PINMUX(3, 8, 2)>, /* SDA */
			 <RZV2M_PORT_PINMUX(3, 9, 2)>; /* SCL */
	};

	sdhi0_pins: sd0 {
		data {
			pinmux = <RZV2M_PORT_PINMUX(8, 2, 1)>, /* SD0DAT0 */
				 <RZV2M_PORT_PINMUX(8, 3, 1)>, /* SD0DAT1 */
				 <RZV2M_PORT_PINMUX(8, 4, 1)>, /* SD0DAT2 */
				 <RZV2M_PORT_PINMUX(8, 5, 1)>; /* SD0DAT3 */
			power-source = <3300>;
		};

		ctrl {
			pinmux = <RZV2M_PORT_PINMUX(8, 0, 1)>, /* SD0CMD */
				 <RZV2M_PORT_PINMUX(8, 1, 1)>; /* SD0CLK */
			power-source = <3300>;
		};

		cd {
			pinmux = <RZV2M_PORT_PINMUX(8, 7, 1)>; /* SD0CD */
			power-source = <3300>;
		};
	};

	sdhi0_pins_uhs: sd0-uhs {
		data {
			pinmux = <RZV2M_PORT_PINMUX(8, 2, 1)>, /* SD0DAT0 */
				 <RZV2M_PORT_PINMUX(8, 3, 1)>, /* SD0DAT1 */
				 <RZV2M_PORT_PINMUX(8, 4, 1)>, /* SD0DAT2 */
				 <RZV2M_PORT_PINMUX(8, 5, 1)>; /* SD0DAT3 */
			power-source = <1800>;
		};

		ctrl {
			pinmux = <RZV2M_PORT_PINMUX(8, 0, 1)>, /* SD0CMD */
				 <RZV2M_PORT_PINMUX(8, 1, 1)>; /* SD0CLK */
			power-source = <1800>;
		};

		cd {
			pinmux = <RZV2M_PORT_PINMUX(8, 7, 1)>; /* SD0CD */
			power-source = <1800>;
		};
	};

	uart0_pins: uart0 {
		pinmux = <RZV2M_PORT_PINMUX(3, 0, 2)>, /* UATX0 */
			 <RZV2M_PORT_PINMUX(3, 1, 2)>, /* UARX0 */
			 <RZV2M_PORT_PINMUX(3, 2, 2)>, /* UACTS0N */
			 <RZV2M_PORT_PINMUX(3, 3, 2)>; /* UARTS0N */
	};
};

&pwc {
	renesas,rzv2m-pwc-power;
	status = "okay";
};

&sdhi0 {
	pinctrl-0 = <&sdhi0_pins>;
	pinctrl-1 = <&sdhi0_pins_uhs>;
	pinctrl-names = "default", "state_uhs";

	vmmc-supply = <&reg_3v3>;
	vqmmc-supply = <&vccq_sdhi0>;
	bus-width = <4>;
	sd-uhs-sdr50;
	sd-uhs-sdr104;
	status = "okay";
};

&uart0 {
	pinctrl-0 = <&uart0_pins>;
	pinctrl-names = "default";

	uart-has-rtscts;
	status = "okay";
};

&usb3drd {
	status = "okay";
};

&usb3host {
	status = "okay";
};

&usb3peri {
	companion = <&usb3host>;
	status = "okay";
	usb-role-switch;

	ports {
		#address-cells = <1>;
		#size-cells = <0>;

		port@0 {
			reg = <0>;
			usb3_hs_ep: endpoint {
				remote-endpoint = <&hs_ep>;
			};
		};

		port@1 {
			reg = <1>;
			usb3_role_switch: endpoint {
				remote-endpoint = <&hd3ss3220_out_ep>;
			};
		};
	};
};

&wdt0 {
	status = "okay";
};