// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
/*
 * Copyright 2022 Toradex
 */

/ {
	reg_eth2phy: regulator-eth2phy {
		compatible = "regulator-fixed";
		enable-active-high;
		gpio = <&gpio_expander_21 4 GPIO_ACTIVE_HIGH>; /* ETH_PWR_EN */
		off-on-delay-us = <500000>;
		regulator-max-microvolt = <3300000>;
		regulator-min-microvolt = <3300000>;
		regulator-name = "+V3.3_ETH";
		startup-delay-us = <200000>;
		vin-supply = <&reg_3p3v>;
	};

	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,mclk-fs = <256>;
		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_blk_ctrl IMX8MP_CLK_AUDIOMIX_SAI1_MCLK1>;
			sound-dai = <&nau8822_1a>;
		};

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

&backlight {
	power-supply = <&reg_3p3v>;
};

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

/* EEPROM on display adapter boards */
&eeprom_display_adapter {
	status = "okay";
};

/* EEPROM on Verdin Development board */
&eeprom_carrier_board {
	status = "okay";
};

&eqos {
	status = "okay";
};

&fec {
	phy-supply = <&reg_eth2phy>;
	status = "okay";
};

&flexcan1 {
	status = "okay";
};

&flexcan2 {
	status = "okay";
};

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

&gpio4 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_ctrl_sleep_moci>;
};

&gpio_expander_21 {
	status = "okay";
	vcc-supply = <&reg_1p8v>;
};

/* Current measurement into module VCC */
&hwmon {
	status = "okay";
};

&hwmon_temp {
	vs-supply = <&reg_1p8v>;
	status = "okay";
};

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

&i2c3 {
	status = "okay";
};

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

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

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

/* Verdin PCIE_1 */
&pcie {
	status = "okay";
};

&pcie_phy {
	status = "okay";
};

/* Verdin PWM_1 */
&pwm1 {
	status = "okay";
};

/* Verdin PWM_2 */
&pwm2 {
	status = "okay";
};

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

&reg_usdhc2_vmmc {
	vin-supply = <&reg_3p3v>;
};

/* Verdin I2S_1 */
&sai1 {
	assigned-clocks = <&clk IMX8MP_CLK_SAI1>;
	assigned-clock-parents = <&clk IMX8MP_AUDIO_PLL1_OUT>;
	assigned-clock-rates = <24576000>;
	fsl,sai-mclk-direction-output;
	status = "okay";
};

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

/* Verdin UART_2 */
&uart2 {
	status = "okay";
};

/* Verdin UART_3, used as the Linux Console */
&uart3 {
	status = "okay";
};

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

&usb3_phy0 {
	status = "okay";
};

/* Verdin USB_2 */
&usb3_1 {
	fsl,permanently-attached;
	status = "okay";
};

&usb3_phy1 {
	status = "okay";
};

/* Limit frequency on dev board due to long traces and bad signal integrity */
&usdhc2 {
	max-frequency = <100000000>;
	status = "okay";
};
