1*e260d2bbSVaradarajan Narayanan /* 2*e260d2bbSVaradarajan Narayanan * Copyright (c) 2015, The Linux Foundation. All rights reserved. 3*e260d2bbSVaradarajan Narayanan * 4*e260d2bbSVaradarajan Narayanan * This program is free software; you can redistribute it and/or modify 5*e260d2bbSVaradarajan Narayanan * it under the terms of the GNU General Public License version 2 and 6*e260d2bbSVaradarajan Narayanan * only version 2 as published by the Free Software Foundation. 7*e260d2bbSVaradarajan Narayanan * 8*e260d2bbSVaradarajan Narayanan * This program is distributed in the hope that it will be useful, 9*e260d2bbSVaradarajan Narayanan * but WITHOUT ANY WARRANTY; without even the implied warranty of 10*e260d2bbSVaradarajan Narayanan * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11*e260d2bbSVaradarajan Narayanan * GNU General Public License for more details. 12*e260d2bbSVaradarajan Narayanan */ 13*e260d2bbSVaradarajan Narayanan 14*e260d2bbSVaradarajan Narayanan #include <linux/module.h> 15*e260d2bbSVaradarajan Narayanan #include <linux/of.h> 16*e260d2bbSVaradarajan Narayanan #include <linux/platform_device.h> 17*e260d2bbSVaradarajan Narayanan #include <linux/pinctrl/pinctrl.h> 18*e260d2bbSVaradarajan Narayanan 19*e260d2bbSVaradarajan Narayanan #include "pinctrl-msm.h" 20*e260d2bbSVaradarajan Narayanan 21*e260d2bbSVaradarajan Narayanan static const struct pinctrl_pin_desc ipq4019_pins[] = { 22*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(0, "GPIO_0"), 23*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(1, "GPIO_1"), 24*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(2, "GPIO_2"), 25*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(3, "GPIO_3"), 26*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(4, "GPIO_4"), 27*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(5, "GPIO_5"), 28*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(6, "GPIO_6"), 29*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(7, "GPIO_7"), 30*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(8, "GPIO_8"), 31*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(9, "GPIO_9"), 32*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(10, "GPIO_10"), 33*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(11, "GPIO_11"), 34*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(12, "GPIO_12"), 35*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(13, "GPIO_13"), 36*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(14, "GPIO_14"), 37*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(15, "GPIO_15"), 38*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(16, "GPIO_16"), 39*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(17, "GPIO_17"), 40*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(18, "GPIO_18"), 41*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(19, "GPIO_19"), 42*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(20, "GPIO_20"), 43*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(21, "GPIO_21"), 44*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(22, "GPIO_22"), 45*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(23, "GPIO_23"), 46*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(24, "GPIO_24"), 47*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(25, "GPIO_25"), 48*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(26, "GPIO_26"), 49*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(27, "GPIO_27"), 50*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(28, "GPIO_28"), 51*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(29, "GPIO_29"), 52*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(30, "GPIO_30"), 53*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(31, "GPIO_31"), 54*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(32, "GPIO_32"), 55*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(33, "GPIO_33"), 56*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(34, "GPIO_34"), 57*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(35, "GPIO_35"), 58*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(36, "GPIO_36"), 59*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(37, "GPIO_37"), 60*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(38, "GPIO_38"), 61*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(39, "GPIO_39"), 62*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(40, "GPIO_40"), 63*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(41, "GPIO_41"), 64*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(42, "GPIO_42"), 65*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(43, "GPIO_43"), 66*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(44, "GPIO_44"), 67*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(45, "GPIO_45"), 68*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(46, "GPIO_46"), 69*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(47, "GPIO_47"), 70*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(48, "GPIO_48"), 71*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(49, "GPIO_49"), 72*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(50, "GPIO_50"), 73*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(51, "GPIO_51"), 74*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(52, "GPIO_52"), 75*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(53, "GPIO_53"), 76*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(54, "GPIO_54"), 77*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(55, "GPIO_55"), 78*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(56, "GPIO_56"), 79*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(57, "GPIO_57"), 80*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(58, "GPIO_58"), 81*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(59, "GPIO_59"), 82*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(60, "GPIO_60"), 83*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(61, "GPIO_61"), 84*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(62, "GPIO_62"), 85*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(63, "GPIO_63"), 86*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(64, "GPIO_64"), 87*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(65, "GPIO_65"), 88*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(66, "GPIO_66"), 89*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(67, "GPIO_67"), 90*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(68, "GPIO_68"), 91*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(69, "GPIO_69"), 92*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(70, "GPIO_70"), 93*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(71, "GPIO_71"), 94*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(72, "GPIO_72"), 95*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(73, "GPIO_73"), 96*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(74, "GPIO_74"), 97*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(75, "GPIO_75"), 98*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(76, "GPIO_76"), 99*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(77, "GPIO_77"), 100*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(78, "GPIO_78"), 101*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(79, "GPIO_79"), 102*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(80, "GPIO_80"), 103*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(81, "GPIO_81"), 104*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(82, "GPIO_82"), 105*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(83, "GPIO_83"), 106*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(84, "GPIO_84"), 107*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(85, "GPIO_85"), 108*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(86, "GPIO_86"), 109*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(87, "GPIO_87"), 110*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(88, "GPIO_88"), 111*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(89, "GPIO_89"), 112*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(90, "GPIO_90"), 113*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(91, "GPIO_91"), 114*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(92, "GPIO_92"), 115*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(93, "GPIO_93"), 116*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(94, "GPIO_94"), 117*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(95, "GPIO_95"), 118*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(96, "GPIO_96"), 119*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(97, "GPIO_97"), 120*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(98, "GPIO_98"), 121*e260d2bbSVaradarajan Narayanan PINCTRL_PIN(99, "GPIO_99"), 122*e260d2bbSVaradarajan Narayanan }; 123*e260d2bbSVaradarajan Narayanan 124*e260d2bbSVaradarajan Narayanan #define DECLARE_QCA_GPIO_PINS(pin) \ 125*e260d2bbSVaradarajan Narayanan static const unsigned int gpio##pin##_pins[] = { pin } 126*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(0); 127*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(1); 128*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(2); 129*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(3); 130*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(4); 131*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(5); 132*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(6); 133*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(7); 134*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(8); 135*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(9); 136*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(10); 137*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(11); 138*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(12); 139*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(13); 140*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(14); 141*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(15); 142*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(16); 143*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(17); 144*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(18); 145*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(19); 146*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(20); 147*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(21); 148*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(22); 149*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(23); 150*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(24); 151*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(25); 152*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(26); 153*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(27); 154*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(28); 155*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(29); 156*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(30); 157*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(31); 158*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(32); 159*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(33); 160*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(34); 161*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(35); 162*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(36); 163*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(37); 164*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(38); 165*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(39); 166*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(40); 167*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(41); 168*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(42); 169*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(43); 170*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(44); 171*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(45); 172*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(46); 173*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(47); 174*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(48); 175*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(49); 176*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(50); 177*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(51); 178*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(52); 179*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(53); 180*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(54); 181*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(55); 182*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(56); 183*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(57); 184*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(58); 185*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(59); 186*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(60); 187*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(61); 188*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(62); 189*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(63); 190*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(64); 191*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(65); 192*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(66); 193*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(67); 194*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(68); 195*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(69); 196*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(70); 197*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(71); 198*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(72); 199*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(73); 200*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(74); 201*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(75); 202*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(76); 203*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(77); 204*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(78); 205*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(79); 206*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(80); 207*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(81); 208*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(82); 209*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(83); 210*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(84); 211*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(85); 212*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(86); 213*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(87); 214*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(88); 215*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(89); 216*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(90); 217*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(91); 218*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(92); 219*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(93); 220*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(94); 221*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(95); 222*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(96); 223*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(97); 224*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(98); 225*e260d2bbSVaradarajan Narayanan DECLARE_QCA_GPIO_PINS(99); 226*e260d2bbSVaradarajan Narayanan 227*e260d2bbSVaradarajan Narayanan #define FUNCTION(fname) \ 228*e260d2bbSVaradarajan Narayanan [qca_mux_##fname] = { \ 229*e260d2bbSVaradarajan Narayanan .name = #fname, \ 230*e260d2bbSVaradarajan Narayanan .groups = fname##_groups, \ 231*e260d2bbSVaradarajan Narayanan .ngroups = ARRAY_SIZE(fname##_groups), \ 232*e260d2bbSVaradarajan Narayanan } 233*e260d2bbSVaradarajan Narayanan 234*e260d2bbSVaradarajan Narayanan #define PINGROUP(id, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14) \ 235*e260d2bbSVaradarajan Narayanan { \ 236*e260d2bbSVaradarajan Narayanan .name = "gpio" #id, \ 237*e260d2bbSVaradarajan Narayanan .pins = gpio##id##_pins, \ 238*e260d2bbSVaradarajan Narayanan .npins = (unsigned)ARRAY_SIZE(gpio##id##_pins), \ 239*e260d2bbSVaradarajan Narayanan .funcs = (int[]){ \ 240*e260d2bbSVaradarajan Narayanan qca_mux_NA, /* gpio mode */ \ 241*e260d2bbSVaradarajan Narayanan qca_mux_##f1, \ 242*e260d2bbSVaradarajan Narayanan qca_mux_##f2, \ 243*e260d2bbSVaradarajan Narayanan qca_mux_##f3, \ 244*e260d2bbSVaradarajan Narayanan qca_mux_##f4, \ 245*e260d2bbSVaradarajan Narayanan qca_mux_##f5, \ 246*e260d2bbSVaradarajan Narayanan qca_mux_##f6, \ 247*e260d2bbSVaradarajan Narayanan qca_mux_##f7, \ 248*e260d2bbSVaradarajan Narayanan qca_mux_##f8, \ 249*e260d2bbSVaradarajan Narayanan qca_mux_##f9, \ 250*e260d2bbSVaradarajan Narayanan qca_mux_##f10, \ 251*e260d2bbSVaradarajan Narayanan qca_mux_##f11, \ 252*e260d2bbSVaradarajan Narayanan qca_mux_##f12, \ 253*e260d2bbSVaradarajan Narayanan qca_mux_##f13, \ 254*e260d2bbSVaradarajan Narayanan qca_mux_##f14 \ 255*e260d2bbSVaradarajan Narayanan }, \ 256*e260d2bbSVaradarajan Narayanan .nfuncs = 15, \ 257*e260d2bbSVaradarajan Narayanan .ctl_reg = 0x1000 + 0x10 * id, \ 258*e260d2bbSVaradarajan Narayanan .io_reg = 0x1004 + 0x10 * id, \ 259*e260d2bbSVaradarajan Narayanan .intr_cfg_reg = 0x1008 + 0x10 * id, \ 260*e260d2bbSVaradarajan Narayanan .intr_status_reg = 0x100c + 0x10 * id, \ 261*e260d2bbSVaradarajan Narayanan .intr_target_reg = 0x400 + 0x4 * id, \ 262*e260d2bbSVaradarajan Narayanan .mux_bit = 2, \ 263*e260d2bbSVaradarajan Narayanan .pull_bit = 0, \ 264*e260d2bbSVaradarajan Narayanan .drv_bit = 6, \ 265*e260d2bbSVaradarajan Narayanan .oe_bit = 9, \ 266*e260d2bbSVaradarajan Narayanan .in_bit = 0, \ 267*e260d2bbSVaradarajan Narayanan .out_bit = 1, \ 268*e260d2bbSVaradarajan Narayanan .intr_enable_bit = 0, \ 269*e260d2bbSVaradarajan Narayanan .intr_status_bit = 0, \ 270*e260d2bbSVaradarajan Narayanan .intr_target_bit = 5, \ 271*e260d2bbSVaradarajan Narayanan .intr_raw_status_bit = 4, \ 272*e260d2bbSVaradarajan Narayanan .intr_polarity_bit = 1, \ 273*e260d2bbSVaradarajan Narayanan .intr_detection_bit = 2, \ 274*e260d2bbSVaradarajan Narayanan .intr_detection_width = 2, \ 275*e260d2bbSVaradarajan Narayanan } 276*e260d2bbSVaradarajan Narayanan 277*e260d2bbSVaradarajan Narayanan 278*e260d2bbSVaradarajan Narayanan enum ipq4019_functions { 279*e260d2bbSVaradarajan Narayanan qca_mux_gpio, 280*e260d2bbSVaradarajan Narayanan qca_mux_blsp_uart1, 281*e260d2bbSVaradarajan Narayanan qca_mux_blsp_i2c0, 282*e260d2bbSVaradarajan Narayanan qca_mux_blsp_i2c1, 283*e260d2bbSVaradarajan Narayanan qca_mux_blsp_uart0, 284*e260d2bbSVaradarajan Narayanan qca_mux_blsp_spi1, 285*e260d2bbSVaradarajan Narayanan qca_mux_blsp_spi0, 286*e260d2bbSVaradarajan Narayanan qca_mux_NA, 287*e260d2bbSVaradarajan Narayanan }; 288*e260d2bbSVaradarajan Narayanan 289*e260d2bbSVaradarajan Narayanan static const char * const gpio_groups[] = { 290*e260d2bbSVaradarajan Narayanan "gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7", 291*e260d2bbSVaradarajan Narayanan "gpio8", "gpio9", "gpio10", "gpio11", "gpio12", "gpio13", "gpio14", 292*e260d2bbSVaradarajan Narayanan "gpio15", "gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21", 293*e260d2bbSVaradarajan Narayanan "gpio22", "gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28", 294*e260d2bbSVaradarajan Narayanan "gpio29", "gpio30", "gpio31", "gpio32", "gpio33", "gpio34", "gpio35", 295*e260d2bbSVaradarajan Narayanan "gpio36", "gpio37", "gpio38", "gpio39", "gpio40", "gpio41", "gpio42", 296*e260d2bbSVaradarajan Narayanan "gpio43", "gpio44", "gpio45", "gpio46", "gpio47", "gpio48", "gpio49", 297*e260d2bbSVaradarajan Narayanan "gpio50", "gpio51", "gpio52", "gpio53", "gpio54", "gpio55", "gpio56", 298*e260d2bbSVaradarajan Narayanan "gpio57", "gpio58", "gpio59", "gpio60", "gpio61", "gpio62", "gpio63", 299*e260d2bbSVaradarajan Narayanan "gpio64", "gpio65", "gpio66", "gpio67", "gpio68", "gpio69", "gpio70", 300*e260d2bbSVaradarajan Narayanan "gpio71", "gpio72", "gpio73", "gpio74", "gpio75", "gpio76", "gpio77", 301*e260d2bbSVaradarajan Narayanan "gpio78", "gpio79", "gpio80", "gpio81", "gpio82", "gpio83", "gpio84", 302*e260d2bbSVaradarajan Narayanan "gpio85", "gpio86", "gpio87", "gpio88", "gpio89", "gpio90", "gpio91", 303*e260d2bbSVaradarajan Narayanan "gpio92", "gpio93", "gpio94", "gpio95", "gpio96", "gpio97", "gpio98", 304*e260d2bbSVaradarajan Narayanan "gpio99", 305*e260d2bbSVaradarajan Narayanan }; 306*e260d2bbSVaradarajan Narayanan 307*e260d2bbSVaradarajan Narayanan static const char * const blsp_uart1_groups[] = { 308*e260d2bbSVaradarajan Narayanan "gpio8", "gpio9", "gpio10", "gpio11", 309*e260d2bbSVaradarajan Narayanan }; 310*e260d2bbSVaradarajan Narayanan static const char * const blsp_i2c0_groups[] = { 311*e260d2bbSVaradarajan Narayanan "gpio10", "gpio11", "gpio20", "gpio21", "gpio58", "gpio59", 312*e260d2bbSVaradarajan Narayanan }; 313*e260d2bbSVaradarajan Narayanan static const char * const blsp_spi0_groups[] = { 314*e260d2bbSVaradarajan Narayanan "gpio12", "gpio13", "gpio14", "gpio15", "gpio45", 315*e260d2bbSVaradarajan Narayanan "gpio54", "gpio55", "gpio56", "gpio57", 316*e260d2bbSVaradarajan Narayanan }; 317*e260d2bbSVaradarajan Narayanan static const char * const blsp_i2c1_groups[] = { 318*e260d2bbSVaradarajan Narayanan "gpio12", "gpio13", "gpio34", "gpio35", 319*e260d2bbSVaradarajan Narayanan }; 320*e260d2bbSVaradarajan Narayanan static const char * const blsp_uart0_groups[] = { 321*e260d2bbSVaradarajan Narayanan "gpio16", "gpio17", "gpio60", "gpio61", 322*e260d2bbSVaradarajan Narayanan }; 323*e260d2bbSVaradarajan Narayanan static const char * const blsp_spi1_groups[] = { 324*e260d2bbSVaradarajan Narayanan "gpio44", "gpio45", "gpio46", "gpio47", 325*e260d2bbSVaradarajan Narayanan }; 326*e260d2bbSVaradarajan Narayanan 327*e260d2bbSVaradarajan Narayanan static const struct msm_function ipq4019_functions[] = { 328*e260d2bbSVaradarajan Narayanan FUNCTION(gpio), 329*e260d2bbSVaradarajan Narayanan FUNCTION(blsp_uart1), 330*e260d2bbSVaradarajan Narayanan FUNCTION(blsp_i2c0), 331*e260d2bbSVaradarajan Narayanan FUNCTION(blsp_i2c1), 332*e260d2bbSVaradarajan Narayanan FUNCTION(blsp_uart0), 333*e260d2bbSVaradarajan Narayanan FUNCTION(blsp_spi1), 334*e260d2bbSVaradarajan Narayanan FUNCTION(blsp_spi0), 335*e260d2bbSVaradarajan Narayanan }; 336*e260d2bbSVaradarajan Narayanan 337*e260d2bbSVaradarajan Narayanan static const struct msm_pingroup ipq4019_groups[] = { 338*e260d2bbSVaradarajan Narayanan PINGROUP(0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 339*e260d2bbSVaradarajan Narayanan PINGROUP(1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 340*e260d2bbSVaradarajan Narayanan PINGROUP(2, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 341*e260d2bbSVaradarajan Narayanan PINGROUP(3, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 342*e260d2bbSVaradarajan Narayanan PINGROUP(4, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 343*e260d2bbSVaradarajan Narayanan PINGROUP(5, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 344*e260d2bbSVaradarajan Narayanan PINGROUP(6, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 345*e260d2bbSVaradarajan Narayanan PINGROUP(7, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 346*e260d2bbSVaradarajan Narayanan PINGROUP(8, blsp_uart1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 347*e260d2bbSVaradarajan Narayanan PINGROUP(9, blsp_uart1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 348*e260d2bbSVaradarajan Narayanan PINGROUP(10, blsp_uart1, NA, NA, blsp_i2c0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 349*e260d2bbSVaradarajan Narayanan PINGROUP(11, blsp_uart1, NA, NA, blsp_i2c0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 350*e260d2bbSVaradarajan Narayanan PINGROUP(12, blsp_spi0, blsp_i2c1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 351*e260d2bbSVaradarajan Narayanan PINGROUP(13, blsp_spi0, blsp_i2c1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 352*e260d2bbSVaradarajan Narayanan PINGROUP(14, blsp_spi0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 353*e260d2bbSVaradarajan Narayanan PINGROUP(15, blsp_spi0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 354*e260d2bbSVaradarajan Narayanan PINGROUP(16, blsp_uart0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 355*e260d2bbSVaradarajan Narayanan PINGROUP(17, blsp_uart0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 356*e260d2bbSVaradarajan Narayanan PINGROUP(18, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 357*e260d2bbSVaradarajan Narayanan PINGROUP(19, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 358*e260d2bbSVaradarajan Narayanan PINGROUP(20, blsp_i2c0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 359*e260d2bbSVaradarajan Narayanan PINGROUP(21, blsp_i2c0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 360*e260d2bbSVaradarajan Narayanan PINGROUP(22, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 361*e260d2bbSVaradarajan Narayanan PINGROUP(23, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 362*e260d2bbSVaradarajan Narayanan PINGROUP(24, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 363*e260d2bbSVaradarajan Narayanan PINGROUP(25, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 364*e260d2bbSVaradarajan Narayanan PINGROUP(26, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 365*e260d2bbSVaradarajan Narayanan PINGROUP(27, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 366*e260d2bbSVaradarajan Narayanan PINGROUP(28, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 367*e260d2bbSVaradarajan Narayanan PINGROUP(29, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 368*e260d2bbSVaradarajan Narayanan PINGROUP(30, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 369*e260d2bbSVaradarajan Narayanan PINGROUP(31, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 370*e260d2bbSVaradarajan Narayanan PINGROUP(32, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 371*e260d2bbSVaradarajan Narayanan PINGROUP(33, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 372*e260d2bbSVaradarajan Narayanan PINGROUP(34, blsp_i2c1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 373*e260d2bbSVaradarajan Narayanan PINGROUP(35, blsp_i2c1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 374*e260d2bbSVaradarajan Narayanan PINGROUP(36, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 375*e260d2bbSVaradarajan Narayanan PINGROUP(37, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 376*e260d2bbSVaradarajan Narayanan PINGROUP(38, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 377*e260d2bbSVaradarajan Narayanan PINGROUP(39, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 378*e260d2bbSVaradarajan Narayanan PINGROUP(40, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 379*e260d2bbSVaradarajan Narayanan PINGROUP(41, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 380*e260d2bbSVaradarajan Narayanan PINGROUP(42, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 381*e260d2bbSVaradarajan Narayanan PINGROUP(43, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 382*e260d2bbSVaradarajan Narayanan PINGROUP(44, NA, blsp_spi1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 383*e260d2bbSVaradarajan Narayanan PINGROUP(45, NA, blsp_spi1, blsp_spi0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 384*e260d2bbSVaradarajan Narayanan PINGROUP(46, NA, blsp_spi1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 385*e260d2bbSVaradarajan Narayanan PINGROUP(47, NA, blsp_spi1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 386*e260d2bbSVaradarajan Narayanan PINGROUP(48, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 387*e260d2bbSVaradarajan Narayanan PINGROUP(49, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 388*e260d2bbSVaradarajan Narayanan PINGROUP(50, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 389*e260d2bbSVaradarajan Narayanan PINGROUP(51, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 390*e260d2bbSVaradarajan Narayanan PINGROUP(52, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 391*e260d2bbSVaradarajan Narayanan PINGROUP(53, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 392*e260d2bbSVaradarajan Narayanan PINGROUP(54, NA, blsp_spi0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 393*e260d2bbSVaradarajan Narayanan PINGROUP(55, NA, blsp_spi0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 394*e260d2bbSVaradarajan Narayanan PINGROUP(56, NA, blsp_spi0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 395*e260d2bbSVaradarajan Narayanan PINGROUP(57, NA, blsp_spi0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 396*e260d2bbSVaradarajan Narayanan PINGROUP(58, NA, NA, blsp_i2c0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 397*e260d2bbSVaradarajan Narayanan PINGROUP(59, NA, blsp_i2c0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 398*e260d2bbSVaradarajan Narayanan PINGROUP(60, NA, blsp_uart0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 399*e260d2bbSVaradarajan Narayanan PINGROUP(61, NA, blsp_uart0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 400*e260d2bbSVaradarajan Narayanan PINGROUP(62, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 401*e260d2bbSVaradarajan Narayanan PINGROUP(63, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 402*e260d2bbSVaradarajan Narayanan PINGROUP(64, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 403*e260d2bbSVaradarajan Narayanan PINGROUP(65, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 404*e260d2bbSVaradarajan Narayanan PINGROUP(66, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 405*e260d2bbSVaradarajan Narayanan PINGROUP(67, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 406*e260d2bbSVaradarajan Narayanan PINGROUP(68, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 407*e260d2bbSVaradarajan Narayanan PINGROUP(69, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 408*e260d2bbSVaradarajan Narayanan }; 409*e260d2bbSVaradarajan Narayanan 410*e260d2bbSVaradarajan Narayanan static const struct msm_pinctrl_soc_data ipq4019_pinctrl = { 411*e260d2bbSVaradarajan Narayanan .pins = ipq4019_pins, 412*e260d2bbSVaradarajan Narayanan .npins = ARRAY_SIZE(ipq4019_pins), 413*e260d2bbSVaradarajan Narayanan .functions = ipq4019_functions, 414*e260d2bbSVaradarajan Narayanan .nfunctions = ARRAY_SIZE(ipq4019_functions), 415*e260d2bbSVaradarajan Narayanan .groups = ipq4019_groups, 416*e260d2bbSVaradarajan Narayanan .ngroups = ARRAY_SIZE(ipq4019_groups), 417*e260d2bbSVaradarajan Narayanan .ngpios = 70, 418*e260d2bbSVaradarajan Narayanan }; 419*e260d2bbSVaradarajan Narayanan 420*e260d2bbSVaradarajan Narayanan static int ipq4019_pinctrl_probe(struct platform_device *pdev) 421*e260d2bbSVaradarajan Narayanan { 422*e260d2bbSVaradarajan Narayanan return msm_pinctrl_probe(pdev, &ipq4019_pinctrl); 423*e260d2bbSVaradarajan Narayanan } 424*e260d2bbSVaradarajan Narayanan 425*e260d2bbSVaradarajan Narayanan static const struct of_device_id ipq4019_pinctrl_of_match[] = { 426*e260d2bbSVaradarajan Narayanan { .compatible = "qcom,ipq4019-pinctrl", }, 427*e260d2bbSVaradarajan Narayanan { }, 428*e260d2bbSVaradarajan Narayanan }; 429*e260d2bbSVaradarajan Narayanan 430*e260d2bbSVaradarajan Narayanan static struct platform_driver ipq4019_pinctrl_driver = { 431*e260d2bbSVaradarajan Narayanan .driver = { 432*e260d2bbSVaradarajan Narayanan .name = "ipq4019-pinctrl", 433*e260d2bbSVaradarajan Narayanan .of_match_table = ipq4019_pinctrl_of_match, 434*e260d2bbSVaradarajan Narayanan }, 435*e260d2bbSVaradarajan Narayanan .probe = ipq4019_pinctrl_probe, 436*e260d2bbSVaradarajan Narayanan .remove = msm_pinctrl_remove, 437*e260d2bbSVaradarajan Narayanan }; 438*e260d2bbSVaradarajan Narayanan 439*e260d2bbSVaradarajan Narayanan static int __init ipq4019_pinctrl_init(void) 440*e260d2bbSVaradarajan Narayanan { 441*e260d2bbSVaradarajan Narayanan return platform_driver_register(&ipq4019_pinctrl_driver); 442*e260d2bbSVaradarajan Narayanan } 443*e260d2bbSVaradarajan Narayanan arch_initcall(ipq4019_pinctrl_init); 444*e260d2bbSVaradarajan Narayanan 445*e260d2bbSVaradarajan Narayanan static void __exit ipq4019_pinctrl_exit(void) 446*e260d2bbSVaradarajan Narayanan { 447*e260d2bbSVaradarajan Narayanan platform_driver_unregister(&ipq4019_pinctrl_driver); 448*e260d2bbSVaradarajan Narayanan } 449*e260d2bbSVaradarajan Narayanan module_exit(ipq4019_pinctrl_exit); 450*e260d2bbSVaradarajan Narayanan 451*e260d2bbSVaradarajan Narayanan MODULE_DESCRIPTION("Qualcomm ipq4019 pinctrl driver"); 452*e260d2bbSVaradarajan Narayanan MODULE_LICENSE("GPL v2"); 453*e260d2bbSVaradarajan Narayanan MODULE_DEVICE_TABLE(of, ipq4019_pinctrl_of_match); 454