Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * Copyright (c) 2020, The Linux Foundation. All rights reserved.
0004  */
0005 
0006 #include <linux/module.h>
0007 #include <linux/of.h>
0008 #include <linux/platform_device.h>
0009 #include <linux/pinctrl/pinctrl.h>
0010 
0011 #include "pinctrl-msm.h"
0012 
0013 static const struct pinctrl_pin_desc msm8226_pins[] = {
0014     PINCTRL_PIN(0, "GPIO_0"),
0015     PINCTRL_PIN(1, "GPIO_1"),
0016     PINCTRL_PIN(2, "GPIO_2"),
0017     PINCTRL_PIN(3, "GPIO_3"),
0018     PINCTRL_PIN(4, "GPIO_4"),
0019     PINCTRL_PIN(5, "GPIO_5"),
0020     PINCTRL_PIN(6, "GPIO_6"),
0021     PINCTRL_PIN(7, "GPIO_7"),
0022     PINCTRL_PIN(8, "GPIO_8"),
0023     PINCTRL_PIN(9, "GPIO_9"),
0024     PINCTRL_PIN(10, "GPIO_10"),
0025     PINCTRL_PIN(11, "GPIO_11"),
0026     PINCTRL_PIN(12, "GPIO_12"),
0027     PINCTRL_PIN(13, "GPIO_13"),
0028     PINCTRL_PIN(14, "GPIO_14"),
0029     PINCTRL_PIN(15, "GPIO_15"),
0030     PINCTRL_PIN(16, "GPIO_16"),
0031     PINCTRL_PIN(17, "GPIO_17"),
0032     PINCTRL_PIN(18, "GPIO_18"),
0033     PINCTRL_PIN(19, "GPIO_19"),
0034     PINCTRL_PIN(20, "GPIO_20"),
0035     PINCTRL_PIN(21, "GPIO_21"),
0036     PINCTRL_PIN(22, "GPIO_22"),
0037     PINCTRL_PIN(23, "GPIO_23"),
0038     PINCTRL_PIN(24, "GPIO_24"),
0039     PINCTRL_PIN(25, "GPIO_25"),
0040     PINCTRL_PIN(26, "GPIO_26"),
0041     PINCTRL_PIN(27, "GPIO_27"),
0042     PINCTRL_PIN(28, "GPIO_28"),
0043     PINCTRL_PIN(29, "GPIO_29"),
0044     PINCTRL_PIN(30, "GPIO_30"),
0045     PINCTRL_PIN(31, "GPIO_31"),
0046     PINCTRL_PIN(32, "GPIO_32"),
0047     PINCTRL_PIN(33, "GPIO_33"),
0048     PINCTRL_PIN(34, "GPIO_34"),
0049     PINCTRL_PIN(35, "GPIO_35"),
0050     PINCTRL_PIN(36, "GPIO_36"),
0051     PINCTRL_PIN(37, "GPIO_37"),
0052     PINCTRL_PIN(38, "GPIO_38"),
0053     PINCTRL_PIN(39, "GPIO_39"),
0054     PINCTRL_PIN(40, "GPIO_40"),
0055     PINCTRL_PIN(41, "GPIO_41"),
0056     PINCTRL_PIN(42, "GPIO_42"),
0057     PINCTRL_PIN(43, "GPIO_43"),
0058     PINCTRL_PIN(44, "GPIO_44"),
0059     PINCTRL_PIN(45, "GPIO_45"),
0060     PINCTRL_PIN(46, "GPIO_46"),
0061     PINCTRL_PIN(47, "GPIO_47"),
0062     PINCTRL_PIN(48, "GPIO_48"),
0063     PINCTRL_PIN(49, "GPIO_49"),
0064     PINCTRL_PIN(50, "GPIO_50"),
0065     PINCTRL_PIN(51, "GPIO_51"),
0066     PINCTRL_PIN(52, "GPIO_52"),
0067     PINCTRL_PIN(53, "GPIO_53"),
0068     PINCTRL_PIN(54, "GPIO_54"),
0069     PINCTRL_PIN(55, "GPIO_55"),
0070     PINCTRL_PIN(56, "GPIO_56"),
0071     PINCTRL_PIN(57, "GPIO_57"),
0072     PINCTRL_PIN(58, "GPIO_58"),
0073     PINCTRL_PIN(59, "GPIO_59"),
0074     PINCTRL_PIN(60, "GPIO_60"),
0075     PINCTRL_PIN(61, "GPIO_61"),
0076     PINCTRL_PIN(62, "GPIO_62"),
0077     PINCTRL_PIN(63, "GPIO_63"),
0078     PINCTRL_PIN(64, "GPIO_64"),
0079     PINCTRL_PIN(65, "GPIO_65"),
0080     PINCTRL_PIN(66, "GPIO_66"),
0081     PINCTRL_PIN(67, "GPIO_67"),
0082     PINCTRL_PIN(68, "GPIO_68"),
0083     PINCTRL_PIN(69, "GPIO_69"),
0084     PINCTRL_PIN(70, "GPIO_70"),
0085     PINCTRL_PIN(71, "GPIO_71"),
0086     PINCTRL_PIN(72, "GPIO_72"),
0087     PINCTRL_PIN(73, "GPIO_73"),
0088     PINCTRL_PIN(74, "GPIO_74"),
0089     PINCTRL_PIN(75, "GPIO_75"),
0090     PINCTRL_PIN(76, "GPIO_76"),
0091     PINCTRL_PIN(77, "GPIO_77"),
0092     PINCTRL_PIN(78, "GPIO_78"),
0093     PINCTRL_PIN(79, "GPIO_79"),
0094     PINCTRL_PIN(80, "GPIO_80"),
0095     PINCTRL_PIN(81, "GPIO_81"),
0096     PINCTRL_PIN(82, "GPIO_82"),
0097     PINCTRL_PIN(83, "GPIO_83"),
0098     PINCTRL_PIN(84, "GPIO_84"),
0099     PINCTRL_PIN(85, "GPIO_85"),
0100     PINCTRL_PIN(86, "GPIO_86"),
0101     PINCTRL_PIN(87, "GPIO_87"),
0102     PINCTRL_PIN(88, "GPIO_88"),
0103     PINCTRL_PIN(89, "GPIO_89"),
0104     PINCTRL_PIN(90, "GPIO_90"),
0105     PINCTRL_PIN(91, "GPIO_91"),
0106     PINCTRL_PIN(92, "GPIO_92"),
0107     PINCTRL_PIN(93, "GPIO_93"),
0108     PINCTRL_PIN(94, "GPIO_94"),
0109     PINCTRL_PIN(95, "GPIO_95"),
0110     PINCTRL_PIN(96, "GPIO_96"),
0111     PINCTRL_PIN(97, "GPIO_97"),
0112     PINCTRL_PIN(98, "GPIO_98"),
0113     PINCTRL_PIN(99, "GPIO_99"),
0114     PINCTRL_PIN(100, "GPIO_100"),
0115     PINCTRL_PIN(101, "GPIO_101"),
0116     PINCTRL_PIN(102, "GPIO_102"),
0117     PINCTRL_PIN(103, "GPIO_103"),
0118     PINCTRL_PIN(104, "GPIO_104"),
0119     PINCTRL_PIN(105, "GPIO_105"),
0120     PINCTRL_PIN(106, "GPIO_106"),
0121     PINCTRL_PIN(107, "GPIO_107"),
0122     PINCTRL_PIN(108, "GPIO_108"),
0123     PINCTRL_PIN(109, "GPIO_109"),
0124     PINCTRL_PIN(110, "GPIO_110"),
0125     PINCTRL_PIN(111, "GPIO_111"),
0126     PINCTRL_PIN(112, "GPIO_112"),
0127     PINCTRL_PIN(113, "GPIO_113"),
0128     PINCTRL_PIN(114, "GPIO_114"),
0129     PINCTRL_PIN(115, "GPIO_115"),
0130     PINCTRL_PIN(116, "GPIO_116"),
0131 
0132     PINCTRL_PIN(117, "SDC1_CLK"),
0133     PINCTRL_PIN(118, "SDC1_CMD"),
0134     PINCTRL_PIN(119, "SDC1_DATA"),
0135     PINCTRL_PIN(120, "SDC2_CLK"),
0136     PINCTRL_PIN(121, "SDC2_CMD"),
0137     PINCTRL_PIN(122, "SDC2_DATA"),
0138 };
0139 
0140 #define DECLARE_MSM_GPIO_PINS(pin) static const unsigned int gpio##pin##_pins[] = { pin }
0141 DECLARE_MSM_GPIO_PINS(0);
0142 DECLARE_MSM_GPIO_PINS(1);
0143 DECLARE_MSM_GPIO_PINS(2);
0144 DECLARE_MSM_GPIO_PINS(3);
0145 DECLARE_MSM_GPIO_PINS(4);
0146 DECLARE_MSM_GPIO_PINS(5);
0147 DECLARE_MSM_GPIO_PINS(6);
0148 DECLARE_MSM_GPIO_PINS(7);
0149 DECLARE_MSM_GPIO_PINS(8);
0150 DECLARE_MSM_GPIO_PINS(9);
0151 DECLARE_MSM_GPIO_PINS(10);
0152 DECLARE_MSM_GPIO_PINS(11);
0153 DECLARE_MSM_GPIO_PINS(12);
0154 DECLARE_MSM_GPIO_PINS(13);
0155 DECLARE_MSM_GPIO_PINS(14);
0156 DECLARE_MSM_GPIO_PINS(15);
0157 DECLARE_MSM_GPIO_PINS(16);
0158 DECLARE_MSM_GPIO_PINS(17);
0159 DECLARE_MSM_GPIO_PINS(18);
0160 DECLARE_MSM_GPIO_PINS(19);
0161 DECLARE_MSM_GPIO_PINS(20);
0162 DECLARE_MSM_GPIO_PINS(21);
0163 DECLARE_MSM_GPIO_PINS(22);
0164 DECLARE_MSM_GPIO_PINS(23);
0165 DECLARE_MSM_GPIO_PINS(24);
0166 DECLARE_MSM_GPIO_PINS(25);
0167 DECLARE_MSM_GPIO_PINS(26);
0168 DECLARE_MSM_GPIO_PINS(27);
0169 DECLARE_MSM_GPIO_PINS(28);
0170 DECLARE_MSM_GPIO_PINS(29);
0171 DECLARE_MSM_GPIO_PINS(30);
0172 DECLARE_MSM_GPIO_PINS(31);
0173 DECLARE_MSM_GPIO_PINS(32);
0174 DECLARE_MSM_GPIO_PINS(33);
0175 DECLARE_MSM_GPIO_PINS(34);
0176 DECLARE_MSM_GPIO_PINS(35);
0177 DECLARE_MSM_GPIO_PINS(36);
0178 DECLARE_MSM_GPIO_PINS(37);
0179 DECLARE_MSM_GPIO_PINS(38);
0180 DECLARE_MSM_GPIO_PINS(39);
0181 DECLARE_MSM_GPIO_PINS(40);
0182 DECLARE_MSM_GPIO_PINS(41);
0183 DECLARE_MSM_GPIO_PINS(42);
0184 DECLARE_MSM_GPIO_PINS(43);
0185 DECLARE_MSM_GPIO_PINS(44);
0186 DECLARE_MSM_GPIO_PINS(45);
0187 DECLARE_MSM_GPIO_PINS(46);
0188 DECLARE_MSM_GPIO_PINS(47);
0189 DECLARE_MSM_GPIO_PINS(48);
0190 DECLARE_MSM_GPIO_PINS(49);
0191 DECLARE_MSM_GPIO_PINS(50);
0192 DECLARE_MSM_GPIO_PINS(51);
0193 DECLARE_MSM_GPIO_PINS(52);
0194 DECLARE_MSM_GPIO_PINS(53);
0195 DECLARE_MSM_GPIO_PINS(54);
0196 DECLARE_MSM_GPIO_PINS(55);
0197 DECLARE_MSM_GPIO_PINS(56);
0198 DECLARE_MSM_GPIO_PINS(57);
0199 DECLARE_MSM_GPIO_PINS(58);
0200 DECLARE_MSM_GPIO_PINS(59);
0201 DECLARE_MSM_GPIO_PINS(60);
0202 DECLARE_MSM_GPIO_PINS(61);
0203 DECLARE_MSM_GPIO_PINS(62);
0204 DECLARE_MSM_GPIO_PINS(63);
0205 DECLARE_MSM_GPIO_PINS(64);
0206 DECLARE_MSM_GPIO_PINS(65);
0207 DECLARE_MSM_GPIO_PINS(66);
0208 DECLARE_MSM_GPIO_PINS(67);
0209 DECLARE_MSM_GPIO_PINS(68);
0210 DECLARE_MSM_GPIO_PINS(69);
0211 DECLARE_MSM_GPIO_PINS(70);
0212 DECLARE_MSM_GPIO_PINS(71);
0213 DECLARE_MSM_GPIO_PINS(72);
0214 DECLARE_MSM_GPIO_PINS(73);
0215 DECLARE_MSM_GPIO_PINS(74);
0216 DECLARE_MSM_GPIO_PINS(75);
0217 DECLARE_MSM_GPIO_PINS(76);
0218 DECLARE_MSM_GPIO_PINS(77);
0219 DECLARE_MSM_GPIO_PINS(78);
0220 DECLARE_MSM_GPIO_PINS(79);
0221 DECLARE_MSM_GPIO_PINS(80);
0222 DECLARE_MSM_GPIO_PINS(81);
0223 DECLARE_MSM_GPIO_PINS(82);
0224 DECLARE_MSM_GPIO_PINS(83);
0225 DECLARE_MSM_GPIO_PINS(84);
0226 DECLARE_MSM_GPIO_PINS(85);
0227 DECLARE_MSM_GPIO_PINS(86);
0228 DECLARE_MSM_GPIO_PINS(87);
0229 DECLARE_MSM_GPIO_PINS(88);
0230 DECLARE_MSM_GPIO_PINS(89);
0231 DECLARE_MSM_GPIO_PINS(90);
0232 DECLARE_MSM_GPIO_PINS(91);
0233 DECLARE_MSM_GPIO_PINS(92);
0234 DECLARE_MSM_GPIO_PINS(93);
0235 DECLARE_MSM_GPIO_PINS(94);
0236 DECLARE_MSM_GPIO_PINS(95);
0237 DECLARE_MSM_GPIO_PINS(96);
0238 DECLARE_MSM_GPIO_PINS(97);
0239 DECLARE_MSM_GPIO_PINS(98);
0240 DECLARE_MSM_GPIO_PINS(99);
0241 DECLARE_MSM_GPIO_PINS(100);
0242 DECLARE_MSM_GPIO_PINS(101);
0243 DECLARE_MSM_GPIO_PINS(102);
0244 DECLARE_MSM_GPIO_PINS(103);
0245 DECLARE_MSM_GPIO_PINS(104);
0246 DECLARE_MSM_GPIO_PINS(105);
0247 DECLARE_MSM_GPIO_PINS(106);
0248 DECLARE_MSM_GPIO_PINS(107);
0249 DECLARE_MSM_GPIO_PINS(108);
0250 DECLARE_MSM_GPIO_PINS(109);
0251 DECLARE_MSM_GPIO_PINS(110);
0252 DECLARE_MSM_GPIO_PINS(111);
0253 DECLARE_MSM_GPIO_PINS(112);
0254 DECLARE_MSM_GPIO_PINS(113);
0255 DECLARE_MSM_GPIO_PINS(114);
0256 DECLARE_MSM_GPIO_PINS(115);
0257 DECLARE_MSM_GPIO_PINS(116);
0258 
0259 static const unsigned int sdc1_clk_pins[] = { 117 };
0260 static const unsigned int sdc1_cmd_pins[] = { 118 };
0261 static const unsigned int sdc1_data_pins[] = { 119 };
0262 static const unsigned int sdc2_clk_pins[] = { 120 };
0263 static const unsigned int sdc2_cmd_pins[] = { 121 };
0264 static const unsigned int sdc2_data_pins[] = { 122 };
0265 
0266 #define FUNCTION(fname)                 \
0267     [MSM_MUX_##fname] = {               \
0268         .name = #fname,             \
0269         .groups = fname##_groups,       \
0270         .ngroups = ARRAY_SIZE(fname##_groups),  \
0271     }
0272 
0273 #define PINGROUP(id, f1, f2, f3, f4, f5, f6, f7)    \
0274     {                       \
0275         .name = "gpio" #id,         \
0276         .pins = gpio##id##_pins,        \
0277         .npins = ARRAY_SIZE(gpio##id##_pins),   \
0278         .funcs = (int[]){           \
0279             MSM_MUX_gpio,           \
0280             MSM_MUX_##f1,           \
0281             MSM_MUX_##f2,           \
0282             MSM_MUX_##f3,           \
0283             MSM_MUX_##f4,           \
0284             MSM_MUX_##f5,           \
0285             MSM_MUX_##f6,           \
0286             MSM_MUX_##f7            \
0287         },                  \
0288         .nfuncs = 8,                \
0289         .ctl_reg = 0x1000 + 0x10 * id,      \
0290         .io_reg = 0x1004 + 0x10 * id,       \
0291         .intr_cfg_reg = 0x1008 + 0x10 * id, \
0292         .intr_status_reg = 0x100c + 0x10 * id,  \
0293         .intr_target_reg = 0x1008 + 0x10 * id,  \
0294         .mux_bit = 2,               \
0295         .pull_bit = 0,              \
0296         .drv_bit = 6,               \
0297         .oe_bit = 9,                \
0298         .in_bit = 0,                \
0299         .out_bit = 1,               \
0300         .intr_enable_bit = 0,           \
0301         .intr_status_bit = 0,           \
0302         .intr_target_bit = 5,           \
0303         .intr_target_kpss_val = 4,      \
0304         .intr_raw_status_bit = 4,       \
0305         .intr_polarity_bit = 1,         \
0306         .intr_detection_bit = 2,        \
0307         .intr_detection_width = 2,      \
0308     }
0309 
0310 #define SDC_PINGROUP(pg_name, ctl, pull, drv)       \
0311     {                       \
0312         .name = #pg_name,           \
0313         .pins = pg_name##_pins,         \
0314         .npins = ARRAY_SIZE(pg_name##_pins),    \
0315         .ctl_reg = ctl,             \
0316         .io_reg = 0,                \
0317         .intr_cfg_reg = 0,          \
0318         .intr_status_reg = 0,           \
0319         .intr_target_reg = 0,           \
0320         .mux_bit = -1,              \
0321         .pull_bit = pull,           \
0322         .drv_bit = drv,             \
0323         .oe_bit = -1,               \
0324         .in_bit = -1,               \
0325         .out_bit = -1,              \
0326         .intr_enable_bit = -1,          \
0327         .intr_status_bit = -1,          \
0328         .intr_target_bit = -1,          \
0329         .intr_target_kpss_val = -1,     \
0330         .intr_raw_status_bit = -1,      \
0331         .intr_polarity_bit = -1,        \
0332         .intr_detection_bit = -1,       \
0333         .intr_detection_width = -1,     \
0334     }
0335 
0336 /*
0337  * TODO: Add the rest of the possible functions and fill out
0338  * the pingroup table below.
0339  */
0340 enum msm8226_functions {
0341     MSM_MUX_audio_pcm,
0342     MSM_MUX_blsp_i2c1,
0343     MSM_MUX_blsp_i2c2,
0344     MSM_MUX_blsp_i2c3,
0345     MSM_MUX_blsp_i2c4,
0346     MSM_MUX_blsp_i2c5,
0347     MSM_MUX_blsp_spi1,
0348     MSM_MUX_blsp_spi2,
0349     MSM_MUX_blsp_spi3,
0350     MSM_MUX_blsp_spi4,
0351     MSM_MUX_blsp_spi5,
0352     MSM_MUX_blsp_uart1,
0353     MSM_MUX_blsp_uart2,
0354     MSM_MUX_blsp_uart3,
0355     MSM_MUX_blsp_uart4,
0356     MSM_MUX_blsp_uart5,
0357     MSM_MUX_blsp_uim1,
0358     MSM_MUX_blsp_uim2,
0359     MSM_MUX_blsp_uim3,
0360     MSM_MUX_blsp_uim4,
0361     MSM_MUX_blsp_uim5,
0362     MSM_MUX_cam_mclk0,
0363     MSM_MUX_cam_mclk1,
0364     MSM_MUX_cci_i2c0,
0365     MSM_MUX_gpio,
0366     MSM_MUX_sdc3,
0367     MSM_MUX_wlan,
0368     MSM_MUX_NA,
0369 };
0370 
0371 static const char * const gpio_groups[] = {
0372     "gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7",
0373     "gpio8", "gpio9", "gpio10", "gpio11", "gpio12", "gpio13", "gpio14",
0374     "gpio15", "gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21",
0375     "gpio22", "gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28",
0376     "gpio29", "gpio30", "gpio31", "gpio32", "gpio33", "gpio34", "gpio35",
0377     "gpio36", "gpio37", "gpio38", "gpio39", "gpio40", "gpio41", "gpio42",
0378     "gpio43", "gpio44", "gpio45", "gpio46", "gpio47", "gpio48", "gpio49",
0379     "gpio50", "gpio51", "gpio52", "gpio53", "gpio54", "gpio55", "gpio56",
0380     "gpio57", "gpio58", "gpio59", "gpio60", "gpio61", "gpio62", "gpio63",
0381     "gpio64", "gpio65", "gpio66", "gpio67", "gpio68", "gpio69", "gpio70",
0382     "gpio71", "gpio72", "gpio73", "gpio74", "gpio75", "gpio76", "gpio77",
0383     "gpio78", "gpio79", "gpio80", "gpio81", "gpio82", "gpio83", "gpio84",
0384     "gpio85", "gpio86", "gpio87", "gpio88", "gpio89", "gpio90", "gpio91",
0385     "gpio92", "gpio93", "gpio94", "gpio95", "gpio96", "gpio97", "gpio98",
0386     "gpio99", "gpio100", "gpio101", "gpio102", "gpio103", "gpio104",
0387     "gpio105", "gpio106", "gpio107", "gpio108", "gpio109", "gpio110",
0388     "gpio111", "gpio112", "gpio113", "gpio114", "gpio115", "gpio116",
0389 };
0390 
0391 static const char * const audio_pcm_groups[] = {
0392     "gpio63", "gpio64", "gpio65", "gpio66"
0393 };
0394 
0395 static const char * const blsp_uart1_groups[] = {
0396     "gpio0", "gpio1", "gpio2", "gpio3"
0397 };
0398 
0399 static const char * const blsp_uim1_groups[] = { "gpio0", "gpio1" };
0400 static const char * const blsp_i2c1_groups[] = { "gpio2", "gpio3" };
0401 static const char * const blsp_spi1_groups[] = {
0402     "gpio0", "gpio1", "gpio2", "gpio3"
0403 };
0404 
0405 static const char * const blsp_uart2_groups[] = {
0406     "gpio4", "gpio5", "gpio6", "gpio7"
0407 };
0408 
0409 static const char * const blsp_uim2_groups[] = { "gpio4", "gpio5" };
0410 static const char * const blsp_i2c2_groups[] = { "gpio6", "gpio7" };
0411 static const char * const blsp_spi2_groups[] = {
0412     "gpio4", "gpio5", "gpio6", "gpio7"
0413 };
0414 
0415 static const char * const blsp_uart3_groups[] = {
0416     "gpio8", "gpio9", "gpio10", "gpio11"
0417 };
0418 
0419 static const char * const blsp_uim3_groups[] = { "gpio8", "gpio9" };
0420 static const char * const blsp_i2c3_groups[] = { "gpio10", "gpio11" };
0421 static const char * const blsp_spi3_groups[] = {
0422     "gpio8", "gpio9", "gpio10", "gpio11"
0423 };
0424 
0425 static const char * const blsp_uart4_groups[] = {
0426     "gpio12", "gpio13", "gpio14", "gpio15"
0427 };
0428 
0429 static const char * const blsp_uim4_groups[] = { "gpio12", "gpio13" };
0430 static const char * const blsp_i2c4_groups[] = { "gpio14", "gpio15" };
0431 static const char * const blsp_spi4_groups[] = {
0432     "gpio12", "gpio13", "gpio14", "gpio15"
0433 };
0434 
0435 static const char * const blsp_uart5_groups[] = {
0436     "gpio16", "gpio17", "gpio18", "gpio19"
0437 };
0438 
0439 static const char * const blsp_uim5_groups[] = { "gpio16", "gpio17" };
0440 static const char * const blsp_i2c5_groups[] = { "gpio18", "gpio19" };
0441 static const char * const blsp_spi5_groups[] = {
0442     "gpio16", "gpio17", "gpio18", "gpio19"
0443 };
0444 
0445 static const char * const cci_i2c0_groups[] = { "gpio29", "gpio30" };
0446 
0447 static const char * const cam_mclk0_groups[] = { "gpio26" };
0448 static const char * const cam_mclk1_groups[] = { "gpio27" };
0449 
0450 static const char * const sdc3_groups[] = {
0451     "gpio39", "gpio40", "gpio41", "gpio42", "gpio43", "gpio44"
0452 };
0453 
0454 static const char * const wlan_groups[] = {
0455     "gpio40", "gpio41", "gpio42", "gpio43", "gpio44"
0456 };
0457 
0458 static const struct msm_function msm8226_functions[] = {
0459     FUNCTION(audio_pcm),
0460     FUNCTION(blsp_i2c1),
0461     FUNCTION(blsp_i2c2),
0462     FUNCTION(blsp_i2c3),
0463     FUNCTION(blsp_i2c4),
0464     FUNCTION(blsp_i2c5),
0465     FUNCTION(blsp_spi1),
0466     FUNCTION(blsp_spi2),
0467     FUNCTION(blsp_spi3),
0468     FUNCTION(blsp_spi4),
0469     FUNCTION(blsp_spi5),
0470     FUNCTION(blsp_uart1),
0471     FUNCTION(blsp_uart2),
0472     FUNCTION(blsp_uart3),
0473     FUNCTION(blsp_uart4),
0474     FUNCTION(blsp_uart5),
0475     FUNCTION(blsp_uim1),
0476     FUNCTION(blsp_uim2),
0477     FUNCTION(blsp_uim3),
0478     FUNCTION(blsp_uim4),
0479     FUNCTION(blsp_uim5),
0480     FUNCTION(cam_mclk0),
0481     FUNCTION(cam_mclk1),
0482     FUNCTION(cci_i2c0),
0483     FUNCTION(gpio),
0484     FUNCTION(sdc3),
0485     FUNCTION(wlan),
0486 };
0487 
0488 static const struct msm_pingroup msm8226_groups[] = {
0489     PINGROUP(0,   blsp_spi1, blsp_uart1, blsp_uim1, NA, NA, NA, NA),
0490     PINGROUP(1,   blsp_spi1, blsp_uart1, blsp_uim1, NA, NA, NA, NA),
0491     PINGROUP(2,   blsp_spi1, blsp_uart1, blsp_i2c1, NA, NA, NA, NA),
0492     PINGROUP(3,   blsp_spi1, blsp_uart1, blsp_i2c1, NA, NA, NA, NA),
0493     PINGROUP(4,   blsp_spi2, blsp_uart2, blsp_uim2, NA, NA, NA, NA),
0494     PINGROUP(5,   blsp_spi2, blsp_uart2, blsp_uim2, NA, NA, NA, NA),
0495     PINGROUP(6,   blsp_spi2, blsp_uart2, blsp_i2c2, NA, NA, NA, NA),
0496     PINGROUP(7,   blsp_spi2, blsp_uart2, blsp_i2c2, NA, NA, NA, NA),
0497     PINGROUP(8,   blsp_spi3, blsp_uart3, blsp_uim3, NA, NA, NA, NA),
0498     PINGROUP(9,   blsp_spi3, blsp_uart3, blsp_uim3, NA, NA, NA, NA),
0499     PINGROUP(10,  blsp_spi3, blsp_uart3, blsp_i2c3, NA, NA, NA, NA),
0500     PINGROUP(11,  blsp_spi3, blsp_uart3, blsp_i2c3, NA, NA, NA, NA),
0501     PINGROUP(12,  blsp_spi4, blsp_uart4, blsp_uim4, NA, NA, NA, NA),
0502     PINGROUP(13,  blsp_spi4, blsp_uart4, blsp_uim4, NA, NA, NA, NA),
0503     PINGROUP(14,  blsp_spi4, blsp_uart4, blsp_i2c4, NA, NA, NA, NA),
0504     PINGROUP(15,  blsp_spi4, blsp_uart4, blsp_i2c4, NA, NA, NA, NA),
0505     PINGROUP(16,  blsp_spi5, blsp_uart5, blsp_uim5, NA, NA, NA, NA),
0506     PINGROUP(17,  blsp_spi5, blsp_uart5, blsp_uim5, NA, NA, NA, NA),
0507     PINGROUP(18,  blsp_spi5, blsp_uart5, blsp_i2c5, NA, NA, NA, NA),
0508     PINGROUP(19,  blsp_spi5, blsp_uart5, blsp_i2c5, NA, NA, NA, NA),
0509     PINGROUP(20,  NA, NA, NA, NA, NA, NA, NA),
0510     PINGROUP(21,  NA, NA, NA, NA, NA, NA, NA),
0511     PINGROUP(22,  NA, NA, NA, NA, NA, NA, NA),
0512     PINGROUP(23,  NA, NA, NA, NA, NA, NA, NA),
0513     PINGROUP(24,  NA, NA, NA, NA, NA, NA, NA),
0514     PINGROUP(25,  NA, NA, NA, NA, NA, NA, NA),
0515     PINGROUP(26,  cam_mclk0, NA, NA, NA, NA, NA, NA),
0516     PINGROUP(27,  cam_mclk1, NA, NA, NA, NA, NA, NA),
0517     PINGROUP(28,  NA, NA, NA, NA, NA, NA, NA),
0518     PINGROUP(29,  cci_i2c0, NA, NA, NA, NA, NA, NA),
0519     PINGROUP(30,  cci_i2c0, NA, NA, NA, NA, NA, NA),
0520     PINGROUP(31,  NA, NA, NA, NA, NA, NA, NA),
0521     PINGROUP(32,  NA, NA, NA, NA, NA, NA, NA),
0522     PINGROUP(33,  NA, NA, NA, NA, NA, NA, NA),
0523     PINGROUP(34,  NA, NA, NA, NA, NA, NA, NA),
0524     PINGROUP(35,  NA, NA, NA, NA, NA, NA, NA),
0525     PINGROUP(36,  NA, NA, NA, NA, NA, NA, NA),
0526     PINGROUP(37,  NA, NA, NA, NA, NA, NA, NA),
0527     PINGROUP(38,  NA, NA, NA, NA, NA, NA, NA),
0528     PINGROUP(39,  NA, sdc3, NA, NA, NA, NA, NA),
0529     PINGROUP(40,  wlan, sdc3, NA, NA, NA, NA, NA),
0530     PINGROUP(41,  wlan, sdc3, NA, NA, NA, NA, NA),
0531     PINGROUP(42,  wlan, sdc3, NA, NA, NA, NA, NA),
0532     PINGROUP(43,  wlan, sdc3, NA, NA, NA, NA, NA),
0533     PINGROUP(44,  wlan, sdc3, NA, NA, NA, NA, NA),
0534     PINGROUP(45,  NA, NA, NA, NA, NA, NA, NA),
0535     PINGROUP(46,  NA, NA, NA, NA, NA, NA, NA),
0536     PINGROUP(47,  NA, NA, NA, NA, NA, NA, NA),
0537     PINGROUP(48,  NA, NA, NA, NA, NA, NA, NA),
0538     PINGROUP(49,  NA, NA, NA, NA, NA, NA, NA),
0539     PINGROUP(50,  NA, NA, NA, NA, NA, NA, NA),
0540     PINGROUP(51,  NA, NA, NA, NA, NA, NA, NA),
0541     PINGROUP(52,  NA, NA, NA, NA, NA, NA, NA),
0542     PINGROUP(53,  NA, NA, NA, NA, NA, NA, NA),
0543     PINGROUP(54,  NA, NA, NA, NA, NA, NA, NA),
0544     PINGROUP(55,  NA, NA, NA, NA, NA, NA, NA),
0545     PINGROUP(56,  NA, NA, NA, NA, NA, NA, NA),
0546     PINGROUP(57,  NA, NA, NA, NA, NA, NA, NA),
0547     PINGROUP(58,  NA, NA, NA, NA, NA, NA, NA),
0548     PINGROUP(59,  NA, NA, NA, NA, NA, NA, NA),
0549     PINGROUP(60,  NA, NA, NA, NA, NA, NA, NA),
0550     PINGROUP(61,  NA, NA, NA, NA, NA, NA, NA),
0551     PINGROUP(62,  NA, NA, NA, NA, NA, NA, NA),
0552     PINGROUP(63,  audio_pcm, NA, NA, NA, NA, NA, NA),
0553     PINGROUP(64,  audio_pcm, NA, NA, NA, NA, NA, NA),
0554     PINGROUP(65,  audio_pcm, NA, NA, NA, NA, NA, NA),
0555     PINGROUP(66,  audio_pcm, NA, NA, NA, NA, NA, NA),
0556     PINGROUP(67,  NA, NA, NA, NA, NA, NA, NA),
0557     PINGROUP(68,  NA, NA, NA, NA, NA, NA, NA),
0558     PINGROUP(69,  NA, NA, NA, NA, NA, NA, NA),
0559     PINGROUP(70,  NA, NA, NA, NA, NA, NA, NA),
0560     PINGROUP(71,  NA, NA, NA, NA, NA, NA, NA),
0561     PINGROUP(72,  NA, NA, NA, NA, NA, NA, NA),
0562     PINGROUP(73,  NA, NA, NA, NA, NA, NA, NA),
0563     PINGROUP(74,  NA, NA, NA, NA, NA, NA, NA),
0564     PINGROUP(75,  NA, NA, NA, NA, NA, NA, NA),
0565     PINGROUP(76,  NA, NA, NA, NA, NA, NA, NA),
0566     PINGROUP(77,  NA, NA, NA, NA, NA, NA, NA),
0567     PINGROUP(78,  NA, NA, NA, NA, NA, NA, NA),
0568     PINGROUP(79,  NA, NA, NA, NA, NA, NA, NA),
0569     PINGROUP(80,  NA, NA, NA, NA, NA, NA, NA),
0570     PINGROUP(81,  NA, NA, NA, NA, NA, NA, NA),
0571     PINGROUP(82,  NA, NA, NA, NA, NA, NA, NA),
0572     PINGROUP(83,  NA, NA, NA, NA, NA, NA, NA),
0573     PINGROUP(84,  NA, NA, NA, NA, NA, NA, NA),
0574     PINGROUP(85,  NA, NA, NA, NA, NA, NA, NA),
0575     PINGROUP(86,  NA, NA, NA, NA, NA, NA, NA),
0576     PINGROUP(87,  NA, NA, NA, NA, NA, NA, NA),
0577     PINGROUP(88,  NA, NA, NA, NA, NA, NA, NA),
0578     PINGROUP(89,  NA, NA, NA, NA, NA, NA, NA),
0579     PINGROUP(90,  NA, NA, NA, NA, NA, NA, NA),
0580     PINGROUP(91,  NA, NA, NA, NA, NA, NA, NA),
0581     PINGROUP(92,  NA, NA, NA, NA, NA, NA, NA),
0582     PINGROUP(93,  NA, NA, NA, NA, NA, NA, NA),
0583     PINGROUP(94,  NA, NA, NA, NA, NA, NA, NA),
0584     PINGROUP(95,  NA, NA, NA, NA, NA, NA, NA),
0585     PINGROUP(96,  NA, NA, NA, NA, NA, NA, NA),
0586     PINGROUP(97,  NA, NA, NA, NA, NA, NA, NA),
0587     PINGROUP(98,  NA, NA, NA, NA, NA, NA, NA),
0588     PINGROUP(99,  NA, NA, NA, NA, NA, NA, NA),
0589     PINGROUP(100, NA, NA, NA, NA, NA, NA, NA),
0590     PINGROUP(101, NA, NA, NA, NA, NA, NA, NA),
0591     PINGROUP(102, NA, NA, NA, NA, NA, NA, NA),
0592     PINGROUP(103, NA, NA, NA, NA, NA, NA, NA),
0593     PINGROUP(104, NA, NA, NA, NA, NA, NA, NA),
0594     PINGROUP(105, NA, NA, NA, NA, NA, NA, NA),
0595     PINGROUP(106, NA, NA, NA, NA, NA, NA, NA),
0596     PINGROUP(107, NA, NA, NA, NA, NA, NA, NA),
0597     PINGROUP(108, NA, NA, NA, NA, NA, NA, NA),
0598     PINGROUP(109, NA, NA, NA, NA, NA, NA, NA),
0599     PINGROUP(110, NA, NA, NA, NA, NA, NA, NA),
0600     PINGROUP(111, NA, NA, NA, NA, NA, NA, NA),
0601     PINGROUP(112, NA, NA, NA, NA, NA, NA, NA),
0602     PINGROUP(113, NA, NA, NA, NA, NA, NA, NA),
0603     PINGROUP(114, NA, NA, NA, NA, NA, NA, NA),
0604     PINGROUP(115, NA, NA, NA, NA, NA, NA, NA),
0605     PINGROUP(116, NA, NA, NA, NA, NA, NA, NA),
0606     SDC_PINGROUP(sdc1_clk, 0x2044, 13, 6),
0607     SDC_PINGROUP(sdc1_cmd, 0x2044, 11, 3),
0608     SDC_PINGROUP(sdc1_data, 0x2044, 9, 0),
0609     SDC_PINGROUP(sdc2_clk, 0x2048, 14, 6),
0610     SDC_PINGROUP(sdc2_cmd, 0x2048, 11, 3),
0611     SDC_PINGROUP(sdc2_data, 0x2048, 9, 0),
0612 };
0613 
0614 #define NUM_GPIO_PINGROUPS 117
0615 
0616 static const struct msm_pinctrl_soc_data msm8226_pinctrl = {
0617     .pins = msm8226_pins,
0618     .npins = ARRAY_SIZE(msm8226_pins),
0619     .functions = msm8226_functions,
0620     .nfunctions = ARRAY_SIZE(msm8226_functions),
0621     .groups = msm8226_groups,
0622     .ngroups = ARRAY_SIZE(msm8226_groups),
0623     .ngpios = NUM_GPIO_PINGROUPS,
0624 };
0625 
0626 static int msm8226_pinctrl_probe(struct platform_device *pdev)
0627 {
0628     return msm_pinctrl_probe(pdev, &msm8226_pinctrl);
0629 }
0630 
0631 static const struct of_device_id msm8226_pinctrl_of_match[] = {
0632     { .compatible = "qcom,msm8226-pinctrl", },
0633     { },
0634 };
0635 
0636 static struct platform_driver msm8226_pinctrl_driver = {
0637     .driver = {
0638         .name = "msm8226-pinctrl",
0639         .of_match_table = msm8226_pinctrl_of_match,
0640     },
0641     .probe = msm8226_pinctrl_probe,
0642     .remove = msm_pinctrl_remove,
0643 };
0644 
0645 static int __init msm8226_pinctrl_init(void)
0646 {
0647     return platform_driver_register(&msm8226_pinctrl_driver);
0648 }
0649 arch_initcall(msm8226_pinctrl_init);
0650 
0651 static void __exit msm8226_pinctrl_exit(void)
0652 {
0653     platform_driver_unregister(&msm8226_pinctrl_driver);
0654 }
0655 module_exit(msm8226_pinctrl_exit);
0656 
0657 MODULE_AUTHOR("Bartosz Dudziak <bartosz.dudziak@snejp.pl>");
0658 MODULE_DESCRIPTION("Qualcomm MSM8226 pinctrl driver");
0659 MODULE_LICENSE("GPL v2");
0660 MODULE_DEVICE_TABLE(of, msm8226_pinctrl_of_match);