linux/drivers/pinctrl/qcom/pinctrl-msm8916.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright (c) 2015, The Linux Foundation. All rights reserved.
   4 */
   5
   6#include <linux/module.h>
   7#include <linux/of.h>
   8#include <linux/platform_device.h>
   9#include <linux/pinctrl/pinctrl.h>
  10
  11#include "pinctrl-msm.h"
  12
  13static const struct pinctrl_pin_desc msm8916_pins[] = {
  14        PINCTRL_PIN(0, "GPIO_0"),
  15        PINCTRL_PIN(1, "GPIO_1"),
  16        PINCTRL_PIN(2, "GPIO_2"),
  17        PINCTRL_PIN(3, "GPIO_3"),
  18        PINCTRL_PIN(4, "GPIO_4"),
  19        PINCTRL_PIN(5, "GPIO_5"),
  20        PINCTRL_PIN(6, "GPIO_6"),
  21        PINCTRL_PIN(7, "GPIO_7"),
  22        PINCTRL_PIN(8, "GPIO_8"),
  23        PINCTRL_PIN(9, "GPIO_9"),
  24        PINCTRL_PIN(10, "GPIO_10"),
  25        PINCTRL_PIN(11, "GPIO_11"),
  26        PINCTRL_PIN(12, "GPIO_12"),
  27        PINCTRL_PIN(13, "GPIO_13"),
  28        PINCTRL_PIN(14, "GPIO_14"),
  29        PINCTRL_PIN(15, "GPIO_15"),
  30        PINCTRL_PIN(16, "GPIO_16"),
  31        PINCTRL_PIN(17, "GPIO_17"),
  32        PINCTRL_PIN(18, "GPIO_18"),
  33        PINCTRL_PIN(19, "GPIO_19"),
  34        PINCTRL_PIN(20, "GPIO_20"),
  35        PINCTRL_PIN(21, "GPIO_21"),
  36        PINCTRL_PIN(22, "GPIO_22"),
  37        PINCTRL_PIN(23, "GPIO_23"),
  38        PINCTRL_PIN(24, "GPIO_24"),
  39        PINCTRL_PIN(25, "GPIO_25"),
  40        PINCTRL_PIN(26, "GPIO_26"),
  41        PINCTRL_PIN(27, "GPIO_27"),
  42        PINCTRL_PIN(28, "GPIO_28"),
  43        PINCTRL_PIN(29, "GPIO_29"),
  44        PINCTRL_PIN(30, "GPIO_30"),
  45        PINCTRL_PIN(31, "GPIO_31"),
  46        PINCTRL_PIN(32, "GPIO_32"),
  47        PINCTRL_PIN(33, "GPIO_33"),
  48        PINCTRL_PIN(34, "GPIO_34"),
  49        PINCTRL_PIN(35, "GPIO_35"),
  50        PINCTRL_PIN(36, "GPIO_36"),
  51        PINCTRL_PIN(37, "GPIO_37"),
  52        PINCTRL_PIN(38, "GPIO_38"),
  53        PINCTRL_PIN(39, "GPIO_39"),
  54        PINCTRL_PIN(40, "GPIO_40"),
  55        PINCTRL_PIN(41, "GPIO_41"),
  56        PINCTRL_PIN(42, "GPIO_42"),
  57        PINCTRL_PIN(43, "GPIO_43"),
  58        PINCTRL_PIN(44, "GPIO_44"),
  59        PINCTRL_PIN(45, "GPIO_45"),
  60        PINCTRL_PIN(46, "GPIO_46"),
  61        PINCTRL_PIN(47, "GPIO_47"),
  62        PINCTRL_PIN(48, "GPIO_48"),
  63        PINCTRL_PIN(49, "GPIO_49"),
  64        PINCTRL_PIN(50, "GPIO_50"),
  65        PINCTRL_PIN(51, "GPIO_51"),
  66        PINCTRL_PIN(52, "GPIO_52"),
  67        PINCTRL_PIN(53, "GPIO_53"),
  68        PINCTRL_PIN(54, "GPIO_54"),
  69        PINCTRL_PIN(55, "GPIO_55"),
  70        PINCTRL_PIN(56, "GPIO_56"),
  71        PINCTRL_PIN(57, "GPIO_57"),
  72        PINCTRL_PIN(58, "GPIO_58"),
  73        PINCTRL_PIN(59, "GPIO_59"),
  74        PINCTRL_PIN(60, "GPIO_60"),
  75        PINCTRL_PIN(61, "GPIO_61"),
  76        PINCTRL_PIN(62, "GPIO_62"),
  77        PINCTRL_PIN(63, "GPIO_63"),
  78        PINCTRL_PIN(64, "GPIO_64"),
  79        PINCTRL_PIN(65, "GPIO_65"),
  80        PINCTRL_PIN(66, "GPIO_66"),
  81        PINCTRL_PIN(67, "GPIO_67"),
  82        PINCTRL_PIN(68, "GPIO_68"),
  83        PINCTRL_PIN(69, "GPIO_69"),
  84        PINCTRL_PIN(70, "GPIO_70"),
  85        PINCTRL_PIN(71, "GPIO_71"),
  86        PINCTRL_PIN(72, "GPIO_72"),
  87        PINCTRL_PIN(73, "GPIO_73"),
  88        PINCTRL_PIN(74, "GPIO_74"),
  89        PINCTRL_PIN(75, "GPIO_75"),
  90        PINCTRL_PIN(76, "GPIO_76"),
  91        PINCTRL_PIN(77, "GPIO_77"),
  92        PINCTRL_PIN(78, "GPIO_78"),
  93        PINCTRL_PIN(79, "GPIO_79"),
  94        PINCTRL_PIN(80, "GPIO_80"),
  95        PINCTRL_PIN(81, "GPIO_81"),
  96        PINCTRL_PIN(82, "GPIO_82"),
  97        PINCTRL_PIN(83, "GPIO_83"),
  98        PINCTRL_PIN(84, "GPIO_84"),
  99        PINCTRL_PIN(85, "GPIO_85"),
 100        PINCTRL_PIN(86, "GPIO_86"),
 101        PINCTRL_PIN(87, "GPIO_87"),
 102        PINCTRL_PIN(88, "GPIO_88"),
 103        PINCTRL_PIN(89, "GPIO_89"),
 104        PINCTRL_PIN(90, "GPIO_90"),
 105        PINCTRL_PIN(91, "GPIO_91"),
 106        PINCTRL_PIN(92, "GPIO_92"),
 107        PINCTRL_PIN(93, "GPIO_93"),
 108        PINCTRL_PIN(94, "GPIO_94"),
 109        PINCTRL_PIN(95, "GPIO_95"),
 110        PINCTRL_PIN(96, "GPIO_96"),
 111        PINCTRL_PIN(97, "GPIO_97"),
 112        PINCTRL_PIN(98, "GPIO_98"),
 113        PINCTRL_PIN(99, "GPIO_99"),
 114        PINCTRL_PIN(100, "GPIO_100"),
 115        PINCTRL_PIN(101, "GPIO_101"),
 116        PINCTRL_PIN(102, "GPIO_102"),
 117        PINCTRL_PIN(103, "GPIO_103"),
 118        PINCTRL_PIN(104, "GPIO_104"),
 119        PINCTRL_PIN(105, "GPIO_105"),
 120        PINCTRL_PIN(106, "GPIO_106"),
 121        PINCTRL_PIN(107, "GPIO_107"),
 122        PINCTRL_PIN(108, "GPIO_108"),
 123        PINCTRL_PIN(109, "GPIO_109"),
 124        PINCTRL_PIN(110, "GPIO_110"),
 125        PINCTRL_PIN(111, "GPIO_111"),
 126        PINCTRL_PIN(112, "GPIO_112"),
 127        PINCTRL_PIN(113, "GPIO_113"),
 128        PINCTRL_PIN(114, "GPIO_114"),
 129        PINCTRL_PIN(115, "GPIO_115"),
 130        PINCTRL_PIN(116, "GPIO_116"),
 131        PINCTRL_PIN(117, "GPIO_117"),
 132        PINCTRL_PIN(118, "GPIO_118"),
 133        PINCTRL_PIN(119, "GPIO_119"),
 134        PINCTRL_PIN(120, "GPIO_120"),
 135        PINCTRL_PIN(121, "GPIO_121"),
 136        PINCTRL_PIN(122, "SDC1_CLK"),
 137        PINCTRL_PIN(123, "SDC1_CMD"),
 138        PINCTRL_PIN(124, "SDC1_DATA"),
 139        PINCTRL_PIN(125, "SDC2_CLK"),
 140        PINCTRL_PIN(126, "SDC2_CMD"),
 141        PINCTRL_PIN(127, "SDC2_DATA"),
 142        PINCTRL_PIN(128, "QDSD_CLK"),
 143        PINCTRL_PIN(129, "QDSD_CMD"),
 144        PINCTRL_PIN(130, "QDSD_DATA0"),
 145        PINCTRL_PIN(131, "QDSD_DATA1"),
 146        PINCTRL_PIN(132, "QDSD_DATA2"),
 147        PINCTRL_PIN(133, "QDSD_DATA3"),
 148};
 149
 150#define DECLARE_MSM_GPIO_PINS(pin)      \
 151        static const unsigned int gpio##pin##_pins[] = { pin }
 152
 153DECLARE_MSM_GPIO_PINS(0);
 154DECLARE_MSM_GPIO_PINS(1);
 155DECLARE_MSM_GPIO_PINS(2);
 156DECLARE_MSM_GPIO_PINS(3);
 157DECLARE_MSM_GPIO_PINS(4);
 158DECLARE_MSM_GPIO_PINS(5);
 159DECLARE_MSM_GPIO_PINS(6);
 160DECLARE_MSM_GPIO_PINS(7);
 161DECLARE_MSM_GPIO_PINS(8);
 162DECLARE_MSM_GPIO_PINS(9);
 163DECLARE_MSM_GPIO_PINS(10);
 164DECLARE_MSM_GPIO_PINS(11);
 165DECLARE_MSM_GPIO_PINS(12);
 166DECLARE_MSM_GPIO_PINS(13);
 167DECLARE_MSM_GPIO_PINS(14);
 168DECLARE_MSM_GPIO_PINS(15);
 169DECLARE_MSM_GPIO_PINS(16);
 170DECLARE_MSM_GPIO_PINS(17);
 171DECLARE_MSM_GPIO_PINS(18);
 172DECLARE_MSM_GPIO_PINS(19);
 173DECLARE_MSM_GPIO_PINS(20);
 174DECLARE_MSM_GPIO_PINS(21);
 175DECLARE_MSM_GPIO_PINS(22);
 176DECLARE_MSM_GPIO_PINS(23);
 177DECLARE_MSM_GPIO_PINS(24);
 178DECLARE_MSM_GPIO_PINS(25);
 179DECLARE_MSM_GPIO_PINS(26);
 180DECLARE_MSM_GPIO_PINS(27);
 181DECLARE_MSM_GPIO_PINS(28);
 182DECLARE_MSM_GPIO_PINS(29);
 183DECLARE_MSM_GPIO_PINS(30);
 184DECLARE_MSM_GPIO_PINS(31);
 185DECLARE_MSM_GPIO_PINS(32);
 186DECLARE_MSM_GPIO_PINS(33);
 187DECLARE_MSM_GPIO_PINS(34);
 188DECLARE_MSM_GPIO_PINS(35);
 189DECLARE_MSM_GPIO_PINS(36);
 190DECLARE_MSM_GPIO_PINS(37);
 191DECLARE_MSM_GPIO_PINS(38);
 192DECLARE_MSM_GPIO_PINS(39);
 193DECLARE_MSM_GPIO_PINS(40);
 194DECLARE_MSM_GPIO_PINS(41);
 195DECLARE_MSM_GPIO_PINS(42);
 196DECLARE_MSM_GPIO_PINS(43);
 197DECLARE_MSM_GPIO_PINS(44);
 198DECLARE_MSM_GPIO_PINS(45);
 199DECLARE_MSM_GPIO_PINS(46);
 200DECLARE_MSM_GPIO_PINS(47);
 201DECLARE_MSM_GPIO_PINS(48);
 202DECLARE_MSM_GPIO_PINS(49);
 203DECLARE_MSM_GPIO_PINS(50);
 204DECLARE_MSM_GPIO_PINS(51);
 205DECLARE_MSM_GPIO_PINS(52);
 206DECLARE_MSM_GPIO_PINS(53);
 207DECLARE_MSM_GPIO_PINS(54);
 208DECLARE_MSM_GPIO_PINS(55);
 209DECLARE_MSM_GPIO_PINS(56);
 210DECLARE_MSM_GPIO_PINS(57);
 211DECLARE_MSM_GPIO_PINS(58);
 212DECLARE_MSM_GPIO_PINS(59);
 213DECLARE_MSM_GPIO_PINS(60);
 214DECLARE_MSM_GPIO_PINS(61);
 215DECLARE_MSM_GPIO_PINS(62);
 216DECLARE_MSM_GPIO_PINS(63);
 217DECLARE_MSM_GPIO_PINS(64);
 218DECLARE_MSM_GPIO_PINS(65);
 219DECLARE_MSM_GPIO_PINS(66);
 220DECLARE_MSM_GPIO_PINS(67);
 221DECLARE_MSM_GPIO_PINS(68);
 222DECLARE_MSM_GPIO_PINS(69);
 223DECLARE_MSM_GPIO_PINS(70);
 224DECLARE_MSM_GPIO_PINS(71);
 225DECLARE_MSM_GPIO_PINS(72);
 226DECLARE_MSM_GPIO_PINS(73);
 227DECLARE_MSM_GPIO_PINS(74);
 228DECLARE_MSM_GPIO_PINS(75);
 229DECLARE_MSM_GPIO_PINS(76);
 230DECLARE_MSM_GPIO_PINS(77);
 231DECLARE_MSM_GPIO_PINS(78);
 232DECLARE_MSM_GPIO_PINS(79);
 233DECLARE_MSM_GPIO_PINS(80);
 234DECLARE_MSM_GPIO_PINS(81);
 235DECLARE_MSM_GPIO_PINS(82);
 236DECLARE_MSM_GPIO_PINS(83);
 237DECLARE_MSM_GPIO_PINS(84);
 238DECLARE_MSM_GPIO_PINS(85);
 239DECLARE_MSM_GPIO_PINS(86);
 240DECLARE_MSM_GPIO_PINS(87);
 241DECLARE_MSM_GPIO_PINS(88);
 242DECLARE_MSM_GPIO_PINS(89);
 243DECLARE_MSM_GPIO_PINS(90);
 244DECLARE_MSM_GPIO_PINS(91);
 245DECLARE_MSM_GPIO_PINS(92);
 246DECLARE_MSM_GPIO_PINS(93);
 247DECLARE_MSM_GPIO_PINS(94);
 248DECLARE_MSM_GPIO_PINS(95);
 249DECLARE_MSM_GPIO_PINS(96);
 250DECLARE_MSM_GPIO_PINS(97);
 251DECLARE_MSM_GPIO_PINS(98);
 252DECLARE_MSM_GPIO_PINS(99);
 253DECLARE_MSM_GPIO_PINS(100);
 254DECLARE_MSM_GPIO_PINS(101);
 255DECLARE_MSM_GPIO_PINS(102);
 256DECLARE_MSM_GPIO_PINS(103);
 257DECLARE_MSM_GPIO_PINS(104);
 258DECLARE_MSM_GPIO_PINS(105);
 259DECLARE_MSM_GPIO_PINS(106);
 260DECLARE_MSM_GPIO_PINS(107);
 261DECLARE_MSM_GPIO_PINS(108);
 262DECLARE_MSM_GPIO_PINS(109);
 263DECLARE_MSM_GPIO_PINS(110);
 264DECLARE_MSM_GPIO_PINS(111);
 265DECLARE_MSM_GPIO_PINS(112);
 266DECLARE_MSM_GPIO_PINS(113);
 267DECLARE_MSM_GPIO_PINS(114);
 268DECLARE_MSM_GPIO_PINS(115);
 269DECLARE_MSM_GPIO_PINS(116);
 270DECLARE_MSM_GPIO_PINS(117);
 271DECLARE_MSM_GPIO_PINS(118);
 272DECLARE_MSM_GPIO_PINS(119);
 273DECLARE_MSM_GPIO_PINS(120);
 274DECLARE_MSM_GPIO_PINS(121);
 275
 276static const unsigned int sdc1_clk_pins[] = { 122 };
 277static const unsigned int sdc1_cmd_pins[] = { 123 };
 278static const unsigned int sdc1_data_pins[] = { 124 };
 279static const unsigned int sdc2_clk_pins[] = { 125 };
 280static const unsigned int sdc2_cmd_pins[] = { 126 };
 281static const unsigned int sdc2_data_pins[] = { 127 };
 282static const unsigned int qdsd_clk_pins[] = { 128 };
 283static const unsigned int qdsd_cmd_pins[] = { 129 };
 284static const unsigned int qdsd_data0_pins[] = { 130 };
 285static const unsigned int qdsd_data1_pins[] = { 131 };
 286static const unsigned int qdsd_data2_pins[] = { 132 };
 287static const unsigned int qdsd_data3_pins[] = { 133 };
 288
 289#define FUNCTION(fname)                                 \
 290        [MSM_MUX_##fname] = {                           \
 291                .name = #fname,                         \
 292                .groups = fname##_groups,               \
 293                .ngroups = ARRAY_SIZE(fname##_groups),  \
 294        }
 295
 296#define PINGROUP(id, f1, f2, f3, f4, f5, f6, f7, f8, f9)        \
 297        {                                                       \
 298                .name = "gpio" #id,                             \
 299                .pins = gpio##id##_pins,                        \
 300                .npins = ARRAY_SIZE(gpio##id##_pins),           \
 301                .funcs = (int[]){                               \
 302                        MSM_MUX_gpio,                           \
 303                        MSM_MUX_##f1,                           \
 304                        MSM_MUX_##f2,                           \
 305                        MSM_MUX_##f3,                           \
 306                        MSM_MUX_##f4,                           \
 307                        MSM_MUX_##f5,                           \
 308                        MSM_MUX_##f6,                           \
 309                        MSM_MUX_##f7,                           \
 310                        MSM_MUX_##f8,                           \
 311                        MSM_MUX_##f9                            \
 312                },                                              \
 313                .nfuncs = 10,                                   \
 314                .ctl_reg = 0x1000 * id,                         \
 315                .io_reg = 0x4 + 0x1000 * id,                    \
 316                .intr_cfg_reg = 0x8 + 0x1000 * id,              \
 317                .intr_status_reg = 0xc + 0x1000 * id,           \
 318                .intr_target_reg = 0x8 + 0x1000 * id,           \
 319                .mux_bit = 2,                                   \
 320                .pull_bit = 0,                                  \
 321                .drv_bit = 6,                                   \
 322                .oe_bit = 9,                                    \
 323                .in_bit = 0,                                    \
 324                .out_bit = 1,                                   \
 325                .intr_enable_bit = 0,                           \
 326                .intr_status_bit = 0,                           \
 327                .intr_target_bit = 5,                           \
 328                .intr_target_kpss_val = 4,                      \
 329                .intr_raw_status_bit = 4,                       \
 330                .intr_polarity_bit = 1,                         \
 331                .intr_detection_bit = 2,                        \
 332                .intr_detection_width = 2,                      \
 333        }
 334
 335#define SDC_PINGROUP(pg_name, ctl, pull, drv)   \
 336        {                                               \
 337                .name = #pg_name,                       \
 338                .pins = pg_name##_pins,                 \
 339                .npins = ARRAY_SIZE(pg_name##_pins),    \
 340                .ctl_reg = ctl,                         \
 341                .io_reg = 0,                            \
 342                .intr_cfg_reg = 0,                      \
 343                .intr_status_reg = 0,                   \
 344                .intr_target_reg = 0,                   \
 345                .mux_bit = -1,                          \
 346                .pull_bit = pull,                       \
 347                .drv_bit = drv,                         \
 348                .oe_bit = -1,                           \
 349                .in_bit = -1,                           \
 350                .out_bit = -1,                          \
 351                .intr_enable_bit = -1,                  \
 352                .intr_status_bit = -1,                  \
 353                .intr_target_bit = -1,                  \
 354                .intr_target_kpss_val = -1,             \
 355                .intr_raw_status_bit = -1,              \
 356                .intr_polarity_bit = -1,                \
 357                .intr_detection_bit = -1,               \
 358                .intr_detection_width = -1,             \
 359        }
 360
 361enum msm8916_functions {
 362        MSM_MUX_adsp_ext,
 363        MSM_MUX_alsp_int,
 364        MSM_MUX_atest_bbrx0,
 365        MSM_MUX_atest_bbrx1,
 366        MSM_MUX_atest_char,
 367        MSM_MUX_atest_char0,
 368        MSM_MUX_atest_char1,
 369        MSM_MUX_atest_char2,
 370        MSM_MUX_atest_char3,
 371        MSM_MUX_atest_combodac,
 372        MSM_MUX_atest_gpsadc0,
 373        MSM_MUX_atest_gpsadc1,
 374        MSM_MUX_atest_tsens,
 375        MSM_MUX_atest_wlan0,
 376        MSM_MUX_atest_wlan1,
 377        MSM_MUX_backlight_en,
 378        MSM_MUX_bimc_dte0,
 379        MSM_MUX_bimc_dte1,
 380        MSM_MUX_blsp_i2c1,
 381        MSM_MUX_blsp_i2c2,
 382        MSM_MUX_blsp_i2c3,
 383        MSM_MUX_blsp_i2c4,
 384        MSM_MUX_blsp_i2c5,
 385        MSM_MUX_blsp_i2c6,
 386        MSM_MUX_blsp_spi1,
 387        MSM_MUX_blsp_spi1_cs1,
 388        MSM_MUX_blsp_spi1_cs2,
 389        MSM_MUX_blsp_spi1_cs3,
 390        MSM_MUX_blsp_spi2,
 391        MSM_MUX_blsp_spi2_cs1,
 392        MSM_MUX_blsp_spi2_cs2,
 393        MSM_MUX_blsp_spi2_cs3,
 394        MSM_MUX_blsp_spi3,
 395        MSM_MUX_blsp_spi3_cs1,
 396        MSM_MUX_blsp_spi3_cs2,
 397        MSM_MUX_blsp_spi3_cs3,
 398        MSM_MUX_blsp_spi4,
 399        MSM_MUX_blsp_spi5,
 400        MSM_MUX_blsp_spi6,
 401        MSM_MUX_blsp_uart1,
 402        MSM_MUX_blsp_uart2,
 403        MSM_MUX_blsp_uim1,
 404        MSM_MUX_blsp_uim2,
 405        MSM_MUX_cam1_rst,
 406        MSM_MUX_cam1_standby,
 407        MSM_MUX_cam_mclk0,
 408        MSM_MUX_cam_mclk1,
 409        MSM_MUX_cci_async,
 410        MSM_MUX_cci_i2c,
 411        MSM_MUX_cci_timer0,
 412        MSM_MUX_cci_timer1,
 413        MSM_MUX_cci_timer2,
 414        MSM_MUX_cdc_pdm0,
 415        MSM_MUX_codec_mad,
 416        MSM_MUX_dbg_out,
 417        MSM_MUX_display_5v,
 418        MSM_MUX_dmic0_clk,
 419        MSM_MUX_dmic0_data,
 420        MSM_MUX_dsi_rst,
 421        MSM_MUX_ebi0_wrcdc,
 422        MSM_MUX_euro_us,
 423        MSM_MUX_ext_lpass,
 424        MSM_MUX_flash_strobe,
 425        MSM_MUX_gcc_gp1_clk_a,
 426        MSM_MUX_gcc_gp1_clk_b,
 427        MSM_MUX_gcc_gp2_clk_a,
 428        MSM_MUX_gcc_gp2_clk_b,
 429        MSM_MUX_gcc_gp3_clk_a,
 430        MSM_MUX_gcc_gp3_clk_b,
 431        MSM_MUX_gpio,
 432        MSM_MUX_gsm0_tx0,
 433        MSM_MUX_gsm0_tx1,
 434        MSM_MUX_gsm1_tx0,
 435        MSM_MUX_gsm1_tx1,
 436        MSM_MUX_gyro_accl,
 437        MSM_MUX_kpsns0,
 438        MSM_MUX_kpsns1,
 439        MSM_MUX_kpsns2,
 440        MSM_MUX_ldo_en,
 441        MSM_MUX_ldo_update,
 442        MSM_MUX_mag_int,
 443        MSM_MUX_mdp_vsync,
 444        MSM_MUX_modem_tsync,
 445        MSM_MUX_m_voc,
 446        MSM_MUX_nav_pps,
 447        MSM_MUX_nav_tsync,
 448        MSM_MUX_pa_indicator,
 449        MSM_MUX_pbs0,
 450        MSM_MUX_pbs1,
 451        MSM_MUX_pbs2,
 452        MSM_MUX_pri_mi2s,
 453        MSM_MUX_pri_mi2s_ws,
 454        MSM_MUX_prng_rosc,
 455        MSM_MUX_pwr_crypto_enabled_a,
 456        MSM_MUX_pwr_crypto_enabled_b,
 457        MSM_MUX_pwr_modem_enabled_a,
 458        MSM_MUX_pwr_modem_enabled_b,
 459        MSM_MUX_pwr_nav_enabled_a,
 460        MSM_MUX_pwr_nav_enabled_b,
 461        MSM_MUX_qdss_ctitrig_in_a0,
 462        MSM_MUX_qdss_ctitrig_in_a1,
 463        MSM_MUX_qdss_ctitrig_in_b0,
 464        MSM_MUX_qdss_ctitrig_in_b1,
 465        MSM_MUX_qdss_ctitrig_out_a0,
 466        MSM_MUX_qdss_ctitrig_out_a1,
 467        MSM_MUX_qdss_ctitrig_out_b0,
 468        MSM_MUX_qdss_ctitrig_out_b1,
 469        MSM_MUX_qdss_traceclk_a,
 470        MSM_MUX_qdss_traceclk_b,
 471        MSM_MUX_qdss_tracectl_a,
 472        MSM_MUX_qdss_tracectl_b,
 473        MSM_MUX_qdss_tracedata_a,
 474        MSM_MUX_qdss_tracedata_b,
 475        MSM_MUX_reset_n,
 476        MSM_MUX_sd_card,
 477        MSM_MUX_sd_write,
 478        MSM_MUX_sec_mi2s,
 479        MSM_MUX_smb_int,
 480        MSM_MUX_ssbi_wtr0,
 481        MSM_MUX_ssbi_wtr1,
 482        MSM_MUX_uim1,
 483        MSM_MUX_uim2,
 484        MSM_MUX_uim3,
 485        MSM_MUX_uim_batt,
 486        MSM_MUX_wcss_bt,
 487        MSM_MUX_wcss_fm,
 488        MSM_MUX_wcss_wlan,
 489        MSM_MUX_webcam1_rst,
 490        MSM_MUX_NA,
 491};
 492
 493static const char * const gpio_groups[] = {
 494        "gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7",
 495        "gpio8", "gpio9", "gpio10", "gpio11", "gpio12", "gpio13", "gpio14",
 496        "gpio15", "gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21",
 497        "gpio22", "gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28",
 498        "gpio29", "gpio30", "gpio31", "gpio32", "gpio33", "gpio34", "gpio35",
 499        "gpio36", "gpio37", "gpio38", "gpio39", "gpio40", "gpio41", "gpio42",
 500        "gpio43", "gpio44", "gpio45", "gpio46", "gpio47", "gpio48", "gpio49",
 501        "gpio50", "gpio51", "gpio52", "gpio53", "gpio54", "gpio55", "gpio56",
 502        "gpio57", "gpio58", "gpio59", "gpio60", "gpio61", "gpio62", "gpio63",
 503        "gpio64", "gpio65", "gpio66", "gpio67", "gpio68", "gpio69", "gpio70",
 504        "gpio71", "gpio72", "gpio73", "gpio74", "gpio75", "gpio76", "gpio77",
 505        "gpio78", "gpio79", "gpio80", "gpio81", "gpio82", "gpio83", "gpio84",
 506        "gpio85", "gpio86", "gpio87", "gpio88", "gpio89", "gpio90", "gpio91",
 507        "gpio92", "gpio93", "gpio94", "gpio95", "gpio96", "gpio97", "gpio98",
 508        "gpio99", "gpio100", "gpio101", "gpio102", "gpio103", "gpio104",
 509        "gpio105", "gpio106", "gpio107", "gpio108", "gpio109", "gpio110",
 510        "gpio111", "gpio112", "gpio113", "gpio114", "gpio115", "gpio116",
 511        "gpio117", "gpio118", "gpio119", "gpio120", "gpio121"
 512};
 513static const char * const adsp_ext_groups[] = { "gpio38" };
 514static const char * const alsp_int_groups[] = { "gpio113" };
 515static const char * const atest_bbrx0_groups[] = { "gpio17" };
 516static const char * const atest_bbrx1_groups[] = { "gpio16" };
 517static const char * const atest_char_groups[] = { "gpio62" };
 518static const char * const atest_char0_groups[] = { "gpio60" };
 519static const char * const atest_char1_groups[] = { "gpio59" };
 520static const char * const atest_char2_groups[] = { "gpio58" };
 521static const char * const atest_char3_groups[] = { "gpio57" };
 522static const char * const atest_combodac_groups[] = {
 523        "gpio4", "gpio12", "gpio13", "gpio20", "gpio21", "gpio28", "gpio29",
 524        "gpio30", "gpio39", "gpio40", "gpio41", "gpio42", "gpio43", "gpio44",
 525        "gpio45", "gpio46", "gpio47", "gpio48", "gpio69", "gpio107"
 526};
 527static const char * const atest_gpsadc0_groups[] = { "gpio7" };
 528static const char * const atest_gpsadc1_groups[] = { "gpio18" };
 529static const char * const atest_tsens_groups[] = { "gpio112" };
 530static const char * const atest_wlan0_groups[] = { "gpio22" };
 531static const char * const atest_wlan1_groups[] = { "gpio23" };
 532static const char * const backlight_en_groups[] = { "gpio98" };
 533static const char * const bimc_dte0_groups[] = { "gpio63", "gpio65" };
 534static const char * const bimc_dte1_groups[] = { "gpio64", "gpio66" };
 535static const char * const blsp_i2c1_groups[] = { "gpio2", "gpio3" };
 536static const char * const blsp_i2c2_groups[] = { "gpio6", "gpio7" };
 537static const char * const blsp_i2c3_groups[] = { "gpio10", "gpio11" };
 538static const char * const blsp_i2c4_groups[] = { "gpio14", "gpio15" };
 539static const char * const blsp_i2c5_groups[] = { "gpio18", "gpio19" };
 540static const char * const blsp_i2c6_groups[] = { "gpio22", "gpio23" };
 541static const char * const blsp_spi1_groups[] = {
 542        "gpio0", "gpio1", "gpio2", "gpio3"
 543};
 544static const char * const blsp_spi1_cs1_groups[] = { "gpio110" };
 545static const char * const blsp_spi1_cs2_groups[] = { "gpio16" };
 546static const char * const blsp_spi1_cs3_groups[] = { "gpio4" };
 547static const char * const blsp_spi2_groups[] = {
 548        "gpio4", "gpio5", "gpio6", "gpio7"
 549};
 550static const char * const blsp_spi2_cs1_groups[] = { "gpio121" };
 551static const char * const blsp_spi2_cs2_groups[] = { "gpio17" };
 552static const char * const blsp_spi2_cs3_groups[] = { "gpio5" };
 553static const char * const blsp_spi3_groups[] = {
 554        "gpio8", "gpio9", "gpio10", "gpio11"
 555};
 556static const char * const blsp_spi3_cs1_groups[] = { "gpio120" };
 557static const char * const blsp_spi3_cs2_groups[] = { "gpio37" };
 558static const char * const blsp_spi3_cs3_groups[] = { "gpio69" };
 559static const char * const blsp_spi4_groups[] = {
 560        "gpio12", "gpio13", "gpio14", "gpio15"
 561};
 562static const char * const blsp_spi5_groups[] = {
 563        "gpio16", "gpio17", "gpio18", "gpio19"
 564};
 565static const char * const blsp_spi6_groups[] = {
 566        "gpio20", "gpio21", "gpio22", "gpio23"
 567};
 568static const char * const blsp_uart1_groups[] = {
 569        "gpio0", "gpio1", "gpio2", "gpio3"
 570};
 571static const char * const blsp_uart2_groups[] = {
 572        "gpio4", "gpio5", "gpio6", "gpio7"
 573};
 574static const char * const blsp_uim1_groups[] = { "gpio0", "gpio1" };
 575static const char * const blsp_uim2_groups[] = { "gpio4", "gpio5" };
 576static const char * const cam1_rst_groups[] = { "gpio35" };
 577static const char * const cam1_standby_groups[] = { "gpio34" };
 578static const char * const cam_mclk0_groups[] = { "gpio26" };
 579static const char * const cam_mclk1_groups[] = { "gpio27" };
 580static const char * const cci_async_groups[] = { "gpio33" };
 581static const char * const cci_i2c_groups[] = { "gpio29", "gpio30" };
 582static const char * const cci_timer0_groups[] = { "gpio31" };
 583static const char * const cci_timer1_groups[] = { "gpio32" };
 584static const char * const cci_timer2_groups[] = { "gpio38" };
 585static const char * const cdc_pdm0_groups[] = {
 586        "gpio63", "gpio64", "gpio65", "gpio66", "gpio67", "gpio68"
 587};
 588static const char * const codec_mad_groups[] = { "gpio16" };
 589static const char * const dbg_out_groups[] = { "gpio47" };
 590static const char * const display_5v_groups[] = { "gpio97" };
 591static const char * const dmic0_clk_groups[] = { "gpio0" };
 592static const char * const dmic0_data_groups[] = { "gpio1" };
 593static const char * const dsi_rst_groups[] = { "gpio25" };
 594static const char * const ebi0_wrcdc_groups[] = { "gpio67" };
 595static const char * const euro_us_groups[] = { "gpio120" };
 596static const char * const ext_lpass_groups[] = { "gpio45" };
 597static const char * const flash_strobe_groups[] = { "gpio31", "gpio32" };
 598static const char * const gcc_gp1_clk_a_groups[] = { "gpio49" };
 599static const char * const gcc_gp1_clk_b_groups[] = { "gpio97" };
 600static const char * const gcc_gp2_clk_a_groups[] = { "gpio50" };
 601static const char * const gcc_gp2_clk_b_groups[] = { "gpio12" };
 602static const char * const gcc_gp3_clk_a_groups[] = { "gpio51" };
 603static const char * const gcc_gp3_clk_b_groups[] = { "gpio13" };
 604static const char * const gsm0_tx0_groups[] = { "gpio99" };
 605static const char * const gsm0_tx1_groups[] = { "gpio100" };
 606static const char * const gsm1_tx0_groups[] = { "gpio101" };
 607static const char * const gsm1_tx1_groups[] = { "gpio102" };
 608static const char * const gyro_accl_groups[] = {"gpio115" };
 609static const char * const kpsns0_groups[] = { "gpio107" };
 610static const char * const kpsns1_groups[] = { "gpio108" };
 611static const char * const kpsns2_groups[] = { "gpio109" };
 612static const char * const ldo_en_groups[] = { "gpio121" };
 613static const char * const ldo_update_groups[] = { "gpio120" };
 614static const char * const mag_int_groups[] = { "gpio69" };
 615static const char * const mdp_vsync_groups[] = { "gpio24", "gpio25" };
 616static const char * const modem_tsync_groups[] = { "gpio95" };
 617static const char * const m_voc_groups[] = { "gpio8", "gpio119" };
 618static const char * const nav_pps_groups[] = { "gpio95" };
 619static const char * const nav_tsync_groups[] = { "gpio95" };
 620static const char * const pa_indicator_groups[] = { "gpio86" };
 621static const char * const pbs0_groups[] = { "gpio107" };
 622static const char * const pbs1_groups[] = { "gpio108" };
 623static const char * const pbs2_groups[] = { "gpio109" };
 624static const char * const pri_mi2s_groups[] = {
 625        "gpio113", "gpio114", "gpio115", "gpio116"
 626};
 627static const char * const pri_mi2s_ws_groups[] = { "gpio110" };
 628static const char * const prng_rosc_groups[] = { "gpio43" };
 629static const char * const pwr_crypto_enabled_a_groups[] = { "gpio35" };
 630static const char * const pwr_crypto_enabled_b_groups[] = { "gpio115" };
 631static const char * const pwr_modem_enabled_a_groups[] = { "gpio28" };
 632static const char * const pwr_modem_enabled_b_groups[] = { "gpio113" };
 633static const char * const pwr_nav_enabled_a_groups[] = { "gpio34" };
 634static const char * const pwr_nav_enabled_b_groups[] = { "gpio114" };
 635static const char * const qdss_ctitrig_in_a0_groups[] = { "gpio20" };
 636static const char * const qdss_ctitrig_in_a1_groups[] = { "gpio49" };
 637static const char * const qdss_ctitrig_in_b0_groups[] = { "gpio21" };
 638static const char * const qdss_ctitrig_in_b1_groups[] = { "gpio50" };
 639static const char * const qdss_ctitrig_out_a0_groups[] = { "gpio23" };
 640static const char * const qdss_ctitrig_out_a1_groups[] = { "gpio52" };
 641static const char * const qdss_ctitrig_out_b0_groups[] = { "gpio22" };
 642static const char * const qdss_ctitrig_out_b1_groups[] = { "gpio51" };
 643static const char * const qdss_traceclk_a_groups[] = { "gpio46" };
 644static const char * const qdss_traceclk_b_groups[] = { "gpio5" };
 645static const char * const qdss_tracectl_a_groups[] = { "gpio45" };
 646static const char * const qdss_tracectl_b_groups[] = { "gpio4" };
 647static const char * const qdss_tracedata_a_groups[] = {
 648        "gpio8", "gpio9", "gpio10", "gpio39", "gpio40", "gpio41", "gpio42",
 649        "gpio43", "gpio47", "gpio48", "gpio62", "gpio69", "gpio112", "gpio113",
 650        "gpio114", "gpio115"
 651};
 652static const char * const qdss_tracedata_b_groups[] = {
 653        "gpio26", "gpio27", "gpio28", "gpio29", "gpio30", "gpio31", "gpio32",
 654        "gpio33", "gpio34", "gpio35", "gpio36", "gpio37", "gpio110", "gpio111",
 655        "gpio120", "gpio121"
 656};
 657static const char * const reset_n_groups[] = { "gpio36" };
 658static const char * const sd_card_groups[] = { "gpio38" };
 659static const char * const sd_write_groups[] = { "gpio121" };
 660static const char * const sec_mi2s_groups[] = {
 661        "gpio112", "gpio117", "gpio118", "gpio119"
 662};
 663static const char * const smb_int_groups[] = { "gpio62" };
 664static const char * const ssbi_wtr0_groups[] = { "gpio103", "gpio104" };
 665static const char * const ssbi_wtr1_groups[] = { "gpio105", "gpio106" };
 666static const char * const uim1_groups[] = {
 667        "gpio57", "gpio58", "gpio59", "gpio60"
 668};
 669
 670static const char * const uim2_groups[] = {
 671        "gpio53", "gpio54", "gpio55", "gpio56"
 672};
 673static const char * const uim3_groups[] = {
 674        "gpio49",  "gpio50", "gpio51", "gpio52"
 675};
 676static const char * const uim_batt_groups[] = { "gpio61" };
 677static const char * const wcss_bt_groups[] = { "gpio39", "gpio47", "gpio48" };
 678static const char * const wcss_fm_groups[] = { "gpio45", "gpio46" };
 679static const char * const wcss_wlan_groups[] = {
 680        "gpio40", "gpio41", "gpio42", "gpio43", "gpio44"
 681};
 682static const char * const webcam1_rst_groups[] = { "gpio28" };
 683
 684static const struct msm_function msm8916_functions[] = {
 685        FUNCTION(adsp_ext),
 686        FUNCTION(alsp_int),
 687        FUNCTION(atest_bbrx0),
 688        FUNCTION(atest_bbrx1),
 689        FUNCTION(atest_char),
 690        FUNCTION(atest_char0),
 691        FUNCTION(atest_char1),
 692        FUNCTION(atest_char2),
 693        FUNCTION(atest_char3),
 694        FUNCTION(atest_combodac),
 695        FUNCTION(atest_gpsadc0),
 696        FUNCTION(atest_gpsadc1),
 697        FUNCTION(atest_tsens),
 698        FUNCTION(atest_wlan0),
 699        FUNCTION(atest_wlan1),
 700        FUNCTION(backlight_en),
 701        FUNCTION(bimc_dte0),
 702        FUNCTION(bimc_dte1),
 703        FUNCTION(blsp_i2c1),
 704        FUNCTION(blsp_i2c2),
 705        FUNCTION(blsp_i2c3),
 706        FUNCTION(blsp_i2c4),
 707        FUNCTION(blsp_i2c5),
 708        FUNCTION(blsp_i2c6),
 709        FUNCTION(blsp_spi1),
 710        FUNCTION(blsp_spi1_cs1),
 711        FUNCTION(blsp_spi1_cs2),
 712        FUNCTION(blsp_spi1_cs3),
 713        FUNCTION(blsp_spi2),
 714        FUNCTION(blsp_spi2_cs1),
 715        FUNCTION(blsp_spi2_cs2),
 716        FUNCTION(blsp_spi2_cs3),
 717        FUNCTION(blsp_spi3),
 718        FUNCTION(blsp_spi3_cs1),
 719        FUNCTION(blsp_spi3_cs2),
 720        FUNCTION(blsp_spi3_cs3),
 721        FUNCTION(blsp_spi4),
 722        FUNCTION(blsp_spi5),
 723        FUNCTION(blsp_spi6),
 724        FUNCTION(blsp_uart1),
 725        FUNCTION(blsp_uart2),
 726        FUNCTION(blsp_uim1),
 727        FUNCTION(blsp_uim2),
 728        FUNCTION(cam1_rst),
 729        FUNCTION(cam1_standby),
 730        FUNCTION(cam_mclk0),
 731        FUNCTION(cam_mclk1),
 732        FUNCTION(cci_async),
 733        FUNCTION(cci_i2c),
 734        FUNCTION(cci_timer0),
 735        FUNCTION(cci_timer1),
 736        FUNCTION(cci_timer2),
 737        FUNCTION(cdc_pdm0),
 738        FUNCTION(codec_mad),
 739        FUNCTION(dbg_out),
 740        FUNCTION(display_5v),
 741        FUNCTION(dmic0_clk),
 742        FUNCTION(dmic0_data),
 743        FUNCTION(dsi_rst),
 744        FUNCTION(ebi0_wrcdc),
 745        FUNCTION(euro_us),
 746        FUNCTION(ext_lpass),
 747        FUNCTION(flash_strobe),
 748        FUNCTION(gcc_gp1_clk_a),
 749        FUNCTION(gcc_gp1_clk_b),
 750        FUNCTION(gcc_gp2_clk_a),
 751        FUNCTION(gcc_gp2_clk_b),
 752        FUNCTION(gcc_gp3_clk_a),
 753        FUNCTION(gcc_gp3_clk_b),
 754        FUNCTION(gpio),
 755        FUNCTION(gsm0_tx0),
 756        FUNCTION(gsm0_tx1),
 757        FUNCTION(gsm1_tx0),
 758        FUNCTION(gsm1_tx1),
 759        FUNCTION(gyro_accl),
 760        FUNCTION(kpsns0),
 761        FUNCTION(kpsns1),
 762        FUNCTION(kpsns2),
 763        FUNCTION(ldo_en),
 764        FUNCTION(ldo_update),
 765        FUNCTION(mag_int),
 766        FUNCTION(mdp_vsync),
 767        FUNCTION(modem_tsync),
 768        FUNCTION(m_voc),
 769        FUNCTION(nav_pps),
 770        FUNCTION(nav_tsync),
 771        FUNCTION(pa_indicator),
 772        FUNCTION(pbs0),
 773        FUNCTION(pbs1),
 774        FUNCTION(pbs2),
 775        FUNCTION(pri_mi2s),
 776        FUNCTION(pri_mi2s_ws),
 777        FUNCTION(prng_rosc),
 778        FUNCTION(pwr_crypto_enabled_a),
 779        FUNCTION(pwr_crypto_enabled_b),
 780        FUNCTION(pwr_modem_enabled_a),
 781        FUNCTION(pwr_modem_enabled_b),
 782        FUNCTION(pwr_nav_enabled_a),
 783        FUNCTION(pwr_nav_enabled_b),
 784        FUNCTION(qdss_ctitrig_in_a0),
 785        FUNCTION(qdss_ctitrig_in_a1),
 786        FUNCTION(qdss_ctitrig_in_b0),
 787        FUNCTION(qdss_ctitrig_in_b1),
 788        FUNCTION(qdss_ctitrig_out_a0),
 789        FUNCTION(qdss_ctitrig_out_a1),
 790        FUNCTION(qdss_ctitrig_out_b0),
 791        FUNCTION(qdss_ctitrig_out_b1),
 792        FUNCTION(qdss_traceclk_a),
 793        FUNCTION(qdss_traceclk_b),
 794        FUNCTION(qdss_tracectl_a),
 795        FUNCTION(qdss_tracectl_b),
 796        FUNCTION(qdss_tracedata_a),
 797        FUNCTION(qdss_tracedata_b),
 798        FUNCTION(reset_n),
 799        FUNCTION(sd_card),
 800        FUNCTION(sd_write),
 801        FUNCTION(sec_mi2s),
 802        FUNCTION(smb_int),
 803        FUNCTION(ssbi_wtr0),
 804        FUNCTION(ssbi_wtr1),
 805        FUNCTION(uim1),
 806        FUNCTION(uim2),
 807        FUNCTION(uim3),
 808        FUNCTION(uim_batt),
 809        FUNCTION(wcss_bt),
 810        FUNCTION(wcss_fm),
 811        FUNCTION(wcss_wlan),
 812        FUNCTION(webcam1_rst)
 813};
 814
 815static const struct msm_pingroup msm8916_groups[] = {
 816        PINGROUP(0, blsp_spi1, blsp_uart1, blsp_uim1, dmic0_clk, NA, NA, NA, NA, NA),
 817        PINGROUP(1, blsp_spi1, blsp_uart1, blsp_uim1, dmic0_data, NA, NA, NA, NA, NA),
 818        PINGROUP(2, blsp_spi1, blsp_uart1, blsp_i2c1, NA, NA, NA, NA, NA, NA),
 819        PINGROUP(3, blsp_spi1, blsp_uart1, blsp_i2c1, NA, NA, NA, NA, NA, NA),
 820        PINGROUP(4, blsp_spi2, blsp_uart2, blsp_uim2, blsp_spi1_cs3, qdss_tracectl_b, NA, atest_combodac, NA, NA),
 821        PINGROUP(5, blsp_spi2, blsp_uart2, blsp_uim2, blsp_spi2_cs3, qdss_traceclk_b, NA, NA, NA, NA),
 822        PINGROUP(6, blsp_spi2, blsp_uart2, blsp_i2c2, NA, NA, NA, NA, NA, NA),
 823        PINGROUP(7, blsp_spi2, blsp_uart2, blsp_i2c2, NA, NA, NA, NA, NA, NA),
 824        PINGROUP(8, blsp_spi3, m_voc, qdss_tracedata_a, NA, NA, NA, NA, NA, NA),
 825        PINGROUP(9, blsp_spi3, qdss_tracedata_a, NA, NA, NA, NA, NA, NA, NA),
 826        PINGROUP(10, blsp_spi3, blsp_i2c3, qdss_tracedata_a, NA, NA, NA, NA, NA, NA),
 827        PINGROUP(11, blsp_spi3, blsp_i2c3, NA, NA, NA, NA, NA, NA, NA),
 828        PINGROUP(12, blsp_spi4, gcc_gp2_clk_b, NA, atest_combodac, NA, NA, NA, NA, NA),
 829        PINGROUP(13, blsp_spi4, gcc_gp3_clk_b, NA, atest_combodac, NA, NA, NA, NA, NA),
 830        PINGROUP(14, blsp_spi4, blsp_i2c4, NA, NA, NA, NA, NA, NA, NA),
 831        PINGROUP(15, blsp_spi4, blsp_i2c4, NA, NA, NA, NA, NA, NA, NA),
 832        PINGROUP(16, blsp_spi5, blsp_spi1_cs2, NA, atest_bbrx1, NA, NA, NA, NA, NA),
 833        PINGROUP(17, blsp_spi5, blsp_spi2_cs2, NA, atest_bbrx0, NA, NA, NA, NA, NA),
 834        PINGROUP(18, blsp_spi5, blsp_i2c5, NA, atest_gpsadc1, NA, NA, NA, NA, NA),
 835        PINGROUP(19, blsp_spi5, blsp_i2c5, NA, NA, NA, NA, NA, NA, NA),
 836        PINGROUP(20, blsp_spi6, NA, NA, NA, NA, NA, NA, qdss_ctitrig_in_a0, NA),
 837        PINGROUP(21, blsp_spi6, NA, NA, NA, NA, NA, NA, qdss_ctitrig_in_b0, NA),
 838        PINGROUP(22, blsp_spi6, blsp_i2c6, NA, NA, NA, NA, NA, NA, NA),
 839        PINGROUP(23, blsp_spi6, blsp_i2c6, NA, NA, NA, NA, NA, NA, NA),
 840        PINGROUP(24, mdp_vsync, NA, NA, NA, NA, NA, NA, NA, NA),
 841        PINGROUP(25, mdp_vsync, NA, NA, NA, NA, NA, NA, NA, NA),
 842        PINGROUP(26, cam_mclk0, NA, NA, NA, NA, NA, qdss_tracedata_b, NA, NA),
 843        PINGROUP(27, cam_mclk1, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b),
 844        PINGROUP(28, pwr_modem_enabled_a, NA, NA, NA, NA, NA, qdss_tracedata_b, NA, atest_combodac),
 845        PINGROUP(29, cci_i2c, NA, NA, NA, NA, NA, qdss_tracedata_b, NA, atest_combodac),
 846        PINGROUP(30, cci_i2c, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b),
 847        PINGROUP(31, cci_timer0, NA, NA, NA, NA, NA, NA, NA, NA),
 848        PINGROUP(32, cci_timer1, NA, NA, NA, NA, NA, NA, NA, NA),
 849        PINGROUP(33, cci_async, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b),
 850        PINGROUP(34, pwr_nav_enabled_a, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b),
 851        PINGROUP(35, pwr_crypto_enabled_a, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b),
 852        PINGROUP(36, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b, NA),
 853        PINGROUP(37, blsp_spi3_cs2, NA, NA, NA, NA, NA, qdss_tracedata_b, NA, NA),
 854        PINGROUP(38, cci_timer2, adsp_ext, NA, NA, NA, NA, NA, NA, NA),
 855        PINGROUP(39, wcss_bt, qdss_tracedata_a, NA, atest_combodac, NA, NA, NA, NA, NA),
 856        PINGROUP(40, wcss_wlan, qdss_tracedata_a, NA, atest_combodac, NA, NA, NA, NA, NA),
 857        PINGROUP(41, wcss_wlan, qdss_tracedata_a, NA, atest_combodac, NA, NA, NA, NA, NA),
 858        PINGROUP(42, wcss_wlan, qdss_tracedata_a, NA, atest_combodac, NA, NA, NA, NA, NA),
 859        PINGROUP(43, wcss_wlan, prng_rosc, qdss_tracedata_a, NA, atest_combodac, NA, NA, NA, NA),
 860        PINGROUP(44, wcss_wlan, NA, atest_combodac, NA, NA, NA, NA, NA, NA),
 861        PINGROUP(45, wcss_fm, ext_lpass, qdss_tracectl_a, NA, atest_combodac, NA, NA, NA, NA),
 862        PINGROUP(46, wcss_fm, qdss_traceclk_a, NA, atest_combodac, NA, NA, NA, NA, NA),
 863        PINGROUP(47, wcss_bt, dbg_out, qdss_tracedata_a, NA, atest_combodac, NA, NA, NA, NA),
 864        PINGROUP(48, wcss_bt, qdss_tracedata_a, NA, atest_combodac, NA, NA, NA, NA, NA),
 865        PINGROUP(49, uim3, gcc_gp1_clk_a, qdss_ctitrig_in_a1, NA, NA, NA, NA, NA, NA),
 866        PINGROUP(50, uim3, gcc_gp2_clk_a, qdss_ctitrig_in_b1, NA, NA, NA, NA, NA, NA),
 867        PINGROUP(51, uim3, gcc_gp3_clk_a, qdss_ctitrig_out_b1, NA, NA, NA, NA, NA, NA),
 868        PINGROUP(52, uim3, NA, qdss_ctitrig_out_a1, NA, NA, NA, NA, NA, NA),
 869        PINGROUP(53, uim2, NA, NA, NA, NA, NA, NA, NA, NA),
 870        PINGROUP(54, uim2, NA, NA, NA, NA, NA, NA, NA, NA),
 871        PINGROUP(55, uim2, NA, NA, NA, NA, NA, NA, NA, NA),
 872        PINGROUP(56, uim2, NA, NA, NA, NA, NA, NA, NA, NA),
 873        PINGROUP(57, uim1, atest_char3, NA, NA, NA, NA, NA, NA, NA),
 874        PINGROUP(58, uim1, atest_char2, NA, NA, NA, NA, NA, NA, NA),
 875        PINGROUP(59, uim1, atest_char1, NA, NA, NA, NA, NA, NA, NA),
 876        PINGROUP(60, uim1, atest_char0, NA, NA, NA, NA, NA, NA, NA),
 877        PINGROUP(61, uim_batt, NA, NA, NA, NA, NA, NA, NA, NA),
 878        PINGROUP(62, atest_char, qdss_tracedata_a, NA, NA, NA, NA, NA, NA, NA),
 879        PINGROUP(63, cdc_pdm0, bimc_dte0, NA, NA, NA, NA, NA, NA, NA),
 880        PINGROUP(64, cdc_pdm0, bimc_dte1, NA, NA, NA, NA, NA, NA, NA),
 881        PINGROUP(65, cdc_pdm0, bimc_dte0, NA, NA, NA, NA, NA, NA, NA),
 882        PINGROUP(66, cdc_pdm0, bimc_dte1, NA, NA, NA, NA, NA, NA, NA),
 883        PINGROUP(67, cdc_pdm0, ebi0_wrcdc, NA, NA, NA, NA, NA, NA, NA),
 884        PINGROUP(68, cdc_pdm0, NA, NA, NA, NA, NA, NA, NA, NA),
 885        PINGROUP(69, blsp_spi3_cs3, qdss_tracedata_a, NA, atest_combodac, NA, NA, NA, NA, NA),
 886        PINGROUP(70, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 887        PINGROUP(71, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 888        PINGROUP(72, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 889        PINGROUP(73, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 890        PINGROUP(74, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 891        PINGROUP(75, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 892        PINGROUP(76, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 893        PINGROUP(77, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 894        PINGROUP(78, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 895        PINGROUP(79, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 896        PINGROUP(80, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 897        PINGROUP(81, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 898        PINGROUP(82, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 899        PINGROUP(83, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 900        PINGROUP(84, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 901        PINGROUP(85, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 902        PINGROUP(86, NA, pa_indicator, NA, NA, NA, NA, NA, NA, NA),
 903        PINGROUP(87, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 904        PINGROUP(88, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 905        PINGROUP(89, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 906        PINGROUP(90, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 907        PINGROUP(91, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 908        PINGROUP(92, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 909        PINGROUP(93, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 910        PINGROUP(94, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 911        PINGROUP(95, NA, modem_tsync, nav_tsync, nav_pps, NA, NA, NA, NA, NA),
 912        PINGROUP(96, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 913        PINGROUP(97, gcc_gp1_clk_b, NA, NA, NA, NA, NA, NA, NA, NA),
 914        PINGROUP(98, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 915        PINGROUP(99, gsm0_tx0, NA, NA, NA, NA, NA, NA, NA, NA),
 916        PINGROUP(100, gsm0_tx1, NA, NA, NA, NA, NA, NA, NA, NA),
 917        PINGROUP(101, gsm1_tx0, NA, NA, NA, NA, NA, NA, NA, NA),
 918        PINGROUP(102, gsm1_tx1, NA, NA, NA, NA, NA, NA, NA, NA),
 919        PINGROUP(103, ssbi_wtr0, NA, NA, NA, NA, NA, NA, NA, NA),
 920        PINGROUP(104, ssbi_wtr0, NA, NA, NA, NA, NA, NA, NA, NA),
 921        PINGROUP(105, ssbi_wtr1, NA, NA, NA, NA, NA, NA, NA, NA),
 922        PINGROUP(106, ssbi_wtr1, NA, NA, NA, NA, NA, NA, NA, NA),
 923        PINGROUP(107, pbs0, NA, atest_combodac, NA, NA, NA, NA, NA, NA),
 924        PINGROUP(108, pbs1, NA, NA, NA, NA, NA, NA, NA, NA),
 925        PINGROUP(109, pbs2, NA, NA, NA, NA, NA, NA, NA, NA),
 926        PINGROUP(110, blsp_spi1_cs1, pri_mi2s_ws, NA, qdss_tracedata_b, NA, NA, NA, NA, NA),
 927        PINGROUP(111, qdss_tracedata_b, NA, NA, NA, NA, NA, NA, NA, NA),
 928        PINGROUP(112, sec_mi2s, NA, NA, NA, qdss_tracedata_a, NA, atest_tsens, NA, NA),
 929        PINGROUP(113, pri_mi2s, NA, pwr_modem_enabled_b, NA, NA, NA, NA, NA, qdss_tracedata_a),
 930        PINGROUP(114, pri_mi2s, pwr_nav_enabled_b, NA, NA, NA, NA, NA, qdss_tracedata_a, NA),
 931        PINGROUP(115, pri_mi2s, pwr_crypto_enabled_b, NA, NA, NA, NA, NA, qdss_tracedata_a, NA),
 932        PINGROUP(116, pri_mi2s, NA, NA, NA, NA, NA, NA, NA, NA),
 933        PINGROUP(117, sec_mi2s, NA, NA, NA, NA, NA, NA, NA, NA),
 934        PINGROUP(118, sec_mi2s, NA, NA, NA, NA, NA, NA, NA, NA),
 935        PINGROUP(119, sec_mi2s, m_voc, NA, NA, NA, NA, NA, NA, NA),
 936        PINGROUP(120, blsp_spi3_cs1, ldo_update, NA, NA, NA, NA, NA, NA, NA),
 937        PINGROUP(121, sd_write, blsp_spi2_cs1, ldo_en, NA, NA, NA, NA, NA, NA),
 938        SDC_PINGROUP(sdc1_clk, 0x10a000, 13, 6),
 939        SDC_PINGROUP(sdc1_cmd, 0x10a000, 11, 3),
 940        SDC_PINGROUP(sdc1_data, 0x10a000, 9, 0),
 941        SDC_PINGROUP(sdc2_clk, 0x109000, 14, 6),
 942        SDC_PINGROUP(sdc2_cmd, 0x109000, 11, 3),
 943        SDC_PINGROUP(sdc2_data, 0x109000, 9, 0),
 944        SDC_PINGROUP(qdsd_clk, 0x19c000, 3, 0),
 945        SDC_PINGROUP(qdsd_cmd, 0x19c000, 8, 5),
 946        SDC_PINGROUP(qdsd_data0, 0x19c000, 13, 10),
 947        SDC_PINGROUP(qdsd_data1, 0x19c000, 18, 15),
 948        SDC_PINGROUP(qdsd_data2, 0x19c000, 23, 20),
 949        SDC_PINGROUP(qdsd_data3, 0x19c000, 28, 25),
 950};
 951
 952#define NUM_GPIO_PINGROUPS      122
 953
 954static const struct msm_pinctrl_soc_data msm8916_pinctrl = {
 955        .pins = msm8916_pins,
 956        .npins = ARRAY_SIZE(msm8916_pins),
 957        .functions = msm8916_functions,
 958        .nfunctions = ARRAY_SIZE(msm8916_functions),
 959        .groups = msm8916_groups,
 960        .ngroups = ARRAY_SIZE(msm8916_groups),
 961        .ngpios = NUM_GPIO_PINGROUPS,
 962};
 963
 964static int msm8916_pinctrl_probe(struct platform_device *pdev)
 965{
 966        return msm_pinctrl_probe(pdev, &msm8916_pinctrl);
 967}
 968
 969static const struct of_device_id msm8916_pinctrl_of_match[] = {
 970        { .compatible = "qcom,msm8916-pinctrl", },
 971        { },
 972};
 973
 974static struct platform_driver msm8916_pinctrl_driver = {
 975        .driver = {
 976                .name = "msm8916-pinctrl",
 977                .of_match_table = msm8916_pinctrl_of_match,
 978        },
 979        .probe = msm8916_pinctrl_probe,
 980        .remove = msm_pinctrl_remove,
 981};
 982
 983static int __init msm8916_pinctrl_init(void)
 984{
 985        return platform_driver_register(&msm8916_pinctrl_driver);
 986}
 987arch_initcall(msm8916_pinctrl_init);
 988
 989static void __exit msm8916_pinctrl_exit(void)
 990{
 991        platform_driver_unregister(&msm8916_pinctrl_driver);
 992}
 993module_exit(msm8916_pinctrl_exit);
 994
 995MODULE_DESCRIPTION("Qualcomm msm8916 pinctrl driver");
 996MODULE_LICENSE("GPL v2");
 997MODULE_DEVICE_TABLE(of, msm8916_pinctrl_of_match);
 998