// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
/*
 * Copyright 2023 Toradex
 *
 * Common dtsi for Verdin AM62 SoM on Development carrier board
 *
 * https://www.toradex.com/computer-on-modules/verdin-arm-family/ti-am62
 * https://www.toradex.com/products/carrier-board/verdin-development-board-kit
 */

/ {
	sound {
		compatible = "simple-audio-card";
		simple-audio-card,bitclock-master = <&codec_dai>;
		simple-audio-card,format = "i2s";
		simple-audio-card,frame-master = <&codec_dai>;
		simple-audio-card,name = "verdin-nau8822";
		simple-audio-card,routing =
			"Headphones", "LHP",
			"Headphones", "RHP",
			"Speaker", "LSPK",
			"Speaker", "RSPK",
			"Line Out", "AUXOUT1",
			"Line Out", "AUXOUT2",
			"LAUX", "Line In",
			"RAUX", "Line In",
			"LMICP", "Mic In",
			"RMICP", "Mic In";
		simple-audio-card,widgets =
			"Headphones", "Headphones",
			"Line Out", "Line Out",
			"Speaker", "Speaker",
			"Microphone", "Mic In",
			"Line", "Line In";

		codec_dai: simple-audio-card,codec {
			clocks = <&audio_refclk1>;
			sound-dai = <&nau8822_1a>;
		};

		simple-audio-card,cpu {
			sound-dai = <&mcasp0>;
		};
	};
};

/* Verdin ETHs */
&cpsw3g {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_rgmii1>, <&pinctrl_rgmii2>;
	status = "okay";
};

/* MDIO, shared by Verdin ETH_1 (On-module PHY) and Verdin ETH_2_RGMII */
&cpsw3g_mdio {
	status = "okay";

	cpsw3g_phy1: ethernet-phy@7 {
		compatible = "ethernet-phy-ieee802.3-c22";
		reg = <7>;
		interrupt-parent = <&main_gpio0>;
		interrupts = <38 IRQ_TYPE_EDGE_FALLING>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_eth2_rgmii_int>;
		micrel,led-mode = <0>;
	};
};

/* Verdin ETH_1 (On-module PHY) */
&cpsw_port1 {
	status = "okay";
};

/* Verdin ETH_2_RGMII */
&cpsw_port2 {
	phy-handle = <&cpsw3g_phy1>;
	phy-mode = "rgmii-rxid";
	status = "okay";
};

/* Verdin PWM_1, PWM_2 */
&epwm0 {
	status = "okay";
};

/* Verdin PWM_3_DSI */
&epwm1 {
	status = "okay";
};

&main_gpio0 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_ctrl_sleep_moci>,
		    <&pinctrl_gpio_5>,
		    <&pinctrl_gpio_6>,
		    <&pinctrl_gpio_7>,
		    <&pinctrl_gpio_8>;
};

/* Verdin I2C_1 */
&main_i2c1 {
	status = "okay";

	/* Audio Codec */
	nau8822_1a: audio-codec@1a {
		compatible = "nuvoton,nau8822";
		reg = <0x1a>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_i2s1_mclk>;
		#sound-dai-cells = <0>;
	};

	/* IO Expander */
	gpio_expander_21: gpio@21 {
		compatible = "nxp,pcal6416";
		reg = <0x21>;
		#gpio-cells = <2>;
		gpio-controller;
	};

	/* Current measurement into module VCC */
	hwmon@40 {
		compatible = "ti,ina219";
		reg = <0x40>;
		shunt-resistor = <10000>;
	};

	/* Temperature sensor */
	sensor@4f {
		compatible = "ti,tmp75c";
		reg = <0x4f>;
	};

	/* EEPROM */
	eeprom@57 {
		compatible = "st,24c02", "atmel,24c02";
		reg = <0x57>;
		pagesize = <16>;
	};
};

/* Verdin I2C_2_DSI */
&main_i2c2 {
	status = "okay";
};

/* Verdin I2C_4_CSI */
&main_i2c3 {
	status = "okay";
};

/* Verdin CAN_1 */
&main_mcan0 {
	status = "okay";
};

/* Verdin SPI_1 */
&main_spi1 {
	status = "okay";
};

/* Verdin UART_3 */
&main_uart0 {
	status = "okay";
};

/* Verdin UART_1, connector X50 through RS485 transceiver. */
&main_uart1 {
	linux,rs485-enabled-at-boot-time;
	rs485-rx-during-tx;
	status = "okay";
};

/* Verdin I2S_1 */
&mcasp0 {
	status = "okay";
};

&mcu_gpio0 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_gpio_1>,
		    <&pinctrl_gpio_2>,
		    <&pinctrl_gpio_3>,
		    <&pinctrl_gpio_4>;
};

/* Verdin I2C_3_HDMI */
&mcu_i2c0 {
	status = "okay";
};

/* Verdin CAN_2 */
&mcu_mcan0 {
	status = "okay";
};

/* Verdin UART_4 */
&mcu_uart0 {
	status = "okay";
};

/* Verdin QSPI_1 */
&ospi0 {
	status = "okay";
};

/* Verdin SD_1 */
&sdhci1 {
	ti,driver-strength-ohm = <33>;
	status = "okay";
};

/* Verdin USB_1 */
&usbss0 {
	status = "okay";
};

&usb0 {
	status = "okay";
};

/* Verdin USB_2 */
&usbss1 {
	status = "okay";
};

&usb1 {
	status = "okay";
};

/* Verdin CTRL_WAKE1_MICO# */
&verdin_gpio_keys {
	status = "okay";
};

/* Verdin UART_2 */
&wkup_uart0 {
	/* FIXME: WKUP UART0 is used by DM firmware */
	status = "reserved";
};