1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Marvell PXA25x family pin control
4  *
5  * Copyright (C) 2016 Robert Jarzmik
6  */
7 #include <linux/module.h>
8 #include <linux/platform_device.h>
9 #include <linux/of.h>
10 #include <linux/pinctrl/pinctrl.h>
11 
12 #include "pinctrl-pxa2xx.h"
13 
14 static const struct pxa_desc_pin pxa25x_pins[] = {
15 	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(0)),
16 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(1),
17 		     PXA_FUNCTION(0, 1, "GP_RST")),
18 	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(2)),
19 	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(3)),
20 	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(4)),
21 	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(5)),
22 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(6),
23 		     PXA_FUNCTION(1, 1, "MMCCLK")),
24 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(7),
25 		     PXA_FUNCTION(1, 1, "48_MHz")),
26 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(8),
27 		     PXA_FUNCTION(1, 1, "MMCCS0")),
28 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(9),
29 		     PXA_FUNCTION(1, 1, "MMCCS1")),
30 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(10),
31 		     PXA_FUNCTION(1, 1, "RTCCLK")),
32 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(11),
33 		     PXA_FUNCTION(1, 1, "3_6_MHz")),
34 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(12),
35 		     PXA_FUNCTION(1, 1, "32_kHz")),
36 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(13),
37 		     PXA_FUNCTION(1, 2, "MBGNT")),
38 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(14),
39 		     PXA_FUNCTION(0, 1, "MBREQ")),
40 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(15),
41 		     PXA_FUNCTION(1, 2, "nCS_1")),
42 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(16),
43 		     PXA_FUNCTION(1, 2, "PWM0")),
44 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(17),
45 		     PXA_FUNCTION(1, 2, "PWM1")),
46 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(18),
47 		     PXA_FUNCTION(0, 1, "RDY")),
48 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(19),
49 		     PXA_FUNCTION(0, 1, "DREQ[1]")),
50 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(20),
51 		     PXA_FUNCTION(0, 1, "DREQ[0]")),
52 	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(21)),
53 	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(22)),
54 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(23),
55 		     PXA_FUNCTION(1, 2, "SCLK")),
56 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(24),
57 		     PXA_FUNCTION(1, 2, "SFRM")),
58 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(25),
59 		     PXA_FUNCTION(1, 2, "TXD")),
60 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(26),
61 		     PXA_FUNCTION(0, 1, "RXD")),
62 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(27),
63 		     PXA_FUNCTION(0, 1, "EXTCLK")),
64 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(28),
65 		     PXA_FUNCTION(0, 1, "BITCLK"),
66 		     PXA_FUNCTION(0, 2, "BITCLK"),
67 		     PXA_FUNCTION(1, 1, "BITCLK")),
68 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(29),
69 		     PXA_FUNCTION(0, 1, "SDATA_IN0"),
70 		     PXA_FUNCTION(0, 2, "SDATA_IN")),
71 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(30),
72 		     PXA_FUNCTION(1, 1, "SDATA_OUT"),
73 		     PXA_FUNCTION(1, 2, "SDATA_OUT")),
74 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(31),
75 		     PXA_FUNCTION(1, 1, "SYNC"),
76 		     PXA_FUNCTION(1, 2, "SYNC")),
77 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(32),
78 		     PXA_FUNCTION(0, 1, "SDATA_IN1"),
79 		     PXA_FUNCTION(1, 1, "SYSCLK")),
80 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(33),
81 		     PXA_FUNCTION(1, 2, "nCS[5]")),
82 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(34),
83 		     PXA_FUNCTION(0, 1, "FFRXD"),
84 		     PXA_FUNCTION(1, 2, "MMCCS0")),
85 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(35),
86 		     PXA_FUNCTION(0, 1, "CTS")),
87 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(36),
88 		     PXA_FUNCTION(0, 1, "DCD")),
89 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(37),
90 		     PXA_FUNCTION(0, 1, "DSR")),
91 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(38),
92 		     PXA_FUNCTION(0, 1, "RI")),
93 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(39),
94 		     PXA_FUNCTION(1, 1, "MMCC1"),
95 		     PXA_FUNCTION(1, 2, "FFTXD")),
96 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(40),
97 		     PXA_FUNCTION(1, 2, "DTR")),
98 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(41),
99 		     PXA_FUNCTION(1, 2, "RTS")),
100 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(42),
101 		     PXA_FUNCTION(0, 1, "BTRXD"),
102 		     PXA_FUNCTION(0, 3, "HWRXD")),
103 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(43),
104 		     PXA_FUNCTION(1, 2, "BTTXD"),
105 		     PXA_FUNCTION(1, 3, "HWTXD")),
106 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(44),
107 		     PXA_FUNCTION(0, 1, "BTCTS"),
108 		     PXA_FUNCTION(0, 3, "HWCTS")),
109 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(45),
110 		     PXA_FUNCTION(1, 2, "BTRTS"),
111 		     PXA_FUNCTION(1, 3, "HWRTS")),
112 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(46),
113 		     PXA_FUNCTION(0, 1, "ICP_RXD"),
114 		     PXA_FUNCTION(0, 2, "RXD")),
115 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(47),
116 		     PXA_FUNCTION(1, 1, "TXD"),
117 		     PXA_FUNCTION(1, 2, "ICP_TXD")),
118 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(48),
119 		     PXA_FUNCTION(1, 1, "HWTXD"),
120 		     PXA_FUNCTION(1, 2, "nPOE")),
121 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(49),
122 		     PXA_FUNCTION(0, 1, "HWRXD"),
123 		     PXA_FUNCTION(1, 2, "nPWE")),
124 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(50),
125 		     PXA_FUNCTION(0, 1, "HWCTS"),
126 		     PXA_FUNCTION(1, 2, "nPIOR")),
127 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(51),
128 		     PXA_FUNCTION(1, 1, "HWRTS"),
129 		     PXA_FUNCTION(1, 2, "nPIOW")),
130 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(52),
131 		     PXA_FUNCTION(1, 2, "nPCE[1]")),
132 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(53),
133 		     PXA_FUNCTION(1, 1, "MMCCLK"),
134 		     PXA_FUNCTION(1, 2, "nPCE[2]")),
135 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(54),
136 		     PXA_FUNCTION(1, 1, "MMCCLK"),
137 		     PXA_FUNCTION(1, 2, "nPSKTSEL")),
138 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(55),
139 		     PXA_FUNCTION(1, 2, "nPREG")),
140 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(56),
141 		     PXA_FUNCTION(0, 1, "nPWAIT")),
142 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(57),
143 		     PXA_FUNCTION(0, 1, "nIOIS16")),
144 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(58),
145 		     PXA_FUNCTION(1, 2, "LDD<0>")),
146 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(59),
147 		     PXA_FUNCTION(1, 2, "LDD<1>")),
148 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(60),
149 		     PXA_FUNCTION(1, 2, "LDD<2>")),
150 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(61),
151 		     PXA_FUNCTION(1, 2, "LDD<3>")),
152 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(62),
153 		     PXA_FUNCTION(1, 2, "LDD<4>")),
154 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(63),
155 		     PXA_FUNCTION(1, 2, "LDD<5>")),
156 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(64),
157 		     PXA_FUNCTION(1, 2, "LDD<6>")),
158 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(65),
159 		     PXA_FUNCTION(1, 2, "LDD<7>")),
160 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(66),
161 		     PXA_FUNCTION(0, 1, "MBREQ"),
162 		     PXA_FUNCTION(1, 2, "LDD<8>")),
163 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(67),
164 		     PXA_FUNCTION(1, 1, "MMCCS0"),
165 		     PXA_FUNCTION(1, 2, "LDD<9>")),
166 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(68),
167 		     PXA_FUNCTION(1, 1, "MMCCS1"),
168 		     PXA_FUNCTION(1, 2, "LDD<10>")),
169 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(69),
170 		     PXA_FUNCTION(1, 1, "MMCCLK"),
171 		     PXA_FUNCTION(1, 2, "LDD<11>")),
172 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(70),
173 		     PXA_FUNCTION(1, 1, "RTCCLK"),
174 		     PXA_FUNCTION(1, 2, "LDD<12>")),
175 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(71),
176 		     PXA_FUNCTION(1, 1, "3_6_MHz"),
177 		     PXA_FUNCTION(1, 2, "LDD<13>")),
178 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(72),
179 		     PXA_FUNCTION(1, 1, "32_kHz"),
180 		     PXA_FUNCTION(1, 2, "LDD<14>")),
181 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(73),
182 		     PXA_FUNCTION(1, 1, "MBGNT"),
183 		     PXA_FUNCTION(1, 2, "LDD<15>")),
184 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(74),
185 		     PXA_FUNCTION(1, 2, "LCD_FCLK")),
186 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(75),
187 		     PXA_FUNCTION(1, 2, "LCD_LCLK")),
188 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(76),
189 		     PXA_FUNCTION(1, 2, "LCD_PCLK")),
190 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(77),
191 		     PXA_FUNCTION(1, 2, "LCD_ACBIAS")),
192 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(78),
193 		     PXA_FUNCTION(1, 2, "nCS<2>")),
194 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(79),
195 		     PXA_FUNCTION(1, 2, "nCS<3>")),
196 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(80),
197 		     PXA_FUNCTION(1, 2, "nCS<4>")),
198 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(81),
199 		     PXA_FUNCTION(0, 1, "NSSPSCLK"),
200 		     PXA_FUNCTION(1, 1, "NSSPSCLK")),
201 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(82),
202 		     PXA_FUNCTION(0, 1, "NSSPSFRM"),
203 		     PXA_FUNCTION(1, 1, "NSSPSFRM")),
204 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(83),
205 		     PXA_FUNCTION(0, 2, "NSSPRXD"),
206 		     PXA_FUNCTION(1, 1, "NSSPTXD")),
207 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(84),
208 		     PXA_FUNCTION(0, 2, "NSSPRXD"),
209 		     PXA_FUNCTION(1, 1, "NSSPTXD")),
210 };
211 
pxa25x_pinctrl_probe(struct platform_device * pdev)212 static int pxa25x_pinctrl_probe(struct platform_device *pdev)
213 {
214 	int ret, i;
215 	void __iomem *base_af[8];
216 	void __iomem *base_dir[4];
217 	void __iomem *base_sleep[4];
218 
219 	base_af[0] = devm_platform_ioremap_resource(pdev, 0);
220 	if (IS_ERR(base_af[0]))
221 		return PTR_ERR(base_af[0]);
222 
223 	base_dir[0] = devm_platform_ioremap_resource(pdev, 1);
224 	if (IS_ERR(base_dir[0]))
225 		return PTR_ERR(base_dir[0]);
226 
227 	base_dir[3] = devm_platform_ioremap_resource(pdev, 2);
228 	if (IS_ERR(base_dir[3]))
229 		return PTR_ERR(base_dir[3]);
230 
231 	base_sleep[0] = devm_platform_ioremap_resource(pdev, 3);
232 	if (IS_ERR(base_sleep[0]))
233 		return PTR_ERR(base_sleep[0]);
234 
235 	for (i = 0; i < ARRAY_SIZE(base_af); i++)
236 		base_af[i] = base_af[0] + sizeof(base_af[0]) * i;
237 	for (i = 0; i < 3; i++)
238 		base_dir[i] = base_dir[0] + sizeof(base_dir[0]) * i;
239 	for (i = 0; i < ARRAY_SIZE(base_sleep); i++)
240 		base_sleep[i] = base_sleep[0] + sizeof(base_af[0]) * i;
241 
242 	ret = pxa2xx_pinctrl_init(pdev, pxa25x_pins, ARRAY_SIZE(pxa25x_pins),
243 				  base_af, base_dir, base_sleep);
244 	return ret;
245 }
246 
247 static const struct of_device_id pxa25x_pinctrl_match[] = {
248 	{ .compatible = "marvell,pxa25x-pinctrl", },
249 	{}
250 };
251 MODULE_DEVICE_TABLE(of, pxa25x_pinctrl_match);
252 
253 static struct platform_driver pxa25x_pinctrl_driver = {
254 	.probe	= pxa25x_pinctrl_probe,
255 	.driver	= {
256 		.name		= "pxa25x-pinctrl",
257 		.of_match_table	= pxa25x_pinctrl_match,
258 	},
259 };
260 module_platform_driver(pxa25x_pinctrl_driver);
261 
262 MODULE_AUTHOR("Robert Jarzmik <robert.jarzmik@free.fr>");
263 MODULE_DESCRIPTION("Marvell PXA25x pinctrl driver");
264 MODULE_LICENSE("GPL v2");
265