cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

pinctrl-msm8660.c (30952B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * Copyright (c) 2015, Sony Mobile Communications AB.
      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 msm8660_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, "GPIO_122"),
    137	PINCTRL_PIN(123, "GPIO_123"),
    138	PINCTRL_PIN(124, "GPIO_124"),
    139	PINCTRL_PIN(125, "GPIO_125"),
    140	PINCTRL_PIN(126, "GPIO_126"),
    141	PINCTRL_PIN(127, "GPIO_127"),
    142	PINCTRL_PIN(128, "GPIO_128"),
    143	PINCTRL_PIN(129, "GPIO_129"),
    144	PINCTRL_PIN(130, "GPIO_130"),
    145	PINCTRL_PIN(131, "GPIO_131"),
    146	PINCTRL_PIN(132, "GPIO_132"),
    147	PINCTRL_PIN(133, "GPIO_133"),
    148	PINCTRL_PIN(134, "GPIO_134"),
    149	PINCTRL_PIN(135, "GPIO_135"),
    150	PINCTRL_PIN(136, "GPIO_136"),
    151	PINCTRL_PIN(137, "GPIO_137"),
    152	PINCTRL_PIN(138, "GPIO_138"),
    153	PINCTRL_PIN(139, "GPIO_139"),
    154	PINCTRL_PIN(140, "GPIO_140"),
    155	PINCTRL_PIN(141, "GPIO_141"),
    156	PINCTRL_PIN(142, "GPIO_142"),
    157	PINCTRL_PIN(143, "GPIO_143"),
    158	PINCTRL_PIN(144, "GPIO_144"),
    159	PINCTRL_PIN(145, "GPIO_145"),
    160	PINCTRL_PIN(146, "GPIO_146"),
    161	PINCTRL_PIN(147, "GPIO_147"),
    162	PINCTRL_PIN(148, "GPIO_148"),
    163	PINCTRL_PIN(149, "GPIO_149"),
    164	PINCTRL_PIN(150, "GPIO_150"),
    165	PINCTRL_PIN(151, "GPIO_151"),
    166	PINCTRL_PIN(152, "GPIO_152"),
    167	PINCTRL_PIN(153, "GPIO_153"),
    168	PINCTRL_PIN(154, "GPIO_154"),
    169	PINCTRL_PIN(155, "GPIO_155"),
    170	PINCTRL_PIN(156, "GPIO_156"),
    171	PINCTRL_PIN(157, "GPIO_157"),
    172	PINCTRL_PIN(158, "GPIO_158"),
    173	PINCTRL_PIN(159, "GPIO_159"),
    174	PINCTRL_PIN(160, "GPIO_160"),
    175	PINCTRL_PIN(161, "GPIO_161"),
    176	PINCTRL_PIN(162, "GPIO_162"),
    177	PINCTRL_PIN(163, "GPIO_163"),
    178	PINCTRL_PIN(164, "GPIO_164"),
    179	PINCTRL_PIN(165, "GPIO_165"),
    180	PINCTRL_PIN(166, "GPIO_166"),
    181	PINCTRL_PIN(167, "GPIO_167"),
    182	PINCTRL_PIN(168, "GPIO_168"),
    183	PINCTRL_PIN(169, "GPIO_169"),
    184	PINCTRL_PIN(170, "GPIO_170"),
    185	PINCTRL_PIN(171, "GPIO_171"),
    186	PINCTRL_PIN(172, "GPIO_172"),
    187
    188	PINCTRL_PIN(173, "SDC4_CLK"),
    189	PINCTRL_PIN(174, "SDC4_CMD"),
    190	PINCTRL_PIN(175, "SDC4_DATA"),
    191	PINCTRL_PIN(176, "SDC3_CLK"),
    192	PINCTRL_PIN(177, "SDC3_CMD"),
    193	PINCTRL_PIN(178, "SDC3_DATA"),
    194};
    195
    196#define DECLARE_MSM_GPIO_PIN(pin) static const unsigned int gpio##pin##_pins[] = { pin }
    197DECLARE_MSM_GPIO_PIN(0);
    198DECLARE_MSM_GPIO_PIN(1);
    199DECLARE_MSM_GPIO_PIN(2);
    200DECLARE_MSM_GPIO_PIN(3);
    201DECLARE_MSM_GPIO_PIN(4);
    202DECLARE_MSM_GPIO_PIN(5);
    203DECLARE_MSM_GPIO_PIN(6);
    204DECLARE_MSM_GPIO_PIN(7);
    205DECLARE_MSM_GPIO_PIN(8);
    206DECLARE_MSM_GPIO_PIN(9);
    207DECLARE_MSM_GPIO_PIN(10);
    208DECLARE_MSM_GPIO_PIN(11);
    209DECLARE_MSM_GPIO_PIN(12);
    210DECLARE_MSM_GPIO_PIN(13);
    211DECLARE_MSM_GPIO_PIN(14);
    212DECLARE_MSM_GPIO_PIN(15);
    213DECLARE_MSM_GPIO_PIN(16);
    214DECLARE_MSM_GPIO_PIN(17);
    215DECLARE_MSM_GPIO_PIN(18);
    216DECLARE_MSM_GPIO_PIN(19);
    217DECLARE_MSM_GPIO_PIN(20);
    218DECLARE_MSM_GPIO_PIN(21);
    219DECLARE_MSM_GPIO_PIN(22);
    220DECLARE_MSM_GPIO_PIN(23);
    221DECLARE_MSM_GPIO_PIN(24);
    222DECLARE_MSM_GPIO_PIN(25);
    223DECLARE_MSM_GPIO_PIN(26);
    224DECLARE_MSM_GPIO_PIN(27);
    225DECLARE_MSM_GPIO_PIN(28);
    226DECLARE_MSM_GPIO_PIN(29);
    227DECLARE_MSM_GPIO_PIN(30);
    228DECLARE_MSM_GPIO_PIN(31);
    229DECLARE_MSM_GPIO_PIN(32);
    230DECLARE_MSM_GPIO_PIN(33);
    231DECLARE_MSM_GPIO_PIN(34);
    232DECLARE_MSM_GPIO_PIN(35);
    233DECLARE_MSM_GPIO_PIN(36);
    234DECLARE_MSM_GPIO_PIN(37);
    235DECLARE_MSM_GPIO_PIN(38);
    236DECLARE_MSM_GPIO_PIN(39);
    237DECLARE_MSM_GPIO_PIN(40);
    238DECLARE_MSM_GPIO_PIN(41);
    239DECLARE_MSM_GPIO_PIN(42);
    240DECLARE_MSM_GPIO_PIN(43);
    241DECLARE_MSM_GPIO_PIN(44);
    242DECLARE_MSM_GPIO_PIN(45);
    243DECLARE_MSM_GPIO_PIN(46);
    244DECLARE_MSM_GPIO_PIN(47);
    245DECLARE_MSM_GPIO_PIN(48);
    246DECLARE_MSM_GPIO_PIN(49);
    247DECLARE_MSM_GPIO_PIN(50);
    248DECLARE_MSM_GPIO_PIN(51);
    249DECLARE_MSM_GPIO_PIN(52);
    250DECLARE_MSM_GPIO_PIN(53);
    251DECLARE_MSM_GPIO_PIN(54);
    252DECLARE_MSM_GPIO_PIN(55);
    253DECLARE_MSM_GPIO_PIN(56);
    254DECLARE_MSM_GPIO_PIN(57);
    255DECLARE_MSM_GPIO_PIN(58);
    256DECLARE_MSM_GPIO_PIN(59);
    257DECLARE_MSM_GPIO_PIN(60);
    258DECLARE_MSM_GPIO_PIN(61);
    259DECLARE_MSM_GPIO_PIN(62);
    260DECLARE_MSM_GPIO_PIN(63);
    261DECLARE_MSM_GPIO_PIN(64);
    262DECLARE_MSM_GPIO_PIN(65);
    263DECLARE_MSM_GPIO_PIN(66);
    264DECLARE_MSM_GPIO_PIN(67);
    265DECLARE_MSM_GPIO_PIN(68);
    266DECLARE_MSM_GPIO_PIN(69);
    267DECLARE_MSM_GPIO_PIN(70);
    268DECLARE_MSM_GPIO_PIN(71);
    269DECLARE_MSM_GPIO_PIN(72);
    270DECLARE_MSM_GPIO_PIN(73);
    271DECLARE_MSM_GPIO_PIN(74);
    272DECLARE_MSM_GPIO_PIN(75);
    273DECLARE_MSM_GPIO_PIN(76);
    274DECLARE_MSM_GPIO_PIN(77);
    275DECLARE_MSM_GPIO_PIN(78);
    276DECLARE_MSM_GPIO_PIN(79);
    277DECLARE_MSM_GPIO_PIN(80);
    278DECLARE_MSM_GPIO_PIN(81);
    279DECLARE_MSM_GPIO_PIN(82);
    280DECLARE_MSM_GPIO_PIN(83);
    281DECLARE_MSM_GPIO_PIN(84);
    282DECLARE_MSM_GPIO_PIN(85);
    283DECLARE_MSM_GPIO_PIN(86);
    284DECLARE_MSM_GPIO_PIN(87);
    285DECLARE_MSM_GPIO_PIN(88);
    286DECLARE_MSM_GPIO_PIN(89);
    287DECLARE_MSM_GPIO_PIN(90);
    288DECLARE_MSM_GPIO_PIN(91);
    289DECLARE_MSM_GPIO_PIN(92);
    290DECLARE_MSM_GPIO_PIN(93);
    291DECLARE_MSM_GPIO_PIN(94);
    292DECLARE_MSM_GPIO_PIN(95);
    293DECLARE_MSM_GPIO_PIN(96);
    294DECLARE_MSM_GPIO_PIN(97);
    295DECLARE_MSM_GPIO_PIN(98);
    296DECLARE_MSM_GPIO_PIN(99);
    297DECLARE_MSM_GPIO_PIN(100);
    298DECLARE_MSM_GPIO_PIN(101);
    299DECLARE_MSM_GPIO_PIN(102);
    300DECLARE_MSM_GPIO_PIN(103);
    301DECLARE_MSM_GPIO_PIN(104);
    302DECLARE_MSM_GPIO_PIN(105);
    303DECLARE_MSM_GPIO_PIN(106);
    304DECLARE_MSM_GPIO_PIN(107);
    305DECLARE_MSM_GPIO_PIN(108);
    306DECLARE_MSM_GPIO_PIN(109);
    307DECLARE_MSM_GPIO_PIN(110);
    308DECLARE_MSM_GPIO_PIN(111);
    309DECLARE_MSM_GPIO_PIN(112);
    310DECLARE_MSM_GPIO_PIN(113);
    311DECLARE_MSM_GPIO_PIN(114);
    312DECLARE_MSM_GPIO_PIN(115);
    313DECLARE_MSM_GPIO_PIN(116);
    314DECLARE_MSM_GPIO_PIN(117);
    315DECLARE_MSM_GPIO_PIN(118);
    316DECLARE_MSM_GPIO_PIN(119);
    317DECLARE_MSM_GPIO_PIN(120);
    318DECLARE_MSM_GPIO_PIN(121);
    319DECLARE_MSM_GPIO_PIN(122);
    320DECLARE_MSM_GPIO_PIN(123);
    321DECLARE_MSM_GPIO_PIN(124);
    322DECLARE_MSM_GPIO_PIN(125);
    323DECLARE_MSM_GPIO_PIN(126);
    324DECLARE_MSM_GPIO_PIN(127);
    325DECLARE_MSM_GPIO_PIN(128);
    326DECLARE_MSM_GPIO_PIN(129);
    327DECLARE_MSM_GPIO_PIN(130);
    328DECLARE_MSM_GPIO_PIN(131);
    329DECLARE_MSM_GPIO_PIN(132);
    330DECLARE_MSM_GPIO_PIN(133);
    331DECLARE_MSM_GPIO_PIN(134);
    332DECLARE_MSM_GPIO_PIN(135);
    333DECLARE_MSM_GPIO_PIN(136);
    334DECLARE_MSM_GPIO_PIN(137);
    335DECLARE_MSM_GPIO_PIN(138);
    336DECLARE_MSM_GPIO_PIN(139);
    337DECLARE_MSM_GPIO_PIN(140);
    338DECLARE_MSM_GPIO_PIN(141);
    339DECLARE_MSM_GPIO_PIN(142);
    340DECLARE_MSM_GPIO_PIN(143);
    341DECLARE_MSM_GPIO_PIN(144);
    342DECLARE_MSM_GPIO_PIN(145);
    343DECLARE_MSM_GPIO_PIN(146);
    344DECLARE_MSM_GPIO_PIN(147);
    345DECLARE_MSM_GPIO_PIN(148);
    346DECLARE_MSM_GPIO_PIN(149);
    347DECLARE_MSM_GPIO_PIN(150);
    348DECLARE_MSM_GPIO_PIN(151);
    349DECLARE_MSM_GPIO_PIN(152);
    350DECLARE_MSM_GPIO_PIN(153);
    351DECLARE_MSM_GPIO_PIN(154);
    352DECLARE_MSM_GPIO_PIN(155);
    353DECLARE_MSM_GPIO_PIN(156);
    354DECLARE_MSM_GPIO_PIN(157);
    355DECLARE_MSM_GPIO_PIN(158);
    356DECLARE_MSM_GPIO_PIN(159);
    357DECLARE_MSM_GPIO_PIN(160);
    358DECLARE_MSM_GPIO_PIN(161);
    359DECLARE_MSM_GPIO_PIN(162);
    360DECLARE_MSM_GPIO_PIN(163);
    361DECLARE_MSM_GPIO_PIN(164);
    362DECLARE_MSM_GPIO_PIN(165);
    363DECLARE_MSM_GPIO_PIN(166);
    364DECLARE_MSM_GPIO_PIN(167);
    365DECLARE_MSM_GPIO_PIN(168);
    366DECLARE_MSM_GPIO_PIN(169);
    367DECLARE_MSM_GPIO_PIN(170);
    368DECLARE_MSM_GPIO_PIN(171);
    369DECLARE_MSM_GPIO_PIN(172);
    370
    371static const unsigned int sdc4_clk_pins[] = { 173 };
    372static const unsigned int sdc4_cmd_pins[] = { 174 };
    373static const unsigned int sdc4_data_pins[] = { 175 };
    374static const unsigned int sdc3_clk_pins[] = { 176 };
    375static const unsigned int sdc3_cmd_pins[] = { 177 };
    376static const unsigned int sdc3_data_pins[] = { 178 };
    377
    378#define FUNCTION(fname)					\
    379	[MSM_MUX_##fname] = {				\
    380		.name = #fname,				\
    381		.groups = fname##_groups,		\
    382		.ngroups = ARRAY_SIZE(fname##_groups),	\
    383	}
    384
    385#define PINGROUP(id, f1, f2, f3, f4, f5, f6, f7) \
    386	{						\
    387		.name = "gpio" #id,			\
    388		.pins = gpio##id##_pins,		\
    389		.npins = ARRAY_SIZE(gpio##id##_pins),	\
    390		.funcs = (int[]){			\
    391			MSM_MUX_gpio,			\
    392			MSM_MUX_##f1,			\
    393			MSM_MUX_##f2,			\
    394			MSM_MUX_##f3,			\
    395			MSM_MUX_##f4,			\
    396			MSM_MUX_##f5,			\
    397			MSM_MUX_##f6,			\
    398			MSM_MUX_##f7,			\
    399		},					\
    400		.nfuncs = 8,				\
    401		.ctl_reg = 0x1000 + 0x10 * id,		\
    402		.io_reg = 0x1004 + 0x10 * id,		\
    403		.intr_cfg_reg = 0x1008 + 0x10 * id,	\
    404		.intr_status_reg = 0x100c + 0x10 * id,	\
    405		.intr_target_reg = 0x400 + 0x4 * id,	\
    406		.mux_bit = 2,				\
    407		.pull_bit = 0,				\
    408		.drv_bit = 6,				\
    409		.oe_bit = 9,				\
    410		.in_bit = 0,				\
    411		.out_bit = 1,				\
    412		.intr_enable_bit = 0,			\
    413		.intr_status_bit = 0,			\
    414		.intr_ack_high = 1,			\
    415		.intr_target_bit = 0,			\
    416		.intr_target_kpss_val = 4,		\
    417		.intr_raw_status_bit = 3,		\
    418		.intr_polarity_bit = 1,			\
    419		.intr_detection_bit = 2,		\
    420		.intr_detection_width = 1,		\
    421	}
    422
    423#define SDC_PINGROUP(pg_name, ctl, pull, drv)		\
    424	{						\
    425		.name = #pg_name,			\
    426		.pins = pg_name##_pins,			\
    427		.npins = ARRAY_SIZE(pg_name##_pins),	\
    428		.ctl_reg = ctl,				\
    429		.io_reg = 0,				\
    430		.intr_cfg_reg = 0,			\
    431		.intr_status_reg = 0,			\
    432		.intr_target_reg = 0,			\
    433		.mux_bit = -1,				\
    434		.pull_bit = pull,			\
    435		.drv_bit = drv,				\
    436		.oe_bit = -1,				\
    437		.in_bit = -1,				\
    438		.out_bit = -1,				\
    439		.intr_enable_bit = -1,			\
    440		.intr_status_bit = -1,			\
    441		.intr_target_bit = -1,			\
    442		.intr_target_kpss_val = -1,		\
    443		.intr_raw_status_bit = -1,		\
    444		.intr_polarity_bit = -1,		\
    445		.intr_detection_bit = -1,		\
    446		.intr_detection_width = -1,		\
    447	}
    448
    449enum msm8660_functions {
    450	MSM_MUX_gpio,
    451	MSM_MUX_cam_mclk,
    452	MSM_MUX_dsub,
    453	MSM_MUX_ext_gps,
    454	MSM_MUX_gp_clk_0a,
    455	MSM_MUX_gp_clk_0b,
    456	MSM_MUX_gp_clk_1a,
    457	MSM_MUX_gp_clk_1b,
    458	MSM_MUX_gp_clk_2a,
    459	MSM_MUX_gp_clk_2b,
    460	MSM_MUX_gp_mn,
    461	MSM_MUX_gsbi1,
    462	MSM_MUX_gsbi1_spi_cs1_n,
    463	MSM_MUX_gsbi1_spi_cs2a_n,
    464	MSM_MUX_gsbi1_spi_cs2b_n,
    465	MSM_MUX_gsbi1_spi_cs3_n,
    466	MSM_MUX_gsbi2,
    467	MSM_MUX_gsbi2_spi_cs1_n,
    468	MSM_MUX_gsbi2_spi_cs2_n,
    469	MSM_MUX_gsbi2_spi_cs3_n,
    470	MSM_MUX_gsbi3,
    471	MSM_MUX_gsbi3_spi_cs1_n,
    472	MSM_MUX_gsbi3_spi_cs2_n,
    473	MSM_MUX_gsbi3_spi_cs3_n,
    474	MSM_MUX_gsbi4,
    475	MSM_MUX_gsbi5,
    476	MSM_MUX_gsbi6,
    477	MSM_MUX_gsbi7,
    478	MSM_MUX_gsbi8,
    479	MSM_MUX_gsbi9,
    480	MSM_MUX_gsbi10,
    481	MSM_MUX_gsbi11,
    482	MSM_MUX_gsbi12,
    483	MSM_MUX_hdmi,
    484	MSM_MUX_i2s,
    485	MSM_MUX_lcdc,
    486	MSM_MUX_mdp_vsync,
    487	MSM_MUX_mi2s,
    488	MSM_MUX_pcm,
    489	MSM_MUX_ps_hold,
    490	MSM_MUX_sdc1,
    491	MSM_MUX_sdc2,
    492	MSM_MUX_sdc5,
    493	MSM_MUX_tsif1,
    494	MSM_MUX_tsif2,
    495	MSM_MUX_usb_fs1,
    496	MSM_MUX_usb_fs1_oe_n,
    497	MSM_MUX_usb_fs2,
    498	MSM_MUX_usb_fs2_oe_n,
    499	MSM_MUX_vfe,
    500	MSM_MUX_vsens_alarm,
    501	MSM_MUX_ebi2cs,
    502	MSM_MUX_ebi2,
    503	MSM_MUX__,
    504};
    505
    506static const char * const gpio_groups[] = {
    507	"gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7",
    508	"gpio8", "gpio9", "gpio10", "gpio11", "gpio12", "gpio13", "gpio14",
    509	"gpio15", "gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21",
    510	"gpio22", "gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28",
    511	"gpio29", "gpio30", "gpio31", "gpio32", "gpio33", "gpio34", "gpio35",
    512	"gpio36", "gpio37", "gpio38", "gpio39", "gpio40", "gpio41", "gpio42",
    513	"gpio43", "gpio44", "gpio45", "gpio46", "gpio47", "gpio48", "gpio49",
    514	"gpio50", "gpio51", "gpio52", "gpio53", "gpio54", "gpio55", "gpio56",
    515	"gpio57", "gpio58", "gpio59", "gpio60", "gpio61", "gpio62", "gpio63",
    516	"gpio64", "gpio65", "gpio66", "gpio67", "gpio68", "gpio69", "gpio70",
    517	"gpio71", "gpio72", "gpio73", "gpio74", "gpio75", "gpio76", "gpio77",
    518	"gpio78", "gpio79", "gpio80", "gpio81", "gpio82", "gpio83", "gpio84",
    519	"gpio85", "gpio86", "gpio87", "gpio88", "gpio89", "gpio90", "gpio91",
    520	"gpio92", "gpio93", "gpio94", "gpio95", "gpio96", "gpio97", "gpio98",
    521	"gpio99", "gpio100", "gpio101", "gpio102", "gpio103", "gpio104",
    522	"gpio105", "gpio106", "gpio107", "gpio108", "gpio109", "gpio110",
    523	"gpio111", "gpio112", "gpio113", "gpio114", "gpio115", "gpio116",
    524	"gpio117", "gpio118", "gpio119", "gpio120", "gpio121", "gpio122",
    525	"gpio123", "gpio124", "gpio125", "gpio126", "gpio127", "gpio128",
    526	"gpio129", "gpio130", "gpio131", "gpio132", "gpio133", "gpio134",
    527	"gpio135", "gpio136", "gpio137", "gpio138", "gpio139", "gpio140",
    528	"gpio141", "gpio142", "gpio143", "gpio144", "gpio145", "gpio146",
    529	"gpio147", "gpio148", "gpio149", "gpio150", "gpio151", "gpio152",
    530	"gpio153", "gpio154", "gpio155", "gpio156", "gpio157", "gpio158",
    531	"gpio159", "gpio160", "gpio161", "gpio162", "gpio163", "gpio164",
    532	"gpio165", "gpio166", "gpio167", "gpio168", "gpio169", "gpio170",
    533	"gpio171", "gpio172"
    534};
    535
    536static const char * const cam_mclk_groups[] = {
    537	"gpio32"
    538};
    539static const char * const dsub_groups[] = {
    540	"gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7",
    541	"gpio8", "gpio9", "gpio10", "gpio11", "gpio12", "gpio13", "gpio14",
    542	"gpio15", "gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21",
    543	"gpio22", "gpio23", "gpio24", "gpio25", "gpio26", "gpio27"
    544};
    545static const char * const ext_gps_groups[] = {
    546	"gpio66", "gpio67", "gpio68", "gpio69"
    547};
    548static const char * const gp_clk_0a_groups[] = {
    549	"gpio30"
    550};
    551static const char * const gp_clk_0b_groups[] = {
    552	"gpio115"
    553};
    554static const char * const gp_clk_1a_groups[] = {
    555	"gpio31"
    556};
    557static const char * const gp_clk_1b_groups[] = {
    558	"gpio122"
    559};
    560static const char * const gp_clk_2a_groups[] = {
    561	"gpio103"
    562};
    563static const char * const gp_clk_2b_groups[] = {
    564	"gpio70"
    565};
    566static const char * const gp_mn_groups[] = {
    567	"gpio29"
    568};
    569static const char * const gsbi1_groups[] = {
    570	"gpio33", "gpio34", "gpio35", "gpio36"
    571};
    572static const char * const gsbi1_spi_cs1_n_groups[] = {
    573};
    574static const char * const gsbi1_spi_cs2a_n_groups[] = {
    575};
    576static const char * const gsbi1_spi_cs2b_n_groups[] = {
    577};
    578static const char * const gsbi1_spi_cs3_n_groups[] = {
    579};
    580static const char * const gsbi2_groups[] = {
    581	"gpio37", "gpio38", "gpio39", "gpio40"
    582};
    583static const char * const gsbi2_spi_cs1_n_groups[] = {
    584	"gpio123"
    585};
    586static const char * const gsbi2_spi_cs2_n_groups[] = {
    587	"gpio124"
    588};
    589static const char * const gsbi2_spi_cs3_n_groups[] = {
    590	"gpio125"
    591};
    592static const char * const gsbi3_groups[] = {
    593	"gpio41", "gpio42", "gpio43", "gpio44"
    594};
    595static const char * const gsbi3_spi_cs1_n_groups[] = {
    596	"gpio62"
    597};
    598static const char * const gsbi3_spi_cs2_n_groups[] = {
    599	"gpio45"
    600};
    601static const char * const gsbi3_spi_cs3_n_groups[] = {
    602	"gpio46"
    603};
    604static const char * const gsbi4_groups[] = {
    605	"gpio45", "gpio56", "gpio47", "gpio48"
    606};
    607static const char * const gsbi5_groups[] = {
    608	"gpio49", "gpio50", "gpio51", "gpio52"
    609};
    610static const char * const gsbi6_groups[] = {
    611	"gpio53", "gpio54", "gpio55", "gpio56"
    612};
    613static const char * const gsbi7_groups[] = {
    614	"gpio57", "gpio58", "gpio59", "gpio60"
    615};
    616static const char * const gsbi8_groups[] = {
    617	"gpio62", "gpio63", "gpio64", "gpio65"
    618};
    619static const char * const gsbi9_groups[] = {
    620	"gpio66", "gpio67", "gpio68", "gpio69"
    621};
    622static const char * const gsbi10_groups[] = {
    623	"gpio70", "gpio71", "gpio72", "gpio73"
    624};
    625static const char * const gsbi11_groups[] = {
    626	"gpio103", "gpio104", "gpio105", "gpio106"
    627};
    628static const char * const gsbi12_groups[] = {
    629	"gpio115", "gpio116", "gpio117", "gpio118"
    630};
    631static const char * const hdmi_groups[] = {
    632	"gpio169", "gpio170", "gpio171", "gpio172"
    633};
    634static const char * const i2s_groups[] = {
    635	"gpio108", "gpio109", "gpio110", "gpio115", "gpio116", "gpio117",
    636	"gpio118", "gpio119", "gpio120", "gpio121", "gpio122"
    637};
    638static const char * const lcdc_groups[] = {
    639	"gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7",
    640	"gpio8", "gpio9", "gpio10", "gpio11", "gpio12", "gpio13", "gpio14",
    641	"gpio15", "gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21",
    642	"gpio22", "gpio23", "gpio24", "gpio25", "gpio26", "gpio27"
    643};
    644static const char * const mdp_vsync_groups[] = {
    645	"gpio28", "gpio39", "gpio41"
    646};
    647static const char * const mi2s_groups[] = {
    648	"gpio101", "gpio102", "gpio103", "gpio104", "gpio105", "gpio106",
    649	"gpio107"
    650};
    651static const char * const pcm_groups[] = {
    652	"gpio111", "gpio112", "gpio113", "gpio114"
    653};
    654static const char * const ps_hold_groups[] = {
    655	"gpio92"
    656};
    657static const char * const sdc1_groups[] = {
    658	"gpio159", "gpio160", "gpio161", "gpio162", "gpio163", "gpio164",
    659	"gpio165", "gpio166", "gpio167", "gpio168"
    660};
    661static const char * const sdc2_groups[] = {
    662	"gpio143", "gpio144", "gpio145", "gpio146", "gpio147", "gpio148",
    663	"gpio149", "gpio150", "gpio151", "gpio152"
    664};
    665static const char * const sdc5_groups[] = {
    666	"gpio95", "gpio96", "gpio97", "gpio98", "gpio99", "gpio100"
    667};
    668static const char * const tsif1_groups[] = {
    669	"gpio93", "gpio94", "gpio95", "gpio96"
    670};
    671static const char * const tsif2_groups[] = {
    672	"gpio97", "gpio98", "gpio99", "gpio100"
    673};
    674static const char * const usb_fs1_groups[] = {
    675	"gpio49", "gpio50", "gpio51"
    676};
    677static const char * const usb_fs1_oe_n_groups[] = {
    678	"gpio51"
    679};
    680static const char * const usb_fs2_groups[] = {
    681	"gpio71", "gpio72", "gpio73"
    682};
    683static const char * const usb_fs2_oe_n_groups[] = {
    684	"gpio73"
    685};
    686static const char * const vfe_groups[] = {
    687	"gpio29", "gpio30", "gpio31", "gpio42", "gpio46", "gpio105", "gpio106",
    688	"gpio117"
    689};
    690static const char * const vsens_alarm_groups[] = {
    691	"gpio127"
    692};
    693static const char * const ebi2cs_groups[] = {
    694	"gpio39", /* CS1A */
    695	"gpio40", /* CS2A */
    696	"gpio123", /* CS1B */
    697	"gpio124", /* CS2B */
    698	"gpio131", /* CS5 */
    699	"gpio132", /* CS4 */
    700	"gpio133", /* CS3 */
    701	"gpio134", /* CS0 */
    702};
    703static const char * const ebi2_groups[] = {
    704	/* ADDR9 & ADDR8 */
    705	"gpio37", "gpio38",
    706	/* ADDR7 - ADDR 0 */
    707	"gpio123", "gpio124", "gpio125", "gpio126",
    708	"gpio127", "gpio128", "gpio129", "gpio130",
    709	/* (muxed address+data) AD15 - AD0 */
    710	"gpio135", "gpio136", "gpio137", "gpio138", "gpio139",
    711	"gpio140", "gpio141", "gpio142", "gpio143", "gpio144",
    712	"gpio145", "gpio146", "gpio147", "gpio148", "gpio149",
    713	"gpio150",
    714	"gpio151", /* OE output enable */
    715	"gpio152", /* clock */
    716	"gpio153", /* ADV */
    717	"gpio154", /* WAIT (input) */
    718	"gpio155", /* UB Upper Byte Enable */
    719	"gpio156", /* LB Lower Byte Enable */
    720	"gpio157", /* WE Write Enable */
    721	"gpio158", /* busy */
    722};
    723
    724static const struct msm_function msm8660_functions[] = {
    725	FUNCTION(gpio),
    726	FUNCTION(cam_mclk),
    727	FUNCTION(dsub),
    728	FUNCTION(ext_gps),
    729	FUNCTION(gp_clk_0a),
    730	FUNCTION(gp_clk_0b),
    731	FUNCTION(gp_clk_1a),
    732	FUNCTION(gp_clk_1b),
    733	FUNCTION(gp_clk_2a),
    734	FUNCTION(gp_clk_2b),
    735	FUNCTION(gp_mn),
    736	FUNCTION(gsbi1),
    737	FUNCTION(gsbi1_spi_cs1_n),
    738	FUNCTION(gsbi1_spi_cs2a_n),
    739	FUNCTION(gsbi1_spi_cs2b_n),
    740	FUNCTION(gsbi1_spi_cs3_n),
    741	FUNCTION(gsbi2),
    742	FUNCTION(gsbi2_spi_cs1_n),
    743	FUNCTION(gsbi2_spi_cs2_n),
    744	FUNCTION(gsbi2_spi_cs3_n),
    745	FUNCTION(gsbi3),
    746	FUNCTION(gsbi3_spi_cs1_n),
    747	FUNCTION(gsbi3_spi_cs2_n),
    748	FUNCTION(gsbi3_spi_cs3_n),
    749	FUNCTION(gsbi4),
    750	FUNCTION(gsbi5),
    751	FUNCTION(gsbi6),
    752	FUNCTION(gsbi7),
    753	FUNCTION(gsbi8),
    754	FUNCTION(gsbi9),
    755	FUNCTION(gsbi10),
    756	FUNCTION(gsbi11),
    757	FUNCTION(gsbi12),
    758	FUNCTION(hdmi),
    759	FUNCTION(i2s),
    760	FUNCTION(lcdc),
    761	FUNCTION(mdp_vsync),
    762	FUNCTION(mi2s),
    763	FUNCTION(pcm),
    764	FUNCTION(ps_hold),
    765	FUNCTION(sdc1),
    766	FUNCTION(sdc2),
    767	FUNCTION(sdc5),
    768	FUNCTION(tsif1),
    769	FUNCTION(tsif2),
    770	FUNCTION(usb_fs1),
    771	FUNCTION(usb_fs1_oe_n),
    772	FUNCTION(usb_fs2),
    773	FUNCTION(usb_fs2_oe_n),
    774	FUNCTION(vfe),
    775	FUNCTION(vsens_alarm),
    776	FUNCTION(ebi2cs), /* for EBI2 chip selects */
    777	FUNCTION(ebi2), /* for general EBI2 pins */
    778};
    779
    780static const struct msm_pingroup msm8660_groups[] = {
    781	PINGROUP(0, lcdc, dsub, _, _, _, _, _),
    782	PINGROUP(1, lcdc, dsub, _, _, _, _, _),
    783	PINGROUP(2, lcdc, dsub, _, _, _, _, _),
    784	PINGROUP(3, lcdc, dsub, _, _, _, _, _),
    785	PINGROUP(4, lcdc, dsub, _, _, _, _, _),
    786	PINGROUP(5, lcdc, dsub, _, _, _, _, _),
    787	PINGROUP(6, lcdc, dsub, _, _, _, _, _),
    788	PINGROUP(7, lcdc, dsub, _, _, _, _, _),
    789	PINGROUP(8, lcdc, dsub, _, _, _, _, _),
    790	PINGROUP(9, lcdc, dsub, _, _, _, _, _),
    791	PINGROUP(10, lcdc, dsub, _, _, _, _, _),
    792	PINGROUP(11, lcdc, dsub, _, _, _, _, _),
    793	PINGROUP(12, lcdc, dsub, _, _, _, _, _),
    794	PINGROUP(13, lcdc, dsub, _, _, _, _, _),
    795	PINGROUP(14, lcdc, dsub, _, _, _, _, _),
    796	PINGROUP(15, lcdc, dsub, _, _, _, _, _),
    797	PINGROUP(16, lcdc, dsub, _, _, _, _, _),
    798	PINGROUP(17, lcdc, dsub, _, _, _, _, _),
    799	PINGROUP(18, lcdc, dsub, _, _, _, _, _),
    800	PINGROUP(19, lcdc, dsub, _, _, _, _, _),
    801	PINGROUP(20, lcdc, dsub, _, _, _, _, _),
    802	PINGROUP(21, lcdc, dsub, _, _, _, _, _),
    803	PINGROUP(22, lcdc, dsub, _, _, _, _, _),
    804	PINGROUP(23, lcdc, dsub, _, _, _, _, _),
    805	PINGROUP(24, lcdc, dsub, _, _, _, _, _),
    806	PINGROUP(25, lcdc, dsub, _, _, _, _, _),
    807	PINGROUP(26, lcdc, dsub, _, _, _, _, _),
    808	PINGROUP(27, lcdc, dsub, _, _, _, _, _),
    809	PINGROUP(28, mdp_vsync, _, _, _, _, _, _),
    810	PINGROUP(29, vfe, gp_mn, _, _, _, _, _),
    811	PINGROUP(30, vfe, gp_clk_0a, _, _, _, _, _),
    812	PINGROUP(31, vfe, gp_clk_1a, _, _, _, _, _),
    813	PINGROUP(32, cam_mclk, _, _, _, _, _, _),
    814	PINGROUP(33, gsbi1, _, _, _, _, _, _),
    815	PINGROUP(34, gsbi1, _, _, _, _, _, _),
    816	PINGROUP(35, gsbi1, _, _, _, _, _, _),
    817	PINGROUP(36, gsbi1, _, _, _, _, _, _),
    818	PINGROUP(37, gsbi2, ebi2, _, _, _, _, _),
    819	PINGROUP(38, gsbi2, ebi2, _, _, _, _, _),
    820	PINGROUP(39, gsbi2, ebi2cs, mdp_vsync, _, _, _, _),
    821	PINGROUP(40, gsbi2, ebi2cs, _, _, _, _, _),
    822	PINGROUP(41, gsbi3, mdp_vsync, _, _, _, _, _),
    823	PINGROUP(42, gsbi3, vfe, _, _, _, _, _),
    824	PINGROUP(43, gsbi3, _, _, _, _, _, _),
    825	PINGROUP(44, gsbi3, _, _, _, _, _, _),
    826	PINGROUP(45, gsbi4, gsbi3_spi_cs2_n, _, _, _, _, _),
    827	PINGROUP(46, gsbi4, gsbi3_spi_cs3_n, vfe, _, _, _, _),
    828	PINGROUP(47, gsbi4, _, _, _, _, _, _),
    829	PINGROUP(48, gsbi4, _, _, _, _, _, _),
    830	PINGROUP(49, gsbi5, usb_fs1, _, _, _, _, _),
    831	PINGROUP(50, gsbi5, usb_fs1, _, _, _, _, _),
    832	PINGROUP(51, gsbi5, usb_fs1, usb_fs1_oe_n, _, _, _, _),
    833	PINGROUP(52, gsbi5, _, _, _, _, _, _),
    834	PINGROUP(53, gsbi6, _, _, _, _, _, _),
    835	PINGROUP(54, gsbi6, _, _, _, _, _, _),
    836	PINGROUP(55, gsbi6, _, _, _, _, _, _),
    837	PINGROUP(56, gsbi6, _, _, _, _, _, _),
    838	PINGROUP(57, gsbi7, _, _, _, _, _, _),
    839	PINGROUP(58, gsbi7, _, _, _, _, _, _),
    840	PINGROUP(59, gsbi7, _, _, _, _, _, _),
    841	PINGROUP(60, gsbi7, _, _, _, _, _, _),
    842	PINGROUP(61, _, _, _, _, _, _, _),
    843	PINGROUP(62, gsbi8, gsbi3_spi_cs1_n, gsbi1_spi_cs2a_n, _, _, _, _),
    844	PINGROUP(63, gsbi8, gsbi1_spi_cs1_n, _, _, _, _, _),
    845	PINGROUP(64, gsbi8, gsbi1_spi_cs2b_n, _, _, _, _, _),
    846	PINGROUP(65, gsbi8, gsbi1_spi_cs3_n, _, _, _, _, _),
    847	PINGROUP(66, gsbi9, ext_gps, _, _, _, _, _),
    848	PINGROUP(67, gsbi9, ext_gps, _, _, _, _, _),
    849	PINGROUP(68, gsbi9, ext_gps, _, _, _, _, _),
    850	PINGROUP(69, gsbi9, ext_gps, _, _, _, _, _),
    851	PINGROUP(70, gsbi10, gp_clk_2b, _, _, _, _, _),
    852	PINGROUP(71, gsbi10, usb_fs2, _, _, _, _, _),
    853	PINGROUP(72, gsbi10, usb_fs2, _, _, _, _, _),
    854	PINGROUP(73, gsbi10, usb_fs2, usb_fs2_oe_n, _, _, _, _),
    855	PINGROUP(74, _, _, _, _, _, _, _),
    856	PINGROUP(75, _, _, _, _, _, _, _),
    857	PINGROUP(76, _, _, _, _, _, _, _),
    858	PINGROUP(77, _, _, _, _, _, _, _),
    859	PINGROUP(78, _, _, _, _, _, _, _),
    860	PINGROUP(79, _, _, _, _, _, _, _),
    861	PINGROUP(80, _, _, _, _, _, _, _),
    862	PINGROUP(81, _, _, _, _, _, _, _),
    863	PINGROUP(82, _, _, _, _, _, _, _),
    864	PINGROUP(83, _, _, _, _, _, _, _),
    865	PINGROUP(84, _, _, _, _, _, _, _),
    866	PINGROUP(85, _, _, _, _, _, _, _),
    867	PINGROUP(86, _, _, _, _, _, _, _),
    868	PINGROUP(87, _, _, _, _, _, _, _),
    869	PINGROUP(88, _, _, _, _, _, _, _),
    870	PINGROUP(89, _, _, _, _, _, _, _),
    871	PINGROUP(90, _, _, _, _, _, _, _),
    872	PINGROUP(91, _, _, _, _, _, _, _),
    873	PINGROUP(92, ps_hold, _, _, _, _, _, _),
    874	PINGROUP(93, tsif1, _, _, _, _, _, _),
    875	PINGROUP(94, tsif1, _, _, _, _, _, _),
    876	PINGROUP(95, tsif1, sdc5, _, _, _, _, _),
    877	PINGROUP(96, tsif1, sdc5, _, _, _, _, _),
    878	PINGROUP(97, tsif2, sdc5, _, _, _, _, _),
    879	PINGROUP(98, tsif2, sdc5, _, _, _, _, _),
    880	PINGROUP(99, tsif2, sdc5, _, _, _, _, _),
    881	PINGROUP(100, tsif2, sdc5, _, _, _, _, _),
    882	PINGROUP(101, mi2s, _, _, _, _, _, _),
    883	PINGROUP(102, mi2s, _, _, _, _, _, _),
    884	PINGROUP(103, mi2s, gsbi11, gp_clk_2a, _, _, _, _),
    885	PINGROUP(104, mi2s, gsbi11, _, _, _, _, _),
    886	PINGROUP(105, mi2s, gsbi11, vfe, _, _, _, _),
    887	PINGROUP(106, mi2s, gsbi11, vfe, _, _, _, _),
    888	PINGROUP(107, mi2s, _, _, _, _, _, _),
    889	PINGROUP(108, i2s, _, _, _, _, _, _),
    890	PINGROUP(109, i2s, _, _, _, _, _, _),
    891	PINGROUP(110, i2s, _, _, _, _, _, _),
    892	PINGROUP(111, pcm, _, _, _, _, _, _),
    893	PINGROUP(112, pcm, _, _, _, _, _, _),
    894	PINGROUP(113, pcm, _, _, _, _, _, _),
    895	PINGROUP(114, pcm, _, _, _, _, _, _),
    896	PINGROUP(115, i2s, gsbi12, gp_clk_0b, _, _, _, _),
    897	PINGROUP(116, i2s, gsbi12, _, _, _, _, _),
    898	PINGROUP(117, i2s, gsbi12, vfe, _, _, _, _),
    899	PINGROUP(118, i2s, gsbi12, _, _, _, _, _),
    900	PINGROUP(119, i2s, _, _, _, _, _, _),
    901	PINGROUP(120, i2s, _, _, _, _, _, _),
    902	PINGROUP(121, i2s, _, _, _, _, _, _),
    903	PINGROUP(122, i2s, gp_clk_1b, _, _, _, _, _),
    904	PINGROUP(123, ebi2, gsbi2_spi_cs1_n, ebi2cs, _, _, _, _),
    905	PINGROUP(124, ebi2, gsbi2_spi_cs2_n, ebi2cs, _, _, _, _),
    906	PINGROUP(125, ebi2, gsbi2_spi_cs3_n, _, _, _, _, _),
    907	PINGROUP(126, ebi2, _, _, _, _, _, _),
    908	PINGROUP(127, ebi2, vsens_alarm, _, _, _, _, _),
    909	PINGROUP(128, ebi2, _, _, _, _, _, _),
    910	PINGROUP(129, ebi2, _, _, _, _, _, _),
    911	PINGROUP(130, ebi2, _, _, _, _, _, _),
    912	PINGROUP(131, ebi2cs, _, _, _, _, _, _),
    913	PINGROUP(132, ebi2cs, _, _, _, _, _, _),
    914	PINGROUP(133, ebi2cs, _, _, _, _, _, _),
    915	PINGROUP(134, ebi2cs, _, _, _, _, _, _),
    916	PINGROUP(135, ebi2, _, _, _, _, _, _),
    917	PINGROUP(136, ebi2, _, _, _, _, _, _),
    918	PINGROUP(137, ebi2, _, _, _, _, _, _),
    919	PINGROUP(138, ebi2, _, _, _, _, _, _),
    920	PINGROUP(139, ebi2, _, _, _, _, _, _),
    921	PINGROUP(140, ebi2, _, _, _, _, _, _),
    922	PINGROUP(141, ebi2, _, _, _, _, _, _),
    923	PINGROUP(142, ebi2, _, _, _, _, _, _),
    924	PINGROUP(143, ebi2, sdc2, _, _, _, _, _),
    925	PINGROUP(144, ebi2, sdc2, _, _, _, _, _),
    926	PINGROUP(145, ebi2, sdc2, _, _, _, _, _),
    927	PINGROUP(146, ebi2, sdc2, _, _, _, _, _),
    928	PINGROUP(147, ebi2, sdc2, _, _, _, _, _),
    929	PINGROUP(148, ebi2, sdc2, _, _, _, _, _),
    930	PINGROUP(149, ebi2, sdc2, _, _, _, _, _),
    931	PINGROUP(150, ebi2, sdc2, _, _, _, _, _),
    932	PINGROUP(151, ebi2, sdc2, _, _, _, _, _),
    933	PINGROUP(152, ebi2, sdc2, _, _, _, _, _),
    934	PINGROUP(153, ebi2, _, _, _, _, _, _),
    935	PINGROUP(154, ebi2, _, _, _, _, _, _),
    936	PINGROUP(155, ebi2, _, _, _, _, _, _),
    937	PINGROUP(156, ebi2, _, _, _, _, _, _),
    938	PINGROUP(157, ebi2, _, _, _, _, _, _),
    939	PINGROUP(158, ebi2, _, _, _, _, _, _),
    940	PINGROUP(159, sdc1, _, _, _, _, _, _),
    941	PINGROUP(160, sdc1, _, _, _, _, _, _),
    942	PINGROUP(161, sdc1, _, _, _, _, _, _),
    943	PINGROUP(162, sdc1, _, _, _, _, _, _),
    944	PINGROUP(163, sdc1, _, _, _, _, _, _),
    945	PINGROUP(164, sdc1, _, _, _, _, _, _),
    946	PINGROUP(165, sdc1, _, _, _, _, _, _),
    947	PINGROUP(166, sdc1, _, _, _, _, _, _),
    948	PINGROUP(167, sdc1, _, _, _, _, _, _),
    949	PINGROUP(168, sdc1, _, _, _, _, _, _),
    950	PINGROUP(169, hdmi, _, _, _, _, _, _),
    951	PINGROUP(170, hdmi, _, _, _, _, _, _),
    952	PINGROUP(171, hdmi, _, _, _, _, _, _),
    953	PINGROUP(172, hdmi, _, _, _, _, _, _),
    954
    955	SDC_PINGROUP(sdc4_clk, 0x20a0, -1, 6),
    956	SDC_PINGROUP(sdc4_cmd, 0x20a0, 11, 3),
    957	SDC_PINGROUP(sdc4_data, 0x20a0, 9, 0),
    958
    959	SDC_PINGROUP(sdc3_clk, 0x20a4, -1, 6),
    960	SDC_PINGROUP(sdc3_cmd, 0x20a4, 11, 3),
    961	SDC_PINGROUP(sdc3_data, 0x20a4, 9, 0),
    962};
    963
    964#define NUM_GPIO_PINGROUPS 173
    965
    966static const struct msm_pinctrl_soc_data msm8660_pinctrl = {
    967	.pins = msm8660_pins,
    968	.npins = ARRAY_SIZE(msm8660_pins),
    969	.functions = msm8660_functions,
    970	.nfunctions = ARRAY_SIZE(msm8660_functions),
    971	.groups = msm8660_groups,
    972	.ngroups = ARRAY_SIZE(msm8660_groups),
    973	.ngpios = NUM_GPIO_PINGROUPS,
    974};
    975
    976static int msm8660_pinctrl_probe(struct platform_device *pdev)
    977{
    978	return msm_pinctrl_probe(pdev, &msm8660_pinctrl);
    979}
    980
    981static const struct of_device_id msm8660_pinctrl_of_match[] = {
    982	{ .compatible = "qcom,msm8660-pinctrl", },
    983	{ },
    984};
    985
    986static struct platform_driver msm8660_pinctrl_driver = {
    987	.driver = {
    988		.name = "msm8660-pinctrl",
    989		.of_match_table = msm8660_pinctrl_of_match,
    990	},
    991	.probe = msm8660_pinctrl_probe,
    992	.remove = msm_pinctrl_remove,
    993};
    994
    995static int __init msm8660_pinctrl_init(void)
    996{
    997	return platform_driver_register(&msm8660_pinctrl_driver);
    998}
    999arch_initcall(msm8660_pinctrl_init);
   1000
   1001static void __exit msm8660_pinctrl_exit(void)
   1002{
   1003	platform_driver_unregister(&msm8660_pinctrl_driver);
   1004}
   1005module_exit(msm8660_pinctrl_exit);
   1006
   1007MODULE_AUTHOR("Bjorn Andersson <bjorn.andersson@sonymobile.com>");
   1008MODULE_DESCRIPTION("Qualcomm MSM8660 pinctrl driver");
   1009MODULE_LICENSE("GPL v2");
   1010MODULE_DEVICE_TABLE(of, msm8660_pinctrl_of_match);