Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
dual-espresso.dtsi 13.73 KiB
/*
 * Copyright 2022 SECO Northern Europe GmbH
 *
 */

/*
Remarks:
    - Use ETHERNET_ONLY_100MBIT for dual espresso board
Defines:
*/

#include <dt-bindings/leds/common.h>

/ {
	reg_vin_fused: vin_fused {
		compatible = "regulator-fixed";
		regulator-name = "VIN_FUSED";
		regulator-min-microvolt = <12000000>;
		/* max	should be 24V but the fixed regulator driver does
		not allow a range here */
		regulator-max-microvolt = <12000000>;
		regulator-always-on;
	};

	reg_board_5v: 5v {
		compatible = "regulator-fixed";
		regulator-name = "+5V";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		regulator-always-on;
		vin-supply = <&reg_vin_fused>;
	};

	reg_3v3: 3v3 {
		compatible = "regulator-fixed";
		regulator-name = "+3V3";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		regulator-always-on;
		vin-supply = <&reg_vin_fused>;
	};

	reg_display_pwr: display-pwr {
		compatible = "regulator-fixed";
		regulator-name = "DISPLAY PWCTRL";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		regulator-always-on;
		vin-supply = <&reg_vin_fused>;
	};

	reg_usbhost_pwr: usbhost-pwr {
		compatible = "regulator-fixed";
		regulator-name = "USBHOST PWR";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_usbhost_enable>;
		gpio = <spin129_gpio 0>;
		enable-active-high;
		regulator-always-on;
		vin-supply = <&reg_board_5v>;
	};

	reg_usbotg_pwr: usbotg-pwr {
		compatible = "regulator-fixed";
		regulator-name = "USBOTG PWR";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_usbotg_enable>;
		gpio = <spin127_gpio 0>;
		enable-active-high;
		regulator-always-on;
		vin-supply = <&reg_board_5v>;
	};

};

/ {
	backlight2: backlight2 {
		compatible = "pwm-backlight";
		pwms = <&pwm4 0 100000 0>;
		pinctrl-0 = <&pinctrl_backlight2_enable>;
		enable-gpios = <spin63_gpio GPIO_ACTIVE_HIGH>;
		brightness-levels = < 0  1  2  3  4  5  6  7  8  9
				     10 11 12 13 14 15 16 17 18 19
				     20 21 22 23 24 25 26 27 28 29
				     30 31 32 33 34 35 36 37 38 39
				     40 41 42 43 44 45 46 47 48 49
				     50 51 52 53 54 55 56 57 58 59
				     60 61 62 63 64 65 66 67 68 69
				     70 71 72 73 74 75 76 77 78 79
				     80 81 82 83 84 85 86 87 88 89
				     90 91 92 93 94 95 96 97 98 99
				    100>;
		default-brightness-level = <80>;
		status = "okay";
	};

	panel_lvds1: panel1 {
		status          = "okay";
		compatible      = "panel-lvds";
		data-mapping = "vesa-24";
		width-mm = <154>;
		height-mm = <86>;
		backlight = <&backlight>;
		enable-gpios = <spin100_gpio GPIO_ACTIVE_HIGH>;

		panel-timing {
			clock-frequency = <51206400>;
			hactive = <1024>;
			vactive = <600>;
			hfront-porch = <159>;
			hsync-len = <2>;
			hback-porch = <159>;
			vfront-porch = <17>;
			vsync-len = <1>;
			vback-porch = <17>;
		};

		port {
			panel_lvds1_in: endpoint {
				remote-endpoint = <&lvds1_out>;
			};
		};
	};

	panel_lvds2: panel2 {
		status          = "okay";
		compatible      = "panel-lvds";
		data-mapping = "vesa-24";
		width-mm = <154>;
		height-mm = <86>;
		backlight = <&backlight2>;
		enable-gpios = <spin67_gpio GPIO_ACTIVE_HIGH>;

		panel-timing {
			clock-frequency = <51206400>;
			hactive = <1024>;
			vactive = <600>;
			hfront-porch = <159>;
			hsync-len = <2>;
			hback-porch = <159>;
			vfront-porch = <17>;
			vsync-len = <1>;
			vback-porch = <17>;
		};

		port {
			panel_lvds2_in: endpoint {
				remote-endpoint = <&dsi_bridge_out>;
			};
		};
	};

	buzzer: buzzer {
		compatible = "pwm-beeper";
		status = "okay";
		pwms = <&pwm3 0 416666>;
		beeper-hz = <2400>;
	};

	leds: leds {
		compatible = "gpio-leds";
		status = "okay";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_leds>;

		status {
			function = LED_FUNCTION_STATUS;
			gpios = <&gpio4 30 0>;
			color = <LED_COLOR_ID_YELLOW>;
			linux,default-trigger = "heartbeat";
			default-state = "on";
		};

		debug {
			function = LED_FUNCTION_STATUS;
			gpios = <&gpio4 29 0>;
			color = <LED_COLOR_ID_RED>;
			panic-indicator = <1>;
			default-state = "off";
		};

		error {
			function = LED_FUNCTION_FAULT;
			gpios = <&gpio4 28 0>;
			color = <LED_COLOR_ID_RED>;
			panic-indicator = <1>;
			default-state = "off";
		};
	};
};

&backlight {
	status = "okay";
	pinctrl-0 = <&pinctrl_backlight_enable>;
	enable-gpios = <spin73_gpio GPIO_ACTIVE_HIGH>;
};

&iomuxc {

	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_hog>;

	pinctrl_hog: hoggrp {
		fsl,pins = <
			SPIN100_GPIO1_IO05	PAD_GPIO	/* LCD1_VCC_ON */
			SPIN67_GPIO4_IO08	PAD_GPIO	/* LCD2_VCC_ON */
		>;
	};

	pinctrl_i2c2_sn65dsi84_en: sn65dsi84_iogrp {
		fsl,pins = < SPIN53_GPIO4_IO03  PAD_GPIO >;		/* SODIMM  Pin 53 MIPI_DSI_EN*/
	};

	pinctrl_i2c6: i2c6grp {
		fsl,pins = <
			SPIN34_I2C6_SCL			0x400001c3
			SPIN32_I2C6_SDA			0x400001c3
		>;
	};

	pinctrl_backlight_pwm1: pwm-backlight {
		fsl,pins = < SPIN77_PWM1_OUT		PAD_GPIO >;	/* BACKLIGHT_PWM */
	};

	pinctrl_backlight2_pwm4: pwm-backlight2 {
		fsl,pins = < SPIN69_PWM4_OUT		PAD_GPIO >;	/* BACKLIGHT2_PWM */
	};

	pinctrl_backlight_enable: backlight-enable {
		fsl,pins = < SPIN73_GPIO		PAD_GPIO >;	/* BACKLIGHT_ENABLE SODIMM Pin 73 */
	};

	pinctrl_backlight2_enable: backlight-enable2 {
		fsl,pins = < SPIN63_GPIO		PAD_GPIO >;	/* BACKLIGHT_ENABLE SODIMM Pin 63 */
	};

	pinctrl_ctouch1: ctouch1 {
		fsl,pins = < SPIN136_GPIO3_IO15		PAD_GPIO_OD	/* TOUCH_RES_R */
			     SPIN45_GPIO3_IO04		PAD_GPIO >;	/* TOUCH_INT_R */
	};

	pinctrl_ctouch2: ctouch2 {
		fsl,pins = < SPIN65_GPIO4_IO07		PAD_GPIO_OD	/* TOUCH_RES_L */
			     SPIN102_GPIO1_IO08		PAD_GPIO >;	/* TOUCH_INT_L */
	};

	pinctrl_usbhost_enable: usbhost-enable 	{
		fsl,pins = < SPIN129_GPIO		PAD_GPIO >;	/* USBH_PWR */
	};

	pinctrl_usbotg_enable: usbotg-enable 	{
		fsl,pins = < SPIN127_GPIO		PAD_GPIO >;	/* USBOTG_PWR */
	};

	pinctrl_buzzer_pwm3: pwm-buzzer {
		fsl,pins = <SPIN161_PWM3_OUT PAD_GPIO>;
	};

	pinctrl_ios: iosgrp {
		fsl,pins = <
			SPIN125_GPIO1_IO06	0x106 /* RTC_INT */
			SPIN43_GPIO1_IO07	0x146 /* LED_BUTTON */
			SPIN55_GPIO3_IO21	0x146 /* DIG_IN1 */
			SPIN57_GPIO4_IO04	0x146 /* DIG_IN2 */
			SPIN79_GPIO5_IO00	0x146 /* PW_FAIL */
			SPIN146_GPIO5_IO01	0x106 /* STBY_EN */
		>;
	};

	pinctrl_leds: ledsgrp {
		fsl,pins = <
			SPIN184_GPIO4_IO30	0x106 /* LED_OP_STATES */
			SPIN186_GPIO4_IO29	0x106 /* LED_DEBUG */
			SPIN188_GPIO4_IO28	0x106 /* LED_ERROR */
		>;
	};

	/* Drive Strength DSE_X1 */
	pinctrl_usdhc2: usdhc2grp {
		fsl,pins = <
			MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK		0x190
			MX8MP_IOMUXC_SD2_CMD__USDHC2_CMD		0x1d0
			MX8MP_IOMUXC_SD2_DATA0__USDHC2_DATA0	0x1d0
			MX8MP_IOMUXC_SD2_DATA1__USDHC2_DATA1	0x1d0
			MX8MP_IOMUXC_SD2_DATA2__USDHC2_DATA2	0x1d0
			MX8MP_IOMUXC_SD2_DATA3__USDHC2_DATA3	0x1d0
		>;
	};

	/* Drive Strength DSE_X2 */
	pinctrl_usdhc2_100mhz: usdhc2grp100mhz {
		fsl,pins = <
			MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK		0x194
			MX8MP_IOMUXC_SD2_CMD__USDHC2_CMD		0x1d4
			MX8MP_IOMUXC_SD2_DATA0__USDHC2_DATA0	0x1d4
			MX8MP_IOMUXC_SD2_DATA1__USDHC2_DATA1	0x1d4
			MX8MP_IOMUXC_SD2_DATA2__USDHC2_DATA2	0x1d4
			MX8MP_IOMUXC_SD2_DATA3__USDHC2_DATA3	0x1d4
		>;
	};

	/* Drive Strength DSE_X2 */
	pinctrl_usdhc2_200mhz: usdhc2grp200mhz {
		fsl,pins = <
			MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK		0x194
			MX8MP_IOMUXC_SD2_CMD__USDHC2_CMD		0x1d4
			MX8MP_IOMUXC_SD2_DATA0__USDHC2_DATA0	0x1d4
			MX8MP_IOMUXC_SD2_DATA1__USDHC2_DATA1	0x1d4
			MX8MP_IOMUXC_SD2_DATA2__USDHC2_DATA2	0x1d4
			MX8MP_IOMUXC_SD2_DATA3__USDHC2_DATA3	0x1d4
		>;
	};
};

&i2c1 {
	egalaxi2c_1: eeti1@2a { /* Touch Pad 1 (R) */
		reg = <0x2a>;
		compatible = "eeti,exc3000_ts"; // out of tree driver
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_ctouch1>;
		interrupt-parent = <spin45_gpio_parent>;
		interrupts = <spin45_gpio_pin IRQ_TYPE_LEVEL_HIGH>;
		irq-gpio = <spin45_gpio GPIO_ACTIVE_LOW>;
		reset-gpio = <spin136_gpio GPIO_ACTIVE_LOW>;
		reset-low-active = <1>;
		irq-low-active = <1>;
		status = "okay";
	};
};

&i2c2 {
	rtc@51 {
		compatible = "nxp,pcf8563";
		reg = <0x51>;
		status = "disabled";
	};

	rtc:rtc@52 {
		compatible = "microcrystal,rv3028";
		reg = <0x52>;
		trickle-diode-disable;
		interrupt-parent = <spin125_gpio_parent>;
		interrupts = <spin125_gpio_pin IRQ_TYPE_LEVEL_LOW>;
		wakeup-source;
		status = "okay";
	};

	sn65dsi84@2c {
		status = "okay";
		compatible = "ti,sn65dsi83";
		reg = <0x2c>;
		enable-gpios =<spin53_gpio GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_i2c2_sn65dsi84_en>;

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

			port@0 {
				reg = <0>;
				dsi_bridge_in: endpoint {
					remote-endpoint = <&mipi_dsi_out>;
					data-lanes = <1 2 3 4>;
				};
			};

			port@2 {
				reg = <2>;
				dsi_bridge_out: endpoint {
					remote-endpoint = <&panel_lvds2_in>;
				};
			};
		};
	};

	tlc59208@20 {
		#address-cells = <1>;
		#size-cells = <0>;
		compatible = "ti,tlc59108";
		reg = <0x20>;
		status = "okay";

		/*
		 * The LED sub-system supports multi-color LEDs,
		 * however the tlc591xx driver doesn't seem to
		 * work properly with the below configuration.
		 * Maybe, we can conduct further test with the
		 * multi-color configuration?
		 */

		/*
		multi_led {
			#address-cells = <1>;
			#size-cells = <0>;

			color = <LED_COLOR_ID_RGB>;
			function = LED_FUNCTION_STATUS;

			blue@0 {
				reg = <0>;
				color = <LED_COLOR_ID_BLUE>;
			};

			green@1 {
				reg = <1>;
				color = <LED_COLOR_ID_GREEN>;
			};

			red@2 {
				reg = <2>;
				color = <LED_COLOR_ID_RED>;
			};
		};
		*/
		right_light_bar_blue@0 {
			label = "right_light_bar:blue:status";
			reg = <0x0>;
		};

		right_light_bar_green@1 {
			label = "right_light_bar:green:status";
			reg = <0x1>;
		};

		right_light_bar_red@2 {
			label = "right_light_bar:red:status";
			reg = <0x2>;
		};

		left_light_bar_blue@3 {
			label = "left_light_bar:blue:status";
			reg = <0x3>;
		};

		left_light_bar_green@4 {
			label = "left_light_bar:green:status";
			reg = <0x4>;
		};

		left_light_bar_red@5 {
			label = "left_light_bar:red:status";
			reg = <0x5>;
		};

		/* DNP */
		touch_bg@6 {
			label = "touch_bg:white:power";
			reg = <0x6>;
		};

		/*
		 * The power enable pin of the simple touch
		 * button is connected to the LED driver.
		 * To function, the power enable needs to
		 * be activated before reading of the
		 * interrupt pin.
		 */
		touch_enable@7 {
			label = "touch_enable::power";
			reg = <0x7>;
		};
	};
};

&i2c6 { /* I2C on SODIMM 32,34 */
	clock-frequency = <100000>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_i2c6>;
	status = "okay";

	egalaxi2c_2: eeti2@2a { /* Touch Pad 2 (L) */
		reg = <0x2a>;
		compatible = "eeti,exc3000_ts"; // out of tree driver
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_ctouch2>;
		interrupt-parent = <spin102_gpio_parent>;
		interrupts = <spin102_gpio_pin IRQ_TYPE_LEVEL_HIGH>;
		irq-gpio = <spin102_gpio GPIO_ACTIVE_LOW>;
		reset-gpio = <spin65_gpio GPIO_ACTIVE_LOW>;
		reset-low-active = <1>;
		irq-low-active = <1>;
		status = "okay";
	};
};

&lcdif1 {
	status = "okay";
};

&lcdif2 {
	status = "okay";
};

&ldb {
	status = "okay";
	lvds-channel@0 {
		status = "okay";
		fsl,data-mapping = "spwg";
		fsl,data-width = <24>;
		port@1 {
			reg = <1>;
			lvds1_out: endpoint {
				remote-endpoint = <&panel_lvds1_in>;
			};
		};
	};
};

&ldb_phy {
	status = "okay";
};

&mipi_dsi {
	status = "okay";

	port@1 {
		mipi_dsi_out: endpoint {
			remote-endpoint = <&dsi_bridge_in>;
			attach-bridge;
		};
	};
};

&pwm1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_backlight_pwm1>;
	status = "okay";
};

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

&usb3_phy0 {
	vbus-supply = <&reg_usbotg_pwr>;
	disable-over-current;
};

&usb3_phy1 {
	vbus-supply = <&reg_usbhost_pwr>;
	disable-over-current;
};

&usdhc2 { /* SD-Card Slot */
	max-frequency = <50000000>;
	pinctrl-names = "default", "state_100mhz";
	pinctrl-0 = <&pinctrl_usdhc2>, <&pinctrl_usdhc2_gpio>;
	pinctrl-1 = <&pinctrl_usdhc2_100mhz>, <&pinctrl_usdhc2_gpio>;
	/* Due to EMI limit the speed to 50MHz bus clock
	 * To support DDR5 (using 50Mhz) use state_100mhz
	 * See drivers/mmc/host/sdhci-esdhc-imx.c
	 * Use the following for faster modes.
	 *  pinctrl-names = "default", "state_100mhz", "state_200mhz";
	 *  pinctrl-2 = <&pinctrl_usdhc2_200mhz>, <&pinctrl_usdhc2_gpio>;
	 */
	cd-gpios = <spin59_gpio GPIO_ACTIVE_LOW>;
	bus-width = <4>;
	vmmc-supply = <&reg_usdhc2_vmmc>;
	pm-ignore-notify;
	keep-power-in-suspend;
	status = "okay";
};

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

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

&uart3 {
	pinctrl-0 = <&pinctrl_uart3>;
	status = "okay";
};

&gpio1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_ios>;

	gpio-line-names = "", "", "", "", "", "", "rtc_int", "led_button",
			"", "", "", "", "", "", "", "",
			"", "", "", "", "", "", "", "",
			"", "", "", "", "", "", "", "";
};

&gpio3 {
	gpio-line-names = "", "", "", "", "", "", "", "",
			"", "", "", "", "", "", "", "",
			"", "", "", "", "", "dig_in1", "", "",
			"", "", "", "", "", "", "", "";
};

&gpio4 {
	gpio-line-names = "", "", "", "", "dig_in2", "", "", "",
			"", "", "", "", "", "", "", "",
			"", "", "", "", "", "", "", "",
			"", "", "", "", "led_error", "led_debug", "led_op_state", "";
};

&gpio5 {
	gpio-line-names = "power_fail", "standby_enable", "", "", "", "", "", "",
			"", "", "", "", "", "", "", "",
			"", "", "", "", "", "", "", "",
			"", "", "", "", "", "", "", "";
};

&sdma2 {
	status = "okay";
};

&sound_wm8983 {
	simple-audio-card,widgets =
		"Headphone", "Headphone Jack";
	simple-audio-card,routing =
		"Headphone Jack", "HPL",
		"Headphone Jack", "HPR";
};
/*
 * For some reason, without the hdmiphy the device stalls
 * during the boot process. Further investigation into why
 * this happens is required.
 */
&hdmiphy {
	status = "okay";
};