linux/drivers/pinctrl/qcom/pinctrl-msm8976.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
   4 *
   5 * Copyright (c) 2016, AngeloGioacchino Del Regno <kholk11@gmail.com>
   6 */
   7
   8#include <linux/module.h>
   9#include <linux/of.h>
  10#include <linux/platform_device.h>
  11#include <linux/pinctrl/pinctrl.h>
  12
  13#include "pinctrl-msm.h"
  14
  15#define FUNCTION(fname)                                 \
  16        [msm_mux_##fname] = {                           \
  17                .name = #fname,                         \
  18                .groups = fname##_groups,               \
  19                .ngroups = ARRAY_SIZE(fname##_groups),  \
  20        }
  21
  22#define REG_BASE 0x0
  23#define REG_SIZE 0x1000
  24#define PINGROUP(id, f1, f2, f3, f4, f5, f6, f7, f8, f9)        \
  25        {                                               \
  26                .name = "gpio" #id,                     \
  27                .pins = gpio##id##_pins,                \
  28                .npins = ARRAY_SIZE(gpio##id##_pins),   \
  29                .funcs = (int[]){                       \
  30                        msm_mux_gpio, /* gpio mode */   \
  31                        msm_mux_##f1,                   \
  32                        msm_mux_##f2,                   \
  33                        msm_mux_##f3,                   \
  34                        msm_mux_##f4,                   \
  35                        msm_mux_##f5,                   \
  36                        msm_mux_##f6,                   \
  37                        msm_mux_##f7,                   \
  38                        msm_mux_##f8,                   \
  39                        msm_mux_##f9                    \
  40                },                                      \
  41                .nfuncs = 10,                           \
  42                .ctl_reg = REG_BASE + REG_SIZE * id,                    \
  43                .io_reg = REG_BASE + 0x4 + REG_SIZE * id,               \
  44                .intr_cfg_reg = REG_BASE + 0x8 + REG_SIZE * id,         \
  45                .intr_status_reg = REG_BASE + 0xc + REG_SIZE * id,      \
  46                .intr_target_reg = REG_BASE + 0x8 + REG_SIZE * id,      \
  47                .mux_bit = 2,                   \
  48                .pull_bit = 0,                  \
  49                .drv_bit = 6,                   \
  50                .oe_bit = 9,                    \
  51                .in_bit = 0,                    \
  52                .out_bit = 1,                   \
  53                .intr_enable_bit = 0,           \
  54                .intr_status_bit = 0,           \
  55                .intr_target_bit = 5,           \
  56                .intr_target_kpss_val = 4,      \
  57                .intr_raw_status_bit = 4,       \
  58                .intr_polarity_bit = 1,         \
  59                .intr_detection_bit = 2,        \
  60                .intr_detection_width = 2,      \
  61        }
  62
  63#define SDC_QDSD_PINGROUP(pg_name, ctl, pull, drv)      \
  64        {                                               \
  65                .name = #pg_name,                       \
  66                .pins = pg_name##_pins,                 \
  67                .npins = ARRAY_SIZE(pg_name##_pins),    \
  68                .ctl_reg = ctl,                         \
  69                .io_reg = 0,                            \
  70                .intr_cfg_reg = 0,                      \
  71                .intr_status_reg = 0,                   \
  72                .intr_target_reg = 0,                   \
  73                .mux_bit = -1,                          \
  74                .pull_bit = pull,                       \
  75                .drv_bit = drv,                         \
  76                .oe_bit = -1,                           \
  77                .in_bit = -1,                           \
  78                .out_bit = -1,                          \
  79                .intr_enable_bit = -1,                  \
  80                .intr_status_bit = -1,                  \
  81                .intr_target_bit = -1,                  \
  82                .intr_raw_status_bit = -1,              \
  83                .intr_polarity_bit = -1,                \
  84                .intr_detection_bit = -1,               \
  85                .intr_detection_width = -1,             \
  86        }
  87static const struct pinctrl_pin_desc msm8976_pins[] = {
  88        PINCTRL_PIN(0, "GPIO_0"),
  89        PINCTRL_PIN(1, "GPIO_1"),
  90        PINCTRL_PIN(2, "GPIO_2"),
  91        PINCTRL_PIN(3, "GPIO_3"),
  92        PINCTRL_PIN(4, "GPIO_4"),
  93        PINCTRL_PIN(5, "GPIO_5"),
  94        PINCTRL_PIN(6, "GPIO_6"),
  95        PINCTRL_PIN(7, "GPIO_7"),
  96        PINCTRL_PIN(8, "GPIO_8"),
  97        PINCTRL_PIN(9, "GPIO_9"),
  98        PINCTRL_PIN(10, "GPIO_10"),
  99        PINCTRL_PIN(11, "GPIO_11"),
 100        PINCTRL_PIN(12, "GPIO_12"),
 101        PINCTRL_PIN(13, "GPIO_13"),
 102        PINCTRL_PIN(14, "GPIO_14"),
 103        PINCTRL_PIN(15, "GPIO_15"),
 104        PINCTRL_PIN(16, "GPIO_16"),
 105        PINCTRL_PIN(17, "GPIO_17"),
 106        PINCTRL_PIN(18, "GPIO_18"),
 107        PINCTRL_PIN(19, "GPIO_19"),
 108        PINCTRL_PIN(20, "GPIO_20"),
 109        PINCTRL_PIN(21, "GPIO_21"),
 110        PINCTRL_PIN(22, "GPIO_22"),
 111        PINCTRL_PIN(23, "GPIO_23"),
 112        PINCTRL_PIN(24, "GPIO_24"),
 113        PINCTRL_PIN(25, "GPIO_25"),
 114        PINCTRL_PIN(26, "GPIO_26"),
 115        PINCTRL_PIN(27, "GPIO_27"),
 116        PINCTRL_PIN(28, "GPIO_28"),
 117        PINCTRL_PIN(29, "GPIO_29"),
 118        PINCTRL_PIN(30, "GPIO_30"),
 119        PINCTRL_PIN(31, "GPIO_31"),
 120        PINCTRL_PIN(32, "GPIO_32"),
 121        PINCTRL_PIN(33, "GPIO_33"),
 122        PINCTRL_PIN(34, "GPIO_34"),
 123        PINCTRL_PIN(35, "GPIO_35"),
 124        PINCTRL_PIN(36, "GPIO_36"),
 125        PINCTRL_PIN(37, "GPIO_37"),
 126        PINCTRL_PIN(38, "GPIO_38"),
 127        PINCTRL_PIN(39, "GPIO_39"),
 128        PINCTRL_PIN(40, "GPIO_40"),
 129        PINCTRL_PIN(41, "GPIO_41"),
 130        PINCTRL_PIN(42, "GPIO_42"),
 131        PINCTRL_PIN(43, "GPIO_43"),
 132        PINCTRL_PIN(44, "GPIO_44"),
 133        PINCTRL_PIN(45, "GPIO_45"),
 134        PINCTRL_PIN(46, "GPIO_46"),
 135        PINCTRL_PIN(47, "GPIO_47"),
 136        PINCTRL_PIN(48, "GPIO_48"),
 137        PINCTRL_PIN(49, "GPIO_49"),
 138        PINCTRL_PIN(50, "GPIO_50"),
 139        PINCTRL_PIN(51, "GPIO_51"),
 140        PINCTRL_PIN(52, "GPIO_52"),
 141        PINCTRL_PIN(53, "GPIO_53"),
 142        PINCTRL_PIN(54, "GPIO_54"),
 143        PINCTRL_PIN(55, "GPIO_55"),
 144        PINCTRL_PIN(56, "GPIO_56"),
 145        PINCTRL_PIN(57, "GPIO_57"),
 146        PINCTRL_PIN(58, "GPIO_58"),
 147        PINCTRL_PIN(59, "GPIO_59"),
 148        PINCTRL_PIN(60, "GPIO_60"),
 149        PINCTRL_PIN(61, "GPIO_61"),
 150        PINCTRL_PIN(62, "GPIO_62"),
 151        PINCTRL_PIN(63, "GPIO_63"),
 152        PINCTRL_PIN(64, "GPIO_64"),
 153        PINCTRL_PIN(65, "GPIO_65"),
 154        PINCTRL_PIN(66, "GPIO_66"),
 155        PINCTRL_PIN(67, "GPIO_67"),
 156        PINCTRL_PIN(68, "GPIO_68"),
 157        PINCTRL_PIN(69, "GPIO_69"),
 158        PINCTRL_PIN(70, "GPIO_70"),
 159        PINCTRL_PIN(71, "GPIO_71"),
 160        PINCTRL_PIN(72, "GPIO_72"),
 161        PINCTRL_PIN(73, "GPIO_73"),
 162        PINCTRL_PIN(74, "GPIO_74"),
 163        PINCTRL_PIN(75, "GPIO_75"),
 164        PINCTRL_PIN(76, "GPIO_76"),
 165        PINCTRL_PIN(77, "GPIO_77"),
 166        PINCTRL_PIN(78, "GPIO_78"),
 167        PINCTRL_PIN(79, "GPIO_79"),
 168        PINCTRL_PIN(80, "GPIO_80"),
 169        PINCTRL_PIN(81, "GPIO_81"),
 170        PINCTRL_PIN(82, "GPIO_82"),
 171        PINCTRL_PIN(83, "GPIO_83"),
 172        PINCTRL_PIN(84, "GPIO_84"),
 173        PINCTRL_PIN(85, "GPIO_85"),
 174        PINCTRL_PIN(86, "GPIO_86"),
 175        PINCTRL_PIN(87, "GPIO_87"),
 176        PINCTRL_PIN(88, "GPIO_88"),
 177        PINCTRL_PIN(89, "GPIO_89"),
 178        PINCTRL_PIN(90, "GPIO_90"),
 179        PINCTRL_PIN(91, "GPIO_91"),
 180        PINCTRL_PIN(92, "GPIO_92"),
 181        PINCTRL_PIN(93, "GPIO_93"),
 182        PINCTRL_PIN(94, "GPIO_94"),
 183        PINCTRL_PIN(95, "GPIO_95"),
 184        PINCTRL_PIN(96, "GPIO_96"),
 185        PINCTRL_PIN(97, "GPIO_97"),
 186        PINCTRL_PIN(98, "GPIO_98"),
 187        PINCTRL_PIN(99, "GPIO_99"),
 188        PINCTRL_PIN(100, "GPIO_100"),
 189        PINCTRL_PIN(101, "GPIO_101"),
 190        PINCTRL_PIN(102, "GPIO_102"),
 191        PINCTRL_PIN(103, "GPIO_103"),
 192        PINCTRL_PIN(104, "GPIO_104"),
 193        PINCTRL_PIN(105, "GPIO_105"),
 194        PINCTRL_PIN(106, "GPIO_106"),
 195        PINCTRL_PIN(107, "GPIO_107"),
 196        PINCTRL_PIN(108, "GPIO_108"),
 197        PINCTRL_PIN(109, "GPIO_109"),
 198        PINCTRL_PIN(110, "GPIO_110"),
 199        PINCTRL_PIN(111, "GPIO_111"),
 200        PINCTRL_PIN(112, "GPIO_112"),
 201        PINCTRL_PIN(113, "GPIO_113"),
 202        PINCTRL_PIN(114, "GPIO_114"),
 203        PINCTRL_PIN(115, "GPIO_115"),
 204        PINCTRL_PIN(116, "GPIO_116"),
 205        PINCTRL_PIN(117, "GPIO_117"),
 206        PINCTRL_PIN(118, "GPIO_118"),
 207        PINCTRL_PIN(119, "GPIO_119"),
 208        PINCTRL_PIN(120, "GPIO_120"),
 209        PINCTRL_PIN(121, "GPIO_121"),
 210        PINCTRL_PIN(122, "GPIO_122"),
 211        PINCTRL_PIN(123, "GPIO_123"),
 212        PINCTRL_PIN(124, "GPIO_124"),
 213        PINCTRL_PIN(125, "GPIO_125"),
 214        PINCTRL_PIN(126, "GPIO_126"),
 215        PINCTRL_PIN(127, "GPIO_127"),
 216        PINCTRL_PIN(128, "GPIO_128"),
 217        PINCTRL_PIN(129, "GPIO_129"),
 218        PINCTRL_PIN(130, "GPIO_130"),
 219        PINCTRL_PIN(131, "GPIO_131"),
 220        PINCTRL_PIN(132, "GPIO_132"),
 221        PINCTRL_PIN(133, "GPIO_133"),
 222        PINCTRL_PIN(134, "GPIO_134"),
 223        PINCTRL_PIN(135, "GPIO_135"),
 224        PINCTRL_PIN(136, "GPIO_136"),
 225        PINCTRL_PIN(137, "GPIO_137"),
 226        PINCTRL_PIN(138, "GPIO_138"),
 227        PINCTRL_PIN(139, "GPIO_139"),
 228        PINCTRL_PIN(140, "GPIO_140"),
 229        PINCTRL_PIN(141, "GPIO_141"),
 230        PINCTRL_PIN(142, "GPIO_142"),
 231        PINCTRL_PIN(143, "GPIO_143"),
 232        PINCTRL_PIN(144, "GPIO_144"),
 233        PINCTRL_PIN(145, "SDC1_CLK"),
 234        PINCTRL_PIN(146, "SDC1_CMD"),
 235        PINCTRL_PIN(147, "SDC1_DATA"),
 236        PINCTRL_PIN(148, "SDC1_RCLK"),
 237        PINCTRL_PIN(149, "SDC2_CLK"),
 238        PINCTRL_PIN(150, "SDC2_CMD"),
 239        PINCTRL_PIN(151, "SDC2_DATA"),
 240        PINCTRL_PIN(152, "QDSD_CLK"),
 241        PINCTRL_PIN(153, "QDSD_CMD"),
 242        PINCTRL_PIN(154, "QDSD_DATA0"),
 243        PINCTRL_PIN(155, "QDSD_DATA1"),
 244        PINCTRL_PIN(156, "QDSD_DATA2"),
 245        PINCTRL_PIN(157, "QDSD_DATA3"),
 246};
 247
 248#define DECLARE_MSM_GPIO_PINS(pin) \
 249        static const unsigned int gpio##pin##_pins[] = { pin }
 250DECLARE_MSM_GPIO_PINS(0);
 251DECLARE_MSM_GPIO_PINS(1);
 252DECLARE_MSM_GPIO_PINS(2);
 253DECLARE_MSM_GPIO_PINS(3);
 254DECLARE_MSM_GPIO_PINS(4);
 255DECLARE_MSM_GPIO_PINS(5);
 256DECLARE_MSM_GPIO_PINS(6);
 257DECLARE_MSM_GPIO_PINS(7);
 258DECLARE_MSM_GPIO_PINS(8);
 259DECLARE_MSM_GPIO_PINS(9);
 260DECLARE_MSM_GPIO_PINS(10);
 261DECLARE_MSM_GPIO_PINS(11);
 262DECLARE_MSM_GPIO_PINS(12);
 263DECLARE_MSM_GPIO_PINS(13);
 264DECLARE_MSM_GPIO_PINS(14);
 265DECLARE_MSM_GPIO_PINS(15);
 266DECLARE_MSM_GPIO_PINS(16);
 267DECLARE_MSM_GPIO_PINS(17);
 268DECLARE_MSM_GPIO_PINS(18);
 269DECLARE_MSM_GPIO_PINS(19);
 270DECLARE_MSM_GPIO_PINS(20);
 271DECLARE_MSM_GPIO_PINS(21);
 272DECLARE_MSM_GPIO_PINS(22);
 273DECLARE_MSM_GPIO_PINS(23);
 274DECLARE_MSM_GPIO_PINS(24);
 275DECLARE_MSM_GPIO_PINS(25);
 276DECLARE_MSM_GPIO_PINS(26);
 277DECLARE_MSM_GPIO_PINS(27);
 278DECLARE_MSM_GPIO_PINS(28);
 279DECLARE_MSM_GPIO_PINS(29);
 280DECLARE_MSM_GPIO_PINS(30);
 281DECLARE_MSM_GPIO_PINS(31);
 282DECLARE_MSM_GPIO_PINS(32);
 283DECLARE_MSM_GPIO_PINS(33);
 284DECLARE_MSM_GPIO_PINS(34);
 285DECLARE_MSM_GPIO_PINS(35);
 286DECLARE_MSM_GPIO_PINS(36);
 287DECLARE_MSM_GPIO_PINS(37);
 288DECLARE_MSM_GPIO_PINS(38);
 289DECLARE_MSM_GPIO_PINS(39);
 290DECLARE_MSM_GPIO_PINS(40);
 291DECLARE_MSM_GPIO_PINS(41);
 292DECLARE_MSM_GPIO_PINS(42);
 293DECLARE_MSM_GPIO_PINS(43);
 294DECLARE_MSM_GPIO_PINS(44);
 295DECLARE_MSM_GPIO_PINS(45);
 296DECLARE_MSM_GPIO_PINS(46);
 297DECLARE_MSM_GPIO_PINS(47);
 298DECLARE_MSM_GPIO_PINS(48);
 299DECLARE_MSM_GPIO_PINS(49);
 300DECLARE_MSM_GPIO_PINS(50);
 301DECLARE_MSM_GPIO_PINS(51);
 302DECLARE_MSM_GPIO_PINS(52);
 303DECLARE_MSM_GPIO_PINS(53);
 304DECLARE_MSM_GPIO_PINS(54);
 305DECLARE_MSM_GPIO_PINS(55);
 306DECLARE_MSM_GPIO_PINS(56);
 307DECLARE_MSM_GPIO_PINS(57);
 308DECLARE_MSM_GPIO_PINS(58);
 309DECLARE_MSM_GPIO_PINS(59);
 310DECLARE_MSM_GPIO_PINS(60);
 311DECLARE_MSM_GPIO_PINS(61);
 312DECLARE_MSM_GPIO_PINS(62);
 313DECLARE_MSM_GPIO_PINS(63);
 314DECLARE_MSM_GPIO_PINS(64);
 315DECLARE_MSM_GPIO_PINS(65);
 316DECLARE_MSM_GPIO_PINS(66);
 317DECLARE_MSM_GPIO_PINS(67);
 318DECLARE_MSM_GPIO_PINS(68);
 319DECLARE_MSM_GPIO_PINS(69);
 320DECLARE_MSM_GPIO_PINS(70);
 321DECLARE_MSM_GPIO_PINS(71);
 322DECLARE_MSM_GPIO_PINS(72);
 323DECLARE_MSM_GPIO_PINS(73);
 324DECLARE_MSM_GPIO_PINS(74);
 325DECLARE_MSM_GPIO_PINS(75);
 326DECLARE_MSM_GPIO_PINS(76);
 327DECLARE_MSM_GPIO_PINS(77);
 328DECLARE_MSM_GPIO_PINS(78);
 329DECLARE_MSM_GPIO_PINS(79);
 330DECLARE_MSM_GPIO_PINS(80);
 331DECLARE_MSM_GPIO_PINS(81);
 332DECLARE_MSM_GPIO_PINS(82);
 333DECLARE_MSM_GPIO_PINS(83);
 334DECLARE_MSM_GPIO_PINS(84);
 335DECLARE_MSM_GPIO_PINS(85);
 336DECLARE_MSM_GPIO_PINS(86);
 337DECLARE_MSM_GPIO_PINS(87);
 338DECLARE_MSM_GPIO_PINS(88);
 339DECLARE_MSM_GPIO_PINS(89);
 340DECLARE_MSM_GPIO_PINS(90);
 341DECLARE_MSM_GPIO_PINS(91);
 342DECLARE_MSM_GPIO_PINS(92);
 343DECLARE_MSM_GPIO_PINS(93);
 344DECLARE_MSM_GPIO_PINS(94);
 345DECLARE_MSM_GPIO_PINS(95);
 346DECLARE_MSM_GPIO_PINS(96);
 347DECLARE_MSM_GPIO_PINS(97);
 348DECLARE_MSM_GPIO_PINS(98);
 349DECLARE_MSM_GPIO_PINS(99);
 350DECLARE_MSM_GPIO_PINS(100);
 351DECLARE_MSM_GPIO_PINS(101);
 352DECLARE_MSM_GPIO_PINS(102);
 353DECLARE_MSM_GPIO_PINS(103);
 354DECLARE_MSM_GPIO_PINS(104);
 355DECLARE_MSM_GPIO_PINS(105);
 356DECLARE_MSM_GPIO_PINS(106);
 357DECLARE_MSM_GPIO_PINS(107);
 358DECLARE_MSM_GPIO_PINS(108);
 359DECLARE_MSM_GPIO_PINS(109);
 360DECLARE_MSM_GPIO_PINS(110);
 361DECLARE_MSM_GPIO_PINS(111);
 362DECLARE_MSM_GPIO_PINS(112);
 363DECLARE_MSM_GPIO_PINS(113);
 364DECLARE_MSM_GPIO_PINS(114);
 365DECLARE_MSM_GPIO_PINS(115);
 366DECLARE_MSM_GPIO_PINS(116);
 367DECLARE_MSM_GPIO_PINS(117);
 368DECLARE_MSM_GPIO_PINS(118);
 369DECLARE_MSM_GPIO_PINS(119);
 370DECLARE_MSM_GPIO_PINS(120);
 371DECLARE_MSM_GPIO_PINS(121);
 372DECLARE_MSM_GPIO_PINS(122);
 373DECLARE_MSM_GPIO_PINS(123);
 374DECLARE_MSM_GPIO_PINS(124);
 375DECLARE_MSM_GPIO_PINS(125);
 376DECLARE_MSM_GPIO_PINS(126);
 377DECLARE_MSM_GPIO_PINS(127);
 378DECLARE_MSM_GPIO_PINS(128);
 379DECLARE_MSM_GPIO_PINS(129);
 380DECLARE_MSM_GPIO_PINS(130);
 381DECLARE_MSM_GPIO_PINS(131);
 382DECLARE_MSM_GPIO_PINS(132);
 383DECLARE_MSM_GPIO_PINS(133);
 384DECLARE_MSM_GPIO_PINS(134);
 385DECLARE_MSM_GPIO_PINS(135);
 386DECLARE_MSM_GPIO_PINS(136);
 387DECLARE_MSM_GPIO_PINS(137);
 388DECLARE_MSM_GPIO_PINS(138);
 389DECLARE_MSM_GPIO_PINS(139);
 390DECLARE_MSM_GPIO_PINS(140);
 391DECLARE_MSM_GPIO_PINS(141);
 392DECLARE_MSM_GPIO_PINS(142);
 393DECLARE_MSM_GPIO_PINS(143);
 394DECLARE_MSM_GPIO_PINS(144);
 395
 396static const unsigned int sdc1_clk_pins[] = { 145 };
 397static const unsigned int sdc1_cmd_pins[] = { 146 };
 398static const unsigned int sdc1_data_pins[] = { 147 };
 399static const unsigned int sdc1_rclk_pins[] = { 148 };
 400static const unsigned int sdc2_clk_pins[] = { 149 };
 401static const unsigned int sdc2_cmd_pins[] = { 150 };
 402static const unsigned int sdc2_data_pins[] = { 151 };
 403static const unsigned int qdsd_clk_pins[] = { 152 };
 404static const unsigned int qdsd_cmd_pins[] = { 153 };
 405static const unsigned int qdsd_data0_pins[] = { 154 };
 406static const unsigned int qdsd_data1_pins[] = { 155 };
 407static const unsigned int qdsd_data2_pins[] = { 156 };
 408static const unsigned int qdsd_data3_pins[] = { 157 };
 409
 410enum msm8976_functions {
 411        msm_mux_gpio,
 412        msm_mux_blsp_uart1,
 413        msm_mux_blsp_spi1,
 414        msm_mux_smb_int,
 415        msm_mux_blsp_i2c1,
 416        msm_mux_blsp_spi2,
 417        msm_mux_blsp_uart2,
 418        msm_mux_blsp_i2c2,
 419        msm_mux_gcc_gp1_clk_b,
 420        msm_mux_blsp_spi3,
 421        msm_mux_qdss_tracedata_b,
 422        msm_mux_blsp_i2c3,
 423        msm_mux_gcc_gp2_clk_b,
 424        msm_mux_gcc_gp3_clk_b,
 425        msm_mux_blsp_spi4,
 426        msm_mux_cap_int,
 427        msm_mux_blsp_i2c4,
 428        msm_mux_blsp_spi5,
 429        msm_mux_blsp_uart5,
 430        msm_mux_qdss_traceclk_a,
 431        msm_mux_m_voc,
 432        msm_mux_blsp_i2c5,
 433        msm_mux_qdss_tracectl_a,
 434        msm_mux_qdss_tracedata_a,
 435        msm_mux_blsp_spi6,
 436        msm_mux_blsp_uart6,
 437        msm_mux_qdss_tracectl_b,
 438        msm_mux_blsp_i2c6,
 439        msm_mux_qdss_traceclk_b,
 440        msm_mux_mdp_vsync,
 441        msm_mux_pri_mi2s_mclk_a,
 442        msm_mux_sec_mi2s_mclk_a,
 443        msm_mux_cam_mclk,
 444        msm_mux_cci0_i2c,
 445        msm_mux_cci1_i2c,
 446        msm_mux_blsp1_spi,
 447        msm_mux_blsp3_spi,
 448        msm_mux_gcc_gp1_clk_a,
 449        msm_mux_gcc_gp2_clk_a,
 450        msm_mux_gcc_gp3_clk_a,
 451        msm_mux_uim_batt,
 452        msm_mux_sd_write,
 453        msm_mux_uim1_data,
 454        msm_mux_uim1_clk,
 455        msm_mux_uim1_reset,
 456        msm_mux_uim1_present,
 457        msm_mux_uim2_data,
 458        msm_mux_uim2_clk,
 459        msm_mux_uim2_reset,
 460        msm_mux_uim2_present,
 461        msm_mux_ts_xvdd,
 462        msm_mux_mipi_dsi0,
 463        msm_mux_us_euro,
 464        msm_mux_ts_resout,
 465        msm_mux_ts_sample,
 466        msm_mux_sec_mi2s_mclk_b,
 467        msm_mux_pri_mi2s,
 468        msm_mux_codec_reset,
 469        msm_mux_cdc_pdm0,
 470        msm_mux_us_emitter,
 471        msm_mux_pri_mi2s_mclk_b,
 472        msm_mux_pri_mi2s_mclk_c,
 473        msm_mux_lpass_slimbus,
 474        msm_mux_lpass_slimbus0,
 475        msm_mux_lpass_slimbus1,
 476        msm_mux_codec_int1,
 477        msm_mux_codec_int2,
 478        msm_mux_wcss_bt,
 479        msm_mux_sdc3,
 480        msm_mux_wcss_wlan2,
 481        msm_mux_wcss_wlan1,
 482        msm_mux_wcss_wlan0,
 483        msm_mux_wcss_wlan,
 484        msm_mux_wcss_fm,
 485        msm_mux_key_volp,
 486        msm_mux_key_snapshot,
 487        msm_mux_key_focus,
 488        msm_mux_key_home,
 489        msm_mux_pwr_down,
 490        msm_mux_dmic0_clk,
 491        msm_mux_hdmi_int,
 492        msm_mux_dmic0_data,
 493        msm_mux_wsa_vi,
 494        msm_mux_wsa_en,
 495        msm_mux_blsp_spi8,
 496        msm_mux_wsa_irq,
 497        msm_mux_blsp_i2c8,
 498        msm_mux_pa_indicator,
 499        msm_mux_modem_tsync,
 500        msm_mux_ssbi_wtr1,
 501        msm_mux_gsm1_tx,
 502        msm_mux_gsm0_tx,
 503        msm_mux_sdcard_det,
 504        msm_mux_sec_mi2s,
 505        msm_mux_ss_switch,
 506        msm_mux_NA,
 507};
 508
 509static const char * const gpio_groups[] = {
 510        "gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7",
 511        "gpio8", "gpio9", "gpio10", "gpio11", "gpio12", "gpio13", "gpio14",
 512        "gpio15", "gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21",
 513        "gpio22", "gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28",
 514        "gpio29", "gpio30", "gpio31", "gpio32", "gpio33", "gpio34", "gpio35",
 515        "gpio36", "gpio37", "gpio38", "gpio39", "gpio40", "gpio41", "gpio42",
 516        "gpio43", "gpio44", "gpio45", "gpio46", "gpio47", "gpio48", "gpio49",
 517        "gpio50", "gpio51", "gpio52", "gpio53", "gpio54", "gpio55", "gpio56",
 518        "gpio57", "gpio58", "gpio59", "gpio60", "gpio61", "gpio62", "gpio63",
 519        "gpio64", "gpio65", "gpio66", "gpio67", "gpio68", "gpio69", "gpio70",
 520        "gpio71", "gpio72", "gpio73", "gpio74", "gpio75", "gpio76", "gpio77",
 521        "gpio78", "gpio79", "gpio80", "gpio81", "gpio82", "gpio83", "gpio84",
 522        "gpio85", "gpio86", "gpio87", "gpio88", "gpio89", "gpio90", "gpio91",
 523        "gpio92", "gpio93", "gpio94", "gpio95", "gpio96", "gpio97", "gpio98",
 524        "gpio99", "gpio100", "gpio101", "gpio102", "gpio103", "gpio104",
 525        "gpio105", "gpio106", "gpio107", "gpio108", "gpio109", "gpio110",
 526        "gpio111", "gpio112", "gpio113", "gpio114", "gpio115", "gpio116",
 527        "gpio117", "gpio118", "gpio119", "gpio120", "gpio121", "gpio122",
 528        "gpio123", "gpio124", "gpio125", "gpio126", "gpio127", "gpio128",
 529        "gpio129", "gpio130", "gpio131", "gpio132", "gpio133", "gpio134",
 530        "gpio135", "gpio136", "gpio137", "gpio138", "gpio139", "gpio140",
 531        "gpio141", "gpio142", "gpio143", "gpio144",
 532};
 533static const char * const blsp_uart1_groups[] = {
 534        "gpio0", "gpio1", "gpio2", "gpio3",
 535};
 536static const char * const blsp_spi1_groups[] = {
 537        "gpio0", "gpio1", "gpio2", "gpio3",
 538};
 539static const char * const smb_int_groups[] = {
 540        "gpio1",
 541};
 542static const char * const blsp_i2c1_groups[] = {
 543        "gpio2", "gpio3",
 544};
 545static const char * const blsp_spi2_groups[] = {
 546        "gpio4", "gpio5", "gpio6", "gpio7",
 547};
 548static const char * const blsp_uart2_groups[] = {
 549        "gpio4", "gpio5", "gpio6", "gpio7",
 550};
 551static const char * const blsp_i2c2_groups[] = {
 552        "gpio6", "gpio7",
 553};
 554static const char * const gcc_gp1_clk_b_groups[] = {
 555        "gpio105",
 556};
 557static const char * const blsp_spi3_groups[] = {
 558        "gpio8", "gpio9", "gpio10", "gpio11",
 559};
 560static const char * const qdss_tracedata_b_groups[] = {
 561        "gpio26", "gpio27", "gpio28", "gpio29", "gpio30",
 562        "gpio31", "gpio33", "gpio34", "gpio35", "gpio36", "gpio37", "gpio38",
 563        "gpio116", "gpio126", "gpio128", "gpio129",
 564};
 565static const char * const blsp_i2c3_groups[] = {
 566        "gpio10", "gpio11",
 567};
 568static const char * const gcc_gp2_clk_b_groups[] = {
 569        "gpio12",
 570};
 571static const char * const gcc_gp3_clk_b_groups[] = {
 572        "gpio13",
 573};
 574static const char * const blsp_spi4_groups[] = {
 575        "gpio12", "gpio13", "gpio14", "gpio15",
 576};
 577static const char * const cap_int_groups[] = {
 578        "gpio13",
 579};
 580static const char * const blsp_i2c4_groups[] = {
 581        "gpio14", "gpio15",
 582};
 583static const char * const blsp_spi5_groups[] = {
 584        "gpio134", "gpio135", "gpio136", "gpio137",
 585};
 586static const char * const blsp_uart5_groups[] = {
 587        "gpio134", "gpio135", "gpio136", "gpio137",
 588};
 589static const char * const qdss_traceclk_a_groups[] = {
 590        "gpio46",
 591};
 592static const char * const m_voc_groups[] = {
 593        "gpio123", "gpio124",
 594};
 595static const char * const blsp_i2c5_groups[] = {
 596        "gpio136", "gpio137",
 597};
 598static const char * const qdss_tracectl_a_groups[] = {
 599        "gpio45",
 600};
 601static const char * const qdss_tracedata_a_groups[] = {
 602        "gpio8", "gpio9", "gpio10", "gpio39", "gpio40", "gpio41", "gpio42",
 603        "gpio43", "gpio44", "gpio47", "gpio48", "gpio62", "gpio69", "gpio120",
 604        "gpio121", "gpio130", "gpio131",
 605};
 606static const char * const blsp_spi6_groups[] = {
 607        "gpio20", "gpio21", "gpio22", "gpio23",
 608};
 609static const char * const blsp_uart6_groups[] = {
 610        "gpio20", "gpio21", "gpio22", "gpio23",
 611};
 612static const char * const qdss_tracectl_b_groups[] = {
 613        "gpio5",
 614};
 615static const char * const blsp_i2c6_groups[] = {
 616        "gpio22", "gpio23",
 617};
 618static const char * const qdss_traceclk_b_groups[] = {
 619        "gpio5",
 620};
 621static const char * const mdp_vsync_groups[] = {
 622        "gpio24", "gpio25",
 623};
 624static const char * const pri_mi2s_mclk_a_groups[] = {
 625        "gpio126",
 626};
 627static const char * const sec_mi2s_mclk_a_groups[] = {
 628        "gpio62",
 629};
 630static const char * const cam_mclk_groups[] = {
 631        "gpio26", "gpio27", "gpio28",
 632};
 633static const char * const cci0_i2c_groups[] = {
 634        "gpio30", "gpio29",
 635};
 636static const char * const cci1_i2c_groups[] = {
 637        "gpio104", "gpio103",
 638};
 639static const char * const blsp1_spi_groups[] = {
 640        "gpio101",
 641};
 642static const char * const blsp3_spi_groups[] = {
 643        "gpio106", "gpio107",
 644};
 645static const char * const gcc_gp1_clk_a_groups[] = {
 646        "gpio49",
 647};
 648static const char * const gcc_gp2_clk_a_groups[] = {
 649        "gpio50",
 650};
 651static const char * const gcc_gp3_clk_a_groups[] = {
 652        "gpio51",
 653};
 654static const char * const uim_batt_groups[] = {
 655        "gpio61",
 656};
 657static const char * const sd_write_groups[] = {
 658        "gpio50",
 659};
 660static const char * const uim2_data_groups[] = {
 661        "gpio51",
 662};
 663static const char * const uim2_clk_groups[] = {
 664        "gpio52",
 665};
 666static const char * const uim2_reset_groups[] = {
 667        "gpio53",
 668};
 669static const char * const uim2_present_groups[] = {
 670        "gpio54",
 671};
 672static const char * const uim1_data_groups[] = {
 673        "gpio55",
 674};
 675static const char * const uim1_clk_groups[] = {
 676        "gpio56",
 677};
 678static const char * const uim1_reset_groups[] = {
 679        "gpio57",
 680};
 681static const char * const uim1_present_groups[] = {
 682        "gpio58",
 683};
 684static const char * const ts_xvdd_groups[] = {
 685        "gpio60",
 686};
 687static const char * const mipi_dsi0_groups[] = {
 688        "gpio61",
 689};
 690static const char * const us_euro_groups[] = {
 691        "gpio63",
 692};
 693static const char * const ts_resout_groups[] = {
 694        "gpio64",
 695};
 696static const char * const ts_sample_groups[] = {
 697        "gpio65",
 698};
 699static const char * const sec_mi2s_mclk_b_groups[] = {
 700        "gpio66",
 701};
 702static const char * const pri_mi2s_groups[] = {
 703        "gpio122", "gpio123", "gpio124", "gpio125", "gpio127",
 704};
 705static const char * const codec_reset_groups[] = {
 706        "gpio67",
 707};
 708static const char * const cdc_pdm0_groups[] = {
 709        "gpio116", "gpio117", "gpio118", "gpio119", "gpio120", "gpio121",
 710};
 711static const char * const us_emitter_groups[] = {
 712        "gpio68",
 713};
 714static const char * const pri_mi2s_mclk_b_groups[] = {
 715        "gpio62",
 716};
 717static const char * const pri_mi2s_mclk_c_groups[] = {
 718        "gpio116",
 719};
 720static const char * const lpass_slimbus_groups[] = {
 721        "gpio117",
 722};
 723static const char * const lpass_slimbus0_groups[] = {
 724        "gpio118",
 725};
 726static const char * const lpass_slimbus1_groups[] = {
 727        "gpio119",
 728};
 729static const char * const codec_int1_groups[] = {
 730        "gpio73",
 731};
 732static const char * const codec_int2_groups[] = {
 733        "gpio74",
 734};
 735static const char * const wcss_bt_groups[] = {
 736        "gpio39", "gpio47", "gpio88",
 737};
 738static const char * const sdc3_groups[] = {
 739        "gpio39", "gpio40", "gpio41",
 740        "gpio42", "gpio43", "gpio44",
 741};
 742static const char * const wcss_wlan2_groups[] = {
 743        "gpio40",
 744};
 745static const char * const wcss_wlan1_groups[] = {
 746        "gpio41",
 747};
 748static const char * const wcss_wlan0_groups[] = {
 749        "gpio42",
 750};
 751static const char * const wcss_wlan_groups[] = {
 752        "gpio43", "gpio44",
 753};
 754static const char * const wcss_fm_groups[] = {
 755        "gpio45", "gpio46",
 756};
 757static const char * const key_volp_groups[] = {
 758        "gpio85",
 759};
 760static const char * const key_snapshot_groups[] = {
 761        "gpio86",
 762};
 763static const char * const key_focus_groups[] = {
 764        "gpio87",
 765};
 766static const char * const key_home_groups[] = {
 767        "gpio88",
 768};
 769static const char * const pwr_down_groups[] = {
 770        "gpio89",
 771};
 772static const char * const dmic0_clk_groups[] = {
 773        "gpio66",
 774};
 775static const char * const hdmi_int_groups[] = {
 776        "gpio90",
 777};
 778static const char * const dmic0_data_groups[] = {
 779        "gpio67",
 780};
 781static const char * const wsa_vi_groups[] = {
 782        "gpio108", "gpio109",
 783};
 784static const char * const wsa_en_groups[] = {
 785        "gpio96",
 786};
 787static const char * const blsp_spi8_groups[] = {
 788        "gpio16", "gpio17", "gpio18", "gpio19",
 789};
 790static const char * const wsa_irq_groups[] = {
 791        "gpio97",
 792};
 793static const char * const blsp_i2c8_groups[] = {
 794        "gpio18", "gpio19",
 795};
 796static const char * const pa_indicator_groups[] = {
 797        "gpio92",
 798};
 799static const char * const modem_tsync_groups[] = {
 800        "gpio93",
 801};
 802static const char * const nav_tsync_groups[] = {
 803        "gpio93",
 804};
 805static const char * const ssbi_wtr1_groups[] = {
 806        "gpio79", "gpio94",
 807};
 808static const char * const gsm1_tx_groups[] = {
 809        "gpio95",
 810};
 811static const char * const gsm0_tx_groups[] = {
 812        "gpio99",
 813};
 814static const char * const sdcard_det_groups[] = {
 815        "gpio133",
 816};
 817static const char * const sec_mi2s_groups[] = {
 818        "gpio102", "gpio105", "gpio134", "gpio135",
 819};
 820
 821static const char * const ss_switch_groups[] = {
 822        "gpio139",
 823};
 824
 825static const struct msm_function msm8976_functions[] = {
 826        FUNCTION(gpio),
 827        FUNCTION(blsp_spi1),
 828        FUNCTION(smb_int),
 829        FUNCTION(blsp_i2c1),
 830        FUNCTION(blsp_spi2),
 831        FUNCTION(blsp_uart1),
 832        FUNCTION(blsp_uart2),
 833        FUNCTION(blsp_i2c2),
 834        FUNCTION(gcc_gp1_clk_b),
 835        FUNCTION(blsp_spi3),
 836        FUNCTION(qdss_tracedata_b),
 837        FUNCTION(blsp_i2c3),
 838        FUNCTION(gcc_gp2_clk_b),
 839        FUNCTION(gcc_gp3_clk_b),
 840        FUNCTION(blsp_spi4),
 841        FUNCTION(cap_int),
 842        FUNCTION(blsp_i2c4),
 843        FUNCTION(blsp_spi5),
 844        FUNCTION(blsp_uart5),
 845        FUNCTION(qdss_traceclk_a),
 846        FUNCTION(m_voc),
 847        FUNCTION(blsp_i2c5),
 848        FUNCTION(qdss_tracectl_a),
 849        FUNCTION(qdss_tracedata_a),
 850        FUNCTION(blsp_spi6),
 851        FUNCTION(blsp_uart6),
 852        FUNCTION(qdss_tracectl_b),
 853        FUNCTION(blsp_i2c6),
 854        FUNCTION(qdss_traceclk_b),
 855        FUNCTION(mdp_vsync),
 856        FUNCTION(pri_mi2s_mclk_a),
 857        FUNCTION(sec_mi2s_mclk_a),
 858        FUNCTION(cam_mclk),
 859        FUNCTION(cci0_i2c),
 860        FUNCTION(cci1_i2c),
 861        FUNCTION(blsp1_spi),
 862        FUNCTION(blsp3_spi),
 863        FUNCTION(gcc_gp1_clk_a),
 864        FUNCTION(gcc_gp2_clk_a),
 865        FUNCTION(gcc_gp3_clk_a),
 866        FUNCTION(uim_batt),
 867        FUNCTION(sd_write),
 868        FUNCTION(uim1_data),
 869        FUNCTION(uim1_clk),
 870        FUNCTION(uim1_reset),
 871        FUNCTION(uim1_present),
 872        FUNCTION(uim2_data),
 873        FUNCTION(uim2_clk),
 874        FUNCTION(uim2_reset),
 875        FUNCTION(uim2_present),
 876        FUNCTION(ts_xvdd),
 877        FUNCTION(mipi_dsi0),
 878        FUNCTION(us_euro),
 879        FUNCTION(ts_resout),
 880        FUNCTION(ts_sample),
 881        FUNCTION(sec_mi2s_mclk_b),
 882        FUNCTION(pri_mi2s),
 883        FUNCTION(codec_reset),
 884        FUNCTION(cdc_pdm0),
 885        FUNCTION(us_emitter),
 886        FUNCTION(pri_mi2s_mclk_b),
 887        FUNCTION(pri_mi2s_mclk_c),
 888        FUNCTION(lpass_slimbus),
 889        FUNCTION(lpass_slimbus0),
 890        FUNCTION(lpass_slimbus1),
 891        FUNCTION(codec_int1),
 892        FUNCTION(codec_int2),
 893        FUNCTION(wcss_bt),
 894        FUNCTION(sdc3),
 895        FUNCTION(wcss_wlan2),
 896        FUNCTION(wcss_wlan1),
 897        FUNCTION(wcss_wlan0),
 898        FUNCTION(wcss_wlan),
 899        FUNCTION(wcss_fm),
 900        FUNCTION(key_volp),
 901        FUNCTION(key_snapshot),
 902        FUNCTION(key_focus),
 903        FUNCTION(key_home),
 904        FUNCTION(pwr_down),
 905        FUNCTION(dmic0_clk),
 906        FUNCTION(hdmi_int),
 907        FUNCTION(dmic0_data),
 908        FUNCTION(wsa_vi),
 909        FUNCTION(wsa_en),
 910        FUNCTION(blsp_spi8),
 911        FUNCTION(wsa_irq),
 912        FUNCTION(blsp_i2c8),
 913        FUNCTION(pa_indicator),
 914        FUNCTION(modem_tsync),
 915        FUNCTION(ssbi_wtr1),
 916        FUNCTION(gsm1_tx),
 917        FUNCTION(gsm0_tx),
 918        FUNCTION(sdcard_det),
 919        FUNCTION(sec_mi2s),
 920        FUNCTION(ss_switch),
 921};
 922
 923static const struct msm_pingroup msm8976_groups[] = {
 924        PINGROUP(0, blsp_spi1, blsp_uart1, NA, NA, NA, NA, NA, NA, NA),
 925        PINGROUP(1, blsp_spi1, blsp_uart1, NA, NA, NA, NA, NA, NA, NA),
 926        PINGROUP(2, blsp_spi1, blsp_uart1, blsp_i2c1, NA, NA, NA, NA, NA, NA),
 927        PINGROUP(3, blsp_spi1, blsp_uart1, blsp_i2c1, NA, NA, NA, NA, NA, NA),
 928        PINGROUP(4, blsp_spi2, blsp_uart2, NA, NA, NA, qdss_tracectl_b, NA, NA, NA),
 929        PINGROUP(5, blsp_spi2, blsp_uart2, NA, NA, NA, qdss_traceclk_b, NA, NA, NA),
 930        PINGROUP(6, blsp_spi2, blsp_uart2, blsp_i2c2, NA, NA, NA, NA, NA, NA),
 931        PINGROUP(7, blsp_spi2, blsp_uart2, blsp_i2c2, NA, NA, NA, NA, NA, NA),
 932        PINGROUP(8, blsp_spi3, NA, NA, NA, NA, qdss_tracedata_a, NA, NA, NA),
 933        PINGROUP(9, blsp_spi3, NA, NA, NA, qdss_tracedata_a, NA, NA, NA, NA),
 934        PINGROUP(10, blsp_spi3, NA, blsp_i2c3, NA, NA, qdss_tracedata_a, NA, NA, NA),
 935        PINGROUP(11, blsp_spi3, NA, blsp_i2c3, NA, NA, NA, NA, NA, NA),
 936        PINGROUP(12, blsp_spi4, NA, gcc_gp2_clk_b, NA, NA, NA, NA, NA, NA),
 937        PINGROUP(13, blsp_spi4, NA, gcc_gp3_clk_b, NA, NA, NA, NA, NA, NA),
 938        PINGROUP(14, blsp_spi4, NA, blsp_i2c4, NA, NA, NA, NA, NA, NA),
 939        PINGROUP(15, blsp_spi4, NA, blsp_i2c4, NA, NA, NA, NA, NA, NA),
 940        PINGROUP(16, blsp_spi8, NA, NA, NA, NA, NA, NA, NA, NA),
 941        PINGROUP(17, blsp_spi8, NA, NA, NA, NA, NA, NA, NA, NA),
 942        PINGROUP(18, blsp_spi8, NA, blsp_i2c8, NA, NA, NA, NA, NA, NA),
 943        PINGROUP(19, blsp_spi8, NA, blsp_i2c8, NA, NA, NA, NA, NA, NA),
 944        PINGROUP(20, blsp_spi6, blsp_uart6, NA, NA, NA, NA, NA, NA, NA),
 945        PINGROUP(21, blsp_spi6, blsp_uart6, NA, NA, NA, NA, NA, NA, NA),
 946        PINGROUP(22, blsp_spi6, blsp_uart6, blsp_i2c6, NA, NA, NA, NA, NA, NA),
 947        PINGROUP(23, blsp_spi6, blsp_uart6, blsp_i2c6, NA, NA, NA, NA, NA, NA),
 948        PINGROUP(24, mdp_vsync, NA, NA, NA, NA, NA, NA, NA, NA),
 949        PINGROUP(25, mdp_vsync, NA, NA, NA, NA, NA, NA, NA, NA),
 950        PINGROUP(26, cam_mclk, NA, NA, NA, NA, qdss_tracedata_b, NA, NA, NA),
 951        PINGROUP(27, cam_mclk, NA, NA, NA, NA, NA, qdss_tracedata_b, NA, NA),
 952        PINGROUP(28, cam_mclk, NA, NA, NA, NA, qdss_tracedata_b, NA, NA, NA),
 953        PINGROUP(29, cci0_i2c, NA, NA, NA, NA, qdss_tracedata_b, NA, NA, NA),
 954        PINGROUP(30, cci0_i2c, NA, NA, NA, NA, NA, qdss_tracedata_b, NA, NA),
 955        PINGROUP(31, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b, NA),
 956        PINGROUP(32, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 957        PINGROUP(33, NA, NA, NA, NA, NA, NA, qdss_tracedata_b, NA, NA),
 958        PINGROUP(34, NA, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b),
 959        PINGROUP(35, NA, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b),
 960        PINGROUP(36, NA, NA, NA, NA, NA, NA, qdss_tracedata_b, NA, NA),
 961        PINGROUP(37, NA, NA, NA, qdss_tracedata_b, NA, NA, NA, NA, NA),
 962        PINGROUP(38, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b, NA),
 963        PINGROUP(39, wcss_bt, sdc3, NA, qdss_tracedata_a, NA, NA, NA, NA, NA),
 964        PINGROUP(40, wcss_wlan, sdc3, NA, qdss_tracedata_a, NA, NA, NA, NA, NA),
 965        PINGROUP(41, wcss_wlan, sdc3, NA, qdss_tracedata_a, NA, NA, NA, NA, NA),
 966        PINGROUP(42, wcss_wlan, sdc3, NA, qdss_tracedata_a, NA, NA, NA, NA, NA),
 967        PINGROUP(43, wcss_wlan, sdc3, NA, NA, qdss_tracedata_a, NA, NA, NA, NA),
 968        PINGROUP(44, wcss_wlan, sdc3, NA, NA, NA, NA, NA, NA, NA),
 969        PINGROUP(45, wcss_fm, NA, qdss_tracectl_a, NA, NA, NA, NA, NA, NA),
 970        PINGROUP(46, wcss_fm, NA, NA, qdss_traceclk_a, NA, NA, NA, NA, NA),
 971        PINGROUP(47, wcss_bt, NA, qdss_tracedata_a, NA, NA, NA, NA, NA, NA),
 972        PINGROUP(48, wcss_bt, NA, qdss_tracedata_a, NA, NA, NA, NA, NA, NA),
 973        PINGROUP(49, NA, NA, gcc_gp1_clk_a, NA, NA, NA, NA, NA, NA),
 974        PINGROUP(50, NA, sd_write, gcc_gp2_clk_a, NA, NA, NA, NA, NA, NA),
 975        PINGROUP(51, uim2_data, gcc_gp3_clk_a, NA, NA, NA, NA, NA, NA, NA),
 976        PINGROUP(52, uim2_clk, NA, NA, NA, NA, NA, NA, NA, NA),
 977        PINGROUP(53, uim2_reset, NA, NA, NA, NA, NA, NA, NA, NA),
 978        PINGROUP(54, uim2_present, NA, NA, NA, NA, NA, NA, NA, NA),
 979        PINGROUP(55, uim1_data, NA, NA, NA, NA, NA, NA, NA, NA),
 980        PINGROUP(56, uim1_clk, NA, NA, NA, NA, NA, NA, NA, NA),
 981        PINGROUP(57, uim1_reset, NA, NA, NA, NA, NA, NA, NA, NA),
 982        PINGROUP(58, uim1_present, NA, NA, NA, NA, NA, NA, NA, NA),
 983        PINGROUP(59, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 984        PINGROUP(60, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 985        PINGROUP(61, uim_batt, NA, NA, NA, NA, NA, NA, NA, NA),
 986        PINGROUP(62, sec_mi2s_mclk_a, pri_mi2s_mclk_b, qdss_tracedata_a, NA, NA, NA, NA, NA, NA),
 987        PINGROUP(63, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 988        PINGROUP(64, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 989        PINGROUP(65, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 990        PINGROUP(66, dmic0_clk, NA, NA, NA, NA, NA, NA, NA, NA),
 991        PINGROUP(67, dmic0_data, NA, NA, NA, NA, NA, NA, NA, NA),
 992        PINGROUP(68, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 993        PINGROUP(69, qdss_tracedata_a, NA, NA, NA, NA, NA, NA, NA, NA),
 994        PINGROUP(70, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 995        PINGROUP(71, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 996        PINGROUP(72, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 997        PINGROUP(73, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 998        PINGROUP(74, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 999        PINGROUP(75, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1000        PINGROUP(76, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1001        PINGROUP(77, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1002        PINGROUP(78, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1003        PINGROUP(79, NA, ssbi_wtr1, NA, NA, NA, NA, NA, NA, NA),
1004        PINGROUP(80, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1005        PINGROUP(81, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1006        PINGROUP(82, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1007        PINGROUP(83, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1008        PINGROUP(84, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1009        PINGROUP(85, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1010        PINGROUP(86, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1011        PINGROUP(87, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1012        PINGROUP(88, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1013        PINGROUP(89, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1014        PINGROUP(90, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1015        PINGROUP(91, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1016        PINGROUP(92, NA, NA, pa_indicator, NA, NA, NA, NA, NA, NA),
1017        PINGROUP(93, NA, modem_tsync, NA, NA, NA, NA, NA, NA, NA),
1018        PINGROUP(94, NA, ssbi_wtr1, NA, NA, NA, NA, NA, NA, NA),
1019        PINGROUP(95, NA, gsm1_tx, NA, NA, NA, NA, NA, NA, NA),
1020        PINGROUP(96, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1021        PINGROUP(97, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1022        PINGROUP(98, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1023        PINGROUP(99, gsm0_tx, NA, NA, NA, NA, NA, NA, NA, NA),
1024        PINGROUP(100, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1025        PINGROUP(101, blsp1_spi, NA, NA, NA, NA, NA, NA, NA, NA),
1026        PINGROUP(102, sec_mi2s, NA, NA, NA, NA, NA, NA, NA, NA),
1027        PINGROUP(103, cci1_i2c, NA, NA, NA, NA, NA, NA, NA, NA),
1028        PINGROUP(104, cci1_i2c, NA, NA, NA, NA, NA, NA, NA, NA),
1029        PINGROUP(105, sec_mi2s, gcc_gp1_clk_b, NA, NA, NA, NA, NA, NA, NA),
1030        PINGROUP(106, blsp3_spi, NA, NA, NA, NA, NA, NA, NA, NA),
1031        PINGROUP(107, blsp3_spi, NA, NA, NA, NA, NA, NA, NA, NA),
1032        PINGROUP(108, wsa_vi, NA, NA, NA, NA, NA, NA, NA, NA),
1033        PINGROUP(109, wsa_vi, NA, NA, NA, NA, NA, NA, NA, NA),
1034        PINGROUP(110, NA, NA, NA, NA,  NA, NA, NA, NA, NA),
1035        PINGROUP(111, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1036        PINGROUP(112, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1037        PINGROUP(113, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1038        PINGROUP(114, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1039        PINGROUP(115, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1040        PINGROUP(116, pri_mi2s_mclk_c, cdc_pdm0, NA, NA, NA, qdss_tracedata_b, NA, NA, NA),
1041        PINGROUP(117, lpass_slimbus, cdc_pdm0, NA, NA, NA, NA, NA, NA, NA),
1042        PINGROUP(118, lpass_slimbus0, cdc_pdm0, NA, NA, NA, NA, NA, NA, NA),
1043        PINGROUP(119, lpass_slimbus1, cdc_pdm0, NA, NA, NA, NA, NA, NA, NA),
1044        PINGROUP(120, cdc_pdm0, NA, NA, NA, NA, NA, NA, qdss_tracedata_a, NA),
1045        PINGROUP(121, cdc_pdm0, NA, NA, NA, NA, NA, NA, qdss_tracedata_a, NA),
1046        PINGROUP(122, pri_mi2s, NA, NA, NA, NA, NA, NA, NA, NA),
1047        PINGROUP(123, pri_mi2s, m_voc, NA, NA, NA, NA, NA, NA, NA),
1048        PINGROUP(124, pri_mi2s, m_voc, NA, NA, NA, NA, NA, NA, NA),
1049        PINGROUP(125, pri_mi2s, NA, NA, NA, NA, NA, NA, NA, NA),
1050        PINGROUP(126, pri_mi2s_mclk_a, sec_mi2s_mclk_b, NA, NA, NA, NA, NA, NA, qdss_tracedata_b),
1051        PINGROUP(127, pri_mi2s, NA, NA, NA, NA, NA, NA, NA, NA),
1052        PINGROUP(128, NA, NA, NA, NA, NA, NA, qdss_tracedata_b, NA, NA),
1053        PINGROUP(129, qdss_tracedata_b, NA, NA, NA, NA, NA, NA, NA, NA),
1054        PINGROUP(130, qdss_tracedata_a, NA, NA, NA, NA, NA, NA, NA, NA),
1055        PINGROUP(131, qdss_tracedata_a, NA, NA, NA, NA, NA, NA, NA, NA),
1056        PINGROUP(132, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1057        PINGROUP(133, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1058        PINGROUP(134, blsp_spi5, blsp_uart5, sec_mi2s, NA, NA, NA, NA, NA, NA),
1059        PINGROUP(135, blsp_spi5, blsp_uart5, sec_mi2s, NA, NA, NA, NA, NA, NA),
1060        PINGROUP(136, blsp_spi5, blsp_uart5, blsp_i2c5, NA, NA, NA, NA, NA, NA),
1061        PINGROUP(137, blsp_spi5, blsp_uart5, blsp_i2c5, NA, NA, NA, NA, NA, NA),
1062        PINGROUP(138, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1063        PINGROUP(139, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1064        PINGROUP(140, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1065        PINGROUP(141, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1066        PINGROUP(142, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1067        PINGROUP(143, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1068        PINGROUP(144, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1069        SDC_QDSD_PINGROUP(sdc1_clk, 0x10a000, 13, 6),
1070        SDC_QDSD_PINGROUP(sdc1_cmd, 0x10a000, 11, 3),
1071        SDC_QDSD_PINGROUP(sdc1_data, 0x10a000, 9, 0),
1072        SDC_QDSD_PINGROUP(sdc1_rclk, 0x10a000, 15, 0),
1073        SDC_QDSD_PINGROUP(sdc2_clk, 0x109000, 14, 6),
1074        SDC_QDSD_PINGROUP(sdc2_cmd, 0x109000, 11, 3),
1075        SDC_QDSD_PINGROUP(sdc2_data, 0x109000, 9, 0),
1076        SDC_QDSD_PINGROUP(qdsd_clk, 0x19c000, 3, 0),
1077        SDC_QDSD_PINGROUP(qdsd_cmd, 0x19c000, 8, 5),
1078        SDC_QDSD_PINGROUP(qdsd_data0, 0x19c000, 13, 10),
1079        SDC_QDSD_PINGROUP(qdsd_data1, 0x19c000, 18, 15),
1080        SDC_QDSD_PINGROUP(qdsd_data2, 0x19c000, 23, 20),
1081        SDC_QDSD_PINGROUP(qdsd_data3, 0x19c000, 28, 25),
1082};
1083
1084static const struct msm_pinctrl_soc_data msm8976_pinctrl = {
1085        .pins = msm8976_pins,
1086        .npins = ARRAY_SIZE(msm8976_pins),
1087        .functions = msm8976_functions,
1088        .nfunctions = ARRAY_SIZE(msm8976_functions),
1089        .groups = msm8976_groups,
1090        .ngroups = ARRAY_SIZE(msm8976_groups),
1091        .ngpios = 145,
1092};
1093
1094static int msm8976_pinctrl_probe(struct platform_device *pdev)
1095{
1096        return msm_pinctrl_probe(pdev, &msm8976_pinctrl);
1097}
1098
1099static const struct of_device_id msm8976_pinctrl_of_match[] = {
1100        { .compatible = "qcom,msm8976-pinctrl", },
1101        { },
1102};
1103
1104static struct platform_driver msm8976_pinctrl_driver = {
1105        .driver = {
1106                .name = "msm8976-pinctrl",
1107                .of_match_table = msm8976_pinctrl_of_match,
1108        },
1109        .probe = msm8976_pinctrl_probe,
1110        .remove = msm_pinctrl_remove,
1111};
1112
1113static int __init msm8976_pinctrl_init(void)
1114{
1115        return platform_driver_register(&msm8976_pinctrl_driver);
1116}
1117arch_initcall(msm8976_pinctrl_init);
1118
1119static void __exit msm8976_pinctrl_exit(void)
1120{
1121        platform_driver_unregister(&msm8976_pinctrl_driver);
1122}
1123module_exit(msm8976_pinctrl_exit);
1124
1125MODULE_DESCRIPTION("Qualcomm msm8976 pinctrl driver");
1126MODULE_LICENSE("GPL v2");
1127MODULE_DEVICE_TABLE(of, msm8976_pinctrl_of_match);
1128