1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0+ 2*4882a593Smuzhiyun // 3*4882a593Smuzhiyun // Exynos ARMv8 specific support for Samsung pinctrl/gpiolib driver 4*4882a593Smuzhiyun // with eint support. 5*4882a593Smuzhiyun // 6*4882a593Smuzhiyun // Copyright (c) 2012 Samsung Electronics Co., Ltd. 7*4882a593Smuzhiyun // http://www.samsung.com 8*4882a593Smuzhiyun // Copyright (c) 2012 Linaro Ltd 9*4882a593Smuzhiyun // http://www.linaro.org 10*4882a593Smuzhiyun // Copyright (c) 2017 Krzysztof Kozlowski <krzk@kernel.org> 11*4882a593Smuzhiyun // 12*4882a593Smuzhiyun // This file contains the Samsung Exynos specific information required by the 13*4882a593Smuzhiyun // the Samsung pinctrl/gpiolib driver. It also includes the implementation of 14*4882a593Smuzhiyun // external gpio and wakeup interrupt support. 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #include <linux/slab.h> 17*4882a593Smuzhiyun #include <linux/soc/samsung/exynos-regs-pmu.h> 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun #include "pinctrl-samsung.h" 20*4882a593Smuzhiyun #include "pinctrl-exynos.h" 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun static const struct samsung_pin_bank_type bank_type_off = { 23*4882a593Smuzhiyun .fld_width = { 4, 1, 2, 2, 2, 2, }, 24*4882a593Smuzhiyun .reg_offset = { 0x00, 0x04, 0x08, 0x0c, 0x10, 0x14, }, 25*4882a593Smuzhiyun }; 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun static const struct samsung_pin_bank_type bank_type_alive = { 28*4882a593Smuzhiyun .fld_width = { 4, 1, 2, 2, }, 29*4882a593Smuzhiyun .reg_offset = { 0x00, 0x04, 0x08, 0x0c, }, 30*4882a593Smuzhiyun }; 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun /* Exynos5433 has the 4bit widths for PINCFG_TYPE_DRV bitfields. */ 33*4882a593Smuzhiyun static const struct samsung_pin_bank_type exynos5433_bank_type_off = { 34*4882a593Smuzhiyun .fld_width = { 4, 1, 2, 4, 2, 2, }, 35*4882a593Smuzhiyun .reg_offset = { 0x00, 0x04, 0x08, 0x0c, 0x10, 0x14, }, 36*4882a593Smuzhiyun }; 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun static const struct samsung_pin_bank_type exynos5433_bank_type_alive = { 39*4882a593Smuzhiyun .fld_width = { 4, 1, 2, 4, }, 40*4882a593Smuzhiyun .reg_offset = { 0x00, 0x04, 0x08, 0x0c, }, 41*4882a593Smuzhiyun }; 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun /* Pad retention control code for accessing PMU regmap */ 44*4882a593Smuzhiyun static atomic_t exynos_shared_retention_refcnt; 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun /* pin banks of exynos5433 pin-controller - ALIVE */ 47*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos5433_pin_banks0[] __initconst = { 48*4882a593Smuzhiyun /* Must start with EINTG banks, ordered by EINT group number. */ 49*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTW(8, 0x000, "gpa0", 0x00), 50*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTW(8, 0x020, "gpa1", 0x04), 51*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTW(8, 0x040, "gpa2", 0x08), 52*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTW(8, 0x060, "gpa3", 0x0c), 53*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTW_EXT(8, 0x020, "gpf1", 0x1004, 1), 54*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTW_EXT(4, 0x040, "gpf2", 0x1008, 1), 55*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTW_EXT(4, 0x060, "gpf3", 0x100c, 1), 56*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTW_EXT(8, 0x080, "gpf4", 0x1010, 1), 57*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTW_EXT(8, 0x0a0, "gpf5", 0x1014, 1), 58*4882a593Smuzhiyun }; 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun /* pin banks of exynos5433 pin-controller - AUD */ 61*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos5433_pin_banks1[] __initconst = { 62*4882a593Smuzhiyun /* Must start with EINTG banks, ordered by EINT group number. */ 63*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(7, 0x000, "gpz0", 0x00), 64*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(4, 0x020, "gpz1", 0x04), 65*4882a593Smuzhiyun }; 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun /* pin banks of exynos5433 pin-controller - CPIF */ 68*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos5433_pin_banks2[] __initconst = { 69*4882a593Smuzhiyun /* Must start with EINTG banks, ordered by EINT group number. */ 70*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(2, 0x000, "gpv6", 0x00), 71*4882a593Smuzhiyun }; 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun /* pin banks of exynos5433 pin-controller - eSE */ 74*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos5433_pin_banks3[] __initconst = { 75*4882a593Smuzhiyun /* Must start with EINTG banks, ordered by EINT group number. */ 76*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(3, 0x000, "gpj2", 0x00), 77*4882a593Smuzhiyun }; 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun /* pin banks of exynos5433 pin-controller - FINGER */ 80*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos5433_pin_banks4[] __initconst = { 81*4882a593Smuzhiyun /* Must start with EINTG banks, ordered by EINT group number. */ 82*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(4, 0x000, "gpd5", 0x00), 83*4882a593Smuzhiyun }; 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun /* pin banks of exynos5433 pin-controller - FSYS */ 86*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos5433_pin_banks5[] __initconst = { 87*4882a593Smuzhiyun /* Must start with EINTG banks, ordered by EINT group number. */ 88*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(6, 0x000, "gph1", 0x00), 89*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(7, 0x020, "gpr4", 0x04), 90*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(5, 0x040, "gpr0", 0x08), 91*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(8, 0x060, "gpr1", 0x0c), 92*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(2, 0x080, "gpr2", 0x10), 93*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(8, 0x0a0, "gpr3", 0x14), 94*4882a593Smuzhiyun }; 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun /* pin banks of exynos5433 pin-controller - IMEM */ 97*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos5433_pin_banks6[] __initconst = { 98*4882a593Smuzhiyun /* Must start with EINTG banks, ordered by EINT group number. */ 99*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(8, 0x000, "gpf0", 0x00), 100*4882a593Smuzhiyun }; 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun /* pin banks of exynos5433 pin-controller - NFC */ 103*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos5433_pin_banks7[] __initconst = { 104*4882a593Smuzhiyun /* Must start with EINTG banks, ordered by EINT group number. */ 105*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(3, 0x000, "gpj0", 0x00), 106*4882a593Smuzhiyun }; 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun /* pin banks of exynos5433 pin-controller - PERIC */ 109*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos5433_pin_banks8[] __initconst = { 110*4882a593Smuzhiyun /* Must start with EINTG banks, ordered by EINT group number. */ 111*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(6, 0x000, "gpv7", 0x00), 112*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(5, 0x020, "gpb0", 0x04), 113*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(8, 0x040, "gpc0", 0x08), 114*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(2, 0x060, "gpc1", 0x0c), 115*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(6, 0x080, "gpc2", 0x10), 116*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(8, 0x0a0, "gpc3", 0x14), 117*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(2, 0x0c0, "gpg0", 0x18), 118*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(4, 0x0e0, "gpd0", 0x1c), 119*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(6, 0x100, "gpd1", 0x20), 120*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(8, 0x120, "gpd2", 0x24), 121*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(5, 0x140, "gpd4", 0x28), 122*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(2, 0x160, "gpd8", 0x2c), 123*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(7, 0x180, "gpd6", 0x30), 124*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(3, 0x1a0, "gpd7", 0x34), 125*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(5, 0x1c0, "gpg1", 0x38), 126*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(2, 0x1e0, "gpg2", 0x3c), 127*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(8, 0x200, "gpg3", 0x40), 128*4882a593Smuzhiyun }; 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun /* pin banks of exynos5433 pin-controller - TOUCH */ 131*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos5433_pin_banks9[] __initconst = { 132*4882a593Smuzhiyun /* Must start with EINTG banks, ordered by EINT group number. */ 133*4882a593Smuzhiyun EXYNOS5433_PIN_BANK_EINTG(3, 0x000, "gpj1", 0x00), 134*4882a593Smuzhiyun }; 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun /* PMU pin retention groups registers for Exynos5433 (without audio & fsys) */ 137*4882a593Smuzhiyun static const u32 exynos5433_retention_regs[] = { 138*4882a593Smuzhiyun EXYNOS5433_PAD_RETENTION_TOP_OPTION, 139*4882a593Smuzhiyun EXYNOS5433_PAD_RETENTION_UART_OPTION, 140*4882a593Smuzhiyun EXYNOS5433_PAD_RETENTION_EBIA_OPTION, 141*4882a593Smuzhiyun EXYNOS5433_PAD_RETENTION_EBIB_OPTION, 142*4882a593Smuzhiyun EXYNOS5433_PAD_RETENTION_SPI_OPTION, 143*4882a593Smuzhiyun EXYNOS5433_PAD_RETENTION_MIF_OPTION, 144*4882a593Smuzhiyun EXYNOS5433_PAD_RETENTION_USBXTI_OPTION, 145*4882a593Smuzhiyun EXYNOS5433_PAD_RETENTION_BOOTLDO_OPTION, 146*4882a593Smuzhiyun EXYNOS5433_PAD_RETENTION_UFS_OPTION, 147*4882a593Smuzhiyun EXYNOS5433_PAD_RETENTION_FSYSGENIO_OPTION, 148*4882a593Smuzhiyun }; 149*4882a593Smuzhiyun 150*4882a593Smuzhiyun static const struct samsung_retention_data exynos5433_retention_data __initconst = { 151*4882a593Smuzhiyun .regs = exynos5433_retention_regs, 152*4882a593Smuzhiyun .nr_regs = ARRAY_SIZE(exynos5433_retention_regs), 153*4882a593Smuzhiyun .value = EXYNOS_WAKEUP_FROM_LOWPWR, 154*4882a593Smuzhiyun .refcnt = &exynos_shared_retention_refcnt, 155*4882a593Smuzhiyun .init = exynos_retention_init, 156*4882a593Smuzhiyun }; 157*4882a593Smuzhiyun 158*4882a593Smuzhiyun /* PMU retention control for audio pins can be tied to audio pin bank */ 159*4882a593Smuzhiyun static const u32 exynos5433_audio_retention_regs[] = { 160*4882a593Smuzhiyun EXYNOS5433_PAD_RETENTION_AUD_OPTION, 161*4882a593Smuzhiyun }; 162*4882a593Smuzhiyun 163*4882a593Smuzhiyun static const struct samsung_retention_data exynos5433_audio_retention_data __initconst = { 164*4882a593Smuzhiyun .regs = exynos5433_audio_retention_regs, 165*4882a593Smuzhiyun .nr_regs = ARRAY_SIZE(exynos5433_audio_retention_regs), 166*4882a593Smuzhiyun .value = EXYNOS_WAKEUP_FROM_LOWPWR, 167*4882a593Smuzhiyun .init = exynos_retention_init, 168*4882a593Smuzhiyun }; 169*4882a593Smuzhiyun 170*4882a593Smuzhiyun /* PMU retention control for mmc pins can be tied to fsys pin bank */ 171*4882a593Smuzhiyun static const u32 exynos5433_fsys_retention_regs[] = { 172*4882a593Smuzhiyun EXYNOS5433_PAD_RETENTION_MMC0_OPTION, 173*4882a593Smuzhiyun EXYNOS5433_PAD_RETENTION_MMC1_OPTION, 174*4882a593Smuzhiyun EXYNOS5433_PAD_RETENTION_MMC2_OPTION, 175*4882a593Smuzhiyun }; 176*4882a593Smuzhiyun 177*4882a593Smuzhiyun static const struct samsung_retention_data exynos5433_fsys_retention_data __initconst = { 178*4882a593Smuzhiyun .regs = exynos5433_fsys_retention_regs, 179*4882a593Smuzhiyun .nr_regs = ARRAY_SIZE(exynos5433_fsys_retention_regs), 180*4882a593Smuzhiyun .value = EXYNOS_WAKEUP_FROM_LOWPWR, 181*4882a593Smuzhiyun .init = exynos_retention_init, 182*4882a593Smuzhiyun }; 183*4882a593Smuzhiyun 184*4882a593Smuzhiyun /* 185*4882a593Smuzhiyun * Samsung pinctrl driver data for Exynos5433 SoC. Exynos5433 SoC includes 186*4882a593Smuzhiyun * ten gpio/pin-mux/pinconfig controllers. 187*4882a593Smuzhiyun */ 188*4882a593Smuzhiyun static const struct samsung_pin_ctrl exynos5433_pin_ctrl[] __initconst = { 189*4882a593Smuzhiyun { 190*4882a593Smuzhiyun /* pin-controller instance 0 data */ 191*4882a593Smuzhiyun .pin_banks = exynos5433_pin_banks0, 192*4882a593Smuzhiyun .nr_banks = ARRAY_SIZE(exynos5433_pin_banks0), 193*4882a593Smuzhiyun .eint_wkup_init = exynos_eint_wkup_init, 194*4882a593Smuzhiyun .suspend = exynos_pinctrl_suspend, 195*4882a593Smuzhiyun .resume = exynos_pinctrl_resume, 196*4882a593Smuzhiyun .nr_ext_resources = 1, 197*4882a593Smuzhiyun .retention_data = &exynos5433_retention_data, 198*4882a593Smuzhiyun }, { 199*4882a593Smuzhiyun /* pin-controller instance 1 data */ 200*4882a593Smuzhiyun .pin_banks = exynos5433_pin_banks1, 201*4882a593Smuzhiyun .nr_banks = ARRAY_SIZE(exynos5433_pin_banks1), 202*4882a593Smuzhiyun .eint_gpio_init = exynos_eint_gpio_init, 203*4882a593Smuzhiyun .suspend = exynos_pinctrl_suspend, 204*4882a593Smuzhiyun .resume = exynos_pinctrl_resume, 205*4882a593Smuzhiyun .retention_data = &exynos5433_audio_retention_data, 206*4882a593Smuzhiyun }, { 207*4882a593Smuzhiyun /* pin-controller instance 2 data */ 208*4882a593Smuzhiyun .pin_banks = exynos5433_pin_banks2, 209*4882a593Smuzhiyun .nr_banks = ARRAY_SIZE(exynos5433_pin_banks2), 210*4882a593Smuzhiyun .eint_gpio_init = exynos_eint_gpio_init, 211*4882a593Smuzhiyun .suspend = exynos_pinctrl_suspend, 212*4882a593Smuzhiyun .resume = exynos_pinctrl_resume, 213*4882a593Smuzhiyun .retention_data = &exynos5433_retention_data, 214*4882a593Smuzhiyun }, { 215*4882a593Smuzhiyun /* pin-controller instance 3 data */ 216*4882a593Smuzhiyun .pin_banks = exynos5433_pin_banks3, 217*4882a593Smuzhiyun .nr_banks = ARRAY_SIZE(exynos5433_pin_banks3), 218*4882a593Smuzhiyun .eint_gpio_init = exynos_eint_gpio_init, 219*4882a593Smuzhiyun .suspend = exynos_pinctrl_suspend, 220*4882a593Smuzhiyun .resume = exynos_pinctrl_resume, 221*4882a593Smuzhiyun .retention_data = &exynos5433_retention_data, 222*4882a593Smuzhiyun }, { 223*4882a593Smuzhiyun /* pin-controller instance 4 data */ 224*4882a593Smuzhiyun .pin_banks = exynos5433_pin_banks4, 225*4882a593Smuzhiyun .nr_banks = ARRAY_SIZE(exynos5433_pin_banks4), 226*4882a593Smuzhiyun .eint_gpio_init = exynos_eint_gpio_init, 227*4882a593Smuzhiyun .suspend = exynos_pinctrl_suspend, 228*4882a593Smuzhiyun .resume = exynos_pinctrl_resume, 229*4882a593Smuzhiyun .retention_data = &exynos5433_retention_data, 230*4882a593Smuzhiyun }, { 231*4882a593Smuzhiyun /* pin-controller instance 5 data */ 232*4882a593Smuzhiyun .pin_banks = exynos5433_pin_banks5, 233*4882a593Smuzhiyun .nr_banks = ARRAY_SIZE(exynos5433_pin_banks5), 234*4882a593Smuzhiyun .eint_gpio_init = exynos_eint_gpio_init, 235*4882a593Smuzhiyun .suspend = exynos_pinctrl_suspend, 236*4882a593Smuzhiyun .resume = exynos_pinctrl_resume, 237*4882a593Smuzhiyun .retention_data = &exynos5433_fsys_retention_data, 238*4882a593Smuzhiyun }, { 239*4882a593Smuzhiyun /* pin-controller instance 6 data */ 240*4882a593Smuzhiyun .pin_banks = exynos5433_pin_banks6, 241*4882a593Smuzhiyun .nr_banks = ARRAY_SIZE(exynos5433_pin_banks6), 242*4882a593Smuzhiyun .eint_gpio_init = exynos_eint_gpio_init, 243*4882a593Smuzhiyun .suspend = exynos_pinctrl_suspend, 244*4882a593Smuzhiyun .resume = exynos_pinctrl_resume, 245*4882a593Smuzhiyun .retention_data = &exynos5433_retention_data, 246*4882a593Smuzhiyun }, { 247*4882a593Smuzhiyun /* pin-controller instance 7 data */ 248*4882a593Smuzhiyun .pin_banks = exynos5433_pin_banks7, 249*4882a593Smuzhiyun .nr_banks = ARRAY_SIZE(exynos5433_pin_banks7), 250*4882a593Smuzhiyun .eint_gpio_init = exynos_eint_gpio_init, 251*4882a593Smuzhiyun .suspend = exynos_pinctrl_suspend, 252*4882a593Smuzhiyun .resume = exynos_pinctrl_resume, 253*4882a593Smuzhiyun .retention_data = &exynos5433_retention_data, 254*4882a593Smuzhiyun }, { 255*4882a593Smuzhiyun /* pin-controller instance 8 data */ 256*4882a593Smuzhiyun .pin_banks = exynos5433_pin_banks8, 257*4882a593Smuzhiyun .nr_banks = ARRAY_SIZE(exynos5433_pin_banks8), 258*4882a593Smuzhiyun .eint_gpio_init = exynos_eint_gpio_init, 259*4882a593Smuzhiyun .suspend = exynos_pinctrl_suspend, 260*4882a593Smuzhiyun .resume = exynos_pinctrl_resume, 261*4882a593Smuzhiyun .retention_data = &exynos5433_retention_data, 262*4882a593Smuzhiyun }, { 263*4882a593Smuzhiyun /* pin-controller instance 9 data */ 264*4882a593Smuzhiyun .pin_banks = exynos5433_pin_banks9, 265*4882a593Smuzhiyun .nr_banks = ARRAY_SIZE(exynos5433_pin_banks9), 266*4882a593Smuzhiyun .eint_gpio_init = exynos_eint_gpio_init, 267*4882a593Smuzhiyun .suspend = exynos_pinctrl_suspend, 268*4882a593Smuzhiyun .resume = exynos_pinctrl_resume, 269*4882a593Smuzhiyun .retention_data = &exynos5433_retention_data, 270*4882a593Smuzhiyun }, 271*4882a593Smuzhiyun }; 272*4882a593Smuzhiyun 273*4882a593Smuzhiyun const struct samsung_pinctrl_of_match_data exynos5433_of_data __initconst = { 274*4882a593Smuzhiyun .ctrl = exynos5433_pin_ctrl, 275*4882a593Smuzhiyun .num_ctrl = ARRAY_SIZE(exynos5433_pin_ctrl), 276*4882a593Smuzhiyun }; 277*4882a593Smuzhiyun 278*4882a593Smuzhiyun /* pin banks of exynos7 pin-controller - ALIVE */ 279*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos7_pin_banks0[] __initconst = { 280*4882a593Smuzhiyun /* Must start with EINTG banks, ordered by EINT group number. */ 281*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTW(8, 0x000, "gpa0", 0x00), 282*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTW(8, 0x020, "gpa1", 0x04), 283*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTW(8, 0x040, "gpa2", 0x08), 284*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTW(8, 0x060, "gpa3", 0x0c), 285*4882a593Smuzhiyun }; 286*4882a593Smuzhiyun 287*4882a593Smuzhiyun /* pin banks of exynos7 pin-controller - BUS0 */ 288*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos7_pin_banks1[] __initconst = { 289*4882a593Smuzhiyun /* Must start with EINTG banks, ordered by EINT group number. */ 290*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(5, 0x000, "gpb0", 0x00), 291*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpc0", 0x04), 292*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(2, 0x040, "gpc1", 0x08), 293*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(6, 0x060, "gpc2", 0x0c), 294*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(8, 0x080, "gpc3", 0x10), 295*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(4, 0x0a0, "gpd0", 0x14), 296*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(6, 0x0c0, "gpd1", 0x18), 297*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(8, 0x0e0, "gpd2", 0x1c), 298*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(5, 0x100, "gpd4", 0x20), 299*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(4, 0x120, "gpd5", 0x24), 300*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(6, 0x140, "gpd6", 0x28), 301*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(3, 0x160, "gpd7", 0x2c), 302*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(2, 0x180, "gpd8", 0x30), 303*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(2, 0x1a0, "gpg0", 0x34), 304*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(4, 0x1c0, "gpg3", 0x38), 305*4882a593Smuzhiyun }; 306*4882a593Smuzhiyun 307*4882a593Smuzhiyun /* pin banks of exynos7 pin-controller - NFC */ 308*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos7_pin_banks2[] __initconst = { 309*4882a593Smuzhiyun /* Must start with EINTG banks, ordered by EINT group number. */ 310*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(3, 0x000, "gpj0", 0x00), 311*4882a593Smuzhiyun }; 312*4882a593Smuzhiyun 313*4882a593Smuzhiyun /* pin banks of exynos7 pin-controller - TOUCH */ 314*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos7_pin_banks3[] __initconst = { 315*4882a593Smuzhiyun /* Must start with EINTG banks, ordered by EINT group number. */ 316*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(3, 0x000, "gpj1", 0x00), 317*4882a593Smuzhiyun }; 318*4882a593Smuzhiyun 319*4882a593Smuzhiyun /* pin banks of exynos7 pin-controller - FF */ 320*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos7_pin_banks4[] __initconst = { 321*4882a593Smuzhiyun /* Must start with EINTG banks, ordered by EINT group number. */ 322*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(4, 0x000, "gpg4", 0x00), 323*4882a593Smuzhiyun }; 324*4882a593Smuzhiyun 325*4882a593Smuzhiyun /* pin banks of exynos7 pin-controller - ESE */ 326*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos7_pin_banks5[] __initconst = { 327*4882a593Smuzhiyun /* Must start with EINTG banks, ordered by EINT group number. */ 328*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(5, 0x000, "gpv7", 0x00), 329*4882a593Smuzhiyun }; 330*4882a593Smuzhiyun 331*4882a593Smuzhiyun /* pin banks of exynos7 pin-controller - FSYS0 */ 332*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos7_pin_banks6[] __initconst = { 333*4882a593Smuzhiyun /* Must start with EINTG banks, ordered by EINT group number. */ 334*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpr4", 0x00), 335*4882a593Smuzhiyun }; 336*4882a593Smuzhiyun 337*4882a593Smuzhiyun /* pin banks of exynos7 pin-controller - FSYS1 */ 338*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos7_pin_banks7[] __initconst = { 339*4882a593Smuzhiyun /* Must start with EINTG banks, ordered by EINT group number. */ 340*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(4, 0x000, "gpr0", 0x00), 341*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpr1", 0x04), 342*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(5, 0x040, "gpr2", 0x08), 343*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpr3", 0x0c), 344*4882a593Smuzhiyun }; 345*4882a593Smuzhiyun 346*4882a593Smuzhiyun /* pin banks of exynos7 pin-controller - BUS1 */ 347*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos7_pin_banks8[] __initconst = { 348*4882a593Smuzhiyun /* Must start with EINTG banks, ordered by EINT group number. */ 349*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpf0", 0x00), 350*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpf1", 0x04), 351*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(4, 0x060, "gpf2", 0x08), 352*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpf3", 0x0c), 353*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(8, 0x0a0, "gpf4", 0x10), 354*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(8, 0x0c0, "gpf5", 0x14), 355*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(5, 0x0e0, "gpg1", 0x18), 356*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(5, 0x100, "gpg2", 0x1c), 357*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(6, 0x120, "gph1", 0x20), 358*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(3, 0x140, "gpv6", 0x24), 359*4882a593Smuzhiyun }; 360*4882a593Smuzhiyun 361*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos7_pin_banks9[] __initconst = { 362*4882a593Smuzhiyun /* Must start with EINTG banks, ordered by EINT group number. */ 363*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz0", 0x00), 364*4882a593Smuzhiyun EXYNOS_PIN_BANK_EINTG(4, 0x020, "gpz1", 0x04), 365*4882a593Smuzhiyun }; 366*4882a593Smuzhiyun 367*4882a593Smuzhiyun static const struct samsung_pin_ctrl exynos7_pin_ctrl[] __initconst = { 368*4882a593Smuzhiyun { 369*4882a593Smuzhiyun /* pin-controller instance 0 Alive data */ 370*4882a593Smuzhiyun .pin_banks = exynos7_pin_banks0, 371*4882a593Smuzhiyun .nr_banks = ARRAY_SIZE(exynos7_pin_banks0), 372*4882a593Smuzhiyun .eint_wkup_init = exynos_eint_wkup_init, 373*4882a593Smuzhiyun }, { 374*4882a593Smuzhiyun /* pin-controller instance 1 BUS0 data */ 375*4882a593Smuzhiyun .pin_banks = exynos7_pin_banks1, 376*4882a593Smuzhiyun .nr_banks = ARRAY_SIZE(exynos7_pin_banks1), 377*4882a593Smuzhiyun .eint_gpio_init = exynos_eint_gpio_init, 378*4882a593Smuzhiyun }, { 379*4882a593Smuzhiyun /* pin-controller instance 2 NFC data */ 380*4882a593Smuzhiyun .pin_banks = exynos7_pin_banks2, 381*4882a593Smuzhiyun .nr_banks = ARRAY_SIZE(exynos7_pin_banks2), 382*4882a593Smuzhiyun .eint_gpio_init = exynos_eint_gpio_init, 383*4882a593Smuzhiyun }, { 384*4882a593Smuzhiyun /* pin-controller instance 3 TOUCH data */ 385*4882a593Smuzhiyun .pin_banks = exynos7_pin_banks3, 386*4882a593Smuzhiyun .nr_banks = ARRAY_SIZE(exynos7_pin_banks3), 387*4882a593Smuzhiyun .eint_gpio_init = exynos_eint_gpio_init, 388*4882a593Smuzhiyun }, { 389*4882a593Smuzhiyun /* pin-controller instance 4 FF data */ 390*4882a593Smuzhiyun .pin_banks = exynos7_pin_banks4, 391*4882a593Smuzhiyun .nr_banks = ARRAY_SIZE(exynos7_pin_banks4), 392*4882a593Smuzhiyun .eint_gpio_init = exynos_eint_gpio_init, 393*4882a593Smuzhiyun }, { 394*4882a593Smuzhiyun /* pin-controller instance 5 ESE data */ 395*4882a593Smuzhiyun .pin_banks = exynos7_pin_banks5, 396*4882a593Smuzhiyun .nr_banks = ARRAY_SIZE(exynos7_pin_banks5), 397*4882a593Smuzhiyun .eint_gpio_init = exynos_eint_gpio_init, 398*4882a593Smuzhiyun }, { 399*4882a593Smuzhiyun /* pin-controller instance 6 FSYS0 data */ 400*4882a593Smuzhiyun .pin_banks = exynos7_pin_banks6, 401*4882a593Smuzhiyun .nr_banks = ARRAY_SIZE(exynos7_pin_banks6), 402*4882a593Smuzhiyun .eint_gpio_init = exynos_eint_gpio_init, 403*4882a593Smuzhiyun }, { 404*4882a593Smuzhiyun /* pin-controller instance 7 FSYS1 data */ 405*4882a593Smuzhiyun .pin_banks = exynos7_pin_banks7, 406*4882a593Smuzhiyun .nr_banks = ARRAY_SIZE(exynos7_pin_banks7), 407*4882a593Smuzhiyun .eint_gpio_init = exynos_eint_gpio_init, 408*4882a593Smuzhiyun }, { 409*4882a593Smuzhiyun /* pin-controller instance 8 BUS1 data */ 410*4882a593Smuzhiyun .pin_banks = exynos7_pin_banks8, 411*4882a593Smuzhiyun .nr_banks = ARRAY_SIZE(exynos7_pin_banks8), 412*4882a593Smuzhiyun .eint_gpio_init = exynos_eint_gpio_init, 413*4882a593Smuzhiyun }, { 414*4882a593Smuzhiyun /* pin-controller instance 9 AUD data */ 415*4882a593Smuzhiyun .pin_banks = exynos7_pin_banks9, 416*4882a593Smuzhiyun .nr_banks = ARRAY_SIZE(exynos7_pin_banks9), 417*4882a593Smuzhiyun .eint_gpio_init = exynos_eint_gpio_init, 418*4882a593Smuzhiyun }, 419*4882a593Smuzhiyun }; 420*4882a593Smuzhiyun 421*4882a593Smuzhiyun const struct samsung_pinctrl_of_match_data exynos7_of_data __initconst = { 422*4882a593Smuzhiyun .ctrl = exynos7_pin_ctrl, 423*4882a593Smuzhiyun .num_ctrl = ARRAY_SIZE(exynos7_pin_ctrl), 424*4882a593Smuzhiyun }; 425