// 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-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>;
		panel_flags = <1>;
		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;
		};
	};
};