// SPDX-License-Identifier: GPL-2.0
/*
 * Intel Elkhart Lake PCH pinctrl/GPIO driver
 *
 * Copyright (C) 2019 Intel Corporation
 * Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
 */

#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/pm.h>

#include <linux/pinctrl/pinctrl.h>

#include "pinctrl-intel.h"

#define EHL_PAD_OWN	0x020
#define EHL_PADCFGLOCK	0x080
#define EHL_HOSTSW_OWN	0x0b0
#define EHL_GPI_IS	0x100
#define EHL_GPI_IE	0x120

#define EHL_COMMUNITY(b, s, e, g)			\
	INTEL_COMMUNITY_GPPS(b, s, e, g, EHL)

/* Elkhart Lake */
static const struct pinctrl_pin_desc ehl_community0_pins[] = {
	/* GPP_B */
	PINCTRL_PIN(0, "CORE_VID_0"),
	PINCTRL_PIN(1, "CORE_VID_1"),
	PINCTRL_PIN(2, "VRALERTB"),
	PINCTRL_PIN(3, "CPU_GP_2"),
	PINCTRL_PIN(4, "CPU_GP_3"),
	PINCTRL_PIN(5, "OSE_I2C0_SCLK"),
	PINCTRL_PIN(6, "OSE_I2C0_SDAT"),
	PINCTRL_PIN(7, "OSE_I2C1_SCLK"),
	PINCTRL_PIN(8, "OSE_I2C1_SDAT"),
	PINCTRL_PIN(9, "I2C5_SDA"),
	PINCTRL_PIN(10, "I2C5_SCL"),
	PINCTRL_PIN(11, "PMCALERTB"),
	PINCTRL_PIN(12, "SLP_S0B"),
	PINCTRL_PIN(13, "PLTRSTB"),
	PINCTRL_PIN(14, "SPKR"),
	PINCTRL_PIN(15, "GSPI0_CS0B"),
	PINCTRL_PIN(16, "GSPI0_CLK"),
	PINCTRL_PIN(17, "GSPI0_MISO"),
	PINCTRL_PIN(18, "GSPI0_MOSI"),
	PINCTRL_PIN(19, "GSPI1_CS0B"),
	PINCTRL_PIN(20, "GSPI1_CLK"),
	PINCTRL_PIN(21, "GSPI1_MISO"),
	PINCTRL_PIN(22, "GSPI1_MOSI"),
	PINCTRL_PIN(23, "GPPC_B_23"),
	PINCTRL_PIN(24, "GSPI0_CLK_LOOPBK"),
	PINCTRL_PIN(25, "GSPI1_CLK_LOOPBK"),
	/* GPP_T */
	PINCTRL_PIN(26, "OSE_QEPA_2"),
	PINCTRL_PIN(27, "OSE_QEPB_2"),
	PINCTRL_PIN(28, "OSE_QEPI_2"),
	PINCTRL_PIN(29, "GPPC_T_3"),
	PINCTRL_PIN(30, "RGMII0_INT"),
	PINCTRL_PIN(31, "RGMII0_RESETB"),
	PINCTRL_PIN(32, "RGMII0_AUXTS"),
	PINCTRL_PIN(33, "RGMII0_PPS"),
	PINCTRL_PIN(34, "USB2_OCB_2"),
	PINCTRL_PIN(35, "OSE_HSUART2_EN"),
	PINCTRL_PIN(36, "OSE_HSUART2_RE"),
	PINCTRL_PIN(37, "USB2_OCB_3"),
	PINCTRL_PIN(38, "OSE_UART2_RXD"),
	PINCTRL_PIN(39, "OSE_UART2_TXD"),
	PINCTRL_PIN(40, "OSE_UART2_RTSB"),
	PINCTRL_PIN(41, "OSE_UART2_CTSB"),
	/* GPP_G */
	PINCTRL_PIN(42, "SD3_CMD"),
	PINCTRL_PIN(43, "SD3_D0"),
	PINCTRL_PIN(44, "SD3_D1"),
	PINCTRL_PIN(45, "SD3_D2"),
	PINCTRL_PIN(46, "SD3_D3"),
	PINCTRL_PIN(47, "SD3_CDB"),
	PINCTRL_PIN(48, "SD3_CLK"),
	PINCTRL_PIN(49, "I2S2_SCLK"),
	PINCTRL_PIN(50, "I2S2_SFRM"),
	PINCTRL_PIN(51, "I2S2_TXD"),
	PINCTRL_PIN(52, "I2S2_RXD"),
	PINCTRL_PIN(53, "I2S3_SCLK"),
	PINCTRL_PIN(54, "I2S3_SFRM"),
	PINCTRL_PIN(55, "I2S3_TXD"),
	PINCTRL_PIN(56, "I2S3_RXD"),
	PINCTRL_PIN(57, "ESPI_IO_0"),
	PINCTRL_PIN(58, "ESPI_IO_1"),
	PINCTRL_PIN(59, "ESPI_IO_2"),
	PINCTRL_PIN(60, "ESPI_IO_3"),
	PINCTRL_PIN(61, "I2S1_SCLK"),
	PINCTRL_PIN(62, "ESPI_CSB"),
	PINCTRL_PIN(63, "ESPI_CLK"),
	PINCTRL_PIN(64, "ESPI_RESETB"),
	PINCTRL_PIN(65, "SD3_WP"),
	PINCTRL_PIN(66, "ESPI_CLK_LOOPBK"),
};

static const struct intel_padgroup ehl_community0_gpps[] = {
	INTEL_GPP(0, 0, 25, 0),		/* GPP_B */
	INTEL_GPP(1, 26, 41, 26),	/* GPP_T */
	INTEL_GPP(2, 42, 66, 42),	/* GPP_G */
};

static const struct intel_community ehl_community0[] = {
	EHL_COMMUNITY(0, 0, 66, ehl_community0_gpps),
};

static const struct intel_pinctrl_soc_data ehl_community0_soc_data = {
	.uid = "0",
	.pins = ehl_community0_pins,
	.npins = ARRAY_SIZE(ehl_community0_pins),
	.communities = ehl_community0,
	.ncommunities = ARRAY_SIZE(ehl_community0),
};

static const struct pinctrl_pin_desc ehl_community1_pins[] = {
	/* GPP_V */
	PINCTRL_PIN(0, "EMMC_CMD"),
	PINCTRL_PIN(1, "EMMC_DATA0"),
	PINCTRL_PIN(2, "EMMC_DATA1"),
	PINCTRL_PIN(3, "EMMC_DATA2"),
	PINCTRL_PIN(4, "EMMC_DATA3"),
	PINCTRL_PIN(5, "EMMC_DATA4"),
	PINCTRL_PIN(6, "EMMC_DATA5"),
	PINCTRL_PIN(7, "EMMC_DATA6"),
	PINCTRL_PIN(8, "EMMC_DATA7"),
	PINCTRL_PIN(9, "EMMC_RCLK"),
	PINCTRL_PIN(10, "EMMC_CLK"),
	PINCTRL_PIN(11, "EMMC_RESETB"),
	PINCTRL_PIN(12, "OSE_TGPIO0"),
	PINCTRL_PIN(13, "OSE_TGPIO1"),
	PINCTRL_PIN(14, "OSE_TGPIO2"),
	PINCTRL_PIN(15, "OSE_TGPIO3"),
	/* GPP_H */
	PINCTRL_PIN(16, "RGMII1_INT"),
	PINCTRL_PIN(17, "RGMII1_RESETB"),
	PINCTRL_PIN(18, "RGMII1_AUXTS"),
	PINCTRL_PIN(19, "RGMII1_PPS"),
	PINCTRL_PIN(20, "I2C2_SDA"),
	PINCTRL_PIN(21, "I2C2_SCL"),
	PINCTRL_PIN(22, "I2C3_SDA"),
	PINCTRL_PIN(23, "I2C3_SCL"),
	PINCTRL_PIN(24, "I2C4_SDA"),
	PINCTRL_PIN(25, "I2C4_SCL"),
	PINCTRL_PIN(26, "SRCCLKREQB_4"),
	PINCTRL_PIN(27, "SRCCLKREQB_5"),
	PINCTRL_PIN(28, "OSE_UART1_RXD"),
	PINCTRL_PIN(29, "OSE_UART1_TXD"),
	PINCTRL_PIN(30, "GPPC_H_14"),
	PINCTRL_PIN(31, "OSE_UART1_CTSB"),
	PINCTRL_PIN(32, "PCIE_LNK_DOWN"),
	PINCTRL_PIN(33, "SD_PWR_EN_B"),
	PINCTRL_PIN(34, "CPU_C10_GATEB"),
	PINCTRL_PIN(35, "GPPC_H_19"),
	PINCTRL_PIN(36, "OSE_PWM7"),
	PINCTRL_PIN(37, "OSE_HSUART1_DE"),
	PINCTRL_PIN(38, "OSE_HSUART1_RE"),
	PINCTRL_PIN(39, "OSE_HSUART1_EN"),
	/* GPP_D */
	PINCTRL_PIN(40, "OSE_QEPA_0"),
	PINCTRL_PIN(41, "OSE_QEPB_0"),
	PINCTRL_PIN(42, "OSE_QEPI_0"),
	PINCTRL_PIN(43, "OSE_PWM6"),
	PINCTRL_PIN(44, "OSE_PWM2"),
	PINCTRL_PIN(45, "SRCCLKREQB_0"),
	PINCTRL_PIN(46, "SRCCLKREQB_1"),
	PINCTRL_PIN(47, "SRCCLKREQB_2"),
	PINCTRL_PIN(48, "SRCCLKREQB_3"),
	PINCTRL_PIN(49, "OSE_SPI0_CSB"),
	PINCTRL_PIN(50, "OSE_SPI0_SCLK"),
	PINCTRL_PIN(51, "OSE_SPI0_MISO"),
	PINCTRL_PIN(52, "OSE_SPI0_MOSI"),
	PINCTRL_PIN(53, "OSE_QEPA_1"),
	PINCTRL_PIN(54, "OSE_QEPB_1"),
	PINCTRL_PIN(55, "OSE_PWM3"),
	PINCTRL_PIN(56, "OSE_QEPI_1"),
	PINCTRL_PIN(57, "OSE_PWM4"),
	PINCTRL_PIN(58, "OSE_PWM5"),
	PINCTRL_PIN(59, "I2S_MCLK1_OUT"),
	PINCTRL_PIN(60, "GSPI2_CLK_LOOPBK"),
	/* GPP_U */
	PINCTRL_PIN(61, "RGMII2_INT"),
	PINCTRL_PIN(62, "RGMII2_RESETB"),
	PINCTRL_PIN(63, "RGMII2_PPS"),
	PINCTRL_PIN(64, "RGMII2_AUXTS"),
	PINCTRL_PIN(65, "ISI_SPIM_CS"),
	PINCTRL_PIN(66, "ISI_SPIM_SCLK"),
	PINCTRL_PIN(67, "ISI_SPIM_MISO"),
	PINCTRL_PIN(68, "OSE_QEPA_3"),
	PINCTRL_PIN(69, "ISI_SPIS_CS"),
	PINCTRL_PIN(70, "ISI_SPIS_SCLK"),
	PINCTRL_PIN(71, "ISI_SPIS_MISO"),
	PINCTRL_PIN(72, "OSE_QEPB_3"),
	PINCTRL_PIN(73, "ISI_CHX_OKNOK_0"),
	PINCTRL_PIN(74, "ISI_CHX_OKNOK_1"),
	PINCTRL_PIN(75, "ISI_CHX_RLY_SWTCH"),
	PINCTRL_PIN(76, "ISI_CHX_PMIC_EN"),
	PINCTRL_PIN(77, "ISI_OKNOK_0"),
	PINCTRL_PIN(78, "ISI_OKNOK_1"),
	PINCTRL_PIN(79, "ISI_ALERT"),
	PINCTRL_PIN(80, "OSE_QEPI_3"),
	PINCTRL_PIN(81, "GSPI3_CLK_LOOPBK"),
	PINCTRL_PIN(82, "GSPI4_CLK_LOOPBK"),
	PINCTRL_PIN(83, "GSPI5_CLK_LOOPBK"),
	PINCTRL_PIN(84, "GSPI6_CLK_LOOPBK"),
	/* vGPIO */
	PINCTRL_PIN(85, "CNV_BTEN"),
	PINCTRL_PIN(86, "CNV_BT_HOST_WAKEB"),
	PINCTRL_PIN(87, "CNV_BT_IF_SELECT"),
	PINCTRL_PIN(88, "vCNV_BT_UART_TXD"),
	PINCTRL_PIN(89, "vCNV_BT_UART_RXD"),
	PINCTRL_PIN(90, "vCNV_BT_UART_CTS_B"),
	PINCTRL_PIN(91, "vCNV_BT_UART_RTS_B"),
	PINCTRL_PIN(92, "vCNV_MFUART1_TXD"),
	PINCTRL_PIN(93, "vCNV_MFUART1_RXD"),
	PINCTRL_PIN(94, "vCNV_MFUART1_CTS_B"),
	PINCTRL_PIN(95, "vCNV_MFUART1_RTS_B"),
	PINCTRL_PIN(96, "vUART0_TXD"),
	PINCTRL_PIN(97, "vUART0_RXD"),
	PINCTRL_PIN(98, "vUART0_CTS_B"),
	PINCTRL_PIN(99, "vUART0_RTS_B"),
	PINCTRL_PIN(100, "vOSE_UART0_TXD"),
	PINCTRL_PIN(101, "vOSE_UART0_RXD"),
	PINCTRL_PIN(102, "vOSE_UART0_CTS_B"),
	PINCTRL_PIN(103, "vOSE_UART0_RTS_B"),
	PINCTRL_PIN(104, "vCNV_BT_I2S_BCLK"),
	PINCTRL_PIN(105, "vCNV_BT_I2S_WS_SYNC"),
	PINCTRL_PIN(106, "vCNV_BT_I2S_SDO"),
	PINCTRL_PIN(107, "vCNV_BT_I2S_SDI"),
	PINCTRL_PIN(108, "vI2S2_SCLK"),
	PINCTRL_PIN(109, "vI2S2_SFRM"),
	PINCTRL_PIN(110, "vI2S2_TXD"),
	PINCTRL_PIN(111, "vI2S2_RXD"),
	PINCTRL_PIN(112, "vSD3_CD_B"),
};

static const struct intel_padgroup ehl_community1_gpps[] = {
	INTEL_GPP(0, 0, 15, 0),		/* GPP_V */
	INTEL_GPP(1, 16, 39, 16),	/* GPP_H */
	INTEL_GPP(2, 40, 60, 40),	/* GPP_D */
	INTEL_GPP(3, 61, 84, 61),	/* GPP_U */
	INTEL_GPP(4, 85, 112, 85),	/* vGPIO */
};

static const struct intel_community ehl_community1[] = {
	EHL_COMMUNITY(0, 0, 112, ehl_community1_gpps),
};

static const struct intel_pinctrl_soc_data ehl_community1_soc_data = {
	.uid = "1",
	.pins = ehl_community1_pins,
	.npins = ARRAY_SIZE(ehl_community1_pins),
	.communities = ehl_community1,
	.ncommunities = ARRAY_SIZE(ehl_community1),
};

static const struct pinctrl_pin_desc ehl_community2_pins[] = {
	/* DSW */
	PINCTRL_PIN(0, "BATLOWB"),
	PINCTRL_PIN(1, "ACPRESENT"),
	PINCTRL_PIN(2, "LAN_WAKEB"),
	PINCTRL_PIN(3, "PWRBTNB"),
	PINCTRL_PIN(4, "SLP_S3B"),
	PINCTRL_PIN(5, "SLP_S4B"),
	PINCTRL_PIN(6, "SLP_AB"),
	PINCTRL_PIN(7, "GPD_7"),
	PINCTRL_PIN(8, "SUSCLK"),
	PINCTRL_PIN(9, "SLP_WLANB"),
	PINCTRL_PIN(10, "SLP_S5B"),
	PINCTRL_PIN(11, "LANPHYPC"),
	PINCTRL_PIN(12, "INPUT3VSEL"),
	PINCTRL_PIN(13, "SLP_LANB"),
	PINCTRL_PIN(14, "SLP_SUSB"),
	PINCTRL_PIN(15, "WAKEB"),
	PINCTRL_PIN(16, "DRAM_RESETB"),
};

static const struct intel_padgroup ehl_community2_gpps[] = {
	INTEL_GPP(0, 0, 16, 0),		/* DSW */
};

static const struct intel_community ehl_community2[] = {
	EHL_COMMUNITY(0, 0, 16, ehl_community2_gpps),
};

static const struct intel_pinctrl_soc_data ehl_community2_soc_data = {
	.uid = "2",
	.pins = ehl_community2_pins,
	.npins = ARRAY_SIZE(ehl_community2_pins),
	.communities = ehl_community2,
	.ncommunities = ARRAY_SIZE(ehl_community2),
};

static const struct pinctrl_pin_desc ehl_community3_pins[] = {
	/* CPU */
	PINCTRL_PIN(0, "HDACPU_SDI"),
	PINCTRL_PIN(1, "HDACPU_SDO"),
	PINCTRL_PIN(2, "HDACPU_BCLK"),
	PINCTRL_PIN(3, "PM_SYNC"),
	PINCTRL_PIN(4, "PECI"),
	PINCTRL_PIN(5, "CPUPWRGD"),
	PINCTRL_PIN(6, "THRMTRIPB"),
	PINCTRL_PIN(7, "PLTRST_CPUB"),
	PINCTRL_PIN(8, "PM_DOWN"),
	PINCTRL_PIN(9, "TRIGGER_IN"),
	PINCTRL_PIN(10, "TRIGGER_OUT"),
	PINCTRL_PIN(11, "UFS_RESETB"),
	PINCTRL_PIN(12, "CLKOUT_CPURTC"),
	PINCTRL_PIN(13, "VCCST_OVERRIDE"),
	PINCTRL_PIN(14, "C10_WAKE"),
	PINCTRL_PIN(15, "PROCHOTB"),
	PINCTRL_PIN(16, "CATERRB"),
	/* GPP_S */
	PINCTRL_PIN(17, "UFS_REF_CLK_0"),
	PINCTRL_PIN(18, "UFS_REF_CLK_1"),
	/* GPP_A */
	PINCTRL_PIN(19, "RGMII0_TXDATA_3"),
	PINCTRL_PIN(20, "RGMII0_TXDATA_2"),
	PINCTRL_PIN(21, "RGMII0_TXDATA_1"),
	PINCTRL_PIN(22, "RGMII0_TXDATA_0"),
	PINCTRL_PIN(23, "RGMII0_TXCLK"),
	PINCTRL_PIN(24, "RGMII0_TXCTL"),
	PINCTRL_PIN(25, "RGMII0_RXCLK"),
	PINCTRL_PIN(26, "RGMII0_RXDATA_3"),
	PINCTRL_PIN(27, "RGMII0_RXDATA_2"),
	PINCTRL_PIN(28, "RGMII0_RXDATA_1"),
	PINCTRL_PIN(29, "RGMII0_RXDATA_0"),
	PINCTRL_PIN(30, "RGMII1_TXDATA_3"),
	PINCTRL_PIN(31, "RGMII1_TXDATA_2"),
	PINCTRL_PIN(32, "RGMII1_TXDATA_1"),
	PINCTRL_PIN(33, "RGMII1_TXDATA_0"),
	PINCTRL_PIN(34, "RGMII1_TXCLK"),
	PINCTRL_PIN(35, "RGMII1_TXCTL"),
	PINCTRL_PIN(36, "RGMII1_RXCLK"),
	PINCTRL_PIN(37, "RGMII1_RXCTL"),
	PINCTRL_PIN(38, "RGMII1_RXDATA_3"),
	PINCTRL_PIN(39, "RGMII1_RXDATA_2"),
	PINCTRL_PIN(40, "RGMII1_RXDATA_1"),
	PINCTRL_PIN(41, "RGMII1_RXDATA_0"),
	PINCTRL_PIN(42, "RGMII0_RXCTL"),
	/* vGPIO_3 */
	PINCTRL_PIN(43, "ESPI_USB_OCB_0"),
	PINCTRL_PIN(44, "ESPI_USB_OCB_1"),
	PINCTRL_PIN(45, "ESPI_USB_OCB_2"),
	PINCTRL_PIN(46, "ESPI_USB_OCB_3"),
};

static const struct intel_padgroup ehl_community3_gpps[] = {
	INTEL_GPP(0, 0, 16,  0),	/* CPU */
	INTEL_GPP(1, 17, 18, 17),	/* GPP_S */
	INTEL_GPP(2, 19, 42, 19),	/* GPP_A */
	INTEL_GPP(3, 43, 46, 43),	/* vGPIO_3 */
};

static const struct intel_community ehl_community3[] = {
	EHL_COMMUNITY(0, 0, 46, ehl_community3_gpps),
};

static const struct intel_pinctrl_soc_data ehl_community3_soc_data = {
	.uid = "3",
	.pins = ehl_community3_pins,
	.npins = ARRAY_SIZE(ehl_community3_pins),
	.communities = ehl_community3,
	.ncommunities = ARRAY_SIZE(ehl_community3),
};

static const struct pinctrl_pin_desc ehl_community4_pins[] = {
	/* GPP_C */
	PINCTRL_PIN(0, "SMBCLK"),
	PINCTRL_PIN(1, "SMBDATA"),
	PINCTRL_PIN(2, "OSE_PWM0"),
	PINCTRL_PIN(3, "RGMII0_MDC"),
	PINCTRL_PIN(4, "RGMII0_MDIO"),
	PINCTRL_PIN(5, "OSE_PWM1"),
	PINCTRL_PIN(6, "RGMII1_MDC"),
	PINCTRL_PIN(7, "RGMII1_MDIO"),
	PINCTRL_PIN(8, "OSE_TGPIO4"),
	PINCTRL_PIN(9, "OSE_HSUART0_EN"),
	PINCTRL_PIN(10, "OSE_TGPIO5"),
	PINCTRL_PIN(11, "OSE_HSUART0_RE"),
	PINCTRL_PIN(12, "OSE_UART0_RXD"),
	PINCTRL_PIN(13, "OSE_UART0_TXD"),
	PINCTRL_PIN(14, "OSE_UART0_RTSB"),
	PINCTRL_PIN(15, "OSE_UART0_CTSB"),
	PINCTRL_PIN(16, "RGMII2_MDIO"),
	PINCTRL_PIN(17, "RGMII2_MDC"),
	PINCTRL_PIN(18, "OSE_I2C4_SDAT"),
	PINCTRL_PIN(19, "OSE_I2C4_SCLK"),
	PINCTRL_PIN(20, "OSE_UART4_RXD"),
	PINCTRL_PIN(21, "OSE_UART4_TXD"),
	PINCTRL_PIN(22, "OSE_UART4_RTSB"),
	PINCTRL_PIN(23, "OSE_UART4_CTSB"),
	/* GPP_F */
	PINCTRL_PIN(24, "CNV_BRI_DT"),
	PINCTRL_PIN(25, "CNV_BRI_RSP"),
	PINCTRL_PIN(26, "CNV_RGI_DT"),
	PINCTRL_PIN(27, "CNV_RGI_RSP"),
	PINCTRL_PIN(28, "CNV_RF_RESET_B"),
	PINCTRL_PIN(29, "EMMC_HIP_MON"),
	PINCTRL_PIN(30, "CNV_PA_BLANKING"),
	PINCTRL_PIN(31, "OSE_I2S1_SCLK"),
	PINCTRL_PIN(32, "I2S_MCLK2_INOUT"),
	PINCTRL_PIN(33, "BOOTMPC"),
	PINCTRL_PIN(34, "OSE_I2S1_SFRM"),
	PINCTRL_PIN(35, "GPPC_F_11"),
	PINCTRL_PIN(36, "GSXDOUT"),
	PINCTRL_PIN(37, "GSXSLOAD"),
	PINCTRL_PIN(38, "GSXDIN"),
	PINCTRL_PIN(39, "GSXSRESETB"),
	PINCTRL_PIN(40, "GSXCLK"),
	PINCTRL_PIN(41, "GPPC_F_17"),
	PINCTRL_PIN(42, "OSE_I2S1_TXD"),
	PINCTRL_PIN(43, "OSE_I2S1_RXD"),
	PINCTRL_PIN(44, "EXT_PWR_GATEB"),
	PINCTRL_PIN(45, "EXT_PWR_GATE2B"),
	PINCTRL_PIN(46, "VNN_CTRL"),
	PINCTRL_PIN(47, "V1P05_CTRL"),
	PINCTRL_PIN(48, "GPPF_CLK_LOOPBACK"),
	/* HVCMOS */
	PINCTRL_PIN(49, "L_BKLTEN"),
	PINCTRL_PIN(50, "L_BKLTCTL"),
	PINCTRL_PIN(51, "L_VDDEN"),
	PINCTRL_PIN(52, "SYS_PWROK"),
	PINCTRL_PIN(53, "SYS_RESETB"),
	PINCTRL_PIN(54, "MLK_RSTB"),
	/* GPP_E */
	PINCTRL_PIN(55, "SATA_LEDB"),
	PINCTRL_PIN(56, "GPPC_E_1"),
	PINCTRL_PIN(57, "GPPC_E_2"),
	PINCTRL_PIN(58, "DDSP_HPD_B"),
	PINCTRL_PIN(59, "SATA_DEVSLP_0"),
	PINCTRL_PIN(60, "DDPB_CTRLDATA"),
	PINCTRL_PIN(61, "GPPC_E_6"),
	PINCTRL_PIN(62, "DDPB_CTRLCLK"),
	PINCTRL_PIN(63, "GPPC_E_8"),
	PINCTRL_PIN(64, "USB2_OCB_0"),
	PINCTRL_PIN(65, "GPPC_E_10"),
	PINCTRL_PIN(66, "GPPC_E_11"),
	PINCTRL_PIN(67, "GPPC_E_12"),
	PINCTRL_PIN(68, "GPPC_E_13"),
	PINCTRL_PIN(69, "DDSP_HPD_A"),
	PINCTRL_PIN(70, "OSE_I2S0_RXD"),
	PINCTRL_PIN(71, "OSE_I2S0_TXD"),
	PINCTRL_PIN(72, "DDSP_HPD_C"),
	PINCTRL_PIN(73, "DDPA_CTRLDATA"),
	PINCTRL_PIN(74, "DDPA_CTRLCLK"),
	PINCTRL_PIN(75, "OSE_I2S0_SCLK"),
	PINCTRL_PIN(76, "OSE_I2S0_SFRM"),
	PINCTRL_PIN(77, "DDPC_CTRLDATA"),
	PINCTRL_PIN(78, "DDPC_CTRLCLK"),
	PINCTRL_PIN(79, "SPI1_CLK_LOOPBK"),
};

static const struct intel_padgroup ehl_community4_gpps[] = {
	INTEL_GPP(0, 0, 23, 0),		/* GPP_C */
	INTEL_GPP(1, 24, 48, 24),	/* GPP_F */
	INTEL_GPP(2, 49, 54, 49),	/* HVCMOS */
	INTEL_GPP(3, 55, 79, 55),	/* GPP_E */
};

static const struct intel_community ehl_community4[] = {
	EHL_COMMUNITY(0, 0, 79, ehl_community4_gpps),
};

static const struct intel_pinctrl_soc_data ehl_community4_soc_data = {
	.uid = "4",
	.pins = ehl_community4_pins,
	.npins = ARRAY_SIZE(ehl_community4_pins),
	.communities = ehl_community4,
	.ncommunities = ARRAY_SIZE(ehl_community4),
};

static const struct pinctrl_pin_desc ehl_community5_pins[] = {
	/* GPP_R */
	PINCTRL_PIN(0, "HDA_BCLK"),
	PINCTRL_PIN(1, "HDA_SYNC"),
	PINCTRL_PIN(2, "HDA_SDO"),
	PINCTRL_PIN(3, "HDA_SDI_0"),
	PINCTRL_PIN(4, "HDA_RSTB"),
	PINCTRL_PIN(5, "HDA_SDI_1"),
	PINCTRL_PIN(6, "GPP_R_6"),
	PINCTRL_PIN(7, "GPP_R_7"),
};

static const struct intel_padgroup ehl_community5_gpps[] = {
	INTEL_GPP(0, 0, 7, 0),		/* GPP_R */
};

static const struct intel_community ehl_community5[] = {
	EHL_COMMUNITY(0, 0, 7, ehl_community5_gpps),
};

static const struct intel_pinctrl_soc_data ehl_community5_soc_data = {
	.uid = "5",
	.pins = ehl_community5_pins,
	.npins = ARRAY_SIZE(ehl_community5_pins),
	.communities = ehl_community5,
	.ncommunities = ARRAY_SIZE(ehl_community5),
};

static const struct intel_pinctrl_soc_data *ehl_soc_data_array[] = {
	&ehl_community0_soc_data,
	&ehl_community1_soc_data,
	&ehl_community2_soc_data,
	&ehl_community3_soc_data,
	&ehl_community4_soc_data,
	&ehl_community5_soc_data,
	NULL
};

static const struct acpi_device_id ehl_pinctrl_acpi_match[] = {
	{ "INTC1020", (kernel_ulong_t)ehl_soc_data_array },
	{ }
};
MODULE_DEVICE_TABLE(acpi, ehl_pinctrl_acpi_match);

static struct platform_driver ehl_pinctrl_driver = {
	.probe = intel_pinctrl_probe_by_uid,
	.driver = {
		.name = "elkhartlake-pinctrl",
		.acpi_match_table = ehl_pinctrl_acpi_match,
		.pm = pm_sleep_ptr(&intel_pinctrl_pm_ops),
	},
};
module_platform_driver(ehl_pinctrl_driver);

MODULE_AUTHOR("Andy Shevchenko <andriy.shevchenko@linux.intel.com>");
MODULE_DESCRIPTION("Intel Elkhart Lake PCH pinctrl/GPIO driver");
MODULE_LICENSE("GPL v2");
MODULE_IMPORT_NS("PINCTRL_INTEL");
