/* SPDX-License-Identifier: GPL-2.0-only */

#include <baseboard/gpio.h>
#include <baseboard/variants.h>
#include <types.h>
#include <vendorcode/google/chromeos/chromeos.h>

/* Pad configuration in ramstage */
static const struct pad_config gpio_table[] = {
	/* GPIO A0-A6, A9-A10 default function is NF1 for eSPI interface when
	  eSPI is enabled */

	/* SSD1_PWREN  CPU SSD1 */
	PAD_CFG_GPO(GPP_D14, 1, PLTRST),
	/* SSD1_RESET  CPU SSD1 */
	PAD_CFG_GPO(GPP_F20, 1, PLTRST),
	/* BT_RF_KILL_N */
	PAD_CFG_GPO(GPP_A13, 1, PLTRST),
	/* WLAN RST# */
	PAD_CFG_GPO(GPP_H2, 1, PLTRST),
	/* WIFI_WAKE_N */
	PAD_CFG_GPI_IRQ_WAKE(GPP_D13, NONE, DEEP, LEVEL, INVERT),
	/* x4 PCIE slot1 PWREN */
	PAD_CFG_GPO(GPP_H17, 0, PLTRST),
	/* x4 PCIE slot 1 RESET */
	PAD_CFG_GPO(GPP_F10, 1, PLTRST),
	/* Retimer Force Power */
	PAD_CFG_GPO(GPP_E4, 0, PLTRST),
	/* PEG Slot RST# */
	PAD_CFG_GPO(GPP_B2, 1, PLTRST),
	/* M.2 SSD_2 Reset */
	PAD_CFG_GPO(GPP_H0, 1, PLTRST),
	/* CAM_STROBE */
	PAD_CFG_GPO(GPP_B18, 0, PLTRST),
	/* Audio Codec INT N */
	PAD_CFG_GPI_APIC(GPP_H3, NONE, PLTRST, LEVEL, INVERT),
	/* TCH PAD Power EN */
	PAD_CFG_GPO(GPP_F7, 1, PLTRST),
	/* THC1 SPI2 RST# */
	PAD_CFG_GPO(GPP_F17, 1, PLTRST),
	/* THC1_SPI2_INTB */
	PAD_CFG_GPI_APIC(GPP_F18, NONE, PLTRST, EDGE_SINGLE, INVERT),
	/* THC1_SPI2_INTB */
	PAD_CFG_GPI(GPP_E17, NONE, PLTRST),
	/* EC_SLP_S0_CS_N */
	PAD_CFG_GPO(GPP_F9, 1, PLTRST),
	/* DISP_AUX_N_BIAS_GPIO */
	PAD_CFG_GPO(GPP_E23, 1, PLTRST),
	/* WWAN WAKE N*/
	PAD_CFG_GPI_IRQ_WAKE(GPP_D18, NONE, DEEP, LEVEL, INVERT),
	/* WWAN_DISABLE_N */
	PAD_CFG_GPO(GPP_D15, 1, DEEP),
	/* WWAN_RST# */
	PAD_CFG_GPO(GPP_F14, 1, DEEP),
	/* WWAN_FCP_OFF_N */
	PAD_CFG_GPO(GPP_F15, 1, DEEP),
	/* WWAN_PWR_EN */
	PAD_CFG_GPO(GPP_F21, 1, DEEP),
	/* WWAN_PERST# */
	PAD_CFG_GPO(GPP_C5, 1, DEEP),
	/* PEG_SLOT_WAKE_N */
	PAD_CFG_GPI(GPP_A20, NONE, PLTRST),
	/* CAM CONN1 CLKEN */
	PAD_CFG_GPO(GPP_H15, 1, PLTRST),
	/* CPU SSD2 PWREN */
	PAD_CFG_GPO(GPP_C2, 1, PLTRST),
	/* CPU SSD2 RST# */
	PAD_CFG_GPO(GPP_H1, 1, PLTRST),
	/* Sata direct Power */
	PAD_CFG_GPO(GPP_B4, 1, PLTRST),
	/* M.2_PCH_SSD_PWREN */
	PAD_CFG_GPO(GPP_D16, 1, PLTRST),

	/* CAM1_RST */
	PAD_CFG_GPO(GPP_R5, 1, PLTRST),
	/* CAM2_RST */
	PAD_CFG_GPO(GPP_E15, 1, PLTRST),
	/* CAM1_PWR_EN */
	PAD_CFG_GPO(GPP_B23, 1, PLTRST),
	/* CAM2_PWR_EN */
	PAD_CFG_GPO(GPP_E16, 1, PLTRST),
	/* M.2_SSD_PDET_R */
	PAD_CFG_NF(GPP_A12, NONE, DEEP, NF1),
	/* THC0 SPI1 CLK */
	PAD_CFG_NF(GPP_E11, NONE, DEEP, NF2),
	/* THC0 SPI1 IO 1 */
	PAD_CFG_NF(GPP_E12, NONE, DEEP, NF2),
	/* THC0 SPI1 IO 2 */
	PAD_CFG_NF(GPP_E1, NONE, DEEP, NF2),
	/* THC0 SPI IO 3 */
	PAD_CFG_NF(GPP_E2, NONE, DEEP, NF2),
	/* THC1 SPI1 RSTB */
	PAD_CFG_NF(GPP_E6, NONE, DEEP, NF2),
	/* UART_RX(1) */
	PAD_CFG_NF(GPP_C12, NONE, DEEP, NF1),
	/* UART_RX(2) */
	PAD_CFG_NF(GPP_C20, NONE, DEEP, NF1),
	/* UART_RX(4) */
	PAD_CFG_NF(GPP_T4, NONE, DEEP, NF1),
	/* UART_RX(5) */
	PAD_CFG_NF(GPP_T8, NONE, DEEP, NF1),
	/* UART_RX(6) */
	PAD_CFG_NF(GPP_T12, NONE, DEEP, NF1),

	/* UART_TX(1) */
	PAD_CFG_NF(GPP_C13, NONE, DEEP, NF1),
	/* UART_TX(2) */
	PAD_CFG_NF(GPP_C21, NONE, DEEP, NF1),
	/* UART_TX(4) */
	PAD_CFG_NF(GPP_T5, NONE, DEEP, NF1),
	/* UART_TX(5) */
	PAD_CFG_NF(GPP_T9, NONE, DEEP, NF1),
	/* UART_TX(6) */
	PAD_CFG_NF(GPP_T13, NONE, DEEP, NF1),

	/* UART_RTS(1) */
	PAD_CFG_NF(GPP_C14, NONE, DEEP, NF1),
	/* UART_RTS(2) */
	PAD_CFG_NF(GPP_C22, NONE, DEEP, NF1),
	/* UART_RTS(4) */
	PAD_CFG_NF(GPP_T6, NONE, DEEP, NF1),
	/* UART_RTS(5) */
	PAD_CFG_NF(GPP_T10, NONE, DEEP, NF1),
	/* UART_RTS(6) */
	PAD_CFG_NF(GPP_T14, NONE, DEEP, NF1),

	/* UART_CTS(1) */
	PAD_CFG_NF(GPP_C15, NONE, DEEP, NF1),
	/* UART_CTS(2) */
	PAD_CFG_NF(GPP_C23, NONE, DEEP, NF1),
	/* UART_CTS(4) */
	PAD_CFG_NF(GPP_T7, NONE, DEEP, NF1),
	/* UART_CTS(5) */
	PAD_CFG_NF(GPP_T11, NONE, DEEP, NF1),
	/* UART_CTS(6) */
	PAD_CFG_NF(GPP_T15, NONE, DEEP, NF1),

	/* SPI_MOSI(1) */
	PAD_CFG_NF(GPP_B22, NONE, DEEP, NF1),
	/* SPI_MOSI(2) */
	PAD_CFG_NF(GPP_D12, NONE, DEEP, NF2),

	/* SPI_MIS0(1) */
	PAD_CFG_NF(GPP_B21, NONE, DEEP, NF1),
	/* SPI_MIS0(2) */
	PAD_CFG_NF(GPP_D11, NONE, DEEP, NF2),

	/* SPI_CLK(1) */
	PAD_CFG_NF(GPP_B20, NONE, DEEP, NF1),
	/* SPI_CLK(2) */
	PAD_CFG_NF(GPP_D10, NONE, DEEP, NF2),

	/* SPI_CS(0, 1) */
	PAD_CFG_NF(GPP_B14, NONE, DEEP, NF1),
	/* SPI_CS(1, 0) */
	PAD_CFG_NF(GPP_B19, NONE, DEEP, NF1),
	/* SPI_CS(2, 0) */
	PAD_CFG_NF(GPP_D9, NONE, DEEP, NF2),

	/* I2C_SCL(0) */
	PAD_CFG_NF(GPP_H5, NONE, DEEP, NF1),
	/* I2C_SCL(1) */
	PAD_CFG_NF(GPP_H7, NONE, DEEP, NF1),
	/* I2C_SCL(2) */
	PAD_CFG_NF(GPP_B6, NONE, DEEP, NF2),
	/* I2C_SCL(3) */
	PAD_CFG_NF(GPP_B8, NONE, DEEP, NF2),
	/* I2C_SCL(5) */
	PAD_CFG_NF(GPP_B17, NONE, DEEP, NF2),

	/* I2C_SDA(0) */
	PAD_CFG_NF(GPP_H4, NONE, DEEP, NF1),
	/* I2C_SDA(1) */
	PAD_CFG_NF(GPP_H6, NONE, DEEP, NF1),
	/* I2C_SDA(2) */
	PAD_CFG_NF(GPP_B5, NONE, DEEP, NF2),
	/* I2C_SDA(3) */
	PAD_CFG_NF(GPP_B7, NONE, DEEP, NF2),
	/* I2C_SDA(5) */
	PAD_CFG_NF(GPP_B16, NONE, DEEP, NF2),

	/* I2S0_SCLK */
	PAD_CFG_NF(GPP_R0, NONE, DEEP, NF2),
	/* I2S0_SFRM */
	PAD_CFG_NF(GPP_R1, NONE, DEEP, NF2),
	/* I2S0_TXD */
	PAD_CFG_NF(GPP_R2, NONE, DEEP, NF2),
	/* I2S0_RXD */
	PAD_CFG_NF(GPP_R3, NONE, DEEP, NF2),

	/* I2S_MCLK1_OUT */
	PAD_CFG_NF(GPP_D19, NONE, DEEP, NF1),
	/* I2S_MCLK2_INOUT */
	PAD_CFG_NF(GPP_F8, NONE, DEEP, NF1),

	/* SNDW1_CLK */
	PAD_CFG_NF(GPP_S0, NONE, DEEP, NF1),
	/* SNDW1_DATA */
	PAD_CFG_NF(GPP_S1, NONE, DEEP, NF1),
	/* SNDW2_CLK */
	PAD_CFG_NF(GPP_S2, NONE, DEEP, NF2),
	/* SNDW2_DATA */
	PAD_CFG_NF(GPP_S3, NONE, DEEP, NF2),
	/* SNDW3_CLK */
	PAD_CFG_NF(GPP_S4, NONE, DEEP, NF2),
	/* SNDW3_DATA */
	PAD_CFG_NF(GPP_S5, NONE, DEEP, NF2),
	/* SNDW4_CLK */
	PAD_CFG_NF(GPP_S6, NONE, DEEP, NF2),
	/* SNDW4_DATA */
	PAD_CFG_NF(GPP_S7, NONE, DEEP, NF2),

	/* SMB_CLK */
	PAD_CFG_NF(GPP_C0, NONE, DEEP, NF1),
	/* SMB_DATA */
	PAD_CFG_NF(GPP_C1, NONE, DEEP, NF1),

	/* SATA DEVSLP */
	PAD_CFG_NF(GPP_H12, NONE, DEEP, NF4),
	PAD_CFG_NF(GPP_H13, NONE, DEEP, NF5),

	/* SATA LED pin */
	PAD_CFG_NF(GPP_E8, NONE, DEEP, NF1),

	/* USB2 OC0 pins */
	PAD_CFG_NF(GPP_E9, NONE, DEEP, NF1),
	/* USB2 OC3 pins */
	PAD_CFG_NF(GPP_A16, NONE, DEEP, NF1),

	/* GPIO pin for PCIE SRCCLKREQB */
	PAD_CFG_NF(GPP_D5, NONE, DEEP, NF1),
	PAD_CFG_NF(GPP_D6, NONE, DEEP, NF1),
	PAD_CFG_NF(GPP_D7, NONE, DEEP, NF1),
	PAD_NC(GPP_D8, NONE),
	PAD_CFG_NF(GPP_H19, NONE, DEEP, NF1),
	PAD_CFG_NF(GPP_F19, NONE, DEEP, NF1),
	PAD_CFG_NF(GPP_A8, NONE, DEEP, NF1),

	/* DDP1/2/3/4/A/B/C  CTRLCLK and CTRLDATA pins */
	PAD_CFG_NF(GPP_E18, NONE, DEEP, NF4),
	PAD_CFG_NF(GPP_E19, NONE, DEEP, NF4),
	PAD_CFG_NF(GPP_E20, NONE, DEEP, NF4),
	PAD_CFG_NF(GPP_E21, NONE, DEEP, NF4),
	PAD_CFG_NF(GPP_E22, NONE, DEEP, NF2),
	PAD_CFG_NF(GPP_A21, NONE, DEEP, NF2),
	PAD_CFG_NF(GPP_A22, NONE, DEEP, NF2),

	/* HPD_1 (E14) and HPD_2 (A18) pins */
	PAD_CFG_NF(GPP_E14, NONE, DEEP, NF1),
	PAD_CFG_NF(GPP_A18, NONE, DEEP, NF1),

	/* IMGCLKOUT */
	PAD_CFG_NF(GPP_D4, NONE, DEEP, NF1),
	PAD_CFG_NF(GPP_H20, NONE, DEEP, NF1),
	PAD_CFG_NF(GPP_H21, NONE, DEEP, NF1),
	PAD_CFG_NF(GPP_H22, NONE, DEEP, NF1),
	/* H23 : CLKREQ5_WWAN_N */
	PAD_CFG_NF(GPP_H23, NONE, DEEP, NF1),

	/* A21 : HDMI CRLS CTRLCLK */
	PAD_CFG_NF(GPP_A21, NONE, DEEP, NF1),
	/* A22 : HDMI CRLS CTRLDATA */
	PAD_CFG_NF(GPP_A22, NONE, DEEP, NF1),
	/* H1_PCH_INT_ODL */
	PAD_CFG_GPI_APIC(GPP_E3, NONE, PLTRST, LEVEL, INVERT)
};

void variant_configure_gpio_pads(void)
{
	gpio_configure_pads(gpio_table, ARRAY_SIZE(gpio_table));
}

static const struct cros_gpio cros_gpios[] = {
	CROS_GPIO_REC_AL(CROS_GPIO_VIRTUAL, CROS_GPIO_DEVICE_NAME),
};
DECLARE_CROS_GPIOS(cros_gpios);
