// SPDX-License-Identifier: (GPL-2.0-or-later OR MIT)
/*
 * Copyright 2020-2021 TQ-Systems GmbH
 */

#include <dt-bindings/net/ti-dp83867.h>

/* TQ-Systems GmbH MBa8Mx baseboard */

/ {
	backlight_lvds: backlight {
		compatible = "pwm-backlight";
		pwms = <&pwm3 0 5000000 0>;
		brightness-levels = <0 4 8 16 32 64 128 255>;
		default-brightness-level = <7>;
		power-supply = <&reg_12v>;
		enable-gpios = <&expander2 2 GPIO_ACTIVE_HIGH>;
		status = "disabled";
	};

	beeper {
		compatible = "pwm-beeper";
		pwms = <&pwm4 0 250000 0>;
		beeper-hz = <4000>;
		amp-supply = <&reg_vcc_3v3>;
	};

	chosen {
		stdout-path = &uart3;
	};

	clk_xtal25: clk-xtal25 {
		compatible = "fixed-clock";
		#clock-cells = <0>;
		clock-frequency = <25000000>;
	};

	gpio-keys {
		compatible = "gpio-keys";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_gpiobutton>;
		autorepeat;

		switch-1 {
			label = "switch1";
			linux,code = <BTN_0>;
			gpios = <&gpio1 5 GPIO_ACTIVE_LOW>;
			wakeup-source;
		};

		btn2: switch-2 {
			label = "switch2";
			linux,code = <BTN_1>;
			gpios = <&gpio2 0 GPIO_ACTIVE_LOW>;
			wakeup-source;
		};

		switch-3 {
			label = "switch3";
			linux,code = <BTN_2>;
			gpios = <&gpio1 7 GPIO_ACTIVE_LOW>;
			wakeup-source;
		};
	};

	gpio_leds: gpio-leds {
		compatible = "gpio-leds";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_gpioled>;

		led1 {
			label = "led1";
			gpios = <&gpio1 0 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "default-on";
		};

		led2: led2 {
			label = "led2";
			gpios = <&gpio3 14 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "heartbeat";
		};
	};

	gpio_delays: gpio-delays {
		compatible = "gpio-delay";
		#gpio-cells = <3>;
		gpio-controller;
		gpios = <&expander0 6 GPIO_ACTIVE_HIGH>;
		gpio-line-names = "LVDS_BRIDGE_EN_1V8";
	};

	panel: panel-lvds {
		/*
		 * Display is not fixed, so compatible has to be added from
		 * DT overlay
		 */
		backlight = <&backlight_lvds>;
		power-supply = <&reg_vcc_3v3>;
		status = "disabled";

		port {
			panel_in_lvds: endpoint {
				data-lanes = <1 2 3 4>;
				remote-endpoint = <&lvds_bridge_out>;
			};
		};
	};

	reg_12v: regulator-12v {
		compatible = "regulator-fixed";
		regulator-name = "MBA8MX_12V";
		regulator-min-microvolt = <12000000>;
		regulator-max-microvolt = <12000000>;
		regulator-always-on;
	};

	reg_hub_vbus: regulator-hub-vbus {
		compatible = "regulator-fixed";
		regulator-name = "MBA8MX_HUB_VBUS";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
	};

	reg_sn65dsi83_1v8: regulator-sn65dsi83-1v8 {
		compatible = "regulator-fixed";
		regulator-name = "SN65DSI83_1V8";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;
		gpio = <&expander0 5 GPIO_ACTIVE_HIGH>;
		enable-active-high;
	};

	reg_vcc_3v3: regulator-3v3 {
		compatible = "regulator-fixed";
		regulator-name = "MBA8MX_3V3";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
	};

	sound {
		compatible = "fsl,imx-audio-tlv320aic32x4";
		model = "imx-audio-tlv320aic32x4";
		ssi-controller = <&sai3>;
		audio-codec = <&tlv320aic3x04>;
	};
};

&ecspi1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_ecspi1>;
	cs-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
	status = "okay";
};

&ecspi2 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_ecspi2>;
	cs-gpios = <&gpio5 13 GPIO_ACTIVE_LOW>;
	status = "okay";
};

&fec1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_fec1>;
	phy-mode = "rgmii-id";
	phy-handle = <&ethphy0>;
	phy-supply = <&reg_vcc_3v3>;
	fsl,magic-packet;
	mac-address = [ 00 00 00 00 00 00 ];
	status = "okay";

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

		ethphy0: ethernet-phy@e {
			compatible = "ethernet-phy-ieee802.3-c22";
			reg = <0xe>;
			ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_50_NS>;
			ti,tx-internal-delay = <DP83867_RGMIIDCTL_2_50_NS>;
			ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
			ti,dp83867-rxctrl-strap-quirk;
			ti,clk-output-sel = <DP83867_CLK_O_SEL_OFF>;
			enet-phy-lane-no-swap;
			reset-gpios = <&expander2 7 GPIO_ACTIVE_LOW>;
			reset-assert-us = <500000>;
			reset-deassert-us = <500>;
		};
	};
};

&i2c1 {
	expander0: gpio@23 {
		compatible = "nxp,pca9555";
		reg = <0x23>;
		gpio-controller;
		#gpio-cells = <2>;
		vcc-supply = <&reg_vcc_3v3>;
		interrupt-parent = <&gpio1>;
		interrupts = <9 IRQ_TYPE_EDGE_FALLING>;
		interrupt-controller;
		#interrupt-cells = <2>;
		gpio-line-names = "", "", "", "",
				  "", "", "LVDS_BRIDGE_EN", "",
				  "", "", "", "",
				  "", "", "", "";

		sd-mux-oe-hog {
			gpio-hog;
			gpios = <8 0>;
			output-low;
			line-name = "SD_MUX_EN#";
		};

		boot-cfg-oe-hog {
			gpio-hog;
			gpios = <12 0>;
			output-high;
			line-name = "BOOT_CFG_OE#";
		};

		rst_usb_hub_hog: rst-usb-hub-hog {
			gpio-hog;
			gpios = <13 0>;
			output-high;
			line-name = "RST_USB_HUB#";
		};
	};

	expander1: gpio@24 {
		compatible = "nxp,pca9555";
		reg = <0x24>;
		gpio-controller;
		#gpio-cells = <2>;
		vcc-supply = <&reg_vcc_3v3>;
	};
};

&i2c2 {
	clock-frequency = <100000>;
	pinctrl-names = "default", "gpio";
	pinctrl-0 = <&pinctrl_i2c2>;
	pinctrl-1 = <&pinctrl_i2c2_gpio>;
	scl-gpios = <&gpio5 16 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
	sda-gpios = <&gpio5 17 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
	status = "okay";

	tlv320aic3x04: audio-codec@18 {
		compatible = "ti,tlv320aic32x4";
		reg = <0x18>;
		reset-gpios = <&expander2 0 GPIO_ACTIVE_LOW>;
		iov-supply = <&reg_vcc_3v3>;
		ldoin-supply = <&reg_vcc_3v3>;
	};

	sensor1: temperator-sensor@1f {
		compatible = "nxp,se97b", "jedec,jc-42.4-temp";
		reg = <0x1f>;
	};

	eeprom3: eeprom@57 {
		compatible = "nxp,se97b", "atmel,24c02";
		reg = <0x57>;
		pagesize = <16>;
		vcc-supply = <&reg_vcc_3v3>;
	};

	pcieclk: clk@68 {
		compatible = "renesas,9fgv0441";
		reg = <0x68>;
		clocks = <&clk_xtal25>;
		#clock-cells = <1>;
	};
};

&i2c3 {
	clock-frequency = <100000>;
	pinctrl-names = "default", "gpio";
	pinctrl-0 = <&pinctrl_i2c3>;
	pinctrl-1 = <&pinctrl_i2c3_gpio>;
	scl-gpios = <&gpio5 18 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
	sda-gpios = <&gpio5 19 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
	status = "okay";

	dsi_lvds_bridge: bridge@2d {
		compatible = "ti,sn65dsi84";
		reg = <0x2d>;
		enable-gpios = <&gpio_delays 0 130000 0>;
		vcc-supply = <&reg_sn65dsi83_1v8>;
		status = "disabled";

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

			port@0 {
				reg = <0>;

				lvds_bridge_in: endpoint {
					data-lanes = <1 2 3 4>;
					remote-endpoint = <&mipi_dsi_out>;
				};
			};

			port@2 {
				reg = <2>;

				lvds_bridge_out: endpoint {
					remote-endpoint = <&panel_in_lvds>;
				};
			};
		};
	};
};

&mipi_dsi {
	samsung,burst-clock-frequency = <891000000>;
	samsung,esc-clock-frequency = <20000000>;
};

&mipi_dsi_out {
	data-lanes = <1 2 3 4>;
	remote-endpoint = <&lvds_bridge_in>;
};

&pwm3 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_pwm3>;
	status = "okay";
};

&pwm4 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_pwm4>;
	status = "okay";
};

&sai3 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_sai3>;
	#sound-dai-cells = <0>;
	assigned-clock-rates = <49152000>;
	status = "okay";
};

&snvs_pwrkey {
	status = "okay";
};

&uart1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_uart1>;
	status = "okay";
};

&uart2 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_uart2>;
	status = "okay";
};

/* console */
&uart3 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_uart3>;
	status = "okay";
};

&usdhc2 {
	pinctrl-names = "default", "state_100mhz", "state_200mhz";
	pinctrl-0 = <&pinctrl_usdhc2>, <&pinctrl_usdhc2_gpio>;
	pinctrl-1 = <&pinctrl_usdhc2_100mhz>, <&pinctrl_usdhc2_gpio>;
	pinctrl-2 = <&pinctrl_usdhc2_200mhz>, <&pinctrl_usdhc2_gpio>;
	bus-width = <4>;
	cd-gpios = <&gpio2 12 GPIO_ACTIVE_LOW>;
	disable-wp;
	no-mmc;
	no-sdio;
	vmmc-supply = <&reg_usdhc2_vmmc>;
	status = "okay";
};
