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

#include <soc/gpio.h>

/* NCORE GPIOs */
static const struct soc_gpio_map gpncore_gpio_map[] = {
	GPIO_INPUT,			/* GPIO_S0_NC[00] */
	GPIO_INPUT,			/* GPIO_S0_NC[01] */
	GPIO_INPUT,			/* GPIO_S0_NC[02] */
	GPIO_INPUT,			/* GPIO_S0_NC[03] */
	GPIO_INPUT,			/* GPIO_S0_NC[04] */
	GPIO_INPUT,			/* GPIO_S0_NC[05] */
	GPIO_INPUT,			/* GPIO_S0_NC[06] */
	GPIO_INPUT,			/* GPIO_S0_NC[07] */
	GPIO_INPUT,			/* GPIO_S0_NC[08] */
	GPIO_INPUT,			/* GPIO_S0_NC[09] */
	GPIO_INPUT,			/* GPIO_S0_NC[10] */
	GPIO_INPUT,			/* GPIO_S0_NC[11] */
	GPIO_INPUT,			/* GPIO_S0_NC[12] */
	GPIO_INPUT,			/* GPIO_S0_NC[13] */
	GPIO_INPUT,			/* GPIO_S0_NC[14] */
	GPIO_INPUT,			/* GPIO_S0_NC[15] */
	GPIO_INPUT,			/* GPIO_S0_NC[16] */
	GPIO_INPUT,			/* GPIO_S0_NC[17] */
	GPIO_INPUT,			/* GPIO_S0_NC[18] */
	GPIO_INPUT,			/* GPIO_S0_NC[19] */
	GPIO_INPUT,			/* GPIO_S0_NC[20] */
	GPIO_INPUT,			/* GPIO_S0_NC[21] */
	GPIO_INPUT,			/* GPIO_S0_NC[22] */
	GPIO_INPUT,			/* GPIO_S0_NC[23] */
	GPIO_INPUT,			/* GPIO_S0_NC[24] */
	GPIO_INPUT,			/* GPIO_S0_NC[25] */
	GPIO_INPUT,			/* GPIO_S0_NC[26] */
	GPIO_END
};

/* SCORE GPIOs */
static const struct soc_gpio_map gpscore_gpio_map[] = {
	GPIO_INPUT,			/* GPIO_S0_SC[000] */
	GPIO_INPUT,			/* GPIO_S0_SC[001] */
	GPIO_FUNC1,			/* SATA_LED# */
	GPIO_FUNC1,			/* PCIE_CLKREQ[0]# */
	GPIO_FUNC1,			/* PCIE_CLKREQ[1]# */
	GPIO_FUNC1,			/* PCIE_CLKREQ[2]# */
	GPIO_FUNC1,			/* PCIE_CLKREQ[3]# */
	GPIO_INPUT,			/* GPIO_S0_SC[007] */
	GPIO_INPUT,			/* GPIO_S0_SC[008] */
	GPIO_INPUT,			/* GPIO_S0_SC[009] */
	GPIO_INPUT,			/* GPIO_S0_SC[010] */
	GPIO_INPUT,			/* GPIO_S0_SC[011] */
	GPIO_INPUT,			/* GPIO_S0_SC[012] */
	GPIO_INPUT,			/* GPIO_S0_SC[013] */
	GPIO_INPUT,			/* GPIO_S0_SC[014] */
	GPIO_INPUT,			/* GPIO_S0_SC[015] */
	GPIO_INPUT,			/* GPIO_S0_SC[016] */
	GPIO_INPUT,			/* GPIO_S0_SC[017] */
	GPIO_INPUT,			/* GPIO_S0_SC[018] */
	GPIO_INPUT,			/* GPIO_S0_SC[019] */
	GPIO_INPUT,			/* GPIO_S0_SC[020] */
	GPIO_INPUT,			/* GPIO_S0_SC[021] */
	GPIO_INPUT,			/* GPIO_S0_SC[022] */
	GPIO_INPUT,			/* GPIO_S0_SC[023] */
	GPIO_INPUT,			/* GPIO_S0_SC[024] */
	GPIO_INPUT,			/* GPIO_S0_SC[025] */
	GPIO_INPUT,			/* GPIO_S0_SC[026] */
	GPIO_INPUT,			/* GPIO_S0_SC[027] */
	GPIO_INPUT,			/* GPIO_S0_SC[028] */
	GPIO_INPUT,			/* GPIO_S0_SC[029] */
	GPIO_INPUT,			/* GPIO_S0_SC[030] */
	GPIO_INPUT,			/* GPIO_S0_SC[031] */
	GPIO_INPUT,			/* GPIO_S0_SC[032] */
	GPIO_INPUT,			/* GPIO_S0_SC[033] */
	GPIO_INPUT,			/* GPIO_S0_SC[034] */
	GPIO_INPUT,			/* GPIO_S0_SC[035] */
	GPIO_INPUT,			/* GPIO_S0_SC[036] */
	GPIO_INPUT,			/* GPIO_S0_SC[037] */
	GPIO_INPUT,			/* GPIO_S0_SC[038] */
	GPIO_INPUT,			/* GPIO_S0_SC[039] */
	GPIO_INPUT,			/* GPIO_S0_SC[040] */
	GPIO_INPUT,			/* GPIO_S0_SC[041] */
	GPIO_FUNC1,			/* ILB_LPC_AD[0] */
	GPIO_FUNC1,			/* ILB_LPC_AD[1] */
	GPIO_FUNC1,			/* ILB_LPC_AD[2] */
	GPIO_FUNC1,			/* ILB_LPC_AD[3] */
	GPIO_FUNC1,			/* ILB_LPC_FRAME# */
	GPIO_FUNC1,			/* ILB_LPC_CLK[0] */
	GPIO_FUNC1,			/* ILB_LPC_CLK[1] */
	GPIO_FUNC1,			/* ILB_LPC_CLKRUN# */
	GPIO_FUNC1,			/* ILB_LPC_SERIRQ */
	GPIO_FUNC1,			/* PCU_SMB_DATA */
	GPIO_FUNC1,			/* PCU_SMB_CLK */
	GPIO_FUNC1,			/* PCU_SMB_ALERT# */
	GPIO_FUNC1,			/* ILB_8254_SPKR */
	GPIO_INPUT,			/* GPIO_S0_SC[055] */
	GPIO_INPUT,			/* GPIO_S0_SC[056] */
	GPIO_INPUT,			/* GPIO_S0_SC[057] */
	GPIO_INPUT,			/* GPIO_S0_SC[058] */
	GPIO_INPUT,			/* GPIO_S0_SC[059] */
	GPIO_INPUT,			/* GPIO_S0_SC[060] */
	GPIO_INPUT,			/* GPIO_S0_SC[061] */
	GPIO_INPUT,			/* GPIO_S0_SC[062] */
	GPIO_INPUT,			/* GPIO_S0_SC[063] */
	GPIO_INPUT,			/* GPIO_S0_SC[064] */
	GPIO_INPUT,			/* GPIO_S0_SC[065] */
	GPIO_INPUT,			/* GPIO_S0_SC[066] */
	GPIO_INPUT,			/* GPIO_S0_SC[067] */
	GPIO_INPUT,			/* GPIO_S0_SC[068] */
	GPIO_INPUT,			/* GPIO_S0_SC[069] */
	GPIO_INPUT,			/* GPIO_S0_SC[070] */
	GPIO_INPUT,			/* GPIO_S0_SC[071] */
	GPIO_INPUT,			/* GPIO_S0_SC[072] */
	GPIO_INPUT,			/* GPIO_S0_SC[073] */
	GPIO_INPUT,			/* GPIO_S0_SC[074] */
	GPIO_INPUT,			/* GPIO_S0_SC[075] */
	GPIO_INPUT,			/* GPIO_S0_SC[076] */
	GPIO_INPUT,			/* GPIO_S0_SC[077] */
	GPIO_INPUT,			/* GPIO_S0_SC[078] */
	GPIO_INPUT,			/* GPIO_S0_SC[079] */
	GPIO_INPUT,			/* GPIO_S0_SC[080] */
	GPIO_INPUT,			/* GPIO_S0_SC[081] */
	GPIO_INPUT,			/* GPIO_S0_SC[082] */
	GPIO_INPUT,			/* GPIO_S0_SC[083] */
	GPIO_INPUT,			/* GPIO_S0_SC[084] */
	GPIO_INPUT,			/* GPIO_S0_SC[085] */
	GPIO_INPUT,			/* GPIO_S0_SC[086] */
	GPIO_INPUT,			/* GPIO_S0_SC[087] */
	GPIO_INPUT,			/* GPIO_S0_SC[088] */
	GPIO_INPUT,			/* GPIO_S0_SC[089] */
	GPIO_INPUT,			/* GPIO_S0_SC[090] */
	GPIO_INPUT,			/* GPIO_S0_SC[091] */
	GPIO_INPUT,			/* GPIO_S0_SC[092] */
	GPIO_INPUT,			/* GPIO_S0_SC[093] */
	GPIO_INPUT,			/* GPIO_S0_SC[094] */
	GPIO_INPUT,			/* GPIO_S0_SC[095] */
	GPIO_INPUT,			/* GPIO_S0_SC[096] */
	GPIO_INPUT,			/* GPIO_S0_SC[097] */
	GPIO_INPUT,			/* GPIO_S0_SC[098] */
	GPIO_INPUT,			/* GPIO_S0_SC[099] */
	GPIO_INPUT,			/* GPIO_S0_SC[100] */
	GPIO_INPUT,			/* GPIO_S0_SC[101] */
	GPIO_END
};

/* SSUS GPIOs */
static const struct soc_gpio_map gpssus_gpio_map[] = {
	GPIO_INPUT,			/* GPIO_S5[00] */
	GPIO_FUNC6,			/* PMC_WAKE_PCIE[1]# */
	GPIO_FUNC6,			/* PMC_WAKE_PCIE[2]# */
	GPIO_FUNC6,			/* PMC_WAKE_PCIE[3]# */
	GPIO_INPUT,			/* GPIO_S5[04] */
	GPIO_INPUT,			/* GPIO_S5[05] */
	GPIO_INPUT,			/* GPIO_S5[06] */
	GPIO_INPUT,			/* GPIO_S5[07] */
	GPIO_INPUT,			/* GPIO_S5[08] */
	GPIO_INPUT,			/* GPIO_S5[09] */
	GPIO_INPUT,			/* GPIO_S5[10] */
	GPIO_INPUT,			/* GPIO_S5[11] */
	GPIO_INPUT,			/* GPIO_S5[12] */
	GPIO_INPUT,			/* GPIO_S5[13] */
	GPIO_INPUT,			/* GPIO_S5[14] */
	GPIO_FUNC0,			/* PMC_WAKE_PCIE[0]# */
	GPIO_FUNC(0, PULL_UP, 20K),	/* PMC_PWRBTN# */
	GPIO_INPUT,			/* GPIO_S5[17] */
	GPIO_INPUT,			/* GPIO_S5[18] */
	GPIO_INPUT,			/* GPIO_S5[19] */
	GPIO_INPUT,			/* GPIO_S5[20] */
	GPIO_INPUT,			/* GPIO_S5[21] */
	GPIO_INPUT,			/* GPIO_S5[22] */
	GPIO_INPUT,			/* GPIO_S5[23] */
	GPIO_INPUT,			/* GPIO_S5[24] */
	GPIO_INPUT,			/* GPIO_S5[25] */
	GPIO_INPUT,			/* GPIO_S5[26] */
	GPIO_INPUT,			/* GPIO_S5[27] */
	GPIO_INPUT,			/* GPIO_S5[28] */
	GPIO_INPUT,			/* GPIO_S5[29] */
	GPIO_INPUT,			/* GPIO_S5[30] */
	GPIO_INPUT,			/* GPIO_S5[31] */
	GPIO_INPUT,			/* GPIO_S5[32] */
	GPIO_INPUT,			/* GPIO_S5[33] */
	GPIO_INPUT,			/* GPIO_S5[34] */
	GPIO_INPUT,			/* GPIO_S5[35] */
	GPIO_INPUT,			/* GPIO_S5[36] */
	GPIO_INPUT,			/* GPIO_S5[37] */
	GPIO_INPUT,			/* GPIO_S5[38] */
	GPIO_INPUT,			/* GPIO_S5[39] */
	GPIO_INPUT,			/* GPIO_S5[40] */
	GPIO_INPUT,			/* GPIO_S5[41] */
	GPIO_INPUT,			/* GPIO_S5[42] */
	GPIO_INPUT,			/* GPIO_S5[43] */
	GPIO_END
};

static const u8 core_dedicated_irq[GPIO_MAX_DIRQS] = {
};

static const u8 sus_dedicated_irq[GPIO_MAX_DIRQS] = {
};

static struct soc_gpio_config gpio_config = {
	.ncore = gpncore_gpio_map,
	.score = gpscore_gpio_map,
	.ssus  = gpssus_gpio_map,
	.core_dirq = &core_dedicated_irq,
	.sus_dirq = &sus_dedicated_irq,
};

struct soc_gpio_config *mainboard_get_gpios(void)
{
	return &gpio_config;
}