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