0001
0002
0003
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
0338
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);