1*c969afb4SAndy Shevchenko // SPDX-License-Identifier: GPL-2.0 2*c969afb4SAndy Shevchenko /* 3*c969afb4SAndy Shevchenko * Intel Elkhart Lake PCH pinctrl/GPIO driver 4*c969afb4SAndy Shevchenko * 5*c969afb4SAndy Shevchenko * Copyright (C) 2019, Intel Corporation 6*c969afb4SAndy Shevchenko * Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com> 7*c969afb4SAndy Shevchenko */ 8*c969afb4SAndy Shevchenko 9*c969afb4SAndy Shevchenko #include <linux/mod_devicetable.h> 10*c969afb4SAndy Shevchenko #include <linux/module.h> 11*c969afb4SAndy Shevchenko #include <linux/platform_device.h> 12*c969afb4SAndy Shevchenko 13*c969afb4SAndy Shevchenko #include <linux/pinctrl/pinctrl.h> 14*c969afb4SAndy Shevchenko 15*c969afb4SAndy Shevchenko #include "pinctrl-intel.h" 16*c969afb4SAndy Shevchenko 17*c969afb4SAndy Shevchenko #define EHL_PAD_OWN 0x020 18*c969afb4SAndy Shevchenko #define EHL_PADCFGLOCK 0x080 19*c969afb4SAndy Shevchenko #define EHL_HOSTSW_OWN 0x0b0 20*c969afb4SAndy Shevchenko #define EHL_GPI_IS 0x100 21*c969afb4SAndy Shevchenko #define EHL_GPI_IE 0x120 22*c969afb4SAndy Shevchenko 23*c969afb4SAndy Shevchenko #define EHL_GPP(r, s, e) \ 24*c969afb4SAndy Shevchenko { \ 25*c969afb4SAndy Shevchenko .reg_num = (r), \ 26*c969afb4SAndy Shevchenko .base = (s), \ 27*c969afb4SAndy Shevchenko .size = ((e) - (s) + 1), \ 28*c969afb4SAndy Shevchenko } 29*c969afb4SAndy Shevchenko 30*c969afb4SAndy Shevchenko #define EHL_COMMUNITY(s, e, g) \ 31*c969afb4SAndy Shevchenko { \ 32*c969afb4SAndy Shevchenko .padown_offset = EHL_PAD_OWN, \ 33*c969afb4SAndy Shevchenko .padcfglock_offset = EHL_PADCFGLOCK, \ 34*c969afb4SAndy Shevchenko .hostown_offset = EHL_HOSTSW_OWN, \ 35*c969afb4SAndy Shevchenko .is_offset = EHL_GPI_IS, \ 36*c969afb4SAndy Shevchenko .ie_offset = EHL_GPI_IE, \ 37*c969afb4SAndy Shevchenko .pin_base = (s), \ 38*c969afb4SAndy Shevchenko .npins = ((e) - (s) + 1), \ 39*c969afb4SAndy Shevchenko .gpps = (g), \ 40*c969afb4SAndy Shevchenko .ngpps = ARRAY_SIZE(g), \ 41*c969afb4SAndy Shevchenko } 42*c969afb4SAndy Shevchenko 43*c969afb4SAndy Shevchenko /* Elkhart Lake */ 44*c969afb4SAndy Shevchenko static const struct pinctrl_pin_desc ehl_community0_pins[] = { 45*c969afb4SAndy Shevchenko /* GPP_B */ 46*c969afb4SAndy Shevchenko PINCTRL_PIN(0, "CORE_VID_0"), 47*c969afb4SAndy Shevchenko PINCTRL_PIN(1, "CORE_VID_1"), 48*c969afb4SAndy Shevchenko PINCTRL_PIN(2, "VRALERTB"), 49*c969afb4SAndy Shevchenko PINCTRL_PIN(3, "CPU_GP_2"), 50*c969afb4SAndy Shevchenko PINCTRL_PIN(4, "CPU_GP_3"), 51*c969afb4SAndy Shevchenko PINCTRL_PIN(5, "OSE_I2C0_SCLK"), 52*c969afb4SAndy Shevchenko PINCTRL_PIN(6, "OSE_I2C0_SDAT"), 53*c969afb4SAndy Shevchenko PINCTRL_PIN(7, "OSE_I2C1_SCLK"), 54*c969afb4SAndy Shevchenko PINCTRL_PIN(8, "OSE_I2C1_SDAT"), 55*c969afb4SAndy Shevchenko PINCTRL_PIN(9, "I2C5_SDA"), 56*c969afb4SAndy Shevchenko PINCTRL_PIN(10, "I2C5_SCL"), 57*c969afb4SAndy Shevchenko PINCTRL_PIN(11, "PMCALERTB"), 58*c969afb4SAndy Shevchenko PINCTRL_PIN(12, "SLP_S0B"), 59*c969afb4SAndy Shevchenko PINCTRL_PIN(13, "PLTRSTB"), 60*c969afb4SAndy Shevchenko PINCTRL_PIN(14, "SPKR"), 61*c969afb4SAndy Shevchenko PINCTRL_PIN(15, "GSPI0_CS0B"), 62*c969afb4SAndy Shevchenko PINCTRL_PIN(16, "GSPI0_CLK"), 63*c969afb4SAndy Shevchenko PINCTRL_PIN(17, "GSPI0_MISO"), 64*c969afb4SAndy Shevchenko PINCTRL_PIN(18, "GSPI0_MOSI"), 65*c969afb4SAndy Shevchenko PINCTRL_PIN(19, "GSPI1_CS0B"), 66*c969afb4SAndy Shevchenko PINCTRL_PIN(20, "GSPI1_CLK"), 67*c969afb4SAndy Shevchenko PINCTRL_PIN(21, "GSPI1_MISO"), 68*c969afb4SAndy Shevchenko PINCTRL_PIN(22, "GSPI1_MOSI"), 69*c969afb4SAndy Shevchenko PINCTRL_PIN(23, "GPPC_B_23"), 70*c969afb4SAndy Shevchenko PINCTRL_PIN(24, "GSPI0_CLK_LOOPBK"), 71*c969afb4SAndy Shevchenko PINCTRL_PIN(25, "GSPI1_CLK_LOOPBK"), 72*c969afb4SAndy Shevchenko /* GPP_T */ 73*c969afb4SAndy Shevchenko PINCTRL_PIN(26, "OSE_QEPA_2"), 74*c969afb4SAndy Shevchenko PINCTRL_PIN(27, "OSE_QEPB_2"), 75*c969afb4SAndy Shevchenko PINCTRL_PIN(28, "OSE_QEPI_2"), 76*c969afb4SAndy Shevchenko PINCTRL_PIN(29, "GPPC_T_3"), 77*c969afb4SAndy Shevchenko PINCTRL_PIN(30, "RGMII0_INT"), 78*c969afb4SAndy Shevchenko PINCTRL_PIN(31, "RGMII0_RESETB"), 79*c969afb4SAndy Shevchenko PINCTRL_PIN(32, "RGMII0_AUXTS"), 80*c969afb4SAndy Shevchenko PINCTRL_PIN(33, "RGMII0_PPS"), 81*c969afb4SAndy Shevchenko PINCTRL_PIN(34, "USB2_OCB_2"), 82*c969afb4SAndy Shevchenko PINCTRL_PIN(35, "OSE_HSUART2_EN"), 83*c969afb4SAndy Shevchenko PINCTRL_PIN(36, "OSE_HSUART2_RE"), 84*c969afb4SAndy Shevchenko PINCTRL_PIN(37, "USB2_OCB_3"), 85*c969afb4SAndy Shevchenko PINCTRL_PIN(38, "OSE_UART2_RXD"), 86*c969afb4SAndy Shevchenko PINCTRL_PIN(39, "OSE_UART2_TXD"), 87*c969afb4SAndy Shevchenko PINCTRL_PIN(40, "OSE_UART2_RTSB"), 88*c969afb4SAndy Shevchenko PINCTRL_PIN(41, "OSE_UART2_CTSB"), 89*c969afb4SAndy Shevchenko /* GPP_G */ 90*c969afb4SAndy Shevchenko PINCTRL_PIN(42, "SD3_CMD"), 91*c969afb4SAndy Shevchenko PINCTRL_PIN(43, "SD3_D0"), 92*c969afb4SAndy Shevchenko PINCTRL_PIN(44, "SD3_D1"), 93*c969afb4SAndy Shevchenko PINCTRL_PIN(45, "SD3_D2"), 94*c969afb4SAndy Shevchenko PINCTRL_PIN(46, "SD3_D3"), 95*c969afb4SAndy Shevchenko PINCTRL_PIN(47, "SD3_CDB"), 96*c969afb4SAndy Shevchenko PINCTRL_PIN(48, "SD3_CLK"), 97*c969afb4SAndy Shevchenko PINCTRL_PIN(49, "I2S2_SCLK"), 98*c969afb4SAndy Shevchenko PINCTRL_PIN(50, "I2S2_SFRM"), 99*c969afb4SAndy Shevchenko PINCTRL_PIN(51, "I2S2_TXD"), 100*c969afb4SAndy Shevchenko PINCTRL_PIN(52, "I2S2_RXD"), 101*c969afb4SAndy Shevchenko PINCTRL_PIN(53, "I2S3_SCLK"), 102*c969afb4SAndy Shevchenko PINCTRL_PIN(54, "I2S3_SFRM"), 103*c969afb4SAndy Shevchenko PINCTRL_PIN(55, "I2S3_TXD"), 104*c969afb4SAndy Shevchenko PINCTRL_PIN(56, "I2S3_RXD"), 105*c969afb4SAndy Shevchenko PINCTRL_PIN(57, "ESPI_IO_0"), 106*c969afb4SAndy Shevchenko PINCTRL_PIN(58, "ESPI_IO_1"), 107*c969afb4SAndy Shevchenko PINCTRL_PIN(59, "ESPI_IO_2"), 108*c969afb4SAndy Shevchenko PINCTRL_PIN(60, "ESPI_IO_3"), 109*c969afb4SAndy Shevchenko PINCTRL_PIN(61, "I2S1_SCLK"), 110*c969afb4SAndy Shevchenko PINCTRL_PIN(62, "ESPI_CSB"), 111*c969afb4SAndy Shevchenko PINCTRL_PIN(63, "ESPI_CLK"), 112*c969afb4SAndy Shevchenko PINCTRL_PIN(64, "ESPI_RESETB"), 113*c969afb4SAndy Shevchenko PINCTRL_PIN(65, "SD3_WP"), 114*c969afb4SAndy Shevchenko PINCTRL_PIN(66, "ESPI_CLK_LOOPBK"), 115*c969afb4SAndy Shevchenko }; 116*c969afb4SAndy Shevchenko 117*c969afb4SAndy Shevchenko static const struct intel_padgroup ehl_community0_gpps[] = { 118*c969afb4SAndy Shevchenko EHL_GPP(0, 0, 25), /* GPP_B */ 119*c969afb4SAndy Shevchenko EHL_GPP(1, 26, 41), /* GPP_T */ 120*c969afb4SAndy Shevchenko EHL_GPP(2, 42, 66), /* GPP_G */ 121*c969afb4SAndy Shevchenko }; 122*c969afb4SAndy Shevchenko 123*c969afb4SAndy Shevchenko static const struct intel_community ehl_community0[] = { 124*c969afb4SAndy Shevchenko EHL_COMMUNITY(0, 66, ehl_community0_gpps), 125*c969afb4SAndy Shevchenko }; 126*c969afb4SAndy Shevchenko 127*c969afb4SAndy Shevchenko static const struct intel_pinctrl_soc_data ehl_community0_soc_data = { 128*c969afb4SAndy Shevchenko .uid = "0", 129*c969afb4SAndy Shevchenko .pins = ehl_community0_pins, 130*c969afb4SAndy Shevchenko .npins = ARRAY_SIZE(ehl_community0_pins), 131*c969afb4SAndy Shevchenko .communities = ehl_community0, 132*c969afb4SAndy Shevchenko .ncommunities = ARRAY_SIZE(ehl_community0), 133*c969afb4SAndy Shevchenko }; 134*c969afb4SAndy Shevchenko 135*c969afb4SAndy Shevchenko static const struct pinctrl_pin_desc ehl_community1_pins[] = { 136*c969afb4SAndy Shevchenko /* GPP_V */ 137*c969afb4SAndy Shevchenko PINCTRL_PIN(0, "EMMC_CMD"), 138*c969afb4SAndy Shevchenko PINCTRL_PIN(1, "EMMC_DATA0"), 139*c969afb4SAndy Shevchenko PINCTRL_PIN(2, "EMMC_DATA1"), 140*c969afb4SAndy Shevchenko PINCTRL_PIN(3, "EMMC_DATA2"), 141*c969afb4SAndy Shevchenko PINCTRL_PIN(4, "EMMC_DATA3"), 142*c969afb4SAndy Shevchenko PINCTRL_PIN(5, "EMMC_DATA4"), 143*c969afb4SAndy Shevchenko PINCTRL_PIN(6, "EMMC_DATA5"), 144*c969afb4SAndy Shevchenko PINCTRL_PIN(7, "EMMC_DATA6"), 145*c969afb4SAndy Shevchenko PINCTRL_PIN(8, "EMMC_DATA7"), 146*c969afb4SAndy Shevchenko PINCTRL_PIN(9, "EMMC_RCLK"), 147*c969afb4SAndy Shevchenko PINCTRL_PIN(10, "EMMC_CLK"), 148*c969afb4SAndy Shevchenko PINCTRL_PIN(11, "EMMC_RESETB"), 149*c969afb4SAndy Shevchenko PINCTRL_PIN(12, "OSE_TGPIO0"), 150*c969afb4SAndy Shevchenko PINCTRL_PIN(13, "OSE_TGPIO1"), 151*c969afb4SAndy Shevchenko PINCTRL_PIN(14, "OSE_TGPIO2"), 152*c969afb4SAndy Shevchenko PINCTRL_PIN(15, "OSE_TGPIO3"), 153*c969afb4SAndy Shevchenko /* GPP_H */ 154*c969afb4SAndy Shevchenko PINCTRL_PIN(16, "RGMII1_INT"), 155*c969afb4SAndy Shevchenko PINCTRL_PIN(17, "RGMII1_RESETB"), 156*c969afb4SAndy Shevchenko PINCTRL_PIN(18, "RGMII1_AUXTS"), 157*c969afb4SAndy Shevchenko PINCTRL_PIN(19, "RGMII1_PPS"), 158*c969afb4SAndy Shevchenko PINCTRL_PIN(20, "I2C2_SDA"), 159*c969afb4SAndy Shevchenko PINCTRL_PIN(21, "I2C2_SCL"), 160*c969afb4SAndy Shevchenko PINCTRL_PIN(22, "I2C3_SDA"), 161*c969afb4SAndy Shevchenko PINCTRL_PIN(23, "I2C3_SCL"), 162*c969afb4SAndy Shevchenko PINCTRL_PIN(24, "I2C4_SDA"), 163*c969afb4SAndy Shevchenko PINCTRL_PIN(25, "I2C4_SCL"), 164*c969afb4SAndy Shevchenko PINCTRL_PIN(26, "SRCCLKREQB_4"), 165*c969afb4SAndy Shevchenko PINCTRL_PIN(27, "SRCCLKREQB_5"), 166*c969afb4SAndy Shevchenko PINCTRL_PIN(28, "OSE_UART1_RXD"), 167*c969afb4SAndy Shevchenko PINCTRL_PIN(29, "OSE_UART1_TXD"), 168*c969afb4SAndy Shevchenko PINCTRL_PIN(30, "GPPC_H_14"), 169*c969afb4SAndy Shevchenko PINCTRL_PIN(31, "OSE_UART1_CTSB"), 170*c969afb4SAndy Shevchenko PINCTRL_PIN(32, "PCIE_LNK_DOWN"), 171*c969afb4SAndy Shevchenko PINCTRL_PIN(33, "SD_PWR_EN_B"), 172*c969afb4SAndy Shevchenko PINCTRL_PIN(34, "CPU_C10_GATEB"), 173*c969afb4SAndy Shevchenko PINCTRL_PIN(35, "GPPC_H_19"), 174*c969afb4SAndy Shevchenko PINCTRL_PIN(36, "OSE_PWM7"), 175*c969afb4SAndy Shevchenko PINCTRL_PIN(37, "OSE_HSUART1_DE"), 176*c969afb4SAndy Shevchenko PINCTRL_PIN(38, "OSE_HSUART1_RE"), 177*c969afb4SAndy Shevchenko PINCTRL_PIN(39, "OSE_HSUART1_EN"), 178*c969afb4SAndy Shevchenko /* GPP_D */ 179*c969afb4SAndy Shevchenko PINCTRL_PIN(40, "OSE_QEPA_0"), 180*c969afb4SAndy Shevchenko PINCTRL_PIN(41, "OSE_QEPB_0"), 181*c969afb4SAndy Shevchenko PINCTRL_PIN(42, "OSE_QEPI_0"), 182*c969afb4SAndy Shevchenko PINCTRL_PIN(43, "OSE_PWM6"), 183*c969afb4SAndy Shevchenko PINCTRL_PIN(44, "OSE_PWM2"), 184*c969afb4SAndy Shevchenko PINCTRL_PIN(45, "SRCCLKREQB_0"), 185*c969afb4SAndy Shevchenko PINCTRL_PIN(46, "SRCCLKREQB_1"), 186*c969afb4SAndy Shevchenko PINCTRL_PIN(47, "SRCCLKREQB_2"), 187*c969afb4SAndy Shevchenko PINCTRL_PIN(48, "SRCCLKREQB_3"), 188*c969afb4SAndy Shevchenko PINCTRL_PIN(49, "OSE_SPI0_CSB"), 189*c969afb4SAndy Shevchenko PINCTRL_PIN(50, "OSE_SPI0_SCLK"), 190*c969afb4SAndy Shevchenko PINCTRL_PIN(51, "OSE_SPI0_MISO"), 191*c969afb4SAndy Shevchenko PINCTRL_PIN(52, "OSE_SPI0_MOSI"), 192*c969afb4SAndy Shevchenko PINCTRL_PIN(53, "OSE_QEPA_1"), 193*c969afb4SAndy Shevchenko PINCTRL_PIN(54, "OSE_QEPB_1"), 194*c969afb4SAndy Shevchenko PINCTRL_PIN(55, "OSE_PWM3"), 195*c969afb4SAndy Shevchenko PINCTRL_PIN(56, "OSE_QEPI_1"), 196*c969afb4SAndy Shevchenko PINCTRL_PIN(57, "OSE_PWM4"), 197*c969afb4SAndy Shevchenko PINCTRL_PIN(58, "OSE_PWM5"), 198*c969afb4SAndy Shevchenko PINCTRL_PIN(59, "I2S_MCLK1_OUT"), 199*c969afb4SAndy Shevchenko PINCTRL_PIN(60, "GSPI2_CLK_LOOPBK"), 200*c969afb4SAndy Shevchenko /* GPP_U */ 201*c969afb4SAndy Shevchenko PINCTRL_PIN(61, "RGMII2_INT"), 202*c969afb4SAndy Shevchenko PINCTRL_PIN(62, "RGMII2_RESETB"), 203*c969afb4SAndy Shevchenko PINCTRL_PIN(63, "RGMII2_PPS"), 204*c969afb4SAndy Shevchenko PINCTRL_PIN(64, "RGMII2_AUXTS"), 205*c969afb4SAndy Shevchenko PINCTRL_PIN(65, "ISI_SPIM_CS"), 206*c969afb4SAndy Shevchenko PINCTRL_PIN(66, "ISI_SPIM_SCLK"), 207*c969afb4SAndy Shevchenko PINCTRL_PIN(67, "ISI_SPIM_MISO"), 208*c969afb4SAndy Shevchenko PINCTRL_PIN(68, "OSE_QEPA_3"), 209*c969afb4SAndy Shevchenko PINCTRL_PIN(69, "ISI_SPIS_CS"), 210*c969afb4SAndy Shevchenko PINCTRL_PIN(70, "ISI_SPIS_SCLK"), 211*c969afb4SAndy Shevchenko PINCTRL_PIN(71, "ISI_SPIS_MISO"), 212*c969afb4SAndy Shevchenko PINCTRL_PIN(72, "OSE_QEPB_3"), 213*c969afb4SAndy Shevchenko PINCTRL_PIN(73, "ISI_CHX_OKNOK_0"), 214*c969afb4SAndy Shevchenko PINCTRL_PIN(74, "ISI_CHX_OKNOK_1"), 215*c969afb4SAndy Shevchenko PINCTRL_PIN(75, "ISI_CHX_RLY_SWTCH"), 216*c969afb4SAndy Shevchenko PINCTRL_PIN(76, "ISI_CHX_PMIC_EN"), 217*c969afb4SAndy Shevchenko PINCTRL_PIN(77, "ISI_OKNOK_0"), 218*c969afb4SAndy Shevchenko PINCTRL_PIN(78, "ISI_OKNOK_1"), 219*c969afb4SAndy Shevchenko PINCTRL_PIN(79, "ISI_ALERT"), 220*c969afb4SAndy Shevchenko PINCTRL_PIN(80, "OSE_QEPI_3"), 221*c969afb4SAndy Shevchenko PINCTRL_PIN(81, "GSPI3_CLK_LOOPBK"), 222*c969afb4SAndy Shevchenko PINCTRL_PIN(82, "GSPI4_CLK_LOOPBK"), 223*c969afb4SAndy Shevchenko PINCTRL_PIN(83, "GSPI5_CLK_LOOPBK"), 224*c969afb4SAndy Shevchenko PINCTRL_PIN(84, "GSPI6_CLK_LOOPBK"), 225*c969afb4SAndy Shevchenko /* vGPIO */ 226*c969afb4SAndy Shevchenko PINCTRL_PIN(85, "CNV_BTEN"), 227*c969afb4SAndy Shevchenko PINCTRL_PIN(86, "CNV_BT_HOST_WAKEB"), 228*c969afb4SAndy Shevchenko PINCTRL_PIN(87, "CNV_BT_IF_SELECT"), 229*c969afb4SAndy Shevchenko PINCTRL_PIN(88, "vCNV_BT_UART_TXD"), 230*c969afb4SAndy Shevchenko PINCTRL_PIN(89, "vCNV_BT_UART_RXD"), 231*c969afb4SAndy Shevchenko PINCTRL_PIN(90, "vCNV_BT_UART_CTS_B"), 232*c969afb4SAndy Shevchenko PINCTRL_PIN(91, "vCNV_BT_UART_RTS_B"), 233*c969afb4SAndy Shevchenko PINCTRL_PIN(92, "vCNV_MFUART1_TXD"), 234*c969afb4SAndy Shevchenko PINCTRL_PIN(93, "vCNV_MFUART1_RXD"), 235*c969afb4SAndy Shevchenko PINCTRL_PIN(94, "vCNV_MFUART1_CTS_B"), 236*c969afb4SAndy Shevchenko PINCTRL_PIN(95, "vCNV_MFUART1_RTS_B"), 237*c969afb4SAndy Shevchenko PINCTRL_PIN(96, "vUART0_TXD"), 238*c969afb4SAndy Shevchenko PINCTRL_PIN(97, "vUART0_RXD"), 239*c969afb4SAndy Shevchenko PINCTRL_PIN(98, "vUART0_CTS_B"), 240*c969afb4SAndy Shevchenko PINCTRL_PIN(99, "vUART0_RTS_B"), 241*c969afb4SAndy Shevchenko PINCTRL_PIN(100, "vOSE_UART0_TXD"), 242*c969afb4SAndy Shevchenko PINCTRL_PIN(101, "vOSE_UART0_RXD"), 243*c969afb4SAndy Shevchenko PINCTRL_PIN(102, "vOSE_UART0_CTS_B"), 244*c969afb4SAndy Shevchenko PINCTRL_PIN(103, "vOSE_UART0_RTS_B"), 245*c969afb4SAndy Shevchenko PINCTRL_PIN(104, "vCNV_BT_I2S_BCLK"), 246*c969afb4SAndy Shevchenko PINCTRL_PIN(105, "vCNV_BT_I2S_WS_SYNC"), 247*c969afb4SAndy Shevchenko PINCTRL_PIN(106, "vCNV_BT_I2S_SDO"), 248*c969afb4SAndy Shevchenko PINCTRL_PIN(107, "vCNV_BT_I2S_SDI"), 249*c969afb4SAndy Shevchenko PINCTRL_PIN(108, "vI2S2_SCLK"), 250*c969afb4SAndy Shevchenko PINCTRL_PIN(109, "vI2S2_SFRM"), 251*c969afb4SAndy Shevchenko PINCTRL_PIN(110, "vI2S2_TXD"), 252*c969afb4SAndy Shevchenko PINCTRL_PIN(111, "vI2S2_RXD"), 253*c969afb4SAndy Shevchenko PINCTRL_PIN(112, "vSD3_CD_B"), 254*c969afb4SAndy Shevchenko }; 255*c969afb4SAndy Shevchenko 256*c969afb4SAndy Shevchenko static const struct intel_padgroup ehl_community1_gpps[] = { 257*c969afb4SAndy Shevchenko EHL_GPP(0, 0, 15), /* GPP_V */ 258*c969afb4SAndy Shevchenko EHL_GPP(1, 16, 39), /* GPP_H */ 259*c969afb4SAndy Shevchenko EHL_GPP(2, 40, 60), /* GPP_D */ 260*c969afb4SAndy Shevchenko EHL_GPP(3, 61, 84), /* GPP_U */ 261*c969afb4SAndy Shevchenko EHL_GPP(4, 85, 112), /* vGPIO */ 262*c969afb4SAndy Shevchenko }; 263*c969afb4SAndy Shevchenko 264*c969afb4SAndy Shevchenko static const struct intel_community ehl_community1[] = { 265*c969afb4SAndy Shevchenko EHL_COMMUNITY(0, 112, ehl_community1_gpps), 266*c969afb4SAndy Shevchenko }; 267*c969afb4SAndy Shevchenko 268*c969afb4SAndy Shevchenko static const struct intel_pinctrl_soc_data ehl_community1_soc_data = { 269*c969afb4SAndy Shevchenko .uid = "1", 270*c969afb4SAndy Shevchenko .pins = ehl_community1_pins, 271*c969afb4SAndy Shevchenko .npins = ARRAY_SIZE(ehl_community1_pins), 272*c969afb4SAndy Shevchenko .communities = ehl_community1, 273*c969afb4SAndy Shevchenko .ncommunities = ARRAY_SIZE(ehl_community1), 274*c969afb4SAndy Shevchenko }; 275*c969afb4SAndy Shevchenko 276*c969afb4SAndy Shevchenko static const struct pinctrl_pin_desc ehl_community3_pins[] = { 277*c969afb4SAndy Shevchenko /* CPU */ 278*c969afb4SAndy Shevchenko PINCTRL_PIN(0, "HDACPU_SDI"), 279*c969afb4SAndy Shevchenko PINCTRL_PIN(1, "HDACPU_SDO"), 280*c969afb4SAndy Shevchenko PINCTRL_PIN(2, "HDACPU_BCLK"), 281*c969afb4SAndy Shevchenko PINCTRL_PIN(3, "PM_SYNC"), 282*c969afb4SAndy Shevchenko PINCTRL_PIN(4, "PECI"), 283*c969afb4SAndy Shevchenko PINCTRL_PIN(5, "CPUPWRGD"), 284*c969afb4SAndy Shevchenko PINCTRL_PIN(6, "THRMTRIPB"), 285*c969afb4SAndy Shevchenko PINCTRL_PIN(7, "PLTRST_CPUB"), 286*c969afb4SAndy Shevchenko PINCTRL_PIN(8, "PM_DOWN"), 287*c969afb4SAndy Shevchenko PINCTRL_PIN(9, "TRIGGER_IN"), 288*c969afb4SAndy Shevchenko PINCTRL_PIN(10, "TRIGGER_OUT"), 289*c969afb4SAndy Shevchenko PINCTRL_PIN(11, "UFS_RESETB"), 290*c969afb4SAndy Shevchenko PINCTRL_PIN(12, "CLKOUT_CPURTC"), 291*c969afb4SAndy Shevchenko PINCTRL_PIN(13, "VCCST_OVERRIDE"), 292*c969afb4SAndy Shevchenko PINCTRL_PIN(14, "C10_WAKE"), 293*c969afb4SAndy Shevchenko PINCTRL_PIN(15, "PROCHOTB"), 294*c969afb4SAndy Shevchenko PINCTRL_PIN(16, "CATERRB"), 295*c969afb4SAndy Shevchenko /* GPP_S */ 296*c969afb4SAndy Shevchenko PINCTRL_PIN(17, "UFS_REF_CLK_0"), 297*c969afb4SAndy Shevchenko PINCTRL_PIN(18, "UFS_REF_CLK_1"), 298*c969afb4SAndy Shevchenko /* GPP_A */ 299*c969afb4SAndy Shevchenko PINCTRL_PIN(19, "RGMII0_TXDATA_3"), 300*c969afb4SAndy Shevchenko PINCTRL_PIN(20, "RGMII0_TXDATA_2"), 301*c969afb4SAndy Shevchenko PINCTRL_PIN(21, "RGMII0_TXDATA_1"), 302*c969afb4SAndy Shevchenko PINCTRL_PIN(22, "RGMII0_TXDATA_0"), 303*c969afb4SAndy Shevchenko PINCTRL_PIN(23, "RGMII0_TXCLK"), 304*c969afb4SAndy Shevchenko PINCTRL_PIN(24, "RGMII0_TXCTL"), 305*c969afb4SAndy Shevchenko PINCTRL_PIN(25, "RGMII0_RXCLK"), 306*c969afb4SAndy Shevchenko PINCTRL_PIN(26, "RGMII0_RXDATA_3"), 307*c969afb4SAndy Shevchenko PINCTRL_PIN(27, "RGMII0_RXDATA_2"), 308*c969afb4SAndy Shevchenko PINCTRL_PIN(28, "RGMII0_RXDATA_1"), 309*c969afb4SAndy Shevchenko PINCTRL_PIN(29, "RGMII0_RXDATA_0"), 310*c969afb4SAndy Shevchenko PINCTRL_PIN(30, "RGMII1_TXDATA_3"), 311*c969afb4SAndy Shevchenko PINCTRL_PIN(31, "RGMII1_TXDATA_2"), 312*c969afb4SAndy Shevchenko PINCTRL_PIN(32, "RGMII1_TXDATA_1"), 313*c969afb4SAndy Shevchenko PINCTRL_PIN(33, "RGMII1_TXDATA_0"), 314*c969afb4SAndy Shevchenko PINCTRL_PIN(34, "RGMII1_TXCLK"), 315*c969afb4SAndy Shevchenko PINCTRL_PIN(35, "RGMII1_TXCTL"), 316*c969afb4SAndy Shevchenko PINCTRL_PIN(36, "RGMII1_RXCLK"), 317*c969afb4SAndy Shevchenko PINCTRL_PIN(37, "RGMII1_RXCTL"), 318*c969afb4SAndy Shevchenko PINCTRL_PIN(38, "RGMII1_RXDATA_3"), 319*c969afb4SAndy Shevchenko PINCTRL_PIN(39, "RGMII1_RXDATA_2"), 320*c969afb4SAndy Shevchenko PINCTRL_PIN(40, "RGMII1_RXDATA_1"), 321*c969afb4SAndy Shevchenko PINCTRL_PIN(41, "RGMII1_RXDATA_0"), 322*c969afb4SAndy Shevchenko PINCTRL_PIN(42, "RGMII0_RXCTL"), 323*c969afb4SAndy Shevchenko /* vGPIO_3 */ 324*c969afb4SAndy Shevchenko PINCTRL_PIN(43, "ESPI_USB_OCB_0"), 325*c969afb4SAndy Shevchenko PINCTRL_PIN(44, "ESPI_USB_OCB_1"), 326*c969afb4SAndy Shevchenko PINCTRL_PIN(45, "ESPI_USB_OCB_2"), 327*c969afb4SAndy Shevchenko PINCTRL_PIN(46, "ESPI_USB_OCB_3"), 328*c969afb4SAndy Shevchenko }; 329*c969afb4SAndy Shevchenko 330*c969afb4SAndy Shevchenko static const struct intel_padgroup ehl_community3_gpps[] = { 331*c969afb4SAndy Shevchenko EHL_GPP(0, 0, 16), /* CPU */ 332*c969afb4SAndy Shevchenko EHL_GPP(1, 17, 18), /* GPP_S */ 333*c969afb4SAndy Shevchenko EHL_GPP(2, 19, 42), /* GPP_A */ 334*c969afb4SAndy Shevchenko EHL_GPP(3, 43, 46), /* vGPIO_3 */ 335*c969afb4SAndy Shevchenko }; 336*c969afb4SAndy Shevchenko 337*c969afb4SAndy Shevchenko static const struct intel_community ehl_community3[] = { 338*c969afb4SAndy Shevchenko EHL_COMMUNITY(0, 46, ehl_community3_gpps), 339*c969afb4SAndy Shevchenko }; 340*c969afb4SAndy Shevchenko 341*c969afb4SAndy Shevchenko static const struct intel_pinctrl_soc_data ehl_community3_soc_data = { 342*c969afb4SAndy Shevchenko .uid = "3", 343*c969afb4SAndy Shevchenko .pins = ehl_community3_pins, 344*c969afb4SAndy Shevchenko .npins = ARRAY_SIZE(ehl_community3_pins), 345*c969afb4SAndy Shevchenko .communities = ehl_community3, 346*c969afb4SAndy Shevchenko .ncommunities = ARRAY_SIZE(ehl_community3), 347*c969afb4SAndy Shevchenko }; 348*c969afb4SAndy Shevchenko 349*c969afb4SAndy Shevchenko static const struct pinctrl_pin_desc ehl_community4_pins[] = { 350*c969afb4SAndy Shevchenko /* GPP_C */ 351*c969afb4SAndy Shevchenko PINCTRL_PIN(0, "SMBCLK"), 352*c969afb4SAndy Shevchenko PINCTRL_PIN(1, "SMBDATA"), 353*c969afb4SAndy Shevchenko PINCTRL_PIN(2, "OSE_PWM0"), 354*c969afb4SAndy Shevchenko PINCTRL_PIN(3, "RGMII0_MDC"), 355*c969afb4SAndy Shevchenko PINCTRL_PIN(4, "RGMII0_MDIO"), 356*c969afb4SAndy Shevchenko PINCTRL_PIN(5, "OSE_PWM1"), 357*c969afb4SAndy Shevchenko PINCTRL_PIN(6, "RGMII1_MDC"), 358*c969afb4SAndy Shevchenko PINCTRL_PIN(7, "RGMII1_MDIO"), 359*c969afb4SAndy Shevchenko PINCTRL_PIN(8, "OSE_TGPIO4"), 360*c969afb4SAndy Shevchenko PINCTRL_PIN(9, "OSE_HSUART0_EN"), 361*c969afb4SAndy Shevchenko PINCTRL_PIN(10, "OSE_TGPIO5"), 362*c969afb4SAndy Shevchenko PINCTRL_PIN(11, "OSE_HSUART0_RE"), 363*c969afb4SAndy Shevchenko PINCTRL_PIN(12, "OSE_UART0_RXD"), 364*c969afb4SAndy Shevchenko PINCTRL_PIN(13, "OSE_UART0_TXD"), 365*c969afb4SAndy Shevchenko PINCTRL_PIN(14, "OSE_UART0_RTSB"), 366*c969afb4SAndy Shevchenko PINCTRL_PIN(15, "OSE_UART0_CTSB"), 367*c969afb4SAndy Shevchenko PINCTRL_PIN(16, "RGMII2_MDIO"), 368*c969afb4SAndy Shevchenko PINCTRL_PIN(17, "RGMII2_MDC"), 369*c969afb4SAndy Shevchenko PINCTRL_PIN(18, "OSE_I2C4_SDAT"), 370*c969afb4SAndy Shevchenko PINCTRL_PIN(19, "OSE_I2C4_SCLK"), 371*c969afb4SAndy Shevchenko PINCTRL_PIN(20, "OSE_UART4_RXD"), 372*c969afb4SAndy Shevchenko PINCTRL_PIN(21, "OSE_UART4_TXD"), 373*c969afb4SAndy Shevchenko PINCTRL_PIN(22, "OSE_UART4_RTSB"), 374*c969afb4SAndy Shevchenko PINCTRL_PIN(23, "OSE_UART4_CTSB"), 375*c969afb4SAndy Shevchenko /* GPP_F */ 376*c969afb4SAndy Shevchenko PINCTRL_PIN(24, "CNV_BRI_DT"), 377*c969afb4SAndy Shevchenko PINCTRL_PIN(25, "CNV_BRI_RSP"), 378*c969afb4SAndy Shevchenko PINCTRL_PIN(26, "CNV_RGI_DT"), 379*c969afb4SAndy Shevchenko PINCTRL_PIN(27, "CNV_RGI_RSP"), 380*c969afb4SAndy Shevchenko PINCTRL_PIN(28, "CNV_RF_RESET_B"), 381*c969afb4SAndy Shevchenko PINCTRL_PIN(29, "EMMC_HIP_MON"), 382*c969afb4SAndy Shevchenko PINCTRL_PIN(30, "CNV_PA_BLANKING"), 383*c969afb4SAndy Shevchenko PINCTRL_PIN(31, "OSE_I2S1_SCLK"), 384*c969afb4SAndy Shevchenko PINCTRL_PIN(32, "I2S_MCLK2_INOUT"), 385*c969afb4SAndy Shevchenko PINCTRL_PIN(33, "BOOTMPC"), 386*c969afb4SAndy Shevchenko PINCTRL_PIN(34, "OSE_I2S1_SFRM"), 387*c969afb4SAndy Shevchenko PINCTRL_PIN(35, "GPPC_F_11"), 388*c969afb4SAndy Shevchenko PINCTRL_PIN(36, "GSXDOUT"), 389*c969afb4SAndy Shevchenko PINCTRL_PIN(37, "GSXSLOAD"), 390*c969afb4SAndy Shevchenko PINCTRL_PIN(38, "GSXDIN"), 391*c969afb4SAndy Shevchenko PINCTRL_PIN(39, "GSXSRESETB"), 392*c969afb4SAndy Shevchenko PINCTRL_PIN(40, "GSXCLK"), 393*c969afb4SAndy Shevchenko PINCTRL_PIN(41, "GPPC_F_17"), 394*c969afb4SAndy Shevchenko PINCTRL_PIN(42, "OSE_I2S1_TXD"), 395*c969afb4SAndy Shevchenko PINCTRL_PIN(43, "OSE_I2S1_RXD"), 396*c969afb4SAndy Shevchenko PINCTRL_PIN(44, "EXT_PWR_GATEB"), 397*c969afb4SAndy Shevchenko PINCTRL_PIN(45, "EXT_PWR_GATE2B"), 398*c969afb4SAndy Shevchenko PINCTRL_PIN(46, "VNN_CTRL"), 399*c969afb4SAndy Shevchenko PINCTRL_PIN(47, "V1P05_CTRL"), 400*c969afb4SAndy Shevchenko PINCTRL_PIN(48, "GPPF_CLK_LOOPBACK"), 401*c969afb4SAndy Shevchenko /* HVCMOS */ 402*c969afb4SAndy Shevchenko PINCTRL_PIN(49, "L_BKLTEN"), 403*c969afb4SAndy Shevchenko PINCTRL_PIN(50, "L_BKLTCTL"), 404*c969afb4SAndy Shevchenko PINCTRL_PIN(51, "L_VDDEN"), 405*c969afb4SAndy Shevchenko PINCTRL_PIN(52, "SYS_PWROK"), 406*c969afb4SAndy Shevchenko PINCTRL_PIN(53, "SYS_RESETB"), 407*c969afb4SAndy Shevchenko PINCTRL_PIN(54, "MLK_RSTB"), 408*c969afb4SAndy Shevchenko /* GPP_E */ 409*c969afb4SAndy Shevchenko PINCTRL_PIN(55, "SATA_LEDB"), 410*c969afb4SAndy Shevchenko PINCTRL_PIN(56, "GPPC_E_1"), 411*c969afb4SAndy Shevchenko PINCTRL_PIN(57, "GPPC_E_2"), 412*c969afb4SAndy Shevchenko PINCTRL_PIN(58, "DDSP_HPD_B"), 413*c969afb4SAndy Shevchenko PINCTRL_PIN(59, "SATA_DEVSLP_0"), 414*c969afb4SAndy Shevchenko PINCTRL_PIN(60, "DDPB_CTRLDATA"), 415*c969afb4SAndy Shevchenko PINCTRL_PIN(61, "GPPC_E_6"), 416*c969afb4SAndy Shevchenko PINCTRL_PIN(62, "DDPB_CTRLCLK"), 417*c969afb4SAndy Shevchenko PINCTRL_PIN(63, "GPPC_E_8"), 418*c969afb4SAndy Shevchenko PINCTRL_PIN(64, "USB2_OCB_0"), 419*c969afb4SAndy Shevchenko PINCTRL_PIN(65, "GPPC_E_10"), 420*c969afb4SAndy Shevchenko PINCTRL_PIN(66, "GPPC_E_11"), 421*c969afb4SAndy Shevchenko PINCTRL_PIN(67, "GPPC_E_12"), 422*c969afb4SAndy Shevchenko PINCTRL_PIN(68, "GPPC_E_13"), 423*c969afb4SAndy Shevchenko PINCTRL_PIN(69, "DDSP_HPD_A"), 424*c969afb4SAndy Shevchenko PINCTRL_PIN(70, "OSE_I2S0_RXD"), 425*c969afb4SAndy Shevchenko PINCTRL_PIN(71, "OSE_I2S0_TXD"), 426*c969afb4SAndy Shevchenko PINCTRL_PIN(72, "DDSP_HPD_C"), 427*c969afb4SAndy Shevchenko PINCTRL_PIN(73, "DDPA_CTRLDATA"), 428*c969afb4SAndy Shevchenko PINCTRL_PIN(74, "DDPA_CTRLCLK"), 429*c969afb4SAndy Shevchenko PINCTRL_PIN(75, "OSE_I2S0_SCLK"), 430*c969afb4SAndy Shevchenko PINCTRL_PIN(76, "OSE_I2S0_SFRM"), 431*c969afb4SAndy Shevchenko PINCTRL_PIN(77, "DDPC_CTRLDATA"), 432*c969afb4SAndy Shevchenko PINCTRL_PIN(78, "DDPC_CTRLCLK"), 433*c969afb4SAndy Shevchenko PINCTRL_PIN(79, "SPI1_CLK_LOOPBK"), 434*c969afb4SAndy Shevchenko }; 435*c969afb4SAndy Shevchenko 436*c969afb4SAndy Shevchenko static const struct intel_padgroup ehl_community4_gpps[] = { 437*c969afb4SAndy Shevchenko EHL_GPP(0, 0, 23), /* GPP_C */ 438*c969afb4SAndy Shevchenko EHL_GPP(1, 24, 48), /* GPP_F */ 439*c969afb4SAndy Shevchenko EHL_GPP(2, 49, 54), /* HVCMOS */ 440*c969afb4SAndy Shevchenko EHL_GPP(3, 55, 79), /* GPP_E */ 441*c969afb4SAndy Shevchenko }; 442*c969afb4SAndy Shevchenko 443*c969afb4SAndy Shevchenko static const struct intel_community ehl_community4[] = { 444*c969afb4SAndy Shevchenko EHL_COMMUNITY(0, 79, ehl_community4_gpps), 445*c969afb4SAndy Shevchenko }; 446*c969afb4SAndy Shevchenko 447*c969afb4SAndy Shevchenko static const struct intel_pinctrl_soc_data ehl_community4_soc_data = { 448*c969afb4SAndy Shevchenko .uid = "4", 449*c969afb4SAndy Shevchenko .pins = ehl_community4_pins, 450*c969afb4SAndy Shevchenko .npins = ARRAY_SIZE(ehl_community4_pins), 451*c969afb4SAndy Shevchenko .communities = ehl_community4, 452*c969afb4SAndy Shevchenko .ncommunities = ARRAY_SIZE(ehl_community4), 453*c969afb4SAndy Shevchenko }; 454*c969afb4SAndy Shevchenko 455*c969afb4SAndy Shevchenko static const struct pinctrl_pin_desc ehl_community5_pins[] = { 456*c969afb4SAndy Shevchenko /* GPP_R */ 457*c969afb4SAndy Shevchenko PINCTRL_PIN(0, "HDA_BCLK"), 458*c969afb4SAndy Shevchenko PINCTRL_PIN(1, "HDA_SYNC"), 459*c969afb4SAndy Shevchenko PINCTRL_PIN(2, "HDA_SDO"), 460*c969afb4SAndy Shevchenko PINCTRL_PIN(3, "HDA_SDI_0"), 461*c969afb4SAndy Shevchenko PINCTRL_PIN(4, "HDA_RSTB"), 462*c969afb4SAndy Shevchenko PINCTRL_PIN(5, "HDA_SDI_1"), 463*c969afb4SAndy Shevchenko PINCTRL_PIN(6, "GPP_R_6"), 464*c969afb4SAndy Shevchenko PINCTRL_PIN(7, "GPP_R_7"), 465*c969afb4SAndy Shevchenko }; 466*c969afb4SAndy Shevchenko 467*c969afb4SAndy Shevchenko static const struct intel_padgroup ehl_community5_gpps[] = { 468*c969afb4SAndy Shevchenko EHL_GPP(0, 0, 7), /* GPP_R */ 469*c969afb4SAndy Shevchenko }; 470*c969afb4SAndy Shevchenko 471*c969afb4SAndy Shevchenko static const struct intel_community ehl_community5[] = { 472*c969afb4SAndy Shevchenko EHL_COMMUNITY(0, 7, ehl_community5_gpps), 473*c969afb4SAndy Shevchenko }; 474*c969afb4SAndy Shevchenko 475*c969afb4SAndy Shevchenko static const struct intel_pinctrl_soc_data ehl_community5_soc_data = { 476*c969afb4SAndy Shevchenko .uid = "5", 477*c969afb4SAndy Shevchenko .pins = ehl_community5_pins, 478*c969afb4SAndy Shevchenko .npins = ARRAY_SIZE(ehl_community5_pins), 479*c969afb4SAndy Shevchenko .communities = ehl_community5, 480*c969afb4SAndy Shevchenko .ncommunities = ARRAY_SIZE(ehl_community5), 481*c969afb4SAndy Shevchenko }; 482*c969afb4SAndy Shevchenko 483*c969afb4SAndy Shevchenko static const struct intel_pinctrl_soc_data *ehl_soc_data_array[] = { 484*c969afb4SAndy Shevchenko &ehl_community0_soc_data, 485*c969afb4SAndy Shevchenko &ehl_community1_soc_data, 486*c969afb4SAndy Shevchenko &ehl_community3_soc_data, 487*c969afb4SAndy Shevchenko &ehl_community4_soc_data, 488*c969afb4SAndy Shevchenko &ehl_community5_soc_data, 489*c969afb4SAndy Shevchenko NULL 490*c969afb4SAndy Shevchenko }; 491*c969afb4SAndy Shevchenko 492*c969afb4SAndy Shevchenko static const struct acpi_device_id ehl_pinctrl_acpi_match[] = { 493*c969afb4SAndy Shevchenko { "INTC1020", (kernel_ulong_t)ehl_soc_data_array }, 494*c969afb4SAndy Shevchenko { } 495*c969afb4SAndy Shevchenko }; 496*c969afb4SAndy Shevchenko MODULE_DEVICE_TABLE(acpi, ehl_pinctrl_acpi_match); 497*c969afb4SAndy Shevchenko 498*c969afb4SAndy Shevchenko static INTEL_PINCTRL_PM_OPS(ehl_pinctrl_pm_ops); 499*c969afb4SAndy Shevchenko 500*c969afb4SAndy Shevchenko static struct platform_driver ehl_pinctrl_driver = { 501*c969afb4SAndy Shevchenko .probe = intel_pinctrl_probe_by_uid, 502*c969afb4SAndy Shevchenko .driver = { 503*c969afb4SAndy Shevchenko .name = "elkhartlake-pinctrl", 504*c969afb4SAndy Shevchenko .acpi_match_table = ehl_pinctrl_acpi_match, 505*c969afb4SAndy Shevchenko .pm = &ehl_pinctrl_pm_ops, 506*c969afb4SAndy Shevchenko }, 507*c969afb4SAndy Shevchenko }; 508*c969afb4SAndy Shevchenko 509*c969afb4SAndy Shevchenko module_platform_driver(ehl_pinctrl_driver); 510*c969afb4SAndy Shevchenko 511*c969afb4SAndy Shevchenko MODULE_AUTHOR("Andy Shevchenko <andriy.shevchenko@linux.intel.com>"); 512*c969afb4SAndy Shevchenko MODULE_DESCRIPTION("Intel Elkhart Lake PCH pinctrl/GPIO driver"); 513*c969afb4SAndy Shevchenko MODULE_LICENSE("GPL v2"); 514