197fb5e8dSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
28b37e88cSNeil Armstrong /*
38b37e88cSNeil Armstrong  * Copyright (c) 2014, Sony Mobile Communications AB.
48b37e88cSNeil Armstrong  * Copyright (c) 2016 BayLibre, SAS.
58b37e88cSNeil Armstrong  * Author : Neil Armstrong <narmstrong@baylibre.com>
68b37e88cSNeil Armstrong  */
78b37e88cSNeil Armstrong 
88b37e88cSNeil Armstrong #include <linux/module.h>
98b37e88cSNeil Armstrong #include <linux/of.h>
108b37e88cSNeil Armstrong #include <linux/platform_device.h>
118b37e88cSNeil Armstrong #include <linux/pinctrl/pinmux.h>
128b37e88cSNeil Armstrong 
138b37e88cSNeil Armstrong #include "pinctrl-msm.h"
148b37e88cSNeil Armstrong 
158b37e88cSNeil Armstrong static const struct pinctrl_pin_desc mdm9615_pins[] = {
168b37e88cSNeil Armstrong 	PINCTRL_PIN(0, "GPIO_0"),
178b37e88cSNeil Armstrong 	PINCTRL_PIN(1, "GPIO_1"),
188b37e88cSNeil Armstrong 	PINCTRL_PIN(2, "GPIO_2"),
198b37e88cSNeil Armstrong 	PINCTRL_PIN(3, "GPIO_3"),
208b37e88cSNeil Armstrong 	PINCTRL_PIN(4, "GPIO_4"),
218b37e88cSNeil Armstrong 	PINCTRL_PIN(5, "GPIO_5"),
228b37e88cSNeil Armstrong 	PINCTRL_PIN(6, "GPIO_6"),
238b37e88cSNeil Armstrong 	PINCTRL_PIN(7, "GPIO_7"),
248b37e88cSNeil Armstrong 	PINCTRL_PIN(8, "GPIO_8"),
258b37e88cSNeil Armstrong 	PINCTRL_PIN(9, "GPIO_9"),
268b37e88cSNeil Armstrong 	PINCTRL_PIN(10, "GPIO_10"),
278b37e88cSNeil Armstrong 	PINCTRL_PIN(11, "GPIO_11"),
288b37e88cSNeil Armstrong 	PINCTRL_PIN(12, "GPIO_12"),
298b37e88cSNeil Armstrong 	PINCTRL_PIN(13, "GPIO_13"),
308b37e88cSNeil Armstrong 	PINCTRL_PIN(14, "GPIO_14"),
318b37e88cSNeil Armstrong 	PINCTRL_PIN(15, "GPIO_15"),
328b37e88cSNeil Armstrong 	PINCTRL_PIN(16, "GPIO_16"),
338b37e88cSNeil Armstrong 	PINCTRL_PIN(17, "GPIO_17"),
348b37e88cSNeil Armstrong 	PINCTRL_PIN(18, "GPIO_18"),
358b37e88cSNeil Armstrong 	PINCTRL_PIN(19, "GPIO_19"),
368b37e88cSNeil Armstrong 	PINCTRL_PIN(20, "GPIO_20"),
378b37e88cSNeil Armstrong 	PINCTRL_PIN(21, "GPIO_21"),
388b37e88cSNeil Armstrong 	PINCTRL_PIN(22, "GPIO_22"),
398b37e88cSNeil Armstrong 	PINCTRL_PIN(23, "GPIO_23"),
408b37e88cSNeil Armstrong 	PINCTRL_PIN(24, "GPIO_24"),
418b37e88cSNeil Armstrong 	PINCTRL_PIN(25, "GPIO_25"),
428b37e88cSNeil Armstrong 	PINCTRL_PIN(26, "GPIO_26"),
438b37e88cSNeil Armstrong 	PINCTRL_PIN(27, "GPIO_27"),
448b37e88cSNeil Armstrong 	PINCTRL_PIN(28, "GPIO_28"),
458b37e88cSNeil Armstrong 	PINCTRL_PIN(29, "GPIO_29"),
468b37e88cSNeil Armstrong 	PINCTRL_PIN(30, "GPIO_30"),
478b37e88cSNeil Armstrong 	PINCTRL_PIN(31, "GPIO_31"),
488b37e88cSNeil Armstrong 	PINCTRL_PIN(32, "GPIO_32"),
498b37e88cSNeil Armstrong 	PINCTRL_PIN(33, "GPIO_33"),
508b37e88cSNeil Armstrong 	PINCTRL_PIN(34, "GPIO_34"),
518b37e88cSNeil Armstrong 	PINCTRL_PIN(35, "GPIO_35"),
528b37e88cSNeil Armstrong 	PINCTRL_PIN(36, "GPIO_36"),
538b37e88cSNeil Armstrong 	PINCTRL_PIN(37, "GPIO_37"),
548b37e88cSNeil Armstrong 	PINCTRL_PIN(38, "GPIO_38"),
558b37e88cSNeil Armstrong 	PINCTRL_PIN(39, "GPIO_39"),
568b37e88cSNeil Armstrong 	PINCTRL_PIN(40, "GPIO_40"),
578b37e88cSNeil Armstrong 	PINCTRL_PIN(41, "GPIO_41"),
588b37e88cSNeil Armstrong 	PINCTRL_PIN(42, "GPIO_42"),
598b37e88cSNeil Armstrong 	PINCTRL_PIN(43, "GPIO_43"),
608b37e88cSNeil Armstrong 	PINCTRL_PIN(44, "GPIO_44"),
618b37e88cSNeil Armstrong 	PINCTRL_PIN(45, "GPIO_45"),
628b37e88cSNeil Armstrong 	PINCTRL_PIN(46, "GPIO_46"),
638b37e88cSNeil Armstrong 	PINCTRL_PIN(47, "GPIO_47"),
648b37e88cSNeil Armstrong 	PINCTRL_PIN(48, "GPIO_48"),
658b37e88cSNeil Armstrong 	PINCTRL_PIN(49, "GPIO_49"),
668b37e88cSNeil Armstrong 	PINCTRL_PIN(50, "GPIO_50"),
678b37e88cSNeil Armstrong 	PINCTRL_PIN(51, "GPIO_51"),
688b37e88cSNeil Armstrong 	PINCTRL_PIN(52, "GPIO_52"),
698b37e88cSNeil Armstrong 	PINCTRL_PIN(53, "GPIO_53"),
708b37e88cSNeil Armstrong 	PINCTRL_PIN(54, "GPIO_54"),
718b37e88cSNeil Armstrong 	PINCTRL_PIN(55, "GPIO_55"),
728b37e88cSNeil Armstrong 	PINCTRL_PIN(56, "GPIO_56"),
738b37e88cSNeil Armstrong 	PINCTRL_PIN(57, "GPIO_57"),
748b37e88cSNeil Armstrong 	PINCTRL_PIN(58, "GPIO_58"),
758b37e88cSNeil Armstrong 	PINCTRL_PIN(59, "GPIO_59"),
768b37e88cSNeil Armstrong 	PINCTRL_PIN(60, "GPIO_60"),
778b37e88cSNeil Armstrong 	PINCTRL_PIN(61, "GPIO_61"),
788b37e88cSNeil Armstrong 	PINCTRL_PIN(62, "GPIO_62"),
798b37e88cSNeil Armstrong 	PINCTRL_PIN(63, "GPIO_63"),
808b37e88cSNeil Armstrong 	PINCTRL_PIN(64, "GPIO_64"),
818b37e88cSNeil Armstrong 	PINCTRL_PIN(65, "GPIO_65"),
828b37e88cSNeil Armstrong 	PINCTRL_PIN(66, "GPIO_66"),
838b37e88cSNeil Armstrong 	PINCTRL_PIN(67, "GPIO_67"),
848b37e88cSNeil Armstrong 	PINCTRL_PIN(68, "GPIO_68"),
858b37e88cSNeil Armstrong 	PINCTRL_PIN(69, "GPIO_69"),
868b37e88cSNeil Armstrong 	PINCTRL_PIN(70, "GPIO_70"),
878b37e88cSNeil Armstrong 	PINCTRL_PIN(71, "GPIO_71"),
888b37e88cSNeil Armstrong 	PINCTRL_PIN(72, "GPIO_72"),
898b37e88cSNeil Armstrong 	PINCTRL_PIN(73, "GPIO_73"),
908b37e88cSNeil Armstrong 	PINCTRL_PIN(74, "GPIO_74"),
918b37e88cSNeil Armstrong 	PINCTRL_PIN(75, "GPIO_75"),
928b37e88cSNeil Armstrong 	PINCTRL_PIN(76, "GPIO_76"),
938b37e88cSNeil Armstrong 	PINCTRL_PIN(77, "GPIO_77"),
948b37e88cSNeil Armstrong 	PINCTRL_PIN(78, "GPIO_78"),
958b37e88cSNeil Armstrong 	PINCTRL_PIN(79, "GPIO_79"),
968b37e88cSNeil Armstrong 	PINCTRL_PIN(80, "GPIO_80"),
978b37e88cSNeil Armstrong 	PINCTRL_PIN(81, "GPIO_81"),
988b37e88cSNeil Armstrong 	PINCTRL_PIN(82, "GPIO_82"),
998b37e88cSNeil Armstrong 	PINCTRL_PIN(83, "GPIO_83"),
1008b37e88cSNeil Armstrong 	PINCTRL_PIN(84, "GPIO_84"),
1018b37e88cSNeil Armstrong 	PINCTRL_PIN(85, "GPIO_85"),
1028b37e88cSNeil Armstrong 	PINCTRL_PIN(86, "GPIO_86"),
1038b37e88cSNeil Armstrong 	PINCTRL_PIN(87, "GPIO_87"),
1048b37e88cSNeil Armstrong };
1058b37e88cSNeil Armstrong 
1068b37e88cSNeil Armstrong #define DECLARE_MSM_GPIO_PINS(pin) \
1078b37e88cSNeil Armstrong 	static const unsigned int gpio##pin##_pins[] = { pin }
1088b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(0);
1098b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(1);
1108b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(2);
1118b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(3);
1128b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(4);
1138b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(5);
1148b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(6);
1158b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(7);
1168b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(8);
1178b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(9);
1188b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(10);
1198b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(11);
1208b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(12);
1218b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(13);
1228b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(14);
1238b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(15);
1248b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(16);
1258b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(17);
1268b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(18);
1278b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(19);
1288b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(20);
1298b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(21);
1308b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(22);
1318b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(23);
1328b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(24);
1338b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(25);
1348b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(26);
1358b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(27);
1368b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(28);
1378b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(29);
1388b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(30);
1398b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(31);
1408b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(32);
1418b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(33);
1428b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(34);
1438b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(35);
1448b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(36);
1458b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(37);
1468b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(38);
1478b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(39);
1488b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(40);
1498b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(41);
1508b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(42);
1518b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(43);
1528b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(44);
1538b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(45);
1548b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(46);
1558b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(47);
1568b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(48);
1578b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(49);
1588b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(50);
1598b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(51);
1608b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(52);
1618b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(53);
1628b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(54);
1638b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(55);
1648b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(56);
1658b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(57);
1668b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(58);
1678b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(59);
1688b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(60);
1698b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(61);
1708b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(62);
1718b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(63);
1728b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(64);
1738b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(65);
1748b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(66);
1758b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(67);
1768b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(68);
1778b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(69);
1788b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(70);
1798b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(71);
1808b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(72);
1818b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(73);
1828b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(74);
1838b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(75);
1848b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(76);
1858b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(77);
1868b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(78);
1878b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(79);
1888b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(80);
1898b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(81);
1908b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(82);
1918b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(83);
1928b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(84);
1938b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(85);
1948b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(86);
1958b37e88cSNeil Armstrong DECLARE_MSM_GPIO_PINS(87);
1968b37e88cSNeil Armstrong 
1978b37e88cSNeil Armstrong #define PINGROUP(id, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11) \
1988b37e88cSNeil Armstrong 	{						\
199*6a16d1a5SRohit Agarwal 		.grp = PINCTRL_PINGROUP("gpio" #id, 	\
200*6a16d1a5SRohit Agarwal 			gpio##id##_pins, 		\
201*6a16d1a5SRohit Agarwal 			ARRAY_SIZE(gpio##id##_pins)),	\
2028b37e88cSNeil Armstrong 		.funcs = (int[]){			\
203c7a291dbSRohit Agarwal 			msm_mux_gpio,			\
204c7a291dbSRohit Agarwal 			msm_mux_##f1,			\
205c7a291dbSRohit Agarwal 			msm_mux_##f2,			\
206c7a291dbSRohit Agarwal 			msm_mux_##f3,			\
207c7a291dbSRohit Agarwal 			msm_mux_##f4,			\
208c7a291dbSRohit Agarwal 			msm_mux_##f5,			\
209c7a291dbSRohit Agarwal 			msm_mux_##f6,			\
210c7a291dbSRohit Agarwal 			msm_mux_##f7,			\
211c7a291dbSRohit Agarwal 			msm_mux_##f8,			\
212c7a291dbSRohit Agarwal 			msm_mux_##f9,			\
213c7a291dbSRohit Agarwal 			msm_mux_##f10,			\
214c7a291dbSRohit Agarwal 			msm_mux_##f11			\
2158b37e88cSNeil Armstrong 		},					\
2168b37e88cSNeil Armstrong 		.nfuncs = 12,				\
2178b37e88cSNeil Armstrong 		.ctl_reg = 0x1000 + 0x10 * id,		\
2188b37e88cSNeil Armstrong 		.io_reg = 0x1004 + 0x10 * id,		\
2198b37e88cSNeil Armstrong 		.intr_cfg_reg = 0x1008 + 0x10 * id,	\
2208b37e88cSNeil Armstrong 		.intr_status_reg = 0x100c + 0x10 * id,	\
2218b37e88cSNeil Armstrong 		.intr_target_reg = 0x400 + 0x4 * id,	\
2228b37e88cSNeil Armstrong 		.mux_bit = 2,				\
2238b37e88cSNeil Armstrong 		.pull_bit = 0,				\
2248b37e88cSNeil Armstrong 		.drv_bit = 6,				\
2258b37e88cSNeil Armstrong 		.oe_bit = 9,				\
2268b37e88cSNeil Armstrong 		.in_bit = 0,				\
2278b37e88cSNeil Armstrong 		.out_bit = 1,				\
2288b37e88cSNeil Armstrong 		.intr_enable_bit = 0,			\
2298b37e88cSNeil Armstrong 		.intr_status_bit = 0,			\
2308b37e88cSNeil Armstrong 		.intr_ack_high = 1,			\
2318b37e88cSNeil Armstrong 		.intr_target_bit = 0,			\
2328b37e88cSNeil Armstrong 		.intr_target_kpss_val = 4,		\
2338b37e88cSNeil Armstrong 		.intr_raw_status_bit = 3,		\
2348b37e88cSNeil Armstrong 		.intr_polarity_bit = 1,			\
2358b37e88cSNeil Armstrong 		.intr_detection_bit = 2,		\
2368b37e88cSNeil Armstrong 		.intr_detection_width = 1,		\
2378b37e88cSNeil Armstrong 	}
2388b37e88cSNeil Armstrong 
2398b37e88cSNeil Armstrong enum mdm9615_functions {
240c7a291dbSRohit Agarwal 	msm_mux_gpio,
241c7a291dbSRohit Agarwal 	msm_mux_gsbi2_i2c,
242c7a291dbSRohit Agarwal 	msm_mux_gsbi3,
243c7a291dbSRohit Agarwal 	msm_mux_gsbi4,
244c7a291dbSRohit Agarwal 	msm_mux_gsbi5_i2c,
245c7a291dbSRohit Agarwal 	msm_mux_gsbi5_uart,
246c7a291dbSRohit Agarwal 	msm_mux_sdc2,
247c7a291dbSRohit Agarwal 	msm_mux_ebi2_lcdc,
248c7a291dbSRohit Agarwal 	msm_mux_ps_hold,
249c7a291dbSRohit Agarwal 	msm_mux_prim_audio,
250c7a291dbSRohit Agarwal 	msm_mux_sec_audio,
251c7a291dbSRohit Agarwal 	msm_mux_cdc_mclk,
252c7a291dbSRohit Agarwal 	msm_mux_NA,
2538b37e88cSNeil Armstrong };
2548b37e88cSNeil Armstrong 
2558b37e88cSNeil Armstrong static const char * const gpio_groups[] = {
2568b37e88cSNeil Armstrong 	"gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7",
2578b37e88cSNeil Armstrong 	"gpio8", "gpio9", "gpio10", "gpio11", "gpio12", "gpio13", "gpio14",
2588b37e88cSNeil Armstrong 	"gpio15", "gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21",
2598b37e88cSNeil Armstrong 	"gpio22", "gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28",
2608b37e88cSNeil Armstrong 	"gpio29", "gpio30", "gpio31", "gpio32", "gpio33", "gpio34", "gpio35",
2618b37e88cSNeil Armstrong 	"gpio36", "gpio37", "gpio38", "gpio39", "gpio40", "gpio41", "gpio42",
2628b37e88cSNeil Armstrong 	"gpio43", "gpio44", "gpio45", "gpio46", "gpio47", "gpio48", "gpio49",
2638b37e88cSNeil Armstrong 	"gpio50", "gpio51", "gpio52", "gpio53", "gpio54", "gpio55", "gpio56",
2648b37e88cSNeil Armstrong 	"gpio57", "gpio58", "gpio59", "gpio60", "gpio61", "gpio62", "gpio63",
2658b37e88cSNeil Armstrong 	"gpio64", "gpio65", "gpio66", "gpio67", "gpio68", "gpio69", "gpio70",
2668b37e88cSNeil Armstrong 	"gpio71", "gpio72", "gpio73", "gpio74", "gpio75", "gpio76", "gpio77",
2678b37e88cSNeil Armstrong 	"gpio78", "gpio79", "gpio80", "gpio81", "gpio82", "gpio83", "gpio84",
2688b37e88cSNeil Armstrong 	"gpio85", "gpio86", "gpio87"
2698b37e88cSNeil Armstrong };
2708b37e88cSNeil Armstrong 
2718b37e88cSNeil Armstrong static const char * const gsbi2_i2c_groups[] = {
2728b37e88cSNeil Armstrong 	"gpio4", "gpio5"
2738b37e88cSNeil Armstrong };
2748b37e88cSNeil Armstrong 
2758b37e88cSNeil Armstrong static const char * const gsbi3_groups[] = {
2768b37e88cSNeil Armstrong 	"gpio8", "gpio9", "gpio10", "gpio11"
2778b37e88cSNeil Armstrong };
2788b37e88cSNeil Armstrong 
2798b37e88cSNeil Armstrong static const char * const gsbi4_groups[] = {
2808b37e88cSNeil Armstrong 	"gpio12", "gpio13", "gpio14", "gpio15"
2818b37e88cSNeil Armstrong };
2828b37e88cSNeil Armstrong 
2838b37e88cSNeil Armstrong static const char * const gsbi5_i2c_groups[] = {
2848b37e88cSNeil Armstrong 	"gpio16", "gpio17"
2858b37e88cSNeil Armstrong };
2868b37e88cSNeil Armstrong 
2878b37e88cSNeil Armstrong static const char * const gsbi5_uart_groups[] = {
2888b37e88cSNeil Armstrong 	"gpio18", "gpio19"
2898b37e88cSNeil Armstrong };
2908b37e88cSNeil Armstrong 
2918b37e88cSNeil Armstrong static const char * const sdc2_groups[] = {
2928b37e88cSNeil Armstrong 	"gpio25", "gpio26", "gpio27", "gpio28", "gpio29", "gpio30",
2938b37e88cSNeil Armstrong };
2948b37e88cSNeil Armstrong 
2958b37e88cSNeil Armstrong static const char * const ebi2_lcdc_groups[] = {
2968b37e88cSNeil Armstrong 	"gpio21", "gpio22", "gpio24",
2978b37e88cSNeil Armstrong };
2988b37e88cSNeil Armstrong 
2998b37e88cSNeil Armstrong static const char * const ps_hold_groups[] = {
3008b37e88cSNeil Armstrong 	"gpio83",
3018b37e88cSNeil Armstrong };
3028b37e88cSNeil Armstrong 
3038b37e88cSNeil Armstrong static const char * const prim_audio_groups[] = {
3048b37e88cSNeil Armstrong 	"gpio20", "gpio21", "gpio22", "gpio23",
3058b37e88cSNeil Armstrong };
3068b37e88cSNeil Armstrong 
3078b37e88cSNeil Armstrong static const char * const sec_audio_groups[] = {
3088b37e88cSNeil Armstrong 	"gpio25", "gpio26", "gpio27", "gpio28",
3098b37e88cSNeil Armstrong };
3108b37e88cSNeil Armstrong 
3118b37e88cSNeil Armstrong static const char * const cdc_mclk_groups[] = {
3128b37e88cSNeil Armstrong 	"gpio24",
3138b37e88cSNeil Armstrong };
3148b37e88cSNeil Armstrong 
315c7a291dbSRohit Agarwal static const struct pinfunction mdm9615_functions[] = {
316c7a291dbSRohit Agarwal 	MSM_PIN_FUNCTION(gpio),
317c7a291dbSRohit Agarwal 	MSM_PIN_FUNCTION(gsbi2_i2c),
318c7a291dbSRohit Agarwal 	MSM_PIN_FUNCTION(gsbi3),
319c7a291dbSRohit Agarwal 	MSM_PIN_FUNCTION(gsbi4),
320c7a291dbSRohit Agarwal 	MSM_PIN_FUNCTION(gsbi5_i2c),
321c7a291dbSRohit Agarwal 	MSM_PIN_FUNCTION(gsbi5_uart),
322c7a291dbSRohit Agarwal 	MSM_PIN_FUNCTION(sdc2),
323c7a291dbSRohit Agarwal 	MSM_PIN_FUNCTION(ebi2_lcdc),
324c7a291dbSRohit Agarwal 	MSM_PIN_FUNCTION(ps_hold),
325c7a291dbSRohit Agarwal 	MSM_PIN_FUNCTION(prim_audio),
326c7a291dbSRohit Agarwal 	MSM_PIN_FUNCTION(sec_audio),
327c7a291dbSRohit Agarwal 	MSM_PIN_FUNCTION(cdc_mclk),
3288b37e88cSNeil Armstrong };
3298b37e88cSNeil Armstrong 
3308b37e88cSNeil Armstrong static const struct msm_pingroup mdm9615_groups[] = {
3318b37e88cSNeil Armstrong 	PINGROUP(0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3328b37e88cSNeil Armstrong 	PINGROUP(1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3338b37e88cSNeil Armstrong 	PINGROUP(2, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3348b37e88cSNeil Armstrong 	PINGROUP(3, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3358b37e88cSNeil Armstrong 	PINGROUP(4, gsbi2_i2c, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3368b37e88cSNeil Armstrong 	PINGROUP(5, gsbi2_i2c, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3378b37e88cSNeil Armstrong 	PINGROUP(6, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3388b37e88cSNeil Armstrong 	PINGROUP(7, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3398b37e88cSNeil Armstrong 	PINGROUP(8, gsbi3, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3408b37e88cSNeil Armstrong 	PINGROUP(9, gsbi3, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3418b37e88cSNeil Armstrong 	PINGROUP(10, gsbi3, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3428b37e88cSNeil Armstrong 	PINGROUP(11, gsbi3, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3438b37e88cSNeil Armstrong 	PINGROUP(12, gsbi4, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3448b37e88cSNeil Armstrong 	PINGROUP(13, gsbi4, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3458b37e88cSNeil Armstrong 	PINGROUP(14, gsbi4, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3468b37e88cSNeil Armstrong 	PINGROUP(15, gsbi4, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3478b37e88cSNeil Armstrong 	PINGROUP(16, gsbi5_i2c, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3488b37e88cSNeil Armstrong 	PINGROUP(17, gsbi5_i2c, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3498b37e88cSNeil Armstrong 	PINGROUP(18, gsbi5_uart, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3508b37e88cSNeil Armstrong 	PINGROUP(19, gsbi5_uart, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3518b37e88cSNeil Armstrong 	PINGROUP(20, prim_audio, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3528b37e88cSNeil Armstrong 	PINGROUP(21, prim_audio, ebi2_lcdc, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3538b37e88cSNeil Armstrong 	PINGROUP(22, prim_audio, ebi2_lcdc, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3548b37e88cSNeil Armstrong 	PINGROUP(23, prim_audio, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3558b37e88cSNeil Armstrong 	PINGROUP(24, cdc_mclk, NA, ebi2_lcdc, NA, NA, NA, NA, NA, NA, NA, NA),
3568b37e88cSNeil Armstrong 	PINGROUP(25, sdc2, sec_audio, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3578b37e88cSNeil Armstrong 	PINGROUP(26, sdc2, sec_audio, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3588b37e88cSNeil Armstrong 	PINGROUP(27, sdc2, sec_audio, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3598b37e88cSNeil Armstrong 	PINGROUP(28, sdc2, sec_audio, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3608b37e88cSNeil Armstrong 	PINGROUP(29, sdc2, sec_audio, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3618b37e88cSNeil Armstrong 	PINGROUP(30, sdc2, sec_audio, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3628b37e88cSNeil Armstrong 	PINGROUP(31, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3638b37e88cSNeil Armstrong 	PINGROUP(32, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3648b37e88cSNeil Armstrong 	PINGROUP(33, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3658b37e88cSNeil Armstrong 	PINGROUP(34, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3668b37e88cSNeil Armstrong 	PINGROUP(35, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3678b37e88cSNeil Armstrong 	PINGROUP(36, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3688b37e88cSNeil Armstrong 	PINGROUP(37, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3698b37e88cSNeil Armstrong 	PINGROUP(38, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3708b37e88cSNeil Armstrong 	PINGROUP(39, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3718b37e88cSNeil Armstrong 	PINGROUP(40, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3728b37e88cSNeil Armstrong 	PINGROUP(41, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3738b37e88cSNeil Armstrong 	PINGROUP(42, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3748b37e88cSNeil Armstrong 	PINGROUP(43, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3758b37e88cSNeil Armstrong 	PINGROUP(44, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3768b37e88cSNeil Armstrong 	PINGROUP(45, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3778b37e88cSNeil Armstrong 	PINGROUP(46, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3788b37e88cSNeil Armstrong 	PINGROUP(47, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3798b37e88cSNeil Armstrong 	PINGROUP(48, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3808b37e88cSNeil Armstrong 	PINGROUP(49, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3818b37e88cSNeil Armstrong 	PINGROUP(50, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3828b37e88cSNeil Armstrong 	PINGROUP(51, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3838b37e88cSNeil Armstrong 	PINGROUP(52, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3848b37e88cSNeil Armstrong 	PINGROUP(53, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3858b37e88cSNeil Armstrong 	PINGROUP(54, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3868b37e88cSNeil Armstrong 	PINGROUP(55, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3878b37e88cSNeil Armstrong 	PINGROUP(56, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3888b37e88cSNeil Armstrong 	PINGROUP(57, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3898b37e88cSNeil Armstrong 	PINGROUP(58, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3908b37e88cSNeil Armstrong 	PINGROUP(59, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3918b37e88cSNeil Armstrong 	PINGROUP(60, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3928b37e88cSNeil Armstrong 	PINGROUP(61, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3938b37e88cSNeil Armstrong 	PINGROUP(62, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3948b37e88cSNeil Armstrong 	PINGROUP(63, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3958b37e88cSNeil Armstrong 	PINGROUP(64, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3968b37e88cSNeil Armstrong 	PINGROUP(65, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3978b37e88cSNeil Armstrong 	PINGROUP(66, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3988b37e88cSNeil Armstrong 	PINGROUP(67, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
3998b37e88cSNeil Armstrong 	PINGROUP(68, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
4008b37e88cSNeil Armstrong 	PINGROUP(69, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
4018b37e88cSNeil Armstrong 	PINGROUP(70, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
4028b37e88cSNeil Armstrong 	PINGROUP(71, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
4038b37e88cSNeil Armstrong 	PINGROUP(72, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
4048b37e88cSNeil Armstrong 	PINGROUP(73, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
4058b37e88cSNeil Armstrong 	PINGROUP(74, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
4068b37e88cSNeil Armstrong 	PINGROUP(75, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
4078b37e88cSNeil Armstrong 	PINGROUP(76, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
4088b37e88cSNeil Armstrong 	PINGROUP(77, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
4098b37e88cSNeil Armstrong 	PINGROUP(78, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
4108b37e88cSNeil Armstrong 	PINGROUP(79, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
4118b37e88cSNeil Armstrong 	PINGROUP(80, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
4128b37e88cSNeil Armstrong 	PINGROUP(81, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
4138b37e88cSNeil Armstrong 	PINGROUP(82, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
4148b37e88cSNeil Armstrong 	PINGROUP(83, ps_hold, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
4158b37e88cSNeil Armstrong 	PINGROUP(84, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
4168b37e88cSNeil Armstrong 	PINGROUP(85, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
4178b37e88cSNeil Armstrong 	PINGROUP(86, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
4188b37e88cSNeil Armstrong 	PINGROUP(87, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
4198b37e88cSNeil Armstrong };
4208b37e88cSNeil Armstrong 
4218b37e88cSNeil Armstrong #define NUM_GPIO_PINGROUPS 88
4228b37e88cSNeil Armstrong 
4238b37e88cSNeil Armstrong static const struct msm_pinctrl_soc_data mdm9615_pinctrl = {
4248b37e88cSNeil Armstrong 	.pins = mdm9615_pins,
4258b37e88cSNeil Armstrong 	.npins = ARRAY_SIZE(mdm9615_pins),
4268b37e88cSNeil Armstrong 	.functions = mdm9615_functions,
4278b37e88cSNeil Armstrong 	.nfunctions = ARRAY_SIZE(mdm9615_functions),
4288b37e88cSNeil Armstrong 	.groups = mdm9615_groups,
4298b37e88cSNeil Armstrong 	.ngroups = ARRAY_SIZE(mdm9615_groups),
4308b37e88cSNeil Armstrong 	.ngpios = NUM_GPIO_PINGROUPS,
4318b37e88cSNeil Armstrong };
4328b37e88cSNeil Armstrong 
mdm9615_pinctrl_probe(struct platform_device * pdev)4338b37e88cSNeil Armstrong static int mdm9615_pinctrl_probe(struct platform_device *pdev)
4348b37e88cSNeil Armstrong {
4358b37e88cSNeil Armstrong 	return msm_pinctrl_probe(pdev, &mdm9615_pinctrl);
4368b37e88cSNeil Armstrong }
4378b37e88cSNeil Armstrong 
4388b37e88cSNeil Armstrong static const struct of_device_id mdm9615_pinctrl_of_match[] = {
4398b37e88cSNeil Armstrong 	{ .compatible = "qcom,mdm9615-pinctrl", },
4408b37e88cSNeil Armstrong 	{ },
4418b37e88cSNeil Armstrong };
4428b37e88cSNeil Armstrong 
4438b37e88cSNeil Armstrong static struct platform_driver mdm9615_pinctrl_driver = {
4448b37e88cSNeil Armstrong 	.driver = {
4458b37e88cSNeil Armstrong 		.name = "mdm9615-pinctrl",
4468b37e88cSNeil Armstrong 		.of_match_table = mdm9615_pinctrl_of_match,
4478b37e88cSNeil Armstrong 	},
4488b37e88cSNeil Armstrong 	.probe = mdm9615_pinctrl_probe,
4498b37e88cSNeil Armstrong 	.remove = msm_pinctrl_remove,
4508b37e88cSNeil Armstrong };
4518b37e88cSNeil Armstrong 
mdm9615_pinctrl_init(void)4528b37e88cSNeil Armstrong static int __init mdm9615_pinctrl_init(void)
4538b37e88cSNeil Armstrong {
4548b37e88cSNeil Armstrong 	return platform_driver_register(&mdm9615_pinctrl_driver);
4558b37e88cSNeil Armstrong }
4568b37e88cSNeil Armstrong arch_initcall(mdm9615_pinctrl_init);
4578b37e88cSNeil Armstrong 
mdm9615_pinctrl_exit(void)4588b37e88cSNeil Armstrong static void __exit mdm9615_pinctrl_exit(void)
4598b37e88cSNeil Armstrong {
4608b37e88cSNeil Armstrong 	platform_driver_unregister(&mdm9615_pinctrl_driver);
4618b37e88cSNeil Armstrong }
4628b37e88cSNeil Armstrong module_exit(mdm9615_pinctrl_exit);
4638b37e88cSNeil Armstrong 
4648b37e88cSNeil Armstrong MODULE_AUTHOR("Neil Armstrong <narmstrong@baylibre.com>");
4658b37e88cSNeil Armstrong MODULE_DESCRIPTION("Qualcomm MDM9615 pinctrl driver");
4668b37e88cSNeil Armstrong MODULE_LICENSE("GPL v2");
4678b37e88cSNeil Armstrong MODULE_DEVICE_TABLE(of, mdm9615_pinctrl_of_match);
468