// SPDX-License-Identifier: (GPL-2.0 OR MIT)
/*
 * Copyright 2020 Compass Electronics Group, LLC
 */

/dts-v1/;

#include "imx8mn.dtsi"
#include "imx8mn-beacon-som.dtsi"
#include "imx8mn-beacon-baseboard.dtsi"

/ {
	model = "Beacon EmbeddedWorks i.MX8M Nano Development Kit";
	compatible = "beacon,imx8mn-beacon-kit", "fsl,imx8mn";

	chosen {
		stdout-path = &uart2;
	};

	connector {
		compatible = "hdmi-connector";
		type = "a";

		port {
			hdmi_connector_in: endpoint {
				remote-endpoint = <&adv7535_out>;
			};
		};
	};

	reg_hdmi: regulator-hdmi-dvdd {
		compatible = "regulator-fixed";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_reg_hdmi>;
		regulator-name = "hdmi_pwr_en";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		gpio = <&gpio2 11 GPIO_ACTIVE_HIGH>;
		enable-active-high;
		startup-delay-us = <70000>;
		regulator-always-on;
	};

	sound-hdmi {
		compatible = "simple-audio-card";
		simple-audio-card,name = "sound-hdmi";
		simple-audio-card,format = "i2s";

		simple-audio-card,cpu {
			sound-dai = <&sai5>;
			system-clock-direction-out;
		};

		simple-audio-card,codec {
			sound-dai = <&adv_bridge>;
		};
	};
};

&i2c2 {
	adv_bridge: hdmi@3d {
		compatible = "adi,adv7535";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_hdmi_bridge>;
		reg = <0x3d>, <0x3c>, <0x3e>, <0x3f>;
		reg-names = "main", "cec", "edid", "packet";
		adi,dsi-lanes = <4>;
		avdd-supply = <&reg_hdmi>;
		a2vdd-supply = <&reg_hdmi>;
		dvdd-supply = <&reg_hdmi>;
		pvdd-supply = <&reg_hdmi>;
		v1p2-supply = <&reg_hdmi>;
		v3p3-supply = <&reg_hdmi>;
		interrupt-parent = <&gpio1>;
		interrupts = <9 IRQ_TYPE_LEVEL_LOW>;
		#sound-dai-cells = <0>;

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

			port@0 {
				reg = <0>;

				adv7535_in: endpoint {
					remote-endpoint = <&dsi_out>;
				};
			};

			port@1 {
				reg = <1>;

				adv7535_out: endpoint {
					remote-endpoint = <&hdmi_connector_in>;
				};
			};
		};
	};
};

&lcdif {
	assigned-clocks = <&clk IMX8MN_VIDEO_PLL1>;
	assigned-clock-rates = <594000000>;
	status = "okay";
};

&mipi_dsi {
	samsung,esc-clock-frequency = <20000000>;
	status = "okay";

	ports {
		port@1 {
			reg = <1>;

			dsi_out: endpoint {
				remote-endpoint = <&adv7535_in>;
			};
		};
	};
};

&sai5 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_sai5>;
	assigned-clocks = <&clk IMX8MN_CLK_SAI5>;
	assigned-clock-parents = <&clk IMX8MN_AUDIO_PLL1_OUT>;
	assigned-clock-rates = <24576000>;
	#sound-dai-cells = <0>;
	status = "okay";
};

&iomuxc {
	pinctrl_hdmi_bridge: hdmibridgegrp {
		fsl,pins = <
			MX8MN_IOMUXC_GPIO1_IO09_GPIO1_IO9		0x19
		>;
	};

	pinctrl_reg_hdmi: reghdmigrp {
		fsl,pins = <
			MX8MN_IOMUXC_SD1_STROBE_GPIO2_IO11              0x16
		>;
	};

	pinctrl_sai5: sai5grp {
		fsl,pins = <
			MX8MN_IOMUXC_SAI5_RXD3_SAI5_TX_DATA0	0xd6
			MX8MN_IOMUXC_SAI5_RXD2_SAI5_TX_BCLK	0xd6
			MX8MN_IOMUXC_SAI5_RXD1_SAI5_TX_SYNC	0xd6
		>;
	};
};
