linux/drivers/pinctrl/qcom/pinctrl-msm8226.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright (c) 2020, The Linux Foundation. All rights reserved.
   4 */
   5
   6#include <linux/module.h>
   7#include <linux/of.h>
   8#include <linux/platform_device.h>
   9#include <linux/pinctrl/pinctrl.h>
  10
  11#include "pinctrl-msm.h"
  12
  13static const struct pinctrl_pin_desc msm8226_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
 132        PINCTRL_PIN(117, "SDC1_CLK"),
 133        PINCTRL_PIN(118, "SDC1_CMD"),
 134        PINCTRL_PIN(119, "SDC1_DATA"),
 135        PINCTRL_PIN(120, "SDC2_CLK"),
 136        PINCTRL_PIN(121, "SDC2_CMD"),
 137        PINCTRL_PIN(122, "SDC2_DATA"),
 138};
 139
 140#define DECLARE_MSM_GPIO_PINS(pin) static const unsigned int gpio##pin##_pins[] = { pin }
 141DECLARE_MSM_GPIO_PINS(0);
 142DECLARE_MSM_GPIO_PINS(1);
 143DECLARE_MSM_GPIO_PINS(2);
 144DECLARE_MSM_GPIO_PINS(3);
 145DECLARE_MSM_GPIO_PINS(4);
 146DECLARE_MSM_GPIO_PINS(5);
 147DECLARE_MSM_GPIO_PINS(6);
 148DECLARE_MSM_GPIO_PINS(7);
 149DECLARE_MSM_GPIO_PINS(8);
 150DECLARE_MSM_GPIO_PINS(9);
 151DECLARE_MSM_GPIO_PINS(10);
 152DECLARE_MSM_GPIO_PINS(11);
 153DECLARE_MSM_GPIO_PINS(12);
 154DECLARE_MSM_GPIO_PINS(13);
 155DECLARE_MSM_GPIO_PINS(14);
 156DECLARE_MSM_GPIO_PINS(15);
 157DECLARE_MSM_GPIO_PINS(16);
 158DECLARE_MSM_GPIO_PINS(17);
 159DECLARE_MSM_GPIO_PINS(18);
 160DECLARE_MSM_GPIO_PINS(19);
 161DECLARE_MSM_GPIO_PINS(20);
 162DECLARE_MSM_GPIO_PINS(21);
 163DECLARE_MSM_GPIO_PINS(22);
 164DECLARE_MSM_GPIO_PINS(23);
 165DECLARE_MSM_GPIO_PINS(24);
 166DECLARE_MSM_GPIO_PINS(25);
 167DECLARE_MSM_GPIO_PINS(26);
 168DECLARE_MSM_GPIO_PINS(27);
 169DECLARE_MSM_GPIO_PINS(28);
 170DECLARE_MSM_GPIO_PINS(29);
 171DECLARE_MSM_GPIO_PINS(30);
 172DECLARE_MSM_GPIO_PINS(31);
 173DECLARE_MSM_GPIO_PINS(32);
 174DECLARE_MSM_GPIO_PINS(33);
 175DECLARE_MSM_GPIO_PINS(34);
 176DECLARE_MSM_GPIO_PINS(35);
 177DECLARE_MSM_GPIO_PINS(36);
 178DECLARE_MSM_GPIO_PINS(37);
 179DECLARE_MSM_GPIO_PINS(38);
 180DECLARE_MSM_GPIO_PINS(39);
 181DECLARE_MSM_GPIO_PINS(40);
 182DECLARE_MSM_GPIO_PINS(41);
 183DECLARE_MSM_GPIO_PINS(42);
 184DECLARE_MSM_GPIO_PINS(43);
 185DECLARE_MSM_GPIO_PINS(44);
 186DECLARE_MSM_GPIO_PINS(45);
 187DECLARE_MSM_GPIO_PINS(46);
 188DECLARE_MSM_GPIO_PINS(47);
 189DECLARE_MSM_GPIO_PINS(48);
 190DECLARE_MSM_GPIO_PINS(49);
 191DECLARE_MSM_GPIO_PINS(50);
 192DECLARE_MSM_GPIO_PINS(51);
 193DECLARE_MSM_GPIO_PINS(52);
 194DECLARE_MSM_GPIO_PINS(53);
 195DECLARE_MSM_GPIO_PINS(54);
 196DECLARE_MSM_GPIO_PINS(55);
 197DECLARE_MSM_GPIO_PINS(56);
 198DECLARE_MSM_GPIO_PINS(57);
 199DECLARE_MSM_GPIO_PINS(58);
 200DECLARE_MSM_GPIO_PINS(59);
 201DECLARE_MSM_GPIO_PINS(60);
 202DECLARE_MSM_GPIO_PINS(61);
 203DECLARE_MSM_GPIO_PINS(62);
 204DECLARE_MSM_GPIO_PINS(63);
 205DECLARE_MSM_GPIO_PINS(64);
 206DECLARE_MSM_GPIO_PINS(65);
 207DECLARE_MSM_GPIO_PINS(66);
 208DECLARE_MSM_GPIO_PINS(67);
 209DECLARE_MSM_GPIO_PINS(68);
 210DECLARE_MSM_GPIO_PINS(69);
 211DECLARE_MSM_GPIO_PINS(70);
 212DECLARE_MSM_GPIO_PINS(71);
 213DECLARE_MSM_GPIO_PINS(72);
 214DECLARE_MSM_GPIO_PINS(73);
 215DECLARE_MSM_GPIO_PINS(74);
 216DECLARE_MSM_GPIO_PINS(75);
 217DECLARE_MSM_GPIO_PINS(76);
 218DECLARE_MSM_GPIO_PINS(77);
 219DECLARE_MSM_GPIO_PINS(78);
 220DECLARE_MSM_GPIO_PINS(79);
 221DECLARE_MSM_GPIO_PINS(80);
 222DECLARE_MSM_GPIO_PINS(81);
 223DECLARE_MSM_GPIO_PINS(82);
 224DECLARE_MSM_GPIO_PINS(83);
 225DECLARE_MSM_GPIO_PINS(84);
 226DECLARE_MSM_GPIO_PINS(85);
 227DECLARE_MSM_GPIO_PINS(86);
 228DECLARE_MSM_GPIO_PINS(87);
 229DECLARE_MSM_GPIO_PINS(88);
 230DECLARE_MSM_GPIO_PINS(89);
 231DECLARE_MSM_GPIO_PINS(90);
 232DECLARE_MSM_GPIO_PINS(91);
 233DECLARE_MSM_GPIO_PINS(92);
 234DECLARE_MSM_GPIO_PINS(93);
 235DECLARE_MSM_GPIO_PINS(94);
 236DECLARE_MSM_GPIO_PINS(95);
 237DECLARE_MSM_GPIO_PINS(96);
 238DECLARE_MSM_GPIO_PINS(97);
 239DECLARE_MSM_GPIO_PINS(98);
 240DECLARE_MSM_GPIO_PINS(99);
 241DECLARE_MSM_GPIO_PINS(100);
 242DECLARE_MSM_GPIO_PINS(101);
 243DECLARE_MSM_GPIO_PINS(102);
 244DECLARE_MSM_GPIO_PINS(103);
 245DECLARE_MSM_GPIO_PINS(104);
 246DECLARE_MSM_GPIO_PINS(105);
 247DECLARE_MSM_GPIO_PINS(106);
 248DECLARE_MSM_GPIO_PINS(107);
 249DECLARE_MSM_GPIO_PINS(108);
 250DECLARE_MSM_GPIO_PINS(109);
 251DECLARE_MSM_GPIO_PINS(110);
 252DECLARE_MSM_GPIO_PINS(111);
 253DECLARE_MSM_GPIO_PINS(112);
 254DECLARE_MSM_GPIO_PINS(113);
 255DECLARE_MSM_GPIO_PINS(114);
 256DECLARE_MSM_GPIO_PINS(115);
 257DECLARE_MSM_GPIO_PINS(116);
 258
 259static const unsigned int sdc1_clk_pins[] = { 117 };
 260static const unsigned int sdc1_cmd_pins[] = { 118 };
 261static const unsigned int sdc1_data_pins[] = { 119 };
 262static const unsigned int sdc2_clk_pins[] = { 120 };
 263static const unsigned int sdc2_cmd_pins[] = { 121 };
 264static const unsigned int sdc2_data_pins[] = { 122 };
 265
 266#define FUNCTION(fname)                                 \
 267        [MSM_MUX_##fname] = {                           \
 268                .name = #fname,                         \
 269                .groups = fname##_groups,               \
 270                .ngroups = ARRAY_SIZE(fname##_groups),  \
 271        }
 272
 273#define PINGROUP(id, f1, f2, f3, f4, f5, f6, f7)        \
 274        {                                               \
 275                .name = "gpio" #id,                     \
 276                .pins = gpio##id##_pins,                \
 277                .npins = ARRAY_SIZE(gpio##id##_pins),   \
 278                .funcs = (int[]){                       \
 279                        MSM_MUX_gpio,                   \
 280                        MSM_MUX_##f1,                   \
 281                        MSM_MUX_##f2,                   \
 282                        MSM_MUX_##f3,                   \
 283                        MSM_MUX_##f4,                   \
 284                        MSM_MUX_##f5,                   \
 285                        MSM_MUX_##f6,                   \
 286                        MSM_MUX_##f7                    \
 287                },                                      \
 288                .nfuncs = 8,                            \
 289                .ctl_reg = 0x1000 + 0x10 * id,          \
 290                .io_reg = 0x1004 + 0x10 * id,           \
 291                .intr_cfg_reg = 0x1008 + 0x10 * id,     \
 292                .intr_status_reg = 0x100c + 0x10 * id,  \
 293                .intr_target_reg = 0x1008 + 0x10 * id,  \
 294                .mux_bit = 2,                           \
 295                .pull_bit = 0,                          \
 296                .drv_bit = 6,                           \
 297                .oe_bit = 9,                            \
 298                .in_bit = 0,                            \
 299                .out_bit = 1,                           \
 300                .intr_enable_bit = 0,                   \
 301                .intr_status_bit = 0,                   \
 302                .intr_target_bit = 5,                   \
 303                .intr_target_kpss_val = 4,              \
 304                .intr_raw_status_bit = 4,               \
 305                .intr_polarity_bit = 1,                 \
 306                .intr_detection_bit = 2,                \
 307                .intr_detection_width = 2,              \
 308        }
 309
 310#define SDC_PINGROUP(pg_name, ctl, pull, drv)           \
 311        {                                               \
 312                .name = #pg_name,                       \
 313                .pins = pg_name##_pins,                 \
 314                .npins = ARRAY_SIZE(pg_name##_pins),    \
 315                .ctl_reg = ctl,                         \
 316                .io_reg = 0,                            \
 317                .intr_cfg_reg = 0,                      \
 318                .intr_status_reg = 0,                   \
 319                .intr_target_reg = 0,                   \
 320                .mux_bit = -1,                          \
 321                .pull_bit = pull,                       \
 322                .drv_bit = drv,                         \
 323                .oe_bit = -1,                           \
 324                .in_bit = -1,                           \
 325                .out_bit = -1,                          \
 326                .intr_enable_bit = -1,                  \
 327                .intr_status_bit = -1,                  \
 328                .intr_target_bit = -1,                  \
 329                .intr_target_kpss_val = -1,             \
 330                .intr_raw_status_bit = -1,              \
 331                .intr_polarity_bit = -1,                \
 332                .intr_detection_bit = -1,               \
 333                .intr_detection_width = -1,             \
 334        }
 335
 336/*
 337 * TODO: Add the rest of the possible functions and fill out
 338 * the pingroup table below.
 339 */
 340enum msm8226_functions {
 341        MSM_MUX_gpio,
 342        MSM_MUX_cci_i2c0,
 343        MSM_MUX_blsp_i2c1,
 344        MSM_MUX_blsp_i2c2,
 345        MSM_MUX_blsp_i2c3,
 346        MSM_MUX_blsp_i2c5,
 347        MSM_MUX_blsp_spi1,
 348        MSM_MUX_blsp_spi2,
 349        MSM_MUX_blsp_spi3,
 350        MSM_MUX_blsp_spi5,
 351        MSM_MUX_blsp_uart1,
 352        MSM_MUX_blsp_uart2,
 353        MSM_MUX_blsp_uart3,
 354        MSM_MUX_blsp_uart5,
 355        MSM_MUX_blsp_uim1,
 356        MSM_MUX_blsp_uim2,
 357        MSM_MUX_blsp_uim3,
 358        MSM_MUX_blsp_uim5,
 359        MSM_MUX_cam_mclk0,
 360        MSM_MUX_cam_mclk1,
 361        MSM_MUX_wlan,
 362        MSM_MUX_NA,
 363};
 364
 365static const char * const gpio_groups[] = {
 366        "gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7",
 367        "gpio8", "gpio9", "gpio10", "gpio11", "gpio12", "gpio13", "gpio14",
 368        "gpio15", "gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21",
 369        "gpio22", "gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28",
 370        "gpio29", "gpio30", "gpio31", "gpio32", "gpio33", "gpio34", "gpio35",
 371        "gpio36", "gpio37", "gpio38", "gpio39", "gpio40", "gpio41", "gpio42",
 372        "gpio43", "gpio44", "gpio45", "gpio46", "gpio47", "gpio48", "gpio49",
 373        "gpio50", "gpio51", "gpio52", "gpio53", "gpio54", "gpio55", "gpio56",
 374        "gpio57", "gpio58", "gpio59", "gpio60", "gpio61", "gpio62", "gpio63",
 375        "gpio64", "gpio65", "gpio66", "gpio67", "gpio68", "gpio69", "gpio70",
 376        "gpio71", "gpio72", "gpio73", "gpio74", "gpio75", "gpio76", "gpio77",
 377        "gpio78", "gpio79", "gpio80", "gpio81", "gpio82", "gpio83", "gpio84",
 378        "gpio85", "gpio86", "gpio87", "gpio88", "gpio89", "gpio90", "gpio91",
 379        "gpio92", "gpio93", "gpio94", "gpio95", "gpio96", "gpio97", "gpio98",
 380        "gpio99", "gpio100", "gpio101", "gpio102", "gpio103", "gpio104",
 381        "gpio105", "gpio106", "gpio107", "gpio108", "gpio109", "gpio110",
 382        "gpio111", "gpio112", "gpio113", "gpio114", "gpio115", "gpio116",
 383};
 384
 385static const char * const blsp_uart1_groups[] = {
 386        "gpio0", "gpio1", "gpio2", "gpio3"
 387};
 388
 389static const char * const blsp_uim1_groups[] = { "gpio0", "gpio1" };
 390static const char * const blsp_i2c1_groups[] = { "gpio2", "gpio3" };
 391static const char * const blsp_spi1_groups[] = {
 392        "gpio0", "gpio1", "gpio2", "gpio3"
 393};
 394
 395static const char * const blsp_uart2_groups[] = {
 396        "gpio4", "gpio5", "gpio6", "gpio7"
 397};
 398
 399static const char * const blsp_uim2_groups[] = { "gpio4", "gpio5" };
 400static const char * const blsp_i2c2_groups[] = { "gpio6", "gpio7" };
 401static const char * const blsp_spi2_groups[] = {
 402        "gpio4", "gpio5", "gpio6", "gpio7"
 403};
 404
 405static const char * const blsp_uart3_groups[] = {
 406        "gpio8", "gpio9", "gpio10", "gpio11"
 407};
 408
 409static const char * const blsp_uim3_groups[] = { "gpio8", "gpio9" };
 410static const char * const blsp_i2c3_groups[] = { "gpio10", "gpio11" };
 411static const char * const blsp_spi3_groups[] = {
 412        "gpio8", "gpio9", "gpio10", "gpio11"
 413};
 414
 415static const char * const blsp_uart5_groups[] = {
 416        "gpio16", "gpio17", "gpio18", "gpio19"
 417};
 418
 419static const char * const blsp_uim5_groups[] = { "gpio16", "gpio17" };
 420static const char * const blsp_i2c5_groups[] = { "gpio18", "gpio19" };
 421static const char * const blsp_spi5_groups[] = {
 422        "gpio16", "gpio17", "gpio18", "gpio19"
 423};
 424
 425static const char * const cci_i2c0_groups[] = { "gpio29", "gpio30" };
 426
 427static const char * const cam_mclk0_groups[] = { "gpio26" };
 428static const char * const cam_mclk1_groups[] = { "gpio27" };
 429
 430static const char * const wlan_groups[] = {
 431        "gpio40", "gpio41", "gpio42", "gpio43", "gpio44"
 432};
 433
 434static const struct msm_function msm8226_functions[] = {
 435        FUNCTION(gpio),
 436        FUNCTION(cci_i2c0),
 437        FUNCTION(blsp_uim1),
 438        FUNCTION(blsp_uim2),
 439        FUNCTION(blsp_uim3),
 440        FUNCTION(blsp_uim5),
 441        FUNCTION(blsp_i2c1),
 442        FUNCTION(blsp_i2c2),
 443        FUNCTION(blsp_i2c3),
 444        FUNCTION(blsp_i2c5),
 445        FUNCTION(blsp_spi1),
 446        FUNCTION(blsp_spi2),
 447        FUNCTION(blsp_spi3),
 448        FUNCTION(blsp_spi5),
 449        FUNCTION(blsp_uart1),
 450        FUNCTION(blsp_uart2),
 451        FUNCTION(blsp_uart3),
 452        FUNCTION(blsp_uart5),
 453        FUNCTION(cam_mclk0),
 454        FUNCTION(cam_mclk1),
 455        FUNCTION(wlan),
 456};
 457
 458static const struct msm_pingroup msm8226_groups[] = {
 459        PINGROUP(0,   blsp_spi1, blsp_uart1, blsp_uim1, NA, NA, NA, NA),
 460        PINGROUP(1,   blsp_spi1, blsp_uart1, blsp_uim1, NA, NA, NA, NA),
 461        PINGROUP(2,   blsp_spi1, blsp_uart1, blsp_i2c1, NA, NA, NA, NA),
 462        PINGROUP(3,   blsp_spi1, blsp_uart1, blsp_i2c1, NA, NA, NA, NA),
 463        PINGROUP(4,   blsp_spi2, blsp_uart2, blsp_uim2, NA, NA, NA, NA),
 464        PINGROUP(5,   blsp_spi2, blsp_uart2, blsp_uim2, NA, NA, NA, NA),
 465        PINGROUP(6,   blsp_spi2, blsp_uart2, blsp_i2c2, NA, NA, NA, NA),
 466        PINGROUP(7,   blsp_spi2, blsp_uart2, blsp_i2c2, NA, NA, NA, NA),
 467        PINGROUP(8,   blsp_spi3, blsp_uart3, blsp_uim3, NA, NA, NA, NA),
 468        PINGROUP(9,   blsp_spi3, blsp_uart3, blsp_uim3, NA, NA, NA, NA),
 469        PINGROUP(10,  blsp_spi3, blsp_uart3, blsp_i2c3, NA, NA, NA, NA),
 470        PINGROUP(11,  blsp_spi3, blsp_uart3, blsp_i2c3, NA, NA, NA, NA),
 471        PINGROUP(12,  NA, NA, NA, NA, NA, NA, NA),
 472        PINGROUP(13,  NA, NA, NA, NA, NA, NA, NA),
 473        PINGROUP(14,  NA, NA, NA, NA, NA, NA, NA),
 474        PINGROUP(15,  NA, NA, NA, NA, NA, NA, NA),
 475        PINGROUP(16,  blsp_spi5, blsp_uart5, blsp_uim5, NA, NA, NA, NA),
 476        PINGROUP(17,  blsp_spi5, blsp_uart5, blsp_uim5, NA, NA, NA, NA),
 477        PINGROUP(18,  blsp_spi5, blsp_uart5, blsp_i2c5, NA, NA, NA, NA),
 478        PINGROUP(19,  blsp_spi5, blsp_uart5, blsp_i2c5, NA, NA, NA, NA),
 479        PINGROUP(20,  NA, NA, NA, NA, NA, NA, NA),
 480        PINGROUP(21,  NA, NA, NA, NA, NA, NA, NA),
 481        PINGROUP(22,  NA, NA, NA, NA, NA, NA, NA),
 482        PINGROUP(23,  NA, NA, NA, NA, NA, NA, NA),
 483        PINGROUP(24,  NA, NA, NA, NA, NA, NA, NA),
 484        PINGROUP(25,  NA, NA, NA, NA, NA, NA, NA),
 485        PINGROUP(26,  cam_mclk0, NA, NA, NA, NA, NA, NA),
 486        PINGROUP(27,  cam_mclk1, NA, NA, NA, NA, NA, NA),
 487        PINGROUP(28,  NA, NA, NA, NA, NA, NA, NA),
 488        PINGROUP(29,  cci_i2c0, NA, NA, NA, NA, NA, NA),
 489        PINGROUP(30,  cci_i2c0, NA, NA, NA, NA, NA, NA),
 490        PINGROUP(31,  NA, NA, NA, NA, NA, NA, NA),
 491        PINGROUP(32,  NA, NA, NA, NA, NA, NA, NA),
 492        PINGROUP(33,  NA, NA, NA, NA, NA, NA, NA),
 493        PINGROUP(34,  NA, NA, NA, NA, NA, NA, NA),
 494        PINGROUP(35,  NA, NA, NA, NA, NA, NA, NA),
 495        PINGROUP(36,  NA, NA, NA, NA, NA, NA, NA),
 496        PINGROUP(37,  NA, NA, NA, NA, NA, NA, NA),
 497        PINGROUP(38,  NA, NA, NA, NA, NA, NA, NA),
 498        PINGROUP(39,  NA, NA, NA, NA, NA, NA, NA),
 499        PINGROUP(40,  wlan, NA, NA, NA, NA, NA, NA),
 500        PINGROUP(41,  wlan, NA, NA, NA, NA, NA, NA),
 501        PINGROUP(42,  wlan, NA, NA, NA, NA, NA, NA),
 502        PINGROUP(43,  wlan, NA, NA, NA, NA, NA, NA),
 503        PINGROUP(44,  wlan, NA, NA, NA, NA, NA, NA),
 504        PINGROUP(45,  NA, NA, NA, NA, NA, NA, NA),
 505        PINGROUP(46,  NA, NA, NA, NA, NA, NA, NA),
 506        PINGROUP(47,  NA, NA, NA, NA, NA, NA, NA),
 507        PINGROUP(48,  NA, NA, NA, NA, NA, NA, NA),
 508        PINGROUP(49,  NA, NA, NA, NA, NA, NA, NA),
 509        PINGROUP(50,  NA, NA, NA, NA, NA, NA, NA),
 510        PINGROUP(51,  NA, NA, NA, NA, NA, NA, NA),
 511        PINGROUP(52,  NA, NA, NA, NA, NA, NA, NA),
 512        PINGROUP(53,  NA, NA, NA, NA, NA, NA, NA),
 513        PINGROUP(54,  NA, NA, NA, NA, NA, NA, NA),
 514        PINGROUP(55,  NA, NA, NA, NA, NA, NA, NA),
 515        PINGROUP(56,  NA, NA, NA, NA, NA, NA, NA),
 516        PINGROUP(57,  NA, NA, NA, NA, NA, NA, NA),
 517        PINGROUP(58,  NA, NA, NA, NA, NA, NA, NA),
 518        PINGROUP(59,  NA, NA, NA, NA, NA, NA, NA),
 519        PINGROUP(60,  NA, NA, NA, NA, NA, NA, NA),
 520        PINGROUP(61,  NA, NA, NA, NA, NA, NA, NA),
 521        PINGROUP(62,  NA, NA, NA, NA, NA, NA, NA),
 522        PINGROUP(63,  NA, NA, NA, NA, NA, NA, NA),
 523        PINGROUP(64,  NA, NA, NA, NA, NA, NA, NA),
 524        PINGROUP(65,  NA, NA, NA, NA, NA, NA, NA),
 525        PINGROUP(66,  NA, NA, NA, NA, NA, NA, NA),
 526        PINGROUP(67,  NA, NA, NA, NA, NA, NA, NA),
 527        PINGROUP(68,  NA, NA, NA, NA, NA, NA, NA),
 528        PINGROUP(69,  NA, NA, NA, NA, NA, NA, NA),
 529        PINGROUP(70,  NA, NA, NA, NA, NA, NA, NA),
 530        PINGROUP(71,  NA, NA, NA, NA, NA, NA, NA),
 531        PINGROUP(72,  NA, NA, NA, NA, NA, NA, NA),
 532        PINGROUP(73,  NA, NA, NA, NA, NA, NA, NA),
 533        PINGROUP(74,  NA, NA, NA, NA, NA, NA, NA),
 534        PINGROUP(75,  NA, NA, NA, NA, NA, NA, NA),
 535        PINGROUP(76,  NA, NA, NA, NA, NA, NA, NA),
 536        PINGROUP(77,  NA, NA, NA, NA, NA, NA, NA),
 537        PINGROUP(78,  NA, NA, NA, NA, NA, NA, NA),
 538        PINGROUP(79,  NA, NA, NA, NA, NA, NA, NA),
 539        PINGROUP(80,  NA, NA, NA, NA, NA, NA, NA),
 540        PINGROUP(81,  NA, NA, NA, NA, NA, NA, NA),
 541        PINGROUP(82,  NA, NA, NA, NA, NA, NA, NA),
 542        PINGROUP(83,  NA, NA, NA, NA, NA, NA, NA),
 543        PINGROUP(84,  NA, NA, NA, NA, NA, NA, NA),
 544        PINGROUP(85,  NA, NA, NA, NA, NA, NA, NA),
 545        PINGROUP(86,  NA, NA, NA, NA, NA, NA, NA),
 546        PINGROUP(87,  NA, NA, NA, NA, NA, NA, NA),
 547        PINGROUP(88,  NA, NA, NA, NA, NA, NA, NA),
 548        PINGROUP(89,  NA, NA, NA, NA, NA, NA, NA),
 549        PINGROUP(90,  NA, NA, NA, NA, NA, NA, NA),
 550        PINGROUP(91,  NA, NA, NA, NA, NA, NA, NA),
 551        PINGROUP(92,  NA, NA, NA, NA, NA, NA, NA),
 552        PINGROUP(93,  NA, NA, NA, NA, NA, NA, NA),
 553        PINGROUP(94,  NA, NA, NA, NA, NA, NA, NA),
 554        PINGROUP(95,  NA, NA, NA, NA, NA, NA, NA),
 555        PINGROUP(96,  NA, NA, NA, NA, NA, NA, NA),
 556        PINGROUP(97,  NA, NA, NA, NA, NA, NA, NA),
 557        PINGROUP(98,  NA, NA, NA, NA, NA, NA, NA),
 558        PINGROUP(99,  NA, NA, NA, NA, NA, NA, NA),
 559        PINGROUP(100, NA, NA, NA, NA, NA, NA, NA),
 560        PINGROUP(101, NA, NA, NA, NA, NA, NA, NA),
 561        PINGROUP(102, NA, NA, NA, NA, NA, NA, NA),
 562        PINGROUP(103, NA, NA, NA, NA, NA, NA, NA),
 563        PINGROUP(104, NA, NA, NA, NA, NA, NA, NA),
 564        PINGROUP(105, NA, NA, NA, NA, NA, NA, NA),
 565        PINGROUP(106, NA, NA, NA, NA, NA, NA, NA),
 566        PINGROUP(107, NA, NA, NA, NA, NA, NA, NA),
 567        PINGROUP(108, NA, NA, NA, NA, NA, NA, NA),
 568        PINGROUP(109, NA, NA, NA, NA, NA, NA, NA),
 569        PINGROUP(110, NA, NA, NA, NA, NA, NA, NA),
 570        PINGROUP(111, NA, NA, NA, NA, NA, NA, NA),
 571        PINGROUP(112, NA, NA, NA, NA, NA, NA, NA),
 572        PINGROUP(113, NA, NA, NA, NA, NA, NA, NA),
 573        PINGROUP(114, NA, NA, NA, NA, NA, NA, NA),
 574        PINGROUP(115, NA, NA, NA, NA, NA, NA, NA),
 575        PINGROUP(116, NA, NA, NA, NA, NA, NA, NA),
 576        SDC_PINGROUP(sdc1_clk, 0x2044, 13, 6),
 577        SDC_PINGROUP(sdc1_cmd, 0x2044, 11, 3),
 578        SDC_PINGROUP(sdc1_data, 0x2044, 9, 0),
 579        SDC_PINGROUP(sdc2_clk, 0x2048, 14, 6),
 580        SDC_PINGROUP(sdc2_cmd, 0x2048, 11, 3),
 581        SDC_PINGROUP(sdc2_data, 0x2048, 9, 0),
 582};
 583
 584#define NUM_GPIO_PINGROUPS 117
 585
 586static const struct msm_pinctrl_soc_data msm8226_pinctrl = {
 587        .pins = msm8226_pins,
 588        .npins = ARRAY_SIZE(msm8226_pins),
 589        .functions = msm8226_functions,
 590        .nfunctions = ARRAY_SIZE(msm8226_functions),
 591        .groups = msm8226_groups,
 592        .ngroups = ARRAY_SIZE(msm8226_groups),
 593        .ngpios = NUM_GPIO_PINGROUPS,
 594};
 595
 596static int msm8226_pinctrl_probe(struct platform_device *pdev)
 597{
 598        return msm_pinctrl_probe(pdev, &msm8226_pinctrl);
 599}
 600
 601static const struct of_device_id msm8226_pinctrl_of_match[] = {
 602        { .compatible = "qcom,msm8226-pinctrl", },
 603        { },
 604};
 605
 606static struct platform_driver msm8226_pinctrl_driver = {
 607        .driver = {
 608                .name = "msm8226-pinctrl",
 609                .of_match_table = msm8226_pinctrl_of_match,
 610        },
 611        .probe = msm8226_pinctrl_probe,
 612        .remove = msm_pinctrl_remove,
 613};
 614
 615static int __init msm8226_pinctrl_init(void)
 616{
 617        return platform_driver_register(&msm8226_pinctrl_driver);
 618}
 619arch_initcall(msm8226_pinctrl_init);
 620
 621static void __exit msm8226_pinctrl_exit(void)
 622{
 623        platform_driver_unregister(&msm8226_pinctrl_driver);
 624}
 625module_exit(msm8226_pinctrl_exit);
 626
 627MODULE_AUTHOR("Bartosz Dudziak <bartosz.dudziak@snejp.pl>");
 628MODULE_DESCRIPTION("Qualcomm MSM8226 pinctrl driver");
 629MODULE_LICENSE("GPL v2");
 630MODULE_DEVICE_TABLE(of, msm8226_pinctrl_of_match);
 631