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

#ifndef GPIO_NAMES_EMMITSBURG_H
#define GPIO_NAMES_EMMITSBURG_H

#include "gpio_groups.h"

static const char *const emmitsburg_group_a_names[] = {
	"GPPC_A0",	"ESPI_ALERT0_N",		"n/a",
	"GPPC_A1",	"ESPI_ALERT1_N",		"n/a",
	"GPPC_A2",	"ESPI_IO_0",		"n/a",
	"GPPC_A3",	"ESPI_IO_1",		"n/a",
	"GPPC_A4",	"ESPI_IO_2",		"n/a",
	"GPPC_A5",	"ESPI_IO_3",		"n/a",
	"GPPC_A6",	"ESPI_CS0_N",		"ESPI_CS1_N",
	"GPPC_A7",	"ESPI_CS1_N",		"ESPI_CS0_N",
	"GPPC_A8",	"ESPI_RESET_N",		"n/a",
	"GPPC_A9",	"ESPI_CLK",		"n/a",
	"GPPC_A10",	"SRCCLKREQ0_N",		"n/a",
	"GPPC_A11",	"SRCCLKREQ1_N",		"n/a",
	"GPPC_A12",	"SRCCLKREQ2_N",		"n/a",
	"GPPC_A13",	"SRCCLKREQ3_N",		"n/a",
	"GPPC_A14",	"SRCCLKREQ4_N",		"n/a",
	"GPPC_A15",	"SRCCLKREQ5_N",		"n/a",
	"GPPC_A16",	"SRCCLKREQ6_N",		"n/a",
	"GPPC_A17",	"SRCCLKREQ7_N",		"n/a",
	"GPPC_A18",	"SRCCLKREQ8_N",		"n/a",
	"GPPC_A19",	"SRCCLKREQ9_N",		"n/a",
	"ESPI_CLK_LOOPBK",	"n/a",		"n/a",
};

static const char *const emmitsburg_group_b_names[] = {
	"GPPC_B0","GSXDOUT","n/a","1P8_VISA_CH0_CLK","1P8_PTI_CLK0","n/a","n/a","n/a","n/a",
	"GPPC_B1","GSXSLOAD","n/a","1P8_VISA_CH0_D0","1P8_PTI_DATA0","n/a","n/a","n/a","n/a",
	"GPPC_B2","GSXDIN","n/a","1P8_VISA_CH0_D1","1P8_PTI_DATA1","n/a","n/a","n/a","n/a",
	"GPPC_B3","GSXRESET_N","n/a","1P8_VISA_CH0_D2","1P8_PTI_DATA2","n/a","n/a","n/a","n/a",
	"GPPC_B4","GSXCLK","n/a","1P8_VISA_CH0_D3","1P8_PTI_DATA3","n/a","n/a","n/a","n/a",
	"GPPC_B5","USB2_OC0_N","n/a","1P8_VISA_CH0_D4","1P8_PTI_DATA4","n/a","n/a","n/a","n/a",
	"GPPC_B6","USB2_OC1_N","n/a","n/a","n/a","n/a","n/a","n/a","n/a",
	"GPPC_B7","USB2_OC2_N","n/a","n/a","n/a","n/a","n/a","n/a","n/a",
	"GPPC_B8","USB2_OC3_N","n/a","n/a","n/a","n/a","n/a","n/a","n/a",
	"GPPC_B9","USB2_OC4_N","n/a","n/a","n/a","n/a","n/a","n/a","n/a",
	"GPPC_B10","USB2_OC5_N","n/a","n/a","n/a","n/a","n/a","n/a","n/a",
	"GPPC_B11","USB2_OC6_N","n/a","n/a","n/a","n/a","n/a","n/a","n/a",
	"GPPC_B12","HS_UART0_RXD","n/a","1P8_VISA_CH0_D5","1P8_PTI_DATA5","n/a","n/a","n/a","n/a",
	"GPPC_B13","HS_UART0_TXD","n/a","1P8_VISA_CH0_D6","1P8_PTI_DATA6","n/a","n/a","n/a","n/a",
	"GPPC_B14","HS_UART0_RTS_N","n/a","1P8_VISA_CH0_D7","1P8_PTI_DATA7","n/a","n/a","n/a","n/a",
	"GPPC_B15","HS_UART0_CTS_N","n/a","1P8_VISA_CH1_D0","1P8_PTI_DATA8","n/a","n/a","n/a","n/a",
	"GPPC_B16","HS_UART1_RXD","n/a","1P8_VISA_CH1_D1","1P8_PTI_DATA9","n/a","n/a","n/a","n/a",
	"GPPC_B17","HS_UART1_TXD","n/a","1P8_VISA_CH1_D2","1P8_PTI_DATA10","n/a","n/a","n/a","n/a",
	"GPPC_B18","HS_UART1_RTX_N","n/a","1P8_VISA_CH1_D3","1P8_PTI_DATA11","n/a","n/a","n/a","n/a",
	"GPPC_B19","HS_UART1_CTS_N","n/a","1P8_VISA_CH1_D4","1P8_PTI_DATA12","n/a","n/a","SBK0","BK0",
	"GPPC_B20","n/a","n/a","1P8_VISA_CH1_D5","1P8_PTI_DATA13","n/a","n/a","SBK1","BK1",
	"GPPC_B21","n/a","n/a","1P8_VISA_CH1_D6","1P8_PTI_DATA14","n/a","n/a","SBK2","BK2",
	"GPPC_B22","n/a","n/a","1P8_VISA_CH1_D7","1P8_PTI_DATA15","n/a","n/a","SBK3","BK3",
	"GPPC_B23","PS_ONB","n/a","1P8_VISA_CH1_CLK","n/a","n/a","GPPB_EC_23","SBK4","BK4",
};

static const char *const emmitsburg_group_s_names[] = {
	"GPPC_S0","TIME_SYNC_0","n/a",
	"GPPC_S1","SPRK","TIME_SYNC_1",
	"GPPC_S2","CPU_GP_0","n/a",
	"GPPC_S3","CPU_GP_1","n/a",
	"GPPC_S4","CPU_GP_2","n/a",
	"GPPC_S5","CPU_GP_3","n/a",
	"GPPC_S6","SUSWARN_N_SUSWRDNACK","n/a",
	"GPPC_S7","SUSACK_N","n/a",
	"GPPC_S8","NMI_N","n/a",
	"GPPC_S9","SMI_N","n/a",
	"GPPC_S10","n/a","n/a",
	"GPPC_S11","n/a","n/a",
	"SPI_CLK_LOOPBK",	"n/a",		"n/a",
};

static const struct gpio_group emmitsburg_group_a = {
	.display	= "------- GPIO Group GPPC_A -------",
	.pad_count	= ARRAY_SIZE(emmitsburg_group_a_names) / 3,
	.func_count	= 3,
	.pad_names	= emmitsburg_group_a_names,
};

static const struct gpio_group emmitsburg_group_b = {
	.display	= "------- GPIO Group GPPC_B -------",
	.pad_count	= ARRAY_SIZE(emmitsburg_group_b_names) / 9,
	.func_count	= 9,
	.pad_names	= emmitsburg_group_b_names,
};

static const struct gpio_group emmitsburg_group_s = {
	.display	= "------- GPIO Group GPPC_S -------",
	.pad_count	= ARRAY_SIZE(emmitsburg_group_s_names) / 3,
	.func_count	= 3,
	.pad_offset = 0xA50,
	.pad_names	= emmitsburg_group_s_names,
};

static const struct gpio_group *const emmitsburg_community0_abs_groups[] = {
	&emmitsburg_group_a,
	&emmitsburg_group_b,
	&emmitsburg_group_s,
};

static const struct gpio_community emmitsburg_community0_abs = {
	.name		= "------- GPIO Community 0 -------",
	.pcr_port_id	= 0x6e,
	.group_count	= ARRAY_SIZE(emmitsburg_community0_abs_groups),
	.groups		= emmitsburg_community0_abs_groups,
};

static const char *const emmitsburg_group_c_names[] = {
	"GPPC_C0",	"ME_SML0CLK",
	"GPPC_C1",	"ME_SML0DATA",
	"GPPC_C2",	"ME_SML0ALERT_N",
	"GPPC_C3",	"ME_SML0BDATA",
	"GPPC_C4",	"ME_SML0BCLK",
	"GPPC_C5",	"ME_SML0BALART_N",
	"GPPC_C6",	"ME_SML1CLK",
	"GPPC_C7",	"ME_SML1DATA",
	"GPPC_C8",	"ME_SML1ALERT_N",
	"GPPC_C9",	"ME_SML2CLK",
	"GPPC_C10",	"ME_SML2DATA",
	"GPPC_C11",	"ME_SML2ALERT_N",
	"GPPC_C12",	"ME_SML3CLK",
	"GPPC_C13",	"ME_SML3DATA",
	"GPPC_C14",	"ME_SML3ALERT_N",
	"GPPC_C15",	"ME_SML4CLK",
	"GPPC_C16",	"ME_SML4DATA",
	"GPPC_C17",	"ME_SML4ALERT_N",
	"GPPC_C18",	"n/a",
	"GPPC_C19",	"MC_SMBCLK",
	"GPPC_C20",	"MC_SMBDATA",
	"GPPC_C21",	"MC_SMBALERT_N",
};

static const struct gpio_group emmitsburg_group_c = {
	.display	= "------- GPIO Group GPPC_C -------",
	.pad_count	= ARRAY_SIZE(emmitsburg_group_c_names) / 2,
	.func_count	= 2,
	.pad_names	= emmitsburg_group_c_names,
};

static const struct gpio_group *const emmitsburg_community1_c_groups[] = {
	&emmitsburg_group_c,
};

static const char *const emmitsburg_group_d_names[] = {
	"GPP_D0",	"HS_SMBCLK",
	"GPP_D1",	"HS_SMBDATA",
	"GPP_D2",	"HS_SMBALERT_N",
	"GPP_D3",	"n/a", // Not described in EDS, add here to take space
	"GPP_D4",	"n/a", // Not described in EDS, add here to take space
	"GPP_D5",	"n/a", // Not described in EDS, add here to take space
	"GPP_D6",	"n/a",
	"GPP_D7",	"n/a",
	"GPP_D8",	"CRASHLOG_TRIG_N",
	"GPP_D9",	"PME_N",
	"GPP_D10",	"BM_BUSY_N",
	"GPP_D11",	"PLTRST_N",
	"GPP_D12",	"PCHHOT_N",
	"GPP_D13",	"ADR_COMPLETE",
	"GPP_D14",	"ADR_TRIGGER",
	"GPP_D15",	"VRALERT_N",
	"GPP_D16",	"ADR_ACK",
	"GPP_D17",	"THERMTRIP_N",
	"GPP_D18",	"MEMTRIP_N",
	"GPP_D19",	"MSMI_N",
	"GPP_D20",	"CATERR_N",
	"GPP_D21",	"GLB_RST_WARN_N",
	"GPP_D22",	"USB2_OCB_7",
	"GPP_D23",	"n/a",
};

static const struct gpio_group emmitsburg_group_d = {
	.display	= "------- GPIO Group GPP_D -------",
	.pad_count	= ARRAY_SIZE(emmitsburg_group_d_names) / 2,
	.func_count	= 2,
	.pad_names	= emmitsburg_group_d_names,
};

static const struct gpio_group *const emmitsburg_community1_cd_groups[] = {
	&emmitsburg_group_c,
	&emmitsburg_group_d,
};

static const struct gpio_community emmitsburg_community1_cd = {
	.name		= "------- GPIO Community 1 -------",
	.pcr_port_id	= 0x6d,
	.group_count	= ARRAY_SIZE(emmitsburg_community1_cd_groups),
	.groups		= emmitsburg_community1_cd_groups,
};

static const char *const emmitsburg_group_e_names[] = {
	"GPP_E0",	"SATA1_XPCIE_0", "n/a",
	"GPP_E1",	"SATA1_XPCIE_1", "n/a",
	"GPP_E2",	"SATA1_XPCIE_2", "n/a",
	"GPP_E3",	"SATA1_XPCIE_3", "n/a",
	"GPP_E4",	"SATA0_XPCIE_2", "n/a",
	"GPP_E5",	"SATA0_XPCIE_1", "n/a",
	"GPP_E6",	"SATA0_USB3_XPCIE_0", "n/a",
	"GPP_E7",	"SATA0_USB3_XPCIE_1", "n/a",
	"GPP_E8",	"SATA0_SCLOCK", "SATA0_LED_N",
	"GPP_E9",	"SATA0_SLOAD", "SATA0_DEVSLP",
	"GPP_E10",	"SATA0_SDATAOUT", "SATA1_GP",
	"GPP_E11",	"SATA1_SCLOCK", "SATA1_LED_N",
	"GPP_E12",	"SATA1_SLOAD", "SATA1_GP",
	"GPP_E13",	"SATA1_SDATAOUT", "SATA1_DEVSLP",
	"GPP_E14",	"SATA2_SCLOCK", "SATA2_LED_N",
	"GPP_E15",	"SATA2_SLOAD", "SATA2_GP",
	"GPP_E16",	"SATA2_SDATAOUT", "SATA2_DEVSLP",
	"GPP_E17",	"n/a", "ERR0_N",
	"GPP_E18",	"n/a", "ERR1_N",
	"GPP_E19",	"n/a", "ERR2_N",
};

static const struct gpio_group emmitsburg_group_e = {
	.display	= "------- GPIO Group GPP_E -------",
	.pad_count	= ARRAY_SIZE(emmitsburg_group_e_names) / 3,
	.func_count	= 3,
	.pad_names	= emmitsburg_group_e_names,
};

static const char *const emmitsburg_group_jtag_names[] = {
	"JTAG_0",
	"JTAG_1",
	"JTAG_2",
	"JTAG_3",
	"JTAG_4",
	"JTAG_5",
	"JTAG_6",
	"JTAG_7",
	"JTAG_8",
	"JTAG_9",
};

static const struct gpio_group emmitsburg_group_jtag = {
	.display	= "------- GPIO Group JTAG -------",
	.pad_count	= ARRAY_SIZE(emmitsburg_group_jtag_names) / 1,
	.func_count	= 1,
	.pad_offset = 0x880,
	.pad_names	= emmitsburg_group_jtag_names,
};

static const struct gpio_group *const emmitsburg_community3_e_jtag_groups[] = {
	&emmitsburg_group_e,
	&emmitsburg_group_jtag,
};

static const struct gpio_community emmitsburg_community3_e_jtag = {
	.name		= "------- GPIO Community 3 -------",
	.pcr_port_id	= 0x6b,
	.group_count	= ARRAY_SIZE(emmitsburg_community3_e_jtag_groups),
	.groups		= emmitsburg_community3_e_jtag_groups,
};

static const char *const emmitsburg_group_h_names[] = {
	"GPPC_H0",	"n/a", "n/a",
	"GPPC_H1",	"n/a", "n/a",
	"GPPC_H2",	"n/a", "n/a", // Not described in EDS, add here to take space
	"GPPC_H3",	"n/a", "n/a", // Not described in EDS, add here to take space
	"GPPC_H4",	"n/a", "n/a", // Not described in EDS, add here to take space
	"GPPC_H5",	"n/a", "n/a", // Not described in EDS, add here to take space
	"GPPC_H6",	"n/a", "n/a",
	"GPPC_H7",	"n/a", "n/a",
	"GPPC_H8",	"n/a", "n/a", // Not described in EDS, add here to take space
	"GPPC_H9",	"n/a", "n/a", // Not described in EDS, add here to take space
	"GPPC_H10",	"n/a", "n/a", // Not described in EDS, add here to take space
	"GPPC_H11",	"n/a", "n/a", // Not described in EDS, add here to take space
	"GPPC_H12",	"n/a", "n/a", // Not described in EDS, add here to take space
	"GPPC_H13",	"n/a", "n/a", // Not described in EDS, add here to take space
	"GPPC_H14",	"n/a", "n/a", // Not described in EDS, add here to take space
	"GPPC_H15",	"n/a", "ISCLK_CLK_OUT_0",
	"GPPC_H16",	"n/a", "ISCLK_CLK_OUT_1",
	"GPPC_H17",	"n/a", "ISCLK_CLK_OUT_2",
	"GPPC_H18",	"n/a", "PMCALERT_N",
	"GPPC_H19",	"n/a", "n/a",
};

static const struct gpio_group emmitsburg_group_h = {
	.display	= "------- GPIO Group GPPC_H -------",
	.pad_count	= ARRAY_SIZE(emmitsburg_group_h_names) / 3,
	.func_count	= 3,
	.pad_names	= emmitsburg_group_h_names,
};

static const char *const emmitsburg_group_j_names[] = {
	"GPPC_J0",	"CPUPWRGD",
	"GPPC_J1",	"CPU_THRMTRIP_N",
	"GPPC_J2",	"PLTRST_CPU_N",
	"GPPC_J3",	"TRIGGER0_N",
	"GPPC_J4",	"TRIGGER1_N",
	"GPPC_J5",	"CPU_PWER_DEBUG_N",
	"GPPC_J6",	"CPU_MEMTRIP_N",
	"GPPC_J7",	"CPU_MSMI_N",
	"GPPC_J8",	"ME_PECI",
	"GPPC_J9",	"n/a", // Not described in EDS, add here to take space
	"GPPC_J10",	"n/a", // Not described in EDS, add here to take space
	"GPPC_J11",	"n/a", // Not described in EDS, add here to take space
	"GPPC_J12",	"CPU_ERR0_N",
	"GPPC_J13",	"CPU_CATERR_N",
	"GPPC_J14",	"CPU_ERR1_N",
	"GPPC_J15",	"CPU_ERR2_N",
};

static const struct gpio_group emmitsburg_group_j = {
	.display	= "------- GPIO Group GPP_J -------",
	.pad_count	= ARRAY_SIZE(emmitsburg_group_j_names) / 2,
	.func_count	= 2,
	.pad_names	= emmitsburg_group_j_names,
};

static const struct gpio_group *const emmitsburg_community4_hj_groups[] = {
	&emmitsburg_group_h,
	&emmitsburg_group_j,
};

static const struct gpio_community emmitsburg_community4_hj = {
	.name		= "------- GPIO Community 4 -------",
	.pcr_port_id	= 0x6a,
	.group_count	= ARRAY_SIZE(emmitsburg_community4_hj_groups),
	.groups		= emmitsburg_community4_hj_groups,
};

static const char *const emmitsburg_group_i_names[] = {
	"GPP_I0",	"n/a", "n/a", // Not described in EDS, add here to take space
	"GPP_I1",	"n/a", "n/a", // Not described in EDS, add here to take space
	"GPP_I2",	"n/a", "n/a", // Not described in EDS, add here to take space
	"GPP_I3",	"n/a", "n/a", // Not described in EDS, add here to take space
	"GPP_I4",	"n/a", "n/a", // Not described in EDS, add here to take space
	"GPP_I5",	"n/a", "n/a", // Not described in EDS, add here to take space
	"GPP_I6",	"n/a", "n/a", // Not described in EDS, add here to take space
	"GPP_I7",	"n/a", "n/a", // Not described in EDS, add here to take space
	"GPP_I8",	"n/a", "n/a", // Not described in EDS, add here to take space
	"GPP_I9",	"n/a", "n/a", // Not described in EDS, add here to take space
	"GPP_I10",	"n/a", "n/a", // Not described in EDS, add here to take space
	"GPP_I11",	"n/a", "n/a", // Not described in EDS, add here to take space
	"GPP_I12",	"n/a", "HDA_BCLK",
	"GPP_I13",	"n/a", "HDA_RST_N",
	"GPP_I14",	"n/a", "HDA_SYNC",
	"GPP_I15",	"n/a", "HDA_SDO",
	"GPP_I16",	"n/a", "HDA_SDI_0",
	"GPP_I17",	"n/a", "HDA_SDI_1",
	"GPP_I18",	"n/a", "n/a", // Not described in EDS, add here to take space
	"GPP_I19",	"n/a", "n/a", // Not described in EDS, add here to take space
	"GPP_I20",	"n/a", "n/a", // Not described in EDS, add here to take space
	"GPP_I21",	"n/a", "n/a",
	"GPP_I22",	"n/a", "n/a",
	"GPP_I23",	"n/a", "n/a",
};

static const struct gpio_group emmitsburg_group_i = {
	.display	= "------- GPIO Group GPP_I -------",
	.pad_count	= ARRAY_SIZE(emmitsburg_group_i_names) / 3,
	.func_count	= 3,
	.pad_names	= emmitsburg_group_i_names,
};

static const char *const emmitsburg_group_l_names[] = {
	"GPP_L0",	"PM_SYNC_0",
	"GPP_L1",	"PM_DOWN_0",
	"GPP_L2",	"SUSCLK_CPU",
	"GPP_L3",	"n/a",
	"GPP_L4",	"n/a",
	"GPP_L5",	"n/a",
	"GPP_L6",	"n/a",
	"GPP_L7",	"n/a",
	"GPP_L8",	"n/a",
};

static const struct gpio_group emmitsburg_group_l = {
	.display	= "------- GPIO Group GPP_L -------",
	.pad_count	= ARRAY_SIZE(emmitsburg_group_l_names) / 2,
	.func_count	= 2,
	.pad_names	= emmitsburg_group_l_names,
};

static const char *const emmitsburg_group_m_names[] = {
	"GPP_M0",
	"GPP_M1",
	"GPP_M2",
	"GPP_M3",
	"GPP_M4",
	"GPP_M5",
	"GPP_M6",
	"GPP_M7",
	"GPP_M8",
	"GPP_M9",
	"GPP_M10",
	"GPP_M11",
	"GPP_M12",
	"GPP_M13",
	"GPP_M14",
	"GPP_M15",
	"GPP_M16",
	"GPP_M17",
};

static const struct gpio_group emmitsburg_group_m = {
	.display	= "------- GPIO Group GPP_M -------",
	.pad_count	= ARRAY_SIZE(emmitsburg_group_m_names) / 1,
	.func_count	= 1,
	.pad_offset = 0x9A0,
	.pad_names	= emmitsburg_group_m_names,
};

static const char *const emmitsburg_group_n_names[] = {
	"GPP_N0",
	"GPP_N1",
	"GPP_N2",
	"GPP_N3",
	"GPP_N4",
};

static const struct gpio_group emmitsburg_group_n = {
	.display	= "------- GPIO Group GPP_N -------",
	.pad_count	= ARRAY_SIZE(emmitsburg_group_n_names) / 1,
	.func_count	= 1,
	.pad_names	= emmitsburg_group_n_names,
};

static const struct gpio_group *const emmitsburg_community5_ilmn_groups[] = {
	&emmitsburg_group_i,
	&emmitsburg_group_l,
	&emmitsburg_group_m,
	&emmitsburg_group_n,
};

static const struct gpio_community emmitsburg_community5_ilmn = {
	.name		= "------- GPIO Community 5 -------",
	.pcr_port_id	= 0x69,
	.group_count	= ARRAY_SIZE(emmitsburg_community5_ilmn_groups),
	.groups		= emmitsburg_community5_ilmn_groups,
};

static const struct gpio_community *const emmitsburg_communities[] = {
	&emmitsburg_community0_abs,
	&emmitsburg_community1_cd,
	&emmitsburg_community3_e_jtag,
	&emmitsburg_community4_hj,
	&emmitsburg_community5_ilmn,
};

#endif
