// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
/*
 * Copyright (c) STMicroelectronics 2019 - All Rights Reserved
 * Copyright (c) 2020 Engicam srl
 * Copyright (c) 2020 Amarula Solutons(India)
 */

/dts-v1/;
#include "stm32mp157.dtsi"
#include "stm32mp157a-microgea-stm32mp1.dtsi"
#include "stm32mp15-pinctrl.dtsi"
#include "stm32mp15xxaa-pinctrl.dtsi"
#include <dt-bindings/gpio/gpio.h>

/ {
	model = "Engicam MicroGEA STM32MP1 MicroDev 2.0 7\" Open Frame";
	compatible = "engicam,microgea-stm32mp1-microdev2.0-of7",
		     "engicam,microgea-stm32mp1", "st,stm32mp157";

	aliases {
		serial0 = &uart4;
		serial1 = &uart8;
	};

	chosen {
		stdout-path = "serial0:115200n8";
	};

	backlight: backlight {
		compatible = "gpio-backlight";
		gpios = <&gpiod 13 GPIO_ACTIVE_HIGH>;
		default-on;
	};

	lcd_3v3: regulator-lcd-3v3 {
		compatible = "regulator-fixed";
		regulator-name = "lcd_3v3";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		gpio = <&gpiof 10 GPIO_ACTIVE_HIGH>;
		enable-active-high;
		regulator-always-on;
		power-supply = <&panel_pwr>;
	};

	panel_pwr: regulator-panel-pwr {
		compatible = "regulator-fixed";
		regulator-name = "panel_pwr";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		gpio = <&gpiob 10 GPIO_ACTIVE_HIGH>;
		regulator-always-on;
	};

	panel {
		compatible = "auo,b101aw03";
		backlight = <&backlight>;
		enable-gpios = <&gpiof 2 GPIO_ACTIVE_HIGH>;
		power-supply = <&lcd_3v3>;

		port {
			panel_in: endpoint {
				remote-endpoint = <&ltdc_ep0_out>;
			};
		};
	};
};

&i2c2 {
	i2c-scl-falling-time-ns = <20>;
	i2c-scl-rising-time-ns = <185>;
	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&i2c2_pins_a>;
	pinctrl-1 = <&i2c2_sleep_pins_a>;
	status = "okay";
};

&ltdc {
	pinctrl-names = "default";
	pinctrl-0 = <&ltdc_pins>;
	status = "okay";

	port {
		ltdc_ep0_out: endpoint@0 {
			reg = <0>;
			remote-endpoint = <&panel_in>;
		};
	};
};

&pinctrl {
	ltdc_pins: ltdc {
		pins {
			pinmux = <STM32_PINMUX('G', 10, AF14)>,	/* LTDC_B2 */
				 <STM32_PINMUX('H', 12, AF14)>,	/* LTDC_R6 */
				 <STM32_PINMUX('H', 11, AF14)>,	/* LTDC_R5 */
				 <STM32_PINMUX('D', 10, AF14)>,	/* LTDC_B3 */
				 <STM32_PINMUX('D', 9, AF14)>,	/* LTDC_B0 */
				 <STM32_PINMUX('E', 5, AF14)>,	/* LTDC_G0 */
				 <STM32_PINMUX('E', 6, AF14)>,	/* LTDC_G1 */
				 <STM32_PINMUX('E', 13, AF14)>,	/* LTDC_DE */
				 <STM32_PINMUX('E', 15, AF14)>,	/* LTDC_R7 */
				 <STM32_PINMUX('G', 7, AF14)>,	/* LTDC_CLK */
				 <STM32_PINMUX('G', 12, AF14)>,	/* LTDC_B1 */
				 <STM32_PINMUX('H', 2, AF14)>,	/* LTDC_R0 */
				 <STM32_PINMUX('H', 3, AF14)>,	/* LTDC_R1 */
				 <STM32_PINMUX('H', 8, AF14)>,	/* LTDC_R2 */
				 <STM32_PINMUX('H', 9, AF14)>,	/* LTDC_R3 */
				 <STM32_PINMUX('H', 10, AF14)>,	/* LTDC_R4 */
				 <STM32_PINMUX('H', 13, AF14)>,	/* LTDC_G2 */
				 <STM32_PINMUX('H', 14, AF14)>,	/* LTDC_G3 */
				 <STM32_PINMUX('H', 15, AF14)>,	/* LTDC_G4 */
				 <STM32_PINMUX('I', 0, AF14)>,	/* LTDC_G5 */
				 <STM32_PINMUX('I', 1, AF14)>,	/* LTDC_G6 */
				 <STM32_PINMUX('I', 2, AF14)>,	/* LTDC_G7 */
				 <STM32_PINMUX('I', 4, AF14)>,	/* LTDC_B4 */
				 <STM32_PINMUX('I', 5, AF14)>,	/* LTDC_B5 */
				 <STM32_PINMUX('B', 8, AF14)>,	/* LTDC_B6 */
				 <STM32_PINMUX('I', 7, AF14)>,	/* LTDC_B7 */
				 <STM32_PINMUX('I', 9, AF14)>,	/* LTDC_VSYNC */
				 <STM32_PINMUX('I', 10, AF14)>;	/* LTDC_HSYNC */
			bias-disable;
			drive-push-pull;
			slew-rate = <3>;
		};
	};
};

&sdmmc1 {
	bus-width = <4>;
	disable-wp;
	pinctrl-names = "default", "opendrain", "sleep";
	pinctrl-0 = <&sdmmc1_b4_pins_a>;
	pinctrl-1 = <&sdmmc1_b4_od_pins_a>;
	pinctrl-2 = <&sdmmc1_b4_sleep_pins_a>;
	st,neg-edge;
	vmmc-supply = <&vdd>;
	status = "okay";
};

&uart4 {
	pinctrl-names = "default", "sleep", "idle";
	pinctrl-0 = <&uart4_pins_a>;
	pinctrl-1 = <&uart4_sleep_pins_a>;
	pinctrl-2 = <&uart4_idle_pins_a>;
	status = "okay";
};

/* J31: RS323 */
&uart8 {
	pinctrl-names = "default";
	pinctrl-0 = <&uart8_pins_a>;
	status = "okay";
};
