1 /*
2  * Driver for the U300 pin controller
3  *
4  * Based on the original U300 padmux functions
5  * Copyright (C) 2009-2011 ST-Ericsson AB
6  * Author: Martin Persson <martin.persson@stericsson.com>
7  * Author: Linus Walleij <linus.walleij@linaro.org>
8  *
9  * The DB3350 design and control registers are oriented around pads rather than
10  * pins, so we enumerate the pads we can mux rather than actual pins. The pads
11  * are connected to different pins in different packaging types, so it would
12  * be confusing.
13  */
14 #include <linux/init.h>
15 #include <linux/module.h>
16 #include <linux/mod_devicetable.h>
17 #include <linux/platform_device.h>
18 #include <linux/io.h>
19 #include <linux/slab.h>
20 #include <linux/err.h>
21 #include <linux/pinctrl/pinctrl.h>
22 #include <linux/pinctrl/pinmux.h>
23 #include <linux/pinctrl/pinconf.h>
24 #include <linux/pinctrl/pinconf-generic.h>
25 #include "pinctrl-coh901.h"
26 
27 /*
28  * Register definitions for the U300 Padmux control registers in the
29  * system controller
30  */
31 
32 /* PAD MUX Control register 1 (LOW) 16bit (R/W) */
33 #define U300_SYSCON_PMC1LR					0x007C
34 #define U300_SYSCON_PMC1LR_MASK					0xFFFF
35 #define U300_SYSCON_PMC1LR_CDI_MASK				0xC000
36 #define U300_SYSCON_PMC1LR_CDI_CDI				0x0000
37 #define U300_SYSCON_PMC1LR_CDI_EMIF				0x4000
38 /* For BS335 */
39 #define U300_SYSCON_PMC1LR_CDI_CDI2				0x8000
40 #define U300_SYSCON_PMC1LR_CDI_WCDMA_APP_GPIO			0xC000
41 /* For BS365 */
42 #define U300_SYSCON_PMC1LR_CDI_GPIO				0x8000
43 #define U300_SYSCON_PMC1LR_CDI_WCDMA				0xC000
44 /* Common defs */
45 #define U300_SYSCON_PMC1LR_PDI_MASK				0x3000
46 #define U300_SYSCON_PMC1LR_PDI_PDI				0x0000
47 #define U300_SYSCON_PMC1LR_PDI_EGG				0x1000
48 #define U300_SYSCON_PMC1LR_PDI_WCDMA				0x3000
49 #define U300_SYSCON_PMC1LR_MMCSD_MASK				0x0C00
50 #define U300_SYSCON_PMC1LR_MMCSD_MMCSD				0x0000
51 #define U300_SYSCON_PMC1LR_MMCSD_MSPRO				0x0400
52 #define U300_SYSCON_PMC1LR_MMCSD_DSP				0x0800
53 #define U300_SYSCON_PMC1LR_MMCSD_WCDMA				0x0C00
54 #define U300_SYSCON_PMC1LR_ETM_MASK				0x0300
55 #define U300_SYSCON_PMC1LR_ETM_ACC				0x0000
56 #define U300_SYSCON_PMC1LR_ETM_APP				0x0100
57 #define U300_SYSCON_PMC1LR_EMIF_1_CS2_MASK			0x00C0
58 #define U300_SYSCON_PMC1LR_EMIF_1_CS2_STATIC			0x0000
59 #define U300_SYSCON_PMC1LR_EMIF_1_CS2_NFIF			0x0040
60 #define U300_SYSCON_PMC1LR_EMIF_1_CS2_SDRAM			0x0080
61 #define U300_SYSCON_PMC1LR_EMIF_1_CS2_STATIC_2GB		0x00C0
62 #define U300_SYSCON_PMC1LR_EMIF_1_CS1_MASK			0x0030
63 #define U300_SYSCON_PMC1LR_EMIF_1_CS1_STATIC			0x0000
64 #define U300_SYSCON_PMC1LR_EMIF_1_CS1_NFIF			0x0010
65 #define U300_SYSCON_PMC1LR_EMIF_1_CS1_SDRAM			0x0020
66 #define U300_SYSCON_PMC1LR_EMIF_1_CS1_SEMI			0x0030
67 #define U300_SYSCON_PMC1LR_EMIF_1_CS0_MASK			0x000C
68 #define U300_SYSCON_PMC1LR_EMIF_1_CS0_STATIC			0x0000
69 #define U300_SYSCON_PMC1LR_EMIF_1_CS0_NFIF			0x0004
70 #define U300_SYSCON_PMC1LR_EMIF_1_CS0_SDRAM			0x0008
71 #define U300_SYSCON_PMC1LR_EMIF_1_CS0_SEMI			0x000C
72 #define U300_SYSCON_PMC1LR_EMIF_1_MASK				0x0003
73 #define U300_SYSCON_PMC1LR_EMIF_1_STATIC			0x0000
74 #define U300_SYSCON_PMC1LR_EMIF_1_SDRAM0			0x0001
75 #define U300_SYSCON_PMC1LR_EMIF_1_SDRAM1			0x0002
76 #define U300_SYSCON_PMC1LR_EMIF_1				0x0003
77 /* PAD MUX Control register 2 (HIGH) 16bit (R/W) */
78 #define U300_SYSCON_PMC1HR					0x007E
79 #define U300_SYSCON_PMC1HR_MASK					0xFFFF
80 #define U300_SYSCON_PMC1HR_MISC_2_MASK				0xC000
81 #define U300_SYSCON_PMC1HR_MISC_2_APP_GPIO			0x0000
82 #define U300_SYSCON_PMC1HR_MISC_2_MSPRO				0x4000
83 #define U300_SYSCON_PMC1HR_MISC_2_DSP				0x8000
84 #define U300_SYSCON_PMC1HR_MISC_2_AAIF				0xC000
85 #define U300_SYSCON_PMC1HR_APP_GPIO_2_MASK			0x3000
86 #define U300_SYSCON_PMC1HR_APP_GPIO_2_APP_GPIO			0x0000
87 #define U300_SYSCON_PMC1HR_APP_GPIO_2_NFIF			0x1000
88 #define U300_SYSCON_PMC1HR_APP_GPIO_2_DSP			0x2000
89 #define U300_SYSCON_PMC1HR_APP_GPIO_2_AAIF			0x3000
90 #define U300_SYSCON_PMC1HR_APP_GPIO_1_MASK			0x0C00
91 #define U300_SYSCON_PMC1HR_APP_GPIO_1_APP_GPIO			0x0000
92 #define U300_SYSCON_PMC1HR_APP_GPIO_1_MMC			0x0400
93 #define U300_SYSCON_PMC1HR_APP_GPIO_1_DSP			0x0800
94 #define U300_SYSCON_PMC1HR_APP_GPIO_1_AAIF			0x0C00
95 #define U300_SYSCON_PMC1HR_APP_SPI_CS_2_MASK			0x0300
96 #define U300_SYSCON_PMC1HR_APP_SPI_CS_2_APP_GPIO		0x0000
97 #define U300_SYSCON_PMC1HR_APP_SPI_CS_2_SPI			0x0100
98 #define U300_SYSCON_PMC1HR_APP_SPI_CS_2_AAIF			0x0300
99 #define U300_SYSCON_PMC1HR_APP_SPI_CS_1_MASK			0x00C0
100 #define U300_SYSCON_PMC1HR_APP_SPI_CS_1_APP_GPIO		0x0000
101 #define U300_SYSCON_PMC1HR_APP_SPI_CS_1_SPI			0x0040
102 #define U300_SYSCON_PMC1HR_APP_SPI_CS_1_AAIF			0x00C0
103 #define U300_SYSCON_PMC1HR_APP_SPI_2_MASK			0x0030
104 #define U300_SYSCON_PMC1HR_APP_SPI_2_APP_GPIO			0x0000
105 #define U300_SYSCON_PMC1HR_APP_SPI_2_SPI			0x0010
106 #define U300_SYSCON_PMC1HR_APP_SPI_2_DSP			0x0020
107 #define U300_SYSCON_PMC1HR_APP_SPI_2_AAIF			0x0030
108 #define U300_SYSCON_PMC1HR_APP_UART0_2_MASK			0x000C
109 #define U300_SYSCON_PMC1HR_APP_UART0_2_APP_GPIO			0x0000
110 #define U300_SYSCON_PMC1HR_APP_UART0_2_UART0			0x0004
111 #define U300_SYSCON_PMC1HR_APP_UART0_2_NFIF_CS			0x0008
112 #define U300_SYSCON_PMC1HR_APP_UART0_2_AAIF			0x000C
113 #define U300_SYSCON_PMC1HR_APP_UART0_1_MASK			0x0003
114 #define U300_SYSCON_PMC1HR_APP_UART0_1_APP_GPIO			0x0000
115 #define U300_SYSCON_PMC1HR_APP_UART0_1_UART0			0x0001
116 #define U300_SYSCON_PMC1HR_APP_UART0_1_AAIF			0x0003
117 /* Padmux 2 control */
118 #define U300_SYSCON_PMC2R					0x100
119 #define U300_SYSCON_PMC2R_APP_MISC_0_MASK			0x00C0
120 #define U300_SYSCON_PMC2R_APP_MISC_0_APP_GPIO			0x0000
121 #define U300_SYSCON_PMC2R_APP_MISC_0_EMIF_SDRAM			0x0040
122 #define U300_SYSCON_PMC2R_APP_MISC_0_MMC			0x0080
123 #define U300_SYSCON_PMC2R_APP_MISC_0_CDI2			0x00C0
124 #define U300_SYSCON_PMC2R_APP_MISC_1_MASK			0x0300
125 #define U300_SYSCON_PMC2R_APP_MISC_1_APP_GPIO			0x0000
126 #define U300_SYSCON_PMC2R_APP_MISC_1_EMIF_SDRAM			0x0100
127 #define U300_SYSCON_PMC2R_APP_MISC_1_MMC			0x0200
128 #define U300_SYSCON_PMC2R_APP_MISC_1_CDI2			0x0300
129 #define U300_SYSCON_PMC2R_APP_MISC_2_MASK			0x0C00
130 #define U300_SYSCON_PMC2R_APP_MISC_2_APP_GPIO			0x0000
131 #define U300_SYSCON_PMC2R_APP_MISC_2_EMIF_SDRAM			0x0400
132 #define U300_SYSCON_PMC2R_APP_MISC_2_MMC			0x0800
133 #define U300_SYSCON_PMC2R_APP_MISC_2_CDI2			0x0C00
134 #define U300_SYSCON_PMC2R_APP_MISC_3_MASK			0x3000
135 #define U300_SYSCON_PMC2R_APP_MISC_3_APP_GPIO			0x0000
136 #define U300_SYSCON_PMC2R_APP_MISC_3_EMIF_SDRAM			0x1000
137 #define U300_SYSCON_PMC2R_APP_MISC_3_MMC			0x2000
138 #define U300_SYSCON_PMC2R_APP_MISC_3_CDI2			0x3000
139 #define U300_SYSCON_PMC2R_APP_MISC_4_MASK			0xC000
140 #define U300_SYSCON_PMC2R_APP_MISC_4_APP_GPIO			0x0000
141 #define U300_SYSCON_PMC2R_APP_MISC_4_EMIF_SDRAM			0x4000
142 #define U300_SYSCON_PMC2R_APP_MISC_4_MMC			0x8000
143 #define U300_SYSCON_PMC2R_APP_MISC_4_ACC_GPIO			0xC000
144 /* TODO: More SYSCON registers missing */
145 #define U300_SYSCON_PMC3R					0x10C
146 #define U300_SYSCON_PMC3R_APP_MISC_11_MASK			0xC000
147 #define U300_SYSCON_PMC3R_APP_MISC_11_SPI			0x4000
148 #define U300_SYSCON_PMC3R_APP_MISC_10_MASK			0x3000
149 #define U300_SYSCON_PMC3R_APP_MISC_10_SPI			0x1000
150 /* TODO: Missing other configs */
151 #define U300_SYSCON_PMC4R					0x168
152 #define U300_SYSCON_PMC4R_APP_MISC_12_MASK			0x0003
153 #define U300_SYSCON_PMC4R_APP_MISC_12_APP_GPIO			0x0000
154 #define U300_SYSCON_PMC4R_APP_MISC_13_MASK			0x000C
155 #define U300_SYSCON_PMC4R_APP_MISC_13_CDI			0x0000
156 #define U300_SYSCON_PMC4R_APP_MISC_13_SMIA			0x0004
157 #define U300_SYSCON_PMC4R_APP_MISC_13_SMIA2			0x0008
158 #define U300_SYSCON_PMC4R_APP_MISC_13_APP_GPIO			0x000C
159 #define U300_SYSCON_PMC4R_APP_MISC_14_MASK			0x0030
160 #define U300_SYSCON_PMC4R_APP_MISC_14_CDI			0x0000
161 #define U300_SYSCON_PMC4R_APP_MISC_14_SMIA			0x0010
162 #define U300_SYSCON_PMC4R_APP_MISC_14_CDI2			0x0020
163 #define U300_SYSCON_PMC4R_APP_MISC_14_APP_GPIO			0x0030
164 #define U300_SYSCON_PMC4R_APP_MISC_16_MASK			0x0300
165 #define U300_SYSCON_PMC4R_APP_MISC_16_APP_GPIO_13		0x0000
166 #define U300_SYSCON_PMC4R_APP_MISC_16_APP_UART1_CTS		0x0100
167 #define U300_SYSCON_PMC4R_APP_MISC_16_EMIF_1_STATIC_CS5_N	0x0200
168 
169 #define DRIVER_NAME "pinctrl-u300"
170 
171 /*
172  * The DB3350 has 467 pads, I have enumerated the pads clockwise around the
173  * edges of the silicon, finger by finger. LTCORNER upper left is pad 0.
174  * Data taken from the PadRing chart, arranged like this:
175  *
176  *   0 ..... 104
177  * 466        105
178  *   .        .
179  *   .        .
180  * 358        224
181  *  357 .... 225
182  */
183 #define U300_NUM_PADS 467
184 
185 /* Pad names for the pinmux subsystem */
186 static const struct pinctrl_pin_desc u300_pads[] = {
187 	/* Pads along the top edge of the chip */
188 	PINCTRL_PIN(0, "P PAD VDD 28"),
189 	PINCTRL_PIN(1, "P PAD GND 28"),
190 	PINCTRL_PIN(2, "PO SIM RST N"),
191 	PINCTRL_PIN(3, "VSSIO 25"),
192 	PINCTRL_PIN(4, "VSSA ADDA ESDSUB"),
193 	PINCTRL_PIN(5, "PWR VSSCOMMON"),
194 	PINCTRL_PIN(6, "PI ADC I1 POS"),
195 	PINCTRL_PIN(7, "PI ADC I1 NEG"),
196 	PINCTRL_PIN(8, "PWR VSSAD0"),
197 	PINCTRL_PIN(9, "PWR VCCAD0"),
198 	PINCTRL_PIN(10, "PI ADC Q1 NEG"),
199 	PINCTRL_PIN(11, "PI ADC Q1 POS"),
200 	PINCTRL_PIN(12, "PWR VDDAD"),
201 	PINCTRL_PIN(13, "PWR GNDAD"),
202 	PINCTRL_PIN(14, "PI ADC I2 POS"),
203 	PINCTRL_PIN(15, "PI ADC I2 NEG"),
204 	PINCTRL_PIN(16, "PWR VSSAD1"),
205 	PINCTRL_PIN(17, "PWR VCCAD1"),
206 	PINCTRL_PIN(18, "PI ADC Q2 NEG"),
207 	PINCTRL_PIN(19, "PI ADC Q2 POS"),
208 	PINCTRL_PIN(20, "VSSA ADDA ESDSUB"),
209 	PINCTRL_PIN(21, "PWR VCCGPAD"),
210 	PINCTRL_PIN(22, "PI TX POW"),
211 	PINCTRL_PIN(23, "PWR VSSGPAD"),
212 	PINCTRL_PIN(24, "PO DAC I POS"),
213 	PINCTRL_PIN(25, "PO DAC I NEG"),
214 	PINCTRL_PIN(26, "PO DAC Q POS"),
215 	PINCTRL_PIN(27, "PO DAC Q NEG"),
216 	PINCTRL_PIN(28, "PWR VSSDA"),
217 	PINCTRL_PIN(29, "PWR VCCDA"),
218 	PINCTRL_PIN(30, "VSSA ADDA ESDSUB"),
219 	PINCTRL_PIN(31, "P PAD VDDIO 11"),
220 	PINCTRL_PIN(32, "PI PLL 26 FILTVDD"),
221 	PINCTRL_PIN(33, "PI PLL 26 VCONT"),
222 	PINCTRL_PIN(34, "PWR AGNDPLL2V5 32 13"),
223 	PINCTRL_PIN(35, "PWR AVDDPLL2V5 32 13"),
224 	PINCTRL_PIN(36, "VDDA PLL ESD"),
225 	PINCTRL_PIN(37, "VSSA PLL ESD"),
226 	PINCTRL_PIN(38, "VSS PLL"),
227 	PINCTRL_PIN(39, "VDDC PLL"),
228 	PINCTRL_PIN(40, "PWR AGNDPLL2V5 26 60"),
229 	PINCTRL_PIN(41, "PWR AVDDPLL2V5 26 60"),
230 	PINCTRL_PIN(42, "PWR AVDDPLL2V5 26 208"),
231 	PINCTRL_PIN(43, "PWR AGNDPLL2V5 26 208"),
232 	PINCTRL_PIN(44, "PWR AVDDPLL2V5 13 208"),
233 	PINCTRL_PIN(45, "PWR AGNDPLL2V5 13 208"),
234 	PINCTRL_PIN(46, "P PAD VSSIO 11"),
235 	PINCTRL_PIN(47, "P PAD VSSIO 12"),
236 	PINCTRL_PIN(48, "PI POW RST N"),
237 	PINCTRL_PIN(49, "VDDC IO"),
238 	PINCTRL_PIN(50, "P PAD VDDIO 16"),
239 	PINCTRL_PIN(51, "PO RF WCDMA EN 4"),
240 	PINCTRL_PIN(52, "PO RF WCDMA EN 3"),
241 	PINCTRL_PIN(53, "PO RF WCDMA EN 2"),
242 	PINCTRL_PIN(54, "PO RF WCDMA EN 1"),
243 	PINCTRL_PIN(55, "PO RF WCDMA EN 0"),
244 	PINCTRL_PIN(56, "PO GSM PA ENABLE"),
245 	PINCTRL_PIN(57, "PO RF DATA STRB"),
246 	PINCTRL_PIN(58, "PO RF DATA2"),
247 	PINCTRL_PIN(59, "PIO RF DATA1"),
248 	PINCTRL_PIN(60, "PIO RF DATA0"),
249 	PINCTRL_PIN(61, "P PAD VDD 11"),
250 	PINCTRL_PIN(62, "P PAD GND 11"),
251 	PINCTRL_PIN(63, "P PAD VSSIO 16"),
252 	PINCTRL_PIN(64, "P PAD VDDIO 18"),
253 	PINCTRL_PIN(65, "PO RF CTRL STRB2"),
254 	PINCTRL_PIN(66, "PO RF CTRL STRB1"),
255 	PINCTRL_PIN(67, "PO RF CTRL STRB0"),
256 	PINCTRL_PIN(68, "PIO RF CTRL DATA"),
257 	PINCTRL_PIN(69, "PO RF CTRL CLK"),
258 	PINCTRL_PIN(70, "PO TX ADC STRB"),
259 	PINCTRL_PIN(71, "PO ANT SW 2"),
260 	PINCTRL_PIN(72, "PO ANT SW 3"),
261 	PINCTRL_PIN(73, "PO ANT SW 0"),
262 	PINCTRL_PIN(74, "PO ANT SW 1"),
263 	PINCTRL_PIN(75, "PO M CLKRQ"),
264 	PINCTRL_PIN(76, "PI M CLK"),
265 	PINCTRL_PIN(77, "PI RTC CLK"),
266 	PINCTRL_PIN(78, "P PAD VDD 8"),
267 	PINCTRL_PIN(79, "P PAD GND 8"),
268 	PINCTRL_PIN(80, "P PAD VSSIO 13"),
269 	PINCTRL_PIN(81, "P PAD VDDIO 13"),
270 	PINCTRL_PIN(82, "PO SYS 1 CLK"),
271 	PINCTRL_PIN(83, "PO SYS 2 CLK"),
272 	PINCTRL_PIN(84, "PO SYS 0 CLK"),
273 	PINCTRL_PIN(85, "PI SYS 0 CLKRQ"),
274 	PINCTRL_PIN(86, "PO PWR MNGT CTRL 1"),
275 	PINCTRL_PIN(87, "PO PWR MNGT CTRL 0"),
276 	PINCTRL_PIN(88, "PO RESOUT2 RST N"),
277 	PINCTRL_PIN(89, "PO RESOUT1 RST N"),
278 	PINCTRL_PIN(90, "PO RESOUT0 RST N"),
279 	PINCTRL_PIN(91, "PI SERVICE N"),
280 	PINCTRL_PIN(92, "P PAD VDD 29"),
281 	PINCTRL_PIN(93, "P PAD GND 29"),
282 	PINCTRL_PIN(94, "P PAD VSSIO 8"),
283 	PINCTRL_PIN(95, "P PAD VDDIO 8"),
284 	PINCTRL_PIN(96, "PI EXT IRQ1 N"),
285 	PINCTRL_PIN(97, "PI EXT IRQ0 N"),
286 	PINCTRL_PIN(98, "PIO DC ON"),
287 	PINCTRL_PIN(99, "PIO ACC APP I2C DATA"),
288 	PINCTRL_PIN(100, "PIO ACC APP I2C CLK"),
289 	PINCTRL_PIN(101, "P PAD VDD 12"),
290 	PINCTRL_PIN(102, "P PAD GND 12"),
291 	PINCTRL_PIN(103, "P PAD VSSIO 14"),
292 	PINCTRL_PIN(104, "P PAD VDDIO 14"),
293 	/* Pads along the right edge of the chip */
294 	PINCTRL_PIN(105, "PIO APP I2C1 DATA"),
295 	PINCTRL_PIN(106, "PIO APP I2C1 CLK"),
296 	PINCTRL_PIN(107, "PO KEY OUT0"),
297 	PINCTRL_PIN(108, "PO KEY OUT1"),
298 	PINCTRL_PIN(109, "PO KEY OUT2"),
299 	PINCTRL_PIN(110, "PO KEY OUT3"),
300 	PINCTRL_PIN(111, "PO KEY OUT4"),
301 	PINCTRL_PIN(112, "PI KEY IN0"),
302 	PINCTRL_PIN(113, "PI KEY IN1"),
303 	PINCTRL_PIN(114, "PI KEY IN2"),
304 	PINCTRL_PIN(115, "P PAD VDDIO 15"),
305 	PINCTRL_PIN(116, "P PAD VSSIO 15"),
306 	PINCTRL_PIN(117, "P PAD GND 13"),
307 	PINCTRL_PIN(118, "P PAD VDD 13"),
308 	PINCTRL_PIN(119, "PI KEY IN3"),
309 	PINCTRL_PIN(120, "PI KEY IN4"),
310 	PINCTRL_PIN(121, "PI KEY IN5"),
311 	PINCTRL_PIN(122, "PIO APP PCM I2S1 DATA B"),
312 	PINCTRL_PIN(123, "PIO APP PCM I2S1 DATA A"),
313 	PINCTRL_PIN(124, "PIO APP PCM I2S1 WS"),
314 	PINCTRL_PIN(125, "PIO APP PCM I2S1 CLK"),
315 	PINCTRL_PIN(126, "PIO APP PCM I2S0 DATA B"),
316 	PINCTRL_PIN(127, "PIO APP PCM I2S0 DATA A"),
317 	PINCTRL_PIN(128, "PIO APP PCM I2S0 WS"),
318 	PINCTRL_PIN(129, "PIO APP PCM I2S0 CLK"),
319 	PINCTRL_PIN(130, "P PAD VDD 17"),
320 	PINCTRL_PIN(131, "P PAD GND 17"),
321 	PINCTRL_PIN(132, "P PAD VSSIO 19"),
322 	PINCTRL_PIN(133, "P PAD VDDIO 19"),
323 	PINCTRL_PIN(134, "UART0 RTS"),
324 	PINCTRL_PIN(135, "UART0 CTS"),
325 	PINCTRL_PIN(136, "UART0 TX"),
326 	PINCTRL_PIN(137, "UART0 RX"),
327 	PINCTRL_PIN(138, "PIO ACC SPI DO"),
328 	PINCTRL_PIN(139, "PIO ACC SPI DI"),
329 	PINCTRL_PIN(140, "PIO ACC SPI CS0 N"),
330 	PINCTRL_PIN(141, "PIO ACC SPI CS1 N"),
331 	PINCTRL_PIN(142, "PIO ACC SPI CS2 N"),
332 	PINCTRL_PIN(143, "PIO ACC SPI CLK"),
333 	PINCTRL_PIN(144, "PO PDI EXT RST N"),
334 	PINCTRL_PIN(145, "P PAD VDDIO 22"),
335 	PINCTRL_PIN(146, "P PAD VSSIO 22"),
336 	PINCTRL_PIN(147, "P PAD GND 18"),
337 	PINCTRL_PIN(148, "P PAD VDD 18"),
338 	PINCTRL_PIN(149, "PIO PDI C0"),
339 	PINCTRL_PIN(150, "PIO PDI C1"),
340 	PINCTRL_PIN(151, "PIO PDI C2"),
341 	PINCTRL_PIN(152, "PIO PDI C3"),
342 	PINCTRL_PIN(153, "PIO PDI C4"),
343 	PINCTRL_PIN(154, "PIO PDI C5"),
344 	PINCTRL_PIN(155, "PIO PDI D0"),
345 	PINCTRL_PIN(156, "PIO PDI D1"),
346 	PINCTRL_PIN(157, "PIO PDI D2"),
347 	PINCTRL_PIN(158, "PIO PDI D3"),
348 	PINCTRL_PIN(159, "P PAD VDDIO 21"),
349 	PINCTRL_PIN(160, "P PAD VSSIO 21"),
350 	PINCTRL_PIN(161, "PIO PDI D4"),
351 	PINCTRL_PIN(162, "PIO PDI D5"),
352 	PINCTRL_PIN(163, "PIO PDI D6"),
353 	PINCTRL_PIN(164, "PIO PDI D7"),
354 	PINCTRL_PIN(165, "PIO MS INS"),
355 	PINCTRL_PIN(166, "MMC DATA DIR LS"),
356 	PINCTRL_PIN(167, "MMC DATA 3"),
357 	PINCTRL_PIN(168, "MMC DATA 2"),
358 	PINCTRL_PIN(169, "MMC DATA 1"),
359 	PINCTRL_PIN(170, "MMC DATA 0"),
360 	PINCTRL_PIN(171, "MMC CMD DIR LS"),
361 	PINCTRL_PIN(172, "P PAD VDD 27"),
362 	PINCTRL_PIN(173, "P PAD GND 27"),
363 	PINCTRL_PIN(174, "P PAD VSSIO 20"),
364 	PINCTRL_PIN(175, "P PAD VDDIO 20"),
365 	PINCTRL_PIN(176, "MMC CMD"),
366 	PINCTRL_PIN(177, "MMC CLK"),
367 	PINCTRL_PIN(178, "PIO APP GPIO 14"),
368 	PINCTRL_PIN(179, "PIO APP GPIO 13"),
369 	PINCTRL_PIN(180, "PIO APP GPIO 11"),
370 	PINCTRL_PIN(181, "PIO APP GPIO 25"),
371 	PINCTRL_PIN(182, "PIO APP GPIO 24"),
372 	PINCTRL_PIN(183, "PIO APP GPIO 23"),
373 	PINCTRL_PIN(184, "PIO APP GPIO 22"),
374 	PINCTRL_PIN(185, "PIO APP GPIO 21"),
375 	PINCTRL_PIN(186, "PIO APP GPIO 20"),
376 	PINCTRL_PIN(187, "P PAD VDD 19"),
377 	PINCTRL_PIN(188, "P PAD GND 19"),
378 	PINCTRL_PIN(189, "P PAD VSSIO 23"),
379 	PINCTRL_PIN(190, "P PAD VDDIO 23"),
380 	PINCTRL_PIN(191, "PIO APP GPIO 19"),
381 	PINCTRL_PIN(192, "PIO APP GPIO 18"),
382 	PINCTRL_PIN(193, "PIO APP GPIO 17"),
383 	PINCTRL_PIN(194, "PIO APP GPIO 16"),
384 	PINCTRL_PIN(195, "PI CI D1"),
385 	PINCTRL_PIN(196, "PI CI D0"),
386 	PINCTRL_PIN(197, "PI CI HSYNC"),
387 	PINCTRL_PIN(198, "PI CI VSYNC"),
388 	PINCTRL_PIN(199, "PI CI EXT CLK"),
389 	PINCTRL_PIN(200, "PO CI EXT RST N"),
390 	PINCTRL_PIN(201, "P PAD VSSIO 43"),
391 	PINCTRL_PIN(202, "P PAD VDDIO 43"),
392 	PINCTRL_PIN(203, "PI CI D6"),
393 	PINCTRL_PIN(204, "PI CI D7"),
394 	PINCTRL_PIN(205, "PI CI D2"),
395 	PINCTRL_PIN(206, "PI CI D3"),
396 	PINCTRL_PIN(207, "PI CI D4"),
397 	PINCTRL_PIN(208, "PI CI D5"),
398 	PINCTRL_PIN(209, "PI CI D8"),
399 	PINCTRL_PIN(210, "PI CI D9"),
400 	PINCTRL_PIN(211, "P PAD VDD 20"),
401 	PINCTRL_PIN(212, "P PAD GND 20"),
402 	PINCTRL_PIN(213, "P PAD VSSIO 24"),
403 	PINCTRL_PIN(214, "P PAD VDDIO 24"),
404 	PINCTRL_PIN(215, "P PAD VDDIO 26"),
405 	PINCTRL_PIN(216, "PO EMIF 1 A26"),
406 	PINCTRL_PIN(217, "PO EMIF 1 A25"),
407 	PINCTRL_PIN(218, "P PAD VSSIO 26"),
408 	PINCTRL_PIN(219, "PO EMIF 1 A24"),
409 	PINCTRL_PIN(220, "PO EMIF 1 A23"),
410 	/* Pads along the bottom edge of the chip */
411 	PINCTRL_PIN(221, "PO EMIF 1 A22"),
412 	PINCTRL_PIN(222, "PO EMIF 1 A21"),
413 	PINCTRL_PIN(223, "P PAD VDD 21"),
414 	PINCTRL_PIN(224, "P PAD GND 21"),
415 	PINCTRL_PIN(225, "P PAD VSSIO 27"),
416 	PINCTRL_PIN(226, "P PAD VDDIO 27"),
417 	PINCTRL_PIN(227, "PO EMIF 1 A20"),
418 	PINCTRL_PIN(228, "PO EMIF 1 A19"),
419 	PINCTRL_PIN(229, "PO EMIF 1 A18"),
420 	PINCTRL_PIN(230, "PO EMIF 1 A17"),
421 	PINCTRL_PIN(231, "P PAD VDDIO 28"),
422 	PINCTRL_PIN(232, "P PAD VSSIO 28"),
423 	PINCTRL_PIN(233, "PO EMIF 1 A16"),
424 	PINCTRL_PIN(234, "PIO EMIF 1 D15"),
425 	PINCTRL_PIN(235, "PO EMIF 1 A15"),
426 	PINCTRL_PIN(236, "PIO EMIF 1 D14"),
427 	PINCTRL_PIN(237, "P PAD VDD 22"),
428 	PINCTRL_PIN(238, "P PAD GND 22"),
429 	PINCTRL_PIN(239, "P PAD VSSIO 29"),
430 	PINCTRL_PIN(240, "P PAD VDDIO 29"),
431 	PINCTRL_PIN(241, "PO EMIF 1 A14"),
432 	PINCTRL_PIN(242, "PIO EMIF 1 D13"),
433 	PINCTRL_PIN(243, "PO EMIF 1 A13"),
434 	PINCTRL_PIN(244, "PIO EMIF 1 D12"),
435 	PINCTRL_PIN(245, "P PAD VSSIO 30"),
436 	PINCTRL_PIN(246, "P PAD VDDIO 30"),
437 	PINCTRL_PIN(247, "PO EMIF 1 A12"),
438 	PINCTRL_PIN(248, "PIO EMIF 1 D11"),
439 	PINCTRL_PIN(249, "PO EMIF 1 A11"),
440 	PINCTRL_PIN(250, "PIO EMIF 1 D10"),
441 	PINCTRL_PIN(251, "P PAD VSSIO 31"),
442 	PINCTRL_PIN(252, "P PAD VDDIO 31"),
443 	PINCTRL_PIN(253, "PO EMIF 1 A10"),
444 	PINCTRL_PIN(254, "PIO EMIF 1 D09"),
445 	PINCTRL_PIN(255, "PO EMIF 1 A09"),
446 	PINCTRL_PIN(256, "P PAD VDDIO 32"),
447 	PINCTRL_PIN(257, "P PAD VSSIO 32"),
448 	PINCTRL_PIN(258, "P PAD GND 24"),
449 	PINCTRL_PIN(259, "P PAD VDD 24"),
450 	PINCTRL_PIN(260, "PIO EMIF 1 D08"),
451 	PINCTRL_PIN(261, "PO EMIF 1 A08"),
452 	PINCTRL_PIN(262, "PIO EMIF 1 D07"),
453 	PINCTRL_PIN(263, "PO EMIF 1 A07"),
454 	PINCTRL_PIN(264, "P PAD VDDIO 33"),
455 	PINCTRL_PIN(265, "P PAD VSSIO 33"),
456 	PINCTRL_PIN(266, "PIO EMIF 1 D06"),
457 	PINCTRL_PIN(267, "PO EMIF 1 A06"),
458 	PINCTRL_PIN(268, "PIO EMIF 1 D05"),
459 	PINCTRL_PIN(269, "PO EMIF 1 A05"),
460 	PINCTRL_PIN(270, "P PAD VDDIO 34"),
461 	PINCTRL_PIN(271, "P PAD VSSIO 34"),
462 	PINCTRL_PIN(272, "PIO EMIF 1 D04"),
463 	PINCTRL_PIN(273, "PO EMIF 1 A04"),
464 	PINCTRL_PIN(274, "PIO EMIF 1 D03"),
465 	PINCTRL_PIN(275, "PO EMIF 1 A03"),
466 	PINCTRL_PIN(276, "P PAD VDDIO 35"),
467 	PINCTRL_PIN(277, "P PAD VSSIO 35"),
468 	PINCTRL_PIN(278, "P PAD GND 23"),
469 	PINCTRL_PIN(279, "P PAD VDD 23"),
470 	PINCTRL_PIN(280, "PIO EMIF 1 D02"),
471 	PINCTRL_PIN(281, "PO EMIF 1 A02"),
472 	PINCTRL_PIN(282, "PIO EMIF 1 D01"),
473 	PINCTRL_PIN(283, "PO EMIF 1 A01"),
474 	PINCTRL_PIN(284, "P PAD VDDIO 36"),
475 	PINCTRL_PIN(285, "P PAD VSSIO 36"),
476 	PINCTRL_PIN(286, "PIO EMIF 1 D00"),
477 	PINCTRL_PIN(287, "PO EMIF 1 BE1 N"),
478 	PINCTRL_PIN(288, "PO EMIF 1 BE0 N"),
479 	PINCTRL_PIN(289, "PO EMIF 1 ADV N"),
480 	PINCTRL_PIN(290, "P PAD VDDIO 37"),
481 	PINCTRL_PIN(291, "P PAD VSSIO 37"),
482 	PINCTRL_PIN(292, "PO EMIF 1 SD CKE0"),
483 	PINCTRL_PIN(293, "PO EMIF 1 OE N"),
484 	PINCTRL_PIN(294, "PO EMIF 1 WE N"),
485 	PINCTRL_PIN(295, "P PAD VDDIO 38"),
486 	PINCTRL_PIN(296, "P PAD VSSIO 38"),
487 	PINCTRL_PIN(297, "PO EMIF 1 CLK"),
488 	PINCTRL_PIN(298, "PIO EMIF 1 SD CLK"),
489 	PINCTRL_PIN(299, "P PAD VSSIO 45 (not bonded)"),
490 	PINCTRL_PIN(300, "P PAD VDDIO 42"),
491 	PINCTRL_PIN(301, "P PAD VSSIO 42"),
492 	PINCTRL_PIN(302, "P PAD GND 31"),
493 	PINCTRL_PIN(303, "P PAD VDD 31"),
494 	PINCTRL_PIN(304, "PI EMIF 1 RET CLK"),
495 	PINCTRL_PIN(305, "PI EMIF 1 WAIT N"),
496 	PINCTRL_PIN(306, "PI EMIF 1 NFIF READY"),
497 	PINCTRL_PIN(307, "PO EMIF 1 SD CKE1"),
498 	PINCTRL_PIN(308, "PO EMIF 1 CS3 N"),
499 	PINCTRL_PIN(309, "P PAD VDD 25"),
500 	PINCTRL_PIN(310, "P PAD GND 25"),
501 	PINCTRL_PIN(311, "P PAD VSSIO 39"),
502 	PINCTRL_PIN(312, "P PAD VDDIO 39"),
503 	PINCTRL_PIN(313, "PO EMIF 1 CS2 N"),
504 	PINCTRL_PIN(314, "PO EMIF 1 CS1 N"),
505 	PINCTRL_PIN(315, "PO EMIF 1 CS0 N"),
506 	PINCTRL_PIN(316, "PO ETM TRACE PKT0"),
507 	PINCTRL_PIN(317, "PO ETM TRACE PKT1"),
508 	PINCTRL_PIN(318, "PO ETM TRACE PKT2"),
509 	PINCTRL_PIN(319, "P PAD VDD 30"),
510 	PINCTRL_PIN(320, "P PAD GND 30"),
511 	PINCTRL_PIN(321, "P PAD VSSIO 44"),
512 	PINCTRL_PIN(322, "P PAD VDDIO 44"),
513 	PINCTRL_PIN(323, "PO ETM TRACE PKT3"),
514 	PINCTRL_PIN(324, "PO ETM TRACE PKT4"),
515 	PINCTRL_PIN(325, "PO ETM TRACE PKT5"),
516 	PINCTRL_PIN(326, "PO ETM TRACE PKT6"),
517 	PINCTRL_PIN(327, "PO ETM TRACE PKT7"),
518 	PINCTRL_PIN(328, "PO ETM PIPE STAT0"),
519 	PINCTRL_PIN(329, "P PAD VDD 26"),
520 	PINCTRL_PIN(330, "P PAD GND 26"),
521 	PINCTRL_PIN(331, "P PAD VSSIO 40"),
522 	PINCTRL_PIN(332, "P PAD VDDIO 40"),
523 	PINCTRL_PIN(333, "PO ETM PIPE STAT1"),
524 	PINCTRL_PIN(334, "PO ETM PIPE STAT2"),
525 	PINCTRL_PIN(335, "PO ETM TRACE CLK"),
526 	PINCTRL_PIN(336, "PO ETM TRACE SYNC"),
527 	PINCTRL_PIN(337, "PIO ACC GPIO 33"),
528 	PINCTRL_PIN(338, "PIO ACC GPIO 32"),
529 	PINCTRL_PIN(339, "PIO ACC GPIO 30"),
530 	PINCTRL_PIN(340, "PIO ACC GPIO 29"),
531 	PINCTRL_PIN(341, "P PAD VDDIO 17"),
532 	PINCTRL_PIN(342, "P PAD VSSIO 17"),
533 	PINCTRL_PIN(343, "P PAD GND 15"),
534 	PINCTRL_PIN(344, "P PAD VDD 15"),
535 	PINCTRL_PIN(345, "PIO ACC GPIO 28"),
536 	PINCTRL_PIN(346, "PIO ACC GPIO 27"),
537 	PINCTRL_PIN(347, "PIO ACC GPIO 16"),
538 	PINCTRL_PIN(348, "PI TAP TMS"),
539 	PINCTRL_PIN(349, "PI TAP TDI"),
540 	PINCTRL_PIN(350, "PO TAP TDO"),
541 	PINCTRL_PIN(351, "PI TAP RST N"),
542 	/* Pads along the left edge of the chip */
543 	PINCTRL_PIN(352, "PI EMU MODE 0"),
544 	PINCTRL_PIN(353, "PO TAP RET CLK"),
545 	PINCTRL_PIN(354, "PI TAP CLK"),
546 	PINCTRL_PIN(355, "PO EMIF 0 SD CS N"),
547 	PINCTRL_PIN(356, "PO EMIF 0 SD CAS N"),
548 	PINCTRL_PIN(357, "PO EMIF 0 SD WE N"),
549 	PINCTRL_PIN(358, "P PAD VDDIO 1"),
550 	PINCTRL_PIN(359, "P PAD VSSIO 1"),
551 	PINCTRL_PIN(360, "P PAD GND 1"),
552 	PINCTRL_PIN(361, "P PAD VDD 1"),
553 	PINCTRL_PIN(362, "PO EMIF 0 SD CKE"),
554 	PINCTRL_PIN(363, "PO EMIF 0 SD DQML"),
555 	PINCTRL_PIN(364, "PO EMIF 0 SD DQMU"),
556 	PINCTRL_PIN(365, "PO EMIF 0 SD RAS N"),
557 	PINCTRL_PIN(366, "PIO EMIF 0 D15"),
558 	PINCTRL_PIN(367, "PO EMIF 0 A15"),
559 	PINCTRL_PIN(368, "PIO EMIF 0 D14"),
560 	PINCTRL_PIN(369, "PO EMIF 0 A14"),
561 	PINCTRL_PIN(370, "PIO EMIF 0 D13"),
562 	PINCTRL_PIN(371, "PO EMIF 0 A13"),
563 	PINCTRL_PIN(372, "P PAD VDDIO 2"),
564 	PINCTRL_PIN(373, "P PAD VSSIO 2"),
565 	PINCTRL_PIN(374, "P PAD GND 2"),
566 	PINCTRL_PIN(375, "P PAD VDD 2"),
567 	PINCTRL_PIN(376, "PIO EMIF 0 D12"),
568 	PINCTRL_PIN(377, "PO EMIF 0 A12"),
569 	PINCTRL_PIN(378, "PIO EMIF 0 D11"),
570 	PINCTRL_PIN(379, "PO EMIF 0 A11"),
571 	PINCTRL_PIN(380, "PIO EMIF 0 D10"),
572 	PINCTRL_PIN(381, "PO EMIF 0 A10"),
573 	PINCTRL_PIN(382, "PIO EMIF 0 D09"),
574 	PINCTRL_PIN(383, "PO EMIF 0 A09"),
575 	PINCTRL_PIN(384, "PIO EMIF 0 D08"),
576 	PINCTRL_PIN(385, "PO EMIF 0 A08"),
577 	PINCTRL_PIN(386, "PIO EMIF 0 D07"),
578 	PINCTRL_PIN(387, "PO EMIF 0 A07"),
579 	PINCTRL_PIN(388, "P PAD VDDIO 3"),
580 	PINCTRL_PIN(389, "P PAD VSSIO 3"),
581 	PINCTRL_PIN(390, "P PAD GND 3"),
582 	PINCTRL_PIN(391, "P PAD VDD 3"),
583 	PINCTRL_PIN(392, "PO EFUSE RDOUT1"),
584 	PINCTRL_PIN(393, "PIO EMIF 0 D06"),
585 	PINCTRL_PIN(394, "PO EMIF 0 A06"),
586 	PINCTRL_PIN(395, "PIO EMIF 0 D05"),
587 	PINCTRL_PIN(396, "PO EMIF 0 A05"),
588 	PINCTRL_PIN(397, "PIO EMIF 0 D04"),
589 	PINCTRL_PIN(398, "PO EMIF 0 A04"),
590 	PINCTRL_PIN(399, "A PADS/A VDDCO1v82v5 GND 80U SF LIN VDDCO AF"),
591 	PINCTRL_PIN(400, "PWR VDDCO AF"),
592 	PINCTRL_PIN(401, "PWR EFUSE HV1"),
593 	PINCTRL_PIN(402, "P PAD VSSIO 4"),
594 	PINCTRL_PIN(403, "P PAD VDDIO 4"),
595 	PINCTRL_PIN(404, "P PAD GND 4"),
596 	PINCTRL_PIN(405, "P PAD VDD 4"),
597 	PINCTRL_PIN(406, "PIO EMIF 0 D03"),
598 	PINCTRL_PIN(407, "PO EMIF 0 A03"),
599 	PINCTRL_PIN(408, "PWR EFUSE HV2"),
600 	PINCTRL_PIN(409, "PWR EFUSE HV3"),
601 	PINCTRL_PIN(410, "PIO EMIF 0 D02"),
602 	PINCTRL_PIN(411, "PO EMIF 0 A02"),
603 	PINCTRL_PIN(412, "PIO EMIF 0 D01"),
604 	PINCTRL_PIN(413, "P PAD VDDIO 5"),
605 	PINCTRL_PIN(414, "P PAD VSSIO 5"),
606 	PINCTRL_PIN(415, "P PAD GND 5"),
607 	PINCTRL_PIN(416, "P PAD VDD 5"),
608 	PINCTRL_PIN(417, "PO EMIF 0 A01"),
609 	PINCTRL_PIN(418, "PIO EMIF 0 D00"),
610 	PINCTRL_PIN(419, "IF 0 SD CLK"),
611 	PINCTRL_PIN(420, "APP SPI CLK"),
612 	PINCTRL_PIN(421, "APP SPI DO"),
613 	PINCTRL_PIN(422, "APP SPI DI"),
614 	PINCTRL_PIN(423, "APP SPI CS0"),
615 	PINCTRL_PIN(424, "APP SPI CS1"),
616 	PINCTRL_PIN(425, "APP SPI CS2"),
617 	PINCTRL_PIN(426, "PIO APP GPIO 10"),
618 	PINCTRL_PIN(427, "P PAD VDDIO 41"),
619 	PINCTRL_PIN(428, "P PAD VSSIO 41"),
620 	PINCTRL_PIN(429, "P PAD GND 6"),
621 	PINCTRL_PIN(430, "P PAD VDD 6"),
622 	PINCTRL_PIN(431, "PIO ACC SDIO0 CMD"),
623 	PINCTRL_PIN(432, "PIO ACC SDIO0 CK"),
624 	PINCTRL_PIN(433, "PIO ACC SDIO0 D3"),
625 	PINCTRL_PIN(434, "PIO ACC SDIO0 D2"),
626 	PINCTRL_PIN(435, "PIO ACC SDIO0 D1"),
627 	PINCTRL_PIN(436, "PIO ACC SDIO0 D0"),
628 	PINCTRL_PIN(437, "PIO USB PU"),
629 	PINCTRL_PIN(438, "PIO USB SP"),
630 	PINCTRL_PIN(439, "PIO USB DAT VP"),
631 	PINCTRL_PIN(440, "PIO USB SE0 VM"),
632 	PINCTRL_PIN(441, "PIO USB OE"),
633 	PINCTRL_PIN(442, "PIO USB SUSP"),
634 	PINCTRL_PIN(443, "P PAD VSSIO 6"),
635 	PINCTRL_PIN(444, "P PAD VDDIO 6"),
636 	PINCTRL_PIN(445, "PIO USB PUEN"),
637 	PINCTRL_PIN(446, "PIO ACC UART0 RX"),
638 	PINCTRL_PIN(447, "PIO ACC UART0 TX"),
639 	PINCTRL_PIN(448, "PIO ACC UART0 CTS"),
640 	PINCTRL_PIN(449, "PIO ACC UART0 RTS"),
641 	PINCTRL_PIN(450, "PIO ACC UART3 RX"),
642 	PINCTRL_PIN(451, "PIO ACC UART3 TX"),
643 	PINCTRL_PIN(452, "PIO ACC UART3 CTS"),
644 	PINCTRL_PIN(453, "PIO ACC UART3 RTS"),
645 	PINCTRL_PIN(454, "PIO ACC IRDA TX"),
646 	PINCTRL_PIN(455, "P PAD VDDIO 7"),
647 	PINCTRL_PIN(456, "P PAD VSSIO 7"),
648 	PINCTRL_PIN(457, "P PAD GND 7"),
649 	PINCTRL_PIN(458, "P PAD VDD 7"),
650 	PINCTRL_PIN(459, "PIO ACC IRDA RX"),
651 	PINCTRL_PIN(460, "PIO ACC PCM I2S CLK"),
652 	PINCTRL_PIN(461, "PIO ACC PCM I2S WS"),
653 	PINCTRL_PIN(462, "PIO ACC PCM I2S DATA A"),
654 	PINCTRL_PIN(463, "PIO ACC PCM I2S DATA B"),
655 	PINCTRL_PIN(464, "PO SIM CLK"),
656 	PINCTRL_PIN(465, "PIO ACC IRDA SD"),
657 	PINCTRL_PIN(466, "PIO SIM DATA"),
658 };
659 
660 /**
661  * @dev: a pointer back to containing device
662  * @virtbase: the offset to the controller in virtual memory
663  */
664 struct u300_pmx {
665 	struct device *dev;
666 	struct pinctrl_dev *pctl;
667 	void __iomem *virtbase;
668 };
669 
670 /**
671  * u300_pmx_registers - the array of registers read/written for each pinmux
672  * shunt setting
673  */
674 static const u32 u300_pmx_registers[] = {
675 	U300_SYSCON_PMC1LR,
676 	U300_SYSCON_PMC1HR,
677 	U300_SYSCON_PMC2R,
678 	U300_SYSCON_PMC3R,
679 	U300_SYSCON_PMC4R,
680 };
681 
682 /**
683  * struct u300_pin_group - describes a U300 pin group
684  * @name: the name of this specific pin group
685  * @pins: an array of discrete physical pins used in this group, taken
686  *	from the driver-local pin enumeration space
687  * @num_pins: the number of pins in this group array, i.e. the number of
688  *	elements in .pins so we can iterate over that array
689  */
690 struct u300_pin_group {
691 	const char *name;
692 	const unsigned int *pins;
693 	const unsigned num_pins;
694 };
695 
696 /**
697  * struct pmx_onmask - mask bits to enable/disable padmux
698  * @mask: mask bits to disable
699  * @val: mask bits to enable
700  *
701  * onmask lazy dog:
702  * onmask = {
703  *   {"PMC1LR" mask, "PMC1LR" value},
704  *   {"PMC1HR" mask, "PMC1HR" value},
705  *   {"PMC2R"  mask, "PMC2R"  value},
706  *   {"PMC3R"  mask, "PMC3R"  value},
707  *   {"PMC4R"  mask, "PMC4R"  value}
708  * }
709  */
710 struct u300_pmx_mask {
711 	u16 mask;
712 	u16 bits;
713 };
714 
715 /* The chip power pins are VDD, GND, VDDIO and VSSIO */
716 static const unsigned power_pins[] = { 0, 1, 3, 31, 46, 47, 49, 50, 61, 62, 63,
717 	64, 78, 79, 80, 81, 92, 93, 94, 95, 101, 102, 103, 104, 115, 116, 117,
718 	118, 130, 131, 132, 133, 145, 146, 147, 148, 159, 160, 172, 173, 174,
719 	175, 187, 188, 189, 190, 201, 202, 211, 212, 213, 214, 215, 218, 223,
720 	224, 225, 226, 231, 232, 237, 238, 239, 240, 245, 246, 251, 252, 256,
721 	257, 258, 259, 264, 265, 270, 271, 276, 277, 278, 279, 284, 285, 290,
722 	291, 295, 296, 299, 300, 301, 302, 303, 309, 310, 311, 312, 319, 320,
723 	321, 322, 329, 330, 331, 332, 341, 342, 343, 344, 358, 359, 360, 361,
724 	372, 373, 374, 375, 388, 389, 390, 391, 402, 403, 404, 405, 413, 414,
725 	415, 416, 427, 428, 429, 430, 443, 444, 455, 456, 457, 458 };
726 static const unsigned emif0_pins[] = { 355, 356, 357, 362, 363, 364, 365, 366,
727 	367, 368, 369, 370, 371, 376, 377, 378, 379, 380, 381, 382, 383, 384,
728 	385, 386, 387, 393, 394, 395, 396, 397, 398, 406, 407, 410, 411, 412,
729 	417, 418 };
730 static const unsigned emif1_pins[] = { 216, 217, 219, 220, 221, 222, 227, 228,
731 	229, 230, 233, 234, 235, 236, 241, 242, 243, 244, 247, 248, 249, 250,
732 	253, 254, 255, 260, 261, 262, 263, 266, 267, 268, 269, 272, 273, 274,
733 	275, 280, 281, 282, 283, 286, 287, 288, 289, 292, 293, 294, 297, 298,
734 	304, 305, 306, 307, 308, 313, 314, 315 };
735 static const unsigned uart0_pins[] = { 134, 135, 136, 137 };
736 static const unsigned mmc0_pins[] = { 166, 167, 168, 169, 170, 171, 176, 177 };
737 static const unsigned spi0_pins[] = { 420, 421, 422, 423, 424, 425 };
738 
739 static const struct u300_pmx_mask emif0_mask[] = {
740 	{0, 0},
741 	{0, 0},
742 	{0, 0},
743 	{0, 0},
744 	{0, 0},
745 };
746 
747 static const struct u300_pmx_mask emif1_mask[] = {
748 	/*
749 	 * This connects the SDRAM to CS2 and a NAND flash to
750 	 * CS0 on the EMIF.
751 	 */
752 	{
753 		U300_SYSCON_PMC1LR_EMIF_1_CS2_MASK |
754 		U300_SYSCON_PMC1LR_EMIF_1_CS1_MASK |
755 		U300_SYSCON_PMC1LR_EMIF_1_CS0_MASK |
756 		U300_SYSCON_PMC1LR_EMIF_1_MASK,
757 		U300_SYSCON_PMC1LR_EMIF_1_CS2_SDRAM |
758 		U300_SYSCON_PMC1LR_EMIF_1_CS1_STATIC |
759 		U300_SYSCON_PMC1LR_EMIF_1_CS0_NFIF |
760 		U300_SYSCON_PMC1LR_EMIF_1_SDRAM0
761 	},
762 	{0, 0},
763 	{0, 0},
764 	{0, 0},
765 	{0, 0},
766 };
767 
768 static const struct u300_pmx_mask uart0_mask[] = {
769 	{0, 0},
770 	{
771 		U300_SYSCON_PMC1HR_APP_UART0_1_MASK |
772 		U300_SYSCON_PMC1HR_APP_UART0_2_MASK,
773 		U300_SYSCON_PMC1HR_APP_UART0_1_UART0 |
774 		U300_SYSCON_PMC1HR_APP_UART0_2_UART0
775 	},
776 	{0, 0},
777 	{0, 0},
778 	{0, 0},
779 };
780 
781 static const struct u300_pmx_mask mmc0_mask[] = {
782 	{ U300_SYSCON_PMC1LR_MMCSD_MASK, U300_SYSCON_PMC1LR_MMCSD_MMCSD},
783 	{0, 0},
784 	{0, 0},
785 	{0, 0},
786 	{ U300_SYSCON_PMC4R_APP_MISC_12_MASK,
787 	  U300_SYSCON_PMC4R_APP_MISC_12_APP_GPIO }
788 };
789 
790 static const struct u300_pmx_mask spi0_mask[] = {
791 	{0, 0},
792 	{
793 		U300_SYSCON_PMC1HR_APP_SPI_2_MASK |
794 		U300_SYSCON_PMC1HR_APP_SPI_CS_1_MASK |
795 		U300_SYSCON_PMC1HR_APP_SPI_CS_2_MASK,
796 		U300_SYSCON_PMC1HR_APP_SPI_2_SPI |
797 		U300_SYSCON_PMC1HR_APP_SPI_CS_1_SPI |
798 		U300_SYSCON_PMC1HR_APP_SPI_CS_2_SPI
799 	},
800 	{0, 0},
801 	{0, 0},
802 	{0, 0}
803 };
804 
805 static const struct u300_pin_group u300_pin_groups[] = {
806 	{
807 		.name = "powergrp",
808 		.pins = power_pins,
809 		.num_pins = ARRAY_SIZE(power_pins),
810 	},
811 	{
812 		.name = "emif0grp",
813 		.pins = emif0_pins,
814 		.num_pins = ARRAY_SIZE(emif0_pins),
815 	},
816 	{
817 		.name = "emif1grp",
818 		.pins = emif1_pins,
819 		.num_pins = ARRAY_SIZE(emif1_pins),
820 	},
821 	{
822 		.name = "uart0grp",
823 		.pins = uart0_pins,
824 		.num_pins = ARRAY_SIZE(uart0_pins),
825 	},
826 	{
827 		.name = "mmc0grp",
828 		.pins = mmc0_pins,
829 		.num_pins = ARRAY_SIZE(mmc0_pins),
830 	},
831 	{
832 		.name = "spi0grp",
833 		.pins = spi0_pins,
834 		.num_pins = ARRAY_SIZE(spi0_pins),
835 	},
836 };
837 
u300_get_groups_count(struct pinctrl_dev * pctldev)838 static int u300_get_groups_count(struct pinctrl_dev *pctldev)
839 {
840 	return ARRAY_SIZE(u300_pin_groups);
841 }
842 
u300_get_group_name(struct pinctrl_dev * pctldev,unsigned selector)843 static const char *u300_get_group_name(struct pinctrl_dev *pctldev,
844 				       unsigned selector)
845 {
846 	return u300_pin_groups[selector].name;
847 }
848 
u300_get_group_pins(struct pinctrl_dev * pctldev,unsigned selector,const unsigned ** pins,unsigned * num_pins)849 static int u300_get_group_pins(struct pinctrl_dev *pctldev, unsigned selector,
850 			       const unsigned **pins,
851 			       unsigned *num_pins)
852 {
853 	*pins = u300_pin_groups[selector].pins;
854 	*num_pins = u300_pin_groups[selector].num_pins;
855 	return 0;
856 }
857 
u300_pin_dbg_show(struct pinctrl_dev * pctldev,struct seq_file * s,unsigned offset)858 static void u300_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s,
859 		   unsigned offset)
860 {
861 	seq_printf(s, " " DRIVER_NAME);
862 }
863 
864 static const struct pinctrl_ops u300_pctrl_ops = {
865 	.get_groups_count = u300_get_groups_count,
866 	.get_group_name = u300_get_group_name,
867 	.get_group_pins = u300_get_group_pins,
868 	.pin_dbg_show = u300_pin_dbg_show,
869 };
870 
871 /*
872  * Here we define the available functions and their corresponding pin groups
873  */
874 
875 /**
876  * struct u300_pmx_func - describes U300 pinmux functions
877  * @name: the name of this specific function
878  * @groups: corresponding pin groups
879  * @onmask: bits to set to enable this when doing pin muxing
880  */
881 struct u300_pmx_func {
882 	const char *name;
883 	const char * const *groups;
884 	const unsigned num_groups;
885 	const struct u300_pmx_mask *mask;
886 };
887 
888 static const char * const powergrps[] = { "powergrp" };
889 static const char * const emif0grps[] = { "emif0grp" };
890 static const char * const emif1grps[] = { "emif1grp" };
891 static const char * const uart0grps[] = { "uart0grp" };
892 static const char * const mmc0grps[] = { "mmc0grp" };
893 static const char * const spi0grps[] = { "spi0grp" };
894 
895 static const struct u300_pmx_func u300_pmx_functions[] = {
896 	{
897 		.name = "power",
898 		.groups = powergrps,
899 		.num_groups = ARRAY_SIZE(powergrps),
900 		/* Mask is N/A */
901 	},
902 	{
903 		.name = "emif0",
904 		.groups = emif0grps,
905 		.num_groups = ARRAY_SIZE(emif0grps),
906 		.mask = emif0_mask,
907 	},
908 	{
909 		.name = "emif1",
910 		.groups = emif1grps,
911 		.num_groups = ARRAY_SIZE(emif1grps),
912 		.mask = emif1_mask,
913 	},
914 	{
915 		.name = "uart0",
916 		.groups = uart0grps,
917 		.num_groups = ARRAY_SIZE(uart0grps),
918 		.mask = uart0_mask,
919 	},
920 	{
921 		.name = "mmc0",
922 		.groups = mmc0grps,
923 		.num_groups = ARRAY_SIZE(mmc0grps),
924 		.mask = mmc0_mask,
925 	},
926 	{
927 		.name = "spi0",
928 		.groups = spi0grps,
929 		.num_groups = ARRAY_SIZE(spi0grps),
930 		.mask = spi0_mask,
931 	},
932 };
933 
u300_pmx_endisable(struct u300_pmx * upmx,unsigned selector,bool enable)934 static void u300_pmx_endisable(struct u300_pmx *upmx, unsigned selector,
935 			       bool enable)
936 {
937 	u16 regval, val, mask;
938 	int i;
939 	const struct u300_pmx_mask *upmx_mask;
940 
941 	upmx_mask = u300_pmx_functions[selector].mask;
942 	for (i = 0; i < ARRAY_SIZE(u300_pmx_registers); i++) {
943 		if (enable)
944 			val = upmx_mask->bits;
945 		else
946 			val = 0;
947 
948 		mask = upmx_mask->mask;
949 		if (mask != 0) {
950 			regval = readw(upmx->virtbase + u300_pmx_registers[i]);
951 			regval &= ~mask;
952 			regval |= val;
953 			writew(regval, upmx->virtbase + u300_pmx_registers[i]);
954 		}
955 		upmx_mask++;
956 	}
957 }
958 
u300_pmx_set_mux(struct pinctrl_dev * pctldev,unsigned selector,unsigned group)959 static int u300_pmx_set_mux(struct pinctrl_dev *pctldev, unsigned selector,
960 			    unsigned group)
961 {
962 	struct u300_pmx *upmx;
963 
964 	/* There is nothing to do with the power pins */
965 	if (selector == 0)
966 		return 0;
967 
968 	upmx = pinctrl_dev_get_drvdata(pctldev);
969 	u300_pmx_endisable(upmx, selector, true);
970 
971 	return 0;
972 }
973 
u300_pmx_get_funcs_count(struct pinctrl_dev * pctldev)974 static int u300_pmx_get_funcs_count(struct pinctrl_dev *pctldev)
975 {
976 	return ARRAY_SIZE(u300_pmx_functions);
977 }
978 
u300_pmx_get_func_name(struct pinctrl_dev * pctldev,unsigned selector)979 static const char *u300_pmx_get_func_name(struct pinctrl_dev *pctldev,
980 					  unsigned selector)
981 {
982 	return u300_pmx_functions[selector].name;
983 }
984 
u300_pmx_get_groups(struct pinctrl_dev * pctldev,unsigned selector,const char * const ** groups,unsigned * const num_groups)985 static int u300_pmx_get_groups(struct pinctrl_dev *pctldev, unsigned selector,
986 			       const char * const **groups,
987 			       unsigned * const num_groups)
988 {
989 	*groups = u300_pmx_functions[selector].groups;
990 	*num_groups = u300_pmx_functions[selector].num_groups;
991 	return 0;
992 }
993 
994 static const struct pinmux_ops u300_pmx_ops = {
995 	.get_functions_count = u300_pmx_get_funcs_count,
996 	.get_function_name = u300_pmx_get_func_name,
997 	.get_function_groups = u300_pmx_get_groups,
998 	.set_mux = u300_pmx_set_mux,
999 };
1000 
u300_pin_config_get(struct pinctrl_dev * pctldev,unsigned pin,unsigned long * config)1001 static int u300_pin_config_get(struct pinctrl_dev *pctldev, unsigned pin,
1002 			       unsigned long *config)
1003 {
1004 	struct pinctrl_gpio_range *range =
1005 		pinctrl_find_gpio_range_from_pin(pctldev, pin);
1006 
1007 	/* We get config for those pins we CAN get it for and that's it */
1008 	if (!range)
1009 		return -ENOTSUPP;
1010 
1011 	return u300_gpio_config_get(range->gc,
1012 				    (pin - range->pin_base + range->base),
1013 				    config);
1014 }
1015 
u300_pin_config_set(struct pinctrl_dev * pctldev,unsigned pin,unsigned long * configs,unsigned num_configs)1016 static int u300_pin_config_set(struct pinctrl_dev *pctldev, unsigned pin,
1017 			       unsigned long *configs, unsigned num_configs)
1018 {
1019 	struct pinctrl_gpio_range *range =
1020 		pinctrl_find_gpio_range_from_pin(pctldev, pin);
1021 	int ret, i;
1022 
1023 	if (!range)
1024 		return -EINVAL;
1025 
1026 	for (i = 0; i < num_configs; i++) {
1027 		/* Note: none of these configurations take any argument */
1028 		ret = u300_gpio_config_set(range->gc,
1029 			(pin - range->pin_base + range->base),
1030 			pinconf_to_config_param(configs[i]));
1031 		if (ret)
1032 			return ret;
1033 	} /* for each config */
1034 
1035 	return 0;
1036 }
1037 
1038 static const struct pinconf_ops u300_pconf_ops = {
1039 	.is_generic = true,
1040 	.pin_config_get = u300_pin_config_get,
1041 	.pin_config_set = u300_pin_config_set,
1042 };
1043 
1044 static struct pinctrl_desc u300_pmx_desc = {
1045 	.name = DRIVER_NAME,
1046 	.pins = u300_pads,
1047 	.npins = ARRAY_SIZE(u300_pads),
1048 	.pctlops = &u300_pctrl_ops,
1049 	.pmxops = &u300_pmx_ops,
1050 	.confops = &u300_pconf_ops,
1051 	.owner = THIS_MODULE,
1052 };
1053 
u300_pmx_probe(struct platform_device * pdev)1054 static int u300_pmx_probe(struct platform_device *pdev)
1055 {
1056 	struct u300_pmx *upmx;
1057 	struct resource *res;
1058 
1059 	/* Create state holders etc for this driver */
1060 	upmx = devm_kzalloc(&pdev->dev, sizeof(*upmx), GFP_KERNEL);
1061 	if (!upmx)
1062 		return -ENOMEM;
1063 
1064 	upmx->dev = &pdev->dev;
1065 
1066 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1067 	upmx->virtbase = devm_ioremap_resource(&pdev->dev, res);
1068 	if (IS_ERR(upmx->virtbase))
1069 		return PTR_ERR(upmx->virtbase);
1070 
1071 	upmx->pctl = devm_pinctrl_register(&pdev->dev, &u300_pmx_desc, upmx);
1072 	if (IS_ERR(upmx->pctl)) {
1073 		dev_err(&pdev->dev, "could not register U300 pinmux driver\n");
1074 		return PTR_ERR(upmx->pctl);
1075 	}
1076 
1077 	platform_set_drvdata(pdev, upmx);
1078 
1079 	dev_info(&pdev->dev, "initialized U300 pin control driver\n");
1080 
1081 	return 0;
1082 }
1083 
1084 static const struct of_device_id u300_pinctrl_match[] = {
1085 	{ .compatible = "stericsson,pinctrl-u300" },
1086 	{},
1087 };
1088 
1089 
1090 static struct platform_driver u300_pmx_driver = {
1091 	.driver = {
1092 		.name = DRIVER_NAME,
1093 		.of_match_table = u300_pinctrl_match,
1094 	},
1095 	.probe = u300_pmx_probe,
1096 };
1097 
u300_pmx_init(void)1098 static int __init u300_pmx_init(void)
1099 {
1100 	return platform_driver_register(&u300_pmx_driver);
1101 }
1102 arch_initcall(u300_pmx_init);
1103 
u300_pmx_exit(void)1104 static void __exit u300_pmx_exit(void)
1105 {
1106 	platform_driver_unregister(&u300_pmx_driver);
1107 }
1108 module_exit(u300_pmx_exit);
1109 
1110 MODULE_AUTHOR("Linus Walleij <linus.walleij@linaro.org>");
1111 MODULE_DESCRIPTION("U300 pin control driver");
1112 MODULE_LICENSE("GPL v2");
1113