// SPDX-License-Identifier: (GPL-2.0 OR MIT)
/*
 * Copyright 2021 Google LLC
 */

#include "mt8183-kukui.dtsi"
/* Must come after mt8183-kukui.dtsi to modify cros_ec */
#include <arm/cros-ec-keyboard.dtsi>

/ {
	pp1200_mipibrdg: pp1200-mipibrdg {
		compatible = "regulator-fixed";
		regulator-name = "pp1200_mipibrdg";
		pinctrl-names = "default";
		pinctrl-0 = <&pp1200_mipibrdg_en>;

		enable-active-high;
		regulator-boot-on;

		gpio = <&pio 54 GPIO_ACTIVE_HIGH>;
	};

	pp1800_mipibrdg: pp1800-mipibrdg {
		compatible = "regulator-fixed";
		regulator-name = "pp1800_mipibrdg";
		pinctrl-names = "default";
		pinctrl-0 = <&pp1800_lcd_en>;

		enable-active-high;
		regulator-boot-on;

		gpio = <&pio 36 GPIO_ACTIVE_HIGH>;
	};

	pp3300_panel: pp3300-panel {
		compatible = "regulator-fixed";
		regulator-name = "pp3300_panel";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		pinctrl-names = "default";
		pinctrl-0 = <&pp3300_panel_pins>;

		enable-active-high;
		regulator-boot-on;

		gpio = <&pio 35 GPIO_ACTIVE_HIGH>;
	};

	vddio_mipibrdg: vddio-mipibrdg {
		compatible = "regulator-fixed";
		regulator-name = "vddio_mipibrdg";
		pinctrl-names = "default";
		pinctrl-0 = <&vddio_mipibrdg_en>;

		enable-active-high;
		regulator-boot-on;

		gpio = <&pio 37 GPIO_ACTIVE_HIGH>;
	};

	volume_buttons: volume-buttons {
		compatible = "gpio-keys";
		pinctrl-names = "default";
		pinctrl-0 = <&volume_button_pins>;

		button-volume-down {
			label = "Volume Down";
			linux,code = <KEY_VOLUMEDOWN>;
			debounce-interval = <100>;

			gpios = <&pio 6 GPIO_ACTIVE_LOW>;
		};

		button-volume-up {
			label = "Volume Up";
			linux,code = <KEY_VOLUMEUP>;
			debounce-interval = <100>;

			gpios = <&pio 5 GPIO_ACTIVE_LOW>;
		};
	};
};

&cros_ec {
	cros_ec_pwm: pwm {
		compatible = "google,cros-ec-pwm";
		#pwm-cells = <1>;
		status = "disabled";
	};
};

&dsi0 {
	status = "okay";
	/delete-property/#size-cells;
	/delete-property/#address-cells;
	/delete-node/panel@0;
	ports {
		port {
			dsi_out: endpoint {
				remote-endpoint = <&anx7625_in>;
			};
		};
	};
};

&i2c0 {
	status = "okay";

	touchscreen: touchscreen@10 {
		compatible = "elan,ekth3500";
		reg = <0x10>;

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

		interrupts-extended = <&pio 155 IRQ_TYPE_LEVEL_LOW>;

		reset-gpios = <&pio 156 GPIO_ACTIVE_LOW>;
	};
};

&i2c2 {
	pinctrl-names = "default";
	pinctrl-0 = <&i2c2_pins>;
	status = "okay";
	clock-frequency = <400000>;

	trackpad@15 {
		compatible = "elan,ekth3000";
		reg = <0x15>;

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

		interrupts-extended = <&pio 7 IRQ_TYPE_LEVEL_LOW>;

		wakeup-source;
	};
};

&i2c4 {
	pinctrl-names = "default";
	pinctrl-0 = <&i2c4_pins>;
	status = "okay";
	clock-frequency = <100000>;

	anx_bridge: anx7625@58 {
		compatible = "analogix,anx7625";
		reg = <0x58>;
		pinctrl-names = "default";
		pinctrl-0 = <&anx7625_pins>;
		enable-gpios = <&pio 45 GPIO_ACTIVE_HIGH>;
		reset-gpios = <&pio 73 GPIO_ACTIVE_HIGH>;
		vdd10-supply = <&pp1200_mipibrdg>;
		vdd18-supply = <&pp1800_mipibrdg>;
		vdd33-supply = <&vddio_mipibrdg>;

		#address-cells = <1>;
		#size-cells = <0>;
		port@0 {
			reg = <0>;

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

		port@1 {
			reg = <1>;

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

		aux-bus {
			panel: panel {
				compatible = "edp-panel";
				power-supply = <&pp3300_panel>;
				backlight = <&backlight_lcd0>;

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

&i2c_tunnel {
	google,remote-bus = <2>;
};

&pio {
	/* 192 lines */
	gpio-line-names =
		"SPI_AP_EC_CS_L",
		"SPI_AP_EC_MOSI",
		"SPI_AP_EC_CLK",
		"I2S3_DO",
		"USB_PD_INT_ODL",
		"",
		"",
		"",
		"",
		"IT6505_HPD_L",
		"I2S3_TDM_D3",
		"SOC_I2C6_1V8_SCL",
		"SOC_I2C6_1V8_SDA",
		"DPI_D0",
		"DPI_D1",
		"DPI_D2",
		"DPI_D3",
		"DPI_D4",
		"DPI_D5",
		"DPI_D6",
		"DPI_D7",
		"DPI_D8",
		"DPI_D9",
		"DPI_D10",
		"DPI_D11",
		"DPI_HSYNC",
		"DPI_VSYNC",
		"DPI_DE",
		"DPI_CK",
		"AP_MSDC1_CLK",
		"AP_MSDC1_DAT3",
		"AP_MSDC1_CMD",
		"AP_MSDC1_DAT0",
		"AP_MSDC1_DAT2",
		"AP_MSDC1_DAT1",
		"",
		"",
		"",
		"",
		"",
		"",
		"OTG_EN",
		"DRVBUS",
		"DISP_PWM",
		"DSI_TE",
		"LCM_RST_1V8",
		"AP_CTS_WIFI_RTS",
		"AP_RTS_WIFI_CTS",
		"SOC_I2C5_1V8_SCL",
		"SOC_I2C5_1V8_SDA",
		"SOC_I2C3_1V8_SCL",
		"SOC_I2C3_1V8_SDA",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"SOC_I2C1_1V8_SDA",
		"SOC_I2C0_1V8_SDA",
		"SOC_I2C0_1V8_SCL",
		"SOC_I2C1_1V8_SCL",
		"AP_SPI_H1_MISO",
		"AP_SPI_H1_CS_L",
		"AP_SPI_H1_MOSI",
		"AP_SPI_H1_CLK",
		"I2S5_BCK",
		"I2S5_LRCK",
		"I2S5_DO",
		"BOOTBLOCK_EN_L",
		"MT8183_KPCOL0",
		"SPI_AP_EC_MISO",
		"UART_DBG_TX_AP_RX",
		"UART_AP_TX_DBG_RX",
		"I2S2_MCK",
		"I2S2_BCK",
		"CLK_5M_WCAM",
		"CLK_2M_UCAM",
		"I2S2_LRCK",
		"I2S2_DI",
		"SOC_I2C2_1V8_SCL",
		"SOC_I2C2_1V8_SDA",
		"SOC_I2C4_1V8_SCL",
		"SOC_I2C4_1V8_SDA",
		"",
		"SCL8",
		"SDA8",
		"FCAM_PWDN_L",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"I2S_PMIC",
		"I2S_PMIC",
		"I2S_PMIC",
		"I2S_PMIC",
		"I2S_PMIC",
		"I2S_PMIC",
		"I2S_PMIC",
		"I2S_PMIC",
		"",
		"",
		"",
		"",
		"",
		"",
		/*
		 * AP_FLASH_WP_L is crossystem ABI. Rev1 schematics
		 * call it BIOS_FLASH_WP_R_L.
		 */
		"AP_FLASH_WP_L",
		"EC_AP_INT_ODL",
		"IT6505_INT_ODL",
		"H1_INT_OD_L",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"AP_SPI_FLASH_MISO",
		"AP_SPI_FLASH_CS_L",
		"AP_SPI_FLASH_MOSI",
		"AP_SPI_FLASH_CLK",
		"DA7219_IRQ",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"";

	pp1200_mipibrdg_en: pp1200-mipibrdg-en {
		pins1 {
			pinmux = <PINMUX_GPIO54__FUNC_GPIO54>;
			output-low;
		};
	};

	pp1800_lcd_en: pp1800-lcd-en {
		pins1 {
			pinmux = <PINMUX_GPIO36__FUNC_GPIO36>;
			output-low;
		};
	};

	pp3300_panel_pins: pp3300-panel-pins {
		panel_3v3_enable: panel-3v3-enable {
			pinmux = <PINMUX_GPIO35__FUNC_GPIO35>;
			output-low;
		};
	};

	ppvarp_lcd_en: ppvarp-lcd-en {
		pins1 {
			pinmux = <PINMUX_GPIO66__FUNC_GPIO66>;
			output-low;
		};
	};

	ppvarn_lcd_en: ppvarn-lcd-en {
		pins1 {
			pinmux = <PINMUX_GPIO166__FUNC_GPIO166>;
			output-low;
		};
	};

	anx7625_pins: anx7625-pins {
		pins1 {
			pinmux = <PINMUX_GPIO45__FUNC_GPIO45>,
				 <PINMUX_GPIO73__FUNC_GPIO73>;
			output-low;
		};
		pins2 {
			pinmux = <PINMUX_GPIO4__FUNC_GPIO4>;
			input-enable;
			bias-pull-up;
		};
	};

	touchscreen_pins: touchscreen-pins {
		touch-int-odl {
			pinmux = <PINMUX_GPIO155__FUNC_GPIO155>;
			input-enable;
			bias-pull-up;
		};

		touch-rst-l {
			pinmux = <PINMUX_GPIO156__FUNC_GPIO156>;
			output-high;
		};
	};

	trackpad_pins: trackpad-pins {
		trackpad-int {
			pinmux = <PINMUX_GPIO7__FUNC_GPIO7>;
			input-enable;
			bias-disable; /* pulled externally */
		};
	};

	vddio_mipibrdg_en: vddio-mipibrdg-en {
		pins1 {
			pinmux = <PINMUX_GPIO37__FUNC_GPIO37>;
			output-low;
		};
	};

	volume_button_pins: volume-button-pins {
		voldn-btn-odl {
			pinmux = <PINMUX_GPIO6__FUNC_GPIO6>;
			input-enable;
			bias-pull-up;
		};

		volup-btn-odl {
			pinmux = <PINMUX_GPIO5__FUNC_GPIO5>;
			input-enable;
			bias-pull-up;
		};
	};
};

