Commit f90f54b3f3c4d1c9168d5f8e97c6ac5b9ad25f5e

Authored by Bill Pemberton
Committed by Greg Kroah-Hartman
1 parent 84db00ba1e

pinctrl: remove use of __devexit

CONFIG_HOTPLUG is going away as an option so __devexit is no
longer needed.

Signed-off-by: Bill Pemberton <wfp5p@virginia.edu>
Cc: Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>
Cc: Stephen Warren <swarren@wwwdotorg.org>
Cc: Viresh Kumar <viresh.linux@gmail.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Showing 16 changed files with 16 additions and 16 deletions Inline Diff

drivers/pinctrl/pinctrl-bcm2835.c
1 /* 1 /*
2 * Driver for Broadcom BCM2835 GPIO unit (pinctrl + GPIO) 2 * Driver for Broadcom BCM2835 GPIO unit (pinctrl + GPIO)
3 * 3 *
4 * Copyright (C) 2012 Chris Boot, Simon Arlott, Stephen Warren 4 * Copyright (C) 2012 Chris Boot, Simon Arlott, Stephen Warren
5 * 5 *
6 * This driver is inspired by: 6 * This driver is inspired by:
7 * pinctrl-nomadik.c, please see original file for copyright information 7 * pinctrl-nomadik.c, please see original file for copyright information
8 * pinctrl-tegra.c, please see original file for copyright information 8 * pinctrl-tegra.c, please see original file for copyright information
9 * 9 *
10 * This program is free software; you can redistribute it and/or modify 10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by 11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or 12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version. 13 * (at your option) any later version.
14 * 14 *
15 * This program is distributed in the hope that it will be useful, 15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details. 18 * GNU General Public License for more details.
19 */ 19 */
20 20
21 #include <linux/bitmap.h> 21 #include <linux/bitmap.h>
22 #include <linux/bug.h> 22 #include <linux/bug.h>
23 #include <linux/delay.h> 23 #include <linux/delay.h>
24 #include <linux/device.h> 24 #include <linux/device.h>
25 #include <linux/err.h> 25 #include <linux/err.h>
26 #include <linux/gpio.h> 26 #include <linux/gpio.h>
27 #include <linux/interrupt.h> 27 #include <linux/interrupt.h>
28 #include <linux/io.h> 28 #include <linux/io.h>
29 #include <linux/irq.h> 29 #include <linux/irq.h>
30 #include <linux/irqdesc.h> 30 #include <linux/irqdesc.h>
31 #include <linux/irqdomain.h> 31 #include <linux/irqdomain.h>
32 #include <linux/module.h> 32 #include <linux/module.h>
33 #include <linux/of_address.h> 33 #include <linux/of_address.h>
34 #include <linux/of.h> 34 #include <linux/of.h>
35 #include <linux/of_irq.h> 35 #include <linux/of_irq.h>
36 #include <linux/pinctrl/consumer.h> 36 #include <linux/pinctrl/consumer.h>
37 #include <linux/pinctrl/machine.h> 37 #include <linux/pinctrl/machine.h>
38 #include <linux/pinctrl/pinconf.h> 38 #include <linux/pinctrl/pinconf.h>
39 #include <linux/pinctrl/pinctrl.h> 39 #include <linux/pinctrl/pinctrl.h>
40 #include <linux/pinctrl/pinmux.h> 40 #include <linux/pinctrl/pinmux.h>
41 #include <linux/platform_device.h> 41 #include <linux/platform_device.h>
42 #include <linux/seq_file.h> 42 #include <linux/seq_file.h>
43 #include <linux/slab.h> 43 #include <linux/slab.h>
44 #include <linux/spinlock.h> 44 #include <linux/spinlock.h>
45 #include <linux/types.h> 45 #include <linux/types.h>
46 46
47 #define MODULE_NAME "pinctrl-bcm2835" 47 #define MODULE_NAME "pinctrl-bcm2835"
48 #define BCM2835_NUM_GPIOS 54 48 #define BCM2835_NUM_GPIOS 54
49 #define BCM2835_NUM_BANKS 2 49 #define BCM2835_NUM_BANKS 2
50 50
51 #define BCM2835_PIN_BITMAP_SZ \ 51 #define BCM2835_PIN_BITMAP_SZ \
52 DIV_ROUND_UP(BCM2835_NUM_GPIOS, sizeof(unsigned long) * 8) 52 DIV_ROUND_UP(BCM2835_NUM_GPIOS, sizeof(unsigned long) * 8)
53 53
54 /* GPIO register offsets */ 54 /* GPIO register offsets */
55 #define GPFSEL0 0x0 /* Function Select */ 55 #define GPFSEL0 0x0 /* Function Select */
56 #define GPSET0 0x1c /* Pin Output Set */ 56 #define GPSET0 0x1c /* Pin Output Set */
57 #define GPCLR0 0x28 /* Pin Output Clear */ 57 #define GPCLR0 0x28 /* Pin Output Clear */
58 #define GPLEV0 0x34 /* Pin Level */ 58 #define GPLEV0 0x34 /* Pin Level */
59 #define GPEDS0 0x40 /* Pin Event Detect Status */ 59 #define GPEDS0 0x40 /* Pin Event Detect Status */
60 #define GPREN0 0x4c /* Pin Rising Edge Detect Enable */ 60 #define GPREN0 0x4c /* Pin Rising Edge Detect Enable */
61 #define GPFEN0 0x58 /* Pin Falling Edge Detect Enable */ 61 #define GPFEN0 0x58 /* Pin Falling Edge Detect Enable */
62 #define GPHEN0 0x64 /* Pin High Detect Enable */ 62 #define GPHEN0 0x64 /* Pin High Detect Enable */
63 #define GPLEN0 0x70 /* Pin Low Detect Enable */ 63 #define GPLEN0 0x70 /* Pin Low Detect Enable */
64 #define GPAREN0 0x7c /* Pin Async Rising Edge Detect */ 64 #define GPAREN0 0x7c /* Pin Async Rising Edge Detect */
65 #define GPAFEN0 0x88 /* Pin Async Falling Edge Detect */ 65 #define GPAFEN0 0x88 /* Pin Async Falling Edge Detect */
66 #define GPPUD 0x94 /* Pin Pull-up/down Enable */ 66 #define GPPUD 0x94 /* Pin Pull-up/down Enable */
67 #define GPPUDCLK0 0x98 /* Pin Pull-up/down Enable Clock */ 67 #define GPPUDCLK0 0x98 /* Pin Pull-up/down Enable Clock */
68 68
69 #define FSEL_REG(p) (GPFSEL0 + (((p) / 10) * 4)) 69 #define FSEL_REG(p) (GPFSEL0 + (((p) / 10) * 4))
70 #define FSEL_SHIFT(p) (((p) % 10) * 3) 70 #define FSEL_SHIFT(p) (((p) % 10) * 3)
71 #define GPIO_REG_OFFSET(p) ((p) / 32) 71 #define GPIO_REG_OFFSET(p) ((p) / 32)
72 #define GPIO_REG_SHIFT(p) ((p) % 32) 72 #define GPIO_REG_SHIFT(p) ((p) % 32)
73 73
74 enum bcm2835_pinconf_param { 74 enum bcm2835_pinconf_param {
75 /* argument: bcm2835_pinconf_pull */ 75 /* argument: bcm2835_pinconf_pull */
76 BCM2835_PINCONF_PARAM_PULL, 76 BCM2835_PINCONF_PARAM_PULL,
77 }; 77 };
78 78
79 enum bcm2835_pinconf_pull { 79 enum bcm2835_pinconf_pull {
80 BCM2835_PINCONFIG_PULL_NONE, 80 BCM2835_PINCONFIG_PULL_NONE,
81 BCM2835_PINCONFIG_PULL_DOWN, 81 BCM2835_PINCONFIG_PULL_DOWN,
82 BCM2835_PINCONFIG_PULL_UP, 82 BCM2835_PINCONFIG_PULL_UP,
83 }; 83 };
84 84
85 #define BCM2835_PINCONF_PACK(_param_, _arg_) ((_param_) << 16 | (_arg_)) 85 #define BCM2835_PINCONF_PACK(_param_, _arg_) ((_param_) << 16 | (_arg_))
86 #define BCM2835_PINCONF_UNPACK_PARAM(_conf_) ((_conf_) >> 16) 86 #define BCM2835_PINCONF_UNPACK_PARAM(_conf_) ((_conf_) >> 16)
87 #define BCM2835_PINCONF_UNPACK_ARG(_conf_) ((_conf_) & 0xffff) 87 #define BCM2835_PINCONF_UNPACK_ARG(_conf_) ((_conf_) & 0xffff)
88 88
89 struct bcm2835_gpio_irqdata { 89 struct bcm2835_gpio_irqdata {
90 struct bcm2835_pinctrl *pc; 90 struct bcm2835_pinctrl *pc;
91 int bank; 91 int bank;
92 }; 92 };
93 93
94 struct bcm2835_pinctrl { 94 struct bcm2835_pinctrl {
95 struct device *dev; 95 struct device *dev;
96 void __iomem *base; 96 void __iomem *base;
97 int irq[BCM2835_NUM_BANKS]; 97 int irq[BCM2835_NUM_BANKS];
98 98
99 /* note: locking assumes each bank will have its own unsigned long */ 99 /* note: locking assumes each bank will have its own unsigned long */
100 unsigned long enabled_irq_map[BCM2835_NUM_BANKS]; 100 unsigned long enabled_irq_map[BCM2835_NUM_BANKS];
101 unsigned int irq_type[BCM2835_NUM_GPIOS]; 101 unsigned int irq_type[BCM2835_NUM_GPIOS];
102 102
103 struct pinctrl_dev *pctl_dev; 103 struct pinctrl_dev *pctl_dev;
104 struct irq_domain *irq_domain; 104 struct irq_domain *irq_domain;
105 struct gpio_chip gpio_chip; 105 struct gpio_chip gpio_chip;
106 struct pinctrl_gpio_range gpio_range; 106 struct pinctrl_gpio_range gpio_range;
107 107
108 struct bcm2835_gpio_irqdata irq_data[BCM2835_NUM_BANKS]; 108 struct bcm2835_gpio_irqdata irq_data[BCM2835_NUM_BANKS];
109 spinlock_t irq_lock[BCM2835_NUM_BANKS]; 109 spinlock_t irq_lock[BCM2835_NUM_BANKS];
110 }; 110 };
111 111
112 static struct lock_class_key gpio_lock_class; 112 static struct lock_class_key gpio_lock_class;
113 113
114 /* pins are just named GPIO0..GPIO53 */ 114 /* pins are just named GPIO0..GPIO53 */
115 #define BCM2835_GPIO_PIN(a) PINCTRL_PIN(a, "gpio" #a) 115 #define BCM2835_GPIO_PIN(a) PINCTRL_PIN(a, "gpio" #a)
116 struct pinctrl_pin_desc bcm2835_gpio_pins[] = { 116 struct pinctrl_pin_desc bcm2835_gpio_pins[] = {
117 BCM2835_GPIO_PIN(0), 117 BCM2835_GPIO_PIN(0),
118 BCM2835_GPIO_PIN(1), 118 BCM2835_GPIO_PIN(1),
119 BCM2835_GPIO_PIN(2), 119 BCM2835_GPIO_PIN(2),
120 BCM2835_GPIO_PIN(3), 120 BCM2835_GPIO_PIN(3),
121 BCM2835_GPIO_PIN(4), 121 BCM2835_GPIO_PIN(4),
122 BCM2835_GPIO_PIN(5), 122 BCM2835_GPIO_PIN(5),
123 BCM2835_GPIO_PIN(6), 123 BCM2835_GPIO_PIN(6),
124 BCM2835_GPIO_PIN(7), 124 BCM2835_GPIO_PIN(7),
125 BCM2835_GPIO_PIN(8), 125 BCM2835_GPIO_PIN(8),
126 BCM2835_GPIO_PIN(9), 126 BCM2835_GPIO_PIN(9),
127 BCM2835_GPIO_PIN(10), 127 BCM2835_GPIO_PIN(10),
128 BCM2835_GPIO_PIN(11), 128 BCM2835_GPIO_PIN(11),
129 BCM2835_GPIO_PIN(12), 129 BCM2835_GPIO_PIN(12),
130 BCM2835_GPIO_PIN(13), 130 BCM2835_GPIO_PIN(13),
131 BCM2835_GPIO_PIN(14), 131 BCM2835_GPIO_PIN(14),
132 BCM2835_GPIO_PIN(15), 132 BCM2835_GPIO_PIN(15),
133 BCM2835_GPIO_PIN(16), 133 BCM2835_GPIO_PIN(16),
134 BCM2835_GPIO_PIN(17), 134 BCM2835_GPIO_PIN(17),
135 BCM2835_GPIO_PIN(18), 135 BCM2835_GPIO_PIN(18),
136 BCM2835_GPIO_PIN(19), 136 BCM2835_GPIO_PIN(19),
137 BCM2835_GPIO_PIN(20), 137 BCM2835_GPIO_PIN(20),
138 BCM2835_GPIO_PIN(21), 138 BCM2835_GPIO_PIN(21),
139 BCM2835_GPIO_PIN(22), 139 BCM2835_GPIO_PIN(22),
140 BCM2835_GPIO_PIN(23), 140 BCM2835_GPIO_PIN(23),
141 BCM2835_GPIO_PIN(24), 141 BCM2835_GPIO_PIN(24),
142 BCM2835_GPIO_PIN(25), 142 BCM2835_GPIO_PIN(25),
143 BCM2835_GPIO_PIN(26), 143 BCM2835_GPIO_PIN(26),
144 BCM2835_GPIO_PIN(27), 144 BCM2835_GPIO_PIN(27),
145 BCM2835_GPIO_PIN(28), 145 BCM2835_GPIO_PIN(28),
146 BCM2835_GPIO_PIN(29), 146 BCM2835_GPIO_PIN(29),
147 BCM2835_GPIO_PIN(30), 147 BCM2835_GPIO_PIN(30),
148 BCM2835_GPIO_PIN(31), 148 BCM2835_GPIO_PIN(31),
149 BCM2835_GPIO_PIN(32), 149 BCM2835_GPIO_PIN(32),
150 BCM2835_GPIO_PIN(33), 150 BCM2835_GPIO_PIN(33),
151 BCM2835_GPIO_PIN(34), 151 BCM2835_GPIO_PIN(34),
152 BCM2835_GPIO_PIN(35), 152 BCM2835_GPIO_PIN(35),
153 BCM2835_GPIO_PIN(36), 153 BCM2835_GPIO_PIN(36),
154 BCM2835_GPIO_PIN(37), 154 BCM2835_GPIO_PIN(37),
155 BCM2835_GPIO_PIN(38), 155 BCM2835_GPIO_PIN(38),
156 BCM2835_GPIO_PIN(39), 156 BCM2835_GPIO_PIN(39),
157 BCM2835_GPIO_PIN(40), 157 BCM2835_GPIO_PIN(40),
158 BCM2835_GPIO_PIN(41), 158 BCM2835_GPIO_PIN(41),
159 BCM2835_GPIO_PIN(42), 159 BCM2835_GPIO_PIN(42),
160 BCM2835_GPIO_PIN(43), 160 BCM2835_GPIO_PIN(43),
161 BCM2835_GPIO_PIN(44), 161 BCM2835_GPIO_PIN(44),
162 BCM2835_GPIO_PIN(45), 162 BCM2835_GPIO_PIN(45),
163 BCM2835_GPIO_PIN(46), 163 BCM2835_GPIO_PIN(46),
164 BCM2835_GPIO_PIN(47), 164 BCM2835_GPIO_PIN(47),
165 BCM2835_GPIO_PIN(48), 165 BCM2835_GPIO_PIN(48),
166 BCM2835_GPIO_PIN(49), 166 BCM2835_GPIO_PIN(49),
167 BCM2835_GPIO_PIN(50), 167 BCM2835_GPIO_PIN(50),
168 BCM2835_GPIO_PIN(51), 168 BCM2835_GPIO_PIN(51),
169 BCM2835_GPIO_PIN(52), 169 BCM2835_GPIO_PIN(52),
170 BCM2835_GPIO_PIN(53), 170 BCM2835_GPIO_PIN(53),
171 }; 171 };
172 172
173 /* one pin per group */ 173 /* one pin per group */
174 static const char * const bcm2835_gpio_groups[] = { 174 static const char * const bcm2835_gpio_groups[] = {
175 "gpio0", 175 "gpio0",
176 "gpio1", 176 "gpio1",
177 "gpio2", 177 "gpio2",
178 "gpio3", 178 "gpio3",
179 "gpio4", 179 "gpio4",
180 "gpio5", 180 "gpio5",
181 "gpio6", 181 "gpio6",
182 "gpio7", 182 "gpio7",
183 "gpio8", 183 "gpio8",
184 "gpio9", 184 "gpio9",
185 "gpio10", 185 "gpio10",
186 "gpio11", 186 "gpio11",
187 "gpio12", 187 "gpio12",
188 "gpio13", 188 "gpio13",
189 "gpio14", 189 "gpio14",
190 "gpio15", 190 "gpio15",
191 "gpio16", 191 "gpio16",
192 "gpio17", 192 "gpio17",
193 "gpio18", 193 "gpio18",
194 "gpio19", 194 "gpio19",
195 "gpio20", 195 "gpio20",
196 "gpio21", 196 "gpio21",
197 "gpio22", 197 "gpio22",
198 "gpio23", 198 "gpio23",
199 "gpio24", 199 "gpio24",
200 "gpio25", 200 "gpio25",
201 "gpio26", 201 "gpio26",
202 "gpio27", 202 "gpio27",
203 "gpio28", 203 "gpio28",
204 "gpio29", 204 "gpio29",
205 "gpio30", 205 "gpio30",
206 "gpio31", 206 "gpio31",
207 "gpio32", 207 "gpio32",
208 "gpio33", 208 "gpio33",
209 "gpio34", 209 "gpio34",
210 "gpio35", 210 "gpio35",
211 "gpio36", 211 "gpio36",
212 "gpio37", 212 "gpio37",
213 "gpio38", 213 "gpio38",
214 "gpio39", 214 "gpio39",
215 "gpio40", 215 "gpio40",
216 "gpio41", 216 "gpio41",
217 "gpio42", 217 "gpio42",
218 "gpio43", 218 "gpio43",
219 "gpio44", 219 "gpio44",
220 "gpio45", 220 "gpio45",
221 "gpio46", 221 "gpio46",
222 "gpio47", 222 "gpio47",
223 "gpio48", 223 "gpio48",
224 "gpio49", 224 "gpio49",
225 "gpio50", 225 "gpio50",
226 "gpio51", 226 "gpio51",
227 "gpio52", 227 "gpio52",
228 "gpio53", 228 "gpio53",
229 }; 229 };
230 230
231 enum bcm2835_fsel { 231 enum bcm2835_fsel {
232 BCM2835_FSEL_GPIO_IN = 0, 232 BCM2835_FSEL_GPIO_IN = 0,
233 BCM2835_FSEL_GPIO_OUT = 1, 233 BCM2835_FSEL_GPIO_OUT = 1,
234 BCM2835_FSEL_ALT0 = 4, 234 BCM2835_FSEL_ALT0 = 4,
235 BCM2835_FSEL_ALT1 = 5, 235 BCM2835_FSEL_ALT1 = 5,
236 BCM2835_FSEL_ALT2 = 6, 236 BCM2835_FSEL_ALT2 = 6,
237 BCM2835_FSEL_ALT3 = 7, 237 BCM2835_FSEL_ALT3 = 7,
238 BCM2835_FSEL_ALT4 = 3, 238 BCM2835_FSEL_ALT4 = 3,
239 BCM2835_FSEL_ALT5 = 2, 239 BCM2835_FSEL_ALT5 = 2,
240 BCM2835_FSEL_COUNT = 8, 240 BCM2835_FSEL_COUNT = 8,
241 BCM2835_FSEL_MASK = 0x7, 241 BCM2835_FSEL_MASK = 0x7,
242 }; 242 };
243 243
244 static const char * const bcm2835_functions[BCM2835_FSEL_COUNT] = { 244 static const char * const bcm2835_functions[BCM2835_FSEL_COUNT] = {
245 [BCM2835_FSEL_GPIO_IN] = "gpio_in", 245 [BCM2835_FSEL_GPIO_IN] = "gpio_in",
246 [BCM2835_FSEL_GPIO_OUT] = "gpio_out", 246 [BCM2835_FSEL_GPIO_OUT] = "gpio_out",
247 [BCM2835_FSEL_ALT0] = "alt0", 247 [BCM2835_FSEL_ALT0] = "alt0",
248 [BCM2835_FSEL_ALT1] = "alt1", 248 [BCM2835_FSEL_ALT1] = "alt1",
249 [BCM2835_FSEL_ALT2] = "alt2", 249 [BCM2835_FSEL_ALT2] = "alt2",
250 [BCM2835_FSEL_ALT3] = "alt3", 250 [BCM2835_FSEL_ALT3] = "alt3",
251 [BCM2835_FSEL_ALT4] = "alt4", 251 [BCM2835_FSEL_ALT4] = "alt4",
252 [BCM2835_FSEL_ALT5] = "alt5", 252 [BCM2835_FSEL_ALT5] = "alt5",
253 }; 253 };
254 254
255 static const char * const irq_type_names[] = { 255 static const char * const irq_type_names[] = {
256 [IRQ_TYPE_NONE] = "none", 256 [IRQ_TYPE_NONE] = "none",
257 [IRQ_TYPE_EDGE_RISING] = "edge-rising", 257 [IRQ_TYPE_EDGE_RISING] = "edge-rising",
258 [IRQ_TYPE_EDGE_FALLING] = "edge-falling", 258 [IRQ_TYPE_EDGE_FALLING] = "edge-falling",
259 [IRQ_TYPE_EDGE_BOTH] = "edge-both", 259 [IRQ_TYPE_EDGE_BOTH] = "edge-both",
260 [IRQ_TYPE_LEVEL_HIGH] = "level-high", 260 [IRQ_TYPE_LEVEL_HIGH] = "level-high",
261 [IRQ_TYPE_LEVEL_LOW] = "level-low", 261 [IRQ_TYPE_LEVEL_LOW] = "level-low",
262 }; 262 };
263 263
264 static inline u32 bcm2835_gpio_rd(struct bcm2835_pinctrl *pc, unsigned reg) 264 static inline u32 bcm2835_gpio_rd(struct bcm2835_pinctrl *pc, unsigned reg)
265 { 265 {
266 return readl(pc->base + reg); 266 return readl(pc->base + reg);
267 } 267 }
268 268
269 static inline void bcm2835_gpio_wr(struct bcm2835_pinctrl *pc, unsigned reg, 269 static inline void bcm2835_gpio_wr(struct bcm2835_pinctrl *pc, unsigned reg,
270 u32 val) 270 u32 val)
271 { 271 {
272 writel(val, pc->base + reg); 272 writel(val, pc->base + reg);
273 } 273 }
274 274
275 static inline int bcm2835_gpio_get_bit(struct bcm2835_pinctrl *pc, unsigned reg, 275 static inline int bcm2835_gpio_get_bit(struct bcm2835_pinctrl *pc, unsigned reg,
276 unsigned bit) 276 unsigned bit)
277 { 277 {
278 reg += GPIO_REG_OFFSET(bit) * 4; 278 reg += GPIO_REG_OFFSET(bit) * 4;
279 return (bcm2835_gpio_rd(pc, reg) >> GPIO_REG_SHIFT(bit)) & 1; 279 return (bcm2835_gpio_rd(pc, reg) >> GPIO_REG_SHIFT(bit)) & 1;
280 } 280 }
281 281
282 /* note NOT a read/modify/write cycle */ 282 /* note NOT a read/modify/write cycle */
283 static inline void bcm2835_gpio_set_bit(struct bcm2835_pinctrl *pc, 283 static inline void bcm2835_gpio_set_bit(struct bcm2835_pinctrl *pc,
284 unsigned reg, unsigned bit) 284 unsigned reg, unsigned bit)
285 { 285 {
286 reg += GPIO_REG_OFFSET(bit) * 4; 286 reg += GPIO_REG_OFFSET(bit) * 4;
287 bcm2835_gpio_wr(pc, reg, BIT(GPIO_REG_SHIFT(bit))); 287 bcm2835_gpio_wr(pc, reg, BIT(GPIO_REG_SHIFT(bit)));
288 } 288 }
289 289
290 static inline enum bcm2835_fsel bcm2835_pinctrl_fsel_get( 290 static inline enum bcm2835_fsel bcm2835_pinctrl_fsel_get(
291 struct bcm2835_pinctrl *pc, unsigned pin) 291 struct bcm2835_pinctrl *pc, unsigned pin)
292 { 292 {
293 u32 val = bcm2835_gpio_rd(pc, FSEL_REG(pin)); 293 u32 val = bcm2835_gpio_rd(pc, FSEL_REG(pin));
294 enum bcm2835_fsel status = (val >> FSEL_SHIFT(pin)) & BCM2835_FSEL_MASK; 294 enum bcm2835_fsel status = (val >> FSEL_SHIFT(pin)) & BCM2835_FSEL_MASK;
295 295
296 dev_dbg(pc->dev, "get %08x (%u => %s)\n", val, pin, 296 dev_dbg(pc->dev, "get %08x (%u => %s)\n", val, pin,
297 bcm2835_functions[status]); 297 bcm2835_functions[status]);
298 298
299 return status; 299 return status;
300 } 300 }
301 301
302 static inline void bcm2835_pinctrl_fsel_set( 302 static inline void bcm2835_pinctrl_fsel_set(
303 struct bcm2835_pinctrl *pc, unsigned pin, 303 struct bcm2835_pinctrl *pc, unsigned pin,
304 enum bcm2835_fsel fsel) 304 enum bcm2835_fsel fsel)
305 { 305 {
306 u32 val = bcm2835_gpio_rd(pc, FSEL_REG(pin)); 306 u32 val = bcm2835_gpio_rd(pc, FSEL_REG(pin));
307 enum bcm2835_fsel cur = (val >> FSEL_SHIFT(pin)) & BCM2835_FSEL_MASK; 307 enum bcm2835_fsel cur = (val >> FSEL_SHIFT(pin)) & BCM2835_FSEL_MASK;
308 308
309 dev_dbg(pc->dev, "read %08x (%u => %s)\n", val, pin, 309 dev_dbg(pc->dev, "read %08x (%u => %s)\n", val, pin,
310 bcm2835_functions[cur]); 310 bcm2835_functions[cur]);
311 311
312 if (cur == fsel) 312 if (cur == fsel)
313 return; 313 return;
314 314
315 if (cur != BCM2835_FSEL_GPIO_IN && fsel != BCM2835_FSEL_GPIO_IN) { 315 if (cur != BCM2835_FSEL_GPIO_IN && fsel != BCM2835_FSEL_GPIO_IN) {
316 /* always transition through GPIO_IN */ 316 /* always transition through GPIO_IN */
317 val &= ~(BCM2835_FSEL_MASK << FSEL_SHIFT(pin)); 317 val &= ~(BCM2835_FSEL_MASK << FSEL_SHIFT(pin));
318 val |= BCM2835_FSEL_GPIO_IN << FSEL_SHIFT(pin); 318 val |= BCM2835_FSEL_GPIO_IN << FSEL_SHIFT(pin);
319 319
320 dev_dbg(pc->dev, "trans %08x (%u <= %s)\n", val, pin, 320 dev_dbg(pc->dev, "trans %08x (%u <= %s)\n", val, pin,
321 bcm2835_functions[BCM2835_FSEL_GPIO_IN]); 321 bcm2835_functions[BCM2835_FSEL_GPIO_IN]);
322 bcm2835_gpio_wr(pc, FSEL_REG(pin), val); 322 bcm2835_gpio_wr(pc, FSEL_REG(pin), val);
323 } 323 }
324 324
325 val &= ~(BCM2835_FSEL_MASK << FSEL_SHIFT(pin)); 325 val &= ~(BCM2835_FSEL_MASK << FSEL_SHIFT(pin));
326 val |= fsel << FSEL_SHIFT(pin); 326 val |= fsel << FSEL_SHIFT(pin);
327 327
328 dev_dbg(pc->dev, "write %08x (%u <= %s)\n", val, pin, 328 dev_dbg(pc->dev, "write %08x (%u <= %s)\n", val, pin,
329 bcm2835_functions[fsel]); 329 bcm2835_functions[fsel]);
330 bcm2835_gpio_wr(pc, FSEL_REG(pin), val); 330 bcm2835_gpio_wr(pc, FSEL_REG(pin), val);
331 } 331 }
332 332
333 static int bcm2835_gpio_request(struct gpio_chip *chip, unsigned offset) 333 static int bcm2835_gpio_request(struct gpio_chip *chip, unsigned offset)
334 { 334 {
335 return pinctrl_request_gpio(chip->base + offset); 335 return pinctrl_request_gpio(chip->base + offset);
336 } 336 }
337 337
338 static void bcm2835_gpio_free(struct gpio_chip *chip, unsigned offset) 338 static void bcm2835_gpio_free(struct gpio_chip *chip, unsigned offset)
339 { 339 {
340 pinctrl_free_gpio(chip->base + offset); 340 pinctrl_free_gpio(chip->base + offset);
341 } 341 }
342 342
343 static int bcm2835_gpio_direction_input(struct gpio_chip *chip, unsigned offset) 343 static int bcm2835_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
344 { 344 {
345 return pinctrl_gpio_direction_input(chip->base + offset); 345 return pinctrl_gpio_direction_input(chip->base + offset);
346 } 346 }
347 347
348 static int bcm2835_gpio_get(struct gpio_chip *chip, unsigned offset) 348 static int bcm2835_gpio_get(struct gpio_chip *chip, unsigned offset)
349 { 349 {
350 struct bcm2835_pinctrl *pc = dev_get_drvdata(chip->dev); 350 struct bcm2835_pinctrl *pc = dev_get_drvdata(chip->dev);
351 351
352 return bcm2835_gpio_get_bit(pc, GPLEV0, offset); 352 return bcm2835_gpio_get_bit(pc, GPLEV0, offset);
353 } 353 }
354 354
355 static int bcm2835_gpio_direction_output(struct gpio_chip *chip, 355 static int bcm2835_gpio_direction_output(struct gpio_chip *chip,
356 unsigned offset, int value) 356 unsigned offset, int value)
357 { 357 {
358 return pinctrl_gpio_direction_output(chip->base + offset); 358 return pinctrl_gpio_direction_output(chip->base + offset);
359 } 359 }
360 360
361 static void bcm2835_gpio_set(struct gpio_chip *chip, unsigned offset, int value) 361 static void bcm2835_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
362 { 362 {
363 struct bcm2835_pinctrl *pc = dev_get_drvdata(chip->dev); 363 struct bcm2835_pinctrl *pc = dev_get_drvdata(chip->dev);
364 364
365 bcm2835_gpio_set_bit(pc, value ? GPSET0 : GPCLR0, offset); 365 bcm2835_gpio_set_bit(pc, value ? GPSET0 : GPCLR0, offset);
366 } 366 }
367 367
368 static int bcm2835_gpio_to_irq(struct gpio_chip *chip, unsigned offset) 368 static int bcm2835_gpio_to_irq(struct gpio_chip *chip, unsigned offset)
369 { 369 {
370 struct bcm2835_pinctrl *pc = dev_get_drvdata(chip->dev); 370 struct bcm2835_pinctrl *pc = dev_get_drvdata(chip->dev);
371 371
372 return irq_linear_revmap(pc->irq_domain, offset); 372 return irq_linear_revmap(pc->irq_domain, offset);
373 } 373 }
374 374
375 static struct gpio_chip bcm2835_gpio_chip = { 375 static struct gpio_chip bcm2835_gpio_chip = {
376 .label = MODULE_NAME, 376 .label = MODULE_NAME,
377 .owner = THIS_MODULE, 377 .owner = THIS_MODULE,
378 .request = bcm2835_gpio_request, 378 .request = bcm2835_gpio_request,
379 .free = bcm2835_gpio_free, 379 .free = bcm2835_gpio_free,
380 .direction_input = bcm2835_gpio_direction_input, 380 .direction_input = bcm2835_gpio_direction_input,
381 .direction_output = bcm2835_gpio_direction_output, 381 .direction_output = bcm2835_gpio_direction_output,
382 .get = bcm2835_gpio_get, 382 .get = bcm2835_gpio_get,
383 .set = bcm2835_gpio_set, 383 .set = bcm2835_gpio_set,
384 .to_irq = bcm2835_gpio_to_irq, 384 .to_irq = bcm2835_gpio_to_irq,
385 .base = -1, 385 .base = -1,
386 .ngpio = BCM2835_NUM_GPIOS, 386 .ngpio = BCM2835_NUM_GPIOS,
387 .can_sleep = 0, 387 .can_sleep = 0,
388 }; 388 };
389 389
390 static irqreturn_t bcm2835_gpio_irq_handler(int irq, void *dev_id) 390 static irqreturn_t bcm2835_gpio_irq_handler(int irq, void *dev_id)
391 { 391 {
392 struct bcm2835_gpio_irqdata *irqdata = dev_id; 392 struct bcm2835_gpio_irqdata *irqdata = dev_id;
393 struct bcm2835_pinctrl *pc = irqdata->pc; 393 struct bcm2835_pinctrl *pc = irqdata->pc;
394 int bank = irqdata->bank; 394 int bank = irqdata->bank;
395 unsigned long events; 395 unsigned long events;
396 unsigned offset; 396 unsigned offset;
397 unsigned gpio; 397 unsigned gpio;
398 unsigned int type; 398 unsigned int type;
399 399
400 events = bcm2835_gpio_rd(pc, GPEDS0 + bank * 4); 400 events = bcm2835_gpio_rd(pc, GPEDS0 + bank * 4);
401 events &= pc->enabled_irq_map[bank]; 401 events &= pc->enabled_irq_map[bank];
402 for_each_set_bit(offset, &events, 32) { 402 for_each_set_bit(offset, &events, 32) {
403 gpio = (32 * bank) + offset; 403 gpio = (32 * bank) + offset;
404 type = pc->irq_type[gpio]; 404 type = pc->irq_type[gpio];
405 405
406 /* ack edge triggered IRQs immediately */ 406 /* ack edge triggered IRQs immediately */
407 if (!(type & IRQ_TYPE_LEVEL_MASK)) 407 if (!(type & IRQ_TYPE_LEVEL_MASK))
408 bcm2835_gpio_set_bit(pc, GPEDS0, gpio); 408 bcm2835_gpio_set_bit(pc, GPEDS0, gpio);
409 409
410 generic_handle_irq(irq_linear_revmap(pc->irq_domain, gpio)); 410 generic_handle_irq(irq_linear_revmap(pc->irq_domain, gpio));
411 411
412 /* ack level triggered IRQ after handling them */ 412 /* ack level triggered IRQ after handling them */
413 if (type & IRQ_TYPE_LEVEL_MASK) 413 if (type & IRQ_TYPE_LEVEL_MASK)
414 bcm2835_gpio_set_bit(pc, GPEDS0, gpio); 414 bcm2835_gpio_set_bit(pc, GPEDS0, gpio);
415 } 415 }
416 return events ? IRQ_HANDLED : IRQ_NONE; 416 return events ? IRQ_HANDLED : IRQ_NONE;
417 } 417 }
418 418
419 static inline void __bcm2835_gpio_irq_config(struct bcm2835_pinctrl *pc, 419 static inline void __bcm2835_gpio_irq_config(struct bcm2835_pinctrl *pc,
420 unsigned reg, unsigned offset, bool enable) 420 unsigned reg, unsigned offset, bool enable)
421 { 421 {
422 u32 value; 422 u32 value;
423 reg += GPIO_REG_OFFSET(offset) * 4; 423 reg += GPIO_REG_OFFSET(offset) * 4;
424 value = bcm2835_gpio_rd(pc, reg); 424 value = bcm2835_gpio_rd(pc, reg);
425 if (enable) 425 if (enable)
426 value |= BIT(GPIO_REG_SHIFT(offset)); 426 value |= BIT(GPIO_REG_SHIFT(offset));
427 else 427 else
428 value &= ~(BIT(GPIO_REG_SHIFT(offset))); 428 value &= ~(BIT(GPIO_REG_SHIFT(offset)));
429 bcm2835_gpio_wr(pc, reg, value); 429 bcm2835_gpio_wr(pc, reg, value);
430 } 430 }
431 431
432 /* fast path for IRQ handler */ 432 /* fast path for IRQ handler */
433 static void bcm2835_gpio_irq_config(struct bcm2835_pinctrl *pc, 433 static void bcm2835_gpio_irq_config(struct bcm2835_pinctrl *pc,
434 unsigned offset, bool enable) 434 unsigned offset, bool enable)
435 { 435 {
436 switch (pc->irq_type[offset]) { 436 switch (pc->irq_type[offset]) {
437 case IRQ_TYPE_EDGE_RISING: 437 case IRQ_TYPE_EDGE_RISING:
438 __bcm2835_gpio_irq_config(pc, GPREN0, offset, enable); 438 __bcm2835_gpio_irq_config(pc, GPREN0, offset, enable);
439 break; 439 break;
440 440
441 case IRQ_TYPE_EDGE_FALLING: 441 case IRQ_TYPE_EDGE_FALLING:
442 __bcm2835_gpio_irq_config(pc, GPFEN0, offset, enable); 442 __bcm2835_gpio_irq_config(pc, GPFEN0, offset, enable);
443 break; 443 break;
444 444
445 case IRQ_TYPE_EDGE_BOTH: 445 case IRQ_TYPE_EDGE_BOTH:
446 __bcm2835_gpio_irq_config(pc, GPREN0, offset, enable); 446 __bcm2835_gpio_irq_config(pc, GPREN0, offset, enable);
447 __bcm2835_gpio_irq_config(pc, GPFEN0, offset, enable); 447 __bcm2835_gpio_irq_config(pc, GPFEN0, offset, enable);
448 break; 448 break;
449 449
450 case IRQ_TYPE_LEVEL_HIGH: 450 case IRQ_TYPE_LEVEL_HIGH:
451 __bcm2835_gpio_irq_config(pc, GPHEN0, offset, enable); 451 __bcm2835_gpio_irq_config(pc, GPHEN0, offset, enable);
452 break; 452 break;
453 453
454 case IRQ_TYPE_LEVEL_LOW: 454 case IRQ_TYPE_LEVEL_LOW:
455 __bcm2835_gpio_irq_config(pc, GPLEN0, offset, enable); 455 __bcm2835_gpio_irq_config(pc, GPLEN0, offset, enable);
456 break; 456 break;
457 } 457 }
458 } 458 }
459 459
460 static void bcm2835_gpio_irq_enable(struct irq_data *data) 460 static void bcm2835_gpio_irq_enable(struct irq_data *data)
461 { 461 {
462 struct bcm2835_pinctrl *pc = irq_data_get_irq_chip_data(data); 462 struct bcm2835_pinctrl *pc = irq_data_get_irq_chip_data(data);
463 unsigned gpio = irqd_to_hwirq(data); 463 unsigned gpio = irqd_to_hwirq(data);
464 unsigned offset = GPIO_REG_SHIFT(gpio); 464 unsigned offset = GPIO_REG_SHIFT(gpio);
465 unsigned bank = GPIO_REG_OFFSET(gpio); 465 unsigned bank = GPIO_REG_OFFSET(gpio);
466 unsigned long flags; 466 unsigned long flags;
467 467
468 spin_lock_irqsave(&pc->irq_lock[bank], flags); 468 spin_lock_irqsave(&pc->irq_lock[bank], flags);
469 set_bit(offset, &pc->enabled_irq_map[bank]); 469 set_bit(offset, &pc->enabled_irq_map[bank]);
470 bcm2835_gpio_irq_config(pc, gpio, true); 470 bcm2835_gpio_irq_config(pc, gpio, true);
471 spin_unlock_irqrestore(&pc->irq_lock[bank], flags); 471 spin_unlock_irqrestore(&pc->irq_lock[bank], flags);
472 } 472 }
473 473
474 static void bcm2835_gpio_irq_disable(struct irq_data *data) 474 static void bcm2835_gpio_irq_disable(struct irq_data *data)
475 { 475 {
476 struct bcm2835_pinctrl *pc = irq_data_get_irq_chip_data(data); 476 struct bcm2835_pinctrl *pc = irq_data_get_irq_chip_data(data);
477 unsigned gpio = irqd_to_hwirq(data); 477 unsigned gpio = irqd_to_hwirq(data);
478 unsigned offset = GPIO_REG_SHIFT(gpio); 478 unsigned offset = GPIO_REG_SHIFT(gpio);
479 unsigned bank = GPIO_REG_OFFSET(gpio); 479 unsigned bank = GPIO_REG_OFFSET(gpio);
480 unsigned long flags; 480 unsigned long flags;
481 481
482 spin_lock_irqsave(&pc->irq_lock[bank], flags); 482 spin_lock_irqsave(&pc->irq_lock[bank], flags);
483 bcm2835_gpio_irq_config(pc, gpio, false); 483 bcm2835_gpio_irq_config(pc, gpio, false);
484 clear_bit(offset, &pc->enabled_irq_map[bank]); 484 clear_bit(offset, &pc->enabled_irq_map[bank]);
485 spin_unlock_irqrestore(&pc->irq_lock[bank], flags); 485 spin_unlock_irqrestore(&pc->irq_lock[bank], flags);
486 } 486 }
487 487
488 static int __bcm2835_gpio_irq_set_type_disabled(struct bcm2835_pinctrl *pc, 488 static int __bcm2835_gpio_irq_set_type_disabled(struct bcm2835_pinctrl *pc,
489 unsigned offset, unsigned int type) 489 unsigned offset, unsigned int type)
490 { 490 {
491 switch (type) { 491 switch (type) {
492 case IRQ_TYPE_NONE: 492 case IRQ_TYPE_NONE:
493 case IRQ_TYPE_EDGE_RISING: 493 case IRQ_TYPE_EDGE_RISING:
494 case IRQ_TYPE_EDGE_FALLING: 494 case IRQ_TYPE_EDGE_FALLING:
495 case IRQ_TYPE_EDGE_BOTH: 495 case IRQ_TYPE_EDGE_BOTH:
496 case IRQ_TYPE_LEVEL_HIGH: 496 case IRQ_TYPE_LEVEL_HIGH:
497 case IRQ_TYPE_LEVEL_LOW: 497 case IRQ_TYPE_LEVEL_LOW:
498 pc->irq_type[offset] = type; 498 pc->irq_type[offset] = type;
499 break; 499 break;
500 500
501 default: 501 default:
502 return -EINVAL; 502 return -EINVAL;
503 } 503 }
504 return 0; 504 return 0;
505 } 505 }
506 506
507 /* slower path for reconfiguring IRQ type */ 507 /* slower path for reconfiguring IRQ type */
508 static int __bcm2835_gpio_irq_set_type_enabled(struct bcm2835_pinctrl *pc, 508 static int __bcm2835_gpio_irq_set_type_enabled(struct bcm2835_pinctrl *pc,
509 unsigned offset, unsigned int type) 509 unsigned offset, unsigned int type)
510 { 510 {
511 switch (type) { 511 switch (type) {
512 case IRQ_TYPE_NONE: 512 case IRQ_TYPE_NONE:
513 if (pc->irq_type[offset] != type) { 513 if (pc->irq_type[offset] != type) {
514 bcm2835_gpio_irq_config(pc, offset, false); 514 bcm2835_gpio_irq_config(pc, offset, false);
515 pc->irq_type[offset] = type; 515 pc->irq_type[offset] = type;
516 } 516 }
517 break; 517 break;
518 518
519 case IRQ_TYPE_EDGE_RISING: 519 case IRQ_TYPE_EDGE_RISING:
520 if (pc->irq_type[offset] == IRQ_TYPE_EDGE_BOTH) { 520 if (pc->irq_type[offset] == IRQ_TYPE_EDGE_BOTH) {
521 /* RISING already enabled, disable FALLING */ 521 /* RISING already enabled, disable FALLING */
522 pc->irq_type[offset] = IRQ_TYPE_EDGE_FALLING; 522 pc->irq_type[offset] = IRQ_TYPE_EDGE_FALLING;
523 bcm2835_gpio_irq_config(pc, offset, false); 523 bcm2835_gpio_irq_config(pc, offset, false);
524 pc->irq_type[offset] = type; 524 pc->irq_type[offset] = type;
525 } else if (pc->irq_type[offset] != type) { 525 } else if (pc->irq_type[offset] != type) {
526 bcm2835_gpio_irq_config(pc, offset, false); 526 bcm2835_gpio_irq_config(pc, offset, false);
527 pc->irq_type[offset] = type; 527 pc->irq_type[offset] = type;
528 bcm2835_gpio_irq_config(pc, offset, true); 528 bcm2835_gpio_irq_config(pc, offset, true);
529 } 529 }
530 break; 530 break;
531 531
532 case IRQ_TYPE_EDGE_FALLING: 532 case IRQ_TYPE_EDGE_FALLING:
533 if (pc->irq_type[offset] == IRQ_TYPE_EDGE_BOTH) { 533 if (pc->irq_type[offset] == IRQ_TYPE_EDGE_BOTH) {
534 /* FALLING already enabled, disable RISING */ 534 /* FALLING already enabled, disable RISING */
535 pc->irq_type[offset] = IRQ_TYPE_EDGE_RISING; 535 pc->irq_type[offset] = IRQ_TYPE_EDGE_RISING;
536 bcm2835_gpio_irq_config(pc, offset, false); 536 bcm2835_gpio_irq_config(pc, offset, false);
537 pc->irq_type[offset] = type; 537 pc->irq_type[offset] = type;
538 } else if (pc->irq_type[offset] != type) { 538 } else if (pc->irq_type[offset] != type) {
539 bcm2835_gpio_irq_config(pc, offset, false); 539 bcm2835_gpio_irq_config(pc, offset, false);
540 pc->irq_type[offset] = type; 540 pc->irq_type[offset] = type;
541 bcm2835_gpio_irq_config(pc, offset, true); 541 bcm2835_gpio_irq_config(pc, offset, true);
542 } 542 }
543 break; 543 break;
544 544
545 case IRQ_TYPE_EDGE_BOTH: 545 case IRQ_TYPE_EDGE_BOTH:
546 if (pc->irq_type[offset] == IRQ_TYPE_EDGE_RISING) { 546 if (pc->irq_type[offset] == IRQ_TYPE_EDGE_RISING) {
547 /* RISING already enabled, enable FALLING too */ 547 /* RISING already enabled, enable FALLING too */
548 pc->irq_type[offset] = IRQ_TYPE_EDGE_FALLING; 548 pc->irq_type[offset] = IRQ_TYPE_EDGE_FALLING;
549 bcm2835_gpio_irq_config(pc, offset, true); 549 bcm2835_gpio_irq_config(pc, offset, true);
550 pc->irq_type[offset] = type; 550 pc->irq_type[offset] = type;
551 } else if (pc->irq_type[offset] == IRQ_TYPE_EDGE_FALLING) { 551 } else if (pc->irq_type[offset] == IRQ_TYPE_EDGE_FALLING) {
552 /* FALLING already enabled, enable RISING too */ 552 /* FALLING already enabled, enable RISING too */
553 pc->irq_type[offset] = IRQ_TYPE_EDGE_RISING; 553 pc->irq_type[offset] = IRQ_TYPE_EDGE_RISING;
554 bcm2835_gpio_irq_config(pc, offset, true); 554 bcm2835_gpio_irq_config(pc, offset, true);
555 pc->irq_type[offset] = type; 555 pc->irq_type[offset] = type;
556 } else if (pc->irq_type[offset] != type) { 556 } else if (pc->irq_type[offset] != type) {
557 bcm2835_gpio_irq_config(pc, offset, false); 557 bcm2835_gpio_irq_config(pc, offset, false);
558 pc->irq_type[offset] = type; 558 pc->irq_type[offset] = type;
559 bcm2835_gpio_irq_config(pc, offset, true); 559 bcm2835_gpio_irq_config(pc, offset, true);
560 } 560 }
561 break; 561 break;
562 562
563 case IRQ_TYPE_LEVEL_HIGH: 563 case IRQ_TYPE_LEVEL_HIGH:
564 case IRQ_TYPE_LEVEL_LOW: 564 case IRQ_TYPE_LEVEL_LOW:
565 if (pc->irq_type[offset] != type) { 565 if (pc->irq_type[offset] != type) {
566 bcm2835_gpio_irq_config(pc, offset, false); 566 bcm2835_gpio_irq_config(pc, offset, false);
567 pc->irq_type[offset] = type; 567 pc->irq_type[offset] = type;
568 bcm2835_gpio_irq_config(pc, offset, true); 568 bcm2835_gpio_irq_config(pc, offset, true);
569 } 569 }
570 break; 570 break;
571 571
572 default: 572 default:
573 return -EINVAL; 573 return -EINVAL;
574 } 574 }
575 return 0; 575 return 0;
576 } 576 }
577 577
578 static int bcm2835_gpio_irq_set_type(struct irq_data *data, unsigned int type) 578 static int bcm2835_gpio_irq_set_type(struct irq_data *data, unsigned int type)
579 { 579 {
580 struct bcm2835_pinctrl *pc = irq_data_get_irq_chip_data(data); 580 struct bcm2835_pinctrl *pc = irq_data_get_irq_chip_data(data);
581 unsigned gpio = irqd_to_hwirq(data); 581 unsigned gpio = irqd_to_hwirq(data);
582 unsigned offset = GPIO_REG_SHIFT(gpio); 582 unsigned offset = GPIO_REG_SHIFT(gpio);
583 unsigned bank = GPIO_REG_OFFSET(gpio); 583 unsigned bank = GPIO_REG_OFFSET(gpio);
584 unsigned long flags; 584 unsigned long flags;
585 int ret; 585 int ret;
586 586
587 spin_lock_irqsave(&pc->irq_lock[bank], flags); 587 spin_lock_irqsave(&pc->irq_lock[bank], flags);
588 588
589 if (test_bit(offset, &pc->enabled_irq_map[bank])) 589 if (test_bit(offset, &pc->enabled_irq_map[bank]))
590 ret = __bcm2835_gpio_irq_set_type_enabled(pc, gpio, type); 590 ret = __bcm2835_gpio_irq_set_type_enabled(pc, gpio, type);
591 else 591 else
592 ret = __bcm2835_gpio_irq_set_type_disabled(pc, gpio, type); 592 ret = __bcm2835_gpio_irq_set_type_disabled(pc, gpio, type);
593 593
594 spin_unlock_irqrestore(&pc->irq_lock[bank], flags); 594 spin_unlock_irqrestore(&pc->irq_lock[bank], flags);
595 595
596 return ret; 596 return ret;
597 } 597 }
598 598
599 static struct irq_chip bcm2835_gpio_irq_chip = { 599 static struct irq_chip bcm2835_gpio_irq_chip = {
600 .name = MODULE_NAME, 600 .name = MODULE_NAME,
601 .irq_enable = bcm2835_gpio_irq_enable, 601 .irq_enable = bcm2835_gpio_irq_enable,
602 .irq_disable = bcm2835_gpio_irq_disable, 602 .irq_disable = bcm2835_gpio_irq_disable,
603 .irq_set_type = bcm2835_gpio_irq_set_type, 603 .irq_set_type = bcm2835_gpio_irq_set_type,
604 }; 604 };
605 605
606 static int bcm2835_pctl_get_groups_count(struct pinctrl_dev *pctldev) 606 static int bcm2835_pctl_get_groups_count(struct pinctrl_dev *pctldev)
607 { 607 {
608 return ARRAY_SIZE(bcm2835_gpio_groups); 608 return ARRAY_SIZE(bcm2835_gpio_groups);
609 } 609 }
610 610
611 static const char *bcm2835_pctl_get_group_name(struct pinctrl_dev *pctldev, 611 static const char *bcm2835_pctl_get_group_name(struct pinctrl_dev *pctldev,
612 unsigned selector) 612 unsigned selector)
613 { 613 {
614 return bcm2835_gpio_groups[selector]; 614 return bcm2835_gpio_groups[selector];
615 } 615 }
616 616
617 static int bcm2835_pctl_get_group_pins(struct pinctrl_dev *pctldev, 617 static int bcm2835_pctl_get_group_pins(struct pinctrl_dev *pctldev,
618 unsigned selector, 618 unsigned selector,
619 const unsigned **pins, 619 const unsigned **pins,
620 unsigned *num_pins) 620 unsigned *num_pins)
621 { 621 {
622 *pins = &bcm2835_gpio_pins[selector].number; 622 *pins = &bcm2835_gpio_pins[selector].number;
623 *num_pins = 1; 623 *num_pins = 1;
624 624
625 return 0; 625 return 0;
626 } 626 }
627 627
628 static void bcm2835_pctl_pin_dbg_show(struct pinctrl_dev *pctldev, 628 static void bcm2835_pctl_pin_dbg_show(struct pinctrl_dev *pctldev,
629 struct seq_file *s, 629 struct seq_file *s,
630 unsigned offset) 630 unsigned offset)
631 { 631 {
632 struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev); 632 struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
633 enum bcm2835_fsel fsel = bcm2835_pinctrl_fsel_get(pc, offset); 633 enum bcm2835_fsel fsel = bcm2835_pinctrl_fsel_get(pc, offset);
634 const char *fname = bcm2835_functions[fsel]; 634 const char *fname = bcm2835_functions[fsel];
635 int value = bcm2835_gpio_get_bit(pc, GPLEV0, offset); 635 int value = bcm2835_gpio_get_bit(pc, GPLEV0, offset);
636 int irq = irq_find_mapping(pc->irq_domain, offset); 636 int irq = irq_find_mapping(pc->irq_domain, offset);
637 637
638 seq_printf(s, "function %s in %s; irq %d (%s)", 638 seq_printf(s, "function %s in %s; irq %d (%s)",
639 fname, value ? "hi" : "lo", 639 fname, value ? "hi" : "lo",
640 irq, irq_type_names[pc->irq_type[offset]]); 640 irq, irq_type_names[pc->irq_type[offset]]);
641 } 641 }
642 642
643 static void bcm2835_pctl_dt_free_map(struct pinctrl_dev *pctldev, 643 static void bcm2835_pctl_dt_free_map(struct pinctrl_dev *pctldev,
644 struct pinctrl_map *maps, unsigned num_maps) 644 struct pinctrl_map *maps, unsigned num_maps)
645 { 645 {
646 int i; 646 int i;
647 647
648 for (i = 0; i < num_maps; i++) 648 for (i = 0; i < num_maps; i++)
649 if (maps[i].type == PIN_MAP_TYPE_CONFIGS_PIN) 649 if (maps[i].type == PIN_MAP_TYPE_CONFIGS_PIN)
650 kfree(maps[i].data.configs.configs); 650 kfree(maps[i].data.configs.configs);
651 651
652 kfree(maps); 652 kfree(maps);
653 } 653 }
654 654
655 static int bcm2835_pctl_dt_node_to_map_func(struct bcm2835_pinctrl *pc, 655 static int bcm2835_pctl_dt_node_to_map_func(struct bcm2835_pinctrl *pc,
656 struct device_node *np, u32 pin, u32 fnum, 656 struct device_node *np, u32 pin, u32 fnum,
657 struct pinctrl_map **maps) 657 struct pinctrl_map **maps)
658 { 658 {
659 struct pinctrl_map *map = *maps; 659 struct pinctrl_map *map = *maps;
660 660
661 if (fnum >= ARRAY_SIZE(bcm2835_functions)) { 661 if (fnum >= ARRAY_SIZE(bcm2835_functions)) {
662 dev_err(pc->dev, "%s: invalid brcm,function %d\n", 662 dev_err(pc->dev, "%s: invalid brcm,function %d\n",
663 of_node_full_name(np), fnum); 663 of_node_full_name(np), fnum);
664 return -EINVAL; 664 return -EINVAL;
665 } 665 }
666 666
667 map->type = PIN_MAP_TYPE_MUX_GROUP; 667 map->type = PIN_MAP_TYPE_MUX_GROUP;
668 map->data.mux.group = bcm2835_gpio_groups[pin]; 668 map->data.mux.group = bcm2835_gpio_groups[pin];
669 map->data.mux.function = bcm2835_functions[fnum]; 669 map->data.mux.function = bcm2835_functions[fnum];
670 (*maps)++; 670 (*maps)++;
671 671
672 return 0; 672 return 0;
673 } 673 }
674 674
675 static int bcm2835_pctl_dt_node_to_map_pull(struct bcm2835_pinctrl *pc, 675 static int bcm2835_pctl_dt_node_to_map_pull(struct bcm2835_pinctrl *pc,
676 struct device_node *np, u32 pin, u32 pull, 676 struct device_node *np, u32 pin, u32 pull,
677 struct pinctrl_map **maps) 677 struct pinctrl_map **maps)
678 { 678 {
679 struct pinctrl_map *map = *maps; 679 struct pinctrl_map *map = *maps;
680 unsigned long *configs; 680 unsigned long *configs;
681 681
682 if (pull > 2) { 682 if (pull > 2) {
683 dev_err(pc->dev, "%s: invalid brcm,pull %d\n", 683 dev_err(pc->dev, "%s: invalid brcm,pull %d\n",
684 of_node_full_name(np), pull); 684 of_node_full_name(np), pull);
685 return -EINVAL; 685 return -EINVAL;
686 } 686 }
687 687
688 configs = kzalloc(sizeof(*configs), GFP_KERNEL); 688 configs = kzalloc(sizeof(*configs), GFP_KERNEL);
689 if (!configs) 689 if (!configs)
690 return -ENOMEM; 690 return -ENOMEM;
691 configs[0] = BCM2835_PINCONF_PACK(BCM2835_PINCONF_PARAM_PULL, pull); 691 configs[0] = BCM2835_PINCONF_PACK(BCM2835_PINCONF_PARAM_PULL, pull);
692 692
693 map->type = PIN_MAP_TYPE_CONFIGS_PIN; 693 map->type = PIN_MAP_TYPE_CONFIGS_PIN;
694 map->data.configs.group_or_pin = bcm2835_gpio_pins[pin].name; 694 map->data.configs.group_or_pin = bcm2835_gpio_pins[pin].name;
695 map->data.configs.configs = configs; 695 map->data.configs.configs = configs;
696 map->data.configs.num_configs = 1; 696 map->data.configs.num_configs = 1;
697 (*maps)++; 697 (*maps)++;
698 698
699 return 0; 699 return 0;
700 } 700 }
701 701
702 static inline u32 prop_u32(struct property *p, int i) 702 static inline u32 prop_u32(struct property *p, int i)
703 { 703 {
704 return be32_to_cpup(((__be32 *)p->value) + i); 704 return be32_to_cpup(((__be32 *)p->value) + i);
705 } 705 }
706 706
707 static int bcm2835_pctl_dt_node_to_map(struct pinctrl_dev *pctldev, 707 static int bcm2835_pctl_dt_node_to_map(struct pinctrl_dev *pctldev,
708 struct device_node *np, 708 struct device_node *np,
709 struct pinctrl_map **map, unsigned *num_maps) 709 struct pinctrl_map **map, unsigned *num_maps)
710 { 710 {
711 struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev); 711 struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
712 struct property *pins, *funcs, *pulls; 712 struct property *pins, *funcs, *pulls;
713 int num_pins, num_funcs, num_pulls, maps_per_pin; 713 int num_pins, num_funcs, num_pulls, maps_per_pin;
714 struct pinctrl_map *maps, *cur_map; 714 struct pinctrl_map *maps, *cur_map;
715 int i, err; 715 int i, err;
716 u32 pin, func, pull; 716 u32 pin, func, pull;
717 717
718 pins = of_find_property(np, "brcm,pins", NULL); 718 pins = of_find_property(np, "brcm,pins", NULL);
719 if (!pins) { 719 if (!pins) {
720 dev_err(pc->dev, "%s: missing brcm,pins property\n", 720 dev_err(pc->dev, "%s: missing brcm,pins property\n",
721 of_node_full_name(np)); 721 of_node_full_name(np));
722 return -EINVAL; 722 return -EINVAL;
723 } 723 }
724 724
725 funcs = of_find_property(np, "brcm,function", NULL); 725 funcs = of_find_property(np, "brcm,function", NULL);
726 pulls = of_find_property(np, "brcm,pull", NULL); 726 pulls = of_find_property(np, "brcm,pull", NULL);
727 727
728 if (!funcs && !pulls) { 728 if (!funcs && !pulls) {
729 dev_err(pc->dev, 729 dev_err(pc->dev,
730 "%s: neither brcm,function nor brcm,pull specified\n", 730 "%s: neither brcm,function nor brcm,pull specified\n",
731 of_node_full_name(np)); 731 of_node_full_name(np));
732 return -EINVAL; 732 return -EINVAL;
733 } 733 }
734 734
735 num_pins = pins->length / 4; 735 num_pins = pins->length / 4;
736 num_funcs = funcs ? (funcs->length / 4) : 0; 736 num_funcs = funcs ? (funcs->length / 4) : 0;
737 num_pulls = pulls ? (pulls->length / 4) : 0; 737 num_pulls = pulls ? (pulls->length / 4) : 0;
738 738
739 if (num_funcs > 1 && num_funcs != num_pins) { 739 if (num_funcs > 1 && num_funcs != num_pins) {
740 dev_err(pc->dev, 740 dev_err(pc->dev,
741 "%s: brcm,function must have 1 or %d entries\n", 741 "%s: brcm,function must have 1 or %d entries\n",
742 of_node_full_name(np), num_pins); 742 of_node_full_name(np), num_pins);
743 return -EINVAL; 743 return -EINVAL;
744 } 744 }
745 745
746 if (num_pulls > 1 && num_pulls != num_pins) { 746 if (num_pulls > 1 && num_pulls != num_pins) {
747 dev_err(pc->dev, 747 dev_err(pc->dev,
748 "%s: brcm,pull must have 1 or %d entries\n", 748 "%s: brcm,pull must have 1 or %d entries\n",
749 of_node_full_name(np), num_pins); 749 of_node_full_name(np), num_pins);
750 return -EINVAL; 750 return -EINVAL;
751 } 751 }
752 752
753 maps_per_pin = 0; 753 maps_per_pin = 0;
754 if (num_funcs) 754 if (num_funcs)
755 maps_per_pin++; 755 maps_per_pin++;
756 if (num_pulls) 756 if (num_pulls)
757 maps_per_pin++; 757 maps_per_pin++;
758 cur_map = maps = kzalloc(num_pins * maps_per_pin * sizeof(*maps), 758 cur_map = maps = kzalloc(num_pins * maps_per_pin * sizeof(*maps),
759 GFP_KERNEL); 759 GFP_KERNEL);
760 if (!maps) 760 if (!maps)
761 return -ENOMEM; 761 return -ENOMEM;
762 762
763 for (i = 0; i < num_pins; i++) { 763 for (i = 0; i < num_pins; i++) {
764 pin = prop_u32(pins, i); 764 pin = prop_u32(pins, i);
765 if (pin >= ARRAY_SIZE(bcm2835_gpio_pins)) { 765 if (pin >= ARRAY_SIZE(bcm2835_gpio_pins)) {
766 dev_err(pc->dev, "%s: invalid brcm,pins value %d\n", 766 dev_err(pc->dev, "%s: invalid brcm,pins value %d\n",
767 of_node_full_name(np), pin); 767 of_node_full_name(np), pin);
768 err = -EINVAL; 768 err = -EINVAL;
769 goto out; 769 goto out;
770 } 770 }
771 771
772 if (num_funcs) { 772 if (num_funcs) {
773 func = prop_u32(funcs, (num_funcs > 1) ? i : 0); 773 func = prop_u32(funcs, (num_funcs > 1) ? i : 0);
774 err = bcm2835_pctl_dt_node_to_map_func(pc, np, pin, 774 err = bcm2835_pctl_dt_node_to_map_func(pc, np, pin,
775 func, &cur_map); 775 func, &cur_map);
776 if (err) 776 if (err)
777 goto out; 777 goto out;
778 } 778 }
779 if (num_pulls) { 779 if (num_pulls) {
780 pull = prop_u32(pulls, (num_pulls > 1) ? i : 0); 780 pull = prop_u32(pulls, (num_pulls > 1) ? i : 0);
781 err = bcm2835_pctl_dt_node_to_map_pull(pc, np, pin, 781 err = bcm2835_pctl_dt_node_to_map_pull(pc, np, pin,
782 pull, &cur_map); 782 pull, &cur_map);
783 if (err) 783 if (err)
784 goto out; 784 goto out;
785 } 785 }
786 } 786 }
787 787
788 *map = maps; 788 *map = maps;
789 *num_maps = num_pins * maps_per_pin; 789 *num_maps = num_pins * maps_per_pin;
790 790
791 return 0; 791 return 0;
792 792
793 out: 793 out:
794 kfree(maps); 794 kfree(maps);
795 return err; 795 return err;
796 } 796 }
797 797
798 static struct pinctrl_ops bcm2835_pctl_ops = { 798 static struct pinctrl_ops bcm2835_pctl_ops = {
799 .get_groups_count = bcm2835_pctl_get_groups_count, 799 .get_groups_count = bcm2835_pctl_get_groups_count,
800 .get_group_name = bcm2835_pctl_get_group_name, 800 .get_group_name = bcm2835_pctl_get_group_name,
801 .get_group_pins = bcm2835_pctl_get_group_pins, 801 .get_group_pins = bcm2835_pctl_get_group_pins,
802 .pin_dbg_show = bcm2835_pctl_pin_dbg_show, 802 .pin_dbg_show = bcm2835_pctl_pin_dbg_show,
803 .dt_node_to_map = bcm2835_pctl_dt_node_to_map, 803 .dt_node_to_map = bcm2835_pctl_dt_node_to_map,
804 .dt_free_map = bcm2835_pctl_dt_free_map, 804 .dt_free_map = bcm2835_pctl_dt_free_map,
805 }; 805 };
806 806
807 static int bcm2835_pmx_get_functions_count(struct pinctrl_dev *pctldev) 807 static int bcm2835_pmx_get_functions_count(struct pinctrl_dev *pctldev)
808 { 808 {
809 return BCM2835_FSEL_COUNT; 809 return BCM2835_FSEL_COUNT;
810 } 810 }
811 811
812 static const char *bcm2835_pmx_get_function_name(struct pinctrl_dev *pctldev, 812 static const char *bcm2835_pmx_get_function_name(struct pinctrl_dev *pctldev,
813 unsigned selector) 813 unsigned selector)
814 { 814 {
815 return bcm2835_functions[selector]; 815 return bcm2835_functions[selector];
816 } 816 }
817 817
818 static int bcm2835_pmx_get_function_groups(struct pinctrl_dev *pctldev, 818 static int bcm2835_pmx_get_function_groups(struct pinctrl_dev *pctldev,
819 unsigned selector, 819 unsigned selector,
820 const char * const **groups, 820 const char * const **groups,
821 unsigned * const num_groups) 821 unsigned * const num_groups)
822 { 822 {
823 /* every pin can do every function */ 823 /* every pin can do every function */
824 *groups = bcm2835_gpio_groups; 824 *groups = bcm2835_gpio_groups;
825 *num_groups = ARRAY_SIZE(bcm2835_gpio_groups); 825 *num_groups = ARRAY_SIZE(bcm2835_gpio_groups);
826 826
827 return 0; 827 return 0;
828 } 828 }
829 829
830 static int bcm2835_pmx_enable(struct pinctrl_dev *pctldev, 830 static int bcm2835_pmx_enable(struct pinctrl_dev *pctldev,
831 unsigned func_selector, 831 unsigned func_selector,
832 unsigned group_selector) 832 unsigned group_selector)
833 { 833 {
834 struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev); 834 struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
835 835
836 bcm2835_pinctrl_fsel_set(pc, group_selector, func_selector); 836 bcm2835_pinctrl_fsel_set(pc, group_selector, func_selector);
837 837
838 return 0; 838 return 0;
839 } 839 }
840 840
841 static void bcm2835_pmx_disable(struct pinctrl_dev *pctldev, 841 static void bcm2835_pmx_disable(struct pinctrl_dev *pctldev,
842 unsigned func_selector, 842 unsigned func_selector,
843 unsigned group_selector) 843 unsigned group_selector)
844 { 844 {
845 struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev); 845 struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
846 846
847 /* disable by setting to GPIO_IN */ 847 /* disable by setting to GPIO_IN */
848 bcm2835_pinctrl_fsel_set(pc, group_selector, BCM2835_FSEL_GPIO_IN); 848 bcm2835_pinctrl_fsel_set(pc, group_selector, BCM2835_FSEL_GPIO_IN);
849 } 849 }
850 850
851 static void bcm2835_pmx_gpio_disable_free(struct pinctrl_dev *pctldev, 851 static void bcm2835_pmx_gpio_disable_free(struct pinctrl_dev *pctldev,
852 struct pinctrl_gpio_range *range, 852 struct pinctrl_gpio_range *range,
853 unsigned offset) 853 unsigned offset)
854 { 854 {
855 struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev); 855 struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
856 856
857 /* disable by setting to GPIO_IN */ 857 /* disable by setting to GPIO_IN */
858 bcm2835_pinctrl_fsel_set(pc, offset, BCM2835_FSEL_GPIO_IN); 858 bcm2835_pinctrl_fsel_set(pc, offset, BCM2835_FSEL_GPIO_IN);
859 } 859 }
860 860
861 static int bcm2835_pmx_gpio_set_direction(struct pinctrl_dev *pctldev, 861 static int bcm2835_pmx_gpio_set_direction(struct pinctrl_dev *pctldev,
862 struct pinctrl_gpio_range *range, 862 struct pinctrl_gpio_range *range,
863 unsigned offset, 863 unsigned offset,
864 bool input) 864 bool input)
865 { 865 {
866 struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev); 866 struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
867 enum bcm2835_fsel fsel = input ? 867 enum bcm2835_fsel fsel = input ?
868 BCM2835_FSEL_GPIO_IN : BCM2835_FSEL_GPIO_OUT; 868 BCM2835_FSEL_GPIO_IN : BCM2835_FSEL_GPIO_OUT;
869 869
870 bcm2835_pinctrl_fsel_set(pc, offset, fsel); 870 bcm2835_pinctrl_fsel_set(pc, offset, fsel);
871 871
872 return 0; 872 return 0;
873 } 873 }
874 874
875 static struct pinmux_ops bcm2835_pmx_ops = { 875 static struct pinmux_ops bcm2835_pmx_ops = {
876 .get_functions_count = bcm2835_pmx_get_functions_count, 876 .get_functions_count = bcm2835_pmx_get_functions_count,
877 .get_function_name = bcm2835_pmx_get_function_name, 877 .get_function_name = bcm2835_pmx_get_function_name,
878 .get_function_groups = bcm2835_pmx_get_function_groups, 878 .get_function_groups = bcm2835_pmx_get_function_groups,
879 .enable = bcm2835_pmx_enable, 879 .enable = bcm2835_pmx_enable,
880 .disable = bcm2835_pmx_disable, 880 .disable = bcm2835_pmx_disable,
881 .gpio_disable_free = bcm2835_pmx_gpio_disable_free, 881 .gpio_disable_free = bcm2835_pmx_gpio_disable_free,
882 .gpio_set_direction = bcm2835_pmx_gpio_set_direction, 882 .gpio_set_direction = bcm2835_pmx_gpio_set_direction,
883 }; 883 };
884 884
885 static int bcm2835_pinconf_get(struct pinctrl_dev *pctldev, 885 static int bcm2835_pinconf_get(struct pinctrl_dev *pctldev,
886 unsigned pin, unsigned long *config) 886 unsigned pin, unsigned long *config)
887 { 887 {
888 /* No way to read back config in HW */ 888 /* No way to read back config in HW */
889 return -ENOTSUPP; 889 return -ENOTSUPP;
890 } 890 }
891 891
892 static int bcm2835_pinconf_set(struct pinctrl_dev *pctldev, 892 static int bcm2835_pinconf_set(struct pinctrl_dev *pctldev,
893 unsigned pin, unsigned long config) 893 unsigned pin, unsigned long config)
894 { 894 {
895 struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev); 895 struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
896 enum bcm2835_pinconf_param param = BCM2835_PINCONF_UNPACK_PARAM(config); 896 enum bcm2835_pinconf_param param = BCM2835_PINCONF_UNPACK_PARAM(config);
897 u16 arg = BCM2835_PINCONF_UNPACK_ARG(config); 897 u16 arg = BCM2835_PINCONF_UNPACK_ARG(config);
898 u32 off, bit; 898 u32 off, bit;
899 899
900 if (param != BCM2835_PINCONF_PARAM_PULL) 900 if (param != BCM2835_PINCONF_PARAM_PULL)
901 return -EINVAL; 901 return -EINVAL;
902 902
903 off = GPIO_REG_OFFSET(pin); 903 off = GPIO_REG_OFFSET(pin);
904 bit = GPIO_REG_SHIFT(pin); 904 bit = GPIO_REG_SHIFT(pin);
905 905
906 bcm2835_gpio_wr(pc, GPPUD, arg & 3); 906 bcm2835_gpio_wr(pc, GPPUD, arg & 3);
907 /* 907 /*
908 * Docs say to wait 150 cycles, but not of what. We assume a 908 * Docs say to wait 150 cycles, but not of what. We assume a
909 * 1 MHz clock here, which is pretty slow... 909 * 1 MHz clock here, which is pretty slow...
910 */ 910 */
911 udelay(150); 911 udelay(150);
912 bcm2835_gpio_wr(pc, GPPUDCLK0 + (off * 4), BIT(bit)); 912 bcm2835_gpio_wr(pc, GPPUDCLK0 + (off * 4), BIT(bit));
913 udelay(150); 913 udelay(150);
914 bcm2835_gpio_wr(pc, GPPUDCLK0 + (off * 4), 0); 914 bcm2835_gpio_wr(pc, GPPUDCLK0 + (off * 4), 0);
915 915
916 return 0; 916 return 0;
917 } 917 }
918 918
919 struct pinconf_ops bcm2835_pinconf_ops = { 919 struct pinconf_ops bcm2835_pinconf_ops = {
920 .pin_config_get = bcm2835_pinconf_get, 920 .pin_config_get = bcm2835_pinconf_get,
921 .pin_config_set = bcm2835_pinconf_set, 921 .pin_config_set = bcm2835_pinconf_set,
922 }; 922 };
923 923
924 static struct pinctrl_desc bcm2835_pinctrl_desc = { 924 static struct pinctrl_desc bcm2835_pinctrl_desc = {
925 .name = MODULE_NAME, 925 .name = MODULE_NAME,
926 .pins = bcm2835_gpio_pins, 926 .pins = bcm2835_gpio_pins,
927 .npins = ARRAY_SIZE(bcm2835_gpio_pins), 927 .npins = ARRAY_SIZE(bcm2835_gpio_pins),
928 .pctlops = &bcm2835_pctl_ops, 928 .pctlops = &bcm2835_pctl_ops,
929 .pmxops = &bcm2835_pmx_ops, 929 .pmxops = &bcm2835_pmx_ops,
930 .confops = &bcm2835_pinconf_ops, 930 .confops = &bcm2835_pinconf_ops,
931 .owner = THIS_MODULE, 931 .owner = THIS_MODULE,
932 }; 932 };
933 933
934 static struct pinctrl_gpio_range bcm2835_pinctrl_gpio_range = { 934 static struct pinctrl_gpio_range bcm2835_pinctrl_gpio_range = {
935 .name = MODULE_NAME, 935 .name = MODULE_NAME,
936 .npins = BCM2835_NUM_GPIOS, 936 .npins = BCM2835_NUM_GPIOS,
937 }; 937 };
938 938
939 static int __devinit bcm2835_pinctrl_probe(struct platform_device *pdev) 939 static int __devinit bcm2835_pinctrl_probe(struct platform_device *pdev)
940 { 940 {
941 struct device *dev = &pdev->dev; 941 struct device *dev = &pdev->dev;
942 struct device_node *np = dev->of_node; 942 struct device_node *np = dev->of_node;
943 struct bcm2835_pinctrl *pc; 943 struct bcm2835_pinctrl *pc;
944 struct resource iomem; 944 struct resource iomem;
945 int err, i; 945 int err, i;
946 BUILD_BUG_ON(ARRAY_SIZE(bcm2835_gpio_pins) != BCM2835_NUM_GPIOS); 946 BUILD_BUG_ON(ARRAY_SIZE(bcm2835_gpio_pins) != BCM2835_NUM_GPIOS);
947 BUILD_BUG_ON(ARRAY_SIZE(bcm2835_gpio_groups) != BCM2835_NUM_GPIOS); 947 BUILD_BUG_ON(ARRAY_SIZE(bcm2835_gpio_groups) != BCM2835_NUM_GPIOS);
948 948
949 pc = devm_kzalloc(dev, sizeof(*pc), GFP_KERNEL); 949 pc = devm_kzalloc(dev, sizeof(*pc), GFP_KERNEL);
950 if (!pc) 950 if (!pc)
951 return -ENOMEM; 951 return -ENOMEM;
952 952
953 platform_set_drvdata(pdev, pc); 953 platform_set_drvdata(pdev, pc);
954 pc->dev = dev; 954 pc->dev = dev;
955 955
956 err = of_address_to_resource(np, 0, &iomem); 956 err = of_address_to_resource(np, 0, &iomem);
957 if (err) { 957 if (err) {
958 dev_err(dev, "could not get IO memory\n"); 958 dev_err(dev, "could not get IO memory\n");
959 return err; 959 return err;
960 } 960 }
961 961
962 pc->base = devm_request_and_ioremap(dev, &iomem); 962 pc->base = devm_request_and_ioremap(dev, &iomem);
963 if (!pc->base) 963 if (!pc->base)
964 return -EADDRNOTAVAIL; 964 return -EADDRNOTAVAIL;
965 965
966 pc->gpio_chip = bcm2835_gpio_chip; 966 pc->gpio_chip = bcm2835_gpio_chip;
967 pc->gpio_chip.dev = dev; 967 pc->gpio_chip.dev = dev;
968 pc->gpio_chip.of_node = np; 968 pc->gpio_chip.of_node = np;
969 969
970 pc->irq_domain = irq_domain_add_linear(np, BCM2835_NUM_GPIOS, 970 pc->irq_domain = irq_domain_add_linear(np, BCM2835_NUM_GPIOS,
971 &irq_domain_simple_ops, NULL); 971 &irq_domain_simple_ops, NULL);
972 if (!pc->irq_domain) { 972 if (!pc->irq_domain) {
973 dev_err(dev, "could not create IRQ domain\n"); 973 dev_err(dev, "could not create IRQ domain\n");
974 return -ENOMEM; 974 return -ENOMEM;
975 } 975 }
976 976
977 for (i = 0; i < BCM2835_NUM_GPIOS; i++) { 977 for (i = 0; i < BCM2835_NUM_GPIOS; i++) {
978 int irq = irq_create_mapping(pc->irq_domain, i); 978 int irq = irq_create_mapping(pc->irq_domain, i);
979 irq_set_lockdep_class(irq, &gpio_lock_class); 979 irq_set_lockdep_class(irq, &gpio_lock_class);
980 irq_set_chip_and_handler(irq, &bcm2835_gpio_irq_chip, 980 irq_set_chip_and_handler(irq, &bcm2835_gpio_irq_chip,
981 handle_simple_irq); 981 handle_simple_irq);
982 irq_set_chip_data(irq, pc); 982 irq_set_chip_data(irq, pc);
983 set_irq_flags(irq, IRQF_VALID); 983 set_irq_flags(irq, IRQF_VALID);
984 } 984 }
985 985
986 for (i = 0; i < BCM2835_NUM_BANKS; i++) { 986 for (i = 0; i < BCM2835_NUM_BANKS; i++) {
987 unsigned long events; 987 unsigned long events;
988 unsigned offset; 988 unsigned offset;
989 int len; 989 int len;
990 char *name; 990 char *name;
991 991
992 /* clear event detection flags */ 992 /* clear event detection flags */
993 bcm2835_gpio_wr(pc, GPREN0 + i * 4, 0); 993 bcm2835_gpio_wr(pc, GPREN0 + i * 4, 0);
994 bcm2835_gpio_wr(pc, GPFEN0 + i * 4, 0); 994 bcm2835_gpio_wr(pc, GPFEN0 + i * 4, 0);
995 bcm2835_gpio_wr(pc, GPHEN0 + i * 4, 0); 995 bcm2835_gpio_wr(pc, GPHEN0 + i * 4, 0);
996 bcm2835_gpio_wr(pc, GPLEN0 + i * 4, 0); 996 bcm2835_gpio_wr(pc, GPLEN0 + i * 4, 0);
997 bcm2835_gpio_wr(pc, GPAREN0 + i * 4, 0); 997 bcm2835_gpio_wr(pc, GPAREN0 + i * 4, 0);
998 bcm2835_gpio_wr(pc, GPAFEN0 + i * 4, 0); 998 bcm2835_gpio_wr(pc, GPAFEN0 + i * 4, 0);
999 999
1000 /* clear all the events */ 1000 /* clear all the events */
1001 events = bcm2835_gpio_rd(pc, GPEDS0 + i * 4); 1001 events = bcm2835_gpio_rd(pc, GPEDS0 + i * 4);
1002 for_each_set_bit(offset, &events, 32) 1002 for_each_set_bit(offset, &events, 32)
1003 bcm2835_gpio_wr(pc, GPEDS0 + i * 4, BIT(offset)); 1003 bcm2835_gpio_wr(pc, GPEDS0 + i * 4, BIT(offset));
1004 1004
1005 pc->irq[i] = irq_of_parse_and_map(np, i); 1005 pc->irq[i] = irq_of_parse_and_map(np, i);
1006 pc->irq_data[i].pc = pc; 1006 pc->irq_data[i].pc = pc;
1007 pc->irq_data[i].bank = i; 1007 pc->irq_data[i].bank = i;
1008 spin_lock_init(&pc->irq_lock[i]); 1008 spin_lock_init(&pc->irq_lock[i]);
1009 1009
1010 len = strlen(dev_name(pc->dev)) + 16; 1010 len = strlen(dev_name(pc->dev)) + 16;
1011 name = devm_kzalloc(pc->dev, len, GFP_KERNEL); 1011 name = devm_kzalloc(pc->dev, len, GFP_KERNEL);
1012 if (!name) 1012 if (!name)
1013 return -ENOMEM; 1013 return -ENOMEM;
1014 snprintf(name, len, "%s:bank%d", dev_name(pc->dev), i); 1014 snprintf(name, len, "%s:bank%d", dev_name(pc->dev), i);
1015 1015
1016 err = devm_request_irq(dev, pc->irq[i], 1016 err = devm_request_irq(dev, pc->irq[i],
1017 bcm2835_gpio_irq_handler, IRQF_SHARED, 1017 bcm2835_gpio_irq_handler, IRQF_SHARED,
1018 name, &pc->irq_data[i]); 1018 name, &pc->irq_data[i]);
1019 if (err) { 1019 if (err) {
1020 dev_err(dev, "unable to request IRQ %d\n", pc->irq[i]); 1020 dev_err(dev, "unable to request IRQ %d\n", pc->irq[i]);
1021 return err; 1021 return err;
1022 } 1022 }
1023 } 1023 }
1024 1024
1025 err = gpiochip_add(&pc->gpio_chip); 1025 err = gpiochip_add(&pc->gpio_chip);
1026 if (err) { 1026 if (err) {
1027 dev_err(dev, "could not add GPIO chip\n"); 1027 dev_err(dev, "could not add GPIO chip\n");
1028 return err; 1028 return err;
1029 } 1029 }
1030 1030
1031 pc->pctl_dev = pinctrl_register(&bcm2835_pinctrl_desc, dev, pc); 1031 pc->pctl_dev = pinctrl_register(&bcm2835_pinctrl_desc, dev, pc);
1032 if (!pc->pctl_dev) { 1032 if (!pc->pctl_dev) {
1033 gpiochip_remove(&pc->gpio_chip); 1033 gpiochip_remove(&pc->gpio_chip);
1034 return -EINVAL; 1034 return -EINVAL;
1035 } 1035 }
1036 1036
1037 pc->gpio_range = bcm2835_pinctrl_gpio_range; 1037 pc->gpio_range = bcm2835_pinctrl_gpio_range;
1038 pc->gpio_range.base = pc->gpio_chip.base; 1038 pc->gpio_range.base = pc->gpio_chip.base;
1039 pc->gpio_range.gc = &pc->gpio_chip; 1039 pc->gpio_range.gc = &pc->gpio_chip;
1040 pinctrl_add_gpio_range(pc->pctl_dev, &pc->gpio_range); 1040 pinctrl_add_gpio_range(pc->pctl_dev, &pc->gpio_range);
1041 1041
1042 return 0; 1042 return 0;
1043 } 1043 }
1044 1044
1045 static int __devexit bcm2835_pinctrl_remove(struct platform_device *pdev) 1045 static int bcm2835_pinctrl_remove(struct platform_device *pdev)
1046 { 1046 {
1047 struct bcm2835_pinctrl *pc = platform_get_drvdata(pdev); 1047 struct bcm2835_pinctrl *pc = platform_get_drvdata(pdev);
1048 1048
1049 pinctrl_unregister(pc->pctl_dev); 1049 pinctrl_unregister(pc->pctl_dev);
1050 gpiochip_remove(&pc->gpio_chip); 1050 gpiochip_remove(&pc->gpio_chip);
1051 1051
1052 return 0; 1052 return 0;
1053 } 1053 }
1054 1054
1055 static struct of_device_id bcm2835_pinctrl_match[] = { 1055 static struct of_device_id bcm2835_pinctrl_match[] = {
1056 { .compatible = "brcm,bcm2835-gpio" }, 1056 { .compatible = "brcm,bcm2835-gpio" },
1057 {} 1057 {}
1058 }; 1058 };
1059 MODULE_DEVICE_TABLE(of, bcm2835_pinctrl_match); 1059 MODULE_DEVICE_TABLE(of, bcm2835_pinctrl_match);
1060 1060
1061 static struct platform_driver bcm2835_pinctrl_driver = { 1061 static struct platform_driver bcm2835_pinctrl_driver = {
1062 .probe = bcm2835_pinctrl_probe, 1062 .probe = bcm2835_pinctrl_probe,
1063 .remove = bcm2835_pinctrl_remove, 1063 .remove = bcm2835_pinctrl_remove,
1064 .driver = { 1064 .driver = {
1065 .name = MODULE_NAME, 1065 .name = MODULE_NAME,
1066 .owner = THIS_MODULE, 1066 .owner = THIS_MODULE,
1067 .of_match_table = bcm2835_pinctrl_match, 1067 .of_match_table = bcm2835_pinctrl_match,
1068 }, 1068 },
1069 }; 1069 };
1070 module_platform_driver(bcm2835_pinctrl_driver); 1070 module_platform_driver(bcm2835_pinctrl_driver);
1071 1071
1072 MODULE_AUTHOR("Chris Boot, Simon Arlott, Stephen Warren"); 1072 MODULE_AUTHOR("Chris Boot, Simon Arlott, Stephen Warren");
1073 MODULE_DESCRIPTION("BCM2835 Pin control driver"); 1073 MODULE_DESCRIPTION("BCM2835 Pin control driver");
1074 MODULE_LICENSE("GPL"); 1074 MODULE_LICENSE("GPL");
1075 1075
drivers/pinctrl/pinctrl-imx.c
1 /* 1 /*
2 * Core driver for the imx pin controller 2 * Core driver for the imx pin controller
3 * 3 *
4 * Copyright (C) 2012 Freescale Semiconductor, Inc. 4 * Copyright (C) 2012 Freescale Semiconductor, Inc.
5 * Copyright (C) 2012 Linaro Ltd. 5 * Copyright (C) 2012 Linaro Ltd.
6 * 6 *
7 * Author: Dong Aisheng <dong.aisheng@linaro.org> 7 * Author: Dong Aisheng <dong.aisheng@linaro.org>
8 * 8 *
9 * This program is free software; you can redistribute it and/or modify 9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by 10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or 11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version. 12 * (at your option) any later version.
13 */ 13 */
14 14
15 #include <linux/err.h> 15 #include <linux/err.h>
16 #include <linux/init.h> 16 #include <linux/init.h>
17 #include <linux/io.h> 17 #include <linux/io.h>
18 #include <linux/module.h> 18 #include <linux/module.h>
19 #include <linux/of.h> 19 #include <linux/of.h>
20 #include <linux/of_device.h> 20 #include <linux/of_device.h>
21 #include <linux/pinctrl/machine.h> 21 #include <linux/pinctrl/machine.h>
22 #include <linux/pinctrl/pinconf.h> 22 #include <linux/pinctrl/pinconf.h>
23 #include <linux/pinctrl/pinctrl.h> 23 #include <linux/pinctrl/pinctrl.h>
24 #include <linux/pinctrl/pinmux.h> 24 #include <linux/pinctrl/pinmux.h>
25 #include <linux/slab.h> 25 #include <linux/slab.h>
26 26
27 #include "core.h" 27 #include "core.h"
28 #include "pinctrl-imx.h" 28 #include "pinctrl-imx.h"
29 29
30 #define IMX_PMX_DUMP(info, p, m, c, n) \ 30 #define IMX_PMX_DUMP(info, p, m, c, n) \
31 { \ 31 { \
32 int i, j; \ 32 int i, j; \
33 printk(KERN_DEBUG "Format: Pin Mux Config\n"); \ 33 printk(KERN_DEBUG "Format: Pin Mux Config\n"); \
34 for (i = 0; i < n; i++) { \ 34 for (i = 0; i < n; i++) { \
35 j = p[i]; \ 35 j = p[i]; \
36 printk(KERN_DEBUG "%s %d 0x%lx\n", \ 36 printk(KERN_DEBUG "%s %d 0x%lx\n", \
37 info->pins[j].name, \ 37 info->pins[j].name, \
38 m[i], c[i]); \ 38 m[i], c[i]); \
39 } \ 39 } \
40 } 40 }
41 41
42 /* The bits in CONFIG cell defined in binding doc*/ 42 /* The bits in CONFIG cell defined in binding doc*/
43 #define IMX_NO_PAD_CTL 0x80000000 /* no pin config need */ 43 #define IMX_NO_PAD_CTL 0x80000000 /* no pin config need */
44 #define IMX_PAD_SION 0x40000000 /* set SION */ 44 #define IMX_PAD_SION 0x40000000 /* set SION */
45 45
46 /** 46 /**
47 * @dev: a pointer back to containing device 47 * @dev: a pointer back to containing device
48 * @base: the offset to the controller in virtual memory 48 * @base: the offset to the controller in virtual memory
49 */ 49 */
50 struct imx_pinctrl { 50 struct imx_pinctrl {
51 struct device *dev; 51 struct device *dev;
52 struct pinctrl_dev *pctl; 52 struct pinctrl_dev *pctl;
53 void __iomem *base; 53 void __iomem *base;
54 const struct imx_pinctrl_soc_info *info; 54 const struct imx_pinctrl_soc_info *info;
55 }; 55 };
56 56
57 static const struct imx_pin_reg *imx_find_pin_reg( 57 static const struct imx_pin_reg *imx_find_pin_reg(
58 const struct imx_pinctrl_soc_info *info, 58 const struct imx_pinctrl_soc_info *info,
59 unsigned pin, bool is_mux, unsigned mux) 59 unsigned pin, bool is_mux, unsigned mux)
60 { 60 {
61 const struct imx_pin_reg *pin_reg = NULL; 61 const struct imx_pin_reg *pin_reg = NULL;
62 int i; 62 int i;
63 63
64 for (i = 0; i < info->npin_regs; i++) { 64 for (i = 0; i < info->npin_regs; i++) {
65 pin_reg = &info->pin_regs[i]; 65 pin_reg = &info->pin_regs[i];
66 if (pin_reg->pid != pin) 66 if (pin_reg->pid != pin)
67 continue; 67 continue;
68 if (!is_mux) 68 if (!is_mux)
69 break; 69 break;
70 else if (pin_reg->mux_mode == (mux & IMX_MUX_MASK)) 70 else if (pin_reg->mux_mode == (mux & IMX_MUX_MASK))
71 break; 71 break;
72 } 72 }
73 73
74 if (!pin_reg) { 74 if (!pin_reg) {
75 dev_err(info->dev, "Pin(%s): unable to find pin reg map\n", 75 dev_err(info->dev, "Pin(%s): unable to find pin reg map\n",
76 info->pins[pin].name); 76 info->pins[pin].name);
77 return NULL; 77 return NULL;
78 } 78 }
79 79
80 return pin_reg; 80 return pin_reg;
81 } 81 }
82 82
83 static const inline struct imx_pin_group *imx_pinctrl_find_group_by_name( 83 static const inline struct imx_pin_group *imx_pinctrl_find_group_by_name(
84 const struct imx_pinctrl_soc_info *info, 84 const struct imx_pinctrl_soc_info *info,
85 const char *name) 85 const char *name)
86 { 86 {
87 const struct imx_pin_group *grp = NULL; 87 const struct imx_pin_group *grp = NULL;
88 int i; 88 int i;
89 89
90 for (i = 0; i < info->ngroups; i++) { 90 for (i = 0; i < info->ngroups; i++) {
91 if (!strcmp(info->groups[i].name, name)) { 91 if (!strcmp(info->groups[i].name, name)) {
92 grp = &info->groups[i]; 92 grp = &info->groups[i];
93 break; 93 break;
94 } 94 }
95 } 95 }
96 96
97 return grp; 97 return grp;
98 } 98 }
99 99
100 static int imx_get_groups_count(struct pinctrl_dev *pctldev) 100 static int imx_get_groups_count(struct pinctrl_dev *pctldev)
101 { 101 {
102 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); 102 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
103 const struct imx_pinctrl_soc_info *info = ipctl->info; 103 const struct imx_pinctrl_soc_info *info = ipctl->info;
104 104
105 return info->ngroups; 105 return info->ngroups;
106 } 106 }
107 107
108 static const char *imx_get_group_name(struct pinctrl_dev *pctldev, 108 static const char *imx_get_group_name(struct pinctrl_dev *pctldev,
109 unsigned selector) 109 unsigned selector)
110 { 110 {
111 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); 111 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
112 const struct imx_pinctrl_soc_info *info = ipctl->info; 112 const struct imx_pinctrl_soc_info *info = ipctl->info;
113 113
114 return info->groups[selector].name; 114 return info->groups[selector].name;
115 } 115 }
116 116
117 static int imx_get_group_pins(struct pinctrl_dev *pctldev, unsigned selector, 117 static int imx_get_group_pins(struct pinctrl_dev *pctldev, unsigned selector,
118 const unsigned **pins, 118 const unsigned **pins,
119 unsigned *npins) 119 unsigned *npins)
120 { 120 {
121 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); 121 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
122 const struct imx_pinctrl_soc_info *info = ipctl->info; 122 const struct imx_pinctrl_soc_info *info = ipctl->info;
123 123
124 if (selector >= info->ngroups) 124 if (selector >= info->ngroups)
125 return -EINVAL; 125 return -EINVAL;
126 126
127 *pins = info->groups[selector].pins; 127 *pins = info->groups[selector].pins;
128 *npins = info->groups[selector].npins; 128 *npins = info->groups[selector].npins;
129 129
130 return 0; 130 return 0;
131 } 131 }
132 132
133 static void imx_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s, 133 static void imx_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s,
134 unsigned offset) 134 unsigned offset)
135 { 135 {
136 seq_printf(s, "%s", dev_name(pctldev->dev)); 136 seq_printf(s, "%s", dev_name(pctldev->dev));
137 } 137 }
138 138
139 static int imx_dt_node_to_map(struct pinctrl_dev *pctldev, 139 static int imx_dt_node_to_map(struct pinctrl_dev *pctldev,
140 struct device_node *np, 140 struct device_node *np,
141 struct pinctrl_map **map, unsigned *num_maps) 141 struct pinctrl_map **map, unsigned *num_maps)
142 { 142 {
143 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); 143 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
144 const struct imx_pinctrl_soc_info *info = ipctl->info; 144 const struct imx_pinctrl_soc_info *info = ipctl->info;
145 const struct imx_pin_group *grp; 145 const struct imx_pin_group *grp;
146 struct pinctrl_map *new_map; 146 struct pinctrl_map *new_map;
147 struct device_node *parent; 147 struct device_node *parent;
148 int map_num = 1; 148 int map_num = 1;
149 int i, j; 149 int i, j;
150 150
151 /* 151 /*
152 * first find the group of this node and check if we need create 152 * first find the group of this node and check if we need create
153 * config maps for pins 153 * config maps for pins
154 */ 154 */
155 grp = imx_pinctrl_find_group_by_name(info, np->name); 155 grp = imx_pinctrl_find_group_by_name(info, np->name);
156 if (!grp) { 156 if (!grp) {
157 dev_err(info->dev, "unable to find group for node %s\n", 157 dev_err(info->dev, "unable to find group for node %s\n",
158 np->name); 158 np->name);
159 return -EINVAL; 159 return -EINVAL;
160 } 160 }
161 161
162 for (i = 0; i < grp->npins; i++) { 162 for (i = 0; i < grp->npins; i++) {
163 if (!(grp->configs[i] & IMX_NO_PAD_CTL)) 163 if (!(grp->configs[i] & IMX_NO_PAD_CTL))
164 map_num++; 164 map_num++;
165 } 165 }
166 166
167 new_map = kmalloc(sizeof(struct pinctrl_map) * map_num, GFP_KERNEL); 167 new_map = kmalloc(sizeof(struct pinctrl_map) * map_num, GFP_KERNEL);
168 if (!new_map) 168 if (!new_map)
169 return -ENOMEM; 169 return -ENOMEM;
170 170
171 *map = new_map; 171 *map = new_map;
172 *num_maps = map_num; 172 *num_maps = map_num;
173 173
174 /* create mux map */ 174 /* create mux map */
175 parent = of_get_parent(np); 175 parent = of_get_parent(np);
176 if (!parent) { 176 if (!parent) {
177 kfree(new_map); 177 kfree(new_map);
178 return -EINVAL; 178 return -EINVAL;
179 } 179 }
180 new_map[0].type = PIN_MAP_TYPE_MUX_GROUP; 180 new_map[0].type = PIN_MAP_TYPE_MUX_GROUP;
181 new_map[0].data.mux.function = parent->name; 181 new_map[0].data.mux.function = parent->name;
182 new_map[0].data.mux.group = np->name; 182 new_map[0].data.mux.group = np->name;
183 of_node_put(parent); 183 of_node_put(parent);
184 184
185 /* create config map */ 185 /* create config map */
186 new_map++; 186 new_map++;
187 for (i = j = 0; i < grp->npins; i++) { 187 for (i = j = 0; i < grp->npins; i++) {
188 if (!(grp->configs[i] & IMX_NO_PAD_CTL)) { 188 if (!(grp->configs[i] & IMX_NO_PAD_CTL)) {
189 new_map[j].type = PIN_MAP_TYPE_CONFIGS_PIN; 189 new_map[j].type = PIN_MAP_TYPE_CONFIGS_PIN;
190 new_map[j].data.configs.group_or_pin = 190 new_map[j].data.configs.group_or_pin =
191 pin_get_name(pctldev, grp->pins[i]); 191 pin_get_name(pctldev, grp->pins[i]);
192 new_map[j].data.configs.configs = &grp->configs[i]; 192 new_map[j].data.configs.configs = &grp->configs[i];
193 new_map[j].data.configs.num_configs = 1; 193 new_map[j].data.configs.num_configs = 1;
194 j++; 194 j++;
195 } 195 }
196 } 196 }
197 197
198 dev_dbg(pctldev->dev, "maps: function %s group %s num %d\n", 198 dev_dbg(pctldev->dev, "maps: function %s group %s num %d\n",
199 (*map)->data.mux.function, (*map)->data.mux.group, map_num); 199 (*map)->data.mux.function, (*map)->data.mux.group, map_num);
200 200
201 return 0; 201 return 0;
202 } 202 }
203 203
204 static void imx_dt_free_map(struct pinctrl_dev *pctldev, 204 static void imx_dt_free_map(struct pinctrl_dev *pctldev,
205 struct pinctrl_map *map, unsigned num_maps) 205 struct pinctrl_map *map, unsigned num_maps)
206 { 206 {
207 kfree(map); 207 kfree(map);
208 } 208 }
209 209
210 static struct pinctrl_ops imx_pctrl_ops = { 210 static struct pinctrl_ops imx_pctrl_ops = {
211 .get_groups_count = imx_get_groups_count, 211 .get_groups_count = imx_get_groups_count,
212 .get_group_name = imx_get_group_name, 212 .get_group_name = imx_get_group_name,
213 .get_group_pins = imx_get_group_pins, 213 .get_group_pins = imx_get_group_pins,
214 .pin_dbg_show = imx_pin_dbg_show, 214 .pin_dbg_show = imx_pin_dbg_show,
215 .dt_node_to_map = imx_dt_node_to_map, 215 .dt_node_to_map = imx_dt_node_to_map,
216 .dt_free_map = imx_dt_free_map, 216 .dt_free_map = imx_dt_free_map,
217 217
218 }; 218 };
219 219
220 static int imx_pmx_enable(struct pinctrl_dev *pctldev, unsigned selector, 220 static int imx_pmx_enable(struct pinctrl_dev *pctldev, unsigned selector,
221 unsigned group) 221 unsigned group)
222 { 222 {
223 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); 223 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
224 const struct imx_pinctrl_soc_info *info = ipctl->info; 224 const struct imx_pinctrl_soc_info *info = ipctl->info;
225 const struct imx_pin_reg *pin_reg; 225 const struct imx_pin_reg *pin_reg;
226 const unsigned *pins, *mux; 226 const unsigned *pins, *mux;
227 unsigned int npins, pin_id; 227 unsigned int npins, pin_id;
228 int i; 228 int i;
229 229
230 /* 230 /*
231 * Configure the mux mode for each pin in the group for a specific 231 * Configure the mux mode for each pin in the group for a specific
232 * function. 232 * function.
233 */ 233 */
234 pins = info->groups[group].pins; 234 pins = info->groups[group].pins;
235 npins = info->groups[group].npins; 235 npins = info->groups[group].npins;
236 mux = info->groups[group].mux_mode; 236 mux = info->groups[group].mux_mode;
237 237
238 WARN_ON(!pins || !npins || !mux); 238 WARN_ON(!pins || !npins || !mux);
239 239
240 dev_dbg(ipctl->dev, "enable function %s group %s\n", 240 dev_dbg(ipctl->dev, "enable function %s group %s\n",
241 info->functions[selector].name, info->groups[group].name); 241 info->functions[selector].name, info->groups[group].name);
242 242
243 for (i = 0; i < npins; i++) { 243 for (i = 0; i < npins; i++) {
244 pin_id = pins[i]; 244 pin_id = pins[i];
245 245
246 pin_reg = imx_find_pin_reg(info, pin_id, 1, mux[i]); 246 pin_reg = imx_find_pin_reg(info, pin_id, 1, mux[i]);
247 if (!pin_reg) 247 if (!pin_reg)
248 return -EINVAL; 248 return -EINVAL;
249 249
250 if (!pin_reg->mux_reg) { 250 if (!pin_reg->mux_reg) {
251 dev_err(ipctl->dev, "Pin(%s) does not support mux function\n", 251 dev_err(ipctl->dev, "Pin(%s) does not support mux function\n",
252 info->pins[pin_id].name); 252 info->pins[pin_id].name);
253 return -EINVAL; 253 return -EINVAL;
254 } 254 }
255 255
256 writel(mux[i], ipctl->base + pin_reg->mux_reg); 256 writel(mux[i], ipctl->base + pin_reg->mux_reg);
257 dev_dbg(ipctl->dev, "write: offset 0x%x val 0x%x\n", 257 dev_dbg(ipctl->dev, "write: offset 0x%x val 0x%x\n",
258 pin_reg->mux_reg, mux[i]); 258 pin_reg->mux_reg, mux[i]);
259 259
260 /* some pins also need select input setting, set it if found */ 260 /* some pins also need select input setting, set it if found */
261 if (pin_reg->input_reg) { 261 if (pin_reg->input_reg) {
262 writel(pin_reg->input_val, ipctl->base + pin_reg->input_reg); 262 writel(pin_reg->input_val, ipctl->base + pin_reg->input_reg);
263 dev_dbg(ipctl->dev, 263 dev_dbg(ipctl->dev,
264 "==>select_input: offset 0x%x val 0x%x\n", 264 "==>select_input: offset 0x%x val 0x%x\n",
265 pin_reg->input_reg, pin_reg->input_val); 265 pin_reg->input_reg, pin_reg->input_val);
266 } 266 }
267 } 267 }
268 268
269 return 0; 269 return 0;
270 } 270 }
271 271
272 static int imx_pmx_get_funcs_count(struct pinctrl_dev *pctldev) 272 static int imx_pmx_get_funcs_count(struct pinctrl_dev *pctldev)
273 { 273 {
274 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); 274 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
275 const struct imx_pinctrl_soc_info *info = ipctl->info; 275 const struct imx_pinctrl_soc_info *info = ipctl->info;
276 276
277 return info->nfunctions; 277 return info->nfunctions;
278 } 278 }
279 279
280 static const char *imx_pmx_get_func_name(struct pinctrl_dev *pctldev, 280 static const char *imx_pmx_get_func_name(struct pinctrl_dev *pctldev,
281 unsigned selector) 281 unsigned selector)
282 { 282 {
283 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); 283 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
284 const struct imx_pinctrl_soc_info *info = ipctl->info; 284 const struct imx_pinctrl_soc_info *info = ipctl->info;
285 285
286 return info->functions[selector].name; 286 return info->functions[selector].name;
287 } 287 }
288 288
289 static int imx_pmx_get_groups(struct pinctrl_dev *pctldev, unsigned selector, 289 static int imx_pmx_get_groups(struct pinctrl_dev *pctldev, unsigned selector,
290 const char * const **groups, 290 const char * const **groups,
291 unsigned * const num_groups) 291 unsigned * const num_groups)
292 { 292 {
293 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); 293 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
294 const struct imx_pinctrl_soc_info *info = ipctl->info; 294 const struct imx_pinctrl_soc_info *info = ipctl->info;
295 295
296 *groups = info->functions[selector].groups; 296 *groups = info->functions[selector].groups;
297 *num_groups = info->functions[selector].num_groups; 297 *num_groups = info->functions[selector].num_groups;
298 298
299 return 0; 299 return 0;
300 } 300 }
301 301
302 static struct pinmux_ops imx_pmx_ops = { 302 static struct pinmux_ops imx_pmx_ops = {
303 .get_functions_count = imx_pmx_get_funcs_count, 303 .get_functions_count = imx_pmx_get_funcs_count,
304 .get_function_name = imx_pmx_get_func_name, 304 .get_function_name = imx_pmx_get_func_name,
305 .get_function_groups = imx_pmx_get_groups, 305 .get_function_groups = imx_pmx_get_groups,
306 .enable = imx_pmx_enable, 306 .enable = imx_pmx_enable,
307 }; 307 };
308 308
309 static int imx_pinconf_get(struct pinctrl_dev *pctldev, 309 static int imx_pinconf_get(struct pinctrl_dev *pctldev,
310 unsigned pin_id, unsigned long *config) 310 unsigned pin_id, unsigned long *config)
311 { 311 {
312 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); 312 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
313 const struct imx_pinctrl_soc_info *info = ipctl->info; 313 const struct imx_pinctrl_soc_info *info = ipctl->info;
314 const struct imx_pin_reg *pin_reg; 314 const struct imx_pin_reg *pin_reg;
315 315
316 pin_reg = imx_find_pin_reg(info, pin_id, 0, 0); 316 pin_reg = imx_find_pin_reg(info, pin_id, 0, 0);
317 if (!pin_reg) 317 if (!pin_reg)
318 return -EINVAL; 318 return -EINVAL;
319 319
320 if (!pin_reg->conf_reg) { 320 if (!pin_reg->conf_reg) {
321 dev_err(info->dev, "Pin(%s) does not support config function\n", 321 dev_err(info->dev, "Pin(%s) does not support config function\n",
322 info->pins[pin_id].name); 322 info->pins[pin_id].name);
323 return -EINVAL; 323 return -EINVAL;
324 } 324 }
325 325
326 *config = readl(ipctl->base + pin_reg->conf_reg); 326 *config = readl(ipctl->base + pin_reg->conf_reg);
327 327
328 return 0; 328 return 0;
329 } 329 }
330 330
331 static int imx_pinconf_set(struct pinctrl_dev *pctldev, 331 static int imx_pinconf_set(struct pinctrl_dev *pctldev,
332 unsigned pin_id, unsigned long config) 332 unsigned pin_id, unsigned long config)
333 { 333 {
334 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); 334 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
335 const struct imx_pinctrl_soc_info *info = ipctl->info; 335 const struct imx_pinctrl_soc_info *info = ipctl->info;
336 const struct imx_pin_reg *pin_reg; 336 const struct imx_pin_reg *pin_reg;
337 337
338 pin_reg = imx_find_pin_reg(info, pin_id, 0, 0); 338 pin_reg = imx_find_pin_reg(info, pin_id, 0, 0);
339 if (!pin_reg) 339 if (!pin_reg)
340 return -EINVAL; 340 return -EINVAL;
341 341
342 if (!pin_reg->conf_reg) { 342 if (!pin_reg->conf_reg) {
343 dev_err(info->dev, "Pin(%s) does not support config function\n", 343 dev_err(info->dev, "Pin(%s) does not support config function\n",
344 info->pins[pin_id].name); 344 info->pins[pin_id].name);
345 return -EINVAL; 345 return -EINVAL;
346 } 346 }
347 347
348 dev_dbg(ipctl->dev, "pinconf set pin %s\n", 348 dev_dbg(ipctl->dev, "pinconf set pin %s\n",
349 info->pins[pin_id].name); 349 info->pins[pin_id].name);
350 350
351 writel(config, ipctl->base + pin_reg->conf_reg); 351 writel(config, ipctl->base + pin_reg->conf_reg);
352 dev_dbg(ipctl->dev, "write: offset 0x%x val 0x%lx\n", 352 dev_dbg(ipctl->dev, "write: offset 0x%x val 0x%lx\n",
353 pin_reg->conf_reg, config); 353 pin_reg->conf_reg, config);
354 354
355 return 0; 355 return 0;
356 } 356 }
357 357
358 static void imx_pinconf_dbg_show(struct pinctrl_dev *pctldev, 358 static void imx_pinconf_dbg_show(struct pinctrl_dev *pctldev,
359 struct seq_file *s, unsigned pin_id) 359 struct seq_file *s, unsigned pin_id)
360 { 360 {
361 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); 361 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
362 const struct imx_pinctrl_soc_info *info = ipctl->info; 362 const struct imx_pinctrl_soc_info *info = ipctl->info;
363 const struct imx_pin_reg *pin_reg; 363 const struct imx_pin_reg *pin_reg;
364 unsigned long config; 364 unsigned long config;
365 365
366 pin_reg = imx_find_pin_reg(info, pin_id, 0, 0); 366 pin_reg = imx_find_pin_reg(info, pin_id, 0, 0);
367 if (!pin_reg || !pin_reg->conf_reg) { 367 if (!pin_reg || !pin_reg->conf_reg) {
368 seq_printf(s, "N/A"); 368 seq_printf(s, "N/A");
369 return; 369 return;
370 } 370 }
371 371
372 config = readl(ipctl->base + pin_reg->conf_reg); 372 config = readl(ipctl->base + pin_reg->conf_reg);
373 seq_printf(s, "0x%lx", config); 373 seq_printf(s, "0x%lx", config);
374 } 374 }
375 375
376 static void imx_pinconf_group_dbg_show(struct pinctrl_dev *pctldev, 376 static void imx_pinconf_group_dbg_show(struct pinctrl_dev *pctldev,
377 struct seq_file *s, unsigned group) 377 struct seq_file *s, unsigned group)
378 { 378 {
379 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); 379 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
380 const struct imx_pinctrl_soc_info *info = ipctl->info; 380 const struct imx_pinctrl_soc_info *info = ipctl->info;
381 struct imx_pin_group *grp; 381 struct imx_pin_group *grp;
382 unsigned long config; 382 unsigned long config;
383 const char *name; 383 const char *name;
384 int i, ret; 384 int i, ret;
385 385
386 if (group > info->ngroups) 386 if (group > info->ngroups)
387 return; 387 return;
388 388
389 seq_printf(s, "\n"); 389 seq_printf(s, "\n");
390 grp = &info->groups[group]; 390 grp = &info->groups[group];
391 for (i = 0; i < grp->npins; i++) { 391 for (i = 0; i < grp->npins; i++) {
392 name = pin_get_name(pctldev, grp->pins[i]); 392 name = pin_get_name(pctldev, grp->pins[i]);
393 ret = imx_pinconf_get(pctldev, grp->pins[i], &config); 393 ret = imx_pinconf_get(pctldev, grp->pins[i], &config);
394 if (ret) 394 if (ret)
395 return; 395 return;
396 seq_printf(s, "%s: 0x%lx", name, config); 396 seq_printf(s, "%s: 0x%lx", name, config);
397 } 397 }
398 } 398 }
399 399
400 struct pinconf_ops imx_pinconf_ops = { 400 struct pinconf_ops imx_pinconf_ops = {
401 .pin_config_get = imx_pinconf_get, 401 .pin_config_get = imx_pinconf_get,
402 .pin_config_set = imx_pinconf_set, 402 .pin_config_set = imx_pinconf_set,
403 .pin_config_dbg_show = imx_pinconf_dbg_show, 403 .pin_config_dbg_show = imx_pinconf_dbg_show,
404 .pin_config_group_dbg_show = imx_pinconf_group_dbg_show, 404 .pin_config_group_dbg_show = imx_pinconf_group_dbg_show,
405 }; 405 };
406 406
407 static struct pinctrl_desc imx_pinctrl_desc = { 407 static struct pinctrl_desc imx_pinctrl_desc = {
408 .pctlops = &imx_pctrl_ops, 408 .pctlops = &imx_pctrl_ops,
409 .pmxops = &imx_pmx_ops, 409 .pmxops = &imx_pmx_ops,
410 .confops = &imx_pinconf_ops, 410 .confops = &imx_pinconf_ops,
411 .owner = THIS_MODULE, 411 .owner = THIS_MODULE,
412 }; 412 };
413 413
414 /* decode pin id and mux from pin function id got from device tree*/ 414 /* decode pin id and mux from pin function id got from device tree*/
415 static int imx_pinctrl_get_pin_id_and_mux(const struct imx_pinctrl_soc_info *info, 415 static int imx_pinctrl_get_pin_id_and_mux(const struct imx_pinctrl_soc_info *info,
416 unsigned int pin_func_id, unsigned int *pin_id, 416 unsigned int pin_func_id, unsigned int *pin_id,
417 unsigned int *mux) 417 unsigned int *mux)
418 { 418 {
419 if (pin_func_id > info->npin_regs) 419 if (pin_func_id > info->npin_regs)
420 return -EINVAL; 420 return -EINVAL;
421 421
422 *pin_id = info->pin_regs[pin_func_id].pid; 422 *pin_id = info->pin_regs[pin_func_id].pid;
423 *mux = info->pin_regs[pin_func_id].mux_mode; 423 *mux = info->pin_regs[pin_func_id].mux_mode;
424 424
425 return 0; 425 return 0;
426 } 426 }
427 427
428 static int __devinit imx_pinctrl_parse_groups(struct device_node *np, 428 static int __devinit imx_pinctrl_parse_groups(struct device_node *np,
429 struct imx_pin_group *grp, 429 struct imx_pin_group *grp,
430 struct imx_pinctrl_soc_info *info, 430 struct imx_pinctrl_soc_info *info,
431 u32 index) 431 u32 index)
432 { 432 {
433 unsigned int pin_func_id; 433 unsigned int pin_func_id;
434 int ret, size; 434 int ret, size;
435 const __be32 *list; 435 const __be32 *list;
436 int i, j; 436 int i, j;
437 u32 config; 437 u32 config;
438 438
439 dev_dbg(info->dev, "group(%d): %s\n", index, np->name); 439 dev_dbg(info->dev, "group(%d): %s\n", index, np->name);
440 440
441 /* Initialise group */ 441 /* Initialise group */
442 grp->name = np->name; 442 grp->name = np->name;
443 443
444 /* 444 /*
445 * the binding format is fsl,pins = <PIN_FUNC_ID CONFIG ...>, 445 * the binding format is fsl,pins = <PIN_FUNC_ID CONFIG ...>,
446 * do sanity check and calculate pins number 446 * do sanity check and calculate pins number
447 */ 447 */
448 list = of_get_property(np, "fsl,pins", &size); 448 list = of_get_property(np, "fsl,pins", &size);
449 /* we do not check return since it's safe node passed down */ 449 /* we do not check return since it's safe node passed down */
450 size /= sizeof(*list); 450 size /= sizeof(*list);
451 if (!size || size % 2) { 451 if (!size || size % 2) {
452 dev_err(info->dev, "wrong pins number or pins and configs should be pairs\n"); 452 dev_err(info->dev, "wrong pins number or pins and configs should be pairs\n");
453 return -EINVAL; 453 return -EINVAL;
454 } 454 }
455 455
456 grp->npins = size / 2; 456 grp->npins = size / 2;
457 grp->pins = devm_kzalloc(info->dev, grp->npins * sizeof(unsigned int), 457 grp->pins = devm_kzalloc(info->dev, grp->npins * sizeof(unsigned int),
458 GFP_KERNEL); 458 GFP_KERNEL);
459 grp->mux_mode = devm_kzalloc(info->dev, grp->npins * sizeof(unsigned int), 459 grp->mux_mode = devm_kzalloc(info->dev, grp->npins * sizeof(unsigned int),
460 GFP_KERNEL); 460 GFP_KERNEL);
461 grp->configs = devm_kzalloc(info->dev, grp->npins * sizeof(unsigned long), 461 grp->configs = devm_kzalloc(info->dev, grp->npins * sizeof(unsigned long),
462 GFP_KERNEL); 462 GFP_KERNEL);
463 for (i = 0, j = 0; i < size; i += 2, j++) { 463 for (i = 0, j = 0; i < size; i += 2, j++) {
464 pin_func_id = be32_to_cpu(*list++); 464 pin_func_id = be32_to_cpu(*list++);
465 ret = imx_pinctrl_get_pin_id_and_mux(info, pin_func_id, 465 ret = imx_pinctrl_get_pin_id_and_mux(info, pin_func_id,
466 &grp->pins[j], &grp->mux_mode[j]); 466 &grp->pins[j], &grp->mux_mode[j]);
467 if (ret) { 467 if (ret) {
468 dev_err(info->dev, "get invalid pin function id\n"); 468 dev_err(info->dev, "get invalid pin function id\n");
469 return -EINVAL; 469 return -EINVAL;
470 } 470 }
471 /* SION bit is in mux register */ 471 /* SION bit is in mux register */
472 config = be32_to_cpu(*list++); 472 config = be32_to_cpu(*list++);
473 if (config & IMX_PAD_SION) 473 if (config & IMX_PAD_SION)
474 grp->mux_mode[j] |= IOMUXC_CONFIG_SION; 474 grp->mux_mode[j] |= IOMUXC_CONFIG_SION;
475 grp->configs[j] = config & ~IMX_PAD_SION; 475 grp->configs[j] = config & ~IMX_PAD_SION;
476 } 476 }
477 477
478 #ifdef DEBUG 478 #ifdef DEBUG
479 IMX_PMX_DUMP(info, grp->pins, grp->mux_mode, grp->configs, grp->npins); 479 IMX_PMX_DUMP(info, grp->pins, grp->mux_mode, grp->configs, grp->npins);
480 #endif 480 #endif
481 481
482 return 0; 482 return 0;
483 } 483 }
484 484
485 static int __devinit imx_pinctrl_parse_functions(struct device_node *np, 485 static int __devinit imx_pinctrl_parse_functions(struct device_node *np,
486 struct imx_pinctrl_soc_info *info, u32 index) 486 struct imx_pinctrl_soc_info *info, u32 index)
487 { 487 {
488 struct device_node *child; 488 struct device_node *child;
489 struct imx_pmx_func *func; 489 struct imx_pmx_func *func;
490 struct imx_pin_group *grp; 490 struct imx_pin_group *grp;
491 int ret; 491 int ret;
492 static u32 grp_index; 492 static u32 grp_index;
493 u32 i = 0; 493 u32 i = 0;
494 494
495 dev_dbg(info->dev, "parse function(%d): %s\n", index, np->name); 495 dev_dbg(info->dev, "parse function(%d): %s\n", index, np->name);
496 496
497 func = &info->functions[index]; 497 func = &info->functions[index];
498 498
499 /* Initialise function */ 499 /* Initialise function */
500 func->name = np->name; 500 func->name = np->name;
501 func->num_groups = of_get_child_count(np); 501 func->num_groups = of_get_child_count(np);
502 if (func->num_groups <= 0) { 502 if (func->num_groups <= 0) {
503 dev_err(info->dev, "no groups defined\n"); 503 dev_err(info->dev, "no groups defined\n");
504 return -EINVAL; 504 return -EINVAL;
505 } 505 }
506 func->groups = devm_kzalloc(info->dev, 506 func->groups = devm_kzalloc(info->dev,
507 func->num_groups * sizeof(char *), GFP_KERNEL); 507 func->num_groups * sizeof(char *), GFP_KERNEL);
508 508
509 for_each_child_of_node(np, child) { 509 for_each_child_of_node(np, child) {
510 func->groups[i] = child->name; 510 func->groups[i] = child->name;
511 grp = &info->groups[grp_index++]; 511 grp = &info->groups[grp_index++];
512 ret = imx_pinctrl_parse_groups(child, grp, info, i++); 512 ret = imx_pinctrl_parse_groups(child, grp, info, i++);
513 if (ret) 513 if (ret)
514 return ret; 514 return ret;
515 } 515 }
516 516
517 return 0; 517 return 0;
518 } 518 }
519 519
520 static int __devinit imx_pinctrl_probe_dt(struct platform_device *pdev, 520 static int __devinit imx_pinctrl_probe_dt(struct platform_device *pdev,
521 struct imx_pinctrl_soc_info *info) 521 struct imx_pinctrl_soc_info *info)
522 { 522 {
523 struct device_node *np = pdev->dev.of_node; 523 struct device_node *np = pdev->dev.of_node;
524 struct device_node *child; 524 struct device_node *child;
525 int ret; 525 int ret;
526 u32 nfuncs = 0; 526 u32 nfuncs = 0;
527 u32 i = 0; 527 u32 i = 0;
528 528
529 if (!np) 529 if (!np)
530 return -ENODEV; 530 return -ENODEV;
531 531
532 nfuncs = of_get_child_count(np); 532 nfuncs = of_get_child_count(np);
533 if (nfuncs <= 0) { 533 if (nfuncs <= 0) {
534 dev_err(&pdev->dev, "no functions defined\n"); 534 dev_err(&pdev->dev, "no functions defined\n");
535 return -EINVAL; 535 return -EINVAL;
536 } 536 }
537 537
538 info->nfunctions = nfuncs; 538 info->nfunctions = nfuncs;
539 info->functions = devm_kzalloc(&pdev->dev, nfuncs * sizeof(struct imx_pmx_func), 539 info->functions = devm_kzalloc(&pdev->dev, nfuncs * sizeof(struct imx_pmx_func),
540 GFP_KERNEL); 540 GFP_KERNEL);
541 if (!info->functions) 541 if (!info->functions)
542 return -ENOMEM; 542 return -ENOMEM;
543 543
544 info->ngroups = 0; 544 info->ngroups = 0;
545 for_each_child_of_node(np, child) 545 for_each_child_of_node(np, child)
546 info->ngroups += of_get_child_count(child); 546 info->ngroups += of_get_child_count(child);
547 info->groups = devm_kzalloc(&pdev->dev, info->ngroups * sizeof(struct imx_pin_group), 547 info->groups = devm_kzalloc(&pdev->dev, info->ngroups * sizeof(struct imx_pin_group),
548 GFP_KERNEL); 548 GFP_KERNEL);
549 if (!info->groups) 549 if (!info->groups)
550 return -ENOMEM; 550 return -ENOMEM;
551 551
552 for_each_child_of_node(np, child) { 552 for_each_child_of_node(np, child) {
553 ret = imx_pinctrl_parse_functions(child, info, i++); 553 ret = imx_pinctrl_parse_functions(child, info, i++);
554 if (ret) { 554 if (ret) {
555 dev_err(&pdev->dev, "failed to parse function\n"); 555 dev_err(&pdev->dev, "failed to parse function\n");
556 return ret; 556 return ret;
557 } 557 }
558 } 558 }
559 559
560 return 0; 560 return 0;
561 } 561 }
562 562
563 int __devinit imx_pinctrl_probe(struct platform_device *pdev, 563 int __devinit imx_pinctrl_probe(struct platform_device *pdev,
564 struct imx_pinctrl_soc_info *info) 564 struct imx_pinctrl_soc_info *info)
565 { 565 {
566 struct imx_pinctrl *ipctl; 566 struct imx_pinctrl *ipctl;
567 struct resource *res; 567 struct resource *res;
568 int ret; 568 int ret;
569 569
570 if (!info || !info->pins || !info->npins 570 if (!info || !info->pins || !info->npins
571 || !info->pin_regs || !info->npin_regs) { 571 || !info->pin_regs || !info->npin_regs) {
572 dev_err(&pdev->dev, "wrong pinctrl info\n"); 572 dev_err(&pdev->dev, "wrong pinctrl info\n");
573 return -EINVAL; 573 return -EINVAL;
574 } 574 }
575 info->dev = &pdev->dev; 575 info->dev = &pdev->dev;
576 576
577 /* Create state holders etc for this driver */ 577 /* Create state holders etc for this driver */
578 ipctl = devm_kzalloc(&pdev->dev, sizeof(*ipctl), GFP_KERNEL); 578 ipctl = devm_kzalloc(&pdev->dev, sizeof(*ipctl), GFP_KERNEL);
579 if (!ipctl) 579 if (!ipctl)
580 return -ENOMEM; 580 return -ENOMEM;
581 581
582 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 582 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
583 if (!res) 583 if (!res)
584 return -ENOENT; 584 return -ENOENT;
585 585
586 ipctl->base = devm_request_and_ioremap(&pdev->dev, res); 586 ipctl->base = devm_request_and_ioremap(&pdev->dev, res);
587 if (!ipctl->base) 587 if (!ipctl->base)
588 return -EBUSY; 588 return -EBUSY;
589 589
590 imx_pinctrl_desc.name = dev_name(&pdev->dev); 590 imx_pinctrl_desc.name = dev_name(&pdev->dev);
591 imx_pinctrl_desc.pins = info->pins; 591 imx_pinctrl_desc.pins = info->pins;
592 imx_pinctrl_desc.npins = info->npins; 592 imx_pinctrl_desc.npins = info->npins;
593 593
594 ret = imx_pinctrl_probe_dt(pdev, info); 594 ret = imx_pinctrl_probe_dt(pdev, info);
595 if (ret) { 595 if (ret) {
596 dev_err(&pdev->dev, "fail to probe dt properties\n"); 596 dev_err(&pdev->dev, "fail to probe dt properties\n");
597 return ret; 597 return ret;
598 } 598 }
599 599
600 ipctl->info = info; 600 ipctl->info = info;
601 ipctl->dev = info->dev; 601 ipctl->dev = info->dev;
602 platform_set_drvdata(pdev, ipctl); 602 platform_set_drvdata(pdev, ipctl);
603 ipctl->pctl = pinctrl_register(&imx_pinctrl_desc, &pdev->dev, ipctl); 603 ipctl->pctl = pinctrl_register(&imx_pinctrl_desc, &pdev->dev, ipctl);
604 if (!ipctl->pctl) { 604 if (!ipctl->pctl) {
605 dev_err(&pdev->dev, "could not register IMX pinctrl driver\n"); 605 dev_err(&pdev->dev, "could not register IMX pinctrl driver\n");
606 return -EINVAL; 606 return -EINVAL;
607 } 607 }
608 608
609 dev_info(&pdev->dev, "initialized IMX pinctrl driver\n"); 609 dev_info(&pdev->dev, "initialized IMX pinctrl driver\n");
610 610
611 return 0; 611 return 0;
612 } 612 }
613 613
614 int __devexit imx_pinctrl_remove(struct platform_device *pdev) 614 int imx_pinctrl_remove(struct platform_device *pdev)
615 { 615 {
616 struct imx_pinctrl *ipctl = platform_get_drvdata(pdev); 616 struct imx_pinctrl *ipctl = platform_get_drvdata(pdev);
617 617
618 pinctrl_unregister(ipctl->pctl); 618 pinctrl_unregister(ipctl->pctl);
619 619
620 return 0; 620 return 0;
621 } 621 }
622 622
drivers/pinctrl/pinctrl-mmp2.c
1 /* 1 /*
2 * linux/drivers/pinctrl/pinmux-mmp2.c 2 * linux/drivers/pinctrl/pinmux-mmp2.c
3 * 3 *
4 * This program is free software; you can redistribute it and/or modify 4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as 5 * it under the terms of the GNU General Public License version 2 as
6 * publishhed by the Free Software Foundation. 6 * publishhed by the Free Software Foundation.
7 * 7 *
8 * Copyright (C) 2011, Marvell Technology Group Ltd. 8 * Copyright (C) 2011, Marvell Technology Group Ltd.
9 * 9 *
10 * Author: Haojian Zhuang <haojian.zhuang@marvell.com> 10 * Author: Haojian Zhuang <haojian.zhuang@marvell.com>
11 * 11 *
12 */ 12 */
13 13
14 #include <linux/device.h> 14 #include <linux/device.h>
15 #include <linux/module.h> 15 #include <linux/module.h>
16 #include <linux/io.h> 16 #include <linux/io.h>
17 #include <linux/platform_device.h> 17 #include <linux/platform_device.h>
18 #include "pinctrl-pxa3xx.h" 18 #include "pinctrl-pxa3xx.h"
19 19
20 #define MMP2_DS_MASK 0x1800 20 #define MMP2_DS_MASK 0x1800
21 #define MMP2_DS_SHIFT 11 21 #define MMP2_DS_SHIFT 11
22 #define MMP2_SLEEP_MASK 0x38 22 #define MMP2_SLEEP_MASK 0x38
23 #define MMP2_SLEEP_SELECT (1 << 9) 23 #define MMP2_SLEEP_SELECT (1 << 9)
24 #define MMP2_SLEEP_DATA (1 << 8) 24 #define MMP2_SLEEP_DATA (1 << 8)
25 #define MMP2_SLEEP_DIR (1 << 7) 25 #define MMP2_SLEEP_DIR (1 << 7)
26 26
27 #define MFPR_MMP2(a, r, f0, f1, f2, f3, f4, f5, f6, f7) \ 27 #define MFPR_MMP2(a, r, f0, f1, f2, f3, f4, f5, f6, f7) \
28 { \ 28 { \
29 .name = #a, \ 29 .name = #a, \
30 .pin = a, \ 30 .pin = a, \
31 .mfpr = r, \ 31 .mfpr = r, \
32 .func = { \ 32 .func = { \
33 MMP2_MUX_##f0, \ 33 MMP2_MUX_##f0, \
34 MMP2_MUX_##f1, \ 34 MMP2_MUX_##f1, \
35 MMP2_MUX_##f2, \ 35 MMP2_MUX_##f2, \
36 MMP2_MUX_##f3, \ 36 MMP2_MUX_##f3, \
37 MMP2_MUX_##f4, \ 37 MMP2_MUX_##f4, \
38 MMP2_MUX_##f5, \ 38 MMP2_MUX_##f5, \
39 MMP2_MUX_##f6, \ 39 MMP2_MUX_##f6, \
40 MMP2_MUX_##f7, \ 40 MMP2_MUX_##f7, \
41 }, \ 41 }, \
42 } 42 }
43 43
44 #define GRP_MMP2(a, m, p) \ 44 #define GRP_MMP2(a, m, p) \
45 { .name = a, .mux = MMP2_MUX_##m, .pins = p, .npins = ARRAY_SIZE(p), } 45 { .name = a, .mux = MMP2_MUX_##m, .pins = p, .npins = ARRAY_SIZE(p), }
46 46
47 /* 174 pins */ 47 /* 174 pins */
48 enum mmp2_pin_list { 48 enum mmp2_pin_list {
49 /* 0~168: GPIO0~GPIO168 */ 49 /* 0~168: GPIO0~GPIO168 */
50 TWSI4_SCL = 169, 50 TWSI4_SCL = 169,
51 TWSI4_SDA, /* 170 */ 51 TWSI4_SDA, /* 170 */
52 G_CLKREQ, 52 G_CLKREQ,
53 VCXO_REQ, 53 VCXO_REQ,
54 VCXO_OUT, 54 VCXO_OUT,
55 }; 55 };
56 56
57 enum mmp2_mux { 57 enum mmp2_mux {
58 /* PXA3xx_MUX_GPIO = 0 (predefined in pinctrl-pxa3xx.h) */ 58 /* PXA3xx_MUX_GPIO = 0 (predefined in pinctrl-pxa3xx.h) */
59 MMP2_MUX_GPIO = 0, 59 MMP2_MUX_GPIO = 0,
60 MMP2_MUX_G_CLKREQ, 60 MMP2_MUX_G_CLKREQ,
61 MMP2_MUX_VCXO_REQ, 61 MMP2_MUX_VCXO_REQ,
62 MMP2_MUX_VCXO_OUT, 62 MMP2_MUX_VCXO_OUT,
63 MMP2_MUX_KP_MK, 63 MMP2_MUX_KP_MK,
64 MMP2_MUX_KP_DK, 64 MMP2_MUX_KP_DK,
65 MMP2_MUX_CCIC1, 65 MMP2_MUX_CCIC1,
66 MMP2_MUX_CCIC2, 66 MMP2_MUX_CCIC2,
67 MMP2_MUX_SPI, 67 MMP2_MUX_SPI,
68 MMP2_MUX_SSPA2, 68 MMP2_MUX_SSPA2,
69 MMP2_MUX_ROT, 69 MMP2_MUX_ROT,
70 MMP2_MUX_I2S, 70 MMP2_MUX_I2S,
71 MMP2_MUX_TB, 71 MMP2_MUX_TB,
72 MMP2_MUX_CAM2, 72 MMP2_MUX_CAM2,
73 MMP2_MUX_HDMI, 73 MMP2_MUX_HDMI,
74 MMP2_MUX_TWSI2, 74 MMP2_MUX_TWSI2,
75 MMP2_MUX_TWSI3, 75 MMP2_MUX_TWSI3,
76 MMP2_MUX_TWSI4, 76 MMP2_MUX_TWSI4,
77 MMP2_MUX_TWSI5, 77 MMP2_MUX_TWSI5,
78 MMP2_MUX_TWSI6, 78 MMP2_MUX_TWSI6,
79 MMP2_MUX_UART1, 79 MMP2_MUX_UART1,
80 MMP2_MUX_UART2, 80 MMP2_MUX_UART2,
81 MMP2_MUX_UART3, 81 MMP2_MUX_UART3,
82 MMP2_MUX_UART4, 82 MMP2_MUX_UART4,
83 MMP2_MUX_SSP1_RX, 83 MMP2_MUX_SSP1_RX,
84 MMP2_MUX_SSP1_FRM, 84 MMP2_MUX_SSP1_FRM,
85 MMP2_MUX_SSP1_TXRX, 85 MMP2_MUX_SSP1_TXRX,
86 MMP2_MUX_SSP2_RX, 86 MMP2_MUX_SSP2_RX,
87 MMP2_MUX_SSP2_FRM, 87 MMP2_MUX_SSP2_FRM,
88 MMP2_MUX_SSP1, 88 MMP2_MUX_SSP1,
89 MMP2_MUX_SSP2, 89 MMP2_MUX_SSP2,
90 MMP2_MUX_SSP3, 90 MMP2_MUX_SSP3,
91 MMP2_MUX_SSP4, 91 MMP2_MUX_SSP4,
92 MMP2_MUX_MMC1, 92 MMP2_MUX_MMC1,
93 MMP2_MUX_MMC2, 93 MMP2_MUX_MMC2,
94 MMP2_MUX_MMC3, 94 MMP2_MUX_MMC3,
95 MMP2_MUX_MMC4, 95 MMP2_MUX_MMC4,
96 MMP2_MUX_ULPI, 96 MMP2_MUX_ULPI,
97 MMP2_MUX_AC, 97 MMP2_MUX_AC,
98 MMP2_MUX_CA, 98 MMP2_MUX_CA,
99 MMP2_MUX_PWM, 99 MMP2_MUX_PWM,
100 MMP2_MUX_USIM, 100 MMP2_MUX_USIM,
101 MMP2_MUX_TIPU, 101 MMP2_MUX_TIPU,
102 MMP2_MUX_PLL, 102 MMP2_MUX_PLL,
103 MMP2_MUX_NAND, 103 MMP2_MUX_NAND,
104 MMP2_MUX_FSIC, 104 MMP2_MUX_FSIC,
105 MMP2_MUX_SLEEP_IND, 105 MMP2_MUX_SLEEP_IND,
106 MMP2_MUX_EXT_DMA, 106 MMP2_MUX_EXT_DMA,
107 MMP2_MUX_ONE_WIRE, 107 MMP2_MUX_ONE_WIRE,
108 MMP2_MUX_LCD, 108 MMP2_MUX_LCD,
109 MMP2_MUX_SMC, 109 MMP2_MUX_SMC,
110 MMP2_MUX_SMC_INT, 110 MMP2_MUX_SMC_INT,
111 MMP2_MUX_MSP, 111 MMP2_MUX_MSP,
112 MMP2_MUX_G_CLKOUT, 112 MMP2_MUX_G_CLKOUT,
113 MMP2_MUX_32K_CLKOUT, 113 MMP2_MUX_32K_CLKOUT,
114 MMP2_MUX_PRI_JTAG, 114 MMP2_MUX_PRI_JTAG,
115 MMP2_MUX_AAS_JTAG, 115 MMP2_MUX_AAS_JTAG,
116 MMP2_MUX_AAS_GPIO, 116 MMP2_MUX_AAS_GPIO,
117 MMP2_MUX_AAS_SPI, 117 MMP2_MUX_AAS_SPI,
118 MMP2_MUX_AAS_TWSI, 118 MMP2_MUX_AAS_TWSI,
119 MMP2_MUX_AAS_DEU_EX, 119 MMP2_MUX_AAS_DEU_EX,
120 MMP2_MUX_NONE = 0xffff, 120 MMP2_MUX_NONE = 0xffff,
121 }; 121 };
122 122
123 static struct pinctrl_pin_desc mmp2_pads[] = { 123 static struct pinctrl_pin_desc mmp2_pads[] = {
124 /* 124 /*
125 * The name indicates function 0 of this pin. 125 * The name indicates function 0 of this pin.
126 * After reset, function 0 is the default function of pin. 126 * After reset, function 0 is the default function of pin.
127 */ 127 */
128 PINCTRL_PIN(GPIO0, "GPIO0"), 128 PINCTRL_PIN(GPIO0, "GPIO0"),
129 PINCTRL_PIN(GPIO1, "GPIO1"), 129 PINCTRL_PIN(GPIO1, "GPIO1"),
130 PINCTRL_PIN(GPIO2, "GPIO2"), 130 PINCTRL_PIN(GPIO2, "GPIO2"),
131 PINCTRL_PIN(GPIO3, "GPIO3"), 131 PINCTRL_PIN(GPIO3, "GPIO3"),
132 PINCTRL_PIN(GPIO4, "GPIO4"), 132 PINCTRL_PIN(GPIO4, "GPIO4"),
133 PINCTRL_PIN(GPIO5, "GPIO5"), 133 PINCTRL_PIN(GPIO5, "GPIO5"),
134 PINCTRL_PIN(GPIO6, "GPIO6"), 134 PINCTRL_PIN(GPIO6, "GPIO6"),
135 PINCTRL_PIN(GPIO7, "GPIO7"), 135 PINCTRL_PIN(GPIO7, "GPIO7"),
136 PINCTRL_PIN(GPIO8, "GPIO8"), 136 PINCTRL_PIN(GPIO8, "GPIO8"),
137 PINCTRL_PIN(GPIO9, "GPIO9"), 137 PINCTRL_PIN(GPIO9, "GPIO9"),
138 PINCTRL_PIN(GPIO10, "GPIO10"), 138 PINCTRL_PIN(GPIO10, "GPIO10"),
139 PINCTRL_PIN(GPIO11, "GPIO11"), 139 PINCTRL_PIN(GPIO11, "GPIO11"),
140 PINCTRL_PIN(GPIO12, "GPIO12"), 140 PINCTRL_PIN(GPIO12, "GPIO12"),
141 PINCTRL_PIN(GPIO13, "GPIO13"), 141 PINCTRL_PIN(GPIO13, "GPIO13"),
142 PINCTRL_PIN(GPIO14, "GPIO14"), 142 PINCTRL_PIN(GPIO14, "GPIO14"),
143 PINCTRL_PIN(GPIO15, "GPIO15"), 143 PINCTRL_PIN(GPIO15, "GPIO15"),
144 PINCTRL_PIN(GPIO16, "GPIO16"), 144 PINCTRL_PIN(GPIO16, "GPIO16"),
145 PINCTRL_PIN(GPIO17, "GPIO17"), 145 PINCTRL_PIN(GPIO17, "GPIO17"),
146 PINCTRL_PIN(GPIO18, "GPIO18"), 146 PINCTRL_PIN(GPIO18, "GPIO18"),
147 PINCTRL_PIN(GPIO19, "GPIO19"), 147 PINCTRL_PIN(GPIO19, "GPIO19"),
148 PINCTRL_PIN(GPIO20, "GPIO20"), 148 PINCTRL_PIN(GPIO20, "GPIO20"),
149 PINCTRL_PIN(GPIO21, "GPIO21"), 149 PINCTRL_PIN(GPIO21, "GPIO21"),
150 PINCTRL_PIN(GPIO22, "GPIO22"), 150 PINCTRL_PIN(GPIO22, "GPIO22"),
151 PINCTRL_PIN(GPIO23, "GPIO23"), 151 PINCTRL_PIN(GPIO23, "GPIO23"),
152 PINCTRL_PIN(GPIO24, "GPIO24"), 152 PINCTRL_PIN(GPIO24, "GPIO24"),
153 PINCTRL_PIN(GPIO25, "GPIO25"), 153 PINCTRL_PIN(GPIO25, "GPIO25"),
154 PINCTRL_PIN(GPIO26, "GPIO26"), 154 PINCTRL_PIN(GPIO26, "GPIO26"),
155 PINCTRL_PIN(GPIO27, "GPIO27"), 155 PINCTRL_PIN(GPIO27, "GPIO27"),
156 PINCTRL_PIN(GPIO28, "GPIO28"), 156 PINCTRL_PIN(GPIO28, "GPIO28"),
157 PINCTRL_PIN(GPIO29, "GPIO29"), 157 PINCTRL_PIN(GPIO29, "GPIO29"),
158 PINCTRL_PIN(GPIO30, "GPIO30"), 158 PINCTRL_PIN(GPIO30, "GPIO30"),
159 PINCTRL_PIN(GPIO31, "GPIO31"), 159 PINCTRL_PIN(GPIO31, "GPIO31"),
160 PINCTRL_PIN(GPIO32, "GPIO32"), 160 PINCTRL_PIN(GPIO32, "GPIO32"),
161 PINCTRL_PIN(GPIO33, "GPIO33"), 161 PINCTRL_PIN(GPIO33, "GPIO33"),
162 PINCTRL_PIN(GPIO34, "GPIO34"), 162 PINCTRL_PIN(GPIO34, "GPIO34"),
163 PINCTRL_PIN(GPIO35, "GPIO35"), 163 PINCTRL_PIN(GPIO35, "GPIO35"),
164 PINCTRL_PIN(GPIO36, "GPIO36"), 164 PINCTRL_PIN(GPIO36, "GPIO36"),
165 PINCTRL_PIN(GPIO37, "GPIO37"), 165 PINCTRL_PIN(GPIO37, "GPIO37"),
166 PINCTRL_PIN(GPIO38, "GPIO38"), 166 PINCTRL_PIN(GPIO38, "GPIO38"),
167 PINCTRL_PIN(GPIO39, "GPIO39"), 167 PINCTRL_PIN(GPIO39, "GPIO39"),
168 PINCTRL_PIN(GPIO40, "GPIO40"), 168 PINCTRL_PIN(GPIO40, "GPIO40"),
169 PINCTRL_PIN(GPIO41, "GPIO41"), 169 PINCTRL_PIN(GPIO41, "GPIO41"),
170 PINCTRL_PIN(GPIO42, "GPIO42"), 170 PINCTRL_PIN(GPIO42, "GPIO42"),
171 PINCTRL_PIN(GPIO43, "GPIO43"), 171 PINCTRL_PIN(GPIO43, "GPIO43"),
172 PINCTRL_PIN(GPIO44, "GPIO44"), 172 PINCTRL_PIN(GPIO44, "GPIO44"),
173 PINCTRL_PIN(GPIO45, "GPIO45"), 173 PINCTRL_PIN(GPIO45, "GPIO45"),
174 PINCTRL_PIN(GPIO46, "GPIO46"), 174 PINCTRL_PIN(GPIO46, "GPIO46"),
175 PINCTRL_PIN(GPIO47, "GPIO47"), 175 PINCTRL_PIN(GPIO47, "GPIO47"),
176 PINCTRL_PIN(GPIO48, "GPIO48"), 176 PINCTRL_PIN(GPIO48, "GPIO48"),
177 PINCTRL_PIN(GPIO49, "GPIO49"), 177 PINCTRL_PIN(GPIO49, "GPIO49"),
178 PINCTRL_PIN(GPIO50, "GPIO50"), 178 PINCTRL_PIN(GPIO50, "GPIO50"),
179 PINCTRL_PIN(GPIO51, "GPIO51"), 179 PINCTRL_PIN(GPIO51, "GPIO51"),
180 PINCTRL_PIN(GPIO52, "GPIO52"), 180 PINCTRL_PIN(GPIO52, "GPIO52"),
181 PINCTRL_PIN(GPIO53, "GPIO53"), 181 PINCTRL_PIN(GPIO53, "GPIO53"),
182 PINCTRL_PIN(GPIO54, "GPIO54"), 182 PINCTRL_PIN(GPIO54, "GPIO54"),
183 PINCTRL_PIN(GPIO55, "GPIO55"), 183 PINCTRL_PIN(GPIO55, "GPIO55"),
184 PINCTRL_PIN(GPIO56, "GPIO56"), 184 PINCTRL_PIN(GPIO56, "GPIO56"),
185 PINCTRL_PIN(GPIO57, "GPIO57"), 185 PINCTRL_PIN(GPIO57, "GPIO57"),
186 PINCTRL_PIN(GPIO58, "GPIO58"), 186 PINCTRL_PIN(GPIO58, "GPIO58"),
187 PINCTRL_PIN(GPIO59, "GPIO59"), 187 PINCTRL_PIN(GPIO59, "GPIO59"),
188 PINCTRL_PIN(GPIO60, "GPIO60"), 188 PINCTRL_PIN(GPIO60, "GPIO60"),
189 PINCTRL_PIN(GPIO61, "GPIO61"), 189 PINCTRL_PIN(GPIO61, "GPIO61"),
190 PINCTRL_PIN(GPIO62, "GPIO62"), 190 PINCTRL_PIN(GPIO62, "GPIO62"),
191 PINCTRL_PIN(GPIO63, "GPIO63"), 191 PINCTRL_PIN(GPIO63, "GPIO63"),
192 PINCTRL_PIN(GPIO64, "GPIO64"), 192 PINCTRL_PIN(GPIO64, "GPIO64"),
193 PINCTRL_PIN(GPIO65, "GPIO65"), 193 PINCTRL_PIN(GPIO65, "GPIO65"),
194 PINCTRL_PIN(GPIO66, "GPIO66"), 194 PINCTRL_PIN(GPIO66, "GPIO66"),
195 PINCTRL_PIN(GPIO67, "GPIO67"), 195 PINCTRL_PIN(GPIO67, "GPIO67"),
196 PINCTRL_PIN(GPIO68, "GPIO68"), 196 PINCTRL_PIN(GPIO68, "GPIO68"),
197 PINCTRL_PIN(GPIO69, "GPIO69"), 197 PINCTRL_PIN(GPIO69, "GPIO69"),
198 PINCTRL_PIN(GPIO70, "GPIO70"), 198 PINCTRL_PIN(GPIO70, "GPIO70"),
199 PINCTRL_PIN(GPIO71, "GPIO71"), 199 PINCTRL_PIN(GPIO71, "GPIO71"),
200 PINCTRL_PIN(GPIO72, "GPIO72"), 200 PINCTRL_PIN(GPIO72, "GPIO72"),
201 PINCTRL_PIN(GPIO73, "GPIO73"), 201 PINCTRL_PIN(GPIO73, "GPIO73"),
202 PINCTRL_PIN(GPIO74, "GPIO74"), 202 PINCTRL_PIN(GPIO74, "GPIO74"),
203 PINCTRL_PIN(GPIO75, "GPIO75"), 203 PINCTRL_PIN(GPIO75, "GPIO75"),
204 PINCTRL_PIN(GPIO76, "GPIO76"), 204 PINCTRL_PIN(GPIO76, "GPIO76"),
205 PINCTRL_PIN(GPIO77, "GPIO77"), 205 PINCTRL_PIN(GPIO77, "GPIO77"),
206 PINCTRL_PIN(GPIO78, "GPIO78"), 206 PINCTRL_PIN(GPIO78, "GPIO78"),
207 PINCTRL_PIN(GPIO79, "GPIO79"), 207 PINCTRL_PIN(GPIO79, "GPIO79"),
208 PINCTRL_PIN(GPIO80, "GPIO80"), 208 PINCTRL_PIN(GPIO80, "GPIO80"),
209 PINCTRL_PIN(GPIO81, "GPIO81"), 209 PINCTRL_PIN(GPIO81, "GPIO81"),
210 PINCTRL_PIN(GPIO82, "GPIO82"), 210 PINCTRL_PIN(GPIO82, "GPIO82"),
211 PINCTRL_PIN(GPIO83, "GPIO83"), 211 PINCTRL_PIN(GPIO83, "GPIO83"),
212 PINCTRL_PIN(GPIO84, "GPIO84"), 212 PINCTRL_PIN(GPIO84, "GPIO84"),
213 PINCTRL_PIN(GPIO85, "GPIO85"), 213 PINCTRL_PIN(GPIO85, "GPIO85"),
214 PINCTRL_PIN(GPIO86, "GPIO86"), 214 PINCTRL_PIN(GPIO86, "GPIO86"),
215 PINCTRL_PIN(GPIO87, "GPIO87"), 215 PINCTRL_PIN(GPIO87, "GPIO87"),
216 PINCTRL_PIN(GPIO88, "GPIO88"), 216 PINCTRL_PIN(GPIO88, "GPIO88"),
217 PINCTRL_PIN(GPIO89, "GPIO89"), 217 PINCTRL_PIN(GPIO89, "GPIO89"),
218 PINCTRL_PIN(GPIO90, "GPIO90"), 218 PINCTRL_PIN(GPIO90, "GPIO90"),
219 PINCTRL_PIN(GPIO91, "GPIO91"), 219 PINCTRL_PIN(GPIO91, "GPIO91"),
220 PINCTRL_PIN(GPIO92, "GPIO92"), 220 PINCTRL_PIN(GPIO92, "GPIO92"),
221 PINCTRL_PIN(GPIO93, "GPIO93"), 221 PINCTRL_PIN(GPIO93, "GPIO93"),
222 PINCTRL_PIN(GPIO94, "GPIO94"), 222 PINCTRL_PIN(GPIO94, "GPIO94"),
223 PINCTRL_PIN(GPIO95, "GPIO95"), 223 PINCTRL_PIN(GPIO95, "GPIO95"),
224 PINCTRL_PIN(GPIO96, "GPIO96"), 224 PINCTRL_PIN(GPIO96, "GPIO96"),
225 PINCTRL_PIN(GPIO97, "GPIO97"), 225 PINCTRL_PIN(GPIO97, "GPIO97"),
226 PINCTRL_PIN(GPIO98, "GPIO98"), 226 PINCTRL_PIN(GPIO98, "GPIO98"),
227 PINCTRL_PIN(GPIO99, "GPIO99"), 227 PINCTRL_PIN(GPIO99, "GPIO99"),
228 PINCTRL_PIN(GPIO100, "GPIO100"), 228 PINCTRL_PIN(GPIO100, "GPIO100"),
229 PINCTRL_PIN(GPIO101, "GPIO101"), 229 PINCTRL_PIN(GPIO101, "GPIO101"),
230 PINCTRL_PIN(GPIO102, "GPIO102"), 230 PINCTRL_PIN(GPIO102, "GPIO102"),
231 PINCTRL_PIN(GPIO103, "GPIO103"), 231 PINCTRL_PIN(GPIO103, "GPIO103"),
232 PINCTRL_PIN(GPIO104, "GPIO104"), 232 PINCTRL_PIN(GPIO104, "GPIO104"),
233 PINCTRL_PIN(GPIO105, "GPIO105"), 233 PINCTRL_PIN(GPIO105, "GPIO105"),
234 PINCTRL_PIN(GPIO106, "GPIO106"), 234 PINCTRL_PIN(GPIO106, "GPIO106"),
235 PINCTRL_PIN(GPIO107, "GPIO107"), 235 PINCTRL_PIN(GPIO107, "GPIO107"),
236 PINCTRL_PIN(GPIO108, "GPIO108"), 236 PINCTRL_PIN(GPIO108, "GPIO108"),
237 PINCTRL_PIN(GPIO109, "GPIO109"), 237 PINCTRL_PIN(GPIO109, "GPIO109"),
238 PINCTRL_PIN(GPIO110, "GPIO110"), 238 PINCTRL_PIN(GPIO110, "GPIO110"),
239 PINCTRL_PIN(GPIO111, "GPIO111"), 239 PINCTRL_PIN(GPIO111, "GPIO111"),
240 PINCTRL_PIN(GPIO112, "GPIO112"), 240 PINCTRL_PIN(GPIO112, "GPIO112"),
241 PINCTRL_PIN(GPIO113, "GPIO113"), 241 PINCTRL_PIN(GPIO113, "GPIO113"),
242 PINCTRL_PIN(GPIO114, "GPIO114"), 242 PINCTRL_PIN(GPIO114, "GPIO114"),
243 PINCTRL_PIN(GPIO115, "GPIO115"), 243 PINCTRL_PIN(GPIO115, "GPIO115"),
244 PINCTRL_PIN(GPIO116, "GPIO116"), 244 PINCTRL_PIN(GPIO116, "GPIO116"),
245 PINCTRL_PIN(GPIO117, "GPIO117"), 245 PINCTRL_PIN(GPIO117, "GPIO117"),
246 PINCTRL_PIN(GPIO118, "GPIO118"), 246 PINCTRL_PIN(GPIO118, "GPIO118"),
247 PINCTRL_PIN(GPIO119, "GPIO119"), 247 PINCTRL_PIN(GPIO119, "GPIO119"),
248 PINCTRL_PIN(GPIO120, "GPIO120"), 248 PINCTRL_PIN(GPIO120, "GPIO120"),
249 PINCTRL_PIN(GPIO121, "GPIO121"), 249 PINCTRL_PIN(GPIO121, "GPIO121"),
250 PINCTRL_PIN(GPIO122, "GPIO122"), 250 PINCTRL_PIN(GPIO122, "GPIO122"),
251 PINCTRL_PIN(GPIO123, "GPIO123"), 251 PINCTRL_PIN(GPIO123, "GPIO123"),
252 PINCTRL_PIN(GPIO124, "GPIO124"), 252 PINCTRL_PIN(GPIO124, "GPIO124"),
253 PINCTRL_PIN(GPIO125, "GPIO125"), 253 PINCTRL_PIN(GPIO125, "GPIO125"),
254 PINCTRL_PIN(GPIO126, "GPIO126"), 254 PINCTRL_PIN(GPIO126, "GPIO126"),
255 PINCTRL_PIN(GPIO127, "GPIO127"), 255 PINCTRL_PIN(GPIO127, "GPIO127"),
256 PINCTRL_PIN(GPIO128, "GPIO128"), 256 PINCTRL_PIN(GPIO128, "GPIO128"),
257 PINCTRL_PIN(GPIO129, "GPIO129"), 257 PINCTRL_PIN(GPIO129, "GPIO129"),
258 PINCTRL_PIN(GPIO130, "GPIO130"), 258 PINCTRL_PIN(GPIO130, "GPIO130"),
259 PINCTRL_PIN(GPIO131, "GPIO131"), 259 PINCTRL_PIN(GPIO131, "GPIO131"),
260 PINCTRL_PIN(GPIO132, "GPIO132"), 260 PINCTRL_PIN(GPIO132, "GPIO132"),
261 PINCTRL_PIN(GPIO133, "GPIO133"), 261 PINCTRL_PIN(GPIO133, "GPIO133"),
262 PINCTRL_PIN(GPIO134, "GPIO134"), 262 PINCTRL_PIN(GPIO134, "GPIO134"),
263 PINCTRL_PIN(GPIO135, "GPIO135"), 263 PINCTRL_PIN(GPIO135, "GPIO135"),
264 PINCTRL_PIN(GPIO136, "GPIO136"), 264 PINCTRL_PIN(GPIO136, "GPIO136"),
265 PINCTRL_PIN(GPIO137, "GPIO137"), 265 PINCTRL_PIN(GPIO137, "GPIO137"),
266 PINCTRL_PIN(GPIO138, "GPIO138"), 266 PINCTRL_PIN(GPIO138, "GPIO138"),
267 PINCTRL_PIN(GPIO139, "GPIO139"), 267 PINCTRL_PIN(GPIO139, "GPIO139"),
268 PINCTRL_PIN(GPIO140, "GPIO140"), 268 PINCTRL_PIN(GPIO140, "GPIO140"),
269 PINCTRL_PIN(GPIO141, "GPIO141"), 269 PINCTRL_PIN(GPIO141, "GPIO141"),
270 PINCTRL_PIN(GPIO142, "GPIO142"), 270 PINCTRL_PIN(GPIO142, "GPIO142"),
271 PINCTRL_PIN(GPIO143, "GPIO143"), 271 PINCTRL_PIN(GPIO143, "GPIO143"),
272 PINCTRL_PIN(GPIO144, "GPIO144"), 272 PINCTRL_PIN(GPIO144, "GPIO144"),
273 PINCTRL_PIN(GPIO145, "GPIO145"), 273 PINCTRL_PIN(GPIO145, "GPIO145"),
274 PINCTRL_PIN(GPIO146, "GPIO146"), 274 PINCTRL_PIN(GPIO146, "GPIO146"),
275 PINCTRL_PIN(GPIO147, "GPIO147"), 275 PINCTRL_PIN(GPIO147, "GPIO147"),
276 PINCTRL_PIN(GPIO148, "GPIO148"), 276 PINCTRL_PIN(GPIO148, "GPIO148"),
277 PINCTRL_PIN(GPIO149, "GPIO149"), 277 PINCTRL_PIN(GPIO149, "GPIO149"),
278 PINCTRL_PIN(GPIO150, "GPIO150"), 278 PINCTRL_PIN(GPIO150, "GPIO150"),
279 PINCTRL_PIN(GPIO151, "GPIO151"), 279 PINCTRL_PIN(GPIO151, "GPIO151"),
280 PINCTRL_PIN(GPIO152, "GPIO152"), 280 PINCTRL_PIN(GPIO152, "GPIO152"),
281 PINCTRL_PIN(GPIO153, "GPIO153"), 281 PINCTRL_PIN(GPIO153, "GPIO153"),
282 PINCTRL_PIN(GPIO154, "GPIO154"), 282 PINCTRL_PIN(GPIO154, "GPIO154"),
283 PINCTRL_PIN(GPIO155, "GPIO155"), 283 PINCTRL_PIN(GPIO155, "GPIO155"),
284 PINCTRL_PIN(GPIO156, "GPIO156"), 284 PINCTRL_PIN(GPIO156, "GPIO156"),
285 PINCTRL_PIN(GPIO157, "GPIO157"), 285 PINCTRL_PIN(GPIO157, "GPIO157"),
286 PINCTRL_PIN(GPIO158, "GPIO158"), 286 PINCTRL_PIN(GPIO158, "GPIO158"),
287 PINCTRL_PIN(GPIO159, "GPIO159"), 287 PINCTRL_PIN(GPIO159, "GPIO159"),
288 PINCTRL_PIN(GPIO160, "GPIO160"), 288 PINCTRL_PIN(GPIO160, "GPIO160"),
289 PINCTRL_PIN(GPIO161, "GPIO161"), 289 PINCTRL_PIN(GPIO161, "GPIO161"),
290 PINCTRL_PIN(GPIO162, "GPIO162"), 290 PINCTRL_PIN(GPIO162, "GPIO162"),
291 PINCTRL_PIN(GPIO163, "GPIO163"), 291 PINCTRL_PIN(GPIO163, "GPIO163"),
292 PINCTRL_PIN(GPIO164, "GPIO164"), 292 PINCTRL_PIN(GPIO164, "GPIO164"),
293 PINCTRL_PIN(GPIO165, "GPIO165"), 293 PINCTRL_PIN(GPIO165, "GPIO165"),
294 PINCTRL_PIN(GPIO166, "GPIO166"), 294 PINCTRL_PIN(GPIO166, "GPIO166"),
295 PINCTRL_PIN(GPIO167, "GPIO167"), 295 PINCTRL_PIN(GPIO167, "GPIO167"),
296 PINCTRL_PIN(GPIO168, "GPIO168"), 296 PINCTRL_PIN(GPIO168, "GPIO168"),
297 PINCTRL_PIN(TWSI4_SCL, "TWSI4_SCL"), 297 PINCTRL_PIN(TWSI4_SCL, "TWSI4_SCL"),
298 PINCTRL_PIN(TWSI4_SDA, "TWSI4_SDA"), 298 PINCTRL_PIN(TWSI4_SDA, "TWSI4_SDA"),
299 PINCTRL_PIN(G_CLKREQ, "G_CLKREQ"), 299 PINCTRL_PIN(G_CLKREQ, "G_CLKREQ"),
300 PINCTRL_PIN(VCXO_REQ, "VCXO_REQ"), 300 PINCTRL_PIN(VCXO_REQ, "VCXO_REQ"),
301 PINCTRL_PIN(VCXO_OUT, "VCXO_OUT"), 301 PINCTRL_PIN(VCXO_OUT, "VCXO_OUT"),
302 }; 302 };
303 303
304 struct pxa3xx_mfp_pin mmp2_mfp[] = { 304 struct pxa3xx_mfp_pin mmp2_mfp[] = {
305 /* pin offs f0 f1 f2 f3 f4 f5 f6 f7 */ 305 /* pin offs f0 f1 f2 f3 f4 f5 f6 f7 */
306 MFPR_MMP2(GPIO0, 0x054, GPIO, KP_MK, NONE, SPI, NONE, NONE, NONE, NONE), 306 MFPR_MMP2(GPIO0, 0x054, GPIO, KP_MK, NONE, SPI, NONE, NONE, NONE, NONE),
307 MFPR_MMP2(GPIO1, 0x058, GPIO, KP_MK, NONE, SPI, NONE, NONE, NONE, NONE), 307 MFPR_MMP2(GPIO1, 0x058, GPIO, KP_MK, NONE, SPI, NONE, NONE, NONE, NONE),
308 MFPR_MMP2(GPIO2, 0x05C, GPIO, KP_MK, NONE, SPI, NONE, NONE, NONE, NONE), 308 MFPR_MMP2(GPIO2, 0x05C, GPIO, KP_MK, NONE, SPI, NONE, NONE, NONE, NONE),
309 MFPR_MMP2(GPIO3, 0x060, GPIO, KP_MK, NONE, SPI, NONE, NONE, NONE, NONE), 309 MFPR_MMP2(GPIO3, 0x060, GPIO, KP_MK, NONE, SPI, NONE, NONE, NONE, NONE),
310 MFPR_MMP2(GPIO4, 0x064, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE), 310 MFPR_MMP2(GPIO4, 0x064, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE),
311 MFPR_MMP2(GPIO5, 0x068, GPIO, KP_MK, NONE, SPI, NONE, NONE, NONE, NONE), 311 MFPR_MMP2(GPIO5, 0x068, GPIO, KP_MK, NONE, SPI, NONE, NONE, NONE, NONE),
312 MFPR_MMP2(GPIO6, 0x06C, GPIO, KP_MK, NONE, SPI, NONE, NONE, NONE, NONE), 312 MFPR_MMP2(GPIO6, 0x06C, GPIO, KP_MK, NONE, SPI, NONE, NONE, NONE, NONE),
313 MFPR_MMP2(GPIO7, 0x070, GPIO, KP_MK, NONE, SPI, NONE, NONE, NONE, NONE), 313 MFPR_MMP2(GPIO7, 0x070, GPIO, KP_MK, NONE, SPI, NONE, NONE, NONE, NONE),
314 MFPR_MMP2(GPIO8, 0x074, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE), 314 MFPR_MMP2(GPIO8, 0x074, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE),
315 MFPR_MMP2(GPIO9, 0x078, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE), 315 MFPR_MMP2(GPIO9, 0x078, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE),
316 MFPR_MMP2(GPIO10, 0x07C, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE), 316 MFPR_MMP2(GPIO10, 0x07C, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE),
317 MFPR_MMP2(GPIO11, 0x080, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE), 317 MFPR_MMP2(GPIO11, 0x080, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE),
318 MFPR_MMP2(GPIO12, 0x084, GPIO, KP_MK, NONE, CCIC1, NONE, NONE, NONE, NONE), 318 MFPR_MMP2(GPIO12, 0x084, GPIO, KP_MK, NONE, CCIC1, NONE, NONE, NONE, NONE),
319 MFPR_MMP2(GPIO13, 0x088, GPIO, KP_MK, NONE, CCIC1, NONE, NONE, NONE, NONE), 319 MFPR_MMP2(GPIO13, 0x088, GPIO, KP_MK, NONE, CCIC1, NONE, NONE, NONE, NONE),
320 MFPR_MMP2(GPIO14, 0x08C, GPIO, KP_MK, NONE, CCIC1, NONE, NONE, NONE, NONE), 320 MFPR_MMP2(GPIO14, 0x08C, GPIO, KP_MK, NONE, CCIC1, NONE, NONE, NONE, NONE),
321 MFPR_MMP2(GPIO15, 0x090, GPIO, KP_MK, KP_DK, CCIC1, NONE, NONE, NONE, NONE), 321 MFPR_MMP2(GPIO15, 0x090, GPIO, KP_MK, KP_DK, CCIC1, NONE, NONE, NONE, NONE),
322 MFPR_MMP2(GPIO16, 0x094, GPIO, KP_DK, ROT, CCIC1, NONE, NONE, NONE, NONE), 322 MFPR_MMP2(GPIO16, 0x094, GPIO, KP_DK, ROT, CCIC1, NONE, NONE, NONE, NONE),
323 MFPR_MMP2(GPIO17, 0x098, GPIO, KP_DK, ROT, CCIC1, NONE, NONE, NONE, NONE), 323 MFPR_MMP2(GPIO17, 0x098, GPIO, KP_DK, ROT, CCIC1, NONE, NONE, NONE, NONE),
324 MFPR_MMP2(GPIO18, 0x09C, GPIO, KP_DK, ROT, CCIC1, NONE, NONE, NONE, NONE), 324 MFPR_MMP2(GPIO18, 0x09C, GPIO, KP_DK, ROT, CCIC1, NONE, NONE, NONE, NONE),
325 MFPR_MMP2(GPIO19, 0x0A0, GPIO, KP_DK, ROT, CCIC1, NONE, NONE, NONE, NONE), 325 MFPR_MMP2(GPIO19, 0x0A0, GPIO, KP_DK, ROT, CCIC1, NONE, NONE, NONE, NONE),
326 MFPR_MMP2(GPIO20, 0x0A4, GPIO, KP_DK, TB, CCIC1, NONE, NONE, NONE, NONE), 326 MFPR_MMP2(GPIO20, 0x0A4, GPIO, KP_DK, TB, CCIC1, NONE, NONE, NONE, NONE),
327 MFPR_MMP2(GPIO21, 0x0A8, GPIO, KP_DK, TB, CCIC1, NONE, NONE, NONE, NONE), 327 MFPR_MMP2(GPIO21, 0x0A8, GPIO, KP_DK, TB, CCIC1, NONE, NONE, NONE, NONE),
328 MFPR_MMP2(GPIO22, 0x0AC, GPIO, KP_DK, TB, CCIC1, NONE, NONE, NONE, NONE), 328 MFPR_MMP2(GPIO22, 0x0AC, GPIO, KP_DK, TB, CCIC1, NONE, NONE, NONE, NONE),
329 MFPR_MMP2(GPIO23, 0x0B0, GPIO, KP_DK, TB, CCIC1, NONE, NONE, NONE, NONE), 329 MFPR_MMP2(GPIO23, 0x0B0, GPIO, KP_DK, TB, CCIC1, NONE, NONE, NONE, NONE),
330 MFPR_MMP2(GPIO24, 0x0B4, GPIO, I2S, VCXO_OUT, NONE, NONE, NONE, NONE, NONE), 330 MFPR_MMP2(GPIO24, 0x0B4, GPIO, I2S, VCXO_OUT, NONE, NONE, NONE, NONE, NONE),
331 MFPR_MMP2(GPIO25, 0x0B8, GPIO, I2S, HDMI, SSPA2, NONE, NONE, NONE, NONE), 331 MFPR_MMP2(GPIO25, 0x0B8, GPIO, I2S, HDMI, SSPA2, NONE, NONE, NONE, NONE),
332 MFPR_MMP2(GPIO26, 0x0BC, GPIO, I2S, HDMI, SSPA2, NONE, NONE, NONE, NONE), 332 MFPR_MMP2(GPIO26, 0x0BC, GPIO, I2S, HDMI, SSPA2, NONE, NONE, NONE, NONE),
333 MFPR_MMP2(GPIO27, 0x0C0, GPIO, I2S, HDMI, SSPA2, NONE, NONE, NONE, NONE), 333 MFPR_MMP2(GPIO27, 0x0C0, GPIO, I2S, HDMI, SSPA2, NONE, NONE, NONE, NONE),
334 MFPR_MMP2(GPIO28, 0x0C4, GPIO, I2S, NONE, SSPA2, NONE, NONE, NONE, NONE), 334 MFPR_MMP2(GPIO28, 0x0C4, GPIO, I2S, NONE, SSPA2, NONE, NONE, NONE, NONE),
335 MFPR_MMP2(GPIO29, 0x0C8, GPIO, UART1, KP_MK, NONE, NONE, NONE, AAS_SPI, NONE), 335 MFPR_MMP2(GPIO29, 0x0C8, GPIO, UART1, KP_MK, NONE, NONE, NONE, AAS_SPI, NONE),
336 MFPR_MMP2(GPIO30, 0x0CC, GPIO, UART1, KP_MK, NONE, NONE, NONE, AAS_SPI, NONE), 336 MFPR_MMP2(GPIO30, 0x0CC, GPIO, UART1, KP_MK, NONE, NONE, NONE, AAS_SPI, NONE),
337 MFPR_MMP2(GPIO31, 0x0D0, GPIO, UART1, KP_MK, NONE, NONE, NONE, AAS_SPI, NONE), 337 MFPR_MMP2(GPIO31, 0x0D0, GPIO, UART1, KP_MK, NONE, NONE, NONE, AAS_SPI, NONE),
338 MFPR_MMP2(GPIO32, 0x0D4, GPIO, UART1, KP_MK, NONE, NONE, NONE, AAS_SPI, NONE), 338 MFPR_MMP2(GPIO32, 0x0D4, GPIO, UART1, KP_MK, NONE, NONE, NONE, AAS_SPI, NONE),
339 MFPR_MMP2(GPIO33, 0x0D8, GPIO, SSPA2, I2S, NONE, NONE, NONE, NONE, NONE), 339 MFPR_MMP2(GPIO33, 0x0D8, GPIO, SSPA2, I2S, NONE, NONE, NONE, NONE, NONE),
340 MFPR_MMP2(GPIO34, 0x0DC, GPIO, SSPA2, I2S, NONE, NONE, NONE, NONE, NONE), 340 MFPR_MMP2(GPIO34, 0x0DC, GPIO, SSPA2, I2S, NONE, NONE, NONE, NONE, NONE),
341 MFPR_MMP2(GPIO35, 0x0E0, GPIO, SSPA2, I2S, NONE, NONE, NONE, NONE, NONE), 341 MFPR_MMP2(GPIO35, 0x0E0, GPIO, SSPA2, I2S, NONE, NONE, NONE, NONE, NONE),
342 MFPR_MMP2(GPIO36, 0x0E4, GPIO, SSPA2, I2S, NONE, NONE, NONE, NONE, NONE), 342 MFPR_MMP2(GPIO36, 0x0E4, GPIO, SSPA2, I2S, NONE, NONE, NONE, NONE, NONE),
343 MFPR_MMP2(GPIO37, 0x0E8, GPIO, MMC2, SSP1, TWSI2, UART2, UART3, AAS_SPI, AAS_TWSI), 343 MFPR_MMP2(GPIO37, 0x0E8, GPIO, MMC2, SSP1, TWSI2, UART2, UART3, AAS_SPI, AAS_TWSI),
344 MFPR_MMP2(GPIO38, 0x0EC, GPIO, MMC2, SSP1, TWSI2, UART2, UART3, AAS_SPI, AAS_TWSI), 344 MFPR_MMP2(GPIO38, 0x0EC, GPIO, MMC2, SSP1, TWSI2, UART2, UART3, AAS_SPI, AAS_TWSI),
345 MFPR_MMP2(GPIO39, 0x0F0, GPIO, MMC2, SSP1, TWSI2, UART2, UART3, AAS_SPI, AAS_TWSI), 345 MFPR_MMP2(GPIO39, 0x0F0, GPIO, MMC2, SSP1, TWSI2, UART2, UART3, AAS_SPI, AAS_TWSI),
346 MFPR_MMP2(GPIO40, 0x0F4, GPIO, MMC2, SSP1, TWSI2, UART2, UART3, AAS_SPI, AAS_TWSI), 346 MFPR_MMP2(GPIO40, 0x0F4, GPIO, MMC2, SSP1, TWSI2, UART2, UART3, AAS_SPI, AAS_TWSI),
347 MFPR_MMP2(GPIO41, 0x0F8, GPIO, MMC2, TWSI5, NONE, NONE, NONE, NONE, NONE), 347 MFPR_MMP2(GPIO41, 0x0F8, GPIO, MMC2, TWSI5, NONE, NONE, NONE, NONE, NONE),
348 MFPR_MMP2(GPIO42, 0x0FC, GPIO, MMC2, TWSI5, NONE, NONE, NONE, NONE, NONE), 348 MFPR_MMP2(GPIO42, 0x0FC, GPIO, MMC2, TWSI5, NONE, NONE, NONE, NONE, NONE),
349 MFPR_MMP2(GPIO43, 0x100, GPIO, TWSI2, UART4, SSP1, UART2, UART3, NONE, AAS_TWSI), 349 MFPR_MMP2(GPIO43, 0x100, GPIO, TWSI2, UART4, SSP1, UART2, UART3, NONE, AAS_TWSI),
350 MFPR_MMP2(GPIO44, 0x104, GPIO, TWSI2, UART4, SSP1, UART2, UART3, NONE, AAS_TWSI), 350 MFPR_MMP2(GPIO44, 0x104, GPIO, TWSI2, UART4, SSP1, UART2, UART3, NONE, AAS_TWSI),
351 MFPR_MMP2(GPIO45, 0x108, GPIO, UART1, UART4, SSP1, UART2, UART3, NONE, NONE), 351 MFPR_MMP2(GPIO45, 0x108, GPIO, UART1, UART4, SSP1, UART2, UART3, NONE, NONE),
352 MFPR_MMP2(GPIO46, 0x10C, GPIO, UART1, UART4, SSP1, UART2, UART3, NONE, NONE), 352 MFPR_MMP2(GPIO46, 0x10C, GPIO, UART1, UART4, SSP1, UART2, UART3, NONE, NONE),
353 MFPR_MMP2(GPIO47, 0x110, GPIO, UART2, SSP2, TWSI6, CAM2, AAS_SPI, AAS_GPIO, NONE), 353 MFPR_MMP2(GPIO47, 0x110, GPIO, UART2, SSP2, TWSI6, CAM2, AAS_SPI, AAS_GPIO, NONE),
354 MFPR_MMP2(GPIO48, 0x114, GPIO, UART2, SSP2, TWSI6, CAM2, AAS_SPI, AAS_GPIO, NONE), 354 MFPR_MMP2(GPIO48, 0x114, GPIO, UART2, SSP2, TWSI6, CAM2, AAS_SPI, AAS_GPIO, NONE),
355 MFPR_MMP2(GPIO49, 0x118, GPIO, UART2, SSP2, PWM, CCIC2, AAS_SPI, NONE, NONE), 355 MFPR_MMP2(GPIO49, 0x118, GPIO, UART2, SSP2, PWM, CCIC2, AAS_SPI, NONE, NONE),
356 MFPR_MMP2(GPIO50, 0x11C, GPIO, UART2, SSP2, PWM, CCIC2, AAS_SPI, NONE, NONE), 356 MFPR_MMP2(GPIO50, 0x11C, GPIO, UART2, SSP2, PWM, CCIC2, AAS_SPI, NONE, NONE),
357 MFPR_MMP2(GPIO51, 0x120, GPIO, UART3, ROT, AAS_GPIO, PWM, NONE, NONE, NONE), 357 MFPR_MMP2(GPIO51, 0x120, GPIO, UART3, ROT, AAS_GPIO, PWM, NONE, NONE, NONE),
358 MFPR_MMP2(GPIO52, 0x124, GPIO, UART3, ROT, AAS_GPIO, PWM, NONE, NONE, NONE), 358 MFPR_MMP2(GPIO52, 0x124, GPIO, UART3, ROT, AAS_GPIO, PWM, NONE, NONE, NONE),
359 MFPR_MMP2(GPIO53, 0x128, GPIO, UART3, TWSI2, VCXO_REQ, NONE, PWM, NONE, AAS_TWSI), 359 MFPR_MMP2(GPIO53, 0x128, GPIO, UART3, TWSI2, VCXO_REQ, NONE, PWM, NONE, AAS_TWSI),
360 MFPR_MMP2(GPIO54, 0x12C, GPIO, UART3, TWSI2, VCXO_OUT, HDMI, PWM, NONE, AAS_TWSI), 360 MFPR_MMP2(GPIO54, 0x12C, GPIO, UART3, TWSI2, VCXO_OUT, HDMI, PWM, NONE, AAS_TWSI),
361 MFPR_MMP2(GPIO55, 0x130, GPIO, SSP2, SSP1, UART2, ROT, TWSI2, SSP3, AAS_TWSI), 361 MFPR_MMP2(GPIO55, 0x130, GPIO, SSP2, SSP1, UART2, ROT, TWSI2, SSP3, AAS_TWSI),
362 MFPR_MMP2(GPIO56, 0x134, GPIO, SSP2, SSP1, UART2, ROT, TWSI2, KP_DK, AAS_TWSI), 362 MFPR_MMP2(GPIO56, 0x134, GPIO, SSP2, SSP1, UART2, ROT, TWSI2, KP_DK, AAS_TWSI),
363 MFPR_MMP2(GPIO57, 0x138, GPIO, SSP2_RX, SSP1_TXRX, SSP2_FRM, SSP1_RX, VCXO_REQ, KP_DK, NONE), 363 MFPR_MMP2(GPIO57, 0x138, GPIO, SSP2_RX, SSP1_TXRX, SSP2_FRM, SSP1_RX, VCXO_REQ, KP_DK, NONE),
364 MFPR_MMP2(GPIO58, 0x13C, GPIO, SSP2, SSP1_RX, SSP1_FRM, SSP1_TXRX, VCXO_REQ, KP_DK, NONE), 364 MFPR_MMP2(GPIO58, 0x13C, GPIO, SSP2, SSP1_RX, SSP1_FRM, SSP1_TXRX, VCXO_REQ, KP_DK, NONE),
365 MFPR_MMP2(GPIO59, 0x280, GPIO, CCIC1, ULPI, MMC3, CCIC2, UART3, UART4, NONE), 365 MFPR_MMP2(GPIO59, 0x280, GPIO, CCIC1, ULPI, MMC3, CCIC2, UART3, UART4, NONE),
366 MFPR_MMP2(GPIO60, 0x284, GPIO, CCIC1, ULPI, MMC3, CCIC2, UART3, UART4, NONE), 366 MFPR_MMP2(GPIO60, 0x284, GPIO, CCIC1, ULPI, MMC3, CCIC2, UART3, UART4, NONE),
367 MFPR_MMP2(GPIO61, 0x288, GPIO, CCIC1, ULPI, MMC3, CCIC2, UART3, HDMI, NONE), 367 MFPR_MMP2(GPIO61, 0x288, GPIO, CCIC1, ULPI, MMC3, CCIC2, UART3, HDMI, NONE),
368 MFPR_MMP2(GPIO62, 0x28C, GPIO, CCIC1, ULPI, MMC3, CCIC2, UART3, NONE, NONE), 368 MFPR_MMP2(GPIO62, 0x28C, GPIO, CCIC1, ULPI, MMC3, CCIC2, UART3, NONE, NONE),
369 MFPR_MMP2(GPIO63, 0x290, GPIO, CCIC1, ULPI, MMC3, CCIC2, MSP, UART4, NONE), 369 MFPR_MMP2(GPIO63, 0x290, GPIO, CCIC1, ULPI, MMC3, CCIC2, MSP, UART4, NONE),
370 MFPR_MMP2(GPIO64, 0x294, GPIO, CCIC1, ULPI, MMC3, CCIC2, MSP, UART4, NONE), 370 MFPR_MMP2(GPIO64, 0x294, GPIO, CCIC1, ULPI, MMC3, CCIC2, MSP, UART4, NONE),
371 MFPR_MMP2(GPIO65, 0x298, GPIO, CCIC1, ULPI, MMC3, CCIC2, MSP, UART4, NONE), 371 MFPR_MMP2(GPIO65, 0x298, GPIO, CCIC1, ULPI, MMC3, CCIC2, MSP, UART4, NONE),
372 MFPR_MMP2(GPIO66, 0x29C, GPIO, CCIC1, ULPI, MMC3, CCIC2, MSP, UART4, NONE), 372 MFPR_MMP2(GPIO66, 0x29C, GPIO, CCIC1, ULPI, MMC3, CCIC2, MSP, UART4, NONE),
373 MFPR_MMP2(GPIO67, 0x2A0, GPIO, CCIC1, ULPI, MMC3, CCIC2, MSP, NONE, NONE), 373 MFPR_MMP2(GPIO67, 0x2A0, GPIO, CCIC1, ULPI, MMC3, CCIC2, MSP, NONE, NONE),
374 MFPR_MMP2(GPIO68, 0x2A4, GPIO, CCIC1, ULPI, MMC3, CCIC2, MSP, LCD, NONE), 374 MFPR_MMP2(GPIO68, 0x2A4, GPIO, CCIC1, ULPI, MMC3, CCIC2, MSP, LCD, NONE),
375 MFPR_MMP2(GPIO69, 0x2A8, GPIO, CCIC1, ULPI, MMC3, CCIC2, NONE, LCD, NONE), 375 MFPR_MMP2(GPIO69, 0x2A8, GPIO, CCIC1, ULPI, MMC3, CCIC2, NONE, LCD, NONE),
376 MFPR_MMP2(GPIO70, 0x2AC, GPIO, CCIC1, ULPI, MMC3, CCIC2, MSP, LCD, NONE), 376 MFPR_MMP2(GPIO70, 0x2AC, GPIO, CCIC1, ULPI, MMC3, CCIC2, MSP, LCD, NONE),
377 MFPR_MMP2(GPIO71, 0x2B0, GPIO, TWSI3, NONE, PWM, NONE, NONE, LCD, AAS_TWSI), 377 MFPR_MMP2(GPIO71, 0x2B0, GPIO, TWSI3, NONE, PWM, NONE, NONE, LCD, AAS_TWSI),
378 MFPR_MMP2(GPIO72, 0x2B4, GPIO, TWSI3, HDMI, PWM, NONE, NONE, LCD, AAS_TWSI), 378 MFPR_MMP2(GPIO72, 0x2B4, GPIO, TWSI3, HDMI, PWM, NONE, NONE, LCD, AAS_TWSI),
379 MFPR_MMP2(GPIO73, 0x2B8, GPIO, VCXO_REQ, 32K_CLKOUT, PWM, VCXO_OUT, NONE, LCD, NONE), 379 MFPR_MMP2(GPIO73, 0x2B8, GPIO, VCXO_REQ, 32K_CLKOUT, PWM, VCXO_OUT, NONE, LCD, NONE),
380 MFPR_MMP2(GPIO74, 0x170, GPIO, LCD, SMC, MMC4, SSP3, UART2, UART4, TIPU), 380 MFPR_MMP2(GPIO74, 0x170, GPIO, LCD, SMC, MMC4, SSP3, UART2, UART4, TIPU),
381 MFPR_MMP2(GPIO75, 0x174, GPIO, LCD, SMC, MMC4, SSP3, UART2, UART4, TIPU), 381 MFPR_MMP2(GPIO75, 0x174, GPIO, LCD, SMC, MMC4, SSP3, UART2, UART4, TIPU),
382 MFPR_MMP2(GPIO76, 0x178, GPIO, LCD, SMC, MMC4, SSP3, UART2, UART4, TIPU), 382 MFPR_MMP2(GPIO76, 0x178, GPIO, LCD, SMC, MMC4, SSP3, UART2, UART4, TIPU),
383 MFPR_MMP2(GPIO77, 0x17C, GPIO, LCD, SMC, MMC4, SSP3, UART2, UART4, TIPU), 383 MFPR_MMP2(GPIO77, 0x17C, GPIO, LCD, SMC, MMC4, SSP3, UART2, UART4, TIPU),
384 MFPR_MMP2(GPIO78, 0x180, GPIO, LCD, HDMI, MMC4, NONE, SSP4, AAS_SPI, TIPU), 384 MFPR_MMP2(GPIO78, 0x180, GPIO, LCD, HDMI, MMC4, NONE, SSP4, AAS_SPI, TIPU),
385 MFPR_MMP2(GPIO79, 0x184, GPIO, LCD, AAS_GPIO, MMC4, NONE, SSP4, AAS_SPI, TIPU), 385 MFPR_MMP2(GPIO79, 0x184, GPIO, LCD, AAS_GPIO, MMC4, NONE, SSP4, AAS_SPI, TIPU),
386 MFPR_MMP2(GPIO80, 0x188, GPIO, LCD, AAS_GPIO, MMC4, NONE, SSP4, AAS_SPI, TIPU), 386 MFPR_MMP2(GPIO80, 0x188, GPIO, LCD, AAS_GPIO, MMC4, NONE, SSP4, AAS_SPI, TIPU),
387 MFPR_MMP2(GPIO81, 0x18C, GPIO, LCD, AAS_GPIO, MMC4, NONE, SSP4, AAS_SPI, TIPU), 387 MFPR_MMP2(GPIO81, 0x18C, GPIO, LCD, AAS_GPIO, MMC4, NONE, SSP4, AAS_SPI, TIPU),
388 MFPR_MMP2(GPIO82, 0x190, GPIO, LCD, NONE, MMC4, NONE, NONE, CCIC2, TIPU), 388 MFPR_MMP2(GPIO82, 0x190, GPIO, LCD, NONE, MMC4, NONE, NONE, CCIC2, TIPU),
389 MFPR_MMP2(GPIO83, 0x194, GPIO, LCD, NONE, MMC4, NONE, NONE, CCIC2, TIPU), 389 MFPR_MMP2(GPIO83, 0x194, GPIO, LCD, NONE, MMC4, NONE, NONE, CCIC2, TIPU),
390 MFPR_MMP2(GPIO84, 0x198, GPIO, LCD, SMC, MMC2, NONE, TWSI5, AAS_TWSI, TIPU), 390 MFPR_MMP2(GPIO84, 0x198, GPIO, LCD, SMC, MMC2, NONE, TWSI5, AAS_TWSI, TIPU),
391 MFPR_MMP2(GPIO85, 0x19C, GPIO, LCD, SMC, MMC2, NONE, TWSI5, AAS_TWSI, TIPU), 391 MFPR_MMP2(GPIO85, 0x19C, GPIO, LCD, SMC, MMC2, NONE, TWSI5, AAS_TWSI, TIPU),
392 MFPR_MMP2(GPIO86, 0x1A0, GPIO, LCD, SMC, MMC2, NONE, TWSI6, CCIC2, TIPU), 392 MFPR_MMP2(GPIO86, 0x1A0, GPIO, LCD, SMC, MMC2, NONE, TWSI6, CCIC2, TIPU),
393 MFPR_MMP2(GPIO87, 0x1A4, GPIO, LCD, SMC, MMC2, NONE, TWSI6, CCIC2, TIPU), 393 MFPR_MMP2(GPIO87, 0x1A4, GPIO, LCD, SMC, MMC2, NONE, TWSI6, CCIC2, TIPU),
394 MFPR_MMP2(GPIO88, 0x1A8, GPIO, LCD, AAS_GPIO, MMC2, NONE, NONE, CCIC2, TIPU), 394 MFPR_MMP2(GPIO88, 0x1A8, GPIO, LCD, AAS_GPIO, MMC2, NONE, NONE, CCIC2, TIPU),
395 MFPR_MMP2(GPIO89, 0x1AC, GPIO, LCD, AAS_GPIO, MMC2, NONE, NONE, CCIC2, TIPU), 395 MFPR_MMP2(GPIO89, 0x1AC, GPIO, LCD, AAS_GPIO, MMC2, NONE, NONE, CCIC2, TIPU),
396 MFPR_MMP2(GPIO90, 0x1B0, GPIO, LCD, AAS_GPIO, MMC2, NONE, NONE, CCIC2, TIPU), 396 MFPR_MMP2(GPIO90, 0x1B0, GPIO, LCD, AAS_GPIO, MMC2, NONE, NONE, CCIC2, TIPU),
397 MFPR_MMP2(GPIO91, 0x1B4, GPIO, LCD, AAS_GPIO, MMC2, NONE, NONE, CCIC2, TIPU), 397 MFPR_MMP2(GPIO91, 0x1B4, GPIO, LCD, AAS_GPIO, MMC2, NONE, NONE, CCIC2, TIPU),
398 MFPR_MMP2(GPIO92, 0x1B8, GPIO, LCD, AAS_GPIO, MMC2, NONE, NONE, CCIC2, TIPU), 398 MFPR_MMP2(GPIO92, 0x1B8, GPIO, LCD, AAS_GPIO, MMC2, NONE, NONE, CCIC2, TIPU),
399 MFPR_MMP2(GPIO93, 0x1BC, GPIO, LCD, AAS_GPIO, MMC2, NONE, NONE, CCIC2, TIPU), 399 MFPR_MMP2(GPIO93, 0x1BC, GPIO, LCD, AAS_GPIO, MMC2, NONE, NONE, CCIC2, TIPU),
400 MFPR_MMP2(GPIO94, 0x1C0, GPIO, LCD, AAS_GPIO, SPI, NONE, AAS_SPI, CCIC2, TIPU), 400 MFPR_MMP2(GPIO94, 0x1C0, GPIO, LCD, AAS_GPIO, SPI, NONE, AAS_SPI, CCIC2, TIPU),
401 MFPR_MMP2(GPIO95, 0x1C4, GPIO, LCD, TWSI3, SPI, AAS_DEU_EX, AAS_SPI, CCIC2, TIPU), 401 MFPR_MMP2(GPIO95, 0x1C4, GPIO, LCD, TWSI3, SPI, AAS_DEU_EX, AAS_SPI, CCIC2, TIPU),
402 MFPR_MMP2(GPIO96, 0x1C8, GPIO, LCD, TWSI3, SPI, AAS_DEU_EX, AAS_SPI, NONE, TIPU), 402 MFPR_MMP2(GPIO96, 0x1C8, GPIO, LCD, TWSI3, SPI, AAS_DEU_EX, AAS_SPI, NONE, TIPU),
403 MFPR_MMP2(GPIO97, 0x1CC, GPIO, LCD, TWSI6, SPI, AAS_DEU_EX, AAS_SPI, NONE, TIPU), 403 MFPR_MMP2(GPIO97, 0x1CC, GPIO, LCD, TWSI6, SPI, AAS_DEU_EX, AAS_SPI, NONE, TIPU),
404 MFPR_MMP2(GPIO98, 0x1D0, GPIO, LCD, TWSI6, SPI, ONE_WIRE, NONE, NONE, TIPU), 404 MFPR_MMP2(GPIO98, 0x1D0, GPIO, LCD, TWSI6, SPI, ONE_WIRE, NONE, NONE, TIPU),
405 MFPR_MMP2(GPIO99, 0x1D4, GPIO, LCD, SMC, SPI, TWSI5, NONE, NONE, TIPU), 405 MFPR_MMP2(GPIO99, 0x1D4, GPIO, LCD, SMC, SPI, TWSI5, NONE, NONE, TIPU),
406 MFPR_MMP2(GPIO100, 0x1D8, GPIO, LCD, SMC, SPI, TWSI5, NONE, NONE, TIPU), 406 MFPR_MMP2(GPIO100, 0x1D8, GPIO, LCD, SMC, SPI, TWSI5, NONE, NONE, TIPU),
407 MFPR_MMP2(GPIO101, 0x1DC, GPIO, LCD, SMC, SPI, NONE, NONE, NONE, TIPU), 407 MFPR_MMP2(GPIO101, 0x1DC, GPIO, LCD, SMC, SPI, NONE, NONE, NONE, TIPU),
408 MFPR_MMP2(GPIO102, 0x000, USIM, GPIO, FSIC, KP_DK, LCD, NONE, NONE, NONE), 408 MFPR_MMP2(GPIO102, 0x000, USIM, GPIO, FSIC, KP_DK, LCD, NONE, NONE, NONE),
409 MFPR_MMP2(GPIO103, 0x004, USIM, GPIO, FSIC, KP_DK, LCD, NONE, NONE, NONE), 409 MFPR_MMP2(GPIO103, 0x004, USIM, GPIO, FSIC, KP_DK, LCD, NONE, NONE, NONE),
410 MFPR_MMP2(GPIO104, 0x1FC, NAND, GPIO, NONE, NONE, NAND, NONE, NONE, NONE), 410 MFPR_MMP2(GPIO104, 0x1FC, NAND, GPIO, NONE, NONE, NAND, NONE, NONE, NONE),
411 MFPR_MMP2(GPIO105, 0x1F8, NAND, GPIO, NONE, NONE, NAND, NONE, NONE, NONE), 411 MFPR_MMP2(GPIO105, 0x1F8, NAND, GPIO, NONE, NONE, NAND, NONE, NONE, NONE),
412 MFPR_MMP2(GPIO106, 0x1F4, NAND, GPIO, NONE, NONE, NAND, NONE, NONE, NONE), 412 MFPR_MMP2(GPIO106, 0x1F4, NAND, GPIO, NONE, NONE, NAND, NONE, NONE, NONE),
413 MFPR_MMP2(GPIO107, 0x1F0, NAND, GPIO, NONE, NONE, NAND, NONE, NONE, NONE), 413 MFPR_MMP2(GPIO107, 0x1F0, NAND, GPIO, NONE, NONE, NAND, NONE, NONE, NONE),
414 MFPR_MMP2(GPIO108, 0x21C, NAND, GPIO, NONE, NONE, NAND, NONE, NONE, NONE), 414 MFPR_MMP2(GPIO108, 0x21C, NAND, GPIO, NONE, NONE, NAND, NONE, NONE, NONE),
415 MFPR_MMP2(GPIO109, 0x218, NAND, GPIO, NONE, NONE, NAND, NONE, NONE, NONE), 415 MFPR_MMP2(GPIO109, 0x218, NAND, GPIO, NONE, NONE, NAND, NONE, NONE, NONE),
416 MFPR_MMP2(GPIO110, 0x214, NAND, GPIO, NONE, NONE, NAND, NONE, NONE, NONE), 416 MFPR_MMP2(GPIO110, 0x214, NAND, GPIO, NONE, NONE, NAND, NONE, NONE, NONE),
417 MFPR_MMP2(GPIO111, 0x200, NAND, GPIO, MMC3, NONE, NONE, NONE, NONE, NONE), 417 MFPR_MMP2(GPIO111, 0x200, NAND, GPIO, MMC3, NONE, NONE, NONE, NONE, NONE),
418 MFPR_MMP2(GPIO112, 0x244, NAND, GPIO, MMC3, SMC, NONE, NONE, NONE, NONE), 418 MFPR_MMP2(GPIO112, 0x244, NAND, GPIO, MMC3, SMC, NONE, NONE, NONE, NONE),
419 MFPR_MMP2(GPIO113, 0x25C, SMC, GPIO, EXT_DMA, MMC3, SMC, HDMI, NONE, NONE), 419 MFPR_MMP2(GPIO113, 0x25C, SMC, GPIO, EXT_DMA, MMC3, SMC, HDMI, NONE, NONE),
420 MFPR_MMP2(GPIO114, 0x164, G_CLKOUT, 32K_CLKOUT, HDMI, NONE, NONE, NONE, NONE, NONE), 420 MFPR_MMP2(GPIO114, 0x164, G_CLKOUT, 32K_CLKOUT, HDMI, NONE, NONE, NONE, NONE, NONE),
421 MFPR_MMP2(GPIO115, 0x260, GPIO, NONE, AC, UART4, UART3, SSP1, NONE, NONE), 421 MFPR_MMP2(GPIO115, 0x260, GPIO, NONE, AC, UART4, UART3, SSP1, NONE, NONE),
422 MFPR_MMP2(GPIO116, 0x264, GPIO, NONE, AC, UART4, UART3, SSP1, NONE, NONE), 422 MFPR_MMP2(GPIO116, 0x264, GPIO, NONE, AC, UART4, UART3, SSP1, NONE, NONE),
423 MFPR_MMP2(GPIO117, 0x268, GPIO, NONE, AC, UART4, UART3, SSP1, NONE, NONE), 423 MFPR_MMP2(GPIO117, 0x268, GPIO, NONE, AC, UART4, UART3, SSP1, NONE, NONE),
424 MFPR_MMP2(GPIO118, 0x26C, GPIO, NONE, AC, UART4, UART3, SSP1, NONE, NONE), 424 MFPR_MMP2(GPIO118, 0x26C, GPIO, NONE, AC, UART4, UART3, SSP1, NONE, NONE),
425 MFPR_MMP2(GPIO119, 0x270, GPIO, NONE, CA, SSP3, NONE, NONE, NONE, NONE), 425 MFPR_MMP2(GPIO119, 0x270, GPIO, NONE, CA, SSP3, NONE, NONE, NONE, NONE),
426 MFPR_MMP2(GPIO120, 0x274, GPIO, NONE, CA, SSP3, NONE, NONE, NONE, NONE), 426 MFPR_MMP2(GPIO120, 0x274, GPIO, NONE, CA, SSP3, NONE, NONE, NONE, NONE),
427 MFPR_MMP2(GPIO121, 0x278, GPIO, NONE, CA, SSP3, NONE, NONE, NONE, NONE), 427 MFPR_MMP2(GPIO121, 0x278, GPIO, NONE, CA, SSP3, NONE, NONE, NONE, NONE),
428 MFPR_MMP2(GPIO122, 0x27C, GPIO, NONE, CA, SSP3, NONE, NONE, NONE, NONE), 428 MFPR_MMP2(GPIO122, 0x27C, GPIO, NONE, CA, SSP3, NONE, NONE, NONE, NONE),
429 MFPR_MMP2(GPIO123, 0x148, GPIO, SLEEP_IND, ONE_WIRE, 32K_CLKOUT, NONE, NONE, NONE, NONE), 429 MFPR_MMP2(GPIO123, 0x148, GPIO, SLEEP_IND, ONE_WIRE, 32K_CLKOUT, NONE, NONE, NONE, NONE),
430 MFPR_MMP2(GPIO124, 0x00C, GPIO, MMC1, LCD, MMC3, NAND, NONE, NONE, NONE), 430 MFPR_MMP2(GPIO124, 0x00C, GPIO, MMC1, LCD, MMC3, NAND, NONE, NONE, NONE),
431 MFPR_MMP2(GPIO125, 0x010, GPIO, MMC1, LCD, MMC3, NAND, NONE, NONE, NONE), 431 MFPR_MMP2(GPIO125, 0x010, GPIO, MMC1, LCD, MMC3, NAND, NONE, NONE, NONE),
432 MFPR_MMP2(GPIO126, 0x014, GPIO, MMC1, LCD, MMC3, NAND, NONE, NONE, NONE), 432 MFPR_MMP2(GPIO126, 0x014, GPIO, MMC1, LCD, MMC3, NAND, NONE, NONE, NONE),
433 MFPR_MMP2(GPIO127, 0x018, GPIO, NONE, LCD, MMC3, NAND, NONE, NONE, NONE), 433 MFPR_MMP2(GPIO127, 0x018, GPIO, NONE, LCD, MMC3, NAND, NONE, NONE, NONE),
434 MFPR_MMP2(GPIO128, 0x01C, GPIO, NONE, LCD, MMC3, NAND, NONE, NONE, NONE), 434 MFPR_MMP2(GPIO128, 0x01C, GPIO, NONE, LCD, MMC3, NAND, NONE, NONE, NONE),
435 MFPR_MMP2(GPIO129, 0x020, GPIO, MMC1, LCD, MMC3, NAND, NONE, NONE, NONE), 435 MFPR_MMP2(GPIO129, 0x020, GPIO, MMC1, LCD, MMC3, NAND, NONE, NONE, NONE),
436 MFPR_MMP2(GPIO130, 0x024, GPIO, MMC1, LCD, MMC3, NAND, NONE, NONE, NONE), 436 MFPR_MMP2(GPIO130, 0x024, GPIO, MMC1, LCD, MMC3, NAND, NONE, NONE, NONE),
437 MFPR_MMP2(GPIO131, 0x028, GPIO, MMC1, NONE, MSP, NONE, NONE, NONE, NONE), 437 MFPR_MMP2(GPIO131, 0x028, GPIO, MMC1, NONE, MSP, NONE, NONE, NONE, NONE),
438 MFPR_MMP2(GPIO132, 0x02C, GPIO, MMC1, PRI_JTAG, MSP, SSP3, AAS_JTAG, NONE, NONE), 438 MFPR_MMP2(GPIO132, 0x02C, GPIO, MMC1, PRI_JTAG, MSP, SSP3, AAS_JTAG, NONE, NONE),
439 MFPR_MMP2(GPIO133, 0x030, GPIO, MMC1, PRI_JTAG, MSP, SSP3, AAS_JTAG, NONE, NONE), 439 MFPR_MMP2(GPIO133, 0x030, GPIO, MMC1, PRI_JTAG, MSP, SSP3, AAS_JTAG, NONE, NONE),
440 MFPR_MMP2(GPIO134, 0x034, GPIO, MMC1, PRI_JTAG, MSP, SSP3, AAS_JTAG, NONE, NONE), 440 MFPR_MMP2(GPIO134, 0x034, GPIO, MMC1, PRI_JTAG, MSP, SSP3, AAS_JTAG, NONE, NONE),
441 MFPR_MMP2(GPIO135, 0x038, GPIO, NONE, LCD, MMC3, NAND, NONE, NONE, NONE), 441 MFPR_MMP2(GPIO135, 0x038, GPIO, NONE, LCD, MMC3, NAND, NONE, NONE, NONE),
442 MFPR_MMP2(GPIO136, 0x03C, GPIO, MMC1, PRI_JTAG, MSP, SSP3, AAS_JTAG, NONE, NONE), 442 MFPR_MMP2(GPIO136, 0x03C, GPIO, MMC1, PRI_JTAG, MSP, SSP3, AAS_JTAG, NONE, NONE),
443 MFPR_MMP2(GPIO137, 0x040, GPIO, HDMI, LCD, MSP, NONE, NONE, NONE, NONE), 443 MFPR_MMP2(GPIO137, 0x040, GPIO, HDMI, LCD, MSP, NONE, NONE, NONE, NONE),
444 MFPR_MMP2(GPIO138, 0x044, GPIO, NONE, LCD, MMC3, SMC, NONE, NONE, NONE), 444 MFPR_MMP2(GPIO138, 0x044, GPIO, NONE, LCD, MMC3, SMC, NONE, NONE, NONE),
445 MFPR_MMP2(GPIO139, 0x048, GPIO, MMC1, PRI_JTAG, MSP, NONE, AAS_JTAG, NONE, NONE), 445 MFPR_MMP2(GPIO139, 0x048, GPIO, MMC1, PRI_JTAG, MSP, NONE, AAS_JTAG, NONE, NONE),
446 MFPR_MMP2(GPIO140, 0x04C, GPIO, MMC1, LCD, NONE, NONE, UART2, UART1, NONE), 446 MFPR_MMP2(GPIO140, 0x04C, GPIO, MMC1, LCD, NONE, NONE, UART2, UART1, NONE),
447 MFPR_MMP2(GPIO141, 0x050, GPIO, MMC1, LCD, NONE, NONE, UART2, UART1, NONE), 447 MFPR_MMP2(GPIO141, 0x050, GPIO, MMC1, LCD, NONE, NONE, UART2, UART1, NONE),
448 MFPR_MMP2(GPIO142, 0x008, USIM, GPIO, FSIC, KP_DK, NONE, NONE, NONE, NONE), 448 MFPR_MMP2(GPIO142, 0x008, USIM, GPIO, FSIC, KP_DK, NONE, NONE, NONE, NONE),
449 MFPR_MMP2(GPIO143, 0x220, NAND, GPIO, SMC, NONE, NAND, NONE, NONE, NONE), 449 MFPR_MMP2(GPIO143, 0x220, NAND, GPIO, SMC, NONE, NAND, NONE, NONE, NONE),
450 MFPR_MMP2(GPIO144, 0x224, NAND, GPIO, SMC_INT, SMC, NAND, NONE, NONE, NONE), 450 MFPR_MMP2(GPIO144, 0x224, NAND, GPIO, SMC_INT, SMC, NAND, NONE, NONE, NONE),
451 MFPR_MMP2(GPIO145, 0x228, SMC, GPIO, NONE, NONE, SMC, NONE, NONE, NONE), 451 MFPR_MMP2(GPIO145, 0x228, SMC, GPIO, NONE, NONE, SMC, NONE, NONE, NONE),
452 MFPR_MMP2(GPIO146, 0x22C, SMC, GPIO, NONE, NONE, SMC, NONE, NONE, NONE), 452 MFPR_MMP2(GPIO146, 0x22C, SMC, GPIO, NONE, NONE, SMC, NONE, NONE, NONE),
453 MFPR_MMP2(GPIO147, 0x230, NAND, GPIO, NONE, NONE, NAND, NONE, NONE, NONE), 453 MFPR_MMP2(GPIO147, 0x230, NAND, GPIO, NONE, NONE, NAND, NONE, NONE, NONE),
454 MFPR_MMP2(GPIO148, 0x234, NAND, GPIO, NONE, NONE, NAND, NONE, NONE, NONE), 454 MFPR_MMP2(GPIO148, 0x234, NAND, GPIO, NONE, NONE, NAND, NONE, NONE, NONE),
455 MFPR_MMP2(GPIO149, 0x238, NAND, GPIO, NONE, NONE, NONE, NONE, NONE, NONE), 455 MFPR_MMP2(GPIO149, 0x238, NAND, GPIO, NONE, NONE, NONE, NONE, NONE, NONE),
456 MFPR_MMP2(GPIO150, 0x23C, NAND, GPIO, NONE, NONE, NAND, NONE, NONE, NONE), 456 MFPR_MMP2(GPIO150, 0x23C, NAND, GPIO, NONE, NONE, NAND, NONE, NONE, NONE),
457 MFPR_MMP2(GPIO151, 0x240, SMC, GPIO, MMC3, NONE, NONE, NONE, NONE, NONE), 457 MFPR_MMP2(GPIO151, 0x240, SMC, GPIO, MMC3, NONE, NONE, NONE, NONE, NONE),
458 MFPR_MMP2(GPIO152, 0x248, SMC, GPIO, NONE, NONE, SMC, NONE, NONE, NONE), 458 MFPR_MMP2(GPIO152, 0x248, SMC, GPIO, NONE, NONE, SMC, NONE, NONE, NONE),
459 MFPR_MMP2(GPIO153, 0x24C, SMC, GPIO, NONE, NONE, SMC, NONE, NONE, NONE), 459 MFPR_MMP2(GPIO153, 0x24C, SMC, GPIO, NONE, NONE, SMC, NONE, NONE, NONE),
460 MFPR_MMP2(GPIO154, 0x254, SMC_INT, GPIO, SMC, NONE, NAND, NONE, NONE, NONE), 460 MFPR_MMP2(GPIO154, 0x254, SMC_INT, GPIO, SMC, NONE, NAND, NONE, NONE, NONE),
461 MFPR_MMP2(GPIO155, 0x258, EXT_DMA, GPIO, SMC, NONE, EXT_DMA, NONE, NONE, NONE), 461 MFPR_MMP2(GPIO155, 0x258, EXT_DMA, GPIO, SMC, NONE, EXT_DMA, NONE, NONE, NONE),
462 MFPR_MMP2(GPIO156, 0x14C, PRI_JTAG, GPIO, PWM, NONE, NONE, NONE, NONE, NONE), 462 MFPR_MMP2(GPIO156, 0x14C, PRI_JTAG, GPIO, PWM, NONE, NONE, NONE, NONE, NONE),
463 MFPR_MMP2(GPIO157, 0x150, PRI_JTAG, GPIO, PWM, NONE, NONE, NONE, NONE, NONE), 463 MFPR_MMP2(GPIO157, 0x150, PRI_JTAG, GPIO, PWM, NONE, NONE, NONE, NONE, NONE),
464 MFPR_MMP2(GPIO158, 0x154, PRI_JTAG, GPIO, PWM, NONE, NONE, NONE, NONE, NONE), 464 MFPR_MMP2(GPIO158, 0x154, PRI_JTAG, GPIO, PWM, NONE, NONE, NONE, NONE, NONE),
465 MFPR_MMP2(GPIO159, 0x158, PRI_JTAG, GPIO, PWM, NONE, NONE, NONE, NONE, NONE), 465 MFPR_MMP2(GPIO159, 0x158, PRI_JTAG, GPIO, PWM, NONE, NONE, NONE, NONE, NONE),
466 MFPR_MMP2(GPIO160, 0x250, NAND, GPIO, SMC, NONE, NAND, NONE, NONE, NONE), 466 MFPR_MMP2(GPIO160, 0x250, NAND, GPIO, SMC, NONE, NAND, NONE, NONE, NONE),
467 MFPR_MMP2(GPIO161, 0x210, NAND, GPIO, NONE, NONE, NAND, NONE, NONE, NONE), 467 MFPR_MMP2(GPIO161, 0x210, NAND, GPIO, NONE, NONE, NAND, NONE, NONE, NONE),
468 MFPR_MMP2(GPIO162, 0x20C, NAND, GPIO, MMC3, NONE, NONE, NONE, NONE, NONE), 468 MFPR_MMP2(GPIO162, 0x20C, NAND, GPIO, MMC3, NONE, NONE, NONE, NONE, NONE),
469 MFPR_MMP2(GPIO163, 0x208, NAND, GPIO, MMC3, NONE, NONE, NONE, NONE, NONE), 469 MFPR_MMP2(GPIO163, 0x208, NAND, GPIO, MMC3, NONE, NONE, NONE, NONE, NONE),
470 MFPR_MMP2(GPIO164, 0x204, NAND, GPIO, MMC3, NONE, NONE, NONE, NONE, NONE), 470 MFPR_MMP2(GPIO164, 0x204, NAND, GPIO, MMC3, NONE, NONE, NONE, NONE, NONE),
471 MFPR_MMP2(GPIO165, 0x1EC, NAND, GPIO, MMC3, NONE, NONE, NONE, NONE, NONE), 471 MFPR_MMP2(GPIO165, 0x1EC, NAND, GPIO, MMC3, NONE, NONE, NONE, NONE, NONE),
472 MFPR_MMP2(GPIO166, 0x1E8, NAND, GPIO, MMC3, NONE, NONE, NONE, NONE, NONE), 472 MFPR_MMP2(GPIO166, 0x1E8, NAND, GPIO, MMC3, NONE, NONE, NONE, NONE, NONE),
473 MFPR_MMP2(GPIO167, 0x1E4, NAND, GPIO, MMC3, NONE, NONE, NONE, NONE, NONE), 473 MFPR_MMP2(GPIO167, 0x1E4, NAND, GPIO, MMC3, NONE, NONE, NONE, NONE, NONE),
474 MFPR_MMP2(GPIO168, 0x1E0, NAND, GPIO, MMC3, NONE, NONE, NONE, NONE, NONE), 474 MFPR_MMP2(GPIO168, 0x1E0, NAND, GPIO, MMC3, NONE, NONE, NONE, NONE, NONE),
475 MFPR_MMP2(TWSI4_SCL, 0x2BC, TWSI4, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 475 MFPR_MMP2(TWSI4_SCL, 0x2BC, TWSI4, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
476 MFPR_MMP2(TWSI4_SDA, 0x2C0, TWSI4, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 476 MFPR_MMP2(TWSI4_SDA, 0x2C0, TWSI4, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
477 MFPR_MMP2(G_CLKREQ, 0x160, G_CLKREQ, ONE_WIRE, NONE, NONE, NONE, NONE, NONE, NONE), 477 MFPR_MMP2(G_CLKREQ, 0x160, G_CLKREQ, ONE_WIRE, NONE, NONE, NONE, NONE, NONE, NONE),
478 MFPR_MMP2(VCXO_REQ, 0x168, VCXO_REQ, ONE_WIRE, PLL, NONE, NONE, NONE, NONE, NONE), 478 MFPR_MMP2(VCXO_REQ, 0x168, VCXO_REQ, ONE_WIRE, PLL, NONE, NONE, NONE, NONE, NONE),
479 MFPR_MMP2(VCXO_OUT, 0x16C, VCXO_OUT, 32K_CLKOUT, NONE, NONE, NONE, NONE, NONE, NONE), 479 MFPR_MMP2(VCXO_OUT, 0x16C, VCXO_OUT, 32K_CLKOUT, NONE, NONE, NONE, NONE, NONE, NONE),
480 }; 480 };
481 481
482 static const unsigned mmp2_uart1_pin1[] = {GPIO29, GPIO30, GPIO31, GPIO32}; 482 static const unsigned mmp2_uart1_pin1[] = {GPIO29, GPIO30, GPIO31, GPIO32};
483 static const unsigned mmp2_uart1_pin2[] = {GPIO45, GPIO46}; 483 static const unsigned mmp2_uart1_pin2[] = {GPIO45, GPIO46};
484 static const unsigned mmp2_uart1_pin3[] = {GPIO140, GPIO141}; 484 static const unsigned mmp2_uart1_pin3[] = {GPIO140, GPIO141};
485 static const unsigned mmp2_uart2_pin1[] = {GPIO37, GPIO38, GPIO39, GPIO40}; 485 static const unsigned mmp2_uart2_pin1[] = {GPIO37, GPIO38, GPIO39, GPIO40};
486 static const unsigned mmp2_uart2_pin2[] = {GPIO43, GPIO44, GPIO45, GPIO46}; 486 static const unsigned mmp2_uart2_pin2[] = {GPIO43, GPIO44, GPIO45, GPIO46};
487 static const unsigned mmp2_uart2_pin3[] = {GPIO47, GPIO48, GPIO49, GPIO50}; 487 static const unsigned mmp2_uart2_pin3[] = {GPIO47, GPIO48, GPIO49, GPIO50};
488 static const unsigned mmp2_uart2_pin4[] = {GPIO74, GPIO75, GPIO76, GPIO77}; 488 static const unsigned mmp2_uart2_pin4[] = {GPIO74, GPIO75, GPIO76, GPIO77};
489 static const unsigned mmp2_uart2_pin5[] = {GPIO55, GPIO56}; 489 static const unsigned mmp2_uart2_pin5[] = {GPIO55, GPIO56};
490 static const unsigned mmp2_uart2_pin6[] = {GPIO140, GPIO141}; 490 static const unsigned mmp2_uart2_pin6[] = {GPIO140, GPIO141};
491 static const unsigned mmp2_uart3_pin1[] = {GPIO37, GPIO38, GPIO39, GPIO40}; 491 static const unsigned mmp2_uart3_pin1[] = {GPIO37, GPIO38, GPIO39, GPIO40};
492 static const unsigned mmp2_uart3_pin2[] = {GPIO43, GPIO44, GPIO45, GPIO46}; 492 static const unsigned mmp2_uart3_pin2[] = {GPIO43, GPIO44, GPIO45, GPIO46};
493 static const unsigned mmp2_uart3_pin3[] = {GPIO51, GPIO52, GPIO53, GPIO54}; 493 static const unsigned mmp2_uart3_pin3[] = {GPIO51, GPIO52, GPIO53, GPIO54};
494 static const unsigned mmp2_uart3_pin4[] = {GPIO59, GPIO60, GPIO61, GPIO62}; 494 static const unsigned mmp2_uart3_pin4[] = {GPIO59, GPIO60, GPIO61, GPIO62};
495 static const unsigned mmp2_uart3_pin5[] = {GPIO115, GPIO116, GPIO117, GPIO118}; 495 static const unsigned mmp2_uart3_pin5[] = {GPIO115, GPIO116, GPIO117, GPIO118};
496 static const unsigned mmp2_uart3_pin6[] = {GPIO51, GPIO52}; 496 static const unsigned mmp2_uart3_pin6[] = {GPIO51, GPIO52};
497 static const unsigned mmp2_uart4_pin1[] = {GPIO43, GPIO44, GPIO45, GPIO46}; 497 static const unsigned mmp2_uart4_pin1[] = {GPIO43, GPIO44, GPIO45, GPIO46};
498 static const unsigned mmp2_uart4_pin2[] = {GPIO63, GPIO64, GPIO65, GPIO66}; 498 static const unsigned mmp2_uart4_pin2[] = {GPIO63, GPIO64, GPIO65, GPIO66};
499 static const unsigned mmp2_uart4_pin3[] = {GPIO74, GPIO75, GPIO76, GPIO77}; 499 static const unsigned mmp2_uart4_pin3[] = {GPIO74, GPIO75, GPIO76, GPIO77};
500 static const unsigned mmp2_uart4_pin4[] = {GPIO115, GPIO116, GPIO117, GPIO118}; 500 static const unsigned mmp2_uart4_pin4[] = {GPIO115, GPIO116, GPIO117, GPIO118};
501 static const unsigned mmp2_uart4_pin5[] = {GPIO59, GPIO60}; 501 static const unsigned mmp2_uart4_pin5[] = {GPIO59, GPIO60};
502 static const unsigned mmp2_kpdk_pin1[] = {GPIO16, GPIO17, GPIO18, GPIO19}; 502 static const unsigned mmp2_kpdk_pin1[] = {GPIO16, GPIO17, GPIO18, GPIO19};
503 static const unsigned mmp2_kpdk_pin2[] = {GPIO16, GPIO17}; 503 static const unsigned mmp2_kpdk_pin2[] = {GPIO16, GPIO17};
504 static const unsigned mmp2_twsi2_pin1[] = {GPIO37, GPIO38}; 504 static const unsigned mmp2_twsi2_pin1[] = {GPIO37, GPIO38};
505 static const unsigned mmp2_twsi2_pin2[] = {GPIO39, GPIO40}; 505 static const unsigned mmp2_twsi2_pin2[] = {GPIO39, GPIO40};
506 static const unsigned mmp2_twsi2_pin3[] = {GPIO43, GPIO44}; 506 static const unsigned mmp2_twsi2_pin3[] = {GPIO43, GPIO44};
507 static const unsigned mmp2_twsi2_pin4[] = {GPIO53, GPIO54}; 507 static const unsigned mmp2_twsi2_pin4[] = {GPIO53, GPIO54};
508 static const unsigned mmp2_twsi2_pin5[] = {GPIO55, GPIO56}; 508 static const unsigned mmp2_twsi2_pin5[] = {GPIO55, GPIO56};
509 static const unsigned mmp2_twsi3_pin1[] = {GPIO71, GPIO72}; 509 static const unsigned mmp2_twsi3_pin1[] = {GPIO71, GPIO72};
510 static const unsigned mmp2_twsi3_pin2[] = {GPIO95, GPIO96}; 510 static const unsigned mmp2_twsi3_pin2[] = {GPIO95, GPIO96};
511 static const unsigned mmp2_twsi4_pin1[] = {TWSI4_SCL, TWSI4_SDA}; 511 static const unsigned mmp2_twsi4_pin1[] = {TWSI4_SCL, TWSI4_SDA};
512 static const unsigned mmp2_twsi5_pin1[] = {GPIO41, GPIO42}; 512 static const unsigned mmp2_twsi5_pin1[] = {GPIO41, GPIO42};
513 static const unsigned mmp2_twsi5_pin2[] = {GPIO84, GPIO85}; 513 static const unsigned mmp2_twsi5_pin2[] = {GPIO84, GPIO85};
514 static const unsigned mmp2_twsi5_pin3[] = {GPIO99, GPIO100}; 514 static const unsigned mmp2_twsi5_pin3[] = {GPIO99, GPIO100};
515 static const unsigned mmp2_twsi6_pin1[] = {GPIO47, GPIO48}; 515 static const unsigned mmp2_twsi6_pin1[] = {GPIO47, GPIO48};
516 static const unsigned mmp2_twsi6_pin2[] = {GPIO86, GPIO87}; 516 static const unsigned mmp2_twsi6_pin2[] = {GPIO86, GPIO87};
517 static const unsigned mmp2_twsi6_pin3[] = {GPIO97, GPIO98}; 517 static const unsigned mmp2_twsi6_pin3[] = {GPIO97, GPIO98};
518 static const unsigned mmp2_ccic1_pin1[] = {GPIO12, GPIO13, GPIO14, GPIO15, 518 static const unsigned mmp2_ccic1_pin1[] = {GPIO12, GPIO13, GPIO14, GPIO15,
519 GPIO16, GPIO17, GPIO18, GPIO19, GPIO20, GPIO21, GPIO22, GPIO23}; 519 GPIO16, GPIO17, GPIO18, GPIO19, GPIO20, GPIO21, GPIO22, GPIO23};
520 static const unsigned mmp2_ccic1_pin2[] = {GPIO59, GPIO60, GPIO61, GPIO62, 520 static const unsigned mmp2_ccic1_pin2[] = {GPIO59, GPIO60, GPIO61, GPIO62,
521 GPIO63, GPIO64, GPIO65, GPIO66, GPIO67, GPIO68, GPIO69, GPIO70}; 521 GPIO63, GPIO64, GPIO65, GPIO66, GPIO67, GPIO68, GPIO69, GPIO70};
522 static const unsigned mmp2_ccic2_pin1[] = {GPIO59, GPIO60, GPIO61, GPIO62, 522 static const unsigned mmp2_ccic2_pin1[] = {GPIO59, GPIO60, GPIO61, GPIO62,
523 GPIO63, GPIO64, GPIO65, GPIO66, GPIO67, GPIO68, GPIO69, GPIO70}; 523 GPIO63, GPIO64, GPIO65, GPIO66, GPIO67, GPIO68, GPIO69, GPIO70};
524 static const unsigned mmp2_ccic2_pin2[] = {GPIO82, GPIO83, GPIO86, GPIO87, 524 static const unsigned mmp2_ccic2_pin2[] = {GPIO82, GPIO83, GPIO86, GPIO87,
525 GPIO88, GPIO89, GPIO90, GPIO91, GPIO92, GPIO93, GPIO94, GPIO95}; 525 GPIO88, GPIO89, GPIO90, GPIO91, GPIO92, GPIO93, GPIO94, GPIO95};
526 static const unsigned mmp2_ulpi_pin1[] = {GPIO59, GPIO60, GPIO61, GPIO62, 526 static const unsigned mmp2_ulpi_pin1[] = {GPIO59, GPIO60, GPIO61, GPIO62,
527 GPIO63, GPIO64, GPIO65, GPIO66, GPIO67, GPIO68, GPIO69, GPIO70}; 527 GPIO63, GPIO64, GPIO65, GPIO66, GPIO67, GPIO68, GPIO69, GPIO70};
528 static const unsigned mmp2_ro_pin1[] = {GPIO16, GPIO17}; 528 static const unsigned mmp2_ro_pin1[] = {GPIO16, GPIO17};
529 static const unsigned mmp2_ro_pin2[] = {GPIO18, GPIO19}; 529 static const unsigned mmp2_ro_pin2[] = {GPIO18, GPIO19};
530 static const unsigned mmp2_ro_pin3[] = {GPIO51, GPIO52}; 530 static const unsigned mmp2_ro_pin3[] = {GPIO51, GPIO52};
531 static const unsigned mmp2_ro_pin4[] = {GPIO55, GPIO56}; 531 static const unsigned mmp2_ro_pin4[] = {GPIO55, GPIO56};
532 static const unsigned mmp2_i2s_pin1[] = {GPIO24, GPIO25, GPIO26, GPIO27, 532 static const unsigned mmp2_i2s_pin1[] = {GPIO24, GPIO25, GPIO26, GPIO27,
533 GPIO28}; 533 GPIO28};
534 static const unsigned mmp2_i2s_pin2[] = {GPIO33, GPIO34, GPIO35, GPIO36}; 534 static const unsigned mmp2_i2s_pin2[] = {GPIO33, GPIO34, GPIO35, GPIO36};
535 static const unsigned mmp2_ssp1_pin1[] = {GPIO37, GPIO38, GPIO39, GPIO40}; 535 static const unsigned mmp2_ssp1_pin1[] = {GPIO37, GPIO38, GPIO39, GPIO40};
536 static const unsigned mmp2_ssp1_pin2[] = {GPIO43, GPIO44, GPIO45, GPIO46}; 536 static const unsigned mmp2_ssp1_pin2[] = {GPIO43, GPIO44, GPIO45, GPIO46};
537 static const unsigned mmp2_ssp1_pin3[] = {GPIO115, GPIO116, GPIO117, GPIO118}; 537 static const unsigned mmp2_ssp1_pin3[] = {GPIO115, GPIO116, GPIO117, GPIO118};
538 static const unsigned mmp2_ssp2_pin1[] = {GPIO47, GPIO48, GPIO49, GPIO50}; 538 static const unsigned mmp2_ssp2_pin1[] = {GPIO47, GPIO48, GPIO49, GPIO50};
539 static const unsigned mmp2_ssp3_pin1[] = {GPIO119, GPIO120, GPIO121, GPIO122}; 539 static const unsigned mmp2_ssp3_pin1[] = {GPIO119, GPIO120, GPIO121, GPIO122};
540 static const unsigned mmp2_ssp3_pin2[] = {GPIO132, GPIO133, GPIO133, GPIO136}; 540 static const unsigned mmp2_ssp3_pin2[] = {GPIO132, GPIO133, GPIO133, GPIO136};
541 static const unsigned mmp2_sspa2_pin1[] = {GPIO25, GPIO26, GPIO27, GPIO28}; 541 static const unsigned mmp2_sspa2_pin1[] = {GPIO25, GPIO26, GPIO27, GPIO28};
542 static const unsigned mmp2_sspa2_pin2[] = {GPIO33, GPIO34, GPIO35, GPIO36}; 542 static const unsigned mmp2_sspa2_pin2[] = {GPIO33, GPIO34, GPIO35, GPIO36};
543 static const unsigned mmp2_mmc1_pin1[] = {GPIO131, GPIO132, GPIO133, GPIO134, 543 static const unsigned mmp2_mmc1_pin1[] = {GPIO131, GPIO132, GPIO133, GPIO134,
544 GPIO136, GPIO139, GPIO140, GPIO141}; 544 GPIO136, GPIO139, GPIO140, GPIO141};
545 static const unsigned mmp2_mmc2_pin1[] = {GPIO37, GPIO38, GPIO39, GPIO40, 545 static const unsigned mmp2_mmc2_pin1[] = {GPIO37, GPIO38, GPIO39, GPIO40,
546 GPIO41, GPIO42}; 546 GPIO41, GPIO42};
547 static const unsigned mmp2_mmc3_pin1[] = {GPIO111, GPIO112, GPIO151, GPIO162, 547 static const unsigned mmp2_mmc3_pin1[] = {GPIO111, GPIO112, GPIO151, GPIO162,
548 GPIO163, GPIO164, GPIO165, GPIO166, GPIO167, GPIO168}; 548 GPIO163, GPIO164, GPIO165, GPIO166, GPIO167, GPIO168};
549 549
550 static struct pxa3xx_pin_group mmp2_grps[] = { 550 static struct pxa3xx_pin_group mmp2_grps[] = {
551 GRP_MMP2("uart1 4p1", UART1, mmp2_uart1_pin1), 551 GRP_MMP2("uart1 4p1", UART1, mmp2_uart1_pin1),
552 GRP_MMP2("uart1 2p2", UART1, mmp2_uart1_pin2), 552 GRP_MMP2("uart1 2p2", UART1, mmp2_uart1_pin2),
553 GRP_MMP2("uart1 2p3", UART1, mmp2_uart1_pin3), 553 GRP_MMP2("uart1 2p3", UART1, mmp2_uart1_pin3),
554 GRP_MMP2("uart2 4p1", UART2, mmp2_uart2_pin1), 554 GRP_MMP2("uart2 4p1", UART2, mmp2_uart2_pin1),
555 GRP_MMP2("uart2 4p2", UART2, mmp2_uart2_pin2), 555 GRP_MMP2("uart2 4p2", UART2, mmp2_uart2_pin2),
556 GRP_MMP2("uart2 4p3", UART2, mmp2_uart2_pin3), 556 GRP_MMP2("uart2 4p3", UART2, mmp2_uart2_pin3),
557 GRP_MMP2("uart2 4p4", UART2, mmp2_uart2_pin4), 557 GRP_MMP2("uart2 4p4", UART2, mmp2_uart2_pin4),
558 GRP_MMP2("uart2 2p5", UART2, mmp2_uart2_pin5), 558 GRP_MMP2("uart2 2p5", UART2, mmp2_uart2_pin5),
559 GRP_MMP2("uart2 2p6", UART2, mmp2_uart2_pin6), 559 GRP_MMP2("uart2 2p6", UART2, mmp2_uart2_pin6),
560 GRP_MMP2("uart3 4p1", UART3, mmp2_uart3_pin1), 560 GRP_MMP2("uart3 4p1", UART3, mmp2_uart3_pin1),
561 GRP_MMP2("uart3 4p2", UART3, mmp2_uart3_pin2), 561 GRP_MMP2("uart3 4p2", UART3, mmp2_uart3_pin2),
562 GRP_MMP2("uart3 4p3", UART3, mmp2_uart3_pin3), 562 GRP_MMP2("uart3 4p3", UART3, mmp2_uart3_pin3),
563 GRP_MMP2("uart3 4p4", UART3, mmp2_uart3_pin4), 563 GRP_MMP2("uart3 4p4", UART3, mmp2_uart3_pin4),
564 GRP_MMP2("uart3 4p5", UART3, mmp2_uart3_pin5), 564 GRP_MMP2("uart3 4p5", UART3, mmp2_uart3_pin5),
565 GRP_MMP2("uart3 2p6", UART3, mmp2_uart3_pin6), 565 GRP_MMP2("uart3 2p6", UART3, mmp2_uart3_pin6),
566 GRP_MMP2("uart4 4p1", UART4, mmp2_uart4_pin1), 566 GRP_MMP2("uart4 4p1", UART4, mmp2_uart4_pin1),
567 GRP_MMP2("uart4 4p2", UART4, mmp2_uart4_pin2), 567 GRP_MMP2("uart4 4p2", UART4, mmp2_uart4_pin2),
568 GRP_MMP2("uart4 4p3", UART4, mmp2_uart4_pin3), 568 GRP_MMP2("uart4 4p3", UART4, mmp2_uart4_pin3),
569 GRP_MMP2("uart4 4p4", UART4, mmp2_uart4_pin4), 569 GRP_MMP2("uart4 4p4", UART4, mmp2_uart4_pin4),
570 GRP_MMP2("uart4 2p5", UART4, mmp2_uart4_pin5), 570 GRP_MMP2("uart4 2p5", UART4, mmp2_uart4_pin5),
571 GRP_MMP2("kpdk 4p1", KP_DK, mmp2_kpdk_pin1), 571 GRP_MMP2("kpdk 4p1", KP_DK, mmp2_kpdk_pin1),
572 GRP_MMP2("kpdk 4p2", KP_DK, mmp2_kpdk_pin2), 572 GRP_MMP2("kpdk 4p2", KP_DK, mmp2_kpdk_pin2),
573 GRP_MMP2("twsi2-1", TWSI2, mmp2_twsi2_pin1), 573 GRP_MMP2("twsi2-1", TWSI2, mmp2_twsi2_pin1),
574 GRP_MMP2("twsi2-2", TWSI2, mmp2_twsi2_pin2), 574 GRP_MMP2("twsi2-2", TWSI2, mmp2_twsi2_pin2),
575 GRP_MMP2("twsi2-3", TWSI2, mmp2_twsi2_pin3), 575 GRP_MMP2("twsi2-3", TWSI2, mmp2_twsi2_pin3),
576 GRP_MMP2("twsi2-4", TWSI2, mmp2_twsi2_pin4), 576 GRP_MMP2("twsi2-4", TWSI2, mmp2_twsi2_pin4),
577 GRP_MMP2("twsi2-5", TWSI2, mmp2_twsi2_pin5), 577 GRP_MMP2("twsi2-5", TWSI2, mmp2_twsi2_pin5),
578 GRP_MMP2("twsi3-1", TWSI3, mmp2_twsi3_pin1), 578 GRP_MMP2("twsi3-1", TWSI3, mmp2_twsi3_pin1),
579 GRP_MMP2("twsi3-2", TWSI3, mmp2_twsi3_pin2), 579 GRP_MMP2("twsi3-2", TWSI3, mmp2_twsi3_pin2),
580 GRP_MMP2("twsi4", TWSI4, mmp2_twsi4_pin1), 580 GRP_MMP2("twsi4", TWSI4, mmp2_twsi4_pin1),
581 GRP_MMP2("twsi5-1", TWSI5, mmp2_twsi5_pin1), 581 GRP_MMP2("twsi5-1", TWSI5, mmp2_twsi5_pin1),
582 GRP_MMP2("twsi5-2", TWSI5, mmp2_twsi5_pin2), 582 GRP_MMP2("twsi5-2", TWSI5, mmp2_twsi5_pin2),
583 GRP_MMP2("twsi5-3", TWSI5, mmp2_twsi5_pin3), 583 GRP_MMP2("twsi5-3", TWSI5, mmp2_twsi5_pin3),
584 GRP_MMP2("twsi6-1", TWSI6, mmp2_twsi6_pin1), 584 GRP_MMP2("twsi6-1", TWSI6, mmp2_twsi6_pin1),
585 GRP_MMP2("twsi6-2", TWSI6, mmp2_twsi6_pin2), 585 GRP_MMP2("twsi6-2", TWSI6, mmp2_twsi6_pin2),
586 GRP_MMP2("twsi6-3", TWSI6, mmp2_twsi6_pin3), 586 GRP_MMP2("twsi6-3", TWSI6, mmp2_twsi6_pin3),
587 GRP_MMP2("ccic1-1", CCIC1, mmp2_ccic1_pin1), 587 GRP_MMP2("ccic1-1", CCIC1, mmp2_ccic1_pin1),
588 GRP_MMP2("ccic1-2", CCIC1, mmp2_ccic1_pin2), 588 GRP_MMP2("ccic1-2", CCIC1, mmp2_ccic1_pin2),
589 GRP_MMP2("ccic2-1", CCIC2, mmp2_ccic2_pin1), 589 GRP_MMP2("ccic2-1", CCIC2, mmp2_ccic2_pin1),
590 GRP_MMP2("ccic2-1", CCIC2, mmp2_ccic2_pin2), 590 GRP_MMP2("ccic2-1", CCIC2, mmp2_ccic2_pin2),
591 GRP_MMP2("ulpi", ULPI, mmp2_ulpi_pin1), 591 GRP_MMP2("ulpi", ULPI, mmp2_ulpi_pin1),
592 GRP_MMP2("ro-1", ROT, mmp2_ro_pin1), 592 GRP_MMP2("ro-1", ROT, mmp2_ro_pin1),
593 GRP_MMP2("ro-2", ROT, mmp2_ro_pin2), 593 GRP_MMP2("ro-2", ROT, mmp2_ro_pin2),
594 GRP_MMP2("ro-3", ROT, mmp2_ro_pin3), 594 GRP_MMP2("ro-3", ROT, mmp2_ro_pin3),
595 GRP_MMP2("ro-4", ROT, mmp2_ro_pin4), 595 GRP_MMP2("ro-4", ROT, mmp2_ro_pin4),
596 GRP_MMP2("i2s 5p1", I2S, mmp2_i2s_pin1), 596 GRP_MMP2("i2s 5p1", I2S, mmp2_i2s_pin1),
597 GRP_MMP2("i2s 4p2", I2S, mmp2_i2s_pin2), 597 GRP_MMP2("i2s 4p2", I2S, mmp2_i2s_pin2),
598 GRP_MMP2("ssp1 4p1", SSP1, mmp2_ssp1_pin1), 598 GRP_MMP2("ssp1 4p1", SSP1, mmp2_ssp1_pin1),
599 GRP_MMP2("ssp1 4p2", SSP1, mmp2_ssp1_pin2), 599 GRP_MMP2("ssp1 4p2", SSP1, mmp2_ssp1_pin2),
600 GRP_MMP2("ssp1 4p3", SSP1, mmp2_ssp1_pin3), 600 GRP_MMP2("ssp1 4p3", SSP1, mmp2_ssp1_pin3),
601 GRP_MMP2("ssp2 4p1", SSP2, mmp2_ssp2_pin1), 601 GRP_MMP2("ssp2 4p1", SSP2, mmp2_ssp2_pin1),
602 GRP_MMP2("ssp3 4p1", SSP3, mmp2_ssp3_pin1), 602 GRP_MMP2("ssp3 4p1", SSP3, mmp2_ssp3_pin1),
603 GRP_MMP2("ssp3 4p2", SSP3, mmp2_ssp3_pin2), 603 GRP_MMP2("ssp3 4p2", SSP3, mmp2_ssp3_pin2),
604 GRP_MMP2("sspa2 4p1", SSPA2, mmp2_sspa2_pin1), 604 GRP_MMP2("sspa2 4p1", SSPA2, mmp2_sspa2_pin1),
605 GRP_MMP2("sspa2 4p2", SSPA2, mmp2_sspa2_pin2), 605 GRP_MMP2("sspa2 4p2", SSPA2, mmp2_sspa2_pin2),
606 GRP_MMP2("mmc1 8p1", MMC1, mmp2_mmc1_pin1), 606 GRP_MMP2("mmc1 8p1", MMC1, mmp2_mmc1_pin1),
607 GRP_MMP2("mmc2 6p1", MMC2, mmp2_mmc2_pin1), 607 GRP_MMP2("mmc2 6p1", MMC2, mmp2_mmc2_pin1),
608 GRP_MMP2("mmc3 10p1", MMC3, mmp2_mmc3_pin1), 608 GRP_MMP2("mmc3 10p1", MMC3, mmp2_mmc3_pin1),
609 }; 609 };
610 610
611 static const char * const mmp2_uart1_grps[] = {"uart1 4p1", "uart1 2p2", 611 static const char * const mmp2_uart1_grps[] = {"uart1 4p1", "uart1 2p2",
612 "uart1 2p3"}; 612 "uart1 2p3"};
613 static const char * const mmp2_uart2_grps[] = {"uart2 4p1", "uart2 4p2", 613 static const char * const mmp2_uart2_grps[] = {"uart2 4p1", "uart2 4p2",
614 "uart2 4p3", "uart2 4p4", "uart2 4p5", "uart2 4p6"}; 614 "uart2 4p3", "uart2 4p4", "uart2 4p5", "uart2 4p6"};
615 static const char * const mmp2_uart3_grps[] = {"uart3 4p1", "uart3 4p2", 615 static const char * const mmp2_uart3_grps[] = {"uart3 4p1", "uart3 4p2",
616 "uart3 4p3", "uart3 4p4", "uart3 4p5", "uart3 2p6"}; 616 "uart3 4p3", "uart3 4p4", "uart3 4p5", "uart3 2p6"};
617 static const char * const mmp2_uart4_grps[] = {"uart4 4p1", "uart4 4p2", 617 static const char * const mmp2_uart4_grps[] = {"uart4 4p1", "uart4 4p2",
618 "uart4 4p3", "uart4 4p4", "uart4 2p5"}; 618 "uart4 4p3", "uart4 4p4", "uart4 2p5"};
619 static const char * const mmp2_kpdk_grps[] = {"kpdk 4p1", "kpdk 4p2"}; 619 static const char * const mmp2_kpdk_grps[] = {"kpdk 4p1", "kpdk 4p2"};
620 static const char * const mmp2_twsi2_grps[] = {"twsi2-1", "twsi2-2", 620 static const char * const mmp2_twsi2_grps[] = {"twsi2-1", "twsi2-2",
621 "twsi2-3", "twsi2-4", "twsi2-5"}; 621 "twsi2-3", "twsi2-4", "twsi2-5"};
622 static const char * const mmp2_twsi3_grps[] = {"twsi3-1", "twsi3-2"}; 622 static const char * const mmp2_twsi3_grps[] = {"twsi3-1", "twsi3-2"};
623 static const char * const mmp2_twsi4_grps[] = {"twsi4"}; 623 static const char * const mmp2_twsi4_grps[] = {"twsi4"};
624 static const char * const mmp2_twsi5_grps[] = {"twsi5-1", "twsi5-2", 624 static const char * const mmp2_twsi5_grps[] = {"twsi5-1", "twsi5-2",
625 "twsi5-3"}; 625 "twsi5-3"};
626 static const char * const mmp2_twsi6_grps[] = {"twsi6-1", "twsi6-2", 626 static const char * const mmp2_twsi6_grps[] = {"twsi6-1", "twsi6-2",
627 "twsi6-3"}; 627 "twsi6-3"};
628 static const char * const mmp2_ccic1_grps[] = {"ccic1-1", "ccic1-2"}; 628 static const char * const mmp2_ccic1_grps[] = {"ccic1-1", "ccic1-2"};
629 static const char * const mmp2_ccic2_grps[] = {"ccic2-1", "ccic2-2"}; 629 static const char * const mmp2_ccic2_grps[] = {"ccic2-1", "ccic2-2"};
630 static const char * const mmp2_ulpi_grps[] = {"ulpi"}; 630 static const char * const mmp2_ulpi_grps[] = {"ulpi"};
631 static const char * const mmp2_ro_grps[] = {"ro-1", "ro-2", "ro-3", "ro-4"}; 631 static const char * const mmp2_ro_grps[] = {"ro-1", "ro-2", "ro-3", "ro-4"};
632 static const char * const mmp2_i2s_grps[] = {"i2s 5p1", "i2s 4p2"}; 632 static const char * const mmp2_i2s_grps[] = {"i2s 5p1", "i2s 4p2"};
633 static const char * const mmp2_ssp1_grps[] = {"ssp1 4p1", "ssp1 4p2", 633 static const char * const mmp2_ssp1_grps[] = {"ssp1 4p1", "ssp1 4p2",
634 "ssp1 4p3"}; 634 "ssp1 4p3"};
635 static const char * const mmp2_ssp2_grps[] = {"ssp2 4p1"}; 635 static const char * const mmp2_ssp2_grps[] = {"ssp2 4p1"};
636 static const char * const mmp2_ssp3_grps[] = {"ssp3 4p1", "ssp3 4p2"}; 636 static const char * const mmp2_ssp3_grps[] = {"ssp3 4p1", "ssp3 4p2"};
637 static const char * const mmp2_sspa2_grps[] = {"sspa2 4p1", "sspa2 4p2"}; 637 static const char * const mmp2_sspa2_grps[] = {"sspa2 4p1", "sspa2 4p2"};
638 static const char * const mmp2_mmc1_grps[] = {"mmc1 8p1"}; 638 static const char * const mmp2_mmc1_grps[] = {"mmc1 8p1"};
639 static const char * const mmp2_mmc2_grps[] = {"mmc2 6p1"}; 639 static const char * const mmp2_mmc2_grps[] = {"mmc2 6p1"};
640 static const char * const mmp2_mmc3_grps[] = {"mmc3 10p1"}; 640 static const char * const mmp2_mmc3_grps[] = {"mmc3 10p1"};
641 641
642 static struct pxa3xx_pmx_func mmp2_funcs[] = { 642 static struct pxa3xx_pmx_func mmp2_funcs[] = {
643 {"uart1", ARRAY_AND_SIZE(mmp2_uart1_grps)}, 643 {"uart1", ARRAY_AND_SIZE(mmp2_uart1_grps)},
644 {"uart2", ARRAY_AND_SIZE(mmp2_uart2_grps)}, 644 {"uart2", ARRAY_AND_SIZE(mmp2_uart2_grps)},
645 {"uart3", ARRAY_AND_SIZE(mmp2_uart3_grps)}, 645 {"uart3", ARRAY_AND_SIZE(mmp2_uart3_grps)},
646 {"uart4", ARRAY_AND_SIZE(mmp2_uart4_grps)}, 646 {"uart4", ARRAY_AND_SIZE(mmp2_uart4_grps)},
647 {"kpdk", ARRAY_AND_SIZE(mmp2_kpdk_grps)}, 647 {"kpdk", ARRAY_AND_SIZE(mmp2_kpdk_grps)},
648 {"twsi2", ARRAY_AND_SIZE(mmp2_twsi2_grps)}, 648 {"twsi2", ARRAY_AND_SIZE(mmp2_twsi2_grps)},
649 {"twsi3", ARRAY_AND_SIZE(mmp2_twsi3_grps)}, 649 {"twsi3", ARRAY_AND_SIZE(mmp2_twsi3_grps)},
650 {"twsi4", ARRAY_AND_SIZE(mmp2_twsi4_grps)}, 650 {"twsi4", ARRAY_AND_SIZE(mmp2_twsi4_grps)},
651 {"twsi5", ARRAY_AND_SIZE(mmp2_twsi5_grps)}, 651 {"twsi5", ARRAY_AND_SIZE(mmp2_twsi5_grps)},
652 {"twsi6", ARRAY_AND_SIZE(mmp2_twsi6_grps)}, 652 {"twsi6", ARRAY_AND_SIZE(mmp2_twsi6_grps)},
653 {"ccic1", ARRAY_AND_SIZE(mmp2_ccic1_grps)}, 653 {"ccic1", ARRAY_AND_SIZE(mmp2_ccic1_grps)},
654 {"ccic2", ARRAY_AND_SIZE(mmp2_ccic2_grps)}, 654 {"ccic2", ARRAY_AND_SIZE(mmp2_ccic2_grps)},
655 {"ulpi", ARRAY_AND_SIZE(mmp2_ulpi_grps)}, 655 {"ulpi", ARRAY_AND_SIZE(mmp2_ulpi_grps)},
656 {"ro", ARRAY_AND_SIZE(mmp2_ro_grps)}, 656 {"ro", ARRAY_AND_SIZE(mmp2_ro_grps)},
657 {"i2s", ARRAY_AND_SIZE(mmp2_i2s_grps)}, 657 {"i2s", ARRAY_AND_SIZE(mmp2_i2s_grps)},
658 {"ssp1", ARRAY_AND_SIZE(mmp2_ssp1_grps)}, 658 {"ssp1", ARRAY_AND_SIZE(mmp2_ssp1_grps)},
659 {"ssp2", ARRAY_AND_SIZE(mmp2_ssp2_grps)}, 659 {"ssp2", ARRAY_AND_SIZE(mmp2_ssp2_grps)},
660 {"ssp3", ARRAY_AND_SIZE(mmp2_ssp3_grps)}, 660 {"ssp3", ARRAY_AND_SIZE(mmp2_ssp3_grps)},
661 {"sspa2", ARRAY_AND_SIZE(mmp2_sspa2_grps)}, 661 {"sspa2", ARRAY_AND_SIZE(mmp2_sspa2_grps)},
662 {"mmc1", ARRAY_AND_SIZE(mmp2_mmc1_grps)}, 662 {"mmc1", ARRAY_AND_SIZE(mmp2_mmc1_grps)},
663 {"mmc2", ARRAY_AND_SIZE(mmp2_mmc2_grps)}, 663 {"mmc2", ARRAY_AND_SIZE(mmp2_mmc2_grps)},
664 {"mmc3", ARRAY_AND_SIZE(mmp2_mmc3_grps)}, 664 {"mmc3", ARRAY_AND_SIZE(mmp2_mmc3_grps)},
665 }; 665 };
666 666
667 static struct pinctrl_desc mmp2_pctrl_desc = { 667 static struct pinctrl_desc mmp2_pctrl_desc = {
668 .name = "mmp2-pinctrl", 668 .name = "mmp2-pinctrl",
669 .owner = THIS_MODULE, 669 .owner = THIS_MODULE,
670 }; 670 };
671 671
672 static struct pxa3xx_pinmux_info mmp2_info = { 672 static struct pxa3xx_pinmux_info mmp2_info = {
673 .mfp = mmp2_mfp, 673 .mfp = mmp2_mfp,
674 .num_mfp = ARRAY_SIZE(mmp2_mfp), 674 .num_mfp = ARRAY_SIZE(mmp2_mfp),
675 .grps = mmp2_grps, 675 .grps = mmp2_grps,
676 .num_grps = ARRAY_SIZE(mmp2_grps), 676 .num_grps = ARRAY_SIZE(mmp2_grps),
677 .funcs = mmp2_funcs, 677 .funcs = mmp2_funcs,
678 .num_funcs = ARRAY_SIZE(mmp2_funcs), 678 .num_funcs = ARRAY_SIZE(mmp2_funcs),
679 .num_gpio = 169, 679 .num_gpio = 169,
680 .desc = &mmp2_pctrl_desc, 680 .desc = &mmp2_pctrl_desc,
681 .pads = mmp2_pads, 681 .pads = mmp2_pads,
682 .num_pads = ARRAY_SIZE(mmp2_pads), 682 .num_pads = ARRAY_SIZE(mmp2_pads),
683 683
684 .cputype = PINCTRL_MMP2, 684 .cputype = PINCTRL_MMP2,
685 .ds_mask = MMP2_DS_MASK, 685 .ds_mask = MMP2_DS_MASK,
686 .ds_shift = MMP2_DS_SHIFT, 686 .ds_shift = MMP2_DS_SHIFT,
687 }; 687 };
688 688
689 static int __devinit mmp2_pinmux_probe(struct platform_device *pdev) 689 static int __devinit mmp2_pinmux_probe(struct platform_device *pdev)
690 { 690 {
691 return pxa3xx_pinctrl_register(pdev, &mmp2_info); 691 return pxa3xx_pinctrl_register(pdev, &mmp2_info);
692 } 692 }
693 693
694 static int __devexit mmp2_pinmux_remove(struct platform_device *pdev) 694 static int mmp2_pinmux_remove(struct platform_device *pdev)
695 { 695 {
696 return pxa3xx_pinctrl_unregister(pdev); 696 return pxa3xx_pinctrl_unregister(pdev);
697 } 697 }
698 698
699 static struct platform_driver mmp2_pinmux_driver = { 699 static struct platform_driver mmp2_pinmux_driver = {
700 .driver = { 700 .driver = {
701 .name = "mmp2-pinmux", 701 .name = "mmp2-pinmux",
702 .owner = THIS_MODULE, 702 .owner = THIS_MODULE,
703 }, 703 },
704 .probe = mmp2_pinmux_probe, 704 .probe = mmp2_pinmux_probe,
705 .remove = mmp2_pinmux_remove, 705 .remove = mmp2_pinmux_remove,
706 }; 706 };
707 707
708 static int __init mmp2_pinmux_init(void) 708 static int __init mmp2_pinmux_init(void)
709 { 709 {
710 return platform_driver_register(&mmp2_pinmux_driver); 710 return platform_driver_register(&mmp2_pinmux_driver);
711 } 711 }
712 core_initcall_sync(mmp2_pinmux_init); 712 core_initcall_sync(mmp2_pinmux_init);
713 713
714 static void __exit mmp2_pinmux_exit(void) 714 static void __exit mmp2_pinmux_exit(void)
715 { 715 {
716 platform_driver_unregister(&mmp2_pinmux_driver); 716 platform_driver_unregister(&mmp2_pinmux_driver);
717 } 717 }
718 module_exit(mmp2_pinmux_exit); 718 module_exit(mmp2_pinmux_exit);
719 719
720 MODULE_AUTHOR("Haojian Zhuang <haojian.zhuang@marvell.com>"); 720 MODULE_AUTHOR("Haojian Zhuang <haojian.zhuang@marvell.com>");
721 MODULE_DESCRIPTION("PXA3xx pin control driver"); 721 MODULE_DESCRIPTION("PXA3xx pin control driver");
722 MODULE_LICENSE("GPL v2"); 722 MODULE_LICENSE("GPL v2");
723 723
drivers/pinctrl/pinctrl-mxs.c
1 /* 1 /*
2 * Copyright 2012 Freescale Semiconductor, Inc. 2 * Copyright 2012 Freescale Semiconductor, Inc.
3 * 3 *
4 * The code contained herein is licensed under the GNU General Public 4 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License 5 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 or later at the following locations: 6 * Version 2 or later at the following locations:
7 * 7 *
8 * http://www.opensource.org/licenses/gpl-license.html 8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html 9 * http://www.gnu.org/copyleft/gpl.html
10 */ 10 */
11 11
12 #include <linux/err.h> 12 #include <linux/err.h>
13 #include <linux/init.h> 13 #include <linux/init.h>
14 #include <linux/io.h> 14 #include <linux/io.h>
15 #include <linux/module.h> 15 #include <linux/module.h>
16 #include <linux/of.h> 16 #include <linux/of.h>
17 #include <linux/of_address.h> 17 #include <linux/of_address.h>
18 #include <linux/pinctrl/machine.h> 18 #include <linux/pinctrl/machine.h>
19 #include <linux/pinctrl/pinconf.h> 19 #include <linux/pinctrl/pinconf.h>
20 #include <linux/pinctrl/pinctrl.h> 20 #include <linux/pinctrl/pinctrl.h>
21 #include <linux/pinctrl/pinmux.h> 21 #include <linux/pinctrl/pinmux.h>
22 #include <linux/platform_device.h> 22 #include <linux/platform_device.h>
23 #include <linux/slab.h> 23 #include <linux/slab.h>
24 #include "core.h" 24 #include "core.h"
25 #include "pinctrl-mxs.h" 25 #include "pinctrl-mxs.h"
26 26
27 #define SUFFIX_LEN 4 27 #define SUFFIX_LEN 4
28 28
29 struct mxs_pinctrl_data { 29 struct mxs_pinctrl_data {
30 struct device *dev; 30 struct device *dev;
31 struct pinctrl_dev *pctl; 31 struct pinctrl_dev *pctl;
32 void __iomem *base; 32 void __iomem *base;
33 struct mxs_pinctrl_soc_data *soc; 33 struct mxs_pinctrl_soc_data *soc;
34 }; 34 };
35 35
36 static int mxs_get_groups_count(struct pinctrl_dev *pctldev) 36 static int mxs_get_groups_count(struct pinctrl_dev *pctldev)
37 { 37 {
38 struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev); 38 struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev);
39 39
40 return d->soc->ngroups; 40 return d->soc->ngroups;
41 } 41 }
42 42
43 static const char *mxs_get_group_name(struct pinctrl_dev *pctldev, 43 static const char *mxs_get_group_name(struct pinctrl_dev *pctldev,
44 unsigned group) 44 unsigned group)
45 { 45 {
46 struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev); 46 struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev);
47 47
48 return d->soc->groups[group].name; 48 return d->soc->groups[group].name;
49 } 49 }
50 50
51 static int mxs_get_group_pins(struct pinctrl_dev *pctldev, unsigned group, 51 static int mxs_get_group_pins(struct pinctrl_dev *pctldev, unsigned group,
52 const unsigned **pins, unsigned *num_pins) 52 const unsigned **pins, unsigned *num_pins)
53 { 53 {
54 struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev); 54 struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev);
55 55
56 *pins = d->soc->groups[group].pins; 56 *pins = d->soc->groups[group].pins;
57 *num_pins = d->soc->groups[group].npins; 57 *num_pins = d->soc->groups[group].npins;
58 58
59 return 0; 59 return 0;
60 } 60 }
61 61
62 static void mxs_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s, 62 static void mxs_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s,
63 unsigned offset) 63 unsigned offset)
64 { 64 {
65 seq_printf(s, " %s", dev_name(pctldev->dev)); 65 seq_printf(s, " %s", dev_name(pctldev->dev));
66 } 66 }
67 67
68 static int mxs_dt_node_to_map(struct pinctrl_dev *pctldev, 68 static int mxs_dt_node_to_map(struct pinctrl_dev *pctldev,
69 struct device_node *np, 69 struct device_node *np,
70 struct pinctrl_map **map, unsigned *num_maps) 70 struct pinctrl_map **map, unsigned *num_maps)
71 { 71 {
72 struct pinctrl_map *new_map; 72 struct pinctrl_map *new_map;
73 char *group = NULL; 73 char *group = NULL;
74 unsigned new_num = 1; 74 unsigned new_num = 1;
75 unsigned long config = 0; 75 unsigned long config = 0;
76 unsigned long *pconfig; 76 unsigned long *pconfig;
77 int length = strlen(np->name) + SUFFIX_LEN; 77 int length = strlen(np->name) + SUFFIX_LEN;
78 bool purecfg = false; 78 bool purecfg = false;
79 u32 val, reg; 79 u32 val, reg;
80 int ret, i = 0; 80 int ret, i = 0;
81 81
82 /* Check for pin config node which has no 'reg' property */ 82 /* Check for pin config node which has no 'reg' property */
83 if (of_property_read_u32(np, "reg", &reg)) 83 if (of_property_read_u32(np, "reg", &reg))
84 purecfg = true; 84 purecfg = true;
85 85
86 ret = of_property_read_u32(np, "fsl,drive-strength", &val); 86 ret = of_property_read_u32(np, "fsl,drive-strength", &val);
87 if (!ret) 87 if (!ret)
88 config = val | MA_PRESENT; 88 config = val | MA_PRESENT;
89 ret = of_property_read_u32(np, "fsl,voltage", &val); 89 ret = of_property_read_u32(np, "fsl,voltage", &val);
90 if (!ret) 90 if (!ret)
91 config |= val << VOL_SHIFT | VOL_PRESENT; 91 config |= val << VOL_SHIFT | VOL_PRESENT;
92 ret = of_property_read_u32(np, "fsl,pull-up", &val); 92 ret = of_property_read_u32(np, "fsl,pull-up", &val);
93 if (!ret) 93 if (!ret)
94 config |= val << PULL_SHIFT | PULL_PRESENT; 94 config |= val << PULL_SHIFT | PULL_PRESENT;
95 95
96 /* Check for group node which has both mux and config settings */ 96 /* Check for group node which has both mux and config settings */
97 if (!purecfg && config) 97 if (!purecfg && config)
98 new_num = 2; 98 new_num = 2;
99 99
100 new_map = kzalloc(sizeof(*new_map) * new_num, GFP_KERNEL); 100 new_map = kzalloc(sizeof(*new_map) * new_num, GFP_KERNEL);
101 if (!new_map) 101 if (!new_map)
102 return -ENOMEM; 102 return -ENOMEM;
103 103
104 if (!purecfg) { 104 if (!purecfg) {
105 new_map[i].type = PIN_MAP_TYPE_MUX_GROUP; 105 new_map[i].type = PIN_MAP_TYPE_MUX_GROUP;
106 new_map[i].data.mux.function = np->name; 106 new_map[i].data.mux.function = np->name;
107 107
108 /* Compose group name */ 108 /* Compose group name */
109 group = kzalloc(length, GFP_KERNEL); 109 group = kzalloc(length, GFP_KERNEL);
110 if (!group) { 110 if (!group) {
111 ret = -ENOMEM; 111 ret = -ENOMEM;
112 goto free; 112 goto free;
113 } 113 }
114 snprintf(group, length, "%s.%d", np->name, reg); 114 snprintf(group, length, "%s.%d", np->name, reg);
115 new_map[i].data.mux.group = group; 115 new_map[i].data.mux.group = group;
116 i++; 116 i++;
117 } 117 }
118 118
119 if (config) { 119 if (config) {
120 pconfig = kmemdup(&config, sizeof(config), GFP_KERNEL); 120 pconfig = kmemdup(&config, sizeof(config), GFP_KERNEL);
121 if (!pconfig) { 121 if (!pconfig) {
122 ret = -ENOMEM; 122 ret = -ENOMEM;
123 goto free_group; 123 goto free_group;
124 } 124 }
125 125
126 new_map[i].type = PIN_MAP_TYPE_CONFIGS_GROUP; 126 new_map[i].type = PIN_MAP_TYPE_CONFIGS_GROUP;
127 new_map[i].data.configs.group_or_pin = purecfg ? np->name : 127 new_map[i].data.configs.group_or_pin = purecfg ? np->name :
128 group; 128 group;
129 new_map[i].data.configs.configs = pconfig; 129 new_map[i].data.configs.configs = pconfig;
130 new_map[i].data.configs.num_configs = 1; 130 new_map[i].data.configs.num_configs = 1;
131 } 131 }
132 132
133 *map = new_map; 133 *map = new_map;
134 *num_maps = new_num; 134 *num_maps = new_num;
135 135
136 return 0; 136 return 0;
137 137
138 free_group: 138 free_group:
139 if (!purecfg) 139 if (!purecfg)
140 kfree(group); 140 kfree(group);
141 free: 141 free:
142 kfree(new_map); 142 kfree(new_map);
143 return ret; 143 return ret;
144 } 144 }
145 145
146 static void mxs_dt_free_map(struct pinctrl_dev *pctldev, 146 static void mxs_dt_free_map(struct pinctrl_dev *pctldev,
147 struct pinctrl_map *map, unsigned num_maps) 147 struct pinctrl_map *map, unsigned num_maps)
148 { 148 {
149 int i; 149 int i;
150 150
151 for (i = 0; i < num_maps; i++) { 151 for (i = 0; i < num_maps; i++) {
152 if (map[i].type == PIN_MAP_TYPE_MUX_GROUP) 152 if (map[i].type == PIN_MAP_TYPE_MUX_GROUP)
153 kfree(map[i].data.mux.group); 153 kfree(map[i].data.mux.group);
154 if (map[i].type == PIN_MAP_TYPE_CONFIGS_GROUP) 154 if (map[i].type == PIN_MAP_TYPE_CONFIGS_GROUP)
155 kfree(map[i].data.configs.configs); 155 kfree(map[i].data.configs.configs);
156 } 156 }
157 157
158 kfree(map); 158 kfree(map);
159 } 159 }
160 160
161 static struct pinctrl_ops mxs_pinctrl_ops = { 161 static struct pinctrl_ops mxs_pinctrl_ops = {
162 .get_groups_count = mxs_get_groups_count, 162 .get_groups_count = mxs_get_groups_count,
163 .get_group_name = mxs_get_group_name, 163 .get_group_name = mxs_get_group_name,
164 .get_group_pins = mxs_get_group_pins, 164 .get_group_pins = mxs_get_group_pins,
165 .pin_dbg_show = mxs_pin_dbg_show, 165 .pin_dbg_show = mxs_pin_dbg_show,
166 .dt_node_to_map = mxs_dt_node_to_map, 166 .dt_node_to_map = mxs_dt_node_to_map,
167 .dt_free_map = mxs_dt_free_map, 167 .dt_free_map = mxs_dt_free_map,
168 }; 168 };
169 169
170 static int mxs_pinctrl_get_funcs_count(struct pinctrl_dev *pctldev) 170 static int mxs_pinctrl_get_funcs_count(struct pinctrl_dev *pctldev)
171 { 171 {
172 struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev); 172 struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev);
173 173
174 return d->soc->nfunctions; 174 return d->soc->nfunctions;
175 } 175 }
176 176
177 static const char *mxs_pinctrl_get_func_name(struct pinctrl_dev *pctldev, 177 static const char *mxs_pinctrl_get_func_name(struct pinctrl_dev *pctldev,
178 unsigned function) 178 unsigned function)
179 { 179 {
180 struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev); 180 struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev);
181 181
182 return d->soc->functions[function].name; 182 return d->soc->functions[function].name;
183 } 183 }
184 184
185 static int mxs_pinctrl_get_func_groups(struct pinctrl_dev *pctldev, 185 static int mxs_pinctrl_get_func_groups(struct pinctrl_dev *pctldev,
186 unsigned group, 186 unsigned group,
187 const char * const **groups, 187 const char * const **groups,
188 unsigned * const num_groups) 188 unsigned * const num_groups)
189 { 189 {
190 struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev); 190 struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev);
191 191
192 *groups = d->soc->functions[group].groups; 192 *groups = d->soc->functions[group].groups;
193 *num_groups = d->soc->functions[group].ngroups; 193 *num_groups = d->soc->functions[group].ngroups;
194 194
195 return 0; 195 return 0;
196 } 196 }
197 197
198 static int mxs_pinctrl_enable(struct pinctrl_dev *pctldev, unsigned selector, 198 static int mxs_pinctrl_enable(struct pinctrl_dev *pctldev, unsigned selector,
199 unsigned group) 199 unsigned group)
200 { 200 {
201 struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev); 201 struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev);
202 struct mxs_group *g = &d->soc->groups[group]; 202 struct mxs_group *g = &d->soc->groups[group];
203 void __iomem *reg; 203 void __iomem *reg;
204 u8 bank, shift; 204 u8 bank, shift;
205 u16 pin; 205 u16 pin;
206 int i; 206 int i;
207 207
208 for (i = 0; i < g->npins; i++) { 208 for (i = 0; i < g->npins; i++) {
209 bank = PINID_TO_BANK(g->pins[i]); 209 bank = PINID_TO_BANK(g->pins[i]);
210 pin = PINID_TO_PIN(g->pins[i]); 210 pin = PINID_TO_PIN(g->pins[i]);
211 reg = d->base + d->soc->regs->muxsel; 211 reg = d->base + d->soc->regs->muxsel;
212 reg += bank * 0x20 + pin / 16 * 0x10; 212 reg += bank * 0x20 + pin / 16 * 0x10;
213 shift = pin % 16 * 2; 213 shift = pin % 16 * 2;
214 214
215 writel(0x3 << shift, reg + CLR); 215 writel(0x3 << shift, reg + CLR);
216 writel(g->muxsel[i] << shift, reg + SET); 216 writel(g->muxsel[i] << shift, reg + SET);
217 } 217 }
218 218
219 return 0; 219 return 0;
220 } 220 }
221 221
222 static struct pinmux_ops mxs_pinmux_ops = { 222 static struct pinmux_ops mxs_pinmux_ops = {
223 .get_functions_count = mxs_pinctrl_get_funcs_count, 223 .get_functions_count = mxs_pinctrl_get_funcs_count,
224 .get_function_name = mxs_pinctrl_get_func_name, 224 .get_function_name = mxs_pinctrl_get_func_name,
225 .get_function_groups = mxs_pinctrl_get_func_groups, 225 .get_function_groups = mxs_pinctrl_get_func_groups,
226 .enable = mxs_pinctrl_enable, 226 .enable = mxs_pinctrl_enable,
227 }; 227 };
228 228
229 static int mxs_pinconf_get(struct pinctrl_dev *pctldev, 229 static int mxs_pinconf_get(struct pinctrl_dev *pctldev,
230 unsigned pin, unsigned long *config) 230 unsigned pin, unsigned long *config)
231 { 231 {
232 return -ENOTSUPP; 232 return -ENOTSUPP;
233 } 233 }
234 234
235 static int mxs_pinconf_set(struct pinctrl_dev *pctldev, 235 static int mxs_pinconf_set(struct pinctrl_dev *pctldev,
236 unsigned pin, unsigned long config) 236 unsigned pin, unsigned long config)
237 { 237 {
238 return -ENOTSUPP; 238 return -ENOTSUPP;
239 } 239 }
240 240
241 static int mxs_pinconf_group_get(struct pinctrl_dev *pctldev, 241 static int mxs_pinconf_group_get(struct pinctrl_dev *pctldev,
242 unsigned group, unsigned long *config) 242 unsigned group, unsigned long *config)
243 { 243 {
244 struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev); 244 struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev);
245 245
246 *config = d->soc->groups[group].config; 246 *config = d->soc->groups[group].config;
247 247
248 return 0; 248 return 0;
249 } 249 }
250 250
251 static int mxs_pinconf_group_set(struct pinctrl_dev *pctldev, 251 static int mxs_pinconf_group_set(struct pinctrl_dev *pctldev,
252 unsigned group, unsigned long config) 252 unsigned group, unsigned long config)
253 { 253 {
254 struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev); 254 struct mxs_pinctrl_data *d = pinctrl_dev_get_drvdata(pctldev);
255 struct mxs_group *g = &d->soc->groups[group]; 255 struct mxs_group *g = &d->soc->groups[group];
256 void __iomem *reg; 256 void __iomem *reg;
257 u8 ma, vol, pull, bank, shift; 257 u8 ma, vol, pull, bank, shift;
258 u16 pin; 258 u16 pin;
259 int i; 259 int i;
260 260
261 ma = CONFIG_TO_MA(config); 261 ma = CONFIG_TO_MA(config);
262 vol = CONFIG_TO_VOL(config); 262 vol = CONFIG_TO_VOL(config);
263 pull = CONFIG_TO_PULL(config); 263 pull = CONFIG_TO_PULL(config);
264 264
265 for (i = 0; i < g->npins; i++) { 265 for (i = 0; i < g->npins; i++) {
266 bank = PINID_TO_BANK(g->pins[i]); 266 bank = PINID_TO_BANK(g->pins[i]);
267 pin = PINID_TO_PIN(g->pins[i]); 267 pin = PINID_TO_PIN(g->pins[i]);
268 268
269 /* drive */ 269 /* drive */
270 reg = d->base + d->soc->regs->drive; 270 reg = d->base + d->soc->regs->drive;
271 reg += bank * 0x40 + pin / 8 * 0x10; 271 reg += bank * 0x40 + pin / 8 * 0x10;
272 272
273 /* mA */ 273 /* mA */
274 if (config & MA_PRESENT) { 274 if (config & MA_PRESENT) {
275 shift = pin % 8 * 4; 275 shift = pin % 8 * 4;
276 writel(0x3 << shift, reg + CLR); 276 writel(0x3 << shift, reg + CLR);
277 writel(ma << shift, reg + SET); 277 writel(ma << shift, reg + SET);
278 } 278 }
279 279
280 /* vol */ 280 /* vol */
281 if (config & VOL_PRESENT) { 281 if (config & VOL_PRESENT) {
282 shift = pin % 8 * 4 + 2; 282 shift = pin % 8 * 4 + 2;
283 if (vol) 283 if (vol)
284 writel(1 << shift, reg + SET); 284 writel(1 << shift, reg + SET);
285 else 285 else
286 writel(1 << shift, reg + CLR); 286 writel(1 << shift, reg + CLR);
287 } 287 }
288 288
289 /* pull */ 289 /* pull */
290 if (config & PULL_PRESENT) { 290 if (config & PULL_PRESENT) {
291 reg = d->base + d->soc->regs->pull; 291 reg = d->base + d->soc->regs->pull;
292 reg += bank * 0x10; 292 reg += bank * 0x10;
293 shift = pin; 293 shift = pin;
294 if (pull) 294 if (pull)
295 writel(1 << shift, reg + SET); 295 writel(1 << shift, reg + SET);
296 else 296 else
297 writel(1 << shift, reg + CLR); 297 writel(1 << shift, reg + CLR);
298 } 298 }
299 } 299 }
300 300
301 /* cache the config value for mxs_pinconf_group_get() */ 301 /* cache the config value for mxs_pinconf_group_get() */
302 g->config = config; 302 g->config = config;
303 303
304 return 0; 304 return 0;
305 } 305 }
306 306
307 static void mxs_pinconf_dbg_show(struct pinctrl_dev *pctldev, 307 static void mxs_pinconf_dbg_show(struct pinctrl_dev *pctldev,
308 struct seq_file *s, unsigned pin) 308 struct seq_file *s, unsigned pin)
309 { 309 {
310 /* Not support */ 310 /* Not support */
311 } 311 }
312 312
313 static void mxs_pinconf_group_dbg_show(struct pinctrl_dev *pctldev, 313 static void mxs_pinconf_group_dbg_show(struct pinctrl_dev *pctldev,
314 struct seq_file *s, unsigned group) 314 struct seq_file *s, unsigned group)
315 { 315 {
316 unsigned long config; 316 unsigned long config;
317 317
318 if (!mxs_pinconf_group_get(pctldev, group, &config)) 318 if (!mxs_pinconf_group_get(pctldev, group, &config))
319 seq_printf(s, "0x%lx", config); 319 seq_printf(s, "0x%lx", config);
320 } 320 }
321 321
322 struct pinconf_ops mxs_pinconf_ops = { 322 struct pinconf_ops mxs_pinconf_ops = {
323 .pin_config_get = mxs_pinconf_get, 323 .pin_config_get = mxs_pinconf_get,
324 .pin_config_set = mxs_pinconf_set, 324 .pin_config_set = mxs_pinconf_set,
325 .pin_config_group_get = mxs_pinconf_group_get, 325 .pin_config_group_get = mxs_pinconf_group_get,
326 .pin_config_group_set = mxs_pinconf_group_set, 326 .pin_config_group_set = mxs_pinconf_group_set,
327 .pin_config_dbg_show = mxs_pinconf_dbg_show, 327 .pin_config_dbg_show = mxs_pinconf_dbg_show,
328 .pin_config_group_dbg_show = mxs_pinconf_group_dbg_show, 328 .pin_config_group_dbg_show = mxs_pinconf_group_dbg_show,
329 }; 329 };
330 330
331 static struct pinctrl_desc mxs_pinctrl_desc = { 331 static struct pinctrl_desc mxs_pinctrl_desc = {
332 .pctlops = &mxs_pinctrl_ops, 332 .pctlops = &mxs_pinctrl_ops,
333 .pmxops = &mxs_pinmux_ops, 333 .pmxops = &mxs_pinmux_ops,
334 .confops = &mxs_pinconf_ops, 334 .confops = &mxs_pinconf_ops,
335 .owner = THIS_MODULE, 335 .owner = THIS_MODULE,
336 }; 336 };
337 337
338 static int __devinit mxs_pinctrl_parse_group(struct platform_device *pdev, 338 static int __devinit mxs_pinctrl_parse_group(struct platform_device *pdev,
339 struct device_node *np, int idx, 339 struct device_node *np, int idx,
340 const char **out_name) 340 const char **out_name)
341 { 341 {
342 struct mxs_pinctrl_data *d = platform_get_drvdata(pdev); 342 struct mxs_pinctrl_data *d = platform_get_drvdata(pdev);
343 struct mxs_group *g = &d->soc->groups[idx]; 343 struct mxs_group *g = &d->soc->groups[idx];
344 struct property *prop; 344 struct property *prop;
345 const char *propname = "fsl,pinmux-ids"; 345 const char *propname = "fsl,pinmux-ids";
346 char *group; 346 char *group;
347 int length = strlen(np->name) + SUFFIX_LEN; 347 int length = strlen(np->name) + SUFFIX_LEN;
348 int i; 348 int i;
349 u32 val; 349 u32 val;
350 350
351 group = devm_kzalloc(&pdev->dev, length, GFP_KERNEL); 351 group = devm_kzalloc(&pdev->dev, length, GFP_KERNEL);
352 if (!group) 352 if (!group)
353 return -ENOMEM; 353 return -ENOMEM;
354 if (of_property_read_u32(np, "reg", &val)) 354 if (of_property_read_u32(np, "reg", &val))
355 snprintf(group, length, "%s", np->name); 355 snprintf(group, length, "%s", np->name);
356 else 356 else
357 snprintf(group, length, "%s.%d", np->name, val); 357 snprintf(group, length, "%s.%d", np->name, val);
358 g->name = group; 358 g->name = group;
359 359
360 prop = of_find_property(np, propname, &length); 360 prop = of_find_property(np, propname, &length);
361 if (!prop) 361 if (!prop)
362 return -EINVAL; 362 return -EINVAL;
363 g->npins = length / sizeof(u32); 363 g->npins = length / sizeof(u32);
364 364
365 g->pins = devm_kzalloc(&pdev->dev, g->npins * sizeof(*g->pins), 365 g->pins = devm_kzalloc(&pdev->dev, g->npins * sizeof(*g->pins),
366 GFP_KERNEL); 366 GFP_KERNEL);
367 if (!g->pins) 367 if (!g->pins)
368 return -ENOMEM; 368 return -ENOMEM;
369 369
370 g->muxsel = devm_kzalloc(&pdev->dev, g->npins * sizeof(*g->muxsel), 370 g->muxsel = devm_kzalloc(&pdev->dev, g->npins * sizeof(*g->muxsel),
371 GFP_KERNEL); 371 GFP_KERNEL);
372 if (!g->muxsel) 372 if (!g->muxsel)
373 return -ENOMEM; 373 return -ENOMEM;
374 374
375 of_property_read_u32_array(np, propname, g->pins, g->npins); 375 of_property_read_u32_array(np, propname, g->pins, g->npins);
376 for (i = 0; i < g->npins; i++) { 376 for (i = 0; i < g->npins; i++) {
377 g->muxsel[i] = MUXID_TO_MUXSEL(g->pins[i]); 377 g->muxsel[i] = MUXID_TO_MUXSEL(g->pins[i]);
378 g->pins[i] = MUXID_TO_PINID(g->pins[i]); 378 g->pins[i] = MUXID_TO_PINID(g->pins[i]);
379 } 379 }
380 380
381 if (out_name) 381 if (out_name)
382 *out_name = g->name; 382 *out_name = g->name;
383 383
384 return 0; 384 return 0;
385 } 385 }
386 386
387 static int __devinit mxs_pinctrl_probe_dt(struct platform_device *pdev, 387 static int __devinit mxs_pinctrl_probe_dt(struct platform_device *pdev,
388 struct mxs_pinctrl_data *d) 388 struct mxs_pinctrl_data *d)
389 { 389 {
390 struct mxs_pinctrl_soc_data *soc = d->soc; 390 struct mxs_pinctrl_soc_data *soc = d->soc;
391 struct device_node *np = pdev->dev.of_node; 391 struct device_node *np = pdev->dev.of_node;
392 struct device_node *child; 392 struct device_node *child;
393 struct mxs_function *f; 393 struct mxs_function *f;
394 const char *gpio_compat = "fsl,mxs-gpio"; 394 const char *gpio_compat = "fsl,mxs-gpio";
395 const char *fn, *fnull = ""; 395 const char *fn, *fnull = "";
396 int i = 0, idxf = 0, idxg = 0; 396 int i = 0, idxf = 0, idxg = 0;
397 int ret; 397 int ret;
398 u32 val; 398 u32 val;
399 399
400 child = of_get_next_child(np, NULL); 400 child = of_get_next_child(np, NULL);
401 if (!child) { 401 if (!child) {
402 dev_err(&pdev->dev, "no group is defined\n"); 402 dev_err(&pdev->dev, "no group is defined\n");
403 return -ENOENT; 403 return -ENOENT;
404 } 404 }
405 405
406 /* Count total functions and groups */ 406 /* Count total functions and groups */
407 fn = fnull; 407 fn = fnull;
408 for_each_child_of_node(np, child) { 408 for_each_child_of_node(np, child) {
409 if (of_device_is_compatible(child, gpio_compat)) 409 if (of_device_is_compatible(child, gpio_compat))
410 continue; 410 continue;
411 soc->ngroups++; 411 soc->ngroups++;
412 /* Skip pure pinconf node */ 412 /* Skip pure pinconf node */
413 if (of_property_read_u32(child, "reg", &val)) 413 if (of_property_read_u32(child, "reg", &val))
414 continue; 414 continue;
415 if (strcmp(fn, child->name)) { 415 if (strcmp(fn, child->name)) {
416 fn = child->name; 416 fn = child->name;
417 soc->nfunctions++; 417 soc->nfunctions++;
418 } 418 }
419 } 419 }
420 420
421 soc->functions = devm_kzalloc(&pdev->dev, soc->nfunctions * 421 soc->functions = devm_kzalloc(&pdev->dev, soc->nfunctions *
422 sizeof(*soc->functions), GFP_KERNEL); 422 sizeof(*soc->functions), GFP_KERNEL);
423 if (!soc->functions) 423 if (!soc->functions)
424 return -ENOMEM; 424 return -ENOMEM;
425 425
426 soc->groups = devm_kzalloc(&pdev->dev, soc->ngroups * 426 soc->groups = devm_kzalloc(&pdev->dev, soc->ngroups *
427 sizeof(*soc->groups), GFP_KERNEL); 427 sizeof(*soc->groups), GFP_KERNEL);
428 if (!soc->groups) 428 if (!soc->groups)
429 return -ENOMEM; 429 return -ENOMEM;
430 430
431 /* Count groups for each function */ 431 /* Count groups for each function */
432 fn = fnull; 432 fn = fnull;
433 f = &soc->functions[idxf]; 433 f = &soc->functions[idxf];
434 for_each_child_of_node(np, child) { 434 for_each_child_of_node(np, child) {
435 if (of_device_is_compatible(child, gpio_compat)) 435 if (of_device_is_compatible(child, gpio_compat))
436 continue; 436 continue;
437 if (of_property_read_u32(child, "reg", &val)) 437 if (of_property_read_u32(child, "reg", &val))
438 continue; 438 continue;
439 if (strcmp(fn, child->name)) { 439 if (strcmp(fn, child->name)) {
440 f = &soc->functions[idxf++]; 440 f = &soc->functions[idxf++];
441 f->name = fn = child->name; 441 f->name = fn = child->name;
442 } 442 }
443 f->ngroups++; 443 f->ngroups++;
444 }; 444 };
445 445
446 /* Get groups for each function */ 446 /* Get groups for each function */
447 idxf = 0; 447 idxf = 0;
448 fn = fnull; 448 fn = fnull;
449 for_each_child_of_node(np, child) { 449 for_each_child_of_node(np, child) {
450 if (of_device_is_compatible(child, gpio_compat)) 450 if (of_device_is_compatible(child, gpio_compat))
451 continue; 451 continue;
452 if (of_property_read_u32(child, "reg", &val)) { 452 if (of_property_read_u32(child, "reg", &val)) {
453 ret = mxs_pinctrl_parse_group(pdev, child, 453 ret = mxs_pinctrl_parse_group(pdev, child,
454 idxg++, NULL); 454 idxg++, NULL);
455 if (ret) 455 if (ret)
456 return ret; 456 return ret;
457 continue; 457 continue;
458 } 458 }
459 459
460 if (strcmp(fn, child->name)) { 460 if (strcmp(fn, child->name)) {
461 f = &soc->functions[idxf++]; 461 f = &soc->functions[idxf++];
462 f->groups = devm_kzalloc(&pdev->dev, f->ngroups * 462 f->groups = devm_kzalloc(&pdev->dev, f->ngroups *
463 sizeof(*f->groups), 463 sizeof(*f->groups),
464 GFP_KERNEL); 464 GFP_KERNEL);
465 if (!f->groups) 465 if (!f->groups)
466 return -ENOMEM; 466 return -ENOMEM;
467 fn = child->name; 467 fn = child->name;
468 i = 0; 468 i = 0;
469 } 469 }
470 ret = mxs_pinctrl_parse_group(pdev, child, idxg++, 470 ret = mxs_pinctrl_parse_group(pdev, child, idxg++,
471 &f->groups[i++]); 471 &f->groups[i++]);
472 if (ret) 472 if (ret)
473 return ret; 473 return ret;
474 } 474 }
475 475
476 return 0; 476 return 0;
477 } 477 }
478 478
479 int __devinit mxs_pinctrl_probe(struct platform_device *pdev, 479 int __devinit mxs_pinctrl_probe(struct platform_device *pdev,
480 struct mxs_pinctrl_soc_data *soc) 480 struct mxs_pinctrl_soc_data *soc)
481 { 481 {
482 struct device_node *np = pdev->dev.of_node; 482 struct device_node *np = pdev->dev.of_node;
483 struct mxs_pinctrl_data *d; 483 struct mxs_pinctrl_data *d;
484 int ret; 484 int ret;
485 485
486 d = devm_kzalloc(&pdev->dev, sizeof(*d), GFP_KERNEL); 486 d = devm_kzalloc(&pdev->dev, sizeof(*d), GFP_KERNEL);
487 if (!d) 487 if (!d)
488 return -ENOMEM; 488 return -ENOMEM;
489 489
490 d->dev = &pdev->dev; 490 d->dev = &pdev->dev;
491 d->soc = soc; 491 d->soc = soc;
492 492
493 d->base = of_iomap(np, 0); 493 d->base = of_iomap(np, 0);
494 if (!d->base) 494 if (!d->base)
495 return -EADDRNOTAVAIL; 495 return -EADDRNOTAVAIL;
496 496
497 mxs_pinctrl_desc.pins = d->soc->pins; 497 mxs_pinctrl_desc.pins = d->soc->pins;
498 mxs_pinctrl_desc.npins = d->soc->npins; 498 mxs_pinctrl_desc.npins = d->soc->npins;
499 mxs_pinctrl_desc.name = dev_name(&pdev->dev); 499 mxs_pinctrl_desc.name = dev_name(&pdev->dev);
500 500
501 platform_set_drvdata(pdev, d); 501 platform_set_drvdata(pdev, d);
502 502
503 ret = mxs_pinctrl_probe_dt(pdev, d); 503 ret = mxs_pinctrl_probe_dt(pdev, d);
504 if (ret) { 504 if (ret) {
505 dev_err(&pdev->dev, "dt probe failed: %d\n", ret); 505 dev_err(&pdev->dev, "dt probe failed: %d\n", ret);
506 goto err; 506 goto err;
507 } 507 }
508 508
509 d->pctl = pinctrl_register(&mxs_pinctrl_desc, &pdev->dev, d); 509 d->pctl = pinctrl_register(&mxs_pinctrl_desc, &pdev->dev, d);
510 if (!d->pctl) { 510 if (!d->pctl) {
511 dev_err(&pdev->dev, "Couldn't register MXS pinctrl driver\n"); 511 dev_err(&pdev->dev, "Couldn't register MXS pinctrl driver\n");
512 ret = -EINVAL; 512 ret = -EINVAL;
513 goto err; 513 goto err;
514 } 514 }
515 515
516 return 0; 516 return 0;
517 517
518 err: 518 err:
519 platform_set_drvdata(pdev, NULL); 519 platform_set_drvdata(pdev, NULL);
520 iounmap(d->base); 520 iounmap(d->base);
521 return ret; 521 return ret;
522 } 522 }
523 EXPORT_SYMBOL_GPL(mxs_pinctrl_probe); 523 EXPORT_SYMBOL_GPL(mxs_pinctrl_probe);
524 524
525 int __devexit mxs_pinctrl_remove(struct platform_device *pdev) 525 int mxs_pinctrl_remove(struct platform_device *pdev)
526 { 526 {
527 struct mxs_pinctrl_data *d = platform_get_drvdata(pdev); 527 struct mxs_pinctrl_data *d = platform_get_drvdata(pdev);
528 528
529 platform_set_drvdata(pdev, NULL); 529 platform_set_drvdata(pdev, NULL);
530 pinctrl_unregister(d->pctl); 530 pinctrl_unregister(d->pctl);
531 iounmap(d->base); 531 iounmap(d->base);
532 532
533 return 0; 533 return 0;
534 } 534 }
535 EXPORT_SYMBOL_GPL(mxs_pinctrl_remove); 535 EXPORT_SYMBOL_GPL(mxs_pinctrl_remove);
536 536
drivers/pinctrl/pinctrl-pxa168.c
1 /* 1 /*
2 * linux/drivers/pinctrl/pinmux-pxa168.c 2 * linux/drivers/pinctrl/pinmux-pxa168.c
3 * 3 *
4 * This program is free software; you can redistribute it and/or modify 4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as 5 * it under the terms of the GNU General Public License version 2 as
6 * publishhed by the Free Software Foundation. 6 * publishhed by the Free Software Foundation.
7 * 7 *
8 * Copyright (C) 2011, Marvell Technology Group Ltd. 8 * Copyright (C) 2011, Marvell Technology Group Ltd.
9 * 9 *
10 * Author: Haojian Zhuang <haojian.zhuang@marvell.com> 10 * Author: Haojian Zhuang <haojian.zhuang@marvell.com>
11 * 11 *
12 */ 12 */
13 13
14 #include <linux/device.h> 14 #include <linux/device.h>
15 #include <linux/module.h> 15 #include <linux/module.h>
16 #include <linux/io.h> 16 #include <linux/io.h>
17 #include <linux/platform_device.h> 17 #include <linux/platform_device.h>
18 #include "pinctrl-pxa3xx.h" 18 #include "pinctrl-pxa3xx.h"
19 19
20 #define PXA168_DS_MASK 0x1800 20 #define PXA168_DS_MASK 0x1800
21 #define PXA168_DS_SHIFT 11 21 #define PXA168_DS_SHIFT 11
22 #define PXA168_SLEEP_MASK 0x38 22 #define PXA168_SLEEP_MASK 0x38
23 #define PXA168_SLEEP_SELECT (1 << 9) 23 #define PXA168_SLEEP_SELECT (1 << 9)
24 #define PXA168_SLEEP_DATA (1 << 8) 24 #define PXA168_SLEEP_DATA (1 << 8)
25 #define PXA168_SLEEP_DIR (1 << 7) 25 #define PXA168_SLEEP_DIR (1 << 7)
26 26
27 #define MFPR_168(a, r, f0, f1, f2, f3, f4, f5, f6, f7) \ 27 #define MFPR_168(a, r, f0, f1, f2, f3, f4, f5, f6, f7) \
28 { \ 28 { \
29 .name = #a, \ 29 .name = #a, \
30 .pin = a, \ 30 .pin = a, \
31 .mfpr = r, \ 31 .mfpr = r, \
32 .func = { \ 32 .func = { \
33 PXA168_MUX_##f0, \ 33 PXA168_MUX_##f0, \
34 PXA168_MUX_##f1, \ 34 PXA168_MUX_##f1, \
35 PXA168_MUX_##f2, \ 35 PXA168_MUX_##f2, \
36 PXA168_MUX_##f3, \ 36 PXA168_MUX_##f3, \
37 PXA168_MUX_##f4, \ 37 PXA168_MUX_##f4, \
38 PXA168_MUX_##f5, \ 38 PXA168_MUX_##f5, \
39 PXA168_MUX_##f6, \ 39 PXA168_MUX_##f6, \
40 PXA168_MUX_##f7, \ 40 PXA168_MUX_##f7, \
41 }, \ 41 }, \
42 } 42 }
43 43
44 #define GRP_168(a, m, p) \ 44 #define GRP_168(a, m, p) \
45 { .name = a, .mux = PXA168_MUX_##m, .pins = p, .npins = ARRAY_SIZE(p), } 45 { .name = a, .mux = PXA168_MUX_##m, .pins = p, .npins = ARRAY_SIZE(p), }
46 46
47 /* 131 pins */ 47 /* 131 pins */
48 enum pxa168_pin_list { 48 enum pxa168_pin_list {
49 /* 0~122: GPIO0~GPIO122 */ 49 /* 0~122: GPIO0~GPIO122 */
50 PWR_SCL = 123, 50 PWR_SCL = 123,
51 PWR_SDA, 51 PWR_SDA,
52 TDI, 52 TDI,
53 TMS, 53 TMS,
54 TCK, 54 TCK,
55 TDO, 55 TDO,
56 TRST, 56 TRST,
57 WAKEUP = 130, 57 WAKEUP = 130,
58 }; 58 };
59 59
60 enum pxa168_mux { 60 enum pxa168_mux {
61 /* PXA3xx_MUX_GPIO = 0 (predefined in pinctrl-pxa3xx.h) */ 61 /* PXA3xx_MUX_GPIO = 0 (predefined in pinctrl-pxa3xx.h) */
62 PXA168_MUX_GPIO = 0, 62 PXA168_MUX_GPIO = 0,
63 PXA168_MUX_DFIO, 63 PXA168_MUX_DFIO,
64 PXA168_MUX_NAND, 64 PXA168_MUX_NAND,
65 PXA168_MUX_SMC, 65 PXA168_MUX_SMC,
66 PXA168_MUX_SMC_CS0, 66 PXA168_MUX_SMC_CS0,
67 PXA168_MUX_SMC_CS1, 67 PXA168_MUX_SMC_CS1,
68 PXA168_MUX_SMC_INT, 68 PXA168_MUX_SMC_INT,
69 PXA168_MUX_SMC_RDY, 69 PXA168_MUX_SMC_RDY,
70 PXA168_MUX_MMC1, 70 PXA168_MUX_MMC1,
71 PXA168_MUX_MMC2, 71 PXA168_MUX_MMC2,
72 PXA168_MUX_MMC2_CMD, 72 PXA168_MUX_MMC2_CMD,
73 PXA168_MUX_MMC2_CLK, 73 PXA168_MUX_MMC2_CLK,
74 PXA168_MUX_MMC3, 74 PXA168_MUX_MMC3,
75 PXA168_MUX_MMC3_CMD, 75 PXA168_MUX_MMC3_CMD,
76 PXA168_MUX_MMC3_CLK, 76 PXA168_MUX_MMC3_CLK,
77 PXA168_MUX_MMC4, 77 PXA168_MUX_MMC4,
78 PXA168_MUX_MSP, 78 PXA168_MUX_MSP,
79 PXA168_MUX_MSP_DAT3, 79 PXA168_MUX_MSP_DAT3,
80 PXA168_MUX_MSP_INS, 80 PXA168_MUX_MSP_INS,
81 PXA168_MUX_I2C, 81 PXA168_MUX_I2C,
82 PXA168_MUX_PWRI2C, 82 PXA168_MUX_PWRI2C,
83 PXA168_MUX_AC97, 83 PXA168_MUX_AC97,
84 PXA168_MUX_AC97_SYSCLK, 84 PXA168_MUX_AC97_SYSCLK,
85 PXA168_MUX_PWM, 85 PXA168_MUX_PWM,
86 PXA168_MUX_PWM1, 86 PXA168_MUX_PWM1,
87 PXA168_MUX_XD, 87 PXA168_MUX_XD,
88 PXA168_MUX_XP, 88 PXA168_MUX_XP,
89 PXA168_MUX_LCD, 89 PXA168_MUX_LCD,
90 PXA168_MUX_CCIC, 90 PXA168_MUX_CCIC,
91 PXA168_MUX_CF, 91 PXA168_MUX_CF,
92 PXA168_MUX_CF_RDY, 92 PXA168_MUX_CF_RDY,
93 PXA168_MUX_CF_nINPACK, 93 PXA168_MUX_CF_nINPACK,
94 PXA168_MUX_CF_nWAIT, 94 PXA168_MUX_CF_nWAIT,
95 PXA168_MUX_KP_MKOUT, 95 PXA168_MUX_KP_MKOUT,
96 PXA168_MUX_KP_MKIN, 96 PXA168_MUX_KP_MKIN,
97 PXA168_MUX_KP_DK, 97 PXA168_MUX_KP_DK,
98 PXA168_MUX_ETH, 98 PXA168_MUX_ETH,
99 PXA168_MUX_ETH_TX, 99 PXA168_MUX_ETH_TX,
100 PXA168_MUX_ETH_RX, 100 PXA168_MUX_ETH_RX,
101 PXA168_MUX_ONE_WIRE, 101 PXA168_MUX_ONE_WIRE,
102 PXA168_MUX_UART1, 102 PXA168_MUX_UART1,
103 PXA168_MUX_UART1_TX, 103 PXA168_MUX_UART1_TX,
104 PXA168_MUX_UART1_CTS, 104 PXA168_MUX_UART1_CTS,
105 PXA168_MUX_UART1_nRI, 105 PXA168_MUX_UART1_nRI,
106 PXA168_MUX_UART1_DTR, 106 PXA168_MUX_UART1_DTR,
107 PXA168_MUX_UART2, 107 PXA168_MUX_UART2,
108 PXA168_MUX_UART2_TX, 108 PXA168_MUX_UART2_TX,
109 PXA168_MUX_UART3, 109 PXA168_MUX_UART3,
110 PXA168_MUX_UART3_TX, 110 PXA168_MUX_UART3_TX,
111 PXA168_MUX_UART3_CTS, 111 PXA168_MUX_UART3_CTS,
112 PXA168_MUX_SSP1, 112 PXA168_MUX_SSP1,
113 PXA168_MUX_SSP1_TX, 113 PXA168_MUX_SSP1_TX,
114 PXA168_MUX_SSP2, 114 PXA168_MUX_SSP2,
115 PXA168_MUX_SSP2_TX, 115 PXA168_MUX_SSP2_TX,
116 PXA168_MUX_SSP3, 116 PXA168_MUX_SSP3,
117 PXA168_MUX_SSP3_TX, 117 PXA168_MUX_SSP3_TX,
118 PXA168_MUX_SSP4, 118 PXA168_MUX_SSP4,
119 PXA168_MUX_SSP4_TX, 119 PXA168_MUX_SSP4_TX,
120 PXA168_MUX_SSP5, 120 PXA168_MUX_SSP5,
121 PXA168_MUX_SSP5_TX, 121 PXA168_MUX_SSP5_TX,
122 PXA168_MUX_USB, 122 PXA168_MUX_USB,
123 PXA168_MUX_JTAG, 123 PXA168_MUX_JTAG,
124 PXA168_MUX_RESET, 124 PXA168_MUX_RESET,
125 PXA168_MUX_WAKEUP, 125 PXA168_MUX_WAKEUP,
126 PXA168_MUX_EXT_32K_IN, 126 PXA168_MUX_EXT_32K_IN,
127 PXA168_MUX_NONE = 0xffff, 127 PXA168_MUX_NONE = 0xffff,
128 }; 128 };
129 129
130 static struct pinctrl_pin_desc pxa168_pads[] = { 130 static struct pinctrl_pin_desc pxa168_pads[] = {
131 PINCTRL_PIN(GPIO0, "GPIO0"), 131 PINCTRL_PIN(GPIO0, "GPIO0"),
132 PINCTRL_PIN(GPIO1, "GPIO1"), 132 PINCTRL_PIN(GPIO1, "GPIO1"),
133 PINCTRL_PIN(GPIO2, "GPIO2"), 133 PINCTRL_PIN(GPIO2, "GPIO2"),
134 PINCTRL_PIN(GPIO3, "GPIO3"), 134 PINCTRL_PIN(GPIO3, "GPIO3"),
135 PINCTRL_PIN(GPIO4, "GPIO4"), 135 PINCTRL_PIN(GPIO4, "GPIO4"),
136 PINCTRL_PIN(GPIO5, "GPIO5"), 136 PINCTRL_PIN(GPIO5, "GPIO5"),
137 PINCTRL_PIN(GPIO6, "GPIO6"), 137 PINCTRL_PIN(GPIO6, "GPIO6"),
138 PINCTRL_PIN(GPIO7, "GPIO7"), 138 PINCTRL_PIN(GPIO7, "GPIO7"),
139 PINCTRL_PIN(GPIO8, "GPIO8"), 139 PINCTRL_PIN(GPIO8, "GPIO8"),
140 PINCTRL_PIN(GPIO9, "GPIO9"), 140 PINCTRL_PIN(GPIO9, "GPIO9"),
141 PINCTRL_PIN(GPIO10, "GPIO10"), 141 PINCTRL_PIN(GPIO10, "GPIO10"),
142 PINCTRL_PIN(GPIO11, "GPIO11"), 142 PINCTRL_PIN(GPIO11, "GPIO11"),
143 PINCTRL_PIN(GPIO12, "GPIO12"), 143 PINCTRL_PIN(GPIO12, "GPIO12"),
144 PINCTRL_PIN(GPIO13, "GPIO13"), 144 PINCTRL_PIN(GPIO13, "GPIO13"),
145 PINCTRL_PIN(GPIO14, "GPIO14"), 145 PINCTRL_PIN(GPIO14, "GPIO14"),
146 PINCTRL_PIN(GPIO15, "GPIO15"), 146 PINCTRL_PIN(GPIO15, "GPIO15"),
147 PINCTRL_PIN(GPIO16, "GPIO16"), 147 PINCTRL_PIN(GPIO16, "GPIO16"),
148 PINCTRL_PIN(GPIO17, "GPIO17"), 148 PINCTRL_PIN(GPIO17, "GPIO17"),
149 PINCTRL_PIN(GPIO18, "GPIO18"), 149 PINCTRL_PIN(GPIO18, "GPIO18"),
150 PINCTRL_PIN(GPIO19, "GPIO19"), 150 PINCTRL_PIN(GPIO19, "GPIO19"),
151 PINCTRL_PIN(GPIO20, "GPIO20"), 151 PINCTRL_PIN(GPIO20, "GPIO20"),
152 PINCTRL_PIN(GPIO21, "GPIO21"), 152 PINCTRL_PIN(GPIO21, "GPIO21"),
153 PINCTRL_PIN(GPIO22, "GPIO22"), 153 PINCTRL_PIN(GPIO22, "GPIO22"),
154 PINCTRL_PIN(GPIO23, "GPIO23"), 154 PINCTRL_PIN(GPIO23, "GPIO23"),
155 PINCTRL_PIN(GPIO24, "GPIO24"), 155 PINCTRL_PIN(GPIO24, "GPIO24"),
156 PINCTRL_PIN(GPIO25, "GPIO25"), 156 PINCTRL_PIN(GPIO25, "GPIO25"),
157 PINCTRL_PIN(GPIO26, "GPIO26"), 157 PINCTRL_PIN(GPIO26, "GPIO26"),
158 PINCTRL_PIN(GPIO27, "GPIO27"), 158 PINCTRL_PIN(GPIO27, "GPIO27"),
159 PINCTRL_PIN(GPIO28, "GPIO28"), 159 PINCTRL_PIN(GPIO28, "GPIO28"),
160 PINCTRL_PIN(GPIO29, "GPIO29"), 160 PINCTRL_PIN(GPIO29, "GPIO29"),
161 PINCTRL_PIN(GPIO30, "GPIO30"), 161 PINCTRL_PIN(GPIO30, "GPIO30"),
162 PINCTRL_PIN(GPIO31, "GPIO31"), 162 PINCTRL_PIN(GPIO31, "GPIO31"),
163 PINCTRL_PIN(GPIO32, "GPIO32"), 163 PINCTRL_PIN(GPIO32, "GPIO32"),
164 PINCTRL_PIN(GPIO33, "GPIO33"), 164 PINCTRL_PIN(GPIO33, "GPIO33"),
165 PINCTRL_PIN(GPIO34, "GPIO34"), 165 PINCTRL_PIN(GPIO34, "GPIO34"),
166 PINCTRL_PIN(GPIO35, "GPIO35"), 166 PINCTRL_PIN(GPIO35, "GPIO35"),
167 PINCTRL_PIN(GPIO36, "GPIO36"), 167 PINCTRL_PIN(GPIO36, "GPIO36"),
168 PINCTRL_PIN(GPIO37, "GPIO37"), 168 PINCTRL_PIN(GPIO37, "GPIO37"),
169 PINCTRL_PIN(GPIO38, "GPIO38"), 169 PINCTRL_PIN(GPIO38, "GPIO38"),
170 PINCTRL_PIN(GPIO39, "GPIO39"), 170 PINCTRL_PIN(GPIO39, "GPIO39"),
171 PINCTRL_PIN(GPIO40, "GPIO40"), 171 PINCTRL_PIN(GPIO40, "GPIO40"),
172 PINCTRL_PIN(GPIO41, "GPIO41"), 172 PINCTRL_PIN(GPIO41, "GPIO41"),
173 PINCTRL_PIN(GPIO42, "GPIO42"), 173 PINCTRL_PIN(GPIO42, "GPIO42"),
174 PINCTRL_PIN(GPIO43, "GPIO43"), 174 PINCTRL_PIN(GPIO43, "GPIO43"),
175 PINCTRL_PIN(GPIO44, "GPIO44"), 175 PINCTRL_PIN(GPIO44, "GPIO44"),
176 PINCTRL_PIN(GPIO45, "GPIO45"), 176 PINCTRL_PIN(GPIO45, "GPIO45"),
177 PINCTRL_PIN(GPIO46, "GPIO46"), 177 PINCTRL_PIN(GPIO46, "GPIO46"),
178 PINCTRL_PIN(GPIO47, "GPIO47"), 178 PINCTRL_PIN(GPIO47, "GPIO47"),
179 PINCTRL_PIN(GPIO48, "GPIO48"), 179 PINCTRL_PIN(GPIO48, "GPIO48"),
180 PINCTRL_PIN(GPIO49, "GPIO49"), 180 PINCTRL_PIN(GPIO49, "GPIO49"),
181 PINCTRL_PIN(GPIO50, "GPIO50"), 181 PINCTRL_PIN(GPIO50, "GPIO50"),
182 PINCTRL_PIN(GPIO51, "GPIO51"), 182 PINCTRL_PIN(GPIO51, "GPIO51"),
183 PINCTRL_PIN(GPIO52, "GPIO52"), 183 PINCTRL_PIN(GPIO52, "GPIO52"),
184 PINCTRL_PIN(GPIO53, "GPIO53"), 184 PINCTRL_PIN(GPIO53, "GPIO53"),
185 PINCTRL_PIN(GPIO54, "GPIO54"), 185 PINCTRL_PIN(GPIO54, "GPIO54"),
186 PINCTRL_PIN(GPIO55, "GPIO55"), 186 PINCTRL_PIN(GPIO55, "GPIO55"),
187 PINCTRL_PIN(GPIO56, "GPIO56"), 187 PINCTRL_PIN(GPIO56, "GPIO56"),
188 PINCTRL_PIN(GPIO57, "GPIO57"), 188 PINCTRL_PIN(GPIO57, "GPIO57"),
189 PINCTRL_PIN(GPIO58, "GPIO58"), 189 PINCTRL_PIN(GPIO58, "GPIO58"),
190 PINCTRL_PIN(GPIO59, "GPIO59"), 190 PINCTRL_PIN(GPIO59, "GPIO59"),
191 PINCTRL_PIN(GPIO60, "GPIO60"), 191 PINCTRL_PIN(GPIO60, "GPIO60"),
192 PINCTRL_PIN(GPIO61, "GPIO61"), 192 PINCTRL_PIN(GPIO61, "GPIO61"),
193 PINCTRL_PIN(GPIO62, "GPIO62"), 193 PINCTRL_PIN(GPIO62, "GPIO62"),
194 PINCTRL_PIN(GPIO63, "GPIO63"), 194 PINCTRL_PIN(GPIO63, "GPIO63"),
195 PINCTRL_PIN(GPIO64, "GPIO64"), 195 PINCTRL_PIN(GPIO64, "GPIO64"),
196 PINCTRL_PIN(GPIO65, "GPIO65"), 196 PINCTRL_PIN(GPIO65, "GPIO65"),
197 PINCTRL_PIN(GPIO66, "GPIO66"), 197 PINCTRL_PIN(GPIO66, "GPIO66"),
198 PINCTRL_PIN(GPIO67, "GPIO67"), 198 PINCTRL_PIN(GPIO67, "GPIO67"),
199 PINCTRL_PIN(GPIO68, "GPIO68"), 199 PINCTRL_PIN(GPIO68, "GPIO68"),
200 PINCTRL_PIN(GPIO69, "GPIO69"), 200 PINCTRL_PIN(GPIO69, "GPIO69"),
201 PINCTRL_PIN(GPIO70, "GPIO70"), 201 PINCTRL_PIN(GPIO70, "GPIO70"),
202 PINCTRL_PIN(GPIO71, "GPIO71"), 202 PINCTRL_PIN(GPIO71, "GPIO71"),
203 PINCTRL_PIN(GPIO72, "GPIO72"), 203 PINCTRL_PIN(GPIO72, "GPIO72"),
204 PINCTRL_PIN(GPIO73, "GPIO73"), 204 PINCTRL_PIN(GPIO73, "GPIO73"),
205 PINCTRL_PIN(GPIO74, "GPIO74"), 205 PINCTRL_PIN(GPIO74, "GPIO74"),
206 PINCTRL_PIN(GPIO75, "GPIO75"), 206 PINCTRL_PIN(GPIO75, "GPIO75"),
207 PINCTRL_PIN(GPIO76, "GPIO76"), 207 PINCTRL_PIN(GPIO76, "GPIO76"),
208 PINCTRL_PIN(GPIO77, "GPIO77"), 208 PINCTRL_PIN(GPIO77, "GPIO77"),
209 PINCTRL_PIN(GPIO78, "GPIO78"), 209 PINCTRL_PIN(GPIO78, "GPIO78"),
210 PINCTRL_PIN(GPIO79, "GPIO79"), 210 PINCTRL_PIN(GPIO79, "GPIO79"),
211 PINCTRL_PIN(GPIO80, "GPIO80"), 211 PINCTRL_PIN(GPIO80, "GPIO80"),
212 PINCTRL_PIN(GPIO81, "GPIO81"), 212 PINCTRL_PIN(GPIO81, "GPIO81"),
213 PINCTRL_PIN(GPIO82, "GPIO82"), 213 PINCTRL_PIN(GPIO82, "GPIO82"),
214 PINCTRL_PIN(GPIO83, "GPIO83"), 214 PINCTRL_PIN(GPIO83, "GPIO83"),
215 PINCTRL_PIN(GPIO84, "GPIO84"), 215 PINCTRL_PIN(GPIO84, "GPIO84"),
216 PINCTRL_PIN(GPIO85, "GPIO85"), 216 PINCTRL_PIN(GPIO85, "GPIO85"),
217 PINCTRL_PIN(GPIO86, "GPIO86"), 217 PINCTRL_PIN(GPIO86, "GPIO86"),
218 PINCTRL_PIN(GPIO87, "GPIO87"), 218 PINCTRL_PIN(GPIO87, "GPIO87"),
219 PINCTRL_PIN(GPIO88, "GPIO88"), 219 PINCTRL_PIN(GPIO88, "GPIO88"),
220 PINCTRL_PIN(GPIO89, "GPIO89"), 220 PINCTRL_PIN(GPIO89, "GPIO89"),
221 PINCTRL_PIN(GPIO90, "GPIO90"), 221 PINCTRL_PIN(GPIO90, "GPIO90"),
222 PINCTRL_PIN(GPIO91, "GPIO91"), 222 PINCTRL_PIN(GPIO91, "GPIO91"),
223 PINCTRL_PIN(GPIO92, "GPIO92"), 223 PINCTRL_PIN(GPIO92, "GPIO92"),
224 PINCTRL_PIN(GPIO93, "GPIO93"), 224 PINCTRL_PIN(GPIO93, "GPIO93"),
225 PINCTRL_PIN(GPIO94, "GPIO94"), 225 PINCTRL_PIN(GPIO94, "GPIO94"),
226 PINCTRL_PIN(GPIO95, "GPIO95"), 226 PINCTRL_PIN(GPIO95, "GPIO95"),
227 PINCTRL_PIN(GPIO96, "GPIO96"), 227 PINCTRL_PIN(GPIO96, "GPIO96"),
228 PINCTRL_PIN(GPIO97, "GPIO97"), 228 PINCTRL_PIN(GPIO97, "GPIO97"),
229 PINCTRL_PIN(GPIO98, "GPIO98"), 229 PINCTRL_PIN(GPIO98, "GPIO98"),
230 PINCTRL_PIN(GPIO99, "GPIO99"), 230 PINCTRL_PIN(GPIO99, "GPIO99"),
231 PINCTRL_PIN(GPIO100, "GPIO100"), 231 PINCTRL_PIN(GPIO100, "GPIO100"),
232 PINCTRL_PIN(GPIO101, "GPIO101"), 232 PINCTRL_PIN(GPIO101, "GPIO101"),
233 PINCTRL_PIN(GPIO102, "GPIO102"), 233 PINCTRL_PIN(GPIO102, "GPIO102"),
234 PINCTRL_PIN(GPIO103, "GPIO103"), 234 PINCTRL_PIN(GPIO103, "GPIO103"),
235 PINCTRL_PIN(GPIO104, "GPIO104"), 235 PINCTRL_PIN(GPIO104, "GPIO104"),
236 PINCTRL_PIN(GPIO105, "GPIO105"), 236 PINCTRL_PIN(GPIO105, "GPIO105"),
237 PINCTRL_PIN(GPIO106, "GPIO106"), 237 PINCTRL_PIN(GPIO106, "GPIO106"),
238 PINCTRL_PIN(GPIO107, "GPIO107"), 238 PINCTRL_PIN(GPIO107, "GPIO107"),
239 PINCTRL_PIN(GPIO108, "GPIO108"), 239 PINCTRL_PIN(GPIO108, "GPIO108"),
240 PINCTRL_PIN(GPIO109, "GPIO109"), 240 PINCTRL_PIN(GPIO109, "GPIO109"),
241 PINCTRL_PIN(GPIO110, "GPIO110"), 241 PINCTRL_PIN(GPIO110, "GPIO110"),
242 PINCTRL_PIN(GPIO111, "GPIO111"), 242 PINCTRL_PIN(GPIO111, "GPIO111"),
243 PINCTRL_PIN(GPIO112, "GPIO112"), 243 PINCTRL_PIN(GPIO112, "GPIO112"),
244 PINCTRL_PIN(GPIO113, "GPIO113"), 244 PINCTRL_PIN(GPIO113, "GPIO113"),
245 PINCTRL_PIN(GPIO114, "GPIO114"), 245 PINCTRL_PIN(GPIO114, "GPIO114"),
246 PINCTRL_PIN(GPIO115, "GPIO115"), 246 PINCTRL_PIN(GPIO115, "GPIO115"),
247 PINCTRL_PIN(GPIO116, "GPIO116"), 247 PINCTRL_PIN(GPIO116, "GPIO116"),
248 PINCTRL_PIN(GPIO117, "GPIO117"), 248 PINCTRL_PIN(GPIO117, "GPIO117"),
249 PINCTRL_PIN(GPIO118, "GPIO118"), 249 PINCTRL_PIN(GPIO118, "GPIO118"),
250 PINCTRL_PIN(GPIO119, "GPIO119"), 250 PINCTRL_PIN(GPIO119, "GPIO119"),
251 PINCTRL_PIN(GPIO120, "GPIO120"), 251 PINCTRL_PIN(GPIO120, "GPIO120"),
252 PINCTRL_PIN(GPIO121, "GPIO121"), 252 PINCTRL_PIN(GPIO121, "GPIO121"),
253 PINCTRL_PIN(GPIO122, "GPIO122"), 253 PINCTRL_PIN(GPIO122, "GPIO122"),
254 PINCTRL_PIN(PWR_SCL, "PWR_SCL"), 254 PINCTRL_PIN(PWR_SCL, "PWR_SCL"),
255 PINCTRL_PIN(PWR_SDA, "PWR_SDA"), 255 PINCTRL_PIN(PWR_SDA, "PWR_SDA"),
256 PINCTRL_PIN(TDI, "TDI"), 256 PINCTRL_PIN(TDI, "TDI"),
257 PINCTRL_PIN(TMS, "TMS"), 257 PINCTRL_PIN(TMS, "TMS"),
258 PINCTRL_PIN(TCK, "TCK"), 258 PINCTRL_PIN(TCK, "TCK"),
259 PINCTRL_PIN(TDO, "TDO"), 259 PINCTRL_PIN(TDO, "TDO"),
260 PINCTRL_PIN(TRST, "TRST"), 260 PINCTRL_PIN(TRST, "TRST"),
261 PINCTRL_PIN(WAKEUP, "WAKEUP"), 261 PINCTRL_PIN(WAKEUP, "WAKEUP"),
262 }; 262 };
263 263
264 struct pxa3xx_mfp_pin pxa168_mfp[] = { 264 struct pxa3xx_mfp_pin pxa168_mfp[] = {
265 /* pin offs f0 f1 f2 f3 f4 f5 f6 f7 */ 265 /* pin offs f0 f1 f2 f3 f4 f5 f6 f7 */
266 MFPR_168(GPIO0, 0x04C, DFIO, NONE, NONE, MSP, MMC3_CMD, GPIO, MMC3, NONE), 266 MFPR_168(GPIO0, 0x04C, DFIO, NONE, NONE, MSP, MMC3_CMD, GPIO, MMC3, NONE),
267 MFPR_168(GPIO1, 0x050, DFIO, NONE, NONE, MSP, MMC3_CLK, GPIO, MMC3, NONE), 267 MFPR_168(GPIO1, 0x050, DFIO, NONE, NONE, MSP, MMC3_CLK, GPIO, MMC3, NONE),
268 MFPR_168(GPIO2, 0x054, DFIO, NONE, NONE, MSP, NONE, GPIO, MMC3, NONE), 268 MFPR_168(GPIO2, 0x054, DFIO, NONE, NONE, MSP, NONE, GPIO, MMC3, NONE),
269 MFPR_168(GPIO3, 0x058, DFIO, NONE, NONE, NONE, NONE, GPIO, MMC3, NONE), 269 MFPR_168(GPIO3, 0x058, DFIO, NONE, NONE, NONE, NONE, GPIO, MMC3, NONE),
270 MFPR_168(GPIO4, 0x05C, DFIO, NONE, NONE, MSP_DAT3, NONE, GPIO, MMC3, NONE), 270 MFPR_168(GPIO4, 0x05C, DFIO, NONE, NONE, MSP_DAT3, NONE, GPIO, MMC3, NONE),
271 MFPR_168(GPIO5, 0x060, DFIO, NONE, NONE, MSP, NONE, GPIO, MMC3, NONE), 271 MFPR_168(GPIO5, 0x060, DFIO, NONE, NONE, MSP, NONE, GPIO, MMC3, NONE),
272 MFPR_168(GPIO6, 0x064, DFIO, NONE, NONE, MSP, NONE, GPIO, MMC3, NONE), 272 MFPR_168(GPIO6, 0x064, DFIO, NONE, NONE, MSP, NONE, GPIO, MMC3, NONE),
273 MFPR_168(GPIO7, 0x068, DFIO, NONE, NONE, MSP, NONE, GPIO, MMC3, NONE), 273 MFPR_168(GPIO7, 0x068, DFIO, NONE, NONE, MSP, NONE, GPIO, MMC3, NONE),
274 MFPR_168(GPIO8, 0x06C, DFIO, MMC2, UART3_TX, NONE, MMC2_CMD, GPIO, MMC3_CLK, NONE), 274 MFPR_168(GPIO8, 0x06C, DFIO, MMC2, UART3_TX, NONE, MMC2_CMD, GPIO, MMC3_CLK, NONE),
275 MFPR_168(GPIO9, 0x070, DFIO, MMC2, UART3, NONE, MMC2_CLK, GPIO, MMC3_CMD, NONE), 275 MFPR_168(GPIO9, 0x070, DFIO, MMC2, UART3, NONE, MMC2_CLK, GPIO, MMC3_CMD, NONE),
276 MFPR_168(GPIO10, 0x074, DFIO, MMC2, UART3, NONE, NONE, GPIO, MSP_DAT3, NONE), 276 MFPR_168(GPIO10, 0x074, DFIO, MMC2, UART3, NONE, NONE, GPIO, MSP_DAT3, NONE),
277 MFPR_168(GPIO11, 0x078, DFIO, MMC2, UART3, NONE, NONE, GPIO, MSP, NONE), 277 MFPR_168(GPIO11, 0x078, DFIO, MMC2, UART3, NONE, NONE, GPIO, MSP, NONE),
278 MFPR_168(GPIO12, 0x07C, DFIO, MMC2, UART3, NONE, NONE, GPIO, MSP, NONE), 278 MFPR_168(GPIO12, 0x07C, DFIO, MMC2, UART3, NONE, NONE, GPIO, MSP, NONE),
279 MFPR_168(GPIO13, 0x080, DFIO, MMC2, UART3, NONE, NONE, GPIO, MSP, NONE), 279 MFPR_168(GPIO13, 0x080, DFIO, MMC2, UART3, NONE, NONE, GPIO, MSP, NONE),
280 MFPR_168(GPIO14, 0x084, DFIO, MMC2, NONE, NONE, NONE, GPIO, MSP, NONE), 280 MFPR_168(GPIO14, 0x084, DFIO, MMC2, NONE, NONE, NONE, GPIO, MSP, NONE),
281 MFPR_168(GPIO15, 0x088, DFIO, MMC2, NONE, NONE, NONE, GPIO, MSP, NONE), 281 MFPR_168(GPIO15, 0x088, DFIO, MMC2, NONE, NONE, NONE, GPIO, MSP, NONE),
282 MFPR_168(GPIO16, 0x08C, GPIO, NAND, SMC_CS0, SMC_CS1, NONE, NONE, MMC3, NONE), 282 MFPR_168(GPIO16, 0x08C, GPIO, NAND, SMC_CS0, SMC_CS1, NONE, NONE, MMC3, NONE),
283 MFPR_168(GPIO17, 0x090, NAND, NONE, NONE, NONE, NONE, GPIO, MSP, NONE), 283 MFPR_168(GPIO17, 0x090, NAND, NONE, NONE, NONE, NONE, GPIO, MSP, NONE),
284 MFPR_168(GPIO18, 0x094, GPIO, NAND, SMC_CS1, SMC_CS0, NONE, NONE, NONE, NONE), 284 MFPR_168(GPIO18, 0x094, GPIO, NAND, SMC_CS1, SMC_CS0, NONE, NONE, NONE, NONE),
285 MFPR_168(GPIO19, 0x098, SMC_CS0, NONE, NONE, CF, NONE, GPIO, NONE, NONE), 285 MFPR_168(GPIO19, 0x098, SMC_CS0, NONE, NONE, CF, NONE, GPIO, NONE, NONE),
286 MFPR_168(GPIO20, 0x09C, GPIO, NONE, SMC_CS1, CF, CF_RDY, NONE, NONE, NONE), 286 MFPR_168(GPIO20, 0x09C, GPIO, NONE, SMC_CS1, CF, CF_RDY, NONE, NONE, NONE),
287 MFPR_168(GPIO21, 0x0A0, NAND, MMC2_CLK, NONE, NONE, NONE, GPIO, NONE, NONE), 287 MFPR_168(GPIO21, 0x0A0, NAND, MMC2_CLK, NONE, NONE, NONE, GPIO, NONE, NONE),
288 MFPR_168(GPIO22, 0x0A4, NAND, MMC2_CMD, NONE, NONE, NONE, GPIO, NONE, NONE), 288 MFPR_168(GPIO22, 0x0A4, NAND, MMC2_CMD, NONE, NONE, NONE, GPIO, NONE, NONE),
289 MFPR_168(GPIO23, 0x0A8, SMC, NAND, NONE, CF, NONE, GPIO, NONE, NONE), 289 MFPR_168(GPIO23, 0x0A8, SMC, NAND, NONE, CF, NONE, GPIO, NONE, NONE),
290 MFPR_168(GPIO24, 0x0AC, NAND, NONE, NONE, NONE, NONE, GPIO, NONE, NONE), 290 MFPR_168(GPIO24, 0x0AC, NAND, NONE, NONE, NONE, NONE, GPIO, NONE, NONE),
291 MFPR_168(GPIO25, 0x0B0, SMC, NAND, NONE, CF, NONE, GPIO, NONE, NONE), 291 MFPR_168(GPIO25, 0x0B0, SMC, NAND, NONE, CF, NONE, GPIO, NONE, NONE),
292 MFPR_168(GPIO26, 0x0B4, GPIO, NAND, NONE, NONE, CF, NONE, NONE, NONE), 292 MFPR_168(GPIO26, 0x0B4, GPIO, NAND, NONE, NONE, CF, NONE, NONE, NONE),
293 MFPR_168(GPIO27, 0x0B8, SMC_INT, NAND, SMC, NONE, SMC_RDY, GPIO, NONE, NONE), 293 MFPR_168(GPIO27, 0x0B8, SMC_INT, NAND, SMC, NONE, SMC_RDY, GPIO, NONE, NONE),
294 MFPR_168(GPIO28, 0x0BC, SMC_RDY, MMC4, SMC, CF_RDY, NONE, GPIO, MMC2_CMD, NONE), 294 MFPR_168(GPIO28, 0x0BC, SMC_RDY, MMC4, SMC, CF_RDY, NONE, GPIO, MMC2_CMD, NONE),
295 MFPR_168(GPIO29, 0x0C0, SMC, MMC4, NONE, CF, NONE, GPIO, MMC2_CLK, KP_DK), 295 MFPR_168(GPIO29, 0x0C0, SMC, MMC4, NONE, CF, NONE, GPIO, MMC2_CLK, KP_DK),
296 MFPR_168(GPIO30, 0x0C4, SMC, MMC4, UART3_TX, CF, NONE, GPIO, MMC2, KP_DK), 296 MFPR_168(GPIO30, 0x0C4, SMC, MMC4, UART3_TX, CF, NONE, GPIO, MMC2, KP_DK),
297 MFPR_168(GPIO31, 0x0C8, SMC, MMC4, UART3, CF, NONE, GPIO, MMC2, KP_DK), 297 MFPR_168(GPIO31, 0x0C8, SMC, MMC4, UART3, CF, NONE, GPIO, MMC2, KP_DK),
298 MFPR_168(GPIO32, 0x0CC, SMC, MMC4, UART3, CF, NONE, GPIO, MMC2, KP_DK), 298 MFPR_168(GPIO32, 0x0CC, SMC, MMC4, UART3, CF, NONE, GPIO, MMC2, KP_DK),
299 MFPR_168(GPIO33, 0x0D0, SMC, MMC4, UART3, CF, CF_nINPACK, GPIO, MMC2, KP_DK), 299 MFPR_168(GPIO33, 0x0D0, SMC, MMC4, UART3, CF, CF_nINPACK, GPIO, MMC2, KP_DK),
300 MFPR_168(GPIO34, 0x0D4, GPIO, NONE, SMC_CS1, CF, CF_nWAIT, NONE, MMC3, KP_DK), 300 MFPR_168(GPIO34, 0x0D4, GPIO, NONE, SMC_CS1, CF, CF_nWAIT, NONE, MMC3, KP_DK),
301 MFPR_168(GPIO35, 0x0D8, GPIO, NONE, SMC, CF_nINPACK, NONE, NONE, MMC3_CMD, KP_DK), 301 MFPR_168(GPIO35, 0x0D8, GPIO, NONE, SMC, CF_nINPACK, NONE, NONE, MMC3_CMD, KP_DK),
302 MFPR_168(GPIO36, 0x0DC, GPIO, NONE, SMC, CF_nWAIT, NONE, NONE, MMC3_CLK, KP_DK), 302 MFPR_168(GPIO36, 0x0DC, GPIO, NONE, SMC, CF_nWAIT, NONE, NONE, MMC3_CLK, KP_DK),
303 MFPR_168(GPIO37, 0x000, GPIO, MMC1, NONE, KP_MKOUT, CCIC, XP, KP_MKIN, KP_DK), 303 MFPR_168(GPIO37, 0x000, GPIO, MMC1, NONE, KP_MKOUT, CCIC, XP, KP_MKIN, KP_DK),
304 MFPR_168(GPIO38, 0x004, GPIO, MMC1, NONE, KP_MKOUT, CCIC, XP, KP_MKIN, KP_DK), 304 MFPR_168(GPIO38, 0x004, GPIO, MMC1, NONE, KP_MKOUT, CCIC, XP, KP_MKIN, KP_DK),
305 MFPR_168(GPIO39, 0x008, GPIO, NONE, NONE, KP_MKOUT, CCIC, XP, KP_MKIN, KP_DK), 305 MFPR_168(GPIO39, 0x008, GPIO, NONE, NONE, KP_MKOUT, CCIC, XP, KP_MKIN, KP_DK),
306 MFPR_168(GPIO40, 0x00C, GPIO, MMC1, MSP, KP_MKOUT, CCIC, XP, KP_MKIN, KP_DK), 306 MFPR_168(GPIO40, 0x00C, GPIO, MMC1, MSP, KP_MKOUT, CCIC, XP, KP_MKIN, KP_DK),
307 MFPR_168(GPIO41, 0x010, GPIO, MMC1, MSP, NONE, CCIC, XP, KP_MKIN, KP_DK), 307 MFPR_168(GPIO41, 0x010, GPIO, MMC1, MSP, NONE, CCIC, XP, KP_MKIN, KP_DK),
308 MFPR_168(GPIO42, 0x014, GPIO, I2C, NONE, MSP, CCIC, XP, KP_MKIN, KP_DK), 308 MFPR_168(GPIO42, 0x014, GPIO, I2C, NONE, MSP, CCIC, XP, KP_MKIN, KP_DK),
309 MFPR_168(GPIO43, 0x018, GPIO, MMC1, MSP, MSP_INS, NONE, NONE, KP_MKIN, KP_DK), 309 MFPR_168(GPIO43, 0x018, GPIO, MMC1, MSP, MSP_INS, NONE, NONE, KP_MKIN, KP_DK),
310 MFPR_168(GPIO44, 0x01C, GPIO, MMC1, MSP_DAT3, MSP, CCIC, XP, KP_MKIN, KP_DK), 310 MFPR_168(GPIO44, 0x01C, GPIO, MMC1, MSP_DAT3, MSP, CCIC, XP, KP_MKIN, KP_DK),
311 MFPR_168(GPIO45, 0x020, GPIO, NONE, NONE, MSP, CCIC, XP, NONE, KP_DK), 311 MFPR_168(GPIO45, 0x020, GPIO, NONE, NONE, MSP, CCIC, XP, NONE, KP_DK),
312 MFPR_168(GPIO46, 0x024, GPIO, MMC1, MSP_INS, MSP, CCIC, NONE, KP_MKOUT, KP_DK), 312 MFPR_168(GPIO46, 0x024, GPIO, MMC1, MSP_INS, MSP, CCIC, NONE, KP_MKOUT, KP_DK),
313 MFPR_168(GPIO47, 0x028, GPIO, NONE, NONE, MSP_INS, NONE, XP, NONE, KP_DK), 313 MFPR_168(GPIO47, 0x028, GPIO, NONE, NONE, MSP_INS, NONE, XP, NONE, KP_DK),
314 MFPR_168(GPIO48, 0x02C, GPIO, MMC1, NONE, MSP_DAT3, CCIC, NONE, NONE, KP_DK), 314 MFPR_168(GPIO48, 0x02C, GPIO, MMC1, NONE, MSP_DAT3, CCIC, NONE, NONE, KP_DK),
315 MFPR_168(GPIO49, 0x030, GPIO, MMC1, NONE, MSP, NONE, XD, KP_MKOUT, NONE), 315 MFPR_168(GPIO49, 0x030, GPIO, MMC1, NONE, MSP, NONE, XD, KP_MKOUT, NONE),
316 MFPR_168(GPIO50, 0x034, GPIO, I2C, NONE, MSP, CCIC, XD, KP_MKOUT, NONE), 316 MFPR_168(GPIO50, 0x034, GPIO, I2C, NONE, MSP, CCIC, XD, KP_MKOUT, NONE),
317 MFPR_168(GPIO51, 0x038, GPIO, MMC1, NONE, MSP, NONE, XD, KP_MKOUT, NONE), 317 MFPR_168(GPIO51, 0x038, GPIO, MMC1, NONE, MSP, NONE, XD, KP_MKOUT, NONE),
318 MFPR_168(GPIO52, 0x03C, GPIO, MMC1, NONE, MSP, NONE, XD, KP_MKOUT, NONE), 318 MFPR_168(GPIO52, 0x03C, GPIO, MMC1, NONE, MSP, NONE, XD, KP_MKOUT, NONE),
319 MFPR_168(GPIO53, 0x040, GPIO, MMC1, NONE, NONE, NONE, XD, KP_MKOUT, NONE), 319 MFPR_168(GPIO53, 0x040, GPIO, MMC1, NONE, NONE, NONE, XD, KP_MKOUT, NONE),
320 MFPR_168(GPIO54, 0x044, GPIO, MMC1, NONE, NONE, CCIC, XD, KP_MKOUT, NONE), 320 MFPR_168(GPIO54, 0x044, GPIO, MMC1, NONE, NONE, CCIC, XD, KP_MKOUT, NONE),
321 MFPR_168(GPIO55, 0x048, GPIO, NONE, NONE, MSP, CCIC, XD, KP_MKOUT, NONE), 321 MFPR_168(GPIO55, 0x048, GPIO, NONE, NONE, MSP, CCIC, XD, KP_MKOUT, NONE),
322 MFPR_168(GPIO56, 0x0E0, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 322 MFPR_168(GPIO56, 0x0E0, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
323 MFPR_168(GPIO57, 0x0E4, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 323 MFPR_168(GPIO57, 0x0E4, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
324 MFPR_168(GPIO58, 0x0E8, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 324 MFPR_168(GPIO58, 0x0E8, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
325 MFPR_168(GPIO59, 0x0EC, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 325 MFPR_168(GPIO59, 0x0EC, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
326 MFPR_168(GPIO60, 0x0F0, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 326 MFPR_168(GPIO60, 0x0F0, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
327 MFPR_168(GPIO61, 0x0F4, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 327 MFPR_168(GPIO61, 0x0F4, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
328 MFPR_168(GPIO62, 0x0F8, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 328 MFPR_168(GPIO62, 0x0F8, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
329 MFPR_168(GPIO63, 0x0FC, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 329 MFPR_168(GPIO63, 0x0FC, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
330 MFPR_168(GPIO64, 0x100, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 330 MFPR_168(GPIO64, 0x100, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
331 MFPR_168(GPIO65, 0x104, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 331 MFPR_168(GPIO65, 0x104, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
332 MFPR_168(GPIO66, 0x108, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 332 MFPR_168(GPIO66, 0x108, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
333 MFPR_168(GPIO67, 0x10C, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 333 MFPR_168(GPIO67, 0x10C, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
334 MFPR_168(GPIO68, 0x110, GPIO, LCD, NONE, XD, NONE, NONE, NONE, NONE), 334 MFPR_168(GPIO68, 0x110, GPIO, LCD, NONE, XD, NONE, NONE, NONE, NONE),
335 MFPR_168(GPIO69, 0x114, GPIO, LCD, NONE, XD, NONE, NONE, NONE, NONE), 335 MFPR_168(GPIO69, 0x114, GPIO, LCD, NONE, XD, NONE, NONE, NONE, NONE),
336 MFPR_168(GPIO70, 0x118, GPIO, LCD, NONE, XD, NONE, NONE, NONE, NONE), 336 MFPR_168(GPIO70, 0x118, GPIO, LCD, NONE, XD, NONE, NONE, NONE, NONE),
337 MFPR_168(GPIO71, 0x11C, GPIO, LCD, NONE, XD, NONE, NONE, NONE, NONE), 337 MFPR_168(GPIO71, 0x11C, GPIO, LCD, NONE, XD, NONE, NONE, NONE, NONE),
338 MFPR_168(GPIO72, 0x120, GPIO, LCD, NONE, XD, NONE, NONE, NONE, NONE), 338 MFPR_168(GPIO72, 0x120, GPIO, LCD, NONE, XD, NONE, NONE, NONE, NONE),
339 MFPR_168(GPIO73, 0x124, GPIO, LCD, NONE, XD, NONE, NONE, NONE, NONE), 339 MFPR_168(GPIO73, 0x124, GPIO, LCD, NONE, XD, NONE, NONE, NONE, NONE),
340 MFPR_168(GPIO74, 0x128, GPIO, LCD, PWM, XD, NONE, NONE, NONE, NONE), 340 MFPR_168(GPIO74, 0x128, GPIO, LCD, PWM, XD, NONE, NONE, NONE, NONE),
341 MFPR_168(GPIO75, 0x12C, GPIO, LCD, PWM, XD, ONE_WIRE, NONE, NONE, NONE), 341 MFPR_168(GPIO75, 0x12C, GPIO, LCD, PWM, XD, ONE_WIRE, NONE, NONE, NONE),
342 MFPR_168(GPIO76, 0x130, GPIO, LCD, PWM, I2C, NONE, NONE, MSP_INS, NONE), 342 MFPR_168(GPIO76, 0x130, GPIO, LCD, PWM, I2C, NONE, NONE, MSP_INS, NONE),
343 MFPR_168(GPIO77, 0x134, GPIO, LCD, PWM1, I2C, ONE_WIRE, NONE, XD, NONE), 343 MFPR_168(GPIO77, 0x134, GPIO, LCD, PWM1, I2C, ONE_WIRE, NONE, XD, NONE),
344 MFPR_168(GPIO78, 0x138, GPIO, LCD, NONE, NONE, NONE, MMC4, NONE, NONE), 344 MFPR_168(GPIO78, 0x138, GPIO, LCD, NONE, NONE, NONE, MMC4, NONE, NONE),
345 MFPR_168(GPIO79, 0x13C, GPIO, LCD, NONE, NONE, ONE_WIRE, MMC4, NONE, NONE), 345 MFPR_168(GPIO79, 0x13C, GPIO, LCD, NONE, NONE, ONE_WIRE, MMC4, NONE, NONE),
346 MFPR_168(GPIO80, 0x140, GPIO, LCD, NONE, I2C, NONE, MMC4, NONE, NONE), 346 MFPR_168(GPIO80, 0x140, GPIO, LCD, NONE, I2C, NONE, MMC4, NONE, NONE),
347 MFPR_168(GPIO81, 0x144, GPIO, LCD, NONE, I2C, ONE_WIRE, MMC4, NONE, NONE), 347 MFPR_168(GPIO81, 0x144, GPIO, LCD, NONE, I2C, ONE_WIRE, MMC4, NONE, NONE),
348 MFPR_168(GPIO82, 0x148, GPIO, LCD, PWM, NONE, NONE, MMC4, NONE, NONE), 348 MFPR_168(GPIO82, 0x148, GPIO, LCD, PWM, NONE, NONE, MMC4, NONE, NONE),
349 MFPR_168(GPIO83, 0x14C, GPIO, LCD, PWM, NONE, RESET, MMC4, NONE, NONE), 349 MFPR_168(GPIO83, 0x14C, GPIO, LCD, PWM, NONE, RESET, MMC4, NONE, NONE),
350 MFPR_168(GPIO84, 0x150, GPIO, NONE, PWM, ONE_WIRE, PWM1, NONE, NONE, EXT_32K_IN), 350 MFPR_168(GPIO84, 0x150, GPIO, NONE, PWM, ONE_WIRE, PWM1, NONE, NONE, EXT_32K_IN),
351 MFPR_168(GPIO85, 0x154, GPIO, NONE, PWM1, NONE, NONE, NONE, NONE, USB), 351 MFPR_168(GPIO85, 0x154, GPIO, NONE, PWM1, NONE, NONE, NONE, NONE, USB),
352 MFPR_168(GPIO86, 0x158, GPIO, MMC2, UART2, NONE, JTAG, ETH_TX, SSP5_TX, SSP5), 352 MFPR_168(GPIO86, 0x158, GPIO, MMC2, UART2, NONE, JTAG, ETH_TX, SSP5_TX, SSP5),
353 MFPR_168(GPIO87, 0x15C, GPIO, MMC2, UART2, NONE, JTAG, ETH_TX, SSP5, SSP5_TX), 353 MFPR_168(GPIO87, 0x15C, GPIO, MMC2, UART2, NONE, JTAG, ETH_TX, SSP5, SSP5_TX),
354 MFPR_168(GPIO88, 0x160, GPIO, MMC2, UART2, UART2_TX, JTAG, ETH_TX, ETH_RX, SSP5), 354 MFPR_168(GPIO88, 0x160, GPIO, MMC2, UART2, UART2_TX, JTAG, ETH_TX, ETH_RX, SSP5),
355 MFPR_168(GPIO89, 0x164, GPIO, MMC2, UART2_TX, UART2, JTAG, ETH_TX, ETH_RX, SSP5), 355 MFPR_168(GPIO89, 0x164, GPIO, MMC2, UART2_TX, UART2, JTAG, ETH_TX, ETH_RX, SSP5),
356 MFPR_168(GPIO90, 0x168, GPIO, MMC2, NONE, SSP3, JTAG, ETH_TX, ETH_RX, NONE), 356 MFPR_168(GPIO90, 0x168, GPIO, MMC2, NONE, SSP3, JTAG, ETH_TX, ETH_RX, NONE),
357 MFPR_168(GPIO91, 0x16C, GPIO, MMC2, NONE, SSP3, SSP4, ETH_TX, ETH_RX, NONE), 357 MFPR_168(GPIO91, 0x16C, GPIO, MMC2, NONE, SSP3, SSP4, ETH_TX, ETH_RX, NONE),
358 MFPR_168(GPIO92, 0x170, GPIO, MMC2, NONE, SSP3, SSP3_TX, ETH, NONE, NONE), 358 MFPR_168(GPIO92, 0x170, GPIO, MMC2, NONE, SSP3, SSP3_TX, ETH, NONE, NONE),
359 MFPR_168(GPIO93, 0x174, GPIO, MMC2, NONE, SSP3_TX, SSP3, ETH, NONE, NONE), 359 MFPR_168(GPIO93, 0x174, GPIO, MMC2, NONE, SSP3_TX, SSP3, ETH, NONE, NONE),
360 MFPR_168(GPIO94, 0x178, GPIO, MMC2_CMD, SSP3, AC97_SYSCLK, AC97, ETH, NONE, NONE), 360 MFPR_168(GPIO94, 0x178, GPIO, MMC2_CMD, SSP3, AC97_SYSCLK, AC97, ETH, NONE, NONE),
361 MFPR_168(GPIO95, 0x17C, GPIO, MMC2_CLK, NONE, NONE, AC97, ETH, NONE, NONE), 361 MFPR_168(GPIO95, 0x17C, GPIO, MMC2_CLK, NONE, NONE, AC97, ETH, NONE, NONE),
362 MFPR_168(GPIO96, 0x180, GPIO, PWM, NONE, MMC2, NONE, ETH_RX, ETH_TX, NONE), 362 MFPR_168(GPIO96, 0x180, GPIO, PWM, NONE, MMC2, NONE, ETH_RX, ETH_TX, NONE),
363 MFPR_168(GPIO97, 0x184, GPIO, PWM, ONE_WIRE, NONE, NONE, ETH_RX, ETH_TX, NONE), 363 MFPR_168(GPIO97, 0x184, GPIO, PWM, ONE_WIRE, NONE, NONE, ETH_RX, ETH_TX, NONE),
364 MFPR_168(GPIO98, 0x188, GPIO, PWM1, UART3_TX, UART3, NONE, ETH_RX, ETH_TX, NONE), 364 MFPR_168(GPIO98, 0x188, GPIO, PWM1, UART3_TX, UART3, NONE, ETH_RX, ETH_TX, NONE),
365 MFPR_168(GPIO99, 0x18C, GPIO, ONE_WIRE, UART3, UART3_TX, NONE, ETH_RX, ETH_TX, NONE), 365 MFPR_168(GPIO99, 0x18C, GPIO, ONE_WIRE, UART3, UART3_TX, NONE, ETH_RX, ETH_TX, NONE),
366 MFPR_168(GPIO100, 0x190, GPIO, NONE, UART3_CTS, UART3, NONE, ETH, NONE, NONE), 366 MFPR_168(GPIO100, 0x190, GPIO, NONE, UART3_CTS, UART3, NONE, ETH, NONE, NONE),
367 MFPR_168(GPIO101, 0x194, GPIO, NONE, UART3, UART3_CTS, NONE, ETH, NONE, NONE), 367 MFPR_168(GPIO101, 0x194, GPIO, NONE, UART3, UART3_CTS, NONE, ETH, NONE, NONE),
368 MFPR_168(GPIO102, 0x198, GPIO, I2C, UART3, SSP4, NONE, NONE, NONE, NONE), 368 MFPR_168(GPIO102, 0x198, GPIO, I2C, UART3, SSP4, NONE, NONE, NONE, NONE),
369 MFPR_168(GPIO103, 0x19C, GPIO, I2C, UART3, SSP4, SSP2, ETH, NONE, NONE), 369 MFPR_168(GPIO103, 0x19C, GPIO, I2C, UART3, SSP4, SSP2, ETH, NONE, NONE),
370 MFPR_168(GPIO104, 0x1A0, GPIO, PWM, UART1, SSP4, SSP4_TX, AC97, KP_MKOUT, NONE), 370 MFPR_168(GPIO104, 0x1A0, GPIO, PWM, UART1, SSP4, SSP4_TX, AC97, KP_MKOUT, NONE),
371 MFPR_168(GPIO105, 0x1A4, GPIO, I2C, UART1, SSP4_TX, SSP4, AC97, KP_MKOUT, NONE), 371 MFPR_168(GPIO105, 0x1A4, GPIO, I2C, UART1, SSP4_TX, SSP4, AC97, KP_MKOUT, NONE),
372 MFPR_168(GPIO106, 0x1A8, GPIO, I2C, PWM1, AC97_SYSCLK, MMC2, NONE, KP_MKOUT, NONE), 372 MFPR_168(GPIO106, 0x1A8, GPIO, I2C, PWM1, AC97_SYSCLK, MMC2, NONE, KP_MKOUT, NONE),
373 MFPR_168(GPIO107, 0x1AC, GPIO, UART1_TX, UART1, NONE, SSP2, MSP_DAT3, NONE, KP_MKIN), 373 MFPR_168(GPIO107, 0x1AC, GPIO, UART1_TX, UART1, NONE, SSP2, MSP_DAT3, NONE, KP_MKIN),
374 MFPR_168(GPIO108, 0x1B0, GPIO, UART1, UART1_TX, NONE, SSP2_TX, MSP, NONE, KP_MKIN), 374 MFPR_168(GPIO108, 0x1B0, GPIO, UART1, UART1_TX, NONE, SSP2_TX, MSP, NONE, KP_MKIN),
375 MFPR_168(GPIO109, 0x1B4, GPIO, UART1_CTS, UART1, NONE, AC97_SYSCLK, MSP, NONE, KP_MKIN), 375 MFPR_168(GPIO109, 0x1B4, GPIO, UART1_CTS, UART1, NONE, AC97_SYSCLK, MSP, NONE, KP_MKIN),
376 MFPR_168(GPIO110, 0x1B8, GPIO, UART1, UART1_CTS, NONE, SMC_RDY, MSP, NONE, KP_MKIN), 376 MFPR_168(GPIO110, 0x1B8, GPIO, UART1, UART1_CTS, NONE, SMC_RDY, MSP, NONE, KP_MKIN),
377 MFPR_168(GPIO111, 0x1BC, GPIO, UART1_nRI, UART1, SSP3, SSP2, MSP, XD, KP_MKOUT), 377 MFPR_168(GPIO111, 0x1BC, GPIO, UART1_nRI, UART1, SSP3, SSP2, MSP, XD, KP_MKOUT),
378 MFPR_168(GPIO112, 0x1C0, GPIO, UART1_DTR, UART1, ONE_WIRE, SSP2, MSP, XD, KP_MKOUT), 378 MFPR_168(GPIO112, 0x1C0, GPIO, UART1_DTR, UART1, ONE_WIRE, SSP2, MSP, XD, KP_MKOUT),
379 MFPR_168(GPIO113, 0x1C4, GPIO, NONE, NONE, NONE, NONE, NONE, AC97_SYSCLK, NONE), 379 MFPR_168(GPIO113, 0x1C4, GPIO, NONE, NONE, NONE, NONE, NONE, AC97_SYSCLK, NONE),
380 MFPR_168(GPIO114, 0x1C8, GPIO, SSP1, NONE, NONE, NONE, NONE, AC97, NONE), 380 MFPR_168(GPIO114, 0x1C8, GPIO, SSP1, NONE, NONE, NONE, NONE, AC97, NONE),
381 MFPR_168(GPIO115, 0x1CC, GPIO, SSP1, NONE, NONE, NONE, NONE, AC97, NONE), 381 MFPR_168(GPIO115, 0x1CC, GPIO, SSP1, NONE, NONE, NONE, NONE, AC97, NONE),
382 MFPR_168(GPIO116, 0x1D0, GPIO, SSP1_TX, SSP1, NONE, NONE, NONE, AC97, NONE), 382 MFPR_168(GPIO116, 0x1D0, GPIO, SSP1_TX, SSP1, NONE, NONE, NONE, AC97, NONE),
383 MFPR_168(GPIO117, 0x1D4, GPIO, SSP1, SSP1_TX, NONE, MMC2_CMD, NONE, AC97, NONE), 383 MFPR_168(GPIO117, 0x1D4, GPIO, SSP1, SSP1_TX, NONE, MMC2_CMD, NONE, AC97, NONE),
384 MFPR_168(GPIO118, 0x1D8, GPIO, SSP2, NONE, NONE, MMC2_CLK, NONE, AC97, KP_MKIN), 384 MFPR_168(GPIO118, 0x1D8, GPIO, SSP2, NONE, NONE, MMC2_CLK, NONE, AC97, KP_MKIN),
385 MFPR_168(GPIO119, 0x1DC, GPIO, SSP2, NONE, NONE, MMC2, NONE, AC97, KP_MKIN), 385 MFPR_168(GPIO119, 0x1DC, GPIO, SSP2, NONE, NONE, MMC2, NONE, AC97, KP_MKIN),
386 MFPR_168(GPIO120, 0x1E0, GPIO, SSP2, SSP2_TX, NONE, MMC2, NONE, NONE, KP_MKIN), 386 MFPR_168(GPIO120, 0x1E0, GPIO, SSP2, SSP2_TX, NONE, MMC2, NONE, NONE, KP_MKIN),
387 MFPR_168(GPIO121, 0x1E4, GPIO, SSP2_TX, SSP2, NONE, MMC2, NONE, NONE, KP_MKIN), 387 MFPR_168(GPIO121, 0x1E4, GPIO, SSP2_TX, SSP2, NONE, MMC2, NONE, NONE, KP_MKIN),
388 MFPR_168(GPIO122, 0x1E8, GPIO, AC97_SYSCLK, SSP2, PWM, MMC2, NONE, NONE, NONE), 388 MFPR_168(GPIO122, 0x1E8, GPIO, AC97_SYSCLK, SSP2, PWM, MMC2, NONE, NONE, NONE),
389 MFPR_168(PWR_SCL, 0x1EC, PWRI2C, NONE, NONE, NONE, NONE, NONE, GPIO, MMC4), 389 MFPR_168(PWR_SCL, 0x1EC, PWRI2C, NONE, NONE, NONE, NONE, NONE, GPIO, MMC4),
390 MFPR_168(PWR_SDA, 0x1F0, PWRI2C, NONE, NONE, NONE, NONE, NONE, GPIO, NONE), 390 MFPR_168(PWR_SDA, 0x1F0, PWRI2C, NONE, NONE, NONE, NONE, NONE, GPIO, NONE),
391 MFPR_168(TDI, 0x1F4, JTAG, PWM1, UART2, MMC4, SSP5, NONE, XD, MMC4), 391 MFPR_168(TDI, 0x1F4, JTAG, PWM1, UART2, MMC4, SSP5, NONE, XD, MMC4),
392 MFPR_168(TMS, 0x1F8, JTAG, PWM, UART2, NONE, SSP5, NONE, XD, MMC4), 392 MFPR_168(TMS, 0x1F8, JTAG, PWM, UART2, NONE, SSP5, NONE, XD, MMC4),
393 MFPR_168(TCK, 0x1FC, JTAG, PWM, UART2, UART2_TX, SSP5, NONE, XD, MMC4), 393 MFPR_168(TCK, 0x1FC, JTAG, PWM, UART2, UART2_TX, SSP5, NONE, XD, MMC4),
394 MFPR_168(TDO, 0x200, JTAG, PWM, UART2_TX, UART2, SSP5_TX, NONE, XD, MMC4), 394 MFPR_168(TDO, 0x200, JTAG, PWM, UART2_TX, UART2, SSP5_TX, NONE, XD, MMC4),
395 MFPR_168(TRST, 0x204, JTAG, ONE_WIRE, SSP2, SSP3, AC97_SYSCLK, NONE, XD, MMC4), 395 MFPR_168(TRST, 0x204, JTAG, ONE_WIRE, SSP2, SSP3, AC97_SYSCLK, NONE, XD, MMC4),
396 MFPR_168(WAKEUP, 0x208, WAKEUP, ONE_WIRE, PWM1, PWM, SSP2, NONE, GPIO, MMC4), 396 MFPR_168(WAKEUP, 0x208, WAKEUP, ONE_WIRE, PWM1, PWM, SSP2, NONE, GPIO, MMC4),
397 }; 397 };
398 398
399 static const unsigned p168_jtag_pin1[] = {TDI, TMS, TCK, TDO, TRST}; 399 static const unsigned p168_jtag_pin1[] = {TDI, TMS, TCK, TDO, TRST};
400 static const unsigned p168_wakeup_pin1[] = {WAKEUP}; 400 static const unsigned p168_wakeup_pin1[] = {WAKEUP};
401 static const unsigned p168_ssp1rx_pin1[] = {GPIO114, GPIO115, GPIO116}; 401 static const unsigned p168_ssp1rx_pin1[] = {GPIO114, GPIO115, GPIO116};
402 static const unsigned p168_ssp1tx_pin1[] = {GPIO117}; 402 static const unsigned p168_ssp1tx_pin1[] = {GPIO117};
403 static const unsigned p168_ssp4rx_pin1[] = {GPIO102, GPIO103, GPIO104}; 403 static const unsigned p168_ssp4rx_pin1[] = {GPIO102, GPIO103, GPIO104};
404 static const unsigned p168_ssp4tx_pin1[] = {GPIO105}; 404 static const unsigned p168_ssp4tx_pin1[] = {GPIO105};
405 static const unsigned p168_ssp5rx_pin1[] = {GPIO86, GPIO88, GPIO89}; 405 static const unsigned p168_ssp5rx_pin1[] = {GPIO86, GPIO88, GPIO89};
406 static const unsigned p168_ssp5tx_pin1[] = {GPIO87}; 406 static const unsigned p168_ssp5tx_pin1[] = {GPIO87};
407 static const unsigned p168_i2c_pin1[] = {GPIO105, GPIO106}; 407 static const unsigned p168_i2c_pin1[] = {GPIO105, GPIO106};
408 static const unsigned p168_pwri2c_pin1[] = {PWR_SCL, PWR_SDA}; 408 static const unsigned p168_pwri2c_pin1[] = {PWR_SCL, PWR_SDA};
409 static const unsigned p168_mmc1_pin1[] = {GPIO40, GPIO41, GPIO43, GPIO46, 409 static const unsigned p168_mmc1_pin1[] = {GPIO40, GPIO41, GPIO43, GPIO46,
410 GPIO49, GPIO51, GPIO52, GPIO53}; 410 GPIO49, GPIO51, GPIO52, GPIO53};
411 static const unsigned p168_mmc2_data_pin1[] = {GPIO90, GPIO91, GPIO92, GPIO93}; 411 static const unsigned p168_mmc2_data_pin1[] = {GPIO90, GPIO91, GPIO92, GPIO93};
412 static const unsigned p168_mmc2_cmd_pin1[] = {GPIO94}; 412 static const unsigned p168_mmc2_cmd_pin1[] = {GPIO94};
413 static const unsigned p168_mmc2_clk_pin1[] = {GPIO95}; 413 static const unsigned p168_mmc2_clk_pin1[] = {GPIO95};
414 static const unsigned p168_mmc3_data_pin1[] = {GPIO0, GPIO1, GPIO2, GPIO3, 414 static const unsigned p168_mmc3_data_pin1[] = {GPIO0, GPIO1, GPIO2, GPIO3,
415 GPIO4, GPIO5, GPIO6, GPIO7}; 415 GPIO4, GPIO5, GPIO6, GPIO7};
416 static const unsigned p168_mmc3_cmd_pin1[] = {GPIO9}; 416 static const unsigned p168_mmc3_cmd_pin1[] = {GPIO9};
417 static const unsigned p168_mmc3_clk_pin1[] = {GPIO8}; 417 static const unsigned p168_mmc3_clk_pin1[] = {GPIO8};
418 static const unsigned p168_eth_pin1[] = {GPIO92, GPIO93, GPIO100, GPIO101, 418 static const unsigned p168_eth_pin1[] = {GPIO92, GPIO93, GPIO100, GPIO101,
419 GPIO103}; 419 GPIO103};
420 static const unsigned p168_ethtx_pin1[] = {GPIO86, GPIO87, GPIO88, GPIO89, 420 static const unsigned p168_ethtx_pin1[] = {GPIO86, GPIO87, GPIO88, GPIO89,
421 GPIO90, GPIO91}; 421 GPIO90, GPIO91};
422 static const unsigned p168_ethrx_pin1[] = {GPIO94, GPIO95, GPIO96, GPIO97, 422 static const unsigned p168_ethrx_pin1[] = {GPIO94, GPIO95, GPIO96, GPIO97,
423 GPIO98, GPIO99}; 423 GPIO98, GPIO99};
424 static const unsigned p168_uart1rx_pin1[] = {GPIO107}; 424 static const unsigned p168_uart1rx_pin1[] = {GPIO107};
425 static const unsigned p168_uart1tx_pin1[] = {GPIO108}; 425 static const unsigned p168_uart1tx_pin1[] = {GPIO108};
426 static const unsigned p168_uart3rx_pin1[] = {GPIO98, GPIO100, GPIO101}; 426 static const unsigned p168_uart3rx_pin1[] = {GPIO98, GPIO100, GPIO101};
427 static const unsigned p168_uart3tx_pin1[] = {GPIO99}; 427 static const unsigned p168_uart3tx_pin1[] = {GPIO99};
428 static const unsigned p168_msp_pin1[] = {GPIO40, GPIO41, GPIO42, GPIO43, 428 static const unsigned p168_msp_pin1[] = {GPIO40, GPIO41, GPIO42, GPIO43,
429 GPIO44, GPIO50}; 429 GPIO44, GPIO50};
430 static const unsigned p168_ccic_pin1[] = {GPIO37, GPIO38, GPIO39, GPIO40, 430 static const unsigned p168_ccic_pin1[] = {GPIO37, GPIO38, GPIO39, GPIO40,
431 GPIO41, GPIO42, GPIO44, GPIO45, GPIO46, GPIO48, GPIO54, GPIO55}; 431 GPIO41, GPIO42, GPIO44, GPIO45, GPIO46, GPIO48, GPIO54, GPIO55};
432 static const unsigned p168_xd_pin1[] = {GPIO37, GPIO38, GPIO39, GPIO40, 432 static const unsigned p168_xd_pin1[] = {GPIO37, GPIO38, GPIO39, GPIO40,
433 GPIO41, GPIO42, GPIO44, GPIO45, GPIO47, GPIO48, GPIO49, GPIO50, 433 GPIO41, GPIO42, GPIO44, GPIO45, GPIO47, GPIO48, GPIO49, GPIO50,
434 GPIO51, GPIO52}; 434 GPIO51, GPIO52};
435 static const unsigned p168_lcd_pin1[] = {GPIO56, GPIO57, GPIO58, GPIO59, 435 static const unsigned p168_lcd_pin1[] = {GPIO56, GPIO57, GPIO58, GPIO59,
436 GPIO60, GPIO61, GPIO62, GPIO63, GPIO64, GPIO65, GPIO66, GPIO67, 436 GPIO60, GPIO61, GPIO62, GPIO63, GPIO64, GPIO65, GPIO66, GPIO67,
437 GPIO68, GPIO69, GPIO70, GPIO71, GPIO72, GPIO73, GPIO74, GPIO75, 437 GPIO68, GPIO69, GPIO70, GPIO71, GPIO72, GPIO73, GPIO74, GPIO75,
438 GPIO76, GPIO77, GPIO78, GPIO79, GPIO80, GPIO81, GPIO82, GPIO83}; 438 GPIO76, GPIO77, GPIO78, GPIO79, GPIO80, GPIO81, GPIO82, GPIO83};
439 static const unsigned p168_dfio_pin1[] = {GPIO0, GPIO1, GPIO2, GPIO3, 439 static const unsigned p168_dfio_pin1[] = {GPIO0, GPIO1, GPIO2, GPIO3,
440 GPIO4, GPIO5, GPIO6, GPIO7, GPIO8, GPIO9, GPIO10, GPIO11, GPIO12, 440 GPIO4, GPIO5, GPIO6, GPIO7, GPIO8, GPIO9, GPIO10, GPIO11, GPIO12,
441 GPIO13, GPIO14, GPIO15}; 441 GPIO13, GPIO14, GPIO15};
442 static const unsigned p168_nand_pin1[] = {GPIO16, GPIO17, GPIO21, GPIO22, 442 static const unsigned p168_nand_pin1[] = {GPIO16, GPIO17, GPIO21, GPIO22,
443 GPIO24, GPIO26}; 443 GPIO24, GPIO26};
444 static const unsigned p168_smc_pin1[] = {GPIO23, GPIO25, GPIO29, GPIO35, 444 static const unsigned p168_smc_pin1[] = {GPIO23, GPIO25, GPIO29, GPIO35,
445 GPIO36}; 445 GPIO36};
446 static const unsigned p168_smccs0_pin1[] = {GPIO18}; 446 static const unsigned p168_smccs0_pin1[] = {GPIO18};
447 static const unsigned p168_smccs1_pin1[] = {GPIO34}; 447 static const unsigned p168_smccs1_pin1[] = {GPIO34};
448 static const unsigned p168_smcrdy_pin1[] = {GPIO28}; 448 static const unsigned p168_smcrdy_pin1[] = {GPIO28};
449 static const unsigned p168_ac97sysclk_pin1[] = {GPIO113}; 449 static const unsigned p168_ac97sysclk_pin1[] = {GPIO113};
450 static const unsigned p168_ac97_pin1[] = {GPIO114, GPIO115, GPIO117, GPIO118, 450 static const unsigned p168_ac97_pin1[] = {GPIO114, GPIO115, GPIO117, GPIO118,
451 GPIO119}; 451 GPIO119};
452 static const unsigned p168_cf_pin1[] = {GPIO19, GPIO20, GPIO23, GPIO25, 452 static const unsigned p168_cf_pin1[] = {GPIO19, GPIO20, GPIO23, GPIO25,
453 GPIO28, GPIO29, GPIO30, GPIO31, GPIO32, GPIO33, GPIO34, GPIO35, 453 GPIO28, GPIO29, GPIO30, GPIO31, GPIO32, GPIO33, GPIO34, GPIO35,
454 GPIO36}; 454 GPIO36};
455 static const unsigned p168_kpmkin_pin1[] = {GPIO109, GPIO110, GPIO121}; 455 static const unsigned p168_kpmkin_pin1[] = {GPIO109, GPIO110, GPIO121};
456 static const unsigned p168_kpmkout_pin1[] = {GPIO111, GPIO112}; 456 static const unsigned p168_kpmkout_pin1[] = {GPIO111, GPIO112};
457 static const unsigned p168_gpio86_pin1[] = {WAKEUP}; 457 static const unsigned p168_gpio86_pin1[] = {WAKEUP};
458 static const unsigned p168_gpio86_pin2[] = {GPIO86}; 458 static const unsigned p168_gpio86_pin2[] = {GPIO86};
459 static const unsigned p168_gpio87_pin1[] = {GPIO87}; 459 static const unsigned p168_gpio87_pin1[] = {GPIO87};
460 static const unsigned p168_gpio87_pin2[] = {PWR_SDA}; 460 static const unsigned p168_gpio87_pin2[] = {PWR_SDA};
461 static const unsigned p168_gpio88_pin1[] = {GPIO88}; 461 static const unsigned p168_gpio88_pin1[] = {GPIO88};
462 static const unsigned p168_gpio88_pin2[] = {PWR_SCL}; 462 static const unsigned p168_gpio88_pin2[] = {PWR_SCL};
463 463
464 static struct pxa3xx_pin_group pxa168_grps[] = { 464 static struct pxa3xx_pin_group pxa168_grps[] = {
465 GRP_168("uart1rx-1", UART1, p168_uart1rx_pin1), 465 GRP_168("uart1rx-1", UART1, p168_uart1rx_pin1),
466 GRP_168("uart1tx-1", UART1_TX, p168_uart1tx_pin1), 466 GRP_168("uart1tx-1", UART1_TX, p168_uart1tx_pin1),
467 GRP_168("uart3rx-1", UART3, p168_uart3rx_pin1), 467 GRP_168("uart3rx-1", UART3, p168_uart3rx_pin1),
468 GRP_168("uart3tx-1", UART3_TX, p168_uart3tx_pin1), 468 GRP_168("uart3tx-1", UART3_TX, p168_uart3tx_pin1),
469 GRP_168("ssp1rx-1", SSP1, p168_ssp1rx_pin1), 469 GRP_168("ssp1rx-1", SSP1, p168_ssp1rx_pin1),
470 GRP_168("ssp1tx-1", SSP1_TX, p168_ssp1tx_pin1), 470 GRP_168("ssp1tx-1", SSP1_TX, p168_ssp1tx_pin1),
471 GRP_168("ssp4rx-1", SSP4, p168_ssp4rx_pin1), 471 GRP_168("ssp4rx-1", SSP4, p168_ssp4rx_pin1),
472 GRP_168("ssp4tx-1", SSP4_TX, p168_ssp4tx_pin1), 472 GRP_168("ssp4tx-1", SSP4_TX, p168_ssp4tx_pin1),
473 GRP_168("ssp5rx-1", SSP5, p168_ssp5rx_pin1), 473 GRP_168("ssp5rx-1", SSP5, p168_ssp5rx_pin1),
474 GRP_168("ssp5tx-1", SSP5_TX, p168_ssp5tx_pin1), 474 GRP_168("ssp5tx-1", SSP5_TX, p168_ssp5tx_pin1),
475 GRP_168("jtag", JTAG, p168_jtag_pin1), 475 GRP_168("jtag", JTAG, p168_jtag_pin1),
476 GRP_168("wakeup", WAKEUP, p168_wakeup_pin1), 476 GRP_168("wakeup", WAKEUP, p168_wakeup_pin1),
477 GRP_168("i2c", I2C, p168_i2c_pin1), 477 GRP_168("i2c", I2C, p168_i2c_pin1),
478 GRP_168("pwri2c", PWRI2C, p168_pwri2c_pin1), 478 GRP_168("pwri2c", PWRI2C, p168_pwri2c_pin1),
479 GRP_168("mmc1 8p1", MMC1, p168_mmc1_pin1), 479 GRP_168("mmc1 8p1", MMC1, p168_mmc1_pin1),
480 GRP_168("mmc2 4p1", MMC2, p168_mmc2_data_pin1), 480 GRP_168("mmc2 4p1", MMC2, p168_mmc2_data_pin1),
481 GRP_168("mmc2 cmd1", MMC2_CMD, p168_mmc2_cmd_pin1), 481 GRP_168("mmc2 cmd1", MMC2_CMD, p168_mmc2_cmd_pin1),
482 GRP_168("mmc2 clk1", MMC2_CLK, p168_mmc2_clk_pin1), 482 GRP_168("mmc2 clk1", MMC2_CLK, p168_mmc2_clk_pin1),
483 GRP_168("mmc3 8p1", MMC3, p168_mmc3_data_pin1), 483 GRP_168("mmc3 8p1", MMC3, p168_mmc3_data_pin1),
484 GRP_168("mmc3 cmd1", MMC3_CMD, p168_mmc3_cmd_pin1), 484 GRP_168("mmc3 cmd1", MMC3_CMD, p168_mmc3_cmd_pin1),
485 GRP_168("mmc3 clk1", MMC3_CLK, p168_mmc3_clk_pin1), 485 GRP_168("mmc3 clk1", MMC3_CLK, p168_mmc3_clk_pin1),
486 GRP_168("eth", ETH, p168_eth_pin1), 486 GRP_168("eth", ETH, p168_eth_pin1),
487 GRP_168("eth rx", ETH_RX, p168_ethrx_pin1), 487 GRP_168("eth rx", ETH_RX, p168_ethrx_pin1),
488 GRP_168("eth tx", ETH_TX, p168_ethtx_pin1), 488 GRP_168("eth tx", ETH_TX, p168_ethtx_pin1),
489 GRP_168("msp", MSP, p168_msp_pin1), 489 GRP_168("msp", MSP, p168_msp_pin1),
490 GRP_168("ccic", CCIC, p168_ccic_pin1), 490 GRP_168("ccic", CCIC, p168_ccic_pin1),
491 GRP_168("xd", XD, p168_xd_pin1), 491 GRP_168("xd", XD, p168_xd_pin1),
492 GRP_168("lcd", LCD, p168_lcd_pin1), 492 GRP_168("lcd", LCD, p168_lcd_pin1),
493 GRP_168("dfio", DFIO, p168_dfio_pin1), 493 GRP_168("dfio", DFIO, p168_dfio_pin1),
494 GRP_168("nand", NAND, p168_nand_pin1), 494 GRP_168("nand", NAND, p168_nand_pin1),
495 GRP_168("smc", SMC, p168_smc_pin1), 495 GRP_168("smc", SMC, p168_smc_pin1),
496 GRP_168("smc cs0", SMC_CS0, p168_smccs0_pin1), 496 GRP_168("smc cs0", SMC_CS0, p168_smccs0_pin1),
497 GRP_168("smc cs1", SMC_CS1, p168_smccs1_pin1), 497 GRP_168("smc cs1", SMC_CS1, p168_smccs1_pin1),
498 GRP_168("smc rdy", SMC_RDY, p168_smcrdy_pin1), 498 GRP_168("smc rdy", SMC_RDY, p168_smcrdy_pin1),
499 GRP_168("ac97 sysclk", AC97_SYSCLK, p168_ac97sysclk_pin1), 499 GRP_168("ac97 sysclk", AC97_SYSCLK, p168_ac97sysclk_pin1),
500 GRP_168("ac97", AC97, p168_ac97_pin1), 500 GRP_168("ac97", AC97, p168_ac97_pin1),
501 GRP_168("cf", CF, p168_cf_pin1), 501 GRP_168("cf", CF, p168_cf_pin1),
502 GRP_168("kp mkin 3p1", KP_MKIN, p168_kpmkin_pin1), 502 GRP_168("kp mkin 3p1", KP_MKIN, p168_kpmkin_pin1),
503 GRP_168("kp mkout 2p1", KP_MKOUT, p168_kpmkout_pin1), 503 GRP_168("kp mkout 2p1", KP_MKOUT, p168_kpmkout_pin1),
504 GRP_168("gpio86-1", GPIO, p168_gpio86_pin1), 504 GRP_168("gpio86-1", GPIO, p168_gpio86_pin1),
505 GRP_168("gpio86-2", GPIO, p168_gpio86_pin2), 505 GRP_168("gpio86-2", GPIO, p168_gpio86_pin2),
506 GRP_168("gpio87-1", GPIO, p168_gpio87_pin1), 506 GRP_168("gpio87-1", GPIO, p168_gpio87_pin1),
507 GRP_168("gpio87-2", GPIO, p168_gpio87_pin2), 507 GRP_168("gpio87-2", GPIO, p168_gpio87_pin2),
508 GRP_168("gpio88-1", GPIO, p168_gpio88_pin1), 508 GRP_168("gpio88-1", GPIO, p168_gpio88_pin1),
509 GRP_168("gpio88-2", GPIO, p168_gpio88_pin2), 509 GRP_168("gpio88-2", GPIO, p168_gpio88_pin2),
510 }; 510 };
511 511
512 static const char * const p168_uart1rx_grps[] = {"uart1rx-1"}; 512 static const char * const p168_uart1rx_grps[] = {"uart1rx-1"};
513 static const char * const p168_uart1tx_grps[] = {"uart1tx-1"}; 513 static const char * const p168_uart1tx_grps[] = {"uart1tx-1"};
514 static const char * const p168_uart3rx_grps[] = {"uart3rx-1"}; 514 static const char * const p168_uart3rx_grps[] = {"uart3rx-1"};
515 static const char * const p168_uart3tx_grps[] = {"uart3tx-1"}; 515 static const char * const p168_uart3tx_grps[] = {"uart3tx-1"};
516 static const char * const p168_ssp1rx_grps[] = {"ssp1rx-1"}; 516 static const char * const p168_ssp1rx_grps[] = {"ssp1rx-1"};
517 static const char * const p168_ssp1tx_grps[] = {"ssp1tx-1"}; 517 static const char * const p168_ssp1tx_grps[] = {"ssp1tx-1"};
518 static const char * const p168_ssp4rx_grps[] = {"ssp4rx-1"}; 518 static const char * const p168_ssp4rx_grps[] = {"ssp4rx-1"};
519 static const char * const p168_ssp4tx_grps[] = {"ssp4tx-1"}; 519 static const char * const p168_ssp4tx_grps[] = {"ssp4tx-1"};
520 static const char * const p168_ssp5rx_grps[] = {"ssp5rx-1"}; 520 static const char * const p168_ssp5rx_grps[] = {"ssp5rx-1"};
521 static const char * const p168_ssp5tx_grps[] = {"ssp5tx-1"}; 521 static const char * const p168_ssp5tx_grps[] = {"ssp5tx-1"};
522 static const char * const p168_i2c_grps[] = {"i2c"}; 522 static const char * const p168_i2c_grps[] = {"i2c"};
523 static const char * const p168_pwri2c_grps[] = {"pwri2c"}; 523 static const char * const p168_pwri2c_grps[] = {"pwri2c"};
524 static const char * const p168_mmc1_grps[] = {"mmc1 8p1"}; 524 static const char * const p168_mmc1_grps[] = {"mmc1 8p1"};
525 static const char * const p168_mmc2_data_grps[] = {"mmc2 4p1"}; 525 static const char * const p168_mmc2_data_grps[] = {"mmc2 4p1"};
526 static const char * const p168_mmc2_cmd_grps[] = {"mmc2 cmd1"}; 526 static const char * const p168_mmc2_cmd_grps[] = {"mmc2 cmd1"};
527 static const char * const p168_mmc2_clk_grps[] = {"mmc2 clk1"}; 527 static const char * const p168_mmc2_clk_grps[] = {"mmc2 clk1"};
528 static const char * const p168_mmc3_data_grps[] = {"mmc3 8p1"}; 528 static const char * const p168_mmc3_data_grps[] = {"mmc3 8p1"};
529 static const char * const p168_mmc3_cmd_grps[] = {"mmc3 cmd1"}; 529 static const char * const p168_mmc3_cmd_grps[] = {"mmc3 cmd1"};
530 static const char * const p168_mmc3_clk_grps[] = {"mmc3 clk1"}; 530 static const char * const p168_mmc3_clk_grps[] = {"mmc3 clk1"};
531 static const char * const p168_eth_grps[] = {"eth"}; 531 static const char * const p168_eth_grps[] = {"eth"};
532 static const char * const p168_ethrx_grps[] = {"eth rx"}; 532 static const char * const p168_ethrx_grps[] = {"eth rx"};
533 static const char * const p168_ethtx_grps[] = {"eth tx"}; 533 static const char * const p168_ethtx_grps[] = {"eth tx"};
534 static const char * const p168_msp_grps[] = {"msp"}; 534 static const char * const p168_msp_grps[] = {"msp"};
535 static const char * const p168_ccic_grps[] = {"ccic"}; 535 static const char * const p168_ccic_grps[] = {"ccic"};
536 static const char * const p168_xd_grps[] = {"xd"}; 536 static const char * const p168_xd_grps[] = {"xd"};
537 static const char * const p168_lcd_grps[] = {"lcd"}; 537 static const char * const p168_lcd_grps[] = {"lcd"};
538 static const char * const p168_dfio_grps[] = {"dfio"}; 538 static const char * const p168_dfio_grps[] = {"dfio"};
539 static const char * const p168_nand_grps[] = {"nand"}; 539 static const char * const p168_nand_grps[] = {"nand"};
540 static const char * const p168_smc_grps[] = {"smc"}; 540 static const char * const p168_smc_grps[] = {"smc"};
541 static const char * const p168_smccs0_grps[] = {"smc cs0"}; 541 static const char * const p168_smccs0_grps[] = {"smc cs0"};
542 static const char * const p168_smccs1_grps[] = {"smc cs1"}; 542 static const char * const p168_smccs1_grps[] = {"smc cs1"};
543 static const char * const p168_smcrdy_grps[] = {"smc rdy"}; 543 static const char * const p168_smcrdy_grps[] = {"smc rdy"};
544 static const char * const p168_ac97sysclk_grps[] = {"ac97 sysclk"}; 544 static const char * const p168_ac97sysclk_grps[] = {"ac97 sysclk"};
545 static const char * const p168_ac97_grps[] = {"ac97"}; 545 static const char * const p168_ac97_grps[] = {"ac97"};
546 static const char * const p168_cf_grps[] = {"cf"}; 546 static const char * const p168_cf_grps[] = {"cf"};
547 static const char * const p168_kpmkin_grps[] = {"kp mkin 3p1"}; 547 static const char * const p168_kpmkin_grps[] = {"kp mkin 3p1"};
548 static const char * const p168_kpmkout_grps[] = {"kp mkout 2p1"}; 548 static const char * const p168_kpmkout_grps[] = {"kp mkout 2p1"};
549 static const char * const p168_gpio86_grps[] = {"gpio86-1", "gpio86-2"}; 549 static const char * const p168_gpio86_grps[] = {"gpio86-1", "gpio86-2"};
550 static const char * const p168_gpio87_grps[] = {"gpio87-1", "gpio87-2"}; 550 static const char * const p168_gpio87_grps[] = {"gpio87-1", "gpio87-2"};
551 static const char * const p168_gpio88_grps[] = {"gpio88-1", "gpio88-2"}; 551 static const char * const p168_gpio88_grps[] = {"gpio88-1", "gpio88-2"};
552 552
553 static struct pxa3xx_pmx_func pxa168_funcs[] = { 553 static struct pxa3xx_pmx_func pxa168_funcs[] = {
554 {"uart1 rx", ARRAY_AND_SIZE(p168_uart1rx_grps)}, 554 {"uart1 rx", ARRAY_AND_SIZE(p168_uart1rx_grps)},
555 {"uart1 tx", ARRAY_AND_SIZE(p168_uart1tx_grps)}, 555 {"uart1 tx", ARRAY_AND_SIZE(p168_uart1tx_grps)},
556 {"uart3 rx", ARRAY_AND_SIZE(p168_uart3rx_grps)}, 556 {"uart3 rx", ARRAY_AND_SIZE(p168_uart3rx_grps)},
557 {"uart3 tx", ARRAY_AND_SIZE(p168_uart3tx_grps)}, 557 {"uart3 tx", ARRAY_AND_SIZE(p168_uart3tx_grps)},
558 {"ssp1 rx", ARRAY_AND_SIZE(p168_ssp1rx_grps)}, 558 {"ssp1 rx", ARRAY_AND_SIZE(p168_ssp1rx_grps)},
559 {"ssp1 tx", ARRAY_AND_SIZE(p168_ssp1tx_grps)}, 559 {"ssp1 tx", ARRAY_AND_SIZE(p168_ssp1tx_grps)},
560 {"ssp4 rx", ARRAY_AND_SIZE(p168_ssp4rx_grps)}, 560 {"ssp4 rx", ARRAY_AND_SIZE(p168_ssp4rx_grps)},
561 {"ssp4 tx", ARRAY_AND_SIZE(p168_ssp4tx_grps)}, 561 {"ssp4 tx", ARRAY_AND_SIZE(p168_ssp4tx_grps)},
562 {"ssp5 rx", ARRAY_AND_SIZE(p168_ssp5rx_grps)}, 562 {"ssp5 rx", ARRAY_AND_SIZE(p168_ssp5rx_grps)},
563 {"ssp5 tx", ARRAY_AND_SIZE(p168_ssp5tx_grps)}, 563 {"ssp5 tx", ARRAY_AND_SIZE(p168_ssp5tx_grps)},
564 {"i2c", ARRAY_AND_SIZE(p168_i2c_grps)}, 564 {"i2c", ARRAY_AND_SIZE(p168_i2c_grps)},
565 {"pwri2c", ARRAY_AND_SIZE(p168_pwri2c_grps)}, 565 {"pwri2c", ARRAY_AND_SIZE(p168_pwri2c_grps)},
566 {"mmc1", ARRAY_AND_SIZE(p168_mmc1_grps)}, 566 {"mmc1", ARRAY_AND_SIZE(p168_mmc1_grps)},
567 {"mmc2", ARRAY_AND_SIZE(p168_mmc2_data_grps)}, 567 {"mmc2", ARRAY_AND_SIZE(p168_mmc2_data_grps)},
568 {"mmc2 cmd", ARRAY_AND_SIZE(p168_mmc2_cmd_grps)}, 568 {"mmc2 cmd", ARRAY_AND_SIZE(p168_mmc2_cmd_grps)},
569 {"mmc2 clk", ARRAY_AND_SIZE(p168_mmc2_clk_grps)}, 569 {"mmc2 clk", ARRAY_AND_SIZE(p168_mmc2_clk_grps)},
570 {"mmc3", ARRAY_AND_SIZE(p168_mmc3_data_grps)}, 570 {"mmc3", ARRAY_AND_SIZE(p168_mmc3_data_grps)},
571 {"mmc3 cmd", ARRAY_AND_SIZE(p168_mmc3_cmd_grps)}, 571 {"mmc3 cmd", ARRAY_AND_SIZE(p168_mmc3_cmd_grps)},
572 {"mmc3 clk", ARRAY_AND_SIZE(p168_mmc3_clk_grps)}, 572 {"mmc3 clk", ARRAY_AND_SIZE(p168_mmc3_clk_grps)},
573 {"eth", ARRAY_AND_SIZE(p168_eth_grps)}, 573 {"eth", ARRAY_AND_SIZE(p168_eth_grps)},
574 {"eth rx", ARRAY_AND_SIZE(p168_ethrx_grps)}, 574 {"eth rx", ARRAY_AND_SIZE(p168_ethrx_grps)},
575 {"eth tx", ARRAY_AND_SIZE(p168_ethtx_grps)}, 575 {"eth tx", ARRAY_AND_SIZE(p168_ethtx_grps)},
576 {"msp", ARRAY_AND_SIZE(p168_msp_grps)}, 576 {"msp", ARRAY_AND_SIZE(p168_msp_grps)},
577 {"ccic", ARRAY_AND_SIZE(p168_ccic_grps)}, 577 {"ccic", ARRAY_AND_SIZE(p168_ccic_grps)},
578 {"xd", ARRAY_AND_SIZE(p168_xd_grps)}, 578 {"xd", ARRAY_AND_SIZE(p168_xd_grps)},
579 {"lcd", ARRAY_AND_SIZE(p168_lcd_grps)}, 579 {"lcd", ARRAY_AND_SIZE(p168_lcd_grps)},
580 {"dfio", ARRAY_AND_SIZE(p168_dfio_grps)}, 580 {"dfio", ARRAY_AND_SIZE(p168_dfio_grps)},
581 {"nand", ARRAY_AND_SIZE(p168_nand_grps)}, 581 {"nand", ARRAY_AND_SIZE(p168_nand_grps)},
582 {"smc", ARRAY_AND_SIZE(p168_smc_grps)}, 582 {"smc", ARRAY_AND_SIZE(p168_smc_grps)},
583 {"smc cs0", ARRAY_AND_SIZE(p168_smccs0_grps)}, 583 {"smc cs0", ARRAY_AND_SIZE(p168_smccs0_grps)},
584 {"smc cs1", ARRAY_AND_SIZE(p168_smccs1_grps)}, 584 {"smc cs1", ARRAY_AND_SIZE(p168_smccs1_grps)},
585 {"smc rdy", ARRAY_AND_SIZE(p168_smcrdy_grps)}, 585 {"smc rdy", ARRAY_AND_SIZE(p168_smcrdy_grps)},
586 {"ac97", ARRAY_AND_SIZE(p168_ac97_grps)}, 586 {"ac97", ARRAY_AND_SIZE(p168_ac97_grps)},
587 {"ac97 sysclk", ARRAY_AND_SIZE(p168_ac97sysclk_grps)}, 587 {"ac97 sysclk", ARRAY_AND_SIZE(p168_ac97sysclk_grps)},
588 {"cf", ARRAY_AND_SIZE(p168_cf_grps)}, 588 {"cf", ARRAY_AND_SIZE(p168_cf_grps)},
589 {"kpmkin", ARRAY_AND_SIZE(p168_kpmkin_grps)}, 589 {"kpmkin", ARRAY_AND_SIZE(p168_kpmkin_grps)},
590 {"kpmkout", ARRAY_AND_SIZE(p168_kpmkout_grps)}, 590 {"kpmkout", ARRAY_AND_SIZE(p168_kpmkout_grps)},
591 {"gpio86", ARRAY_AND_SIZE(p168_gpio86_grps)}, 591 {"gpio86", ARRAY_AND_SIZE(p168_gpio86_grps)},
592 {"gpio87", ARRAY_AND_SIZE(p168_gpio87_grps)}, 592 {"gpio87", ARRAY_AND_SIZE(p168_gpio87_grps)},
593 {"gpio88", ARRAY_AND_SIZE(p168_gpio88_grps)}, 593 {"gpio88", ARRAY_AND_SIZE(p168_gpio88_grps)},
594 }; 594 };
595 595
596 static struct pinctrl_desc pxa168_pctrl_desc = { 596 static struct pinctrl_desc pxa168_pctrl_desc = {
597 .name = "pxa168-pinctrl", 597 .name = "pxa168-pinctrl",
598 .owner = THIS_MODULE, 598 .owner = THIS_MODULE,
599 }; 599 };
600 600
601 static struct pxa3xx_pinmux_info pxa168_info = { 601 static struct pxa3xx_pinmux_info pxa168_info = {
602 .mfp = pxa168_mfp, 602 .mfp = pxa168_mfp,
603 .num_mfp = ARRAY_SIZE(pxa168_mfp), 603 .num_mfp = ARRAY_SIZE(pxa168_mfp),
604 .grps = pxa168_grps, 604 .grps = pxa168_grps,
605 .num_grps = ARRAY_SIZE(pxa168_grps), 605 .num_grps = ARRAY_SIZE(pxa168_grps),
606 .funcs = pxa168_funcs, 606 .funcs = pxa168_funcs,
607 .num_funcs = ARRAY_SIZE(pxa168_funcs), 607 .num_funcs = ARRAY_SIZE(pxa168_funcs),
608 .num_gpio = 128, 608 .num_gpio = 128,
609 .desc = &pxa168_pctrl_desc, 609 .desc = &pxa168_pctrl_desc,
610 .pads = pxa168_pads, 610 .pads = pxa168_pads,
611 .num_pads = ARRAY_SIZE(pxa168_pads), 611 .num_pads = ARRAY_SIZE(pxa168_pads),
612 612
613 .cputype = PINCTRL_PXA168, 613 .cputype = PINCTRL_PXA168,
614 .ds_mask = PXA168_DS_MASK, 614 .ds_mask = PXA168_DS_MASK,
615 .ds_shift = PXA168_DS_SHIFT, 615 .ds_shift = PXA168_DS_SHIFT,
616 }; 616 };
617 617
618 static int __devinit pxa168_pinmux_probe(struct platform_device *pdev) 618 static int __devinit pxa168_pinmux_probe(struct platform_device *pdev)
619 { 619 {
620 return pxa3xx_pinctrl_register(pdev, &pxa168_info); 620 return pxa3xx_pinctrl_register(pdev, &pxa168_info);
621 } 621 }
622 622
623 static int __devexit pxa168_pinmux_remove(struct platform_device *pdev) 623 static int pxa168_pinmux_remove(struct platform_device *pdev)
624 { 624 {
625 return pxa3xx_pinctrl_unregister(pdev); 625 return pxa3xx_pinctrl_unregister(pdev);
626 } 626 }
627 627
628 static struct platform_driver pxa168_pinmux_driver = { 628 static struct platform_driver pxa168_pinmux_driver = {
629 .driver = { 629 .driver = {
630 .name = "pxa168-pinmux", 630 .name = "pxa168-pinmux",
631 .owner = THIS_MODULE, 631 .owner = THIS_MODULE,
632 }, 632 },
633 .probe = pxa168_pinmux_probe, 633 .probe = pxa168_pinmux_probe,
634 .remove = pxa168_pinmux_remove, 634 .remove = pxa168_pinmux_remove,
635 }; 635 };
636 636
637 static int __init pxa168_pinmux_init(void) 637 static int __init pxa168_pinmux_init(void)
638 { 638 {
639 return platform_driver_register(&pxa168_pinmux_driver); 639 return platform_driver_register(&pxa168_pinmux_driver);
640 } 640 }
641 core_initcall_sync(pxa168_pinmux_init); 641 core_initcall_sync(pxa168_pinmux_init);
642 642
643 static void __exit pxa168_pinmux_exit(void) 643 static void __exit pxa168_pinmux_exit(void)
644 { 644 {
645 platform_driver_unregister(&pxa168_pinmux_driver); 645 platform_driver_unregister(&pxa168_pinmux_driver);
646 } 646 }
647 module_exit(pxa168_pinmux_exit); 647 module_exit(pxa168_pinmux_exit);
648 648
649 MODULE_AUTHOR("Haojian Zhuang <haojian.zhuang@marvell.com>"); 649 MODULE_AUTHOR("Haojian Zhuang <haojian.zhuang@marvell.com>");
650 MODULE_DESCRIPTION("PXA3xx pin control driver"); 650 MODULE_DESCRIPTION("PXA3xx pin control driver");
651 MODULE_LICENSE("GPL v2"); 651 MODULE_LICENSE("GPL v2");
652 652
drivers/pinctrl/pinctrl-pxa910.c
1 /* 1 /*
2 * linux/drivers/pinctrl/pinmux-pxa910.c 2 * linux/drivers/pinctrl/pinmux-pxa910.c
3 * 3 *
4 * This program is free software; you can redistribute it and/or modify 4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as 5 * it under the terms of the GNU General Public License version 2 as
6 * publishhed by the Free Software Foundation. 6 * publishhed by the Free Software Foundation.
7 * 7 *
8 * Copyright (C) 2011, Marvell Technology Group Ltd. 8 * Copyright (C) 2011, Marvell Technology Group Ltd.
9 * 9 *
10 * Author: Haojian Zhuang <haojian.zhuang@marvell.com> 10 * Author: Haojian Zhuang <haojian.zhuang@marvell.com>
11 * 11 *
12 */ 12 */
13 13
14 #include <linux/device.h> 14 #include <linux/device.h>
15 #include <linux/module.h> 15 #include <linux/module.h>
16 #include <linux/io.h> 16 #include <linux/io.h>
17 #include <linux/platform_device.h> 17 #include <linux/platform_device.h>
18 #include "pinctrl-pxa3xx.h" 18 #include "pinctrl-pxa3xx.h"
19 19
20 #define PXA910_DS_MASK 0x1800 20 #define PXA910_DS_MASK 0x1800
21 #define PXA910_DS_SHIFT 11 21 #define PXA910_DS_SHIFT 11
22 #define PXA910_SLEEP_MASK 0x38 22 #define PXA910_SLEEP_MASK 0x38
23 #define PXA910_SLEEP_SELECT (1 << 9) 23 #define PXA910_SLEEP_SELECT (1 << 9)
24 #define PXA910_SLEEP_DATA (1 << 8) 24 #define PXA910_SLEEP_DATA (1 << 8)
25 #define PXA910_SLEEP_DIR (1 << 7) 25 #define PXA910_SLEEP_DIR (1 << 7)
26 26
27 #define MFPR_910(a, r, f0, f1, f2, f3, f4, f5, f6, f7) \ 27 #define MFPR_910(a, r, f0, f1, f2, f3, f4, f5, f6, f7) \
28 { \ 28 { \
29 .name = #a, \ 29 .name = #a, \
30 .pin = a, \ 30 .pin = a, \
31 .mfpr = r, \ 31 .mfpr = r, \
32 .func = { \ 32 .func = { \
33 PXA910_MUX_##f0, \ 33 PXA910_MUX_##f0, \
34 PXA910_MUX_##f1, \ 34 PXA910_MUX_##f1, \
35 PXA910_MUX_##f2, \ 35 PXA910_MUX_##f2, \
36 PXA910_MUX_##f3, \ 36 PXA910_MUX_##f3, \
37 PXA910_MUX_##f4, \ 37 PXA910_MUX_##f4, \
38 PXA910_MUX_##f5, \ 38 PXA910_MUX_##f5, \
39 PXA910_MUX_##f6, \ 39 PXA910_MUX_##f6, \
40 PXA910_MUX_##f7, \ 40 PXA910_MUX_##f7, \
41 }, \ 41 }, \
42 } 42 }
43 43
44 #define GRP_910(a, m, p) \ 44 #define GRP_910(a, m, p) \
45 { .name = a, .mux = PXA910_MUX_##m, .pins = p, .npins = ARRAY_SIZE(p), } 45 { .name = a, .mux = PXA910_MUX_##m, .pins = p, .npins = ARRAY_SIZE(p), }
46 46
47 /* 170 pins */ 47 /* 170 pins */
48 enum pxa910_pin_list { 48 enum pxa910_pin_list {
49 /* 0~127: GPIO0~GPIO127 */ 49 /* 0~127: GPIO0~GPIO127 */
50 ND_IO15 = 128, 50 ND_IO15 = 128,
51 ND_IO14, 51 ND_IO14,
52 ND_IO13, /* 130 */ 52 ND_IO13, /* 130 */
53 ND_IO12, 53 ND_IO12,
54 ND_IO11, 54 ND_IO11,
55 ND_IO10, 55 ND_IO10,
56 ND_IO9, 56 ND_IO9,
57 ND_IO8, 57 ND_IO8,
58 ND_IO7, 58 ND_IO7,
59 ND_IO6, 59 ND_IO6,
60 ND_IO5, 60 ND_IO5,
61 ND_IO4, 61 ND_IO4,
62 ND_IO3, /* 140 */ 62 ND_IO3, /* 140 */
63 ND_IO2, 63 ND_IO2,
64 ND_IO1, 64 ND_IO1,
65 ND_IO0, 65 ND_IO0,
66 ND_NCS0, 66 ND_NCS0,
67 ND_NCS1, 67 ND_NCS1,
68 SM_NCS0, 68 SM_NCS0,
69 SM_NCS1, 69 SM_NCS1,
70 ND_NWE, 70 ND_NWE,
71 ND_NRE, 71 ND_NRE,
72 ND_CLE, /* 150 */ 72 ND_CLE, /* 150 */
73 ND_ALE, 73 ND_ALE,
74 SM_SCLK, 74 SM_SCLK,
75 ND_RDY0, 75 ND_RDY0,
76 SM_ADV, 76 SM_ADV,
77 ND_RDY1, 77 ND_RDY1,
78 SM_ADVMUX, 78 SM_ADVMUX,
79 SM_RDY, 79 SM_RDY,
80 MMC1_DAT7, 80 MMC1_DAT7,
81 MMC1_DAT6, 81 MMC1_DAT6,
82 MMC1_DAT5, /* 160 */ 82 MMC1_DAT5, /* 160 */
83 MMC1_DAT4, 83 MMC1_DAT4,
84 MMC1_DAT3, 84 MMC1_DAT3,
85 MMC1_DAT2, 85 MMC1_DAT2,
86 MMC1_DAT1, 86 MMC1_DAT1,
87 MMC1_DAT0, 87 MMC1_DAT0,
88 MMC1_CMD, 88 MMC1_CMD,
89 MMC1_CLK, 89 MMC1_CLK,
90 MMC1_CD, 90 MMC1_CD,
91 VCXO_OUT, 91 VCXO_OUT,
92 }; 92 };
93 93
94 enum pxa910_mux { 94 enum pxa910_mux {
95 /* PXA3xx_MUX_GPIO = 0 (predefined in pinctrl-pxa3xx.h) */ 95 /* PXA3xx_MUX_GPIO = 0 (predefined in pinctrl-pxa3xx.h) */
96 PXA910_MUX_GPIO = 0, 96 PXA910_MUX_GPIO = 0,
97 PXA910_MUX_NAND, 97 PXA910_MUX_NAND,
98 PXA910_MUX_USIM2, 98 PXA910_MUX_USIM2,
99 PXA910_MUX_EXT_DMA, 99 PXA910_MUX_EXT_DMA,
100 PXA910_MUX_EXT_INT, 100 PXA910_MUX_EXT_INT,
101 PXA910_MUX_MMC1, 101 PXA910_MUX_MMC1,
102 PXA910_MUX_MMC2, 102 PXA910_MUX_MMC2,
103 PXA910_MUX_MMC3, 103 PXA910_MUX_MMC3,
104 PXA910_MUX_SM_INT, 104 PXA910_MUX_SM_INT,
105 PXA910_MUX_PRI_JTAG, 105 PXA910_MUX_PRI_JTAG,
106 PXA910_MUX_SEC1_JTAG, 106 PXA910_MUX_SEC1_JTAG,
107 PXA910_MUX_SEC2_JTAG, 107 PXA910_MUX_SEC2_JTAG,
108 PXA910_MUX_RESET, /* SLAVE RESET OUT */ 108 PXA910_MUX_RESET, /* SLAVE RESET OUT */
109 PXA910_MUX_CLK_REQ, 109 PXA910_MUX_CLK_REQ,
110 PXA910_MUX_VCXO_REQ, 110 PXA910_MUX_VCXO_REQ,
111 PXA910_MUX_VCXO_OUT, 111 PXA910_MUX_VCXO_OUT,
112 PXA910_MUX_VCXO_REQ2, 112 PXA910_MUX_VCXO_REQ2,
113 PXA910_MUX_VCXO_OUT2, 113 PXA910_MUX_VCXO_OUT2,
114 PXA910_MUX_SPI, 114 PXA910_MUX_SPI,
115 PXA910_MUX_SPI2, 115 PXA910_MUX_SPI2,
116 PXA910_MUX_GSSP, 116 PXA910_MUX_GSSP,
117 PXA910_MUX_SSP0, 117 PXA910_MUX_SSP0,
118 PXA910_MUX_SSP1, 118 PXA910_MUX_SSP1,
119 PXA910_MUX_SSP2, 119 PXA910_MUX_SSP2,
120 PXA910_MUX_DSSP2, 120 PXA910_MUX_DSSP2,
121 PXA910_MUX_DSSP3, 121 PXA910_MUX_DSSP3,
122 PXA910_MUX_UART0, 122 PXA910_MUX_UART0,
123 PXA910_MUX_UART1, 123 PXA910_MUX_UART1,
124 PXA910_MUX_UART2, 124 PXA910_MUX_UART2,
125 PXA910_MUX_TWSI, 125 PXA910_MUX_TWSI,
126 PXA910_MUX_CCIC, 126 PXA910_MUX_CCIC,
127 PXA910_MUX_PWM0, 127 PXA910_MUX_PWM0,
128 PXA910_MUX_PWM1, 128 PXA910_MUX_PWM1,
129 PXA910_MUX_PWM2, 129 PXA910_MUX_PWM2,
130 PXA910_MUX_PWM3, 130 PXA910_MUX_PWM3,
131 PXA910_MUX_HSL, 131 PXA910_MUX_HSL,
132 PXA910_MUX_ONE_WIRE, 132 PXA910_MUX_ONE_WIRE,
133 PXA910_MUX_LCD, 133 PXA910_MUX_LCD,
134 PXA910_MUX_DAC_ST23, 134 PXA910_MUX_DAC_ST23,
135 PXA910_MUX_ULPI, 135 PXA910_MUX_ULPI,
136 PXA910_MUX_TB, 136 PXA910_MUX_TB,
137 PXA910_MUX_KP_MK, 137 PXA910_MUX_KP_MK,
138 PXA910_MUX_KP_DK, 138 PXA910_MUX_KP_DK,
139 PXA910_MUX_TCU_GPOA, 139 PXA910_MUX_TCU_GPOA,
140 PXA910_MUX_TCU_GPOB, 140 PXA910_MUX_TCU_GPOB,
141 PXA910_MUX_ROT, 141 PXA910_MUX_ROT,
142 PXA910_MUX_TDS, 142 PXA910_MUX_TDS,
143 PXA910_MUX_32K_CLK, /* 32KHz CLK OUT */ 143 PXA910_MUX_32K_CLK, /* 32KHz CLK OUT */
144 PXA910_MUX_MN_CLK, /* MN CLK OUT */ 144 PXA910_MUX_MN_CLK, /* MN CLK OUT */
145 PXA910_MUX_SMC, 145 PXA910_MUX_SMC,
146 PXA910_MUX_SM_ADDR18, 146 PXA910_MUX_SM_ADDR18,
147 PXA910_MUX_SM_ADDR19, 147 PXA910_MUX_SM_ADDR19,
148 PXA910_MUX_SM_ADDR20, 148 PXA910_MUX_SM_ADDR20,
149 PXA910_MUX_NONE = 0xffff, 149 PXA910_MUX_NONE = 0xffff,
150 }; 150 };
151 151
152 152
153 static struct pinctrl_pin_desc pxa910_pads[] = { 153 static struct pinctrl_pin_desc pxa910_pads[] = {
154 PINCTRL_PIN(GPIO0, "GPIO0"), 154 PINCTRL_PIN(GPIO0, "GPIO0"),
155 PINCTRL_PIN(GPIO1, "GPIO1"), 155 PINCTRL_PIN(GPIO1, "GPIO1"),
156 PINCTRL_PIN(GPIO2, "GPIO2"), 156 PINCTRL_PIN(GPIO2, "GPIO2"),
157 PINCTRL_PIN(GPIO3, "GPIO3"), 157 PINCTRL_PIN(GPIO3, "GPIO3"),
158 PINCTRL_PIN(GPIO4, "GPIO4"), 158 PINCTRL_PIN(GPIO4, "GPIO4"),
159 PINCTRL_PIN(GPIO5, "GPIO5"), 159 PINCTRL_PIN(GPIO5, "GPIO5"),
160 PINCTRL_PIN(GPIO6, "GPIO6"), 160 PINCTRL_PIN(GPIO6, "GPIO6"),
161 PINCTRL_PIN(GPIO7, "GPIO7"), 161 PINCTRL_PIN(GPIO7, "GPIO7"),
162 PINCTRL_PIN(GPIO8, "GPIO8"), 162 PINCTRL_PIN(GPIO8, "GPIO8"),
163 PINCTRL_PIN(GPIO9, "GPIO9"), 163 PINCTRL_PIN(GPIO9, "GPIO9"),
164 PINCTRL_PIN(GPIO10, "GPIO10"), 164 PINCTRL_PIN(GPIO10, "GPIO10"),
165 PINCTRL_PIN(GPIO11, "GPIO11"), 165 PINCTRL_PIN(GPIO11, "GPIO11"),
166 PINCTRL_PIN(GPIO12, "GPIO12"), 166 PINCTRL_PIN(GPIO12, "GPIO12"),
167 PINCTRL_PIN(GPIO13, "GPIO13"), 167 PINCTRL_PIN(GPIO13, "GPIO13"),
168 PINCTRL_PIN(GPIO14, "GPIO14"), 168 PINCTRL_PIN(GPIO14, "GPIO14"),
169 PINCTRL_PIN(GPIO15, "GPIO15"), 169 PINCTRL_PIN(GPIO15, "GPIO15"),
170 PINCTRL_PIN(GPIO16, "GPIO16"), 170 PINCTRL_PIN(GPIO16, "GPIO16"),
171 PINCTRL_PIN(GPIO17, "GPIO17"), 171 PINCTRL_PIN(GPIO17, "GPIO17"),
172 PINCTRL_PIN(GPIO18, "GPIO18"), 172 PINCTRL_PIN(GPIO18, "GPIO18"),
173 PINCTRL_PIN(GPIO19, "GPIO19"), 173 PINCTRL_PIN(GPIO19, "GPIO19"),
174 PINCTRL_PIN(GPIO20, "GPIO20"), 174 PINCTRL_PIN(GPIO20, "GPIO20"),
175 PINCTRL_PIN(GPIO21, "GPIO21"), 175 PINCTRL_PIN(GPIO21, "GPIO21"),
176 PINCTRL_PIN(GPIO22, "GPIO22"), 176 PINCTRL_PIN(GPIO22, "GPIO22"),
177 PINCTRL_PIN(GPIO23, "GPIO23"), 177 PINCTRL_PIN(GPIO23, "GPIO23"),
178 PINCTRL_PIN(GPIO24, "GPIO24"), 178 PINCTRL_PIN(GPIO24, "GPIO24"),
179 PINCTRL_PIN(GPIO25, "GPIO25"), 179 PINCTRL_PIN(GPIO25, "GPIO25"),
180 PINCTRL_PIN(GPIO26, "GPIO26"), 180 PINCTRL_PIN(GPIO26, "GPIO26"),
181 PINCTRL_PIN(GPIO27, "GPIO27"), 181 PINCTRL_PIN(GPIO27, "GPIO27"),
182 PINCTRL_PIN(GPIO28, "GPIO28"), 182 PINCTRL_PIN(GPIO28, "GPIO28"),
183 PINCTRL_PIN(GPIO29, "GPIO29"), 183 PINCTRL_PIN(GPIO29, "GPIO29"),
184 PINCTRL_PIN(GPIO30, "GPIO30"), 184 PINCTRL_PIN(GPIO30, "GPIO30"),
185 PINCTRL_PIN(GPIO31, "GPIO31"), 185 PINCTRL_PIN(GPIO31, "GPIO31"),
186 PINCTRL_PIN(GPIO32, "GPIO32"), 186 PINCTRL_PIN(GPIO32, "GPIO32"),
187 PINCTRL_PIN(GPIO33, "GPIO33"), 187 PINCTRL_PIN(GPIO33, "GPIO33"),
188 PINCTRL_PIN(GPIO34, "GPIO34"), 188 PINCTRL_PIN(GPIO34, "GPIO34"),
189 PINCTRL_PIN(GPIO35, "GPIO35"), 189 PINCTRL_PIN(GPIO35, "GPIO35"),
190 PINCTRL_PIN(GPIO36, "GPIO36"), 190 PINCTRL_PIN(GPIO36, "GPIO36"),
191 PINCTRL_PIN(GPIO37, "GPIO37"), 191 PINCTRL_PIN(GPIO37, "GPIO37"),
192 PINCTRL_PIN(GPIO38, "GPIO38"), 192 PINCTRL_PIN(GPIO38, "GPIO38"),
193 PINCTRL_PIN(GPIO39, "GPIO39"), 193 PINCTRL_PIN(GPIO39, "GPIO39"),
194 PINCTRL_PIN(GPIO40, "GPIO40"), 194 PINCTRL_PIN(GPIO40, "GPIO40"),
195 PINCTRL_PIN(GPIO41, "GPIO41"), 195 PINCTRL_PIN(GPIO41, "GPIO41"),
196 PINCTRL_PIN(GPIO42, "GPIO42"), 196 PINCTRL_PIN(GPIO42, "GPIO42"),
197 PINCTRL_PIN(GPIO43, "GPIO43"), 197 PINCTRL_PIN(GPIO43, "GPIO43"),
198 PINCTRL_PIN(GPIO44, "GPIO44"), 198 PINCTRL_PIN(GPIO44, "GPIO44"),
199 PINCTRL_PIN(GPIO45, "GPIO45"), 199 PINCTRL_PIN(GPIO45, "GPIO45"),
200 PINCTRL_PIN(GPIO46, "GPIO46"), 200 PINCTRL_PIN(GPIO46, "GPIO46"),
201 PINCTRL_PIN(GPIO47, "GPIO47"), 201 PINCTRL_PIN(GPIO47, "GPIO47"),
202 PINCTRL_PIN(GPIO48, "GPIO48"), 202 PINCTRL_PIN(GPIO48, "GPIO48"),
203 PINCTRL_PIN(GPIO49, "GPIO49"), 203 PINCTRL_PIN(GPIO49, "GPIO49"),
204 PINCTRL_PIN(GPIO50, "GPIO50"), 204 PINCTRL_PIN(GPIO50, "GPIO50"),
205 PINCTRL_PIN(GPIO51, "GPIO51"), 205 PINCTRL_PIN(GPIO51, "GPIO51"),
206 PINCTRL_PIN(GPIO52, "GPIO52"), 206 PINCTRL_PIN(GPIO52, "GPIO52"),
207 PINCTRL_PIN(GPIO53, "GPIO53"), 207 PINCTRL_PIN(GPIO53, "GPIO53"),
208 PINCTRL_PIN(GPIO54, "GPIO54"), 208 PINCTRL_PIN(GPIO54, "GPIO54"),
209 PINCTRL_PIN(GPIO55, "GPIO55"), 209 PINCTRL_PIN(GPIO55, "GPIO55"),
210 PINCTRL_PIN(GPIO56, "GPIO56"), 210 PINCTRL_PIN(GPIO56, "GPIO56"),
211 PINCTRL_PIN(GPIO57, "GPIO57"), 211 PINCTRL_PIN(GPIO57, "GPIO57"),
212 PINCTRL_PIN(GPIO58, "GPIO58"), 212 PINCTRL_PIN(GPIO58, "GPIO58"),
213 PINCTRL_PIN(GPIO59, "GPIO59"), 213 PINCTRL_PIN(GPIO59, "GPIO59"),
214 PINCTRL_PIN(GPIO60, "GPIO60"), 214 PINCTRL_PIN(GPIO60, "GPIO60"),
215 PINCTRL_PIN(GPIO61, "GPIO61"), 215 PINCTRL_PIN(GPIO61, "GPIO61"),
216 PINCTRL_PIN(GPIO62, "GPIO62"), 216 PINCTRL_PIN(GPIO62, "GPIO62"),
217 PINCTRL_PIN(GPIO63, "GPIO63"), 217 PINCTRL_PIN(GPIO63, "GPIO63"),
218 PINCTRL_PIN(GPIO64, "GPIO64"), 218 PINCTRL_PIN(GPIO64, "GPIO64"),
219 PINCTRL_PIN(GPIO65, "GPIO65"), 219 PINCTRL_PIN(GPIO65, "GPIO65"),
220 PINCTRL_PIN(GPIO66, "GPIO66"), 220 PINCTRL_PIN(GPIO66, "GPIO66"),
221 PINCTRL_PIN(GPIO67, "GPIO67"), 221 PINCTRL_PIN(GPIO67, "GPIO67"),
222 PINCTRL_PIN(GPIO68, "GPIO68"), 222 PINCTRL_PIN(GPIO68, "GPIO68"),
223 PINCTRL_PIN(GPIO69, "GPIO69"), 223 PINCTRL_PIN(GPIO69, "GPIO69"),
224 PINCTRL_PIN(GPIO70, "GPIO70"), 224 PINCTRL_PIN(GPIO70, "GPIO70"),
225 PINCTRL_PIN(GPIO71, "GPIO71"), 225 PINCTRL_PIN(GPIO71, "GPIO71"),
226 PINCTRL_PIN(GPIO72, "GPIO72"), 226 PINCTRL_PIN(GPIO72, "GPIO72"),
227 PINCTRL_PIN(GPIO73, "GPIO73"), 227 PINCTRL_PIN(GPIO73, "GPIO73"),
228 PINCTRL_PIN(GPIO74, "GPIO74"), 228 PINCTRL_PIN(GPIO74, "GPIO74"),
229 PINCTRL_PIN(GPIO75, "GPIO75"), 229 PINCTRL_PIN(GPIO75, "GPIO75"),
230 PINCTRL_PIN(GPIO76, "GPIO76"), 230 PINCTRL_PIN(GPIO76, "GPIO76"),
231 PINCTRL_PIN(GPIO77, "GPIO77"), 231 PINCTRL_PIN(GPIO77, "GPIO77"),
232 PINCTRL_PIN(GPIO78, "GPIO78"), 232 PINCTRL_PIN(GPIO78, "GPIO78"),
233 PINCTRL_PIN(GPIO79, "GPIO79"), 233 PINCTRL_PIN(GPIO79, "GPIO79"),
234 PINCTRL_PIN(GPIO80, "GPIO80"), 234 PINCTRL_PIN(GPIO80, "GPIO80"),
235 PINCTRL_PIN(GPIO81, "GPIO81"), 235 PINCTRL_PIN(GPIO81, "GPIO81"),
236 PINCTRL_PIN(GPIO82, "GPIO82"), 236 PINCTRL_PIN(GPIO82, "GPIO82"),
237 PINCTRL_PIN(GPIO83, "GPIO83"), 237 PINCTRL_PIN(GPIO83, "GPIO83"),
238 PINCTRL_PIN(GPIO84, "GPIO84"), 238 PINCTRL_PIN(GPIO84, "GPIO84"),
239 PINCTRL_PIN(GPIO85, "GPIO85"), 239 PINCTRL_PIN(GPIO85, "GPIO85"),
240 PINCTRL_PIN(GPIO86, "GPIO86"), 240 PINCTRL_PIN(GPIO86, "GPIO86"),
241 PINCTRL_PIN(GPIO87, "GPIO87"), 241 PINCTRL_PIN(GPIO87, "GPIO87"),
242 PINCTRL_PIN(GPIO88, "GPIO88"), 242 PINCTRL_PIN(GPIO88, "GPIO88"),
243 PINCTRL_PIN(GPIO89, "GPIO89"), 243 PINCTRL_PIN(GPIO89, "GPIO89"),
244 PINCTRL_PIN(GPIO90, "GPIO90"), 244 PINCTRL_PIN(GPIO90, "GPIO90"),
245 PINCTRL_PIN(GPIO91, "GPIO91"), 245 PINCTRL_PIN(GPIO91, "GPIO91"),
246 PINCTRL_PIN(GPIO92, "GPIO92"), 246 PINCTRL_PIN(GPIO92, "GPIO92"),
247 PINCTRL_PIN(GPIO93, "GPIO93"), 247 PINCTRL_PIN(GPIO93, "GPIO93"),
248 PINCTRL_PIN(GPIO94, "GPIO94"), 248 PINCTRL_PIN(GPIO94, "GPIO94"),
249 PINCTRL_PIN(GPIO95, "GPIO95"), 249 PINCTRL_PIN(GPIO95, "GPIO95"),
250 PINCTRL_PIN(GPIO96, "GPIO96"), 250 PINCTRL_PIN(GPIO96, "GPIO96"),
251 PINCTRL_PIN(GPIO97, "GPIO97"), 251 PINCTRL_PIN(GPIO97, "GPIO97"),
252 PINCTRL_PIN(GPIO98, "GPIO98"), 252 PINCTRL_PIN(GPIO98, "GPIO98"),
253 PINCTRL_PIN(GPIO99, "GPIO99"), 253 PINCTRL_PIN(GPIO99, "GPIO99"),
254 PINCTRL_PIN(GPIO100, "GPIO100"), 254 PINCTRL_PIN(GPIO100, "GPIO100"),
255 PINCTRL_PIN(GPIO101, "GPIO101"), 255 PINCTRL_PIN(GPIO101, "GPIO101"),
256 PINCTRL_PIN(GPIO102, "GPIO102"), 256 PINCTRL_PIN(GPIO102, "GPIO102"),
257 PINCTRL_PIN(GPIO103, "GPIO103"), 257 PINCTRL_PIN(GPIO103, "GPIO103"),
258 PINCTRL_PIN(GPIO104, "GPIO104"), 258 PINCTRL_PIN(GPIO104, "GPIO104"),
259 PINCTRL_PIN(GPIO105, "GPIO105"), 259 PINCTRL_PIN(GPIO105, "GPIO105"),
260 PINCTRL_PIN(GPIO106, "GPIO106"), 260 PINCTRL_PIN(GPIO106, "GPIO106"),
261 PINCTRL_PIN(GPIO107, "GPIO107"), 261 PINCTRL_PIN(GPIO107, "GPIO107"),
262 PINCTRL_PIN(GPIO108, "GPIO108"), 262 PINCTRL_PIN(GPIO108, "GPIO108"),
263 PINCTRL_PIN(GPIO109, "GPIO109"), 263 PINCTRL_PIN(GPIO109, "GPIO109"),
264 PINCTRL_PIN(GPIO110, "GPIO110"), 264 PINCTRL_PIN(GPIO110, "GPIO110"),
265 PINCTRL_PIN(GPIO111, "GPIO111"), 265 PINCTRL_PIN(GPIO111, "GPIO111"),
266 PINCTRL_PIN(GPIO112, "GPIO112"), 266 PINCTRL_PIN(GPIO112, "GPIO112"),
267 PINCTRL_PIN(GPIO113, "GPIO113"), 267 PINCTRL_PIN(GPIO113, "GPIO113"),
268 PINCTRL_PIN(GPIO114, "GPIO114"), 268 PINCTRL_PIN(GPIO114, "GPIO114"),
269 PINCTRL_PIN(GPIO115, "GPIO115"), 269 PINCTRL_PIN(GPIO115, "GPIO115"),
270 PINCTRL_PIN(GPIO116, "GPIO116"), 270 PINCTRL_PIN(GPIO116, "GPIO116"),
271 PINCTRL_PIN(GPIO117, "GPIO117"), 271 PINCTRL_PIN(GPIO117, "GPIO117"),
272 PINCTRL_PIN(GPIO118, "GPIO118"), 272 PINCTRL_PIN(GPIO118, "GPIO118"),
273 PINCTRL_PIN(GPIO119, "GPIO119"), 273 PINCTRL_PIN(GPIO119, "GPIO119"),
274 PINCTRL_PIN(GPIO120, "GPIO120"), 274 PINCTRL_PIN(GPIO120, "GPIO120"),
275 PINCTRL_PIN(GPIO121, "GPIO121"), 275 PINCTRL_PIN(GPIO121, "GPIO121"),
276 PINCTRL_PIN(GPIO122, "GPIO122"), 276 PINCTRL_PIN(GPIO122, "GPIO122"),
277 PINCTRL_PIN(GPIO123, "GPIO123"), 277 PINCTRL_PIN(GPIO123, "GPIO123"),
278 PINCTRL_PIN(GPIO124, "GPIO124"), 278 PINCTRL_PIN(GPIO124, "GPIO124"),
279 PINCTRL_PIN(GPIO125, "GPIO125"), 279 PINCTRL_PIN(GPIO125, "GPIO125"),
280 PINCTRL_PIN(GPIO126, "GPIO126"), 280 PINCTRL_PIN(GPIO126, "GPIO126"),
281 PINCTRL_PIN(GPIO127, "GPIO127"), 281 PINCTRL_PIN(GPIO127, "GPIO127"),
282 PINCTRL_PIN(ND_IO15, "ND_IO15"), 282 PINCTRL_PIN(ND_IO15, "ND_IO15"),
283 PINCTRL_PIN(ND_IO14, "ND_IO14"), 283 PINCTRL_PIN(ND_IO14, "ND_IO14"),
284 PINCTRL_PIN(ND_IO13, "ND_IO13"), 284 PINCTRL_PIN(ND_IO13, "ND_IO13"),
285 PINCTRL_PIN(ND_IO12, "ND_IO12"), 285 PINCTRL_PIN(ND_IO12, "ND_IO12"),
286 PINCTRL_PIN(ND_IO11, "ND_IO11"), 286 PINCTRL_PIN(ND_IO11, "ND_IO11"),
287 PINCTRL_PIN(ND_IO10, "ND_IO10"), 287 PINCTRL_PIN(ND_IO10, "ND_IO10"),
288 PINCTRL_PIN(ND_IO9, "ND_IO9"), 288 PINCTRL_PIN(ND_IO9, "ND_IO9"),
289 PINCTRL_PIN(ND_IO8, "ND_IO8"), 289 PINCTRL_PIN(ND_IO8, "ND_IO8"),
290 PINCTRL_PIN(ND_IO7, "ND_IO7"), 290 PINCTRL_PIN(ND_IO7, "ND_IO7"),
291 PINCTRL_PIN(ND_IO6, "ND_IO6"), 291 PINCTRL_PIN(ND_IO6, "ND_IO6"),
292 PINCTRL_PIN(ND_IO5, "ND_IO5"), 292 PINCTRL_PIN(ND_IO5, "ND_IO5"),
293 PINCTRL_PIN(ND_IO4, "ND_IO4"), 293 PINCTRL_PIN(ND_IO4, "ND_IO4"),
294 PINCTRL_PIN(ND_IO3, "ND_IO3"), 294 PINCTRL_PIN(ND_IO3, "ND_IO3"),
295 PINCTRL_PIN(ND_IO2, "ND_IO2"), 295 PINCTRL_PIN(ND_IO2, "ND_IO2"),
296 PINCTRL_PIN(ND_IO1, "ND_IO1"), 296 PINCTRL_PIN(ND_IO1, "ND_IO1"),
297 PINCTRL_PIN(ND_IO0, "ND_IO0"), 297 PINCTRL_PIN(ND_IO0, "ND_IO0"),
298 PINCTRL_PIN(ND_NCS0, "ND_NCS0_SM_NCS2"), 298 PINCTRL_PIN(ND_NCS0, "ND_NCS0_SM_NCS2"),
299 PINCTRL_PIN(ND_NCS1, "ND_NCS1_SM_NCS3"), 299 PINCTRL_PIN(ND_NCS1, "ND_NCS1_SM_NCS3"),
300 PINCTRL_PIN(SM_NCS0, "SM_NCS0"), 300 PINCTRL_PIN(SM_NCS0, "SM_NCS0"),
301 PINCTRL_PIN(SM_NCS1, "SM_NCS1"), 301 PINCTRL_PIN(SM_NCS1, "SM_NCS1"),
302 PINCTRL_PIN(ND_NWE, "ND_NWE"), 302 PINCTRL_PIN(ND_NWE, "ND_NWE"),
303 PINCTRL_PIN(ND_NRE, "ND_NRE"), 303 PINCTRL_PIN(ND_NRE, "ND_NRE"),
304 PINCTRL_PIN(ND_CLE, "ND_CLE_SM_NOE"), 304 PINCTRL_PIN(ND_CLE, "ND_CLE_SM_NOE"),
305 PINCTRL_PIN(ND_ALE, "ND_ALE_SM_NWE"), 305 PINCTRL_PIN(ND_ALE, "ND_ALE_SM_NWE"),
306 PINCTRL_PIN(SM_SCLK, "SM_SCLK"), 306 PINCTRL_PIN(SM_SCLK, "SM_SCLK"),
307 PINCTRL_PIN(ND_RDY0, "ND_RDY0"), 307 PINCTRL_PIN(ND_RDY0, "ND_RDY0"),
308 PINCTRL_PIN(SM_ADV, "SM_ADV"), 308 PINCTRL_PIN(SM_ADV, "SM_ADV"),
309 PINCTRL_PIN(ND_RDY1, "ND_RDY1"), 309 PINCTRL_PIN(ND_RDY1, "ND_RDY1"),
310 PINCTRL_PIN(SM_RDY, "SM_RDY"), 310 PINCTRL_PIN(SM_RDY, "SM_RDY"),
311 PINCTRL_PIN(MMC1_DAT7, "MMC1_DAT7"), 311 PINCTRL_PIN(MMC1_DAT7, "MMC1_DAT7"),
312 PINCTRL_PIN(MMC1_DAT6, "MMC1_DAT6"), 312 PINCTRL_PIN(MMC1_DAT6, "MMC1_DAT6"),
313 PINCTRL_PIN(MMC1_DAT5, "MMC1_DAT5"), 313 PINCTRL_PIN(MMC1_DAT5, "MMC1_DAT5"),
314 PINCTRL_PIN(MMC1_DAT4, "MMC1_DAT4"), 314 PINCTRL_PIN(MMC1_DAT4, "MMC1_DAT4"),
315 PINCTRL_PIN(MMC1_DAT3, "MMC1_DAT3"), 315 PINCTRL_PIN(MMC1_DAT3, "MMC1_DAT3"),
316 PINCTRL_PIN(MMC1_DAT2, "MMC1_DAT2"), 316 PINCTRL_PIN(MMC1_DAT2, "MMC1_DAT2"),
317 PINCTRL_PIN(MMC1_DAT1, "MMC1_DAT1"), 317 PINCTRL_PIN(MMC1_DAT1, "MMC1_DAT1"),
318 PINCTRL_PIN(MMC1_DAT0, "MMC1_DAT0"), 318 PINCTRL_PIN(MMC1_DAT0, "MMC1_DAT0"),
319 PINCTRL_PIN(MMC1_CMD, "MMC1 CMD"), 319 PINCTRL_PIN(MMC1_CMD, "MMC1 CMD"),
320 PINCTRL_PIN(MMC1_CLK, "MMC1 CLK"), 320 PINCTRL_PIN(MMC1_CLK, "MMC1 CLK"),
321 PINCTRL_PIN(MMC1_CD, "MMC1 CD"), 321 PINCTRL_PIN(MMC1_CD, "MMC1 CD"),
322 PINCTRL_PIN(VCXO_OUT, "VCXO_OUT"), 322 PINCTRL_PIN(VCXO_OUT, "VCXO_OUT"),
323 }; 323 };
324 324
325 struct pxa3xx_mfp_pin pxa910_mfp[] = { 325 struct pxa3xx_mfp_pin pxa910_mfp[] = {
326 /* pin offs f0 f1 f2 f3 f4 f5 f6 f7 */ 326 /* pin offs f0 f1 f2 f3 f4 f5 f6 f7 */
327 MFPR_910(GPIO0, 0x0DC, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE), 327 MFPR_910(GPIO0, 0x0DC, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE),
328 MFPR_910(GPIO1, 0x0E0, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE), 328 MFPR_910(GPIO1, 0x0E0, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE),
329 MFPR_910(GPIO2, 0x0E4, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE), 329 MFPR_910(GPIO2, 0x0E4, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE),
330 MFPR_910(GPIO3, 0x0E8, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE), 330 MFPR_910(GPIO3, 0x0E8, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE),
331 MFPR_910(GPIO4, 0x0EC, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE), 331 MFPR_910(GPIO4, 0x0EC, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE),
332 MFPR_910(GPIO5, 0x0F0, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE), 332 MFPR_910(GPIO5, 0x0F0, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE),
333 MFPR_910(GPIO6, 0x0F4, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE), 333 MFPR_910(GPIO6, 0x0F4, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE),
334 MFPR_910(GPIO7, 0x0F8, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE), 334 MFPR_910(GPIO7, 0x0F8, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE),
335 MFPR_910(GPIO8, 0x0FC, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE), 335 MFPR_910(GPIO8, 0x0FC, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE),
336 MFPR_910(GPIO9, 0x100, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE), 336 MFPR_910(GPIO9, 0x100, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE),
337 MFPR_910(GPIO10, 0x104, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE), 337 MFPR_910(GPIO10, 0x104, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE),
338 MFPR_910(GPIO11, 0x108, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE), 338 MFPR_910(GPIO11, 0x108, GPIO, KP_MK, NONE, NONE, NONE, NONE, NONE, NONE),
339 MFPR_910(GPIO12, 0x10C, GPIO, KP_MK, NONE, NONE, KP_DK, NONE, NONE, NONE), 339 MFPR_910(GPIO12, 0x10C, GPIO, KP_MK, NONE, NONE, KP_DK, NONE, NONE, NONE),
340 MFPR_910(GPIO13, 0x110, GPIO, KP_MK, NONE, NONE, KP_DK, NONE, NONE, NONE), 340 MFPR_910(GPIO13, 0x110, GPIO, KP_MK, NONE, NONE, KP_DK, NONE, NONE, NONE),
341 MFPR_910(GPIO14, 0x114, GPIO, KP_MK, NONE, NONE, KP_DK, TB, NONE, NONE), 341 MFPR_910(GPIO14, 0x114, GPIO, KP_MK, NONE, NONE, KP_DK, TB, NONE, NONE),
342 MFPR_910(GPIO15, 0x118, GPIO, KP_MK, NONE, NONE, KP_DK, TB, NONE, NONE), 342 MFPR_910(GPIO15, 0x118, GPIO, KP_MK, NONE, NONE, KP_DK, TB, NONE, NONE),
343 MFPR_910(GPIO16, 0x11C, GPIO, KP_DK, NONE, NONE, NONE, TB, NONE, NONE), 343 MFPR_910(GPIO16, 0x11C, GPIO, KP_DK, NONE, NONE, NONE, TB, NONE, NONE),
344 MFPR_910(GPIO17, 0x120, GPIO, KP_DK, NONE, NONE, NONE, TB, NONE, NONE), 344 MFPR_910(GPIO17, 0x120, GPIO, KP_DK, NONE, NONE, NONE, TB, NONE, NONE),
345 MFPR_910(GPIO18, 0x124, GPIO, KP_DK, NONE, NONE, ROT, NONE, NONE, NONE), 345 MFPR_910(GPIO18, 0x124, GPIO, KP_DK, NONE, NONE, ROT, NONE, NONE, NONE),
346 MFPR_910(GPIO19, 0x128, GPIO, KP_DK, NONE, NONE, ROT, NONE, NONE, NONE), 346 MFPR_910(GPIO19, 0x128, GPIO, KP_DK, NONE, NONE, ROT, NONE, NONE, NONE),
347 MFPR_910(GPIO20, 0x12C, GPIO, SSP1, NONE, NONE, VCXO_OUT, NONE, NONE, NONE), 347 MFPR_910(GPIO20, 0x12C, GPIO, SSP1, NONE, NONE, VCXO_OUT, NONE, NONE, NONE),
348 MFPR_910(GPIO21, 0x130, GPIO, SSP1, NONE, NONE, NONE, NONE, NONE, NONE), 348 MFPR_910(GPIO21, 0x130, GPIO, SSP1, NONE, NONE, NONE, NONE, NONE, NONE),
349 MFPR_910(GPIO22, 0x134, GPIO, SSP1, NONE, NONE, NONE, NONE, NONE, NONE), 349 MFPR_910(GPIO22, 0x134, GPIO, SSP1, NONE, NONE, NONE, NONE, NONE, NONE),
350 MFPR_910(GPIO23, 0x138, GPIO, SSP1, NONE, NONE, NONE, NONE, NONE, NONE), 350 MFPR_910(GPIO23, 0x138, GPIO, SSP1, NONE, NONE, NONE, NONE, NONE, NONE),
351 MFPR_910(GPIO24, 0x13C, GPIO, SSP1, NONE, NONE, NONE, NONE, NONE, NONE), 351 MFPR_910(GPIO24, 0x13C, GPIO, SSP1, NONE, NONE, NONE, NONE, NONE, NONE),
352 MFPR_910(GPIO25, 0x140, GPIO, GSSP, NONE, NONE, NONE, NONE, NONE, NONE), 352 MFPR_910(GPIO25, 0x140, GPIO, GSSP, NONE, NONE, NONE, NONE, NONE, NONE),
353 MFPR_910(GPIO26, 0x144, GPIO, GSSP, NONE, NONE, NONE, NONE, NONE, NONE), 353 MFPR_910(GPIO26, 0x144, GPIO, GSSP, NONE, NONE, NONE, NONE, NONE, NONE),
354 MFPR_910(GPIO27, 0x148, GPIO, GSSP, NONE, NONE, NONE, NONE, NONE, NONE), 354 MFPR_910(GPIO27, 0x148, GPIO, GSSP, NONE, NONE, NONE, NONE, NONE, NONE),
355 MFPR_910(GPIO28, 0x14C, GPIO, GSSP, NONE, NONE, NONE, NONE, NONE, NONE), 355 MFPR_910(GPIO28, 0x14C, GPIO, GSSP, NONE, NONE, NONE, NONE, NONE, NONE),
356 MFPR_910(GPIO29, 0x150, GPIO, UART0, NONE, NONE, UART1, NONE, NONE, NONE), 356 MFPR_910(GPIO29, 0x150, GPIO, UART0, NONE, NONE, UART1, NONE, NONE, NONE),
357 MFPR_910(GPIO30, 0x154, GPIO, UART0, NONE, NONE, UART1, NONE, NONE, NONE), 357 MFPR_910(GPIO30, 0x154, GPIO, UART0, NONE, NONE, UART1, NONE, NONE, NONE),
358 MFPR_910(GPIO31, 0x158, GPIO, UART0, NONE, NONE, UART1, NONE, NONE, NONE), 358 MFPR_910(GPIO31, 0x158, GPIO, UART0, NONE, NONE, UART1, NONE, NONE, NONE),
359 MFPR_910(GPIO32, 0x15C, GPIO, UART0, DAC_ST23, NONE, UART1, NONE, NONE, NONE), 359 MFPR_910(GPIO32, 0x15C, GPIO, UART0, DAC_ST23, NONE, UART1, NONE, NONE, NONE),
360 MFPR_910(GPIO33, 0x160, GPIO, MMC2, SSP0, SSP2, NONE, SPI, NONE, MMC3), 360 MFPR_910(GPIO33, 0x160, GPIO, MMC2, SSP0, SSP2, NONE, SPI, NONE, MMC3),
361 MFPR_910(GPIO34, 0x164, GPIO, MMC2, SSP0, SSP2, NONE, SPI, NONE, MMC3), 361 MFPR_910(GPIO34, 0x164, GPIO, MMC2, SSP0, SSP2, NONE, SPI, NONE, MMC3),
362 MFPR_910(GPIO35, 0x168, GPIO, MMC2, SSP0, SSP2, NONE, SPI, NONE, MMC3), 362 MFPR_910(GPIO35, 0x168, GPIO, MMC2, SSP0, SSP2, NONE, SPI, NONE, MMC3),
363 MFPR_910(GPIO36, 0x16C, GPIO, MMC2, SSP0, SSP2, NONE, SPI, NONE, MMC3), 363 MFPR_910(GPIO36, 0x16C, GPIO, MMC2, SSP0, SSP2, NONE, SPI, NONE, MMC3),
364 MFPR_910(GPIO37, 0x170, GPIO, MMC2, NONE, NONE, NONE, SPI, HSL, NONE), 364 MFPR_910(GPIO37, 0x170, GPIO, MMC2, NONE, NONE, NONE, SPI, HSL, NONE),
365 MFPR_910(GPIO38, 0x174, GPIO, MMC2, NONE, NONE, NONE, NONE, HSL, NONE), 365 MFPR_910(GPIO38, 0x174, GPIO, MMC2, NONE, NONE, NONE, NONE, HSL, NONE),
366 MFPR_910(GPIO39, 0x178, GPIO, MMC2, NONE, NONE, NONE, NONE, HSL, NONE), 366 MFPR_910(GPIO39, 0x178, GPIO, MMC2, NONE, NONE, NONE, NONE, HSL, NONE),
367 MFPR_910(GPIO40, 0x17C, GPIO, MMC2, NONE, NONE, NONE, NONE, HSL, NONE), 367 MFPR_910(GPIO40, 0x17C, GPIO, MMC2, NONE, NONE, NONE, NONE, HSL, NONE),
368 MFPR_910(GPIO41, 0x180, GPIO, MMC2, NONE, NONE, NONE, NONE, HSL, NONE), 368 MFPR_910(GPIO41, 0x180, GPIO, MMC2, NONE, NONE, NONE, NONE, HSL, NONE),
369 MFPR_910(GPIO42, 0x184, GPIO, MMC2, NONE, NONE, NONE, NONE, HSL, NONE), 369 MFPR_910(GPIO42, 0x184, GPIO, MMC2, NONE, NONE, NONE, NONE, HSL, NONE),
370 MFPR_910(GPIO43, 0x188, GPIO, UART1, NONE, DAC_ST23, NONE, DSSP2, SPI, UART2), 370 MFPR_910(GPIO43, 0x188, GPIO, UART1, NONE, DAC_ST23, NONE, DSSP2, SPI, UART2),
371 MFPR_910(GPIO44, 0x18C, GPIO, UART1, NONE, EXT_INT, NONE, DSSP2, SPI, UART2), 371 MFPR_910(GPIO44, 0x18C, GPIO, UART1, NONE, EXT_INT, NONE, DSSP2, SPI, UART2),
372 MFPR_910(GPIO45, 0x190, GPIO, UART1, NONE, EXT_INT, NONE, DSSP2, SPI, UART2), 372 MFPR_910(GPIO45, 0x190, GPIO, UART1, NONE, EXT_INT, NONE, DSSP2, SPI, UART2),
373 MFPR_910(GPIO46, 0x194, GPIO, UART1, NONE, EXT_INT, NONE, DSSP2, SPI, UART2), 373 MFPR_910(GPIO46, 0x194, GPIO, UART1, NONE, EXT_INT, NONE, DSSP2, SPI, UART2),
374 MFPR_910(GPIO47, 0x198, GPIO, SSP0, NONE, NONE, NONE, SSP2, UART1, NONE), 374 MFPR_910(GPIO47, 0x198, GPIO, SSP0, NONE, NONE, NONE, SSP2, UART1, NONE),
375 MFPR_910(GPIO48, 0x19C, GPIO, SSP0, NONE, NONE, NONE, SSP2, UART1, NONE), 375 MFPR_910(GPIO48, 0x19C, GPIO, SSP0, NONE, NONE, NONE, SSP2, UART1, NONE),
376 MFPR_910(GPIO49, 0x1A0, GPIO, SSP0, UART0, VCXO_REQ, NONE, SSP2, NONE, MMC3), 376 MFPR_910(GPIO49, 0x1A0, GPIO, SSP0, UART0, VCXO_REQ, NONE, SSP2, NONE, MMC3),
377 MFPR_910(GPIO50, 0x1A4, GPIO, SSP0, UART0, VCXO_OUT, NONE, SSP2, NONE, MMC3), 377 MFPR_910(GPIO50, 0x1A4, GPIO, SSP0, UART0, VCXO_OUT, NONE, SSP2, NONE, MMC3),
378 MFPR_910(GPIO51, 0x1A8, GPIO, UART2, PWM1, TWSI, SSP0, NONE, DSSP3, NONE), 378 MFPR_910(GPIO51, 0x1A8, GPIO, UART2, PWM1, TWSI, SSP0, NONE, DSSP3, NONE),
379 MFPR_910(GPIO52, 0x1AC, GPIO, UART2, DAC_ST23, TWSI, SSP0, NONE, DSSP3, NONE), 379 MFPR_910(GPIO52, 0x1AC, GPIO, UART2, DAC_ST23, TWSI, SSP0, NONE, DSSP3, NONE),
380 MFPR_910(GPIO53, 0x1B0, GPIO, UART2, TWSI, NONE, SSP0, NONE, DSSP3, NONE), 380 MFPR_910(GPIO53, 0x1B0, GPIO, UART2, TWSI, NONE, SSP0, NONE, DSSP3, NONE),
381 MFPR_910(GPIO54, 0x1B4, GPIO, UART2, TWSI, SSP0, NONE, NONE, DSSP3, NONE), 381 MFPR_910(GPIO54, 0x1B4, GPIO, UART2, TWSI, SSP0, NONE, NONE, DSSP3, NONE),
382 MFPR_910(GPIO55, 0x2F0, TDS, GPIO, TB, NONE, NONE, NONE, NONE, NONE), 382 MFPR_910(GPIO55, 0x2F0, TDS, GPIO, TB, NONE, NONE, NONE, NONE, NONE),
383 MFPR_910(GPIO56, 0x2F4, TDS, GPIO, TB, NONE, NONE, NONE, NONE, NONE), 383 MFPR_910(GPIO56, 0x2F4, TDS, GPIO, TB, NONE, NONE, NONE, NONE, NONE),
384 MFPR_910(GPIO57, 0x2F8, TDS, GPIO, TB, NONE, NONE, NONE, NONE, NONE), 384 MFPR_910(GPIO57, 0x2F8, TDS, GPIO, TB, NONE, NONE, NONE, NONE, NONE),
385 MFPR_910(GPIO58, 0x2FC, TDS, GPIO, TB, NONE, NONE, NONE, NONE, NONE), 385 MFPR_910(GPIO58, 0x2FC, TDS, GPIO, TB, NONE, NONE, NONE, NONE, NONE),
386 MFPR_910(GPIO59, 0x300, TDS, GPIO, TCU_GPOA, TCU_GPOB, ONE_WIRE, NONE, NONE, NONE), 386 MFPR_910(GPIO59, 0x300, TDS, GPIO, TCU_GPOA, TCU_GPOB, ONE_WIRE, NONE, NONE, NONE),
387 MFPR_910(GPIO60, 0x304, GPIO, NONE, NONE, NONE, NONE, NONE, NONE, NONE), 387 MFPR_910(GPIO60, 0x304, GPIO, NONE, NONE, NONE, NONE, NONE, NONE, NONE),
388 MFPR_910(GPIO61, 0x308, GPIO, NONE, NONE, NONE, NONE, NONE, NONE, HSL), 388 MFPR_910(GPIO61, 0x308, GPIO, NONE, NONE, NONE, NONE, NONE, NONE, HSL),
389 MFPR_910(GPIO62, 0x30C, GPIO, NONE, NONE, NONE, NONE, NONE, NONE, HSL), 389 MFPR_910(GPIO62, 0x30C, GPIO, NONE, NONE, NONE, NONE, NONE, NONE, HSL),
390 MFPR_910(GPIO63, 0x310, GPIO, NONE, NONE, NONE, NONE, NONE, NONE, HSL), 390 MFPR_910(GPIO63, 0x310, GPIO, NONE, NONE, NONE, NONE, NONE, NONE, HSL),
391 MFPR_910(GPIO64, 0x314, GPIO, SPI2, NONE, NONE, NONE, NONE, NONE, HSL), 391 MFPR_910(GPIO64, 0x314, GPIO, SPI2, NONE, NONE, NONE, NONE, NONE, HSL),
392 MFPR_910(GPIO65, 0x318, GPIO, SPI2, NONE, NONE, NONE, NONE, ONE_WIRE, HSL), 392 MFPR_910(GPIO65, 0x318, GPIO, SPI2, NONE, NONE, NONE, NONE, ONE_WIRE, HSL),
393 MFPR_910(GPIO66, 0x31C, GPIO, NONE, NONE, NONE, NONE, NONE, NONE, HSL), 393 MFPR_910(GPIO66, 0x31C, GPIO, NONE, NONE, NONE, NONE, NONE, NONE, HSL),
394 MFPR_910(GPIO67, 0x1B8, GPIO, CCIC, SPI, NONE, NONE, ULPI, NONE, USIM2), 394 MFPR_910(GPIO67, 0x1B8, GPIO, CCIC, SPI, NONE, NONE, ULPI, NONE, USIM2),
395 MFPR_910(GPIO68, 0x1BC, GPIO, CCIC, SPI, NONE, NONE, ULPI, NONE, USIM2), 395 MFPR_910(GPIO68, 0x1BC, GPIO, CCIC, SPI, NONE, NONE, ULPI, NONE, USIM2),
396 MFPR_910(GPIO69, 0x1C0, GPIO, CCIC, SPI, NONE, NONE, ULPI, NONE, USIM2), 396 MFPR_910(GPIO69, 0x1C0, GPIO, CCIC, SPI, NONE, NONE, ULPI, NONE, USIM2),
397 MFPR_910(GPIO70, 0x1C4, GPIO, CCIC, SPI, NONE, NONE, ULPI, NONE, NONE), 397 MFPR_910(GPIO70, 0x1C4, GPIO, CCIC, SPI, NONE, NONE, ULPI, NONE, NONE),
398 MFPR_910(GPIO71, 0x1C8, GPIO, CCIC, SPI, NONE, NONE, ULPI, NONE, NONE), 398 MFPR_910(GPIO71, 0x1C8, GPIO, CCIC, SPI, NONE, NONE, ULPI, NONE, NONE),
399 MFPR_910(GPIO72, 0x1CC, GPIO, CCIC, EXT_DMA, NONE, NONE, ULPI, NONE, NONE), 399 MFPR_910(GPIO72, 0x1CC, GPIO, CCIC, EXT_DMA, NONE, NONE, ULPI, NONE, NONE),
400 MFPR_910(GPIO73, 0x1D0, GPIO, CCIC, EXT_DMA, NONE, NONE, ULPI, NONE, NONE), 400 MFPR_910(GPIO73, 0x1D0, GPIO, CCIC, EXT_DMA, NONE, NONE, ULPI, NONE, NONE),
401 MFPR_910(GPIO74, 0x1D4, GPIO, CCIC, EXT_DMA, NONE, NONE, ULPI, NONE, NONE), 401 MFPR_910(GPIO74, 0x1D4, GPIO, CCIC, EXT_DMA, NONE, NONE, ULPI, NONE, NONE),
402 MFPR_910(GPIO75, 0x1D8, GPIO, CCIC, NONE, NONE, NONE, ULPI, NONE, NONE), 402 MFPR_910(GPIO75, 0x1D8, GPIO, CCIC, NONE, NONE, NONE, ULPI, NONE, NONE),
403 MFPR_910(GPIO76, 0x1DC, GPIO, CCIC, NONE, NONE, NONE, ULPI, NONE, NONE), 403 MFPR_910(GPIO76, 0x1DC, GPIO, CCIC, NONE, NONE, NONE, ULPI, NONE, NONE),
404 MFPR_910(GPIO77, 0x1E0, GPIO, CCIC, NONE, NONE, NONE, ULPI, NONE, NONE), 404 MFPR_910(GPIO77, 0x1E0, GPIO, CCIC, NONE, NONE, NONE, ULPI, NONE, NONE),
405 MFPR_910(GPIO78, 0x1E4, GPIO, CCIC, NONE, NONE, NONE, ULPI, NONE, NONE), 405 MFPR_910(GPIO78, 0x1E4, GPIO, CCIC, NONE, NONE, NONE, ULPI, NONE, NONE),
406 MFPR_910(GPIO79, 0x1E8, GPIO, TWSI, NONE, NONE, NONE, NONE, NONE, NONE), 406 MFPR_910(GPIO79, 0x1E8, GPIO, TWSI, NONE, NONE, NONE, NONE, NONE, NONE),
407 MFPR_910(GPIO80, 0x1EC, GPIO, TWSI, NONE, NONE, NONE, NONE, NONE, NONE), 407 MFPR_910(GPIO80, 0x1EC, GPIO, TWSI, NONE, NONE, NONE, NONE, NONE, NONE),
408 MFPR_910(GPIO81, 0x1F0, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 408 MFPR_910(GPIO81, 0x1F0, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
409 MFPR_910(GPIO82, 0x1F4, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 409 MFPR_910(GPIO82, 0x1F4, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
410 MFPR_910(GPIO83, 0x1F8, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 410 MFPR_910(GPIO83, 0x1F8, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
411 MFPR_910(GPIO84, 0x1FC, GPIO, LCD, VCXO_REQ2, NONE, NONE, NONE, NONE, NONE), 411 MFPR_910(GPIO84, 0x1FC, GPIO, LCD, VCXO_REQ2, NONE, NONE, NONE, NONE, NONE),
412 MFPR_910(GPIO85, 0x200, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 412 MFPR_910(GPIO85, 0x200, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
413 MFPR_910(GPIO86, 0x204, GPIO, LCD, VCXO_OUT2, NONE, NONE, NONE, NONE, NONE), 413 MFPR_910(GPIO86, 0x204, GPIO, LCD, VCXO_OUT2, NONE, NONE, NONE, NONE, NONE),
414 MFPR_910(GPIO87, 0x208, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 414 MFPR_910(GPIO87, 0x208, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
415 MFPR_910(GPIO88, 0x20C, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 415 MFPR_910(GPIO88, 0x20C, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
416 MFPR_910(GPIO89, 0x210, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 416 MFPR_910(GPIO89, 0x210, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
417 MFPR_910(GPIO90, 0x214, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 417 MFPR_910(GPIO90, 0x214, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
418 MFPR_910(GPIO91, 0x218, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 418 MFPR_910(GPIO91, 0x218, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
419 MFPR_910(GPIO92, 0x21C, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 419 MFPR_910(GPIO92, 0x21C, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
420 MFPR_910(GPIO93, 0x220, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 420 MFPR_910(GPIO93, 0x220, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
421 MFPR_910(GPIO94, 0x224, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 421 MFPR_910(GPIO94, 0x224, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
422 MFPR_910(GPIO95, 0x228, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 422 MFPR_910(GPIO95, 0x228, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
423 MFPR_910(GPIO96, 0x22C, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 423 MFPR_910(GPIO96, 0x22C, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
424 MFPR_910(GPIO97, 0x230, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 424 MFPR_910(GPIO97, 0x230, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
425 MFPR_910(GPIO98, 0x234, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 425 MFPR_910(GPIO98, 0x234, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
426 MFPR_910(GPIO99, 0x0B0, MMC1, GPIO, NONE, NONE, NONE, NONE, NONE, NONE), 426 MFPR_910(GPIO99, 0x0B0, MMC1, GPIO, NONE, NONE, NONE, NONE, NONE, NONE),
427 MFPR_910(GPIO100, 0x238, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 427 MFPR_910(GPIO100, 0x238, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
428 MFPR_910(GPIO101, 0x23C, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE), 428 MFPR_910(GPIO101, 0x23C, GPIO, LCD, NONE, NONE, NONE, NONE, NONE, NONE),
429 MFPR_910(GPIO102, 0x240, GPIO, LCD, DSSP2, SPI, NONE, NONE, NONE, SPI2), 429 MFPR_910(GPIO102, 0x240, GPIO, LCD, DSSP2, SPI, NONE, NONE, NONE, SPI2),
430 MFPR_910(GPIO103, 0x244, GPIO, LCD, DSSP2, SPI, NONE, NONE, NONE, SPI2), 430 MFPR_910(GPIO103, 0x244, GPIO, LCD, DSSP2, SPI, NONE, NONE, NONE, SPI2),
431 MFPR_910(GPIO104, 0x248, GPIO, LCD, DSSP2, SPI, NONE, NONE, NONE, NONE), 431 MFPR_910(GPIO104, 0x248, GPIO, LCD, DSSP2, SPI, NONE, NONE, NONE, NONE),
432 MFPR_910(GPIO105, 0x24C, GPIO, LCD, DSSP2, SPI, NONE, NONE, NONE, NONE), 432 MFPR_910(GPIO105, 0x24C, GPIO, LCD, DSSP2, SPI, NONE, NONE, NONE, NONE),
433 MFPR_910(GPIO106, 0x250, GPIO, LCD, DSSP3, ONE_WIRE, NONE, NONE, NONE, NONE), 433 MFPR_910(GPIO106, 0x250, GPIO, LCD, DSSP3, ONE_WIRE, NONE, NONE, NONE, NONE),
434 MFPR_910(GPIO107, 0x254, GPIO, LCD, DSSP3, SPI, NONE, NONE, NONE, NONE), 434 MFPR_910(GPIO107, 0x254, GPIO, LCD, DSSP3, SPI, NONE, NONE, NONE, NONE),
435 MFPR_910(GPIO108, 0x258, GPIO, LCD, DSSP3, SPI, NONE, NONE, NONE, NONE), 435 MFPR_910(GPIO108, 0x258, GPIO, LCD, DSSP3, SPI, NONE, NONE, NONE, NONE),
436 MFPR_910(GPIO109, 0x25C, GPIO, LCD, DSSP3, SPI, NONE, NONE, NONE, NONE), 436 MFPR_910(GPIO109, 0x25C, GPIO, LCD, DSSP3, SPI, NONE, NONE, NONE, NONE),
437 MFPR_910(GPIO110, 0x298, GPIO, NONE, NONE, NONE, NONE, NONE, NONE, NONE), 437 MFPR_910(GPIO110, 0x298, GPIO, NONE, NONE, NONE, NONE, NONE, NONE, NONE),
438 MFPR_910(GPIO111, 0x29C, GPIO, NONE, DSSP2, NONE, NONE, NONE, NONE, NONE), 438 MFPR_910(GPIO111, 0x29C, GPIO, NONE, DSSP2, NONE, NONE, NONE, NONE, NONE),
439 MFPR_910(GPIO112, 0x2A0, GPIO, NONE, DSSP2, NONE, NONE, NONE, NONE, NONE), 439 MFPR_910(GPIO112, 0x2A0, GPIO, NONE, DSSP2, NONE, NONE, NONE, NONE, NONE),
440 MFPR_910(GPIO113, 0x2A4, GPIO, NONE, DSSP2, NONE, NONE, NONE, NONE, NONE), 440 MFPR_910(GPIO113, 0x2A4, GPIO, NONE, DSSP2, NONE, NONE, NONE, NONE, NONE),
441 MFPR_910(GPIO114, 0x2A8, GPIO, NONE, DSSP3, NONE, NONE, NONE, NONE, NONE), 441 MFPR_910(GPIO114, 0x2A8, GPIO, NONE, DSSP3, NONE, NONE, NONE, NONE, NONE),
442 MFPR_910(GPIO115, 0x2AC, GPIO, NONE, DSSP3, NONE, NONE, NONE, NONE, NONE), 442 MFPR_910(GPIO115, 0x2AC, GPIO, NONE, DSSP3, NONE, NONE, NONE, NONE, NONE),
443 MFPR_910(GPIO116, 0x2B0, GPIO, NONE, DSSP3, NONE, NONE, NONE, NONE, NONE), 443 MFPR_910(GPIO116, 0x2B0, GPIO, NONE, DSSP3, NONE, NONE, NONE, NONE, NONE),
444 MFPR_910(GPIO117, 0x0B4, PRI_JTAG, GPIO, PWM0, NONE, NONE, NONE, NONE, NONE), 444 MFPR_910(GPIO117, 0x0B4, PRI_JTAG, GPIO, PWM0, NONE, NONE, NONE, NONE, NONE),
445 MFPR_910(GPIO118, 0x0B8, PRI_JTAG, GPIO, PWM1, NONE, NONE, NONE, NONE, NONE), 445 MFPR_910(GPIO118, 0x0B8, PRI_JTAG, GPIO, PWM1, NONE, NONE, NONE, NONE, NONE),
446 MFPR_910(GPIO119, 0x0BC, PRI_JTAG, GPIO, PWM2, NONE, NONE, NONE, NONE, NONE), 446 MFPR_910(GPIO119, 0x0BC, PRI_JTAG, GPIO, PWM2, NONE, NONE, NONE, NONE, NONE),
447 MFPR_910(GPIO120, 0x0C0, PRI_JTAG, GPIO, PWM3, NONE, NONE, NONE, NONE, NONE), 447 MFPR_910(GPIO120, 0x0C0, PRI_JTAG, GPIO, PWM3, NONE, NONE, NONE, NONE, NONE),
448 MFPR_910(GPIO121, 0x32C, GPIO, NONE, NONE, NONE, NONE, NONE, NONE, NONE), 448 MFPR_910(GPIO121, 0x32C, GPIO, NONE, NONE, NONE, NONE, NONE, NONE, NONE),
449 MFPR_910(GPIO122, 0x0C8, RESET, GPIO, 32K_CLK, NONE, NONE, NONE, NONE, NONE), 449 MFPR_910(GPIO122, 0x0C8, RESET, GPIO, 32K_CLK, NONE, NONE, NONE, NONE, NONE),
450 MFPR_910(GPIO123, 0x0CC, CLK_REQ, GPIO, ONE_WIRE, EXT_DMA, NONE, NONE, NONE, NONE), 450 MFPR_910(GPIO123, 0x0CC, CLK_REQ, GPIO, ONE_WIRE, EXT_DMA, NONE, NONE, NONE, NONE),
451 MFPR_910(GPIO124, 0x0D0, GPIO, MN_CLK, DAC_ST23, NONE, NONE, NONE, NONE, NONE), 451 MFPR_910(GPIO124, 0x0D0, GPIO, MN_CLK, DAC_ST23, NONE, NONE, NONE, NONE, NONE),
452 MFPR_910(GPIO125, 0x0D4, VCXO_REQ, GPIO, NONE, EXT_INT, NONE, NONE, NONE, NONE), 452 MFPR_910(GPIO125, 0x0D4, VCXO_REQ, GPIO, NONE, EXT_INT, NONE, NONE, NONE, NONE),
453 MFPR_910(GPIO126, 0x06C, GPIO, SMC, NONE, SM_ADDR18, NONE, EXT_DMA, NONE, NONE), 453 MFPR_910(GPIO126, 0x06C, GPIO, SMC, NONE, SM_ADDR18, NONE, EXT_DMA, NONE, NONE),
454 MFPR_910(GPIO127, 0x070, GPIO, SMC, NONE, NONE, NONE, NONE, NONE, NONE), 454 MFPR_910(GPIO127, 0x070, GPIO, SMC, NONE, NONE, NONE, NONE, NONE, NONE),
455 MFPR_910(ND_IO15, 0x004, NAND, GPIO, USIM2, EXT_DMA, NONE, NONE, NONE, NONE), 455 MFPR_910(ND_IO15, 0x004, NAND, GPIO, USIM2, EXT_DMA, NONE, NONE, NONE, NONE),
456 MFPR_910(ND_IO14, 0x008, NAND, GPIO, USIM2, NONE, NONE, NONE, NONE, NONE), 456 MFPR_910(ND_IO14, 0x008, NAND, GPIO, USIM2, NONE, NONE, NONE, NONE, NONE),
457 MFPR_910(ND_IO13, 0x00C, NAND, GPIO, USIM2, EXT_INT, NONE, NONE, NONE, NONE), 457 MFPR_910(ND_IO13, 0x00C, NAND, GPIO, USIM2, EXT_INT, NONE, NONE, NONE, NONE),
458 MFPR_910(ND_IO12, 0x010, NAND, GPIO, SSP2, EXT_INT, NONE, NONE, NONE, NONE), 458 MFPR_910(ND_IO12, 0x010, NAND, GPIO, SSP2, EXT_INT, NONE, NONE, NONE, NONE),
459 MFPR_910(ND_IO11, 0x014, NAND, GPIO, SSP2, NONE, NONE, NONE, NONE, NONE), 459 MFPR_910(ND_IO11, 0x014, NAND, GPIO, SSP2, NONE, NONE, NONE, NONE, NONE),
460 MFPR_910(ND_IO10, 0x018, NAND, GPIO, SSP2, NONE, NONE, NONE, NONE, NONE), 460 MFPR_910(ND_IO10, 0x018, NAND, GPIO, SSP2, NONE, NONE, NONE, NONE, NONE),
461 MFPR_910(ND_IO9, 0x01C, NAND, GPIO, SSP2, NONE, VCXO_OUT2, NONE, NONE, NONE), 461 MFPR_910(ND_IO9, 0x01C, NAND, GPIO, SSP2, NONE, VCXO_OUT2, NONE, NONE, NONE),
462 MFPR_910(ND_IO8, 0x020, NAND, GPIO, NONE, NONE, PWM3, NONE, NONE, NONE), 462 MFPR_910(ND_IO8, 0x020, NAND, GPIO, NONE, NONE, PWM3, NONE, NONE, NONE),
463 MFPR_910(ND_IO7, 0x024, NAND, MMC3, NONE, NONE, NONE, NONE, NONE, NONE), 463 MFPR_910(ND_IO7, 0x024, NAND, MMC3, NONE, NONE, NONE, NONE, NONE, NONE),
464 MFPR_910(ND_IO6, 0x028, NAND, MMC3, NONE, NONE, NONE, NONE, NONE, NONE), 464 MFPR_910(ND_IO6, 0x028, NAND, MMC3, NONE, NONE, NONE, NONE, NONE, NONE),
465 MFPR_910(ND_IO5, 0x02C, NAND, MMC3, NONE, NONE, NONE, NONE, NONE, NONE), 465 MFPR_910(ND_IO5, 0x02C, NAND, MMC3, NONE, NONE, NONE, NONE, NONE, NONE),
466 MFPR_910(ND_IO4, 0x030, NAND, MMC3, NONE, NONE, NONE, NONE, NONE, NONE), 466 MFPR_910(ND_IO4, 0x030, NAND, MMC3, NONE, NONE, NONE, NONE, NONE, NONE),
467 MFPR_910(ND_IO3, 0x034, NAND, MMC3, NONE, NONE, NONE, NONE, NONE, NONE), 467 MFPR_910(ND_IO3, 0x034, NAND, MMC3, NONE, NONE, NONE, NONE, NONE, NONE),
468 MFPR_910(ND_IO2, 0x038, NAND, MMC3, NONE, NONE, NONE, NONE, NONE, NONE), 468 MFPR_910(ND_IO2, 0x038, NAND, MMC3, NONE, NONE, NONE, NONE, NONE, NONE),
469 MFPR_910(ND_IO1, 0x03C, NAND, MMC3, NONE, NONE, NONE, NONE, NONE, NONE), 469 MFPR_910(ND_IO1, 0x03C, NAND, MMC3, NONE, NONE, NONE, NONE, NONE, NONE),
470 MFPR_910(ND_IO0, 0x040, NAND, MMC3, NONE, NONE, NONE, NONE, NONE, NONE), 470 MFPR_910(ND_IO0, 0x040, NAND, MMC3, NONE, NONE, NONE, NONE, NONE, NONE),
471 MFPR_910(ND_NCS0, 0x044, NAND, GPIO, NONE, NONE, NONE, NONE, NONE, NONE), 471 MFPR_910(ND_NCS0, 0x044, NAND, GPIO, NONE, NONE, NONE, NONE, NONE, NONE),
472 MFPR_910(ND_NCS1, 0x048, NAND, GPIO, NONE, NONE, NONE, NONE, NONE, NONE), 472 MFPR_910(ND_NCS1, 0x048, NAND, GPIO, NONE, NONE, NONE, NONE, NONE, NONE),
473 MFPR_910(SM_NCS0, 0x04C, SMC, GPIO, NONE, NONE, NONE, NONE, NONE, NONE), 473 MFPR_910(SM_NCS0, 0x04C, SMC, GPIO, NONE, NONE, NONE, NONE, NONE, NONE),
474 MFPR_910(SM_NCS1, 0x050, SMC, GPIO, NONE, NONE, NONE, NONE, NONE, NONE), 474 MFPR_910(SM_NCS1, 0x050, SMC, GPIO, NONE, NONE, NONE, NONE, NONE, NONE),
475 MFPR_910(ND_NWE, 0x054, GPIO, NAND, NONE, SM_ADDR20, NONE, SMC, NONE, NONE), 475 MFPR_910(ND_NWE, 0x054, GPIO, NAND, NONE, SM_ADDR20, NONE, SMC, NONE, NONE),
476 MFPR_910(ND_NRE, 0x058, GPIO, NAND, NONE, SMC, NONE, EXT_DMA, NONE, NONE), 476 MFPR_910(ND_NRE, 0x058, GPIO, NAND, NONE, SMC, NONE, EXT_DMA, NONE, NONE),
477 MFPR_910(ND_CLE, 0x05C, NAND, MMC3, NONE, NONE, NONE, NONE, NONE, NONE), 477 MFPR_910(ND_CLE, 0x05C, NAND, MMC3, NONE, NONE, NONE, NONE, NONE, NONE),
478 MFPR_910(ND_ALE, 0x060, GPIO, NAND, NONE, NONE, NONE, NONE, NONE, NONE), 478 MFPR_910(ND_ALE, 0x060, GPIO, NAND, NONE, NONE, NONE, NONE, NONE, NONE),
479 MFPR_910(SM_SCLK, 0x064, MMC3, NONE, NONE, NONE, NONE, NONE, NONE, NONE), 479 MFPR_910(SM_SCLK, 0x064, MMC3, NONE, NONE, NONE, NONE, NONE, NONE, NONE),
480 MFPR_910(ND_RDY0, 0x068, NAND, GPIO, NONE, SMC, NONE, NONE, NONE, NONE), 480 MFPR_910(ND_RDY0, 0x068, NAND, GPIO, NONE, SMC, NONE, NONE, NONE, NONE),
481 MFPR_910(SM_ADV, 0x074, SMC, GPIO, NONE, NONE, NONE, NONE, NONE, NONE), 481 MFPR_910(SM_ADV, 0x074, SMC, GPIO, NONE, NONE, NONE, NONE, NONE, NONE),
482 MFPR_910(ND_RDY1, 0x078, NAND, GPIO, NONE, SMC, NONE, NONE, NONE, NONE), 482 MFPR_910(ND_RDY1, 0x078, NAND, GPIO, NONE, SMC, NONE, NONE, NONE, NONE),
483 MFPR_910(SM_ADVMUX, 0x07C, SMC, GPIO, NONE, SM_ADDR19, NONE, NONE, NONE, NONE), 483 MFPR_910(SM_ADVMUX, 0x07C, SMC, GPIO, NONE, SM_ADDR19, NONE, NONE, NONE, NONE),
484 MFPR_910(SM_RDY, 0x080, SMC, GPIO, NONE, NONE, NONE, NONE, NONE, NONE), 484 MFPR_910(SM_RDY, 0x080, SMC, GPIO, NONE, NONE, NONE, NONE, NONE, NONE),
485 MFPR_910(MMC1_DAT7, 0x084, MMC1, GPIO, SEC1_JTAG, TB, NONE, NONE, NONE, NONE), 485 MFPR_910(MMC1_DAT7, 0x084, MMC1, GPIO, SEC1_JTAG, TB, NONE, NONE, NONE, NONE),
486 MFPR_910(MMC1_DAT6, 0x088, MMC1, GPIO, SEC1_JTAG, TB, NONE, NONE, NONE, NONE), 486 MFPR_910(MMC1_DAT6, 0x088, MMC1, GPIO, SEC1_JTAG, TB, NONE, NONE, NONE, NONE),
487 MFPR_910(MMC1_DAT5, 0x08C, MMC1, GPIO, SEC1_JTAG, TB, NONE, NONE, NONE, NONE), 487 MFPR_910(MMC1_DAT5, 0x08C, MMC1, GPIO, SEC1_JTAG, TB, NONE, NONE, NONE, NONE),
488 MFPR_910(MMC1_DAT4, 0x090, MMC1, GPIO, NONE, TB, NONE, NONE, NONE, NONE), 488 MFPR_910(MMC1_DAT4, 0x090, MMC1, GPIO, NONE, TB, NONE, NONE, NONE, NONE),
489 MFPR_910(MMC1_DAT3, 0x094, MMC1, HSL, SEC2_JTAG, SSP0, NONE, NONE, NONE, NONE), 489 MFPR_910(MMC1_DAT3, 0x094, MMC1, HSL, SEC2_JTAG, SSP0, NONE, NONE, NONE, NONE),
490 MFPR_910(MMC1_DAT2, 0x098, MMC1, HSL, SEC2_JTAG, SSP2, SSP0, NONE, NONE, NONE), 490 MFPR_910(MMC1_DAT2, 0x098, MMC1, HSL, SEC2_JTAG, SSP2, SSP0, NONE, NONE, NONE),
491 MFPR_910(MMC1_DAT1, 0x09C, MMC1, HSL, SEC2_JTAG, SSP2, SSP0, NONE, NONE, NONE), 491 MFPR_910(MMC1_DAT1, 0x09C, MMC1, HSL, SEC2_JTAG, SSP2, SSP0, NONE, NONE, NONE),
492 MFPR_910(MMC1_DAT0, 0x0A0, MMC1, HSL, SEC2_JTAG, SSP2, NONE, NONE, NONE, NONE), 492 MFPR_910(MMC1_DAT0, 0x0A0, MMC1, HSL, SEC2_JTAG, SSP2, NONE, NONE, NONE, NONE),
493 MFPR_910(MMC1_CMD, 0x0A4, MMC1, HSL, SEC1_JTAG, SSP2, NONE, NONE, NONE, NONE), 493 MFPR_910(MMC1_CMD, 0x0A4, MMC1, HSL, SEC1_JTAG, SSP2, NONE, NONE, NONE, NONE),
494 MFPR_910(MMC1_CLK, 0x0A8, MMC1, HSL, SEC2_JTAG, SSP0, NONE, NONE, NONE, NONE), 494 MFPR_910(MMC1_CLK, 0x0A8, MMC1, HSL, SEC2_JTAG, SSP0, NONE, NONE, NONE, NONE),
495 MFPR_910(MMC1_CD, 0x0AC, MMC1, GPIO, SEC1_JTAG, NONE, NONE, NONE, NONE, NONE), 495 MFPR_910(MMC1_CD, 0x0AC, MMC1, GPIO, SEC1_JTAG, NONE, NONE, NONE, NONE, NONE),
496 MFPR_910(VCXO_OUT, 0x0D8, VCXO_OUT, PWM3, NONE, NONE, NONE, NONE, NONE, NONE), 496 MFPR_910(VCXO_OUT, 0x0D8, VCXO_OUT, PWM3, NONE, NONE, NONE, NONE, NONE, NONE),
497 }; 497 };
498 498
499 499
500 static const unsigned p910_usim2_pin1[] = {GPIO67, GPIO68, GPIO69}; 500 static const unsigned p910_usim2_pin1[] = {GPIO67, GPIO68, GPIO69};
501 static const unsigned p910_usim2_pin2[] = {ND_IO15, ND_IO14, ND_IO13}; 501 static const unsigned p910_usim2_pin2[] = {ND_IO15, ND_IO14, ND_IO13};
502 static const unsigned p910_mmc1_pin1[] = {MMC1_DAT7, MMC1_DAT6, MMC1_DAT5, 502 static const unsigned p910_mmc1_pin1[] = {MMC1_DAT7, MMC1_DAT6, MMC1_DAT5,
503 MMC1_DAT4, MMC1_DAT3, MMC1_DAT2, MMC1_DAT1, MMC1_DAT0, MMC1_CMD, 503 MMC1_DAT4, MMC1_DAT3, MMC1_DAT2, MMC1_DAT1, MMC1_DAT0, MMC1_CMD,
504 MMC1_CLK, MMC1_CD, GPIO99}; 504 MMC1_CLK, MMC1_CD, GPIO99};
505 static const unsigned p910_mmc2_pin1[] = {GPIO33, GPIO34, GPIO35, GPIO36, 505 static const unsigned p910_mmc2_pin1[] = {GPIO33, GPIO34, GPIO35, GPIO36,
506 GPIO37, GPIO38, GPIO39, GPIO40, GPIO41, GPIO42}; 506 GPIO37, GPIO38, GPIO39, GPIO40, GPIO41, GPIO42};
507 static const unsigned p910_mmc3_pin1[] = {GPIO33, GPIO34, GPIO35, GPIO36, 507 static const unsigned p910_mmc3_pin1[] = {GPIO33, GPIO34, GPIO35, GPIO36,
508 GPIO49, GPIO50}; 508 GPIO49, GPIO50};
509 static const unsigned p910_mmc3_pin2[] = {ND_IO7, ND_IO6, ND_IO5, ND_IO4, 509 static const unsigned p910_mmc3_pin2[] = {ND_IO7, ND_IO6, ND_IO5, ND_IO4,
510 ND_IO3, ND_IO2, ND_IO1, ND_IO0, ND_CLE, SM_SCLK}; 510 ND_IO3, ND_IO2, ND_IO1, ND_IO0, ND_CLE, SM_SCLK};
511 static const unsigned p910_uart0_pin1[] = {GPIO29, GPIO30, GPIO31, GPIO32}; 511 static const unsigned p910_uart0_pin1[] = {GPIO29, GPIO30, GPIO31, GPIO32};
512 static const unsigned p910_uart1_pin1[] = {GPIO47, GPIO48}; 512 static const unsigned p910_uart1_pin1[] = {GPIO47, GPIO48};
513 static const unsigned p910_uart1_pin2[] = {GPIO31, GPIO32}; 513 static const unsigned p910_uart1_pin2[] = {GPIO31, GPIO32};
514 static const unsigned p910_uart1_pin3[] = {GPIO45, GPIO46}; 514 static const unsigned p910_uart1_pin3[] = {GPIO45, GPIO46};
515 static const unsigned p910_uart1_pin4[] = {GPIO29, GPIO30, GPIO31, GPIO32}; 515 static const unsigned p910_uart1_pin4[] = {GPIO29, GPIO30, GPIO31, GPIO32};
516 static const unsigned p910_uart1_pin5[] = {GPIO43, GPIO44, GPIO45, GPIO46}; 516 static const unsigned p910_uart1_pin5[] = {GPIO43, GPIO44, GPIO45, GPIO46};
517 static const unsigned p910_uart2_pin1[] = {GPIO43, GPIO44}; 517 static const unsigned p910_uart2_pin1[] = {GPIO43, GPIO44};
518 static const unsigned p910_uart2_pin2[] = {GPIO51, GPIO52}; 518 static const unsigned p910_uart2_pin2[] = {GPIO51, GPIO52};
519 static const unsigned p910_uart2_pin3[] = {GPIO43, GPIO44, GPIO45, GPIO46}; 519 static const unsigned p910_uart2_pin3[] = {GPIO43, GPIO44, GPIO45, GPIO46};
520 static const unsigned p910_uart2_pin4[] = {GPIO51, GPIO52, GPIO53, GPIO54}; 520 static const unsigned p910_uart2_pin4[] = {GPIO51, GPIO52, GPIO53, GPIO54};
521 static const unsigned p910_twsi_pin1[] = {GPIO51, GPIO52}; 521 static const unsigned p910_twsi_pin1[] = {GPIO51, GPIO52};
522 static const unsigned p910_twsi_pin2[] = {GPIO53, GPIO54}; 522 static const unsigned p910_twsi_pin2[] = {GPIO53, GPIO54};
523 static const unsigned p910_twsi_pin3[] = {GPIO79, GPIO80}; 523 static const unsigned p910_twsi_pin3[] = {GPIO79, GPIO80};
524 static const unsigned p910_ccic_pin1[] = {GPIO67, GPIO68, GPIO69, GPIO70, 524 static const unsigned p910_ccic_pin1[] = {GPIO67, GPIO68, GPIO69, GPIO70,
525 GPIO71, GPIO72, GPIO73, GPIO74, GPIO75, GPIO76, GPIO77, GPIO78}; 525 GPIO71, GPIO72, GPIO73, GPIO74, GPIO75, GPIO76, GPIO77, GPIO78};
526 static const unsigned p910_lcd_pin1[] = {GPIO81, GPIO82, GPIO83, GPIO84, 526 static const unsigned p910_lcd_pin1[] = {GPIO81, GPIO82, GPIO83, GPIO84,
527 GPIO85, GPIO86, GPIO87, GPIO88, GPIO89, GPIO90, GPIO91, GPIO92, 527 GPIO85, GPIO86, GPIO87, GPIO88, GPIO89, GPIO90, GPIO91, GPIO92,
528 GPIO93, GPIO94, GPIO95, GPIO96, GPIO97, GPIO98, GPIO100, GPIO101, 528 GPIO93, GPIO94, GPIO95, GPIO96, GPIO97, GPIO98, GPIO100, GPIO101,
529 GPIO102, GPIO103}; 529 GPIO102, GPIO103};
530 static const unsigned p910_spi_pin1[] = {GPIO104, GPIO105, GPIO107, GPIO108}; 530 static const unsigned p910_spi_pin1[] = {GPIO104, GPIO105, GPIO107, GPIO108};
531 static const unsigned p910_spi_pin2[] = {GPIO43, GPIO44, GPIO45, GPIO46}; 531 static const unsigned p910_spi_pin2[] = {GPIO43, GPIO44, GPIO45, GPIO46};
532 static const unsigned p910_spi_pin3[] = {GPIO33, GPIO34, GPIO35, GPIO36, 532 static const unsigned p910_spi_pin3[] = {GPIO33, GPIO34, GPIO35, GPIO36,
533 GPIO37}; 533 GPIO37};
534 static const unsigned p910_spi_pin4[] = {GPIO67, GPIO68, GPIO69, GPIO70, 534 static const unsigned p910_spi_pin4[] = {GPIO67, GPIO68, GPIO69, GPIO70,
535 GPIO71}; 535 GPIO71};
536 static const unsigned p910_spi2_pin1[] = {GPIO64, GPIO65}; 536 static const unsigned p910_spi2_pin1[] = {GPIO64, GPIO65};
537 static const unsigned p910_spi2_pin2[] = {GPIO102, GPIO103}; 537 static const unsigned p910_spi2_pin2[] = {GPIO102, GPIO103};
538 static const unsigned p910_dssp2_pin1[] = {GPIO102, GPIO103, GPIO104, GPIO105}; 538 static const unsigned p910_dssp2_pin1[] = {GPIO102, GPIO103, GPIO104, GPIO105};
539 static const unsigned p910_dssp2_pin2[] = {GPIO43, GPIO44, GPIO45, GPIO46}; 539 static const unsigned p910_dssp2_pin2[] = {GPIO43, GPIO44, GPIO45, GPIO46};
540 static const unsigned p910_dssp2_pin3[] = {GPIO111, GPIO112, GPIO113}; 540 static const unsigned p910_dssp2_pin3[] = {GPIO111, GPIO112, GPIO113};
541 static const unsigned p910_dssp3_pin1[] = {GPIO106, GPIO107, GPIO108, GPIO109}; 541 static const unsigned p910_dssp3_pin1[] = {GPIO106, GPIO107, GPIO108, GPIO109};
542 static const unsigned p910_dssp3_pin2[] = {GPIO51, GPIO52, GPIO53, GPIO54}; 542 static const unsigned p910_dssp3_pin2[] = {GPIO51, GPIO52, GPIO53, GPIO54};
543 static const unsigned p910_dssp3_pin3[] = {GPIO114, GPIO115, GPIO116}; 543 static const unsigned p910_dssp3_pin3[] = {GPIO114, GPIO115, GPIO116};
544 static const unsigned p910_ssp0_pin1[] = {MMC1_DAT3, MMC1_DAT2, MMC1_DAT1, 544 static const unsigned p910_ssp0_pin1[] = {MMC1_DAT3, MMC1_DAT2, MMC1_DAT1,
545 MMC1_CLK}; 545 MMC1_CLK};
546 static const unsigned p910_ssp0_pin2[] = {GPIO33, GPIO34, GPIO35, GPIO36}; 546 static const unsigned p910_ssp0_pin2[] = {GPIO33, GPIO34, GPIO35, GPIO36};
547 static const unsigned p910_ssp0_pin3[] = {GPIO47, GPIO48, GPIO49, GPIO50}; 547 static const unsigned p910_ssp0_pin3[] = {GPIO47, GPIO48, GPIO49, GPIO50};
548 static const unsigned p910_ssp0_pin4[] = {GPIO51, GPIO52, GPIO53, GPIO54}; 548 static const unsigned p910_ssp0_pin4[] = {GPIO51, GPIO52, GPIO53, GPIO54};
549 static const unsigned p910_ssp1_pin1[] = {GPIO21, GPIO22, GPIO23, GPIO24}; 549 static const unsigned p910_ssp1_pin1[] = {GPIO21, GPIO22, GPIO23, GPIO24};
550 static const unsigned p910_ssp1_pin2[] = {GPIO20, GPIO21, GPIO22, GPIO23, 550 static const unsigned p910_ssp1_pin2[] = {GPIO20, GPIO21, GPIO22, GPIO23,
551 GPIO24}; 551 GPIO24};
552 static const unsigned p910_ssp2_pin1[] = {MMC1_DAT2, MMC1_DAT1, MMC1_DAT0, 552 static const unsigned p910_ssp2_pin1[] = {MMC1_DAT2, MMC1_DAT1, MMC1_DAT0,
553 MMC1_CMD}; 553 MMC1_CMD};
554 static const unsigned p910_ssp2_pin2[] = {GPIO33, GPIO34, GPIO35, GPIO36}; 554 static const unsigned p910_ssp2_pin2[] = {GPIO33, GPIO34, GPIO35, GPIO36};
555 static const unsigned p910_ssp2_pin3[] = {GPIO47, GPIO48, GPIO49, GPIO50}; 555 static const unsigned p910_ssp2_pin3[] = {GPIO47, GPIO48, GPIO49, GPIO50};
556 static const unsigned p910_ssp2_pin4[] = {ND_IO12, ND_IO11, ND_IO10, ND_IO9}; 556 static const unsigned p910_ssp2_pin4[] = {ND_IO12, ND_IO11, ND_IO10, ND_IO9};
557 static const unsigned p910_gssp_pin1[] = {GPIO25, GPIO26, GPIO27, GPIO28}; 557 static const unsigned p910_gssp_pin1[] = {GPIO25, GPIO26, GPIO27, GPIO28};
558 static const unsigned p910_pwm0_pin1[] = {GPIO117}; 558 static const unsigned p910_pwm0_pin1[] = {GPIO117};
559 static const unsigned p910_pwm1_pin1[] = {GPIO118}; 559 static const unsigned p910_pwm1_pin1[] = {GPIO118};
560 static const unsigned p910_pwm1_pin2[] = {GPIO51}; 560 static const unsigned p910_pwm1_pin2[] = {GPIO51};
561 static const unsigned p910_pwm2_pin1[] = {GPIO119}; 561 static const unsigned p910_pwm2_pin1[] = {GPIO119};
562 static const unsigned p910_pwm3_pin1[] = {GPIO120}; 562 static const unsigned p910_pwm3_pin1[] = {GPIO120};
563 static const unsigned p910_pwm3_pin2[] = {ND_IO8}; 563 static const unsigned p910_pwm3_pin2[] = {ND_IO8};
564 static const unsigned p910_pwm3_pin3[] = {VCXO_OUT}; 564 static const unsigned p910_pwm3_pin3[] = {VCXO_OUT};
565 static const unsigned p910_pri_jtag_pin1[] = {GPIO117, GPIO118, GPIO119, 565 static const unsigned p910_pri_jtag_pin1[] = {GPIO117, GPIO118, GPIO119,
566 GPIO120}; 566 GPIO120};
567 static const unsigned p910_sec1_jtag_pin1[] = {MMC1_DAT7, MMC1_DAT6, MMC1_DAT5, 567 static const unsigned p910_sec1_jtag_pin1[] = {MMC1_DAT7, MMC1_DAT6, MMC1_DAT5,
568 MMC1_CMD, MMC1_CD}; 568 MMC1_CMD, MMC1_CD};
569 static const unsigned p910_sec2_jtag_pin1[] = {MMC1_DAT3, MMC1_DAT2, MMC1_DAT1, 569 static const unsigned p910_sec2_jtag_pin1[] = {MMC1_DAT3, MMC1_DAT2, MMC1_DAT1,
570 MMC1_DAT0, MMC1_CLK}; 570 MMC1_DAT0, MMC1_CLK};
571 static const unsigned p910_hsl_pin1[] = {GPIO37, GPIO38, GPIO39, GPIO40, 571 static const unsigned p910_hsl_pin1[] = {GPIO37, GPIO38, GPIO39, GPIO40,
572 GPIO41, GPIO42}; 572 GPIO41, GPIO42};
573 static const unsigned p910_hsl_pin2[] = {GPIO61, GPIO62, GPIO63, GPIO64, 573 static const unsigned p910_hsl_pin2[] = {GPIO61, GPIO62, GPIO63, GPIO64,
574 GPIO65, GPIO66}; 574 GPIO65, GPIO66};
575 static const unsigned p910_hsl_pin3[] = {MMC1_DAT3, MMC1_DAT2, MMC1_DAT1, 575 static const unsigned p910_hsl_pin3[] = {MMC1_DAT3, MMC1_DAT2, MMC1_DAT1,
576 MMC1_DAT0, MMC1_CMD, MMC1_CLK}; 576 MMC1_DAT0, MMC1_CMD, MMC1_CLK};
577 static const unsigned p910_w1_pin1[] = {GPIO59}; 577 static const unsigned p910_w1_pin1[] = {GPIO59};
578 static const unsigned p910_w1_pin2[] = {GPIO65}; 578 static const unsigned p910_w1_pin2[] = {GPIO65};
579 static const unsigned p910_w1_pin3[] = {GPIO106}; 579 static const unsigned p910_w1_pin3[] = {GPIO106};
580 static const unsigned p910_w1_pin4[] = {GPIO123}; 580 static const unsigned p910_w1_pin4[] = {GPIO123};
581 static const unsigned p910_kpmk_pin1[] = {GPIO0, GPIO1, GPIO2, GPIO3, GPIO4, 581 static const unsigned p910_kpmk_pin1[] = {GPIO0, GPIO1, GPIO2, GPIO3, GPIO4,
582 GPIO5, GPIO6, GPIO7, GPIO8, GPIO9, GPIO10, GPIO11, GPIO12, GPIO13, 582 GPIO5, GPIO6, GPIO7, GPIO8, GPIO9, GPIO10, GPIO11, GPIO12, GPIO13,
583 GPIO14, GPIO15}; 583 GPIO14, GPIO15};
584 static const unsigned p910_kpmk_pin2[] = {GPIO0, GPIO1, GPIO2, GPIO3, GPIO4, 584 static const unsigned p910_kpmk_pin2[] = {GPIO0, GPIO1, GPIO2, GPIO3, GPIO4,
585 GPIO5, GPIO6, GPIO7, GPIO8, GPIO9, GPIO12}; 585 GPIO5, GPIO6, GPIO7, GPIO8, GPIO9, GPIO12};
586 static const unsigned p910_kpdk_pin1[] = {GPIO12, GPIO13, GPIO14, GPIO15, 586 static const unsigned p910_kpdk_pin1[] = {GPIO12, GPIO13, GPIO14, GPIO15,
587 GPIO16, GPIO17, GPIO18, GPIO19}; 587 GPIO16, GPIO17, GPIO18, GPIO19};
588 static const unsigned p910_tds_pin1[] = {GPIO55, GPIO56, GPIO57, GPIO58, 588 static const unsigned p910_tds_pin1[] = {GPIO55, GPIO56, GPIO57, GPIO58,
589 GPIO59}; 589 GPIO59};
590 static const unsigned p910_tds_pin2[] = {GPIO55, GPIO57, GPIO58, GPIO59}; 590 static const unsigned p910_tds_pin2[] = {GPIO55, GPIO57, GPIO58, GPIO59};
591 static const unsigned p910_tb_pin1[] = {GPIO14, GPIO15, GPIO16, GPIO17}; 591 static const unsigned p910_tb_pin1[] = {GPIO14, GPIO15, GPIO16, GPIO17};
592 static const unsigned p910_tb_pin2[] = {GPIO55, GPIO56, GPIO57, GPIO58}; 592 static const unsigned p910_tb_pin2[] = {GPIO55, GPIO56, GPIO57, GPIO58};
593 static const unsigned p910_tb_pin3[] = {MMC1_DAT7, MMC1_DAT6, MMC1_DAT5, 593 static const unsigned p910_tb_pin3[] = {MMC1_DAT7, MMC1_DAT6, MMC1_DAT5,
594 MMC1_DAT4}; 594 MMC1_DAT4};
595 static const unsigned p910_ext_dma0_pin1[] = {GPIO72}; 595 static const unsigned p910_ext_dma0_pin1[] = {GPIO72};
596 static const unsigned p910_ext_dma0_pin2[] = {ND_IO15}; 596 static const unsigned p910_ext_dma0_pin2[] = {ND_IO15};
597 static const unsigned p910_ext_dma0_pin3[] = {ND_NRE}; 597 static const unsigned p910_ext_dma0_pin3[] = {ND_NRE};
598 static const unsigned p910_ext_dma1_pin1[] = {GPIO73}; 598 static const unsigned p910_ext_dma1_pin1[] = {GPIO73};
599 static const unsigned p910_ext_dma1_pin2[] = {GPIO123}; 599 static const unsigned p910_ext_dma1_pin2[] = {GPIO123};
600 static const unsigned p910_ext_dma1_pin3[] = {GPIO126}; 600 static const unsigned p910_ext_dma1_pin3[] = {GPIO126};
601 static const unsigned p910_ext_dma2_pin1[] = {GPIO74}; 601 static const unsigned p910_ext_dma2_pin1[] = {GPIO74};
602 static const unsigned p910_ext0_int_pin1[] = {GPIO44}; 602 static const unsigned p910_ext0_int_pin1[] = {GPIO44};
603 static const unsigned p910_ext0_int_pin2[] = {ND_IO13}; 603 static const unsigned p910_ext0_int_pin2[] = {ND_IO13};
604 static const unsigned p910_ext1_int_pin1[] = {GPIO45}; 604 static const unsigned p910_ext1_int_pin1[] = {GPIO45};
605 static const unsigned p910_ext1_int_pin2[] = {ND_IO12}; 605 static const unsigned p910_ext1_int_pin2[] = {ND_IO12};
606 static const unsigned p910_ext2_int_pin1[] = {GPIO46}; 606 static const unsigned p910_ext2_int_pin1[] = {GPIO46};
607 static const unsigned p910_ext2_int_pin2[] = {GPIO125}; 607 static const unsigned p910_ext2_int_pin2[] = {GPIO125};
608 static const unsigned p910_dac_st23_pin1[] = {GPIO32}; 608 static const unsigned p910_dac_st23_pin1[] = {GPIO32};
609 static const unsigned p910_dac_st23_pin2[] = {GPIO43}; 609 static const unsigned p910_dac_st23_pin2[] = {GPIO43};
610 static const unsigned p910_dac_st23_pin3[] = {GPIO52}; 610 static const unsigned p910_dac_st23_pin3[] = {GPIO52};
611 static const unsigned p910_dac_st23_pin4[] = {GPIO124}; 611 static const unsigned p910_dac_st23_pin4[] = {GPIO124};
612 static const unsigned p910_vcxo_out_pin1[] = {GPIO50}; 612 static const unsigned p910_vcxo_out_pin1[] = {GPIO50};
613 static const unsigned p910_vcxo_out_pin2[] = {VCXO_OUT}; 613 static const unsigned p910_vcxo_out_pin2[] = {VCXO_OUT};
614 static const unsigned p910_vcxo_out_pin3[] = {GPIO20}; 614 static const unsigned p910_vcxo_out_pin3[] = {GPIO20};
615 static const unsigned p910_vcxo_req_pin1[] = {GPIO49}; 615 static const unsigned p910_vcxo_req_pin1[] = {GPIO49};
616 static const unsigned p910_vcxo_req_pin2[] = {GPIO125}; 616 static const unsigned p910_vcxo_req_pin2[] = {GPIO125};
617 static const unsigned p910_vcxo_out2_pin1[] = {GPIO86}; 617 static const unsigned p910_vcxo_out2_pin1[] = {GPIO86};
618 static const unsigned p910_vcxo_out2_pin2[] = {ND_IO9}; 618 static const unsigned p910_vcxo_out2_pin2[] = {ND_IO9};
619 static const unsigned p910_vcxo_req2_pin1[] = {GPIO84}; 619 static const unsigned p910_vcxo_req2_pin1[] = {GPIO84};
620 static const unsigned p910_ulpi_pin1[] = {GPIO67, GPIO68, GPIO69, GPIO70, 620 static const unsigned p910_ulpi_pin1[] = {GPIO67, GPIO68, GPIO69, GPIO70,
621 GPIO71, GPIO72, GPIO73, GPIO74, GPIO75, GPIO76, GPIO77, GPIO78}; 621 GPIO71, GPIO72, GPIO73, GPIO74, GPIO75, GPIO76, GPIO77, GPIO78};
622 static const unsigned p910_nand_pin1[] = {ND_IO15, ND_IO14, ND_IO13, ND_IO12, 622 static const unsigned p910_nand_pin1[] = {ND_IO15, ND_IO14, ND_IO13, ND_IO12,
623 ND_IO11, ND_IO10, ND_IO9, ND_IO8, ND_IO7, ND_IO6, ND_IO5, ND_IO4, 623 ND_IO11, ND_IO10, ND_IO9, ND_IO8, ND_IO7, ND_IO6, ND_IO5, ND_IO4,
624 ND_IO3, ND_IO2, ND_IO1, ND_IO0, ND_NCS0, ND_NWE, ND_NRE, ND_CLE, 624 ND_IO3, ND_IO2, ND_IO1, ND_IO0, ND_NCS0, ND_NWE, ND_NRE, ND_CLE,
625 ND_ALE, ND_RDY0}; 625 ND_ALE, ND_RDY0};
626 static const unsigned p910_gpio0_pin1[] = {GPIO0}; 626 static const unsigned p910_gpio0_pin1[] = {GPIO0};
627 static const unsigned p910_gpio0_pin2[] = {SM_ADV}; 627 static const unsigned p910_gpio0_pin2[] = {SM_ADV};
628 static const unsigned p910_gpio1_pin1[] = {GPIO1}; 628 static const unsigned p910_gpio1_pin1[] = {GPIO1};
629 static const unsigned p910_gpio1_pin2[] = {ND_RDY1}; 629 static const unsigned p910_gpio1_pin2[] = {ND_RDY1};
630 static const unsigned p910_gpio2_pin1[] = {GPIO2}; 630 static const unsigned p910_gpio2_pin1[] = {GPIO2};
631 static const unsigned p910_gpio2_pin2[] = {SM_ADVMUX}; 631 static const unsigned p910_gpio2_pin2[] = {SM_ADVMUX};
632 static const unsigned p910_gpio3_pin1[] = {GPIO3}; 632 static const unsigned p910_gpio3_pin1[] = {GPIO3};
633 static const unsigned p910_gpio3_pin2[] = {SM_RDY}; 633 static const unsigned p910_gpio3_pin2[] = {SM_RDY};
634 static const unsigned p910_gpio20_pin1[] = {GPIO20}; 634 static const unsigned p910_gpio20_pin1[] = {GPIO20};
635 static const unsigned p910_gpio20_pin2[] = {ND_IO15}; 635 static const unsigned p910_gpio20_pin2[] = {ND_IO15};
636 static const unsigned p910_gpio20_pin3[] = {MMC1_DAT6}; 636 static const unsigned p910_gpio20_pin3[] = {MMC1_DAT6};
637 static const unsigned p910_gpio21_pin1[] = {GPIO21}; 637 static const unsigned p910_gpio21_pin1[] = {GPIO21};
638 static const unsigned p910_gpio21_pin2[] = {ND_IO14}; 638 static const unsigned p910_gpio21_pin2[] = {ND_IO14};
639 static const unsigned p910_gpio21_pin3[] = {MMC1_DAT5}; 639 static const unsigned p910_gpio21_pin3[] = {MMC1_DAT5};
640 static const unsigned p910_gpio22_pin1[] = {GPIO22}; 640 static const unsigned p910_gpio22_pin1[] = {GPIO22};
641 static const unsigned p910_gpio22_pin2[] = {ND_IO13}; 641 static const unsigned p910_gpio22_pin2[] = {ND_IO13};
642 static const unsigned p910_gpio22_pin3[] = {MMC1_DAT4}; 642 static const unsigned p910_gpio22_pin3[] = {MMC1_DAT4};
643 static const unsigned p910_gpio23_pin1[] = {GPIO23}; 643 static const unsigned p910_gpio23_pin1[] = {GPIO23};
644 static const unsigned p910_gpio23_pin2[] = {ND_IO12}; 644 static const unsigned p910_gpio23_pin2[] = {ND_IO12};
645 static const unsigned p910_gpio23_pin3[] = {MMC1_CD}; 645 static const unsigned p910_gpio23_pin3[] = {MMC1_CD};
646 static const unsigned p910_gpio24_pin1[] = {GPIO24}; 646 static const unsigned p910_gpio24_pin1[] = {GPIO24};
647 static const unsigned p910_gpio24_pin2[] = {ND_IO11}; 647 static const unsigned p910_gpio24_pin2[] = {ND_IO11};
648 static const unsigned p910_gpio24_pin3[] = {MMC1_DAT7}; 648 static const unsigned p910_gpio24_pin3[] = {MMC1_DAT7};
649 static const unsigned p910_gpio25_pin1[] = {GPIO25}; 649 static const unsigned p910_gpio25_pin1[] = {GPIO25};
650 static const unsigned p910_gpio25_pin2[] = {ND_IO10}; 650 static const unsigned p910_gpio25_pin2[] = {ND_IO10};
651 static const unsigned p910_gpio26_pin1[] = {GPIO26}; 651 static const unsigned p910_gpio26_pin1[] = {GPIO26};
652 static const unsigned p910_gpio26_pin2[] = {ND_IO9}; 652 static const unsigned p910_gpio26_pin2[] = {ND_IO9};
653 static const unsigned p910_gpio27_pin1[] = {GPIO27}; 653 static const unsigned p910_gpio27_pin1[] = {GPIO27};
654 static const unsigned p910_gpio27_pin2[] = {ND_IO8}; 654 static const unsigned p910_gpio27_pin2[] = {ND_IO8};
655 static const unsigned p910_gpio85_pin1[] = {GPIO85}; 655 static const unsigned p910_gpio85_pin1[] = {GPIO85};
656 static const unsigned p910_gpio85_pin2[] = {ND_NCS0}; 656 static const unsigned p910_gpio85_pin2[] = {ND_NCS0};
657 static const unsigned p910_gpio86_pin1[] = {GPIO86}; 657 static const unsigned p910_gpio86_pin1[] = {GPIO86};
658 static const unsigned p910_gpio86_pin2[] = {ND_NCS1}; 658 static const unsigned p910_gpio86_pin2[] = {ND_NCS1};
659 static const unsigned p910_gpio87_pin1[] = {GPIO87}; 659 static const unsigned p910_gpio87_pin1[] = {GPIO87};
660 static const unsigned p910_gpio87_pin2[] = {SM_NCS0}; 660 static const unsigned p910_gpio87_pin2[] = {SM_NCS0};
661 static const unsigned p910_gpio88_pin1[] = {GPIO88}; 661 static const unsigned p910_gpio88_pin1[] = {GPIO88};
662 static const unsigned p910_gpio88_pin2[] = {SM_NCS1}; 662 static const unsigned p910_gpio88_pin2[] = {SM_NCS1};
663 static const unsigned p910_gpio89_pin1[] = {GPIO89}; 663 static const unsigned p910_gpio89_pin1[] = {GPIO89};
664 static const unsigned p910_gpio89_pin2[] = {ND_NWE}; 664 static const unsigned p910_gpio89_pin2[] = {ND_NWE};
665 static const unsigned p910_gpio90_pin1[] = {GPIO90}; 665 static const unsigned p910_gpio90_pin1[] = {GPIO90};
666 static const unsigned p910_gpio90_pin2[] = {ND_NRE}; 666 static const unsigned p910_gpio90_pin2[] = {ND_NRE};
667 static const unsigned p910_gpio91_pin1[] = {GPIO91}; 667 static const unsigned p910_gpio91_pin1[] = {GPIO91};
668 static const unsigned p910_gpio91_pin2[] = {ND_ALE}; 668 static const unsigned p910_gpio91_pin2[] = {ND_ALE};
669 static const unsigned p910_gpio92_pin1[] = {GPIO92}; 669 static const unsigned p910_gpio92_pin1[] = {GPIO92};
670 static const unsigned p910_gpio92_pin2[] = {ND_RDY0}; 670 static const unsigned p910_gpio92_pin2[] = {ND_RDY0};
671 671
672 static struct pxa3xx_pin_group pxa910_grps[] = { 672 static struct pxa3xx_pin_group pxa910_grps[] = {
673 GRP_910("usim2 3p1", USIM2, p910_usim2_pin1), 673 GRP_910("usim2 3p1", USIM2, p910_usim2_pin1),
674 GRP_910("usim2 3p2", USIM2, p910_usim2_pin2), 674 GRP_910("usim2 3p2", USIM2, p910_usim2_pin2),
675 GRP_910("mmc1 12p", MMC1, p910_mmc1_pin1), 675 GRP_910("mmc1 12p", MMC1, p910_mmc1_pin1),
676 GRP_910("mmc2 10p", MMC2, p910_mmc2_pin1), 676 GRP_910("mmc2 10p", MMC2, p910_mmc2_pin1),
677 GRP_910("mmc3 6p", MMC3, p910_mmc3_pin1), 677 GRP_910("mmc3 6p", MMC3, p910_mmc3_pin1),
678 GRP_910("mmc3 10p", MMC3, p910_mmc3_pin2), 678 GRP_910("mmc3 10p", MMC3, p910_mmc3_pin2),
679 GRP_910("uart0 4p", UART0, p910_uart0_pin1), 679 GRP_910("uart0 4p", UART0, p910_uart0_pin1),
680 GRP_910("uart1 2p1", UART1, p910_uart1_pin1), 680 GRP_910("uart1 2p1", UART1, p910_uart1_pin1),
681 GRP_910("uart1 2p2", UART1, p910_uart1_pin2), 681 GRP_910("uart1 2p2", UART1, p910_uart1_pin2),
682 GRP_910("uart1 2p3", UART1, p910_uart1_pin3), 682 GRP_910("uart1 2p3", UART1, p910_uart1_pin3),
683 GRP_910("uart1 4p4", UART1, p910_uart1_pin4), 683 GRP_910("uart1 4p4", UART1, p910_uart1_pin4),
684 GRP_910("uart1 4p5", UART1, p910_uart1_pin5), 684 GRP_910("uart1 4p5", UART1, p910_uart1_pin5),
685 GRP_910("uart2 2p1", UART2, p910_uart2_pin1), 685 GRP_910("uart2 2p1", UART2, p910_uart2_pin1),
686 GRP_910("uart2 2p2", UART2, p910_uart2_pin2), 686 GRP_910("uart2 2p2", UART2, p910_uart2_pin2),
687 GRP_910("uart2 4p3", UART2, p910_uart2_pin3), 687 GRP_910("uart2 4p3", UART2, p910_uart2_pin3),
688 GRP_910("uart2 4p4", UART2, p910_uart2_pin4), 688 GRP_910("uart2 4p4", UART2, p910_uart2_pin4),
689 GRP_910("twsi 2p1", TWSI, p910_twsi_pin1), 689 GRP_910("twsi 2p1", TWSI, p910_twsi_pin1),
690 GRP_910("twsi 2p2", TWSI, p910_twsi_pin2), 690 GRP_910("twsi 2p2", TWSI, p910_twsi_pin2),
691 GRP_910("twsi 2p3", TWSI, p910_twsi_pin3), 691 GRP_910("twsi 2p3", TWSI, p910_twsi_pin3),
692 GRP_910("ccic", CCIC, p910_ccic_pin1), 692 GRP_910("ccic", CCIC, p910_ccic_pin1),
693 GRP_910("lcd", LCD, p910_lcd_pin1), 693 GRP_910("lcd", LCD, p910_lcd_pin1),
694 GRP_910("spi 4p1", SPI, p910_spi_pin1), 694 GRP_910("spi 4p1", SPI, p910_spi_pin1),
695 GRP_910("spi 4p2", SPI, p910_spi_pin2), 695 GRP_910("spi 4p2", SPI, p910_spi_pin2),
696 GRP_910("spi 5p3", SPI, p910_spi_pin3), 696 GRP_910("spi 5p3", SPI, p910_spi_pin3),
697 GRP_910("spi 5p4", SPI, p910_spi_pin4), 697 GRP_910("spi 5p4", SPI, p910_spi_pin4),
698 GRP_910("dssp2 4p1", DSSP2, p910_dssp2_pin1), 698 GRP_910("dssp2 4p1", DSSP2, p910_dssp2_pin1),
699 GRP_910("dssp2 4p2", DSSP2, p910_dssp2_pin2), 699 GRP_910("dssp2 4p2", DSSP2, p910_dssp2_pin2),
700 GRP_910("dssp2 3p3", DSSP2, p910_dssp2_pin3), 700 GRP_910("dssp2 3p3", DSSP2, p910_dssp2_pin3),
701 GRP_910("dssp3 4p1", DSSP3, p910_dssp3_pin1), 701 GRP_910("dssp3 4p1", DSSP3, p910_dssp3_pin1),
702 GRP_910("dssp3 4p2", DSSP3, p910_dssp3_pin2), 702 GRP_910("dssp3 4p2", DSSP3, p910_dssp3_pin2),
703 GRP_910("dssp3 3p3", DSSP3, p910_dssp3_pin3), 703 GRP_910("dssp3 3p3", DSSP3, p910_dssp3_pin3),
704 GRP_910("ssp0 4p1", SSP0, p910_ssp0_pin1), 704 GRP_910("ssp0 4p1", SSP0, p910_ssp0_pin1),
705 GRP_910("ssp0 4p2", SSP0, p910_ssp0_pin2), 705 GRP_910("ssp0 4p2", SSP0, p910_ssp0_pin2),
706 GRP_910("ssp0 4p3", SSP0, p910_ssp0_pin3), 706 GRP_910("ssp0 4p3", SSP0, p910_ssp0_pin3),
707 GRP_910("ssp0 4p4", SSP0, p910_ssp0_pin4), 707 GRP_910("ssp0 4p4", SSP0, p910_ssp0_pin4),
708 GRP_910("ssp1 4p1", SSP1, p910_ssp1_pin1), 708 GRP_910("ssp1 4p1", SSP1, p910_ssp1_pin1),
709 GRP_910("ssp1 5p2", SSP1, p910_ssp1_pin2), 709 GRP_910("ssp1 5p2", SSP1, p910_ssp1_pin2),
710 GRP_910("ssp2 4p1", SSP2, p910_ssp2_pin1), 710 GRP_910("ssp2 4p1", SSP2, p910_ssp2_pin1),
711 GRP_910("ssp2 4p2", SSP2, p910_ssp2_pin2), 711 GRP_910("ssp2 4p2", SSP2, p910_ssp2_pin2),
712 GRP_910("ssp2 4p3", SSP2, p910_ssp2_pin3), 712 GRP_910("ssp2 4p3", SSP2, p910_ssp2_pin3),
713 GRP_910("ssp2 4p4", SSP2, p910_ssp2_pin4), 713 GRP_910("ssp2 4p4", SSP2, p910_ssp2_pin4),
714 GRP_910("gssp", GSSP, p910_gssp_pin1), 714 GRP_910("gssp", GSSP, p910_gssp_pin1),
715 GRP_910("pwm0", PWM0, p910_pwm0_pin1), 715 GRP_910("pwm0", PWM0, p910_pwm0_pin1),
716 GRP_910("pwm1-1", PWM1, p910_pwm1_pin1), 716 GRP_910("pwm1-1", PWM1, p910_pwm1_pin1),
717 GRP_910("pwm1-2", PWM1, p910_pwm1_pin2), 717 GRP_910("pwm1-2", PWM1, p910_pwm1_pin2),
718 GRP_910("pwm2", PWM2, p910_pwm2_pin1), 718 GRP_910("pwm2", PWM2, p910_pwm2_pin1),
719 GRP_910("pwm3-1", PWM3, p910_pwm3_pin1), 719 GRP_910("pwm3-1", PWM3, p910_pwm3_pin1),
720 GRP_910("pwm3-2", PWM3, p910_pwm3_pin2), 720 GRP_910("pwm3-2", PWM3, p910_pwm3_pin2),
721 GRP_910("pwm3-3", PWM3, p910_pwm3_pin3), 721 GRP_910("pwm3-3", PWM3, p910_pwm3_pin3),
722 GRP_910("pri jtag", PRI_JTAG, p910_pri_jtag_pin1), 722 GRP_910("pri jtag", PRI_JTAG, p910_pri_jtag_pin1),
723 GRP_910("sec1 jtag", SEC1_JTAG, p910_sec1_jtag_pin1), 723 GRP_910("sec1 jtag", SEC1_JTAG, p910_sec1_jtag_pin1),
724 GRP_910("sec2 jtag", SEC2_JTAG, p910_sec2_jtag_pin1), 724 GRP_910("sec2 jtag", SEC2_JTAG, p910_sec2_jtag_pin1),
725 GRP_910("hsl 6p1", HSL, p910_hsl_pin1), 725 GRP_910("hsl 6p1", HSL, p910_hsl_pin1),
726 GRP_910("hsl 6p2", HSL, p910_hsl_pin2), 726 GRP_910("hsl 6p2", HSL, p910_hsl_pin2),
727 GRP_910("hsl 6p3", HSL, p910_hsl_pin3), 727 GRP_910("hsl 6p3", HSL, p910_hsl_pin3),
728 GRP_910("w1-1", ONE_WIRE, p910_w1_pin1), 728 GRP_910("w1-1", ONE_WIRE, p910_w1_pin1),
729 GRP_910("w1-2", ONE_WIRE, p910_w1_pin2), 729 GRP_910("w1-2", ONE_WIRE, p910_w1_pin2),
730 GRP_910("w1-3", ONE_WIRE, p910_w1_pin3), 730 GRP_910("w1-3", ONE_WIRE, p910_w1_pin3),
731 GRP_910("w1-4", ONE_WIRE, p910_w1_pin4), 731 GRP_910("w1-4", ONE_WIRE, p910_w1_pin4),
732 GRP_910("kpmk 16p1", KP_MK, p910_kpmk_pin1), 732 GRP_910("kpmk 16p1", KP_MK, p910_kpmk_pin1),
733 GRP_910("kpmk 11p2", KP_MK, p910_kpmk_pin2), 733 GRP_910("kpmk 11p2", KP_MK, p910_kpmk_pin2),
734 GRP_910("kpdk 8p1", KP_DK, p910_kpdk_pin1), 734 GRP_910("kpdk 8p1", KP_DK, p910_kpdk_pin1),
735 GRP_910("tds 5p1", TDS, p910_tds_pin1), 735 GRP_910("tds 5p1", TDS, p910_tds_pin1),
736 GRP_910("tds 4p2", TDS, p910_tds_pin2), 736 GRP_910("tds 4p2", TDS, p910_tds_pin2),
737 GRP_910("tb 4p1", TB, p910_tb_pin1), 737 GRP_910("tb 4p1", TB, p910_tb_pin1),
738 GRP_910("tb 4p2", TB, p910_tb_pin2), 738 GRP_910("tb 4p2", TB, p910_tb_pin2),
739 GRP_910("tb 4p3", TB, p910_tb_pin3), 739 GRP_910("tb 4p3", TB, p910_tb_pin3),
740 GRP_910("ext dma0-1", EXT_DMA, p910_ext_dma0_pin1), 740 GRP_910("ext dma0-1", EXT_DMA, p910_ext_dma0_pin1),
741 GRP_910("ext dma0-2", EXT_DMA, p910_ext_dma0_pin2), 741 GRP_910("ext dma0-2", EXT_DMA, p910_ext_dma0_pin2),
742 GRP_910("ext dma0-3", EXT_DMA, p910_ext_dma0_pin3), 742 GRP_910("ext dma0-3", EXT_DMA, p910_ext_dma0_pin3),
743 GRP_910("ext dma1-1", EXT_DMA, p910_ext_dma1_pin1), 743 GRP_910("ext dma1-1", EXT_DMA, p910_ext_dma1_pin1),
744 GRP_910("ext dma1-2", EXT_DMA, p910_ext_dma1_pin2), 744 GRP_910("ext dma1-2", EXT_DMA, p910_ext_dma1_pin2),
745 GRP_910("ext dma1-3", EXT_DMA, p910_ext_dma1_pin3), 745 GRP_910("ext dma1-3", EXT_DMA, p910_ext_dma1_pin3),
746 GRP_910("ext dma2", EXT_DMA, p910_ext_dma2_pin1), 746 GRP_910("ext dma2", EXT_DMA, p910_ext_dma2_pin1),
747 GRP_910("ext0 int-1", EXT_INT, p910_ext0_int_pin1), 747 GRP_910("ext0 int-1", EXT_INT, p910_ext0_int_pin1),
748 GRP_910("ext0 int-2", EXT_INT, p910_ext0_int_pin2), 748 GRP_910("ext0 int-2", EXT_INT, p910_ext0_int_pin2),
749 GRP_910("ext1 int-1", EXT_INT, p910_ext1_int_pin1), 749 GRP_910("ext1 int-1", EXT_INT, p910_ext1_int_pin1),
750 GRP_910("ext1 int-2", EXT_INT, p910_ext1_int_pin2), 750 GRP_910("ext1 int-2", EXT_INT, p910_ext1_int_pin2),
751 GRP_910("ext2 int-1", EXT_INT, p910_ext2_int_pin1), 751 GRP_910("ext2 int-1", EXT_INT, p910_ext2_int_pin1),
752 GRP_910("ext2 int-2", EXT_INT, p910_ext2_int_pin2), 752 GRP_910("ext2 int-2", EXT_INT, p910_ext2_int_pin2),
753 GRP_910("dac st23-1", DAC_ST23, p910_dac_st23_pin1), 753 GRP_910("dac st23-1", DAC_ST23, p910_dac_st23_pin1),
754 GRP_910("dac st23-2", DAC_ST23, p910_dac_st23_pin2), 754 GRP_910("dac st23-2", DAC_ST23, p910_dac_st23_pin2),
755 GRP_910("dac st23-3", DAC_ST23, p910_dac_st23_pin3), 755 GRP_910("dac st23-3", DAC_ST23, p910_dac_st23_pin3),
756 GRP_910("dac st23-4", DAC_ST23, p910_dac_st23_pin4), 756 GRP_910("dac st23-4", DAC_ST23, p910_dac_st23_pin4),
757 GRP_910("vcxo out-1", VCXO_OUT, p910_vcxo_out_pin1), 757 GRP_910("vcxo out-1", VCXO_OUT, p910_vcxo_out_pin1),
758 GRP_910("vcxo out-2", VCXO_OUT, p910_vcxo_out_pin2), 758 GRP_910("vcxo out-2", VCXO_OUT, p910_vcxo_out_pin2),
759 GRP_910("vcxo out-3", VCXO_OUT, p910_vcxo_out_pin3), 759 GRP_910("vcxo out-3", VCXO_OUT, p910_vcxo_out_pin3),
760 GRP_910("vcxo req-1", VCXO_REQ, p910_vcxo_req_pin1), 760 GRP_910("vcxo req-1", VCXO_REQ, p910_vcxo_req_pin1),
761 GRP_910("vcxo req-2", VCXO_REQ, p910_vcxo_req_pin2), 761 GRP_910("vcxo req-2", VCXO_REQ, p910_vcxo_req_pin2),
762 GRP_910("vcxo out2-1", VCXO_OUT2, p910_vcxo_out2_pin1), 762 GRP_910("vcxo out2-1", VCXO_OUT2, p910_vcxo_out2_pin1),
763 GRP_910("vcxo out2-2", VCXO_OUT2, p910_vcxo_out2_pin2), 763 GRP_910("vcxo out2-2", VCXO_OUT2, p910_vcxo_out2_pin2),
764 GRP_910("vcxo req2", VCXO_REQ2, p910_vcxo_req2_pin1), 764 GRP_910("vcxo req2", VCXO_REQ2, p910_vcxo_req2_pin1),
765 GRP_910("ulpi", ULPI, p910_ulpi_pin1), 765 GRP_910("ulpi", ULPI, p910_ulpi_pin1),
766 GRP_910("nand", NAND, p910_nand_pin1), 766 GRP_910("nand", NAND, p910_nand_pin1),
767 GRP_910("gpio0-1", GPIO, p910_gpio0_pin1), 767 GRP_910("gpio0-1", GPIO, p910_gpio0_pin1),
768 GRP_910("gpio0-2", GPIO, p910_gpio0_pin2), 768 GRP_910("gpio0-2", GPIO, p910_gpio0_pin2),
769 GRP_910("gpio1-1", GPIO, p910_gpio1_pin1), 769 GRP_910("gpio1-1", GPIO, p910_gpio1_pin1),
770 GRP_910("gpio1-2", GPIO, p910_gpio1_pin2), 770 GRP_910("gpio1-2", GPIO, p910_gpio1_pin2),
771 GRP_910("gpio2-1", GPIO, p910_gpio2_pin1), 771 GRP_910("gpio2-1", GPIO, p910_gpio2_pin1),
772 GRP_910("gpio2-2", GPIO, p910_gpio2_pin2), 772 GRP_910("gpio2-2", GPIO, p910_gpio2_pin2),
773 GRP_910("gpio3-1", GPIO, p910_gpio3_pin1), 773 GRP_910("gpio3-1", GPIO, p910_gpio3_pin1),
774 GRP_910("gpio3-2", GPIO, p910_gpio3_pin2), 774 GRP_910("gpio3-2", GPIO, p910_gpio3_pin2),
775 GRP_910("gpio20-1", GPIO, p910_gpio20_pin1), 775 GRP_910("gpio20-1", GPIO, p910_gpio20_pin1),
776 GRP_910("gpio20-2", GPIO, p910_gpio20_pin2), 776 GRP_910("gpio20-2", GPIO, p910_gpio20_pin2),
777 GRP_910("gpio21-1", GPIO, p910_gpio21_pin1), 777 GRP_910("gpio21-1", GPIO, p910_gpio21_pin1),
778 GRP_910("gpio21-2", GPIO, p910_gpio21_pin2), 778 GRP_910("gpio21-2", GPIO, p910_gpio21_pin2),
779 GRP_910("gpio22-1", GPIO, p910_gpio22_pin1), 779 GRP_910("gpio22-1", GPIO, p910_gpio22_pin1),
780 GRP_910("gpio22-2", GPIO, p910_gpio22_pin2), 780 GRP_910("gpio22-2", GPIO, p910_gpio22_pin2),
781 GRP_910("gpio23-1", GPIO, p910_gpio23_pin1), 781 GRP_910("gpio23-1", GPIO, p910_gpio23_pin1),
782 GRP_910("gpio23-2", GPIO, p910_gpio23_pin2), 782 GRP_910("gpio23-2", GPIO, p910_gpio23_pin2),
783 GRP_910("gpio24-1", GPIO, p910_gpio24_pin1), 783 GRP_910("gpio24-1", GPIO, p910_gpio24_pin1),
784 GRP_910("gpio24-2", GPIO, p910_gpio24_pin2), 784 GRP_910("gpio24-2", GPIO, p910_gpio24_pin2),
785 GRP_910("gpio25-1", GPIO, p910_gpio25_pin1), 785 GRP_910("gpio25-1", GPIO, p910_gpio25_pin1),
786 GRP_910("gpio25-2", GPIO, p910_gpio25_pin2), 786 GRP_910("gpio25-2", GPIO, p910_gpio25_pin2),
787 GRP_910("gpio26-1", GPIO, p910_gpio26_pin1), 787 GRP_910("gpio26-1", GPIO, p910_gpio26_pin1),
788 GRP_910("gpio26-2", GPIO, p910_gpio26_pin2), 788 GRP_910("gpio26-2", GPIO, p910_gpio26_pin2),
789 GRP_910("gpio27-1", GPIO, p910_gpio27_pin1), 789 GRP_910("gpio27-1", GPIO, p910_gpio27_pin1),
790 GRP_910("gpio27-2", GPIO, p910_gpio27_pin2), 790 GRP_910("gpio27-2", GPIO, p910_gpio27_pin2),
791 GRP_910("gpio85-1", GPIO, p910_gpio85_pin1), 791 GRP_910("gpio85-1", GPIO, p910_gpio85_pin1),
792 GRP_910("gpio85-2", GPIO, p910_gpio85_pin2), 792 GRP_910("gpio85-2", GPIO, p910_gpio85_pin2),
793 GRP_910("gpio86-1", GPIO, p910_gpio86_pin1), 793 GRP_910("gpio86-1", GPIO, p910_gpio86_pin1),
794 GRP_910("gpio86-2", GPIO, p910_gpio86_pin2), 794 GRP_910("gpio86-2", GPIO, p910_gpio86_pin2),
795 GRP_910("gpio87-1", GPIO, p910_gpio87_pin1), 795 GRP_910("gpio87-1", GPIO, p910_gpio87_pin1),
796 GRP_910("gpio87-2", GPIO, p910_gpio87_pin2), 796 GRP_910("gpio87-2", GPIO, p910_gpio87_pin2),
797 GRP_910("gpio88-1", GPIO, p910_gpio88_pin1), 797 GRP_910("gpio88-1", GPIO, p910_gpio88_pin1),
798 GRP_910("gpio88-2", GPIO, p910_gpio88_pin2), 798 GRP_910("gpio88-2", GPIO, p910_gpio88_pin2),
799 GRP_910("gpio89-1", GPIO, p910_gpio89_pin1), 799 GRP_910("gpio89-1", GPIO, p910_gpio89_pin1),
800 GRP_910("gpio89-2", GPIO, p910_gpio89_pin2), 800 GRP_910("gpio89-2", GPIO, p910_gpio89_pin2),
801 GRP_910("gpio90-1", GPIO, p910_gpio90_pin1), 801 GRP_910("gpio90-1", GPIO, p910_gpio90_pin1),
802 GRP_910("gpio90-2", GPIO, p910_gpio90_pin2), 802 GRP_910("gpio90-2", GPIO, p910_gpio90_pin2),
803 GRP_910("gpio91-1", GPIO, p910_gpio91_pin1), 803 GRP_910("gpio91-1", GPIO, p910_gpio91_pin1),
804 GRP_910("gpio91-2", GPIO, p910_gpio91_pin2), 804 GRP_910("gpio91-2", GPIO, p910_gpio91_pin2),
805 GRP_910("gpio92-1", GPIO, p910_gpio92_pin1), 805 GRP_910("gpio92-1", GPIO, p910_gpio92_pin1),
806 GRP_910("gpio92-2", GPIO, p910_gpio92_pin2), 806 GRP_910("gpio92-2", GPIO, p910_gpio92_pin2),
807 }; 807 };
808 808
809 static const char * const p910_usim2_grps[] = {"usim2 3p1", "usim2 3p2"}; 809 static const char * const p910_usim2_grps[] = {"usim2 3p1", "usim2 3p2"};
810 static const char * const p910_mmc1_grps[] = {"mmc1 12p"}; 810 static const char * const p910_mmc1_grps[] = {"mmc1 12p"};
811 static const char * const p910_mmc2_grps[] = {"mmc2 10p"}; 811 static const char * const p910_mmc2_grps[] = {"mmc2 10p"};
812 static const char * const p910_mmc3_grps[] = {"mmc3 6p", "mmc3 10p"}; 812 static const char * const p910_mmc3_grps[] = {"mmc3 6p", "mmc3 10p"};
813 static const char * const p910_uart0_grps[] = {"uart0 4p"}; 813 static const char * const p910_uart0_grps[] = {"uart0 4p"};
814 static const char * const p910_uart1_grps[] = {"uart1 2p1", "uart1 2p2", 814 static const char * const p910_uart1_grps[] = {"uart1 2p1", "uart1 2p2",
815 "uart1 2p3", "uart1 4p4", "uart1 4p5"}; 815 "uart1 2p3", "uart1 4p4", "uart1 4p5"};
816 static const char * const p910_uart2_grps[] = {"uart2 2p1", "uart2 2p2", 816 static const char * const p910_uart2_grps[] = {"uart2 2p1", "uart2 2p2",
817 "uart2 4p3", "uart2 4p4"}; 817 "uart2 4p3", "uart2 4p4"};
818 static const char * const p910_twsi_grps[] = {"twsi 2p1", "twsi 2p2", 818 static const char * const p910_twsi_grps[] = {"twsi 2p1", "twsi 2p2",
819 "twsi 2p3"}; 819 "twsi 2p3"};
820 static const char * const p910_ccic_grps[] = {"ccic"}; 820 static const char * const p910_ccic_grps[] = {"ccic"};
821 static const char * const p910_lcd_grps[] = {"lcd"}; 821 static const char * const p910_lcd_grps[] = {"lcd"};
822 static const char * const p910_spi_grps[] = {"spi 4p1", "spi 4p2", "spi 5p3", 822 static const char * const p910_spi_grps[] = {"spi 4p1", "spi 4p2", "spi 5p3",
823 "spi 5p4"}; 823 "spi 5p4"};
824 static const char * const p910_dssp2_grps[] = {"dssp2 4p1", "dssp2 4p2", 824 static const char * const p910_dssp2_grps[] = {"dssp2 4p1", "dssp2 4p2",
825 "dssp2 3p3"}; 825 "dssp2 3p3"};
826 static const char * const p910_dssp3_grps[] = {"dssp3 4p1", "dssp3 4p2", 826 static const char * const p910_dssp3_grps[] = {"dssp3 4p1", "dssp3 4p2",
827 "dssp3 3p3"}; 827 "dssp3 3p3"};
828 static const char * const p910_ssp0_grps[] = {"ssp0 4p1", "ssp0 4p2", 828 static const char * const p910_ssp0_grps[] = {"ssp0 4p1", "ssp0 4p2",
829 "ssp0 4p3", "ssp0 4p4"}; 829 "ssp0 4p3", "ssp0 4p4"};
830 static const char * const p910_ssp1_grps[] = {"ssp1 4p1", "ssp1 5p2"}; 830 static const char * const p910_ssp1_grps[] = {"ssp1 4p1", "ssp1 5p2"};
831 static const char * const p910_ssp2_grps[] = {"ssp2 4p1", "ssp2 4p2", 831 static const char * const p910_ssp2_grps[] = {"ssp2 4p1", "ssp2 4p2",
832 "ssp2 4p3", "ssp2 4p4"}; 832 "ssp2 4p3", "ssp2 4p4"};
833 static const char * const p910_gssp_grps[] = {"gssp"}; 833 static const char * const p910_gssp_grps[] = {"gssp"};
834 static const char * const p910_pwm0_grps[] = {"pwm0"}; 834 static const char * const p910_pwm0_grps[] = {"pwm0"};
835 static const char * const p910_pwm1_grps[] = {"pwm1-1", "pwm1-2"}; 835 static const char * const p910_pwm1_grps[] = {"pwm1-1", "pwm1-2"};
836 static const char * const p910_pwm2_grps[] = {"pwm2"}; 836 static const char * const p910_pwm2_grps[] = {"pwm2"};
837 static const char * const p910_pwm3_grps[] = {"pwm3-1", "pwm3-2", "pwm3-3"}; 837 static const char * const p910_pwm3_grps[] = {"pwm3-1", "pwm3-2", "pwm3-3"};
838 static const char * const p910_pri_jtag_grps[] = {"pri jtag"}; 838 static const char * const p910_pri_jtag_grps[] = {"pri jtag"};
839 static const char * const p910_sec1_jtag_grps[] = {"sec1 jtag"}; 839 static const char * const p910_sec1_jtag_grps[] = {"sec1 jtag"};
840 static const char * const p910_sec2_jtag_grps[] = {"sec2 jtag"}; 840 static const char * const p910_sec2_jtag_grps[] = {"sec2 jtag"};
841 static const char * const p910_hsl_grps[] = {"hsl 6p1", "hsl 6p2", "hsl 6p3"}; 841 static const char * const p910_hsl_grps[] = {"hsl 6p1", "hsl 6p2", "hsl 6p3"};
842 static const char * const p910_w1_grps[] = {"w1-1", "w1-2", "w1-3", "w1-4"}; 842 static const char * const p910_w1_grps[] = {"w1-1", "w1-2", "w1-3", "w1-4"};
843 static const char * const p910_kpmk_grps[] = {"kpmk 16p1", "kpmk 11p2"}; 843 static const char * const p910_kpmk_grps[] = {"kpmk 16p1", "kpmk 11p2"};
844 static const char * const p910_kpdk_grps[] = {"kpdk 8p1"}; 844 static const char * const p910_kpdk_grps[] = {"kpdk 8p1"};
845 static const char * const p910_tds_grps[] = {"tds 5p1", "tds 4p2"}; 845 static const char * const p910_tds_grps[] = {"tds 5p1", "tds 4p2"};
846 static const char * const p910_tb_grps[] = {"tb 4p1", "tb 4p2", "tb 4p3"}; 846 static const char * const p910_tb_grps[] = {"tb 4p1", "tb 4p2", "tb 4p3"};
847 static const char * const p910_dma0_grps[] = {"ext dma0-1", "ext dma0-2", 847 static const char * const p910_dma0_grps[] = {"ext dma0-1", "ext dma0-2",
848 "ext dma0-3"}; 848 "ext dma0-3"};
849 static const char * const p910_dma1_grps[] = {"ext dma1-1", "ext dma1-2", 849 static const char * const p910_dma1_grps[] = {"ext dma1-1", "ext dma1-2",
850 "ext dma1-3"}; 850 "ext dma1-3"};
851 static const char * const p910_dma2_grps[] = {"ext dma2"}; 851 static const char * const p910_dma2_grps[] = {"ext dma2"};
852 static const char * const p910_int0_grps[] = {"ext0 int-1", "ext0 int-2"}; 852 static const char * const p910_int0_grps[] = {"ext0 int-1", "ext0 int-2"};
853 static const char * const p910_int1_grps[] = {"ext1 int-1", "ext1 int-2"}; 853 static const char * const p910_int1_grps[] = {"ext1 int-1", "ext1 int-2"};
854 static const char * const p910_int2_grps[] = {"ext2 int-1", "ext2 int-2"}; 854 static const char * const p910_int2_grps[] = {"ext2 int-1", "ext2 int-2"};
855 static const char * const p910_dac_st23_grps[] = {"dac st23-1", "dac st23-2", 855 static const char * const p910_dac_st23_grps[] = {"dac st23-1", "dac st23-2",
856 "dac st23-3", "dac st23-4"}; 856 "dac st23-3", "dac st23-4"};
857 static const char * const p910_vcxo_out_grps[] = {"vcxo out-1", "vcxo out-2", 857 static const char * const p910_vcxo_out_grps[] = {"vcxo out-1", "vcxo out-2",
858 "vcxo out-3"}; 858 "vcxo out-3"};
859 static const char * const p910_vcxo_req_grps[] = {"vcxo req-1", "vcxo req-2"}; 859 static const char * const p910_vcxo_req_grps[] = {"vcxo req-1", "vcxo req-2"};
860 static const char * const p910_vcxo_out2_grps[] = {"vcxo out2-1", 860 static const char * const p910_vcxo_out2_grps[] = {"vcxo out2-1",
861 "vcxo out2-2"}; 861 "vcxo out2-2"};
862 static const char * const p910_vcxo_req2_grps[] = {"vcxo req2"}; 862 static const char * const p910_vcxo_req2_grps[] = {"vcxo req2"};
863 static const char * const p910_ulpi_grps[] = {"ulpi"}; 863 static const char * const p910_ulpi_grps[] = {"ulpi"};
864 static const char * const p910_nand_grps[] = {"nand"}; 864 static const char * const p910_nand_grps[] = {"nand"};
865 static const char * const p910_gpio0_grps[] = {"gpio0-1", "gpio0-2"}; 865 static const char * const p910_gpio0_grps[] = {"gpio0-1", "gpio0-2"};
866 static const char * const p910_gpio1_grps[] = {"gpio1-1", "gpio1-2"}; 866 static const char * const p910_gpio1_grps[] = {"gpio1-1", "gpio1-2"};
867 static const char * const p910_gpio2_grps[] = {"gpio2-1", "gpio2-2"}; 867 static const char * const p910_gpio2_grps[] = {"gpio2-1", "gpio2-2"};
868 static const char * const p910_gpio3_grps[] = {"gpio3-1", "gpio3-2"}; 868 static const char * const p910_gpio3_grps[] = {"gpio3-1", "gpio3-2"};
869 static const char * const p910_gpio20_grps[] = {"gpio20-1", "gpio20-2"}; 869 static const char * const p910_gpio20_grps[] = {"gpio20-1", "gpio20-2"};
870 static const char * const p910_gpio21_grps[] = {"gpio21-1", "gpio21-2"}; 870 static const char * const p910_gpio21_grps[] = {"gpio21-1", "gpio21-2"};
871 static const char * const p910_gpio22_grps[] = {"gpio22-1", "gpio22-2"}; 871 static const char * const p910_gpio22_grps[] = {"gpio22-1", "gpio22-2"};
872 static const char * const p910_gpio23_grps[] = {"gpio23-1", "gpio23-2"}; 872 static const char * const p910_gpio23_grps[] = {"gpio23-1", "gpio23-2"};
873 static const char * const p910_gpio24_grps[] = {"gpio24-1", "gpio24-2"}; 873 static const char * const p910_gpio24_grps[] = {"gpio24-1", "gpio24-2"};
874 static const char * const p910_gpio25_grps[] = {"gpio25-1", "gpio25-2"}; 874 static const char * const p910_gpio25_grps[] = {"gpio25-1", "gpio25-2"};
875 static const char * const p910_gpio26_grps[] = {"gpio26-1", "gpio26-2"}; 875 static const char * const p910_gpio26_grps[] = {"gpio26-1", "gpio26-2"};
876 static const char * const p910_gpio27_grps[] = {"gpio27-1", "gpio27-2"}; 876 static const char * const p910_gpio27_grps[] = {"gpio27-1", "gpio27-2"};
877 static const char * const p910_gpio85_grps[] = {"gpio85-1", "gpio85-2"}; 877 static const char * const p910_gpio85_grps[] = {"gpio85-1", "gpio85-2"};
878 static const char * const p910_gpio86_grps[] = {"gpio86-1", "gpio86-2"}; 878 static const char * const p910_gpio86_grps[] = {"gpio86-1", "gpio86-2"};
879 static const char * const p910_gpio87_grps[] = {"gpio87-1", "gpio87-2"}; 879 static const char * const p910_gpio87_grps[] = {"gpio87-1", "gpio87-2"};
880 static const char * const p910_gpio88_grps[] = {"gpio88-1", "gpio88-2"}; 880 static const char * const p910_gpio88_grps[] = {"gpio88-1", "gpio88-2"};
881 static const char * const p910_gpio89_grps[] = {"gpio89-1", "gpio89-2"}; 881 static const char * const p910_gpio89_grps[] = {"gpio89-1", "gpio89-2"};
882 static const char * const p910_gpio90_grps[] = {"gpio90-1", "gpio90-2"}; 882 static const char * const p910_gpio90_grps[] = {"gpio90-1", "gpio90-2"};
883 static const char * const p910_gpio91_grps[] = {"gpio91-1", "gpio91-2"}; 883 static const char * const p910_gpio91_grps[] = {"gpio91-1", "gpio91-2"};
884 static const char * const p910_gpio92_grps[] = {"gpio92-1", "gpio92-2"}; 884 static const char * const p910_gpio92_grps[] = {"gpio92-1", "gpio92-2"};
885 885
886 static struct pxa3xx_pmx_func pxa910_funcs[] = { 886 static struct pxa3xx_pmx_func pxa910_funcs[] = {
887 {"usim2", ARRAY_AND_SIZE(p910_usim2_grps)}, 887 {"usim2", ARRAY_AND_SIZE(p910_usim2_grps)},
888 {"mmc1", ARRAY_AND_SIZE(p910_mmc1_grps)}, 888 {"mmc1", ARRAY_AND_SIZE(p910_mmc1_grps)},
889 {"mmc2", ARRAY_AND_SIZE(p910_mmc2_grps)}, 889 {"mmc2", ARRAY_AND_SIZE(p910_mmc2_grps)},
890 {"mmc3", ARRAY_AND_SIZE(p910_mmc3_grps)}, 890 {"mmc3", ARRAY_AND_SIZE(p910_mmc3_grps)},
891 {"uart0", ARRAY_AND_SIZE(p910_uart0_grps)}, 891 {"uart0", ARRAY_AND_SIZE(p910_uart0_grps)},
892 {"uart1", ARRAY_AND_SIZE(p910_uart1_grps)}, 892 {"uart1", ARRAY_AND_SIZE(p910_uart1_grps)},
893 {"uart2", ARRAY_AND_SIZE(p910_uart2_grps)}, 893 {"uart2", ARRAY_AND_SIZE(p910_uart2_grps)},
894 {"twsi", ARRAY_AND_SIZE(p910_twsi_grps)}, 894 {"twsi", ARRAY_AND_SIZE(p910_twsi_grps)},
895 {"ccic", ARRAY_AND_SIZE(p910_ccic_grps)}, 895 {"ccic", ARRAY_AND_SIZE(p910_ccic_grps)},
896 {"lcd", ARRAY_AND_SIZE(p910_lcd_grps)}, 896 {"lcd", ARRAY_AND_SIZE(p910_lcd_grps)},
897 {"spi", ARRAY_AND_SIZE(p910_spi_grps)}, 897 {"spi", ARRAY_AND_SIZE(p910_spi_grps)},
898 {"dssp2", ARRAY_AND_SIZE(p910_dssp2_grps)}, 898 {"dssp2", ARRAY_AND_SIZE(p910_dssp2_grps)},
899 {"dssp3", ARRAY_AND_SIZE(p910_dssp3_grps)}, 899 {"dssp3", ARRAY_AND_SIZE(p910_dssp3_grps)},
900 {"ssp0", ARRAY_AND_SIZE(p910_ssp0_grps)}, 900 {"ssp0", ARRAY_AND_SIZE(p910_ssp0_grps)},
901 {"ssp1", ARRAY_AND_SIZE(p910_ssp1_grps)}, 901 {"ssp1", ARRAY_AND_SIZE(p910_ssp1_grps)},
902 {"ssp2", ARRAY_AND_SIZE(p910_ssp2_grps)}, 902 {"ssp2", ARRAY_AND_SIZE(p910_ssp2_grps)},
903 {"gssp", ARRAY_AND_SIZE(p910_gssp_grps)}, 903 {"gssp", ARRAY_AND_SIZE(p910_gssp_grps)},
904 {"pwm0", ARRAY_AND_SIZE(p910_pwm0_grps)}, 904 {"pwm0", ARRAY_AND_SIZE(p910_pwm0_grps)},
905 {"pwm1", ARRAY_AND_SIZE(p910_pwm1_grps)}, 905 {"pwm1", ARRAY_AND_SIZE(p910_pwm1_grps)},
906 {"pwm2", ARRAY_AND_SIZE(p910_pwm2_grps)}, 906 {"pwm2", ARRAY_AND_SIZE(p910_pwm2_grps)},
907 {"pwm3", ARRAY_AND_SIZE(p910_pwm3_grps)}, 907 {"pwm3", ARRAY_AND_SIZE(p910_pwm3_grps)},
908 {"pri_jtag", ARRAY_AND_SIZE(p910_pri_jtag_grps)}, 908 {"pri_jtag", ARRAY_AND_SIZE(p910_pri_jtag_grps)},
909 {"sec1_jtag", ARRAY_AND_SIZE(p910_sec1_jtag_grps)}, 909 {"sec1_jtag", ARRAY_AND_SIZE(p910_sec1_jtag_grps)},
910 {"sec2_jtag", ARRAY_AND_SIZE(p910_sec2_jtag_grps)}, 910 {"sec2_jtag", ARRAY_AND_SIZE(p910_sec2_jtag_grps)},
911 {"hsl", ARRAY_AND_SIZE(p910_hsl_grps)}, 911 {"hsl", ARRAY_AND_SIZE(p910_hsl_grps)},
912 {"w1", ARRAY_AND_SIZE(p910_w1_grps)}, 912 {"w1", ARRAY_AND_SIZE(p910_w1_grps)},
913 {"kpmk", ARRAY_AND_SIZE(p910_kpmk_grps)}, 913 {"kpmk", ARRAY_AND_SIZE(p910_kpmk_grps)},
914 {"kpdk", ARRAY_AND_SIZE(p910_kpdk_grps)}, 914 {"kpdk", ARRAY_AND_SIZE(p910_kpdk_grps)},
915 {"tds", ARRAY_AND_SIZE(p910_tds_grps)}, 915 {"tds", ARRAY_AND_SIZE(p910_tds_grps)},
916 {"tb", ARRAY_AND_SIZE(p910_tb_grps)}, 916 {"tb", ARRAY_AND_SIZE(p910_tb_grps)},
917 {"dma0", ARRAY_AND_SIZE(p910_dma0_grps)}, 917 {"dma0", ARRAY_AND_SIZE(p910_dma0_grps)},
918 {"dma1", ARRAY_AND_SIZE(p910_dma1_grps)}, 918 {"dma1", ARRAY_AND_SIZE(p910_dma1_grps)},
919 {"dma2", ARRAY_AND_SIZE(p910_dma2_grps)}, 919 {"dma2", ARRAY_AND_SIZE(p910_dma2_grps)},
920 {"int0", ARRAY_AND_SIZE(p910_int0_grps)}, 920 {"int0", ARRAY_AND_SIZE(p910_int0_grps)},
921 {"int1", ARRAY_AND_SIZE(p910_int1_grps)}, 921 {"int1", ARRAY_AND_SIZE(p910_int1_grps)},
922 {"int2", ARRAY_AND_SIZE(p910_int2_grps)}, 922 {"int2", ARRAY_AND_SIZE(p910_int2_grps)},
923 {"dac_st23", ARRAY_AND_SIZE(p910_dac_st23_grps)}, 923 {"dac_st23", ARRAY_AND_SIZE(p910_dac_st23_grps)},
924 {"vcxo_out", ARRAY_AND_SIZE(p910_vcxo_out_grps)}, 924 {"vcxo_out", ARRAY_AND_SIZE(p910_vcxo_out_grps)},
925 {"vcxo_req", ARRAY_AND_SIZE(p910_vcxo_req_grps)}, 925 {"vcxo_req", ARRAY_AND_SIZE(p910_vcxo_req_grps)},
926 {"vcxo_out2", ARRAY_AND_SIZE(p910_vcxo_out2_grps)}, 926 {"vcxo_out2", ARRAY_AND_SIZE(p910_vcxo_out2_grps)},
927 {"vcxo_req2", ARRAY_AND_SIZE(p910_vcxo_req2_grps)}, 927 {"vcxo_req2", ARRAY_AND_SIZE(p910_vcxo_req2_grps)},
928 {"ulpi", ARRAY_AND_SIZE(p910_ulpi_grps)}, 928 {"ulpi", ARRAY_AND_SIZE(p910_ulpi_grps)},
929 {"nand", ARRAY_AND_SIZE(p910_nand_grps)}, 929 {"nand", ARRAY_AND_SIZE(p910_nand_grps)},
930 {"gpio0", ARRAY_AND_SIZE(p910_gpio0_grps)}, 930 {"gpio0", ARRAY_AND_SIZE(p910_gpio0_grps)},
931 {"gpio1", ARRAY_AND_SIZE(p910_gpio1_grps)}, 931 {"gpio1", ARRAY_AND_SIZE(p910_gpio1_grps)},
932 {"gpio2", ARRAY_AND_SIZE(p910_gpio2_grps)}, 932 {"gpio2", ARRAY_AND_SIZE(p910_gpio2_grps)},
933 {"gpio3", ARRAY_AND_SIZE(p910_gpio3_grps)}, 933 {"gpio3", ARRAY_AND_SIZE(p910_gpio3_grps)},
934 {"gpio20", ARRAY_AND_SIZE(p910_gpio20_grps)}, 934 {"gpio20", ARRAY_AND_SIZE(p910_gpio20_grps)},
935 {"gpio21", ARRAY_AND_SIZE(p910_gpio21_grps)}, 935 {"gpio21", ARRAY_AND_SIZE(p910_gpio21_grps)},
936 {"gpio22", ARRAY_AND_SIZE(p910_gpio22_grps)}, 936 {"gpio22", ARRAY_AND_SIZE(p910_gpio22_grps)},
937 {"gpio23", ARRAY_AND_SIZE(p910_gpio23_grps)}, 937 {"gpio23", ARRAY_AND_SIZE(p910_gpio23_grps)},
938 {"gpio24", ARRAY_AND_SIZE(p910_gpio24_grps)}, 938 {"gpio24", ARRAY_AND_SIZE(p910_gpio24_grps)},
939 {"gpio25", ARRAY_AND_SIZE(p910_gpio25_grps)}, 939 {"gpio25", ARRAY_AND_SIZE(p910_gpio25_grps)},
940 {"gpio26", ARRAY_AND_SIZE(p910_gpio26_grps)}, 940 {"gpio26", ARRAY_AND_SIZE(p910_gpio26_grps)},
941 {"gpio27", ARRAY_AND_SIZE(p910_gpio27_grps)}, 941 {"gpio27", ARRAY_AND_SIZE(p910_gpio27_grps)},
942 {"gpio85", ARRAY_AND_SIZE(p910_gpio85_grps)}, 942 {"gpio85", ARRAY_AND_SIZE(p910_gpio85_grps)},
943 {"gpio86", ARRAY_AND_SIZE(p910_gpio86_grps)}, 943 {"gpio86", ARRAY_AND_SIZE(p910_gpio86_grps)},
944 {"gpio87", ARRAY_AND_SIZE(p910_gpio87_grps)}, 944 {"gpio87", ARRAY_AND_SIZE(p910_gpio87_grps)},
945 {"gpio88", ARRAY_AND_SIZE(p910_gpio88_grps)}, 945 {"gpio88", ARRAY_AND_SIZE(p910_gpio88_grps)},
946 {"gpio89", ARRAY_AND_SIZE(p910_gpio89_grps)}, 946 {"gpio89", ARRAY_AND_SIZE(p910_gpio89_grps)},
947 {"gpio90", ARRAY_AND_SIZE(p910_gpio90_grps)}, 947 {"gpio90", ARRAY_AND_SIZE(p910_gpio90_grps)},
948 {"gpio91", ARRAY_AND_SIZE(p910_gpio91_grps)}, 948 {"gpio91", ARRAY_AND_SIZE(p910_gpio91_grps)},
949 {"gpio92", ARRAY_AND_SIZE(p910_gpio92_grps)}, 949 {"gpio92", ARRAY_AND_SIZE(p910_gpio92_grps)},
950 }; 950 };
951 951
952 static struct pinctrl_desc pxa910_pctrl_desc = { 952 static struct pinctrl_desc pxa910_pctrl_desc = {
953 .name = "pxa910-pinctrl", 953 .name = "pxa910-pinctrl",
954 .owner = THIS_MODULE, 954 .owner = THIS_MODULE,
955 }; 955 };
956 956
957 static struct pxa3xx_pinmux_info pxa910_info = { 957 static struct pxa3xx_pinmux_info pxa910_info = {
958 .mfp = pxa910_mfp, 958 .mfp = pxa910_mfp,
959 .num_mfp = ARRAY_SIZE(pxa910_mfp), 959 .num_mfp = ARRAY_SIZE(pxa910_mfp),
960 .grps = pxa910_grps, 960 .grps = pxa910_grps,
961 .num_grps = ARRAY_SIZE(pxa910_grps), 961 .num_grps = ARRAY_SIZE(pxa910_grps),
962 .funcs = pxa910_funcs, 962 .funcs = pxa910_funcs,
963 .num_funcs = ARRAY_SIZE(pxa910_funcs), 963 .num_funcs = ARRAY_SIZE(pxa910_funcs),
964 .num_gpio = 128, 964 .num_gpio = 128,
965 .desc = &pxa910_pctrl_desc, 965 .desc = &pxa910_pctrl_desc,
966 .pads = pxa910_pads, 966 .pads = pxa910_pads,
967 .num_pads = ARRAY_SIZE(pxa910_pads), 967 .num_pads = ARRAY_SIZE(pxa910_pads),
968 968
969 .cputype = PINCTRL_PXA910, 969 .cputype = PINCTRL_PXA910,
970 .ds_mask = PXA910_DS_MASK, 970 .ds_mask = PXA910_DS_MASK,
971 .ds_shift = PXA910_DS_SHIFT, 971 .ds_shift = PXA910_DS_SHIFT,
972 }; 972 };
973 973
974 static int __devinit pxa910_pinmux_probe(struct platform_device *pdev) 974 static int __devinit pxa910_pinmux_probe(struct platform_device *pdev)
975 { 975 {
976 return pxa3xx_pinctrl_register(pdev, &pxa910_info); 976 return pxa3xx_pinctrl_register(pdev, &pxa910_info);
977 } 977 }
978 978
979 static int __devexit pxa910_pinmux_remove(struct platform_device *pdev) 979 static int pxa910_pinmux_remove(struct platform_device *pdev)
980 { 980 {
981 return pxa3xx_pinctrl_unregister(pdev); 981 return pxa3xx_pinctrl_unregister(pdev);
982 } 982 }
983 983
984 static struct platform_driver pxa910_pinmux_driver = { 984 static struct platform_driver pxa910_pinmux_driver = {
985 .driver = { 985 .driver = {
986 .name = "pxa910-pinmux", 986 .name = "pxa910-pinmux",
987 .owner = THIS_MODULE, 987 .owner = THIS_MODULE,
988 }, 988 },
989 .probe = pxa910_pinmux_probe, 989 .probe = pxa910_pinmux_probe,
990 .remove = pxa910_pinmux_remove, 990 .remove = pxa910_pinmux_remove,
991 }; 991 };
992 992
993 static int __init pxa910_pinmux_init(void) 993 static int __init pxa910_pinmux_init(void)
994 { 994 {
995 return platform_driver_register(&pxa910_pinmux_driver); 995 return platform_driver_register(&pxa910_pinmux_driver);
996 } 996 }
997 core_initcall_sync(pxa910_pinmux_init); 997 core_initcall_sync(pxa910_pinmux_init);
998 998
999 static void __exit pxa910_pinmux_exit(void) 999 static void __exit pxa910_pinmux_exit(void)
1000 { 1000 {
1001 platform_driver_unregister(&pxa910_pinmux_driver); 1001 platform_driver_unregister(&pxa910_pinmux_driver);
1002 } 1002 }
1003 module_exit(pxa910_pinmux_exit); 1003 module_exit(pxa910_pinmux_exit);
1004 1004
1005 MODULE_AUTHOR("Haojian Zhuang <haojian.zhuang@marvell.com>"); 1005 MODULE_AUTHOR("Haojian Zhuang <haojian.zhuang@marvell.com>");
1006 MODULE_DESCRIPTION("PXA3xx pin control driver"); 1006 MODULE_DESCRIPTION("PXA3xx pin control driver");
1007 MODULE_LICENSE("GPL v2"); 1007 MODULE_LICENSE("GPL v2");
1008 1008
drivers/pinctrl/pinctrl-single.c
1 /* 1 /*
2 * Generic device tree based pinctrl driver for one register per pin 2 * Generic device tree based pinctrl driver for one register per pin
3 * type pinmux controllers 3 * type pinmux controllers
4 * 4 *
5 * Copyright (C) 2012 Texas Instruments, Inc. 5 * Copyright (C) 2012 Texas Instruments, Inc.
6 * 6 *
7 * This file is licensed under the terms of the GNU General Public 7 * This file is licensed under the terms of the GNU General Public
8 * License version 2. This program is licensed "as is" without any 8 * License version 2. This program is licensed "as is" without any
9 * warranty of any kind, whether express or implied. 9 * warranty of any kind, whether express or implied.
10 */ 10 */
11 11
12 #include <linux/init.h> 12 #include <linux/init.h>
13 #include <linux/module.h> 13 #include <linux/module.h>
14 #include <linux/io.h> 14 #include <linux/io.h>
15 #include <linux/slab.h> 15 #include <linux/slab.h>
16 #include <linux/err.h> 16 #include <linux/err.h>
17 #include <linux/list.h> 17 #include <linux/list.h>
18 18
19 #include <linux/of.h> 19 #include <linux/of.h>
20 #include <linux/of_device.h> 20 #include <linux/of_device.h>
21 #include <linux/of_address.h> 21 #include <linux/of_address.h>
22 22
23 #include <linux/pinctrl/pinctrl.h> 23 #include <linux/pinctrl/pinctrl.h>
24 #include <linux/pinctrl/pinmux.h> 24 #include <linux/pinctrl/pinmux.h>
25 25
26 #include "core.h" 26 #include "core.h"
27 27
28 #define DRIVER_NAME "pinctrl-single" 28 #define DRIVER_NAME "pinctrl-single"
29 #define PCS_MUX_PINS_NAME "pinctrl-single,pins" 29 #define PCS_MUX_PINS_NAME "pinctrl-single,pins"
30 #define PCS_MUX_BITS_NAME "pinctrl-single,bits" 30 #define PCS_MUX_BITS_NAME "pinctrl-single,bits"
31 #define PCS_REG_NAME_LEN ((sizeof(unsigned long) * 2) + 1) 31 #define PCS_REG_NAME_LEN ((sizeof(unsigned long) * 2) + 1)
32 #define PCS_OFF_DISABLED ~0U 32 #define PCS_OFF_DISABLED ~0U
33 33
34 /** 34 /**
35 * struct pcs_pingroup - pingroups for a function 35 * struct pcs_pingroup - pingroups for a function
36 * @np: pingroup device node pointer 36 * @np: pingroup device node pointer
37 * @name: pingroup name 37 * @name: pingroup name
38 * @gpins: array of the pins in the group 38 * @gpins: array of the pins in the group
39 * @ngpins: number of pins in the group 39 * @ngpins: number of pins in the group
40 * @node: list node 40 * @node: list node
41 */ 41 */
42 struct pcs_pingroup { 42 struct pcs_pingroup {
43 struct device_node *np; 43 struct device_node *np;
44 const char *name; 44 const char *name;
45 int *gpins; 45 int *gpins;
46 int ngpins; 46 int ngpins;
47 struct list_head node; 47 struct list_head node;
48 }; 48 };
49 49
50 /** 50 /**
51 * struct pcs_func_vals - mux function register offset and value pair 51 * struct pcs_func_vals - mux function register offset and value pair
52 * @reg: register virtual address 52 * @reg: register virtual address
53 * @val: register value 53 * @val: register value
54 */ 54 */
55 struct pcs_func_vals { 55 struct pcs_func_vals {
56 void __iomem *reg; 56 void __iomem *reg;
57 unsigned val; 57 unsigned val;
58 unsigned mask; 58 unsigned mask;
59 }; 59 };
60 60
61 /** 61 /**
62 * struct pcs_function - pinctrl function 62 * struct pcs_function - pinctrl function
63 * @name: pinctrl function name 63 * @name: pinctrl function name
64 * @vals: register and vals array 64 * @vals: register and vals array
65 * @nvals: number of entries in vals array 65 * @nvals: number of entries in vals array
66 * @pgnames: array of pingroup names the function uses 66 * @pgnames: array of pingroup names the function uses
67 * @npgnames: number of pingroup names the function uses 67 * @npgnames: number of pingroup names the function uses
68 * @node: list node 68 * @node: list node
69 */ 69 */
70 struct pcs_function { 70 struct pcs_function {
71 const char *name; 71 const char *name;
72 struct pcs_func_vals *vals; 72 struct pcs_func_vals *vals;
73 unsigned nvals; 73 unsigned nvals;
74 const char **pgnames; 74 const char **pgnames;
75 int npgnames; 75 int npgnames;
76 struct list_head node; 76 struct list_head node;
77 }; 77 };
78 78
79 /** 79 /**
80 * struct pcs_data - wrapper for data needed by pinctrl framework 80 * struct pcs_data - wrapper for data needed by pinctrl framework
81 * @pa: pindesc array 81 * @pa: pindesc array
82 * @cur: index to current element 82 * @cur: index to current element
83 * 83 *
84 * REVISIT: We should be able to drop this eventually by adding 84 * REVISIT: We should be able to drop this eventually by adding
85 * support for registering pins individually in the pinctrl 85 * support for registering pins individually in the pinctrl
86 * framework for those drivers that don't need a static array. 86 * framework for those drivers that don't need a static array.
87 */ 87 */
88 struct pcs_data { 88 struct pcs_data {
89 struct pinctrl_pin_desc *pa; 89 struct pinctrl_pin_desc *pa;
90 int cur; 90 int cur;
91 }; 91 };
92 92
93 /** 93 /**
94 * struct pcs_name - register name for a pin 94 * struct pcs_name - register name for a pin
95 * @name: name of the pinctrl register 95 * @name: name of the pinctrl register
96 * 96 *
97 * REVISIT: We may want to make names optional in the pinctrl 97 * REVISIT: We may want to make names optional in the pinctrl
98 * framework as some drivers may not care about pin names to 98 * framework as some drivers may not care about pin names to
99 * avoid kernel bloat. The pin names can be deciphered by user 99 * avoid kernel bloat. The pin names can be deciphered by user
100 * space tools using debugfs based on the register address and 100 * space tools using debugfs based on the register address and
101 * SoC packaging information. 101 * SoC packaging information.
102 */ 102 */
103 struct pcs_name { 103 struct pcs_name {
104 char name[PCS_REG_NAME_LEN]; 104 char name[PCS_REG_NAME_LEN];
105 }; 105 };
106 106
107 /** 107 /**
108 * struct pcs_device - pinctrl device instance 108 * struct pcs_device - pinctrl device instance
109 * @res: resources 109 * @res: resources
110 * @base: virtual address of the controller 110 * @base: virtual address of the controller
111 * @size: size of the ioremapped area 111 * @size: size of the ioremapped area
112 * @dev: device entry 112 * @dev: device entry
113 * @pctl: pin controller device 113 * @pctl: pin controller device
114 * @mutex: mutex protecting the lists 114 * @mutex: mutex protecting the lists
115 * @width: bits per mux register 115 * @width: bits per mux register
116 * @fmask: function register mask 116 * @fmask: function register mask
117 * @fshift: function register shift 117 * @fshift: function register shift
118 * @foff: value to turn mux off 118 * @foff: value to turn mux off
119 * @fmax: max number of functions in fmask 119 * @fmax: max number of functions in fmask
120 * @names: array of register names for pins 120 * @names: array of register names for pins
121 * @pins: physical pins on the SoC 121 * @pins: physical pins on the SoC
122 * @pgtree: pingroup index radix tree 122 * @pgtree: pingroup index radix tree
123 * @ftree: function index radix tree 123 * @ftree: function index radix tree
124 * @pingroups: list of pingroups 124 * @pingroups: list of pingroups
125 * @functions: list of functions 125 * @functions: list of functions
126 * @ngroups: number of pingroups 126 * @ngroups: number of pingroups
127 * @nfuncs: number of functions 127 * @nfuncs: number of functions
128 * @desc: pin controller descriptor 128 * @desc: pin controller descriptor
129 * @read: register read function to use 129 * @read: register read function to use
130 * @write: register write function to use 130 * @write: register write function to use
131 */ 131 */
132 struct pcs_device { 132 struct pcs_device {
133 struct resource *res; 133 struct resource *res;
134 void __iomem *base; 134 void __iomem *base;
135 unsigned size; 135 unsigned size;
136 struct device *dev; 136 struct device *dev;
137 struct pinctrl_dev *pctl; 137 struct pinctrl_dev *pctl;
138 struct mutex mutex; 138 struct mutex mutex;
139 unsigned width; 139 unsigned width;
140 unsigned fmask; 140 unsigned fmask;
141 unsigned fshift; 141 unsigned fshift;
142 unsigned foff; 142 unsigned foff;
143 unsigned fmax; 143 unsigned fmax;
144 bool bits_per_mux; 144 bool bits_per_mux;
145 struct pcs_name *names; 145 struct pcs_name *names;
146 struct pcs_data pins; 146 struct pcs_data pins;
147 struct radix_tree_root pgtree; 147 struct radix_tree_root pgtree;
148 struct radix_tree_root ftree; 148 struct radix_tree_root ftree;
149 struct list_head pingroups; 149 struct list_head pingroups;
150 struct list_head functions; 150 struct list_head functions;
151 unsigned ngroups; 151 unsigned ngroups;
152 unsigned nfuncs; 152 unsigned nfuncs;
153 struct pinctrl_desc desc; 153 struct pinctrl_desc desc;
154 unsigned (*read)(void __iomem *reg); 154 unsigned (*read)(void __iomem *reg);
155 void (*write)(unsigned val, void __iomem *reg); 155 void (*write)(unsigned val, void __iomem *reg);
156 }; 156 };
157 157
158 /* 158 /*
159 * REVISIT: Reads and writes could eventually use regmap or something 159 * REVISIT: Reads and writes could eventually use regmap or something
160 * generic. But at least on omaps, some mux registers are performance 160 * generic. But at least on omaps, some mux registers are performance
161 * critical as they may need to be remuxed every time before and after 161 * critical as they may need to be remuxed every time before and after
162 * idle. Adding tests for register access width for every read and 162 * idle. Adding tests for register access width for every read and
163 * write like regmap is doing is not desired, and caching the registers 163 * write like regmap is doing is not desired, and caching the registers
164 * does not help in this case. 164 * does not help in this case.
165 */ 165 */
166 166
167 static unsigned __maybe_unused pcs_readb(void __iomem *reg) 167 static unsigned __maybe_unused pcs_readb(void __iomem *reg)
168 { 168 {
169 return readb(reg); 169 return readb(reg);
170 } 170 }
171 171
172 static unsigned __maybe_unused pcs_readw(void __iomem *reg) 172 static unsigned __maybe_unused pcs_readw(void __iomem *reg)
173 { 173 {
174 return readw(reg); 174 return readw(reg);
175 } 175 }
176 176
177 static unsigned __maybe_unused pcs_readl(void __iomem *reg) 177 static unsigned __maybe_unused pcs_readl(void __iomem *reg)
178 { 178 {
179 return readl(reg); 179 return readl(reg);
180 } 180 }
181 181
182 static void __maybe_unused pcs_writeb(unsigned val, void __iomem *reg) 182 static void __maybe_unused pcs_writeb(unsigned val, void __iomem *reg)
183 { 183 {
184 writeb(val, reg); 184 writeb(val, reg);
185 } 185 }
186 186
187 static void __maybe_unused pcs_writew(unsigned val, void __iomem *reg) 187 static void __maybe_unused pcs_writew(unsigned val, void __iomem *reg)
188 { 188 {
189 writew(val, reg); 189 writew(val, reg);
190 } 190 }
191 191
192 static void __maybe_unused pcs_writel(unsigned val, void __iomem *reg) 192 static void __maybe_unused pcs_writel(unsigned val, void __iomem *reg)
193 { 193 {
194 writel(val, reg); 194 writel(val, reg);
195 } 195 }
196 196
197 static int pcs_get_groups_count(struct pinctrl_dev *pctldev) 197 static int pcs_get_groups_count(struct pinctrl_dev *pctldev)
198 { 198 {
199 struct pcs_device *pcs; 199 struct pcs_device *pcs;
200 200
201 pcs = pinctrl_dev_get_drvdata(pctldev); 201 pcs = pinctrl_dev_get_drvdata(pctldev);
202 202
203 return pcs->ngroups; 203 return pcs->ngroups;
204 } 204 }
205 205
206 static const char *pcs_get_group_name(struct pinctrl_dev *pctldev, 206 static const char *pcs_get_group_name(struct pinctrl_dev *pctldev,
207 unsigned gselector) 207 unsigned gselector)
208 { 208 {
209 struct pcs_device *pcs; 209 struct pcs_device *pcs;
210 struct pcs_pingroup *group; 210 struct pcs_pingroup *group;
211 211
212 pcs = pinctrl_dev_get_drvdata(pctldev); 212 pcs = pinctrl_dev_get_drvdata(pctldev);
213 group = radix_tree_lookup(&pcs->pgtree, gselector); 213 group = radix_tree_lookup(&pcs->pgtree, gselector);
214 if (!group) { 214 if (!group) {
215 dev_err(pcs->dev, "%s could not find pingroup%i\n", 215 dev_err(pcs->dev, "%s could not find pingroup%i\n",
216 __func__, gselector); 216 __func__, gselector);
217 return NULL; 217 return NULL;
218 } 218 }
219 219
220 return group->name; 220 return group->name;
221 } 221 }
222 222
223 static int pcs_get_group_pins(struct pinctrl_dev *pctldev, 223 static int pcs_get_group_pins(struct pinctrl_dev *pctldev,
224 unsigned gselector, 224 unsigned gselector,
225 const unsigned **pins, 225 const unsigned **pins,
226 unsigned *npins) 226 unsigned *npins)
227 { 227 {
228 struct pcs_device *pcs; 228 struct pcs_device *pcs;
229 struct pcs_pingroup *group; 229 struct pcs_pingroup *group;
230 230
231 pcs = pinctrl_dev_get_drvdata(pctldev); 231 pcs = pinctrl_dev_get_drvdata(pctldev);
232 group = radix_tree_lookup(&pcs->pgtree, gselector); 232 group = radix_tree_lookup(&pcs->pgtree, gselector);
233 if (!group) { 233 if (!group) {
234 dev_err(pcs->dev, "%s could not find pingroup%i\n", 234 dev_err(pcs->dev, "%s could not find pingroup%i\n",
235 __func__, gselector); 235 __func__, gselector);
236 return -EINVAL; 236 return -EINVAL;
237 } 237 }
238 238
239 *pins = group->gpins; 239 *pins = group->gpins;
240 *npins = group->ngpins; 240 *npins = group->ngpins;
241 241
242 return 0; 242 return 0;
243 } 243 }
244 244
245 static void pcs_pin_dbg_show(struct pinctrl_dev *pctldev, 245 static void pcs_pin_dbg_show(struct pinctrl_dev *pctldev,
246 struct seq_file *s, 246 struct seq_file *s,
247 unsigned offset) 247 unsigned offset)
248 { 248 {
249 struct pcs_device *pcs; 249 struct pcs_device *pcs;
250 unsigned val; 250 unsigned val;
251 251
252 pcs = pinctrl_dev_get_drvdata(pctldev); 252 pcs = pinctrl_dev_get_drvdata(pctldev);
253 253
254 val = pcs->read(pcs->base + offset); 254 val = pcs->read(pcs->base + offset);
255 val &= pcs->fmask; 255 val &= pcs->fmask;
256 256
257 seq_printf(s, "%08x %s " , val, DRIVER_NAME); 257 seq_printf(s, "%08x %s " , val, DRIVER_NAME);
258 } 258 }
259 259
260 static void pcs_dt_free_map(struct pinctrl_dev *pctldev, 260 static void pcs_dt_free_map(struct pinctrl_dev *pctldev,
261 struct pinctrl_map *map, unsigned num_maps) 261 struct pinctrl_map *map, unsigned num_maps)
262 { 262 {
263 struct pcs_device *pcs; 263 struct pcs_device *pcs;
264 264
265 pcs = pinctrl_dev_get_drvdata(pctldev); 265 pcs = pinctrl_dev_get_drvdata(pctldev);
266 devm_kfree(pcs->dev, map); 266 devm_kfree(pcs->dev, map);
267 } 267 }
268 268
269 static int pcs_dt_node_to_map(struct pinctrl_dev *pctldev, 269 static int pcs_dt_node_to_map(struct pinctrl_dev *pctldev,
270 struct device_node *np_config, 270 struct device_node *np_config,
271 struct pinctrl_map **map, unsigned *num_maps); 271 struct pinctrl_map **map, unsigned *num_maps);
272 272
273 static struct pinctrl_ops pcs_pinctrl_ops = { 273 static struct pinctrl_ops pcs_pinctrl_ops = {
274 .get_groups_count = pcs_get_groups_count, 274 .get_groups_count = pcs_get_groups_count,
275 .get_group_name = pcs_get_group_name, 275 .get_group_name = pcs_get_group_name,
276 .get_group_pins = pcs_get_group_pins, 276 .get_group_pins = pcs_get_group_pins,
277 .pin_dbg_show = pcs_pin_dbg_show, 277 .pin_dbg_show = pcs_pin_dbg_show,
278 .dt_node_to_map = pcs_dt_node_to_map, 278 .dt_node_to_map = pcs_dt_node_to_map,
279 .dt_free_map = pcs_dt_free_map, 279 .dt_free_map = pcs_dt_free_map,
280 }; 280 };
281 281
282 static int pcs_get_functions_count(struct pinctrl_dev *pctldev) 282 static int pcs_get_functions_count(struct pinctrl_dev *pctldev)
283 { 283 {
284 struct pcs_device *pcs; 284 struct pcs_device *pcs;
285 285
286 pcs = pinctrl_dev_get_drvdata(pctldev); 286 pcs = pinctrl_dev_get_drvdata(pctldev);
287 287
288 return pcs->nfuncs; 288 return pcs->nfuncs;
289 } 289 }
290 290
291 static const char *pcs_get_function_name(struct pinctrl_dev *pctldev, 291 static const char *pcs_get_function_name(struct pinctrl_dev *pctldev,
292 unsigned fselector) 292 unsigned fselector)
293 { 293 {
294 struct pcs_device *pcs; 294 struct pcs_device *pcs;
295 struct pcs_function *func; 295 struct pcs_function *func;
296 296
297 pcs = pinctrl_dev_get_drvdata(pctldev); 297 pcs = pinctrl_dev_get_drvdata(pctldev);
298 func = radix_tree_lookup(&pcs->ftree, fselector); 298 func = radix_tree_lookup(&pcs->ftree, fselector);
299 if (!func) { 299 if (!func) {
300 dev_err(pcs->dev, "%s could not find function%i\n", 300 dev_err(pcs->dev, "%s could not find function%i\n",
301 __func__, fselector); 301 __func__, fselector);
302 return NULL; 302 return NULL;
303 } 303 }
304 304
305 return func->name; 305 return func->name;
306 } 306 }
307 307
308 static int pcs_get_function_groups(struct pinctrl_dev *pctldev, 308 static int pcs_get_function_groups(struct pinctrl_dev *pctldev,
309 unsigned fselector, 309 unsigned fselector,
310 const char * const **groups, 310 const char * const **groups,
311 unsigned * const ngroups) 311 unsigned * const ngroups)
312 { 312 {
313 struct pcs_device *pcs; 313 struct pcs_device *pcs;
314 struct pcs_function *func; 314 struct pcs_function *func;
315 315
316 pcs = pinctrl_dev_get_drvdata(pctldev); 316 pcs = pinctrl_dev_get_drvdata(pctldev);
317 func = radix_tree_lookup(&pcs->ftree, fselector); 317 func = radix_tree_lookup(&pcs->ftree, fselector);
318 if (!func) { 318 if (!func) {
319 dev_err(pcs->dev, "%s could not find function%i\n", 319 dev_err(pcs->dev, "%s could not find function%i\n",
320 __func__, fselector); 320 __func__, fselector);
321 return -EINVAL; 321 return -EINVAL;
322 } 322 }
323 *groups = func->pgnames; 323 *groups = func->pgnames;
324 *ngroups = func->npgnames; 324 *ngroups = func->npgnames;
325 325
326 return 0; 326 return 0;
327 } 327 }
328 328
329 static int pcs_enable(struct pinctrl_dev *pctldev, unsigned fselector, 329 static int pcs_enable(struct pinctrl_dev *pctldev, unsigned fselector,
330 unsigned group) 330 unsigned group)
331 { 331 {
332 struct pcs_device *pcs; 332 struct pcs_device *pcs;
333 struct pcs_function *func; 333 struct pcs_function *func;
334 int i; 334 int i;
335 335
336 pcs = pinctrl_dev_get_drvdata(pctldev); 336 pcs = pinctrl_dev_get_drvdata(pctldev);
337 func = radix_tree_lookup(&pcs->ftree, fselector); 337 func = radix_tree_lookup(&pcs->ftree, fselector);
338 if (!func) 338 if (!func)
339 return -EINVAL; 339 return -EINVAL;
340 340
341 dev_dbg(pcs->dev, "enabling %s function%i\n", 341 dev_dbg(pcs->dev, "enabling %s function%i\n",
342 func->name, fselector); 342 func->name, fselector);
343 343
344 for (i = 0; i < func->nvals; i++) { 344 for (i = 0; i < func->nvals; i++) {
345 struct pcs_func_vals *vals; 345 struct pcs_func_vals *vals;
346 unsigned val, mask; 346 unsigned val, mask;
347 347
348 vals = &func->vals[i]; 348 vals = &func->vals[i];
349 val = pcs->read(vals->reg); 349 val = pcs->read(vals->reg);
350 if (!vals->mask) 350 if (!vals->mask)
351 mask = pcs->fmask; 351 mask = pcs->fmask;
352 else 352 else
353 mask = pcs->fmask & vals->mask; 353 mask = pcs->fmask & vals->mask;
354 354
355 val &= ~mask; 355 val &= ~mask;
356 val |= (vals->val & mask); 356 val |= (vals->val & mask);
357 pcs->write(val, vals->reg); 357 pcs->write(val, vals->reg);
358 } 358 }
359 359
360 return 0; 360 return 0;
361 } 361 }
362 362
363 static void pcs_disable(struct pinctrl_dev *pctldev, unsigned fselector, 363 static void pcs_disable(struct pinctrl_dev *pctldev, unsigned fselector,
364 unsigned group) 364 unsigned group)
365 { 365 {
366 struct pcs_device *pcs; 366 struct pcs_device *pcs;
367 struct pcs_function *func; 367 struct pcs_function *func;
368 int i; 368 int i;
369 369
370 pcs = pinctrl_dev_get_drvdata(pctldev); 370 pcs = pinctrl_dev_get_drvdata(pctldev);
371 func = radix_tree_lookup(&pcs->ftree, fselector); 371 func = radix_tree_lookup(&pcs->ftree, fselector);
372 if (!func) { 372 if (!func) {
373 dev_err(pcs->dev, "%s could not find function%i\n", 373 dev_err(pcs->dev, "%s could not find function%i\n",
374 __func__, fselector); 374 __func__, fselector);
375 return; 375 return;
376 } 376 }
377 377
378 /* 378 /*
379 * Ignore disable if function-off is not specified. Some hardware 379 * Ignore disable if function-off is not specified. Some hardware
380 * does not have clearly defined disable function. For pin specific 380 * does not have clearly defined disable function. For pin specific
381 * off modes, you can use alternate named states as described in 381 * off modes, you can use alternate named states as described in
382 * pinctrl-bindings.txt. 382 * pinctrl-bindings.txt.
383 */ 383 */
384 if (pcs->foff == PCS_OFF_DISABLED) { 384 if (pcs->foff == PCS_OFF_DISABLED) {
385 dev_dbg(pcs->dev, "ignoring disable for %s function%i\n", 385 dev_dbg(pcs->dev, "ignoring disable for %s function%i\n",
386 func->name, fselector); 386 func->name, fselector);
387 return; 387 return;
388 } 388 }
389 389
390 dev_dbg(pcs->dev, "disabling function%i %s\n", 390 dev_dbg(pcs->dev, "disabling function%i %s\n",
391 fselector, func->name); 391 fselector, func->name);
392 392
393 for (i = 0; i < func->nvals; i++) { 393 for (i = 0; i < func->nvals; i++) {
394 struct pcs_func_vals *vals; 394 struct pcs_func_vals *vals;
395 unsigned val; 395 unsigned val;
396 396
397 vals = &func->vals[i]; 397 vals = &func->vals[i];
398 val = pcs->read(vals->reg); 398 val = pcs->read(vals->reg);
399 val &= ~pcs->fmask; 399 val &= ~pcs->fmask;
400 val |= pcs->foff << pcs->fshift; 400 val |= pcs->foff << pcs->fshift;
401 pcs->write(val, vals->reg); 401 pcs->write(val, vals->reg);
402 } 402 }
403 } 403 }
404 404
405 static int pcs_request_gpio(struct pinctrl_dev *pctldev, 405 static int pcs_request_gpio(struct pinctrl_dev *pctldev,
406 struct pinctrl_gpio_range *range, unsigned offset) 406 struct pinctrl_gpio_range *range, unsigned offset)
407 { 407 {
408 return -ENOTSUPP; 408 return -ENOTSUPP;
409 } 409 }
410 410
411 static struct pinmux_ops pcs_pinmux_ops = { 411 static struct pinmux_ops pcs_pinmux_ops = {
412 .get_functions_count = pcs_get_functions_count, 412 .get_functions_count = pcs_get_functions_count,
413 .get_function_name = pcs_get_function_name, 413 .get_function_name = pcs_get_function_name,
414 .get_function_groups = pcs_get_function_groups, 414 .get_function_groups = pcs_get_function_groups,
415 .enable = pcs_enable, 415 .enable = pcs_enable,
416 .disable = pcs_disable, 416 .disable = pcs_disable,
417 .gpio_request_enable = pcs_request_gpio, 417 .gpio_request_enable = pcs_request_gpio,
418 }; 418 };
419 419
420 static int pcs_pinconf_get(struct pinctrl_dev *pctldev, 420 static int pcs_pinconf_get(struct pinctrl_dev *pctldev,
421 unsigned pin, unsigned long *config) 421 unsigned pin, unsigned long *config)
422 { 422 {
423 return -ENOTSUPP; 423 return -ENOTSUPP;
424 } 424 }
425 425
426 static int pcs_pinconf_set(struct pinctrl_dev *pctldev, 426 static int pcs_pinconf_set(struct pinctrl_dev *pctldev,
427 unsigned pin, unsigned long config) 427 unsigned pin, unsigned long config)
428 { 428 {
429 return -ENOTSUPP; 429 return -ENOTSUPP;
430 } 430 }
431 431
432 static int pcs_pinconf_group_get(struct pinctrl_dev *pctldev, 432 static int pcs_pinconf_group_get(struct pinctrl_dev *pctldev,
433 unsigned group, unsigned long *config) 433 unsigned group, unsigned long *config)
434 { 434 {
435 return -ENOTSUPP; 435 return -ENOTSUPP;
436 } 436 }
437 437
438 static int pcs_pinconf_group_set(struct pinctrl_dev *pctldev, 438 static int pcs_pinconf_group_set(struct pinctrl_dev *pctldev,
439 unsigned group, unsigned long config) 439 unsigned group, unsigned long config)
440 { 440 {
441 return -ENOTSUPP; 441 return -ENOTSUPP;
442 } 442 }
443 443
444 static void pcs_pinconf_dbg_show(struct pinctrl_dev *pctldev, 444 static void pcs_pinconf_dbg_show(struct pinctrl_dev *pctldev,
445 struct seq_file *s, unsigned offset) 445 struct seq_file *s, unsigned offset)
446 { 446 {
447 } 447 }
448 448
449 static void pcs_pinconf_group_dbg_show(struct pinctrl_dev *pctldev, 449 static void pcs_pinconf_group_dbg_show(struct pinctrl_dev *pctldev,
450 struct seq_file *s, unsigned selector) 450 struct seq_file *s, unsigned selector)
451 { 451 {
452 } 452 }
453 453
454 static struct pinconf_ops pcs_pinconf_ops = { 454 static struct pinconf_ops pcs_pinconf_ops = {
455 .pin_config_get = pcs_pinconf_get, 455 .pin_config_get = pcs_pinconf_get,
456 .pin_config_set = pcs_pinconf_set, 456 .pin_config_set = pcs_pinconf_set,
457 .pin_config_group_get = pcs_pinconf_group_get, 457 .pin_config_group_get = pcs_pinconf_group_get,
458 .pin_config_group_set = pcs_pinconf_group_set, 458 .pin_config_group_set = pcs_pinconf_group_set,
459 .pin_config_dbg_show = pcs_pinconf_dbg_show, 459 .pin_config_dbg_show = pcs_pinconf_dbg_show,
460 .pin_config_group_dbg_show = pcs_pinconf_group_dbg_show, 460 .pin_config_group_dbg_show = pcs_pinconf_group_dbg_show,
461 }; 461 };
462 462
463 /** 463 /**
464 * pcs_add_pin() - add a pin to the static per controller pin array 464 * pcs_add_pin() - add a pin to the static per controller pin array
465 * @pcs: pcs driver instance 465 * @pcs: pcs driver instance
466 * @offset: register offset from base 466 * @offset: register offset from base
467 */ 467 */
468 static int __devinit pcs_add_pin(struct pcs_device *pcs, unsigned offset) 468 static int __devinit pcs_add_pin(struct pcs_device *pcs, unsigned offset)
469 { 469 {
470 struct pinctrl_pin_desc *pin; 470 struct pinctrl_pin_desc *pin;
471 struct pcs_name *pn; 471 struct pcs_name *pn;
472 int i; 472 int i;
473 473
474 i = pcs->pins.cur; 474 i = pcs->pins.cur;
475 if (i >= pcs->desc.npins) { 475 if (i >= pcs->desc.npins) {
476 dev_err(pcs->dev, "too many pins, max %i\n", 476 dev_err(pcs->dev, "too many pins, max %i\n",
477 pcs->desc.npins); 477 pcs->desc.npins);
478 return -ENOMEM; 478 return -ENOMEM;
479 } 479 }
480 480
481 pin = &pcs->pins.pa[i]; 481 pin = &pcs->pins.pa[i];
482 pn = &pcs->names[i]; 482 pn = &pcs->names[i];
483 sprintf(pn->name, "%lx", 483 sprintf(pn->name, "%lx",
484 (unsigned long)pcs->res->start + offset); 484 (unsigned long)pcs->res->start + offset);
485 pin->name = pn->name; 485 pin->name = pn->name;
486 pin->number = i; 486 pin->number = i;
487 pcs->pins.cur++; 487 pcs->pins.cur++;
488 488
489 return i; 489 return i;
490 } 490 }
491 491
492 /** 492 /**
493 * pcs_allocate_pin_table() - adds all the pins for the pinctrl driver 493 * pcs_allocate_pin_table() - adds all the pins for the pinctrl driver
494 * @pcs: pcs driver instance 494 * @pcs: pcs driver instance
495 * 495 *
496 * In case of errors, resources are freed in pcs_free_resources. 496 * In case of errors, resources are freed in pcs_free_resources.
497 * 497 *
498 * If your hardware needs holes in the address space, then just set 498 * If your hardware needs holes in the address space, then just set
499 * up multiple driver instances. 499 * up multiple driver instances.
500 */ 500 */
501 static int __devinit pcs_allocate_pin_table(struct pcs_device *pcs) 501 static int __devinit pcs_allocate_pin_table(struct pcs_device *pcs)
502 { 502 {
503 int mux_bytes, nr_pins, i; 503 int mux_bytes, nr_pins, i;
504 504
505 mux_bytes = pcs->width / BITS_PER_BYTE; 505 mux_bytes = pcs->width / BITS_PER_BYTE;
506 nr_pins = pcs->size / mux_bytes; 506 nr_pins = pcs->size / mux_bytes;
507 507
508 dev_dbg(pcs->dev, "allocating %i pins\n", nr_pins); 508 dev_dbg(pcs->dev, "allocating %i pins\n", nr_pins);
509 pcs->pins.pa = devm_kzalloc(pcs->dev, 509 pcs->pins.pa = devm_kzalloc(pcs->dev,
510 sizeof(*pcs->pins.pa) * nr_pins, 510 sizeof(*pcs->pins.pa) * nr_pins,
511 GFP_KERNEL); 511 GFP_KERNEL);
512 if (!pcs->pins.pa) 512 if (!pcs->pins.pa)
513 return -ENOMEM; 513 return -ENOMEM;
514 514
515 pcs->names = devm_kzalloc(pcs->dev, 515 pcs->names = devm_kzalloc(pcs->dev,
516 sizeof(struct pcs_name) * nr_pins, 516 sizeof(struct pcs_name) * nr_pins,
517 GFP_KERNEL); 517 GFP_KERNEL);
518 if (!pcs->names) 518 if (!pcs->names)
519 return -ENOMEM; 519 return -ENOMEM;
520 520
521 pcs->desc.pins = pcs->pins.pa; 521 pcs->desc.pins = pcs->pins.pa;
522 pcs->desc.npins = nr_pins; 522 pcs->desc.npins = nr_pins;
523 523
524 for (i = 0; i < pcs->desc.npins; i++) { 524 for (i = 0; i < pcs->desc.npins; i++) {
525 unsigned offset; 525 unsigned offset;
526 int res; 526 int res;
527 527
528 offset = i * mux_bytes; 528 offset = i * mux_bytes;
529 res = pcs_add_pin(pcs, offset); 529 res = pcs_add_pin(pcs, offset);
530 if (res < 0) { 530 if (res < 0) {
531 dev_err(pcs->dev, "error adding pins: %i\n", res); 531 dev_err(pcs->dev, "error adding pins: %i\n", res);
532 return res; 532 return res;
533 } 533 }
534 } 534 }
535 535
536 return 0; 536 return 0;
537 } 537 }
538 538
539 /** 539 /**
540 * pcs_add_function() - adds a new function to the function list 540 * pcs_add_function() - adds a new function to the function list
541 * @pcs: pcs driver instance 541 * @pcs: pcs driver instance
542 * @np: device node of the mux entry 542 * @np: device node of the mux entry
543 * @name: name of the function 543 * @name: name of the function
544 * @vals: array of mux register value pairs used by the function 544 * @vals: array of mux register value pairs used by the function
545 * @nvals: number of mux register value pairs 545 * @nvals: number of mux register value pairs
546 * @pgnames: array of pingroup names for the function 546 * @pgnames: array of pingroup names for the function
547 * @npgnames: number of pingroup names 547 * @npgnames: number of pingroup names
548 */ 548 */
549 static struct pcs_function *pcs_add_function(struct pcs_device *pcs, 549 static struct pcs_function *pcs_add_function(struct pcs_device *pcs,
550 struct device_node *np, 550 struct device_node *np,
551 const char *name, 551 const char *name,
552 struct pcs_func_vals *vals, 552 struct pcs_func_vals *vals,
553 unsigned nvals, 553 unsigned nvals,
554 const char **pgnames, 554 const char **pgnames,
555 unsigned npgnames) 555 unsigned npgnames)
556 { 556 {
557 struct pcs_function *function; 557 struct pcs_function *function;
558 558
559 function = devm_kzalloc(pcs->dev, sizeof(*function), GFP_KERNEL); 559 function = devm_kzalloc(pcs->dev, sizeof(*function), GFP_KERNEL);
560 if (!function) 560 if (!function)
561 return NULL; 561 return NULL;
562 562
563 function->name = name; 563 function->name = name;
564 function->vals = vals; 564 function->vals = vals;
565 function->nvals = nvals; 565 function->nvals = nvals;
566 function->pgnames = pgnames; 566 function->pgnames = pgnames;
567 function->npgnames = npgnames; 567 function->npgnames = npgnames;
568 568
569 mutex_lock(&pcs->mutex); 569 mutex_lock(&pcs->mutex);
570 list_add_tail(&function->node, &pcs->functions); 570 list_add_tail(&function->node, &pcs->functions);
571 radix_tree_insert(&pcs->ftree, pcs->nfuncs, function); 571 radix_tree_insert(&pcs->ftree, pcs->nfuncs, function);
572 pcs->nfuncs++; 572 pcs->nfuncs++;
573 mutex_unlock(&pcs->mutex); 573 mutex_unlock(&pcs->mutex);
574 574
575 return function; 575 return function;
576 } 576 }
577 577
578 static void pcs_remove_function(struct pcs_device *pcs, 578 static void pcs_remove_function(struct pcs_device *pcs,
579 struct pcs_function *function) 579 struct pcs_function *function)
580 { 580 {
581 int i; 581 int i;
582 582
583 mutex_lock(&pcs->mutex); 583 mutex_lock(&pcs->mutex);
584 for (i = 0; i < pcs->nfuncs; i++) { 584 for (i = 0; i < pcs->nfuncs; i++) {
585 struct pcs_function *found; 585 struct pcs_function *found;
586 586
587 found = radix_tree_lookup(&pcs->ftree, i); 587 found = radix_tree_lookup(&pcs->ftree, i);
588 if (found == function) 588 if (found == function)
589 radix_tree_delete(&pcs->ftree, i); 589 radix_tree_delete(&pcs->ftree, i);
590 } 590 }
591 list_del(&function->node); 591 list_del(&function->node);
592 mutex_unlock(&pcs->mutex); 592 mutex_unlock(&pcs->mutex);
593 } 593 }
594 594
595 /** 595 /**
596 * pcs_add_pingroup() - add a pingroup to the pingroup list 596 * pcs_add_pingroup() - add a pingroup to the pingroup list
597 * @pcs: pcs driver instance 597 * @pcs: pcs driver instance
598 * @np: device node of the mux entry 598 * @np: device node of the mux entry
599 * @name: name of the pingroup 599 * @name: name of the pingroup
600 * @gpins: array of the pins that belong to the group 600 * @gpins: array of the pins that belong to the group
601 * @ngpins: number of pins in the group 601 * @ngpins: number of pins in the group
602 */ 602 */
603 static int pcs_add_pingroup(struct pcs_device *pcs, 603 static int pcs_add_pingroup(struct pcs_device *pcs,
604 struct device_node *np, 604 struct device_node *np,
605 const char *name, 605 const char *name,
606 int *gpins, 606 int *gpins,
607 int ngpins) 607 int ngpins)
608 { 608 {
609 struct pcs_pingroup *pingroup; 609 struct pcs_pingroup *pingroup;
610 610
611 pingroup = devm_kzalloc(pcs->dev, sizeof(*pingroup), GFP_KERNEL); 611 pingroup = devm_kzalloc(pcs->dev, sizeof(*pingroup), GFP_KERNEL);
612 if (!pingroup) 612 if (!pingroup)
613 return -ENOMEM; 613 return -ENOMEM;
614 614
615 pingroup->name = name; 615 pingroup->name = name;
616 pingroup->np = np; 616 pingroup->np = np;
617 pingroup->gpins = gpins; 617 pingroup->gpins = gpins;
618 pingroup->ngpins = ngpins; 618 pingroup->ngpins = ngpins;
619 619
620 mutex_lock(&pcs->mutex); 620 mutex_lock(&pcs->mutex);
621 list_add_tail(&pingroup->node, &pcs->pingroups); 621 list_add_tail(&pingroup->node, &pcs->pingroups);
622 radix_tree_insert(&pcs->pgtree, pcs->ngroups, pingroup); 622 radix_tree_insert(&pcs->pgtree, pcs->ngroups, pingroup);
623 pcs->ngroups++; 623 pcs->ngroups++;
624 mutex_unlock(&pcs->mutex); 624 mutex_unlock(&pcs->mutex);
625 625
626 return 0; 626 return 0;
627 } 627 }
628 628
629 /** 629 /**
630 * pcs_get_pin_by_offset() - get a pin index based on the register offset 630 * pcs_get_pin_by_offset() - get a pin index based on the register offset
631 * @pcs: pcs driver instance 631 * @pcs: pcs driver instance
632 * @offset: register offset from the base 632 * @offset: register offset from the base
633 * 633 *
634 * Note that this is OK as long as the pins are in a static array. 634 * Note that this is OK as long as the pins are in a static array.
635 */ 635 */
636 static int pcs_get_pin_by_offset(struct pcs_device *pcs, unsigned offset) 636 static int pcs_get_pin_by_offset(struct pcs_device *pcs, unsigned offset)
637 { 637 {
638 unsigned index; 638 unsigned index;
639 639
640 if (offset >= pcs->size) { 640 if (offset >= pcs->size) {
641 dev_err(pcs->dev, "mux offset out of range: 0x%x (0x%x)\n", 641 dev_err(pcs->dev, "mux offset out of range: 0x%x (0x%x)\n",
642 offset, pcs->size); 642 offset, pcs->size);
643 return -EINVAL; 643 return -EINVAL;
644 } 644 }
645 645
646 index = offset / (pcs->width / BITS_PER_BYTE); 646 index = offset / (pcs->width / BITS_PER_BYTE);
647 647
648 return index; 648 return index;
649 } 649 }
650 650
651 /** 651 /**
652 * smux_parse_one_pinctrl_entry() - parses a device tree mux entry 652 * smux_parse_one_pinctrl_entry() - parses a device tree mux entry
653 * @pcs: pinctrl driver instance 653 * @pcs: pinctrl driver instance
654 * @np: device node of the mux entry 654 * @np: device node of the mux entry
655 * @map: map entry 655 * @map: map entry
656 * @pgnames: pingroup names 656 * @pgnames: pingroup names
657 * 657 *
658 * Note that this binding currently supports only sets of one register + value. 658 * Note that this binding currently supports only sets of one register + value.
659 * 659 *
660 * Also note that this driver tries to avoid understanding pin and function 660 * Also note that this driver tries to avoid understanding pin and function
661 * names because of the extra bloat they would cause especially in the case of 661 * names because of the extra bloat they would cause especially in the case of
662 * a large number of pins. This driver just sets what is specified for the board 662 * a large number of pins. This driver just sets what is specified for the board
663 * in the .dts file. Further user space debugging tools can be developed to 663 * in the .dts file. Further user space debugging tools can be developed to
664 * decipher the pin and function names using debugfs. 664 * decipher the pin and function names using debugfs.
665 * 665 *
666 * If you are concerned about the boot time, set up the static pins in 666 * If you are concerned about the boot time, set up the static pins in
667 * the bootloader, and only set up selected pins as device tree entries. 667 * the bootloader, and only set up selected pins as device tree entries.
668 */ 668 */
669 static int pcs_parse_one_pinctrl_entry(struct pcs_device *pcs, 669 static int pcs_parse_one_pinctrl_entry(struct pcs_device *pcs,
670 struct device_node *np, 670 struct device_node *np,
671 struct pinctrl_map **map, 671 struct pinctrl_map **map,
672 const char **pgnames) 672 const char **pgnames)
673 { 673 {
674 struct pcs_func_vals *vals; 674 struct pcs_func_vals *vals;
675 const __be32 *mux; 675 const __be32 *mux;
676 int size, params, rows, *pins, index = 0, found = 0, res = -ENOMEM; 676 int size, params, rows, *pins, index = 0, found = 0, res = -ENOMEM;
677 struct pcs_function *function; 677 struct pcs_function *function;
678 678
679 if (pcs->bits_per_mux) { 679 if (pcs->bits_per_mux) {
680 params = 3; 680 params = 3;
681 mux = of_get_property(np, PCS_MUX_BITS_NAME, &size); 681 mux = of_get_property(np, PCS_MUX_BITS_NAME, &size);
682 } else { 682 } else {
683 params = 2; 683 params = 2;
684 mux = of_get_property(np, PCS_MUX_PINS_NAME, &size); 684 mux = of_get_property(np, PCS_MUX_PINS_NAME, &size);
685 } 685 }
686 686
687 if (!mux) { 687 if (!mux) {
688 dev_err(pcs->dev, "no valid property for %s\n", np->name); 688 dev_err(pcs->dev, "no valid property for %s\n", np->name);
689 return -EINVAL; 689 return -EINVAL;
690 } 690 }
691 691
692 if (size < (sizeof(*mux) * params)) { 692 if (size < (sizeof(*mux) * params)) {
693 dev_err(pcs->dev, "bad data for %s\n", np->name); 693 dev_err(pcs->dev, "bad data for %s\n", np->name);
694 return -EINVAL; 694 return -EINVAL;
695 } 695 }
696 696
697 size /= sizeof(*mux); /* Number of elements in array */ 697 size /= sizeof(*mux); /* Number of elements in array */
698 rows = size / params; 698 rows = size / params;
699 699
700 vals = devm_kzalloc(pcs->dev, sizeof(*vals) * rows, GFP_KERNEL); 700 vals = devm_kzalloc(pcs->dev, sizeof(*vals) * rows, GFP_KERNEL);
701 if (!vals) 701 if (!vals)
702 return -ENOMEM; 702 return -ENOMEM;
703 703
704 pins = devm_kzalloc(pcs->dev, sizeof(*pins) * rows, GFP_KERNEL); 704 pins = devm_kzalloc(pcs->dev, sizeof(*pins) * rows, GFP_KERNEL);
705 if (!pins) 705 if (!pins)
706 goto free_vals; 706 goto free_vals;
707 707
708 while (index < size) { 708 while (index < size) {
709 unsigned offset, val; 709 unsigned offset, val;
710 int pin; 710 int pin;
711 711
712 offset = be32_to_cpup(mux + index++); 712 offset = be32_to_cpup(mux + index++);
713 val = be32_to_cpup(mux + index++); 713 val = be32_to_cpup(mux + index++);
714 vals[found].reg = pcs->base + offset; 714 vals[found].reg = pcs->base + offset;
715 vals[found].val = val; 715 vals[found].val = val;
716 if (params == 3) { 716 if (params == 3) {
717 val = be32_to_cpup(mux + index++); 717 val = be32_to_cpup(mux + index++);
718 vals[found].mask = val; 718 vals[found].mask = val;
719 } 719 }
720 720
721 pin = pcs_get_pin_by_offset(pcs, offset); 721 pin = pcs_get_pin_by_offset(pcs, offset);
722 if (pin < 0) { 722 if (pin < 0) {
723 dev_err(pcs->dev, 723 dev_err(pcs->dev,
724 "could not add functions for %s %ux\n", 724 "could not add functions for %s %ux\n",
725 np->name, offset); 725 np->name, offset);
726 break; 726 break;
727 } 727 }
728 pins[found++] = pin; 728 pins[found++] = pin;
729 } 729 }
730 730
731 pgnames[0] = np->name; 731 pgnames[0] = np->name;
732 function = pcs_add_function(pcs, np, np->name, vals, found, pgnames, 1); 732 function = pcs_add_function(pcs, np, np->name, vals, found, pgnames, 1);
733 if (!function) 733 if (!function)
734 goto free_pins; 734 goto free_pins;
735 735
736 res = pcs_add_pingroup(pcs, np, np->name, pins, found); 736 res = pcs_add_pingroup(pcs, np, np->name, pins, found);
737 if (res < 0) 737 if (res < 0)
738 goto free_function; 738 goto free_function;
739 739
740 (*map)->type = PIN_MAP_TYPE_MUX_GROUP; 740 (*map)->type = PIN_MAP_TYPE_MUX_GROUP;
741 (*map)->data.mux.group = np->name; 741 (*map)->data.mux.group = np->name;
742 (*map)->data.mux.function = np->name; 742 (*map)->data.mux.function = np->name;
743 743
744 return 0; 744 return 0;
745 745
746 free_function: 746 free_function:
747 pcs_remove_function(pcs, function); 747 pcs_remove_function(pcs, function);
748 748
749 free_pins: 749 free_pins:
750 devm_kfree(pcs->dev, pins); 750 devm_kfree(pcs->dev, pins);
751 751
752 free_vals: 752 free_vals:
753 devm_kfree(pcs->dev, vals); 753 devm_kfree(pcs->dev, vals);
754 754
755 return res; 755 return res;
756 } 756 }
757 /** 757 /**
758 * pcs_dt_node_to_map() - allocates and parses pinctrl maps 758 * pcs_dt_node_to_map() - allocates and parses pinctrl maps
759 * @pctldev: pinctrl instance 759 * @pctldev: pinctrl instance
760 * @np_config: device tree pinmux entry 760 * @np_config: device tree pinmux entry
761 * @map: array of map entries 761 * @map: array of map entries
762 * @num_maps: number of maps 762 * @num_maps: number of maps
763 */ 763 */
764 static int pcs_dt_node_to_map(struct pinctrl_dev *pctldev, 764 static int pcs_dt_node_to_map(struct pinctrl_dev *pctldev,
765 struct device_node *np_config, 765 struct device_node *np_config,
766 struct pinctrl_map **map, unsigned *num_maps) 766 struct pinctrl_map **map, unsigned *num_maps)
767 { 767 {
768 struct pcs_device *pcs; 768 struct pcs_device *pcs;
769 const char **pgnames; 769 const char **pgnames;
770 int ret; 770 int ret;
771 771
772 pcs = pinctrl_dev_get_drvdata(pctldev); 772 pcs = pinctrl_dev_get_drvdata(pctldev);
773 773
774 *map = devm_kzalloc(pcs->dev, sizeof(**map), GFP_KERNEL); 774 *map = devm_kzalloc(pcs->dev, sizeof(**map), GFP_KERNEL);
775 if (!map) 775 if (!map)
776 return -ENOMEM; 776 return -ENOMEM;
777 777
778 *num_maps = 0; 778 *num_maps = 0;
779 779
780 pgnames = devm_kzalloc(pcs->dev, sizeof(*pgnames), GFP_KERNEL); 780 pgnames = devm_kzalloc(pcs->dev, sizeof(*pgnames), GFP_KERNEL);
781 if (!pgnames) { 781 if (!pgnames) {
782 ret = -ENOMEM; 782 ret = -ENOMEM;
783 goto free_map; 783 goto free_map;
784 } 784 }
785 785
786 ret = pcs_parse_one_pinctrl_entry(pcs, np_config, map, pgnames); 786 ret = pcs_parse_one_pinctrl_entry(pcs, np_config, map, pgnames);
787 if (ret < 0) { 787 if (ret < 0) {
788 dev_err(pcs->dev, "no pins entries for %s\n", 788 dev_err(pcs->dev, "no pins entries for %s\n",
789 np_config->name); 789 np_config->name);
790 goto free_pgnames; 790 goto free_pgnames;
791 } 791 }
792 *num_maps = 1; 792 *num_maps = 1;
793 793
794 return 0; 794 return 0;
795 795
796 free_pgnames: 796 free_pgnames:
797 devm_kfree(pcs->dev, pgnames); 797 devm_kfree(pcs->dev, pgnames);
798 free_map: 798 free_map:
799 devm_kfree(pcs->dev, *map); 799 devm_kfree(pcs->dev, *map);
800 800
801 return ret; 801 return ret;
802 } 802 }
803 803
804 /** 804 /**
805 * pcs_free_funcs() - free memory used by functions 805 * pcs_free_funcs() - free memory used by functions
806 * @pcs: pcs driver instance 806 * @pcs: pcs driver instance
807 */ 807 */
808 static void pcs_free_funcs(struct pcs_device *pcs) 808 static void pcs_free_funcs(struct pcs_device *pcs)
809 { 809 {
810 struct list_head *pos, *tmp; 810 struct list_head *pos, *tmp;
811 int i; 811 int i;
812 812
813 mutex_lock(&pcs->mutex); 813 mutex_lock(&pcs->mutex);
814 for (i = 0; i < pcs->nfuncs; i++) { 814 for (i = 0; i < pcs->nfuncs; i++) {
815 struct pcs_function *func; 815 struct pcs_function *func;
816 816
817 func = radix_tree_lookup(&pcs->ftree, i); 817 func = radix_tree_lookup(&pcs->ftree, i);
818 if (!func) 818 if (!func)
819 continue; 819 continue;
820 radix_tree_delete(&pcs->ftree, i); 820 radix_tree_delete(&pcs->ftree, i);
821 } 821 }
822 list_for_each_safe(pos, tmp, &pcs->functions) { 822 list_for_each_safe(pos, tmp, &pcs->functions) {
823 struct pcs_function *function; 823 struct pcs_function *function;
824 824
825 function = list_entry(pos, struct pcs_function, node); 825 function = list_entry(pos, struct pcs_function, node);
826 list_del(&function->node); 826 list_del(&function->node);
827 } 827 }
828 mutex_unlock(&pcs->mutex); 828 mutex_unlock(&pcs->mutex);
829 } 829 }
830 830
831 /** 831 /**
832 * pcs_free_pingroups() - free memory used by pingroups 832 * pcs_free_pingroups() - free memory used by pingroups
833 * @pcs: pcs driver instance 833 * @pcs: pcs driver instance
834 */ 834 */
835 static void pcs_free_pingroups(struct pcs_device *pcs) 835 static void pcs_free_pingroups(struct pcs_device *pcs)
836 { 836 {
837 struct list_head *pos, *tmp; 837 struct list_head *pos, *tmp;
838 int i; 838 int i;
839 839
840 mutex_lock(&pcs->mutex); 840 mutex_lock(&pcs->mutex);
841 for (i = 0; i < pcs->ngroups; i++) { 841 for (i = 0; i < pcs->ngroups; i++) {
842 struct pcs_pingroup *pingroup; 842 struct pcs_pingroup *pingroup;
843 843
844 pingroup = radix_tree_lookup(&pcs->pgtree, i); 844 pingroup = radix_tree_lookup(&pcs->pgtree, i);
845 if (!pingroup) 845 if (!pingroup)
846 continue; 846 continue;
847 radix_tree_delete(&pcs->pgtree, i); 847 radix_tree_delete(&pcs->pgtree, i);
848 } 848 }
849 list_for_each_safe(pos, tmp, &pcs->pingroups) { 849 list_for_each_safe(pos, tmp, &pcs->pingroups) {
850 struct pcs_pingroup *pingroup; 850 struct pcs_pingroup *pingroup;
851 851
852 pingroup = list_entry(pos, struct pcs_pingroup, node); 852 pingroup = list_entry(pos, struct pcs_pingroup, node);
853 list_del(&pingroup->node); 853 list_del(&pingroup->node);
854 } 854 }
855 mutex_unlock(&pcs->mutex); 855 mutex_unlock(&pcs->mutex);
856 } 856 }
857 857
858 /** 858 /**
859 * pcs_free_resources() - free memory used by this driver 859 * pcs_free_resources() - free memory used by this driver
860 * @pcs: pcs driver instance 860 * @pcs: pcs driver instance
861 */ 861 */
862 static void pcs_free_resources(struct pcs_device *pcs) 862 static void pcs_free_resources(struct pcs_device *pcs)
863 { 863 {
864 if (pcs->pctl) 864 if (pcs->pctl)
865 pinctrl_unregister(pcs->pctl); 865 pinctrl_unregister(pcs->pctl);
866 866
867 pcs_free_funcs(pcs); 867 pcs_free_funcs(pcs);
868 pcs_free_pingroups(pcs); 868 pcs_free_pingroups(pcs);
869 } 869 }
870 870
871 #define PCS_GET_PROP_U32(name, reg, err) \ 871 #define PCS_GET_PROP_U32(name, reg, err) \
872 do { \ 872 do { \
873 ret = of_property_read_u32(np, name, reg); \ 873 ret = of_property_read_u32(np, name, reg); \
874 if (ret) { \ 874 if (ret) { \
875 dev_err(pcs->dev, err); \ 875 dev_err(pcs->dev, err); \
876 return ret; \ 876 return ret; \
877 } \ 877 } \
878 } while (0); 878 } while (0);
879 879
880 static struct of_device_id pcs_of_match[]; 880 static struct of_device_id pcs_of_match[];
881 881
882 static int __devinit pcs_probe(struct platform_device *pdev) 882 static int __devinit pcs_probe(struct platform_device *pdev)
883 { 883 {
884 struct device_node *np = pdev->dev.of_node; 884 struct device_node *np = pdev->dev.of_node;
885 const struct of_device_id *match; 885 const struct of_device_id *match;
886 struct resource *res; 886 struct resource *res;
887 struct pcs_device *pcs; 887 struct pcs_device *pcs;
888 int ret; 888 int ret;
889 889
890 match = of_match_device(pcs_of_match, &pdev->dev); 890 match = of_match_device(pcs_of_match, &pdev->dev);
891 if (!match) 891 if (!match)
892 return -EINVAL; 892 return -EINVAL;
893 893
894 pcs = devm_kzalloc(&pdev->dev, sizeof(*pcs), GFP_KERNEL); 894 pcs = devm_kzalloc(&pdev->dev, sizeof(*pcs), GFP_KERNEL);
895 if (!pcs) { 895 if (!pcs) {
896 dev_err(&pdev->dev, "could not allocate\n"); 896 dev_err(&pdev->dev, "could not allocate\n");
897 return -ENOMEM; 897 return -ENOMEM;
898 } 898 }
899 pcs->dev = &pdev->dev; 899 pcs->dev = &pdev->dev;
900 mutex_init(&pcs->mutex); 900 mutex_init(&pcs->mutex);
901 INIT_LIST_HEAD(&pcs->pingroups); 901 INIT_LIST_HEAD(&pcs->pingroups);
902 INIT_LIST_HEAD(&pcs->functions); 902 INIT_LIST_HEAD(&pcs->functions);
903 903
904 PCS_GET_PROP_U32("pinctrl-single,register-width", &pcs->width, 904 PCS_GET_PROP_U32("pinctrl-single,register-width", &pcs->width,
905 "register width not specified\n"); 905 "register width not specified\n");
906 906
907 PCS_GET_PROP_U32("pinctrl-single,function-mask", &pcs->fmask, 907 PCS_GET_PROP_U32("pinctrl-single,function-mask", &pcs->fmask,
908 "function register mask not specified\n"); 908 "function register mask not specified\n");
909 pcs->fshift = ffs(pcs->fmask) - 1; 909 pcs->fshift = ffs(pcs->fmask) - 1;
910 pcs->fmax = pcs->fmask >> pcs->fshift; 910 pcs->fmax = pcs->fmask >> pcs->fshift;
911 911
912 ret = of_property_read_u32(np, "pinctrl-single,function-off", 912 ret = of_property_read_u32(np, "pinctrl-single,function-off",
913 &pcs->foff); 913 &pcs->foff);
914 if (ret) 914 if (ret)
915 pcs->foff = PCS_OFF_DISABLED; 915 pcs->foff = PCS_OFF_DISABLED;
916 916
917 pcs->bits_per_mux = of_property_read_bool(np, 917 pcs->bits_per_mux = of_property_read_bool(np,
918 "pinctrl-single,bit-per-mux"); 918 "pinctrl-single,bit-per-mux");
919 919
920 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 920 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
921 if (!res) { 921 if (!res) {
922 dev_err(pcs->dev, "could not get resource\n"); 922 dev_err(pcs->dev, "could not get resource\n");
923 return -ENODEV; 923 return -ENODEV;
924 } 924 }
925 925
926 pcs->res = devm_request_mem_region(pcs->dev, res->start, 926 pcs->res = devm_request_mem_region(pcs->dev, res->start,
927 resource_size(res), DRIVER_NAME); 927 resource_size(res), DRIVER_NAME);
928 if (!pcs->res) { 928 if (!pcs->res) {
929 dev_err(pcs->dev, "could not get mem_region\n"); 929 dev_err(pcs->dev, "could not get mem_region\n");
930 return -EBUSY; 930 return -EBUSY;
931 } 931 }
932 932
933 pcs->size = resource_size(pcs->res); 933 pcs->size = resource_size(pcs->res);
934 pcs->base = devm_ioremap(pcs->dev, pcs->res->start, pcs->size); 934 pcs->base = devm_ioremap(pcs->dev, pcs->res->start, pcs->size);
935 if (!pcs->base) { 935 if (!pcs->base) {
936 dev_err(pcs->dev, "could not ioremap\n"); 936 dev_err(pcs->dev, "could not ioremap\n");
937 return -ENODEV; 937 return -ENODEV;
938 } 938 }
939 939
940 INIT_RADIX_TREE(&pcs->pgtree, GFP_KERNEL); 940 INIT_RADIX_TREE(&pcs->pgtree, GFP_KERNEL);
941 INIT_RADIX_TREE(&pcs->ftree, GFP_KERNEL); 941 INIT_RADIX_TREE(&pcs->ftree, GFP_KERNEL);
942 platform_set_drvdata(pdev, pcs); 942 platform_set_drvdata(pdev, pcs);
943 943
944 switch (pcs->width) { 944 switch (pcs->width) {
945 case 8: 945 case 8:
946 pcs->read = pcs_readb; 946 pcs->read = pcs_readb;
947 pcs->write = pcs_writeb; 947 pcs->write = pcs_writeb;
948 break; 948 break;
949 case 16: 949 case 16:
950 pcs->read = pcs_readw; 950 pcs->read = pcs_readw;
951 pcs->write = pcs_writew; 951 pcs->write = pcs_writew;
952 break; 952 break;
953 case 32: 953 case 32:
954 pcs->read = pcs_readl; 954 pcs->read = pcs_readl;
955 pcs->write = pcs_writel; 955 pcs->write = pcs_writel;
956 break; 956 break;
957 default: 957 default:
958 break; 958 break;
959 } 959 }
960 960
961 pcs->desc.name = DRIVER_NAME; 961 pcs->desc.name = DRIVER_NAME;
962 pcs->desc.pctlops = &pcs_pinctrl_ops; 962 pcs->desc.pctlops = &pcs_pinctrl_ops;
963 pcs->desc.pmxops = &pcs_pinmux_ops; 963 pcs->desc.pmxops = &pcs_pinmux_ops;
964 pcs->desc.confops = &pcs_pinconf_ops; 964 pcs->desc.confops = &pcs_pinconf_ops;
965 pcs->desc.owner = THIS_MODULE; 965 pcs->desc.owner = THIS_MODULE;
966 966
967 ret = pcs_allocate_pin_table(pcs); 967 ret = pcs_allocate_pin_table(pcs);
968 if (ret < 0) 968 if (ret < 0)
969 goto free; 969 goto free;
970 970
971 pcs->pctl = pinctrl_register(&pcs->desc, pcs->dev, pcs); 971 pcs->pctl = pinctrl_register(&pcs->desc, pcs->dev, pcs);
972 if (!pcs->pctl) { 972 if (!pcs->pctl) {
973 dev_err(pcs->dev, "could not register single pinctrl driver\n"); 973 dev_err(pcs->dev, "could not register single pinctrl driver\n");
974 ret = -EINVAL; 974 ret = -EINVAL;
975 goto free; 975 goto free;
976 } 976 }
977 977
978 dev_info(pcs->dev, "%i pins at pa %p size %u\n", 978 dev_info(pcs->dev, "%i pins at pa %p size %u\n",
979 pcs->desc.npins, pcs->base, pcs->size); 979 pcs->desc.npins, pcs->base, pcs->size);
980 980
981 return 0; 981 return 0;
982 982
983 free: 983 free:
984 pcs_free_resources(pcs); 984 pcs_free_resources(pcs);
985 985
986 return ret; 986 return ret;
987 } 987 }
988 988
989 static int __devexit pcs_remove(struct platform_device *pdev) 989 static int pcs_remove(struct platform_device *pdev)
990 { 990 {
991 struct pcs_device *pcs = platform_get_drvdata(pdev); 991 struct pcs_device *pcs = platform_get_drvdata(pdev);
992 992
993 if (!pcs) 993 if (!pcs)
994 return 0; 994 return 0;
995 995
996 pcs_free_resources(pcs); 996 pcs_free_resources(pcs);
997 997
998 return 0; 998 return 0;
999 } 999 }
1000 1000
1001 static struct of_device_id pcs_of_match[] = { 1001 static struct of_device_id pcs_of_match[] = {
1002 { .compatible = DRIVER_NAME, }, 1002 { .compatible = DRIVER_NAME, },
1003 { }, 1003 { },
1004 }; 1004 };
1005 MODULE_DEVICE_TABLE(of, pcs_of_match); 1005 MODULE_DEVICE_TABLE(of, pcs_of_match);
1006 1006
1007 static struct platform_driver pcs_driver = { 1007 static struct platform_driver pcs_driver = {
1008 .probe = pcs_probe, 1008 .probe = pcs_probe,
1009 .remove = pcs_remove, 1009 .remove = pcs_remove,
1010 .driver = { 1010 .driver = {
1011 .owner = THIS_MODULE, 1011 .owner = THIS_MODULE,
1012 .name = DRIVER_NAME, 1012 .name = DRIVER_NAME,
1013 .of_match_table = pcs_of_match, 1013 .of_match_table = pcs_of_match,
1014 }, 1014 },
1015 }; 1015 };
1016 1016
1017 module_platform_driver(pcs_driver); 1017 module_platform_driver(pcs_driver);
1018 1018
1019 MODULE_AUTHOR("Tony Lindgren <tony@atomide.com>"); 1019 MODULE_AUTHOR("Tony Lindgren <tony@atomide.com>");
1020 MODULE_DESCRIPTION("One-register-per-pin type device tree based pinctrl driver"); 1020 MODULE_DESCRIPTION("One-register-per-pin type device tree based pinctrl driver");
1021 MODULE_LICENSE("GPL v2"); 1021 MODULE_LICENSE("GPL v2");
1022 1022
drivers/pinctrl/pinctrl-tegra.c
1 /* 1 /*
2 * Driver for the NVIDIA Tegra pinmux 2 * Driver for the NVIDIA Tegra pinmux
3 * 3 *
4 * Copyright (c) 2011-2012, NVIDIA CORPORATION. All rights reserved. 4 * Copyright (c) 2011-2012, NVIDIA CORPORATION. All rights reserved.
5 * 5 *
6 * Derived from code: 6 * Derived from code:
7 * Copyright (C) 2010 Google, Inc. 7 * Copyright (C) 2010 Google, Inc.
8 * Copyright (C) 2010 NVIDIA Corporation 8 * Copyright (C) 2010 NVIDIA Corporation
9 * Copyright (C) 2009-2011 ST-Ericsson AB 9 * Copyright (C) 2009-2011 ST-Ericsson AB
10 * 10 *
11 * This program is free software; you can redistribute it and/or modify it 11 * This program is free software; you can redistribute it and/or modify it
12 * under the terms and conditions of the GNU General Public License, 12 * under the terms and conditions of the GNU General Public License,
13 * version 2, as published by the Free Software Foundation. 13 * version 2, as published by the Free Software Foundation.
14 * 14 *
15 * This program is distributed in the hope it will be useful, but WITHOUT 15 * This program is distributed in the hope it will be useful, but WITHOUT
16 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 16 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
17 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 17 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
18 * more details. 18 * more details.
19 */ 19 */
20 20
21 #include <linux/err.h> 21 #include <linux/err.h>
22 #include <linux/init.h> 22 #include <linux/init.h>
23 #include <linux/io.h> 23 #include <linux/io.h>
24 #include <linux/module.h> 24 #include <linux/module.h>
25 #include <linux/of.h> 25 #include <linux/of.h>
26 #include <linux/platform_device.h> 26 #include <linux/platform_device.h>
27 #include <linux/pinctrl/machine.h> 27 #include <linux/pinctrl/machine.h>
28 #include <linux/pinctrl/pinctrl.h> 28 #include <linux/pinctrl/pinctrl.h>
29 #include <linux/pinctrl/pinmux.h> 29 #include <linux/pinctrl/pinmux.h>
30 #include <linux/pinctrl/pinconf.h> 30 #include <linux/pinctrl/pinconf.h>
31 #include <linux/slab.h> 31 #include <linux/slab.h>
32 32
33 #include "core.h" 33 #include "core.h"
34 #include "pinctrl-tegra.h" 34 #include "pinctrl-tegra.h"
35 35
36 struct tegra_pmx { 36 struct tegra_pmx {
37 struct device *dev; 37 struct device *dev;
38 struct pinctrl_dev *pctl; 38 struct pinctrl_dev *pctl;
39 39
40 const struct tegra_pinctrl_soc_data *soc; 40 const struct tegra_pinctrl_soc_data *soc;
41 41
42 int nbanks; 42 int nbanks;
43 void __iomem **regs; 43 void __iomem **regs;
44 }; 44 };
45 45
46 static inline u32 pmx_readl(struct tegra_pmx *pmx, u32 bank, u32 reg) 46 static inline u32 pmx_readl(struct tegra_pmx *pmx, u32 bank, u32 reg)
47 { 47 {
48 return readl(pmx->regs[bank] + reg); 48 return readl(pmx->regs[bank] + reg);
49 } 49 }
50 50
51 static inline void pmx_writel(struct tegra_pmx *pmx, u32 val, u32 bank, u32 reg) 51 static inline void pmx_writel(struct tegra_pmx *pmx, u32 val, u32 bank, u32 reg)
52 { 52 {
53 writel(val, pmx->regs[bank] + reg); 53 writel(val, pmx->regs[bank] + reg);
54 } 54 }
55 55
56 static int tegra_pinctrl_get_groups_count(struct pinctrl_dev *pctldev) 56 static int tegra_pinctrl_get_groups_count(struct pinctrl_dev *pctldev)
57 { 57 {
58 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 58 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
59 59
60 return pmx->soc->ngroups; 60 return pmx->soc->ngroups;
61 } 61 }
62 62
63 static const char *tegra_pinctrl_get_group_name(struct pinctrl_dev *pctldev, 63 static const char *tegra_pinctrl_get_group_name(struct pinctrl_dev *pctldev,
64 unsigned group) 64 unsigned group)
65 { 65 {
66 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 66 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
67 67
68 return pmx->soc->groups[group].name; 68 return pmx->soc->groups[group].name;
69 } 69 }
70 70
71 static int tegra_pinctrl_get_group_pins(struct pinctrl_dev *pctldev, 71 static int tegra_pinctrl_get_group_pins(struct pinctrl_dev *pctldev,
72 unsigned group, 72 unsigned group,
73 const unsigned **pins, 73 const unsigned **pins,
74 unsigned *num_pins) 74 unsigned *num_pins)
75 { 75 {
76 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 76 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
77 77
78 *pins = pmx->soc->groups[group].pins; 78 *pins = pmx->soc->groups[group].pins;
79 *num_pins = pmx->soc->groups[group].npins; 79 *num_pins = pmx->soc->groups[group].npins;
80 80
81 return 0; 81 return 0;
82 } 82 }
83 83
84 #ifdef CONFIG_DEBUG_FS 84 #ifdef CONFIG_DEBUG_FS
85 static void tegra_pinctrl_pin_dbg_show(struct pinctrl_dev *pctldev, 85 static void tegra_pinctrl_pin_dbg_show(struct pinctrl_dev *pctldev,
86 struct seq_file *s, 86 struct seq_file *s,
87 unsigned offset) 87 unsigned offset)
88 { 88 {
89 seq_printf(s, " %s", dev_name(pctldev->dev)); 89 seq_printf(s, " %s", dev_name(pctldev->dev));
90 } 90 }
91 #endif 91 #endif
92 92
93 static int reserve_map(struct device *dev, struct pinctrl_map **map, 93 static int reserve_map(struct device *dev, struct pinctrl_map **map,
94 unsigned *reserved_maps, unsigned *num_maps, 94 unsigned *reserved_maps, unsigned *num_maps,
95 unsigned reserve) 95 unsigned reserve)
96 { 96 {
97 unsigned old_num = *reserved_maps; 97 unsigned old_num = *reserved_maps;
98 unsigned new_num = *num_maps + reserve; 98 unsigned new_num = *num_maps + reserve;
99 struct pinctrl_map *new_map; 99 struct pinctrl_map *new_map;
100 100
101 if (old_num >= new_num) 101 if (old_num >= new_num)
102 return 0; 102 return 0;
103 103
104 new_map = krealloc(*map, sizeof(*new_map) * new_num, GFP_KERNEL); 104 new_map = krealloc(*map, sizeof(*new_map) * new_num, GFP_KERNEL);
105 if (!new_map) { 105 if (!new_map) {
106 dev_err(dev, "krealloc(map) failed\n"); 106 dev_err(dev, "krealloc(map) failed\n");
107 return -ENOMEM; 107 return -ENOMEM;
108 } 108 }
109 109
110 memset(new_map + old_num, 0, (new_num - old_num) * sizeof(*new_map)); 110 memset(new_map + old_num, 0, (new_num - old_num) * sizeof(*new_map));
111 111
112 *map = new_map; 112 *map = new_map;
113 *reserved_maps = new_num; 113 *reserved_maps = new_num;
114 114
115 return 0; 115 return 0;
116 } 116 }
117 117
118 static int add_map_mux(struct pinctrl_map **map, unsigned *reserved_maps, 118 static int add_map_mux(struct pinctrl_map **map, unsigned *reserved_maps,
119 unsigned *num_maps, const char *group, 119 unsigned *num_maps, const char *group,
120 const char *function) 120 const char *function)
121 { 121 {
122 if (WARN_ON(*num_maps == *reserved_maps)) 122 if (WARN_ON(*num_maps == *reserved_maps))
123 return -ENOSPC; 123 return -ENOSPC;
124 124
125 (*map)[*num_maps].type = PIN_MAP_TYPE_MUX_GROUP; 125 (*map)[*num_maps].type = PIN_MAP_TYPE_MUX_GROUP;
126 (*map)[*num_maps].data.mux.group = group; 126 (*map)[*num_maps].data.mux.group = group;
127 (*map)[*num_maps].data.mux.function = function; 127 (*map)[*num_maps].data.mux.function = function;
128 (*num_maps)++; 128 (*num_maps)++;
129 129
130 return 0; 130 return 0;
131 } 131 }
132 132
133 static int add_map_configs(struct device *dev, struct pinctrl_map **map, 133 static int add_map_configs(struct device *dev, struct pinctrl_map **map,
134 unsigned *reserved_maps, unsigned *num_maps, 134 unsigned *reserved_maps, unsigned *num_maps,
135 const char *group, unsigned long *configs, 135 const char *group, unsigned long *configs,
136 unsigned num_configs) 136 unsigned num_configs)
137 { 137 {
138 unsigned long *dup_configs; 138 unsigned long *dup_configs;
139 139
140 if (WARN_ON(*num_maps == *reserved_maps)) 140 if (WARN_ON(*num_maps == *reserved_maps))
141 return -ENOSPC; 141 return -ENOSPC;
142 142
143 dup_configs = kmemdup(configs, num_configs * sizeof(*dup_configs), 143 dup_configs = kmemdup(configs, num_configs * sizeof(*dup_configs),
144 GFP_KERNEL); 144 GFP_KERNEL);
145 if (!dup_configs) { 145 if (!dup_configs) {
146 dev_err(dev, "kmemdup(configs) failed\n"); 146 dev_err(dev, "kmemdup(configs) failed\n");
147 return -ENOMEM; 147 return -ENOMEM;
148 } 148 }
149 149
150 (*map)[*num_maps].type = PIN_MAP_TYPE_CONFIGS_GROUP; 150 (*map)[*num_maps].type = PIN_MAP_TYPE_CONFIGS_GROUP;
151 (*map)[*num_maps].data.configs.group_or_pin = group; 151 (*map)[*num_maps].data.configs.group_or_pin = group;
152 (*map)[*num_maps].data.configs.configs = dup_configs; 152 (*map)[*num_maps].data.configs.configs = dup_configs;
153 (*map)[*num_maps].data.configs.num_configs = num_configs; 153 (*map)[*num_maps].data.configs.num_configs = num_configs;
154 (*num_maps)++; 154 (*num_maps)++;
155 155
156 return 0; 156 return 0;
157 } 157 }
158 158
159 static int add_config(struct device *dev, unsigned long **configs, 159 static int add_config(struct device *dev, unsigned long **configs,
160 unsigned *num_configs, unsigned long config) 160 unsigned *num_configs, unsigned long config)
161 { 161 {
162 unsigned old_num = *num_configs; 162 unsigned old_num = *num_configs;
163 unsigned new_num = old_num + 1; 163 unsigned new_num = old_num + 1;
164 unsigned long *new_configs; 164 unsigned long *new_configs;
165 165
166 new_configs = krealloc(*configs, sizeof(*new_configs) * new_num, 166 new_configs = krealloc(*configs, sizeof(*new_configs) * new_num,
167 GFP_KERNEL); 167 GFP_KERNEL);
168 if (!new_configs) { 168 if (!new_configs) {
169 dev_err(dev, "krealloc(configs) failed\n"); 169 dev_err(dev, "krealloc(configs) failed\n");
170 return -ENOMEM; 170 return -ENOMEM;
171 } 171 }
172 172
173 new_configs[old_num] = config; 173 new_configs[old_num] = config;
174 174
175 *configs = new_configs; 175 *configs = new_configs;
176 *num_configs = new_num; 176 *num_configs = new_num;
177 177
178 return 0; 178 return 0;
179 } 179 }
180 180
181 void tegra_pinctrl_dt_free_map(struct pinctrl_dev *pctldev, 181 void tegra_pinctrl_dt_free_map(struct pinctrl_dev *pctldev,
182 struct pinctrl_map *map, unsigned num_maps) 182 struct pinctrl_map *map, unsigned num_maps)
183 { 183 {
184 int i; 184 int i;
185 185
186 for (i = 0; i < num_maps; i++) 186 for (i = 0; i < num_maps; i++)
187 if (map[i].type == PIN_MAP_TYPE_CONFIGS_GROUP) 187 if (map[i].type == PIN_MAP_TYPE_CONFIGS_GROUP)
188 kfree(map[i].data.configs.configs); 188 kfree(map[i].data.configs.configs);
189 189
190 kfree(map); 190 kfree(map);
191 } 191 }
192 192
193 static const struct cfg_param { 193 static const struct cfg_param {
194 const char *property; 194 const char *property;
195 enum tegra_pinconf_param param; 195 enum tegra_pinconf_param param;
196 } cfg_params[] = { 196 } cfg_params[] = {
197 {"nvidia,pull", TEGRA_PINCONF_PARAM_PULL}, 197 {"nvidia,pull", TEGRA_PINCONF_PARAM_PULL},
198 {"nvidia,tristate", TEGRA_PINCONF_PARAM_TRISTATE}, 198 {"nvidia,tristate", TEGRA_PINCONF_PARAM_TRISTATE},
199 {"nvidia,enable-input", TEGRA_PINCONF_PARAM_ENABLE_INPUT}, 199 {"nvidia,enable-input", TEGRA_PINCONF_PARAM_ENABLE_INPUT},
200 {"nvidia,open-drain", TEGRA_PINCONF_PARAM_OPEN_DRAIN}, 200 {"nvidia,open-drain", TEGRA_PINCONF_PARAM_OPEN_DRAIN},
201 {"nvidia,lock", TEGRA_PINCONF_PARAM_LOCK}, 201 {"nvidia,lock", TEGRA_PINCONF_PARAM_LOCK},
202 {"nvidia,io-reset", TEGRA_PINCONF_PARAM_IORESET}, 202 {"nvidia,io-reset", TEGRA_PINCONF_PARAM_IORESET},
203 {"nvidia,high-speed-mode", TEGRA_PINCONF_PARAM_HIGH_SPEED_MODE}, 203 {"nvidia,high-speed-mode", TEGRA_PINCONF_PARAM_HIGH_SPEED_MODE},
204 {"nvidia,schmitt", TEGRA_PINCONF_PARAM_SCHMITT}, 204 {"nvidia,schmitt", TEGRA_PINCONF_PARAM_SCHMITT},
205 {"nvidia,low-power-mode", TEGRA_PINCONF_PARAM_LOW_POWER_MODE}, 205 {"nvidia,low-power-mode", TEGRA_PINCONF_PARAM_LOW_POWER_MODE},
206 {"nvidia,pull-down-strength", TEGRA_PINCONF_PARAM_DRIVE_DOWN_STRENGTH}, 206 {"nvidia,pull-down-strength", TEGRA_PINCONF_PARAM_DRIVE_DOWN_STRENGTH},
207 {"nvidia,pull-up-strength", TEGRA_PINCONF_PARAM_DRIVE_UP_STRENGTH}, 207 {"nvidia,pull-up-strength", TEGRA_PINCONF_PARAM_DRIVE_UP_STRENGTH},
208 {"nvidia,slew-rate-falling", TEGRA_PINCONF_PARAM_SLEW_RATE_FALLING}, 208 {"nvidia,slew-rate-falling", TEGRA_PINCONF_PARAM_SLEW_RATE_FALLING},
209 {"nvidia,slew-rate-rising", TEGRA_PINCONF_PARAM_SLEW_RATE_RISING}, 209 {"nvidia,slew-rate-rising", TEGRA_PINCONF_PARAM_SLEW_RATE_RISING},
210 }; 210 };
211 211
212 int tegra_pinctrl_dt_subnode_to_map(struct device *dev, 212 int tegra_pinctrl_dt_subnode_to_map(struct device *dev,
213 struct device_node *np, 213 struct device_node *np,
214 struct pinctrl_map **map, 214 struct pinctrl_map **map,
215 unsigned *reserved_maps, 215 unsigned *reserved_maps,
216 unsigned *num_maps) 216 unsigned *num_maps)
217 { 217 {
218 int ret, i; 218 int ret, i;
219 const char *function; 219 const char *function;
220 u32 val; 220 u32 val;
221 unsigned long config; 221 unsigned long config;
222 unsigned long *configs = NULL; 222 unsigned long *configs = NULL;
223 unsigned num_configs = 0; 223 unsigned num_configs = 0;
224 unsigned reserve; 224 unsigned reserve;
225 struct property *prop; 225 struct property *prop;
226 const char *group; 226 const char *group;
227 227
228 ret = of_property_read_string(np, "nvidia,function", &function); 228 ret = of_property_read_string(np, "nvidia,function", &function);
229 if (ret < 0) { 229 if (ret < 0) {
230 /* EINVAL=missing, which is fine since it's optional */ 230 /* EINVAL=missing, which is fine since it's optional */
231 if (ret != -EINVAL) 231 if (ret != -EINVAL)
232 dev_err(dev, 232 dev_err(dev,
233 "could not parse property nvidia,function\n"); 233 "could not parse property nvidia,function\n");
234 function = NULL; 234 function = NULL;
235 } 235 }
236 236
237 for (i = 0; i < ARRAY_SIZE(cfg_params); i++) { 237 for (i = 0; i < ARRAY_SIZE(cfg_params); i++) {
238 ret = of_property_read_u32(np, cfg_params[i].property, &val); 238 ret = of_property_read_u32(np, cfg_params[i].property, &val);
239 if (!ret) { 239 if (!ret) {
240 config = TEGRA_PINCONF_PACK(cfg_params[i].param, val); 240 config = TEGRA_PINCONF_PACK(cfg_params[i].param, val);
241 ret = add_config(dev, &configs, &num_configs, config); 241 ret = add_config(dev, &configs, &num_configs, config);
242 if (ret < 0) 242 if (ret < 0)
243 goto exit; 243 goto exit;
244 /* EINVAL=missing, which is fine since it's optional */ 244 /* EINVAL=missing, which is fine since it's optional */
245 } else if (ret != -EINVAL) { 245 } else if (ret != -EINVAL) {
246 dev_err(dev, "could not parse property %s\n", 246 dev_err(dev, "could not parse property %s\n",
247 cfg_params[i].property); 247 cfg_params[i].property);
248 } 248 }
249 } 249 }
250 250
251 reserve = 0; 251 reserve = 0;
252 if (function != NULL) 252 if (function != NULL)
253 reserve++; 253 reserve++;
254 if (num_configs) 254 if (num_configs)
255 reserve++; 255 reserve++;
256 ret = of_property_count_strings(np, "nvidia,pins"); 256 ret = of_property_count_strings(np, "nvidia,pins");
257 if (ret < 0) { 257 if (ret < 0) {
258 dev_err(dev, "could not parse property nvidia,pins\n"); 258 dev_err(dev, "could not parse property nvidia,pins\n");
259 goto exit; 259 goto exit;
260 } 260 }
261 reserve *= ret; 261 reserve *= ret;
262 262
263 ret = reserve_map(dev, map, reserved_maps, num_maps, reserve); 263 ret = reserve_map(dev, map, reserved_maps, num_maps, reserve);
264 if (ret < 0) 264 if (ret < 0)
265 goto exit; 265 goto exit;
266 266
267 of_property_for_each_string(np, "nvidia,pins", prop, group) { 267 of_property_for_each_string(np, "nvidia,pins", prop, group) {
268 if (function) { 268 if (function) {
269 ret = add_map_mux(map, reserved_maps, num_maps, 269 ret = add_map_mux(map, reserved_maps, num_maps,
270 group, function); 270 group, function);
271 if (ret < 0) 271 if (ret < 0)
272 goto exit; 272 goto exit;
273 } 273 }
274 274
275 if (num_configs) { 275 if (num_configs) {
276 ret = add_map_configs(dev, map, reserved_maps, 276 ret = add_map_configs(dev, map, reserved_maps,
277 num_maps, group, configs, 277 num_maps, group, configs,
278 num_configs); 278 num_configs);
279 if (ret < 0) 279 if (ret < 0)
280 goto exit; 280 goto exit;
281 } 281 }
282 } 282 }
283 283
284 ret = 0; 284 ret = 0;
285 285
286 exit: 286 exit:
287 kfree(configs); 287 kfree(configs);
288 return ret; 288 return ret;
289 } 289 }
290 290
291 int tegra_pinctrl_dt_node_to_map(struct pinctrl_dev *pctldev, 291 int tegra_pinctrl_dt_node_to_map(struct pinctrl_dev *pctldev,
292 struct device_node *np_config, 292 struct device_node *np_config,
293 struct pinctrl_map **map, unsigned *num_maps) 293 struct pinctrl_map **map, unsigned *num_maps)
294 { 294 {
295 unsigned reserved_maps; 295 unsigned reserved_maps;
296 struct device_node *np; 296 struct device_node *np;
297 int ret; 297 int ret;
298 298
299 reserved_maps = 0; 299 reserved_maps = 0;
300 *map = NULL; 300 *map = NULL;
301 *num_maps = 0; 301 *num_maps = 0;
302 302
303 for_each_child_of_node(np_config, np) { 303 for_each_child_of_node(np_config, np) {
304 ret = tegra_pinctrl_dt_subnode_to_map(pctldev->dev, np, map, 304 ret = tegra_pinctrl_dt_subnode_to_map(pctldev->dev, np, map,
305 &reserved_maps, num_maps); 305 &reserved_maps, num_maps);
306 if (ret < 0) { 306 if (ret < 0) {
307 tegra_pinctrl_dt_free_map(pctldev, *map, *num_maps); 307 tegra_pinctrl_dt_free_map(pctldev, *map, *num_maps);
308 return ret; 308 return ret;
309 } 309 }
310 } 310 }
311 311
312 return 0; 312 return 0;
313 } 313 }
314 314
315 static struct pinctrl_ops tegra_pinctrl_ops = { 315 static struct pinctrl_ops tegra_pinctrl_ops = {
316 .get_groups_count = tegra_pinctrl_get_groups_count, 316 .get_groups_count = tegra_pinctrl_get_groups_count,
317 .get_group_name = tegra_pinctrl_get_group_name, 317 .get_group_name = tegra_pinctrl_get_group_name,
318 .get_group_pins = tegra_pinctrl_get_group_pins, 318 .get_group_pins = tegra_pinctrl_get_group_pins,
319 #ifdef CONFIG_DEBUG_FS 319 #ifdef CONFIG_DEBUG_FS
320 .pin_dbg_show = tegra_pinctrl_pin_dbg_show, 320 .pin_dbg_show = tegra_pinctrl_pin_dbg_show,
321 #endif 321 #endif
322 .dt_node_to_map = tegra_pinctrl_dt_node_to_map, 322 .dt_node_to_map = tegra_pinctrl_dt_node_to_map,
323 .dt_free_map = tegra_pinctrl_dt_free_map, 323 .dt_free_map = tegra_pinctrl_dt_free_map,
324 }; 324 };
325 325
326 static int tegra_pinctrl_get_funcs_count(struct pinctrl_dev *pctldev) 326 static int tegra_pinctrl_get_funcs_count(struct pinctrl_dev *pctldev)
327 { 327 {
328 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 328 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
329 329
330 return pmx->soc->nfunctions; 330 return pmx->soc->nfunctions;
331 } 331 }
332 332
333 static const char *tegra_pinctrl_get_func_name(struct pinctrl_dev *pctldev, 333 static const char *tegra_pinctrl_get_func_name(struct pinctrl_dev *pctldev,
334 unsigned function) 334 unsigned function)
335 { 335 {
336 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 336 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
337 337
338 return pmx->soc->functions[function].name; 338 return pmx->soc->functions[function].name;
339 } 339 }
340 340
341 static int tegra_pinctrl_get_func_groups(struct pinctrl_dev *pctldev, 341 static int tegra_pinctrl_get_func_groups(struct pinctrl_dev *pctldev,
342 unsigned function, 342 unsigned function,
343 const char * const **groups, 343 const char * const **groups,
344 unsigned * const num_groups) 344 unsigned * const num_groups)
345 { 345 {
346 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 346 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
347 347
348 *groups = pmx->soc->functions[function].groups; 348 *groups = pmx->soc->functions[function].groups;
349 *num_groups = pmx->soc->functions[function].ngroups; 349 *num_groups = pmx->soc->functions[function].ngroups;
350 350
351 return 0; 351 return 0;
352 } 352 }
353 353
354 static int tegra_pinctrl_enable(struct pinctrl_dev *pctldev, unsigned function, 354 static int tegra_pinctrl_enable(struct pinctrl_dev *pctldev, unsigned function,
355 unsigned group) 355 unsigned group)
356 { 356 {
357 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 357 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
358 const struct tegra_pingroup *g; 358 const struct tegra_pingroup *g;
359 int i; 359 int i;
360 u32 val; 360 u32 val;
361 361
362 g = &pmx->soc->groups[group]; 362 g = &pmx->soc->groups[group];
363 363
364 if (WARN_ON(g->mux_reg < 0)) 364 if (WARN_ON(g->mux_reg < 0))
365 return -EINVAL; 365 return -EINVAL;
366 366
367 for (i = 0; i < ARRAY_SIZE(g->funcs); i++) { 367 for (i = 0; i < ARRAY_SIZE(g->funcs); i++) {
368 if (g->funcs[i] == function) 368 if (g->funcs[i] == function)
369 break; 369 break;
370 } 370 }
371 if (WARN_ON(i == ARRAY_SIZE(g->funcs))) 371 if (WARN_ON(i == ARRAY_SIZE(g->funcs)))
372 return -EINVAL; 372 return -EINVAL;
373 373
374 val = pmx_readl(pmx, g->mux_bank, g->mux_reg); 374 val = pmx_readl(pmx, g->mux_bank, g->mux_reg);
375 val &= ~(0x3 << g->mux_bit); 375 val &= ~(0x3 << g->mux_bit);
376 val |= i << g->mux_bit; 376 val |= i << g->mux_bit;
377 pmx_writel(pmx, val, g->mux_bank, g->mux_reg); 377 pmx_writel(pmx, val, g->mux_bank, g->mux_reg);
378 378
379 return 0; 379 return 0;
380 } 380 }
381 381
382 static void tegra_pinctrl_disable(struct pinctrl_dev *pctldev, 382 static void tegra_pinctrl_disable(struct pinctrl_dev *pctldev,
383 unsigned function, unsigned group) 383 unsigned function, unsigned group)
384 { 384 {
385 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 385 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
386 const struct tegra_pingroup *g; 386 const struct tegra_pingroup *g;
387 u32 val; 387 u32 val;
388 388
389 g = &pmx->soc->groups[group]; 389 g = &pmx->soc->groups[group];
390 390
391 if (WARN_ON(g->mux_reg < 0)) 391 if (WARN_ON(g->mux_reg < 0))
392 return; 392 return;
393 393
394 val = pmx_readl(pmx, g->mux_bank, g->mux_reg); 394 val = pmx_readl(pmx, g->mux_bank, g->mux_reg);
395 val &= ~(0x3 << g->mux_bit); 395 val &= ~(0x3 << g->mux_bit);
396 val |= g->func_safe << g->mux_bit; 396 val |= g->func_safe << g->mux_bit;
397 pmx_writel(pmx, val, g->mux_bank, g->mux_reg); 397 pmx_writel(pmx, val, g->mux_bank, g->mux_reg);
398 } 398 }
399 399
400 static struct pinmux_ops tegra_pinmux_ops = { 400 static struct pinmux_ops tegra_pinmux_ops = {
401 .get_functions_count = tegra_pinctrl_get_funcs_count, 401 .get_functions_count = tegra_pinctrl_get_funcs_count,
402 .get_function_name = tegra_pinctrl_get_func_name, 402 .get_function_name = tegra_pinctrl_get_func_name,
403 .get_function_groups = tegra_pinctrl_get_func_groups, 403 .get_function_groups = tegra_pinctrl_get_func_groups,
404 .enable = tegra_pinctrl_enable, 404 .enable = tegra_pinctrl_enable,
405 .disable = tegra_pinctrl_disable, 405 .disable = tegra_pinctrl_disable,
406 }; 406 };
407 407
408 static int tegra_pinconf_reg(struct tegra_pmx *pmx, 408 static int tegra_pinconf_reg(struct tegra_pmx *pmx,
409 const struct tegra_pingroup *g, 409 const struct tegra_pingroup *g,
410 enum tegra_pinconf_param param, 410 enum tegra_pinconf_param param,
411 bool report_err, 411 bool report_err,
412 s8 *bank, s16 *reg, s8 *bit, s8 *width) 412 s8 *bank, s16 *reg, s8 *bit, s8 *width)
413 { 413 {
414 switch (param) { 414 switch (param) {
415 case TEGRA_PINCONF_PARAM_PULL: 415 case TEGRA_PINCONF_PARAM_PULL:
416 *bank = g->pupd_bank; 416 *bank = g->pupd_bank;
417 *reg = g->pupd_reg; 417 *reg = g->pupd_reg;
418 *bit = g->pupd_bit; 418 *bit = g->pupd_bit;
419 *width = 2; 419 *width = 2;
420 break; 420 break;
421 case TEGRA_PINCONF_PARAM_TRISTATE: 421 case TEGRA_PINCONF_PARAM_TRISTATE:
422 *bank = g->tri_bank; 422 *bank = g->tri_bank;
423 *reg = g->tri_reg; 423 *reg = g->tri_reg;
424 *bit = g->tri_bit; 424 *bit = g->tri_bit;
425 *width = 1; 425 *width = 1;
426 break; 426 break;
427 case TEGRA_PINCONF_PARAM_ENABLE_INPUT: 427 case TEGRA_PINCONF_PARAM_ENABLE_INPUT:
428 *bank = g->einput_bank; 428 *bank = g->einput_bank;
429 *reg = g->einput_reg; 429 *reg = g->einput_reg;
430 *bit = g->einput_bit; 430 *bit = g->einput_bit;
431 *width = 1; 431 *width = 1;
432 break; 432 break;
433 case TEGRA_PINCONF_PARAM_OPEN_DRAIN: 433 case TEGRA_PINCONF_PARAM_OPEN_DRAIN:
434 *bank = g->odrain_bank; 434 *bank = g->odrain_bank;
435 *reg = g->odrain_reg; 435 *reg = g->odrain_reg;
436 *bit = g->odrain_bit; 436 *bit = g->odrain_bit;
437 *width = 1; 437 *width = 1;
438 break; 438 break;
439 case TEGRA_PINCONF_PARAM_LOCK: 439 case TEGRA_PINCONF_PARAM_LOCK:
440 *bank = g->lock_bank; 440 *bank = g->lock_bank;
441 *reg = g->lock_reg; 441 *reg = g->lock_reg;
442 *bit = g->lock_bit; 442 *bit = g->lock_bit;
443 *width = 1; 443 *width = 1;
444 break; 444 break;
445 case TEGRA_PINCONF_PARAM_IORESET: 445 case TEGRA_PINCONF_PARAM_IORESET:
446 *bank = g->ioreset_bank; 446 *bank = g->ioreset_bank;
447 *reg = g->ioreset_reg; 447 *reg = g->ioreset_reg;
448 *bit = g->ioreset_bit; 448 *bit = g->ioreset_bit;
449 *width = 1; 449 *width = 1;
450 break; 450 break;
451 case TEGRA_PINCONF_PARAM_HIGH_SPEED_MODE: 451 case TEGRA_PINCONF_PARAM_HIGH_SPEED_MODE:
452 *bank = g->drv_bank; 452 *bank = g->drv_bank;
453 *reg = g->drv_reg; 453 *reg = g->drv_reg;
454 *bit = g->hsm_bit; 454 *bit = g->hsm_bit;
455 *width = 1; 455 *width = 1;
456 break; 456 break;
457 case TEGRA_PINCONF_PARAM_SCHMITT: 457 case TEGRA_PINCONF_PARAM_SCHMITT:
458 *bank = g->drv_bank; 458 *bank = g->drv_bank;
459 *reg = g->drv_reg; 459 *reg = g->drv_reg;
460 *bit = g->schmitt_bit; 460 *bit = g->schmitt_bit;
461 *width = 1; 461 *width = 1;
462 break; 462 break;
463 case TEGRA_PINCONF_PARAM_LOW_POWER_MODE: 463 case TEGRA_PINCONF_PARAM_LOW_POWER_MODE:
464 *bank = g->drv_bank; 464 *bank = g->drv_bank;
465 *reg = g->drv_reg; 465 *reg = g->drv_reg;
466 *bit = g->lpmd_bit; 466 *bit = g->lpmd_bit;
467 *width = 2; 467 *width = 2;
468 break; 468 break;
469 case TEGRA_PINCONF_PARAM_DRIVE_DOWN_STRENGTH: 469 case TEGRA_PINCONF_PARAM_DRIVE_DOWN_STRENGTH:
470 *bank = g->drv_bank; 470 *bank = g->drv_bank;
471 *reg = g->drv_reg; 471 *reg = g->drv_reg;
472 *bit = g->drvdn_bit; 472 *bit = g->drvdn_bit;
473 *width = g->drvdn_width; 473 *width = g->drvdn_width;
474 break; 474 break;
475 case TEGRA_PINCONF_PARAM_DRIVE_UP_STRENGTH: 475 case TEGRA_PINCONF_PARAM_DRIVE_UP_STRENGTH:
476 *bank = g->drv_bank; 476 *bank = g->drv_bank;
477 *reg = g->drv_reg; 477 *reg = g->drv_reg;
478 *bit = g->drvup_bit; 478 *bit = g->drvup_bit;
479 *width = g->drvup_width; 479 *width = g->drvup_width;
480 break; 480 break;
481 case TEGRA_PINCONF_PARAM_SLEW_RATE_FALLING: 481 case TEGRA_PINCONF_PARAM_SLEW_RATE_FALLING:
482 *bank = g->drv_bank; 482 *bank = g->drv_bank;
483 *reg = g->drv_reg; 483 *reg = g->drv_reg;
484 *bit = g->slwf_bit; 484 *bit = g->slwf_bit;
485 *width = g->slwf_width; 485 *width = g->slwf_width;
486 break; 486 break;
487 case TEGRA_PINCONF_PARAM_SLEW_RATE_RISING: 487 case TEGRA_PINCONF_PARAM_SLEW_RATE_RISING:
488 *bank = g->drv_bank; 488 *bank = g->drv_bank;
489 *reg = g->drv_reg; 489 *reg = g->drv_reg;
490 *bit = g->slwr_bit; 490 *bit = g->slwr_bit;
491 *width = g->slwr_width; 491 *width = g->slwr_width;
492 break; 492 break;
493 default: 493 default:
494 dev_err(pmx->dev, "Invalid config param %04x\n", param); 494 dev_err(pmx->dev, "Invalid config param %04x\n", param);
495 return -ENOTSUPP; 495 return -ENOTSUPP;
496 } 496 }
497 497
498 if (*reg < 0) { 498 if (*reg < 0) {
499 if (report_err) 499 if (report_err)
500 dev_err(pmx->dev, 500 dev_err(pmx->dev,
501 "Config param %04x not supported on group %s\n", 501 "Config param %04x not supported on group %s\n",
502 param, g->name); 502 param, g->name);
503 return -ENOTSUPP; 503 return -ENOTSUPP;
504 } 504 }
505 505
506 return 0; 506 return 0;
507 } 507 }
508 508
509 static int tegra_pinconf_get(struct pinctrl_dev *pctldev, 509 static int tegra_pinconf_get(struct pinctrl_dev *pctldev,
510 unsigned pin, unsigned long *config) 510 unsigned pin, unsigned long *config)
511 { 511 {
512 dev_err(pctldev->dev, "pin_config_get op not supported\n"); 512 dev_err(pctldev->dev, "pin_config_get op not supported\n");
513 return -ENOTSUPP; 513 return -ENOTSUPP;
514 } 514 }
515 515
516 static int tegra_pinconf_set(struct pinctrl_dev *pctldev, 516 static int tegra_pinconf_set(struct pinctrl_dev *pctldev,
517 unsigned pin, unsigned long config) 517 unsigned pin, unsigned long config)
518 { 518 {
519 dev_err(pctldev->dev, "pin_config_set op not supported\n"); 519 dev_err(pctldev->dev, "pin_config_set op not supported\n");
520 return -ENOTSUPP; 520 return -ENOTSUPP;
521 } 521 }
522 522
523 static int tegra_pinconf_group_get(struct pinctrl_dev *pctldev, 523 static int tegra_pinconf_group_get(struct pinctrl_dev *pctldev,
524 unsigned group, unsigned long *config) 524 unsigned group, unsigned long *config)
525 { 525 {
526 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 526 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
527 enum tegra_pinconf_param param = TEGRA_PINCONF_UNPACK_PARAM(*config); 527 enum tegra_pinconf_param param = TEGRA_PINCONF_UNPACK_PARAM(*config);
528 u16 arg; 528 u16 arg;
529 const struct tegra_pingroup *g; 529 const struct tegra_pingroup *g;
530 int ret; 530 int ret;
531 s8 bank, bit, width; 531 s8 bank, bit, width;
532 s16 reg; 532 s16 reg;
533 u32 val, mask; 533 u32 val, mask;
534 534
535 g = &pmx->soc->groups[group]; 535 g = &pmx->soc->groups[group];
536 536
537 ret = tegra_pinconf_reg(pmx, g, param, true, &bank, &reg, &bit, 537 ret = tegra_pinconf_reg(pmx, g, param, true, &bank, &reg, &bit,
538 &width); 538 &width);
539 if (ret < 0) 539 if (ret < 0)
540 return ret; 540 return ret;
541 541
542 val = pmx_readl(pmx, bank, reg); 542 val = pmx_readl(pmx, bank, reg);
543 mask = (1 << width) - 1; 543 mask = (1 << width) - 1;
544 arg = (val >> bit) & mask; 544 arg = (val >> bit) & mask;
545 545
546 *config = TEGRA_PINCONF_PACK(param, arg); 546 *config = TEGRA_PINCONF_PACK(param, arg);
547 547
548 return 0; 548 return 0;
549 } 549 }
550 550
551 static int tegra_pinconf_group_set(struct pinctrl_dev *pctldev, 551 static int tegra_pinconf_group_set(struct pinctrl_dev *pctldev,
552 unsigned group, unsigned long config) 552 unsigned group, unsigned long config)
553 { 553 {
554 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 554 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
555 enum tegra_pinconf_param param = TEGRA_PINCONF_UNPACK_PARAM(config); 555 enum tegra_pinconf_param param = TEGRA_PINCONF_UNPACK_PARAM(config);
556 u16 arg = TEGRA_PINCONF_UNPACK_ARG(config); 556 u16 arg = TEGRA_PINCONF_UNPACK_ARG(config);
557 const struct tegra_pingroup *g; 557 const struct tegra_pingroup *g;
558 int ret; 558 int ret;
559 s8 bank, bit, width; 559 s8 bank, bit, width;
560 s16 reg; 560 s16 reg;
561 u32 val, mask; 561 u32 val, mask;
562 562
563 g = &pmx->soc->groups[group]; 563 g = &pmx->soc->groups[group];
564 564
565 ret = tegra_pinconf_reg(pmx, g, param, true, &bank, &reg, &bit, 565 ret = tegra_pinconf_reg(pmx, g, param, true, &bank, &reg, &bit,
566 &width); 566 &width);
567 if (ret < 0) 567 if (ret < 0)
568 return ret; 568 return ret;
569 569
570 val = pmx_readl(pmx, bank, reg); 570 val = pmx_readl(pmx, bank, reg);
571 571
572 /* LOCK can't be cleared */ 572 /* LOCK can't be cleared */
573 if (param == TEGRA_PINCONF_PARAM_LOCK) { 573 if (param == TEGRA_PINCONF_PARAM_LOCK) {
574 if ((val & BIT(bit)) && !arg) { 574 if ((val & BIT(bit)) && !arg) {
575 dev_err(pctldev->dev, "LOCK bit cannot be cleared\n"); 575 dev_err(pctldev->dev, "LOCK bit cannot be cleared\n");
576 return -EINVAL; 576 return -EINVAL;
577 } 577 }
578 } 578 }
579 579
580 /* Special-case Boolean values; allow any non-zero as true */ 580 /* Special-case Boolean values; allow any non-zero as true */
581 if (width == 1) 581 if (width == 1)
582 arg = !!arg; 582 arg = !!arg;
583 583
584 /* Range-check user-supplied value */ 584 /* Range-check user-supplied value */
585 mask = (1 << width) - 1; 585 mask = (1 << width) - 1;
586 if (arg & ~mask) { 586 if (arg & ~mask) {
587 dev_err(pctldev->dev, 587 dev_err(pctldev->dev,
588 "config %lx: %x too big for %d bit register\n", 588 "config %lx: %x too big for %d bit register\n",
589 config, arg, width); 589 config, arg, width);
590 return -EINVAL; 590 return -EINVAL;
591 } 591 }
592 592
593 /* Update register */ 593 /* Update register */
594 val &= ~(mask << bit); 594 val &= ~(mask << bit);
595 val |= arg << bit; 595 val |= arg << bit;
596 pmx_writel(pmx, val, bank, reg); 596 pmx_writel(pmx, val, bank, reg);
597 597
598 return 0; 598 return 0;
599 } 599 }
600 600
601 #ifdef CONFIG_DEBUG_FS 601 #ifdef CONFIG_DEBUG_FS
602 static void tegra_pinconf_dbg_show(struct pinctrl_dev *pctldev, 602 static void tegra_pinconf_dbg_show(struct pinctrl_dev *pctldev,
603 struct seq_file *s, unsigned offset) 603 struct seq_file *s, unsigned offset)
604 { 604 {
605 } 605 }
606 606
607 static const char *strip_prefix(const char *s) 607 static const char *strip_prefix(const char *s)
608 { 608 {
609 const char *comma = strchr(s, ','); 609 const char *comma = strchr(s, ',');
610 if (!comma) 610 if (!comma)
611 return s; 611 return s;
612 612
613 return comma + 1; 613 return comma + 1;
614 } 614 }
615 615
616 static void tegra_pinconf_group_dbg_show(struct pinctrl_dev *pctldev, 616 static void tegra_pinconf_group_dbg_show(struct pinctrl_dev *pctldev,
617 struct seq_file *s, unsigned group) 617 struct seq_file *s, unsigned group)
618 { 618 {
619 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 619 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
620 const struct tegra_pingroup *g; 620 const struct tegra_pingroup *g;
621 int i, ret; 621 int i, ret;
622 s8 bank, bit, width; 622 s8 bank, bit, width;
623 s16 reg; 623 s16 reg;
624 u32 val; 624 u32 val;
625 625
626 g = &pmx->soc->groups[group]; 626 g = &pmx->soc->groups[group];
627 627
628 for (i = 0; i < ARRAY_SIZE(cfg_params); i++) { 628 for (i = 0; i < ARRAY_SIZE(cfg_params); i++) {
629 ret = tegra_pinconf_reg(pmx, g, cfg_params[i].param, false, 629 ret = tegra_pinconf_reg(pmx, g, cfg_params[i].param, false,
630 &bank, &reg, &bit, &width); 630 &bank, &reg, &bit, &width);
631 if (ret < 0) 631 if (ret < 0)
632 continue; 632 continue;
633 633
634 val = pmx_readl(pmx, bank, reg); 634 val = pmx_readl(pmx, bank, reg);
635 val >>= bit; 635 val >>= bit;
636 val &= (1 << width) - 1; 636 val &= (1 << width) - 1;
637 637
638 seq_printf(s, "\n\t%s=%u", 638 seq_printf(s, "\n\t%s=%u",
639 strip_prefix(cfg_params[i].property), val); 639 strip_prefix(cfg_params[i].property), val);
640 } 640 }
641 } 641 }
642 642
643 static void tegra_pinconf_config_dbg_show(struct pinctrl_dev *pctldev, 643 static void tegra_pinconf_config_dbg_show(struct pinctrl_dev *pctldev,
644 struct seq_file *s, 644 struct seq_file *s,
645 unsigned long config) 645 unsigned long config)
646 { 646 {
647 enum tegra_pinconf_param param = TEGRA_PINCONF_UNPACK_PARAM(config); 647 enum tegra_pinconf_param param = TEGRA_PINCONF_UNPACK_PARAM(config);
648 u16 arg = TEGRA_PINCONF_UNPACK_ARG(config); 648 u16 arg = TEGRA_PINCONF_UNPACK_ARG(config);
649 const char *pname = "unknown"; 649 const char *pname = "unknown";
650 int i; 650 int i;
651 651
652 for (i = 0; i < ARRAY_SIZE(cfg_params); i++) { 652 for (i = 0; i < ARRAY_SIZE(cfg_params); i++) {
653 if (cfg_params[i].param == param) { 653 if (cfg_params[i].param == param) {
654 pname = cfg_params[i].property; 654 pname = cfg_params[i].property;
655 break; 655 break;
656 } 656 }
657 } 657 }
658 658
659 seq_printf(s, "%s=%d", strip_prefix(pname), arg); 659 seq_printf(s, "%s=%d", strip_prefix(pname), arg);
660 } 660 }
661 #endif 661 #endif
662 662
663 struct pinconf_ops tegra_pinconf_ops = { 663 struct pinconf_ops tegra_pinconf_ops = {
664 .pin_config_get = tegra_pinconf_get, 664 .pin_config_get = tegra_pinconf_get,
665 .pin_config_set = tegra_pinconf_set, 665 .pin_config_set = tegra_pinconf_set,
666 .pin_config_group_get = tegra_pinconf_group_get, 666 .pin_config_group_get = tegra_pinconf_group_get,
667 .pin_config_group_set = tegra_pinconf_group_set, 667 .pin_config_group_set = tegra_pinconf_group_set,
668 #ifdef CONFIG_DEBUG_FS 668 #ifdef CONFIG_DEBUG_FS
669 .pin_config_dbg_show = tegra_pinconf_dbg_show, 669 .pin_config_dbg_show = tegra_pinconf_dbg_show,
670 .pin_config_group_dbg_show = tegra_pinconf_group_dbg_show, 670 .pin_config_group_dbg_show = tegra_pinconf_group_dbg_show,
671 .pin_config_config_dbg_show = tegra_pinconf_config_dbg_show, 671 .pin_config_config_dbg_show = tegra_pinconf_config_dbg_show,
672 #endif 672 #endif
673 }; 673 };
674 674
675 static struct pinctrl_gpio_range tegra_pinctrl_gpio_range = { 675 static struct pinctrl_gpio_range tegra_pinctrl_gpio_range = {
676 .name = "Tegra GPIOs", 676 .name = "Tegra GPIOs",
677 .id = 0, 677 .id = 0,
678 .base = 0, 678 .base = 0,
679 }; 679 };
680 680
681 static struct pinctrl_desc tegra_pinctrl_desc = { 681 static struct pinctrl_desc tegra_pinctrl_desc = {
682 .pctlops = &tegra_pinctrl_ops, 682 .pctlops = &tegra_pinctrl_ops,
683 .pmxops = &tegra_pinmux_ops, 683 .pmxops = &tegra_pinmux_ops,
684 .confops = &tegra_pinconf_ops, 684 .confops = &tegra_pinconf_ops,
685 .owner = THIS_MODULE, 685 .owner = THIS_MODULE,
686 }; 686 };
687 687
688 int __devinit tegra_pinctrl_probe(struct platform_device *pdev, 688 int __devinit tegra_pinctrl_probe(struct platform_device *pdev,
689 const struct tegra_pinctrl_soc_data *soc_data) 689 const struct tegra_pinctrl_soc_data *soc_data)
690 { 690 {
691 struct tegra_pmx *pmx; 691 struct tegra_pmx *pmx;
692 struct resource *res; 692 struct resource *res;
693 int i; 693 int i;
694 694
695 pmx = devm_kzalloc(&pdev->dev, sizeof(*pmx), GFP_KERNEL); 695 pmx = devm_kzalloc(&pdev->dev, sizeof(*pmx), GFP_KERNEL);
696 if (!pmx) { 696 if (!pmx) {
697 dev_err(&pdev->dev, "Can't alloc tegra_pmx\n"); 697 dev_err(&pdev->dev, "Can't alloc tegra_pmx\n");
698 return -ENOMEM; 698 return -ENOMEM;
699 } 699 }
700 pmx->dev = &pdev->dev; 700 pmx->dev = &pdev->dev;
701 pmx->soc = soc_data; 701 pmx->soc = soc_data;
702 702
703 tegra_pinctrl_gpio_range.npins = pmx->soc->ngpios; 703 tegra_pinctrl_gpio_range.npins = pmx->soc->ngpios;
704 tegra_pinctrl_desc.name = dev_name(&pdev->dev); 704 tegra_pinctrl_desc.name = dev_name(&pdev->dev);
705 tegra_pinctrl_desc.pins = pmx->soc->pins; 705 tegra_pinctrl_desc.pins = pmx->soc->pins;
706 tegra_pinctrl_desc.npins = pmx->soc->npins; 706 tegra_pinctrl_desc.npins = pmx->soc->npins;
707 707
708 for (i = 0; ; i++) { 708 for (i = 0; ; i++) {
709 res = platform_get_resource(pdev, IORESOURCE_MEM, i); 709 res = platform_get_resource(pdev, IORESOURCE_MEM, i);
710 if (!res) 710 if (!res)
711 break; 711 break;
712 } 712 }
713 pmx->nbanks = i; 713 pmx->nbanks = i;
714 714
715 pmx->regs = devm_kzalloc(&pdev->dev, pmx->nbanks * sizeof(*pmx->regs), 715 pmx->regs = devm_kzalloc(&pdev->dev, pmx->nbanks * sizeof(*pmx->regs),
716 GFP_KERNEL); 716 GFP_KERNEL);
717 if (!pmx->regs) { 717 if (!pmx->regs) {
718 dev_err(&pdev->dev, "Can't alloc regs pointer\n"); 718 dev_err(&pdev->dev, "Can't alloc regs pointer\n");
719 return -ENODEV; 719 return -ENODEV;
720 } 720 }
721 721
722 for (i = 0; i < pmx->nbanks; i++) { 722 for (i = 0; i < pmx->nbanks; i++) {
723 res = platform_get_resource(pdev, IORESOURCE_MEM, i); 723 res = platform_get_resource(pdev, IORESOURCE_MEM, i);
724 if (!res) { 724 if (!res) {
725 dev_err(&pdev->dev, "Missing MEM resource\n"); 725 dev_err(&pdev->dev, "Missing MEM resource\n");
726 return -ENODEV; 726 return -ENODEV;
727 } 727 }
728 728
729 if (!devm_request_mem_region(&pdev->dev, res->start, 729 if (!devm_request_mem_region(&pdev->dev, res->start,
730 resource_size(res), 730 resource_size(res),
731 dev_name(&pdev->dev))) { 731 dev_name(&pdev->dev))) {
732 dev_err(&pdev->dev, 732 dev_err(&pdev->dev,
733 "Couldn't request MEM resource %d\n", i); 733 "Couldn't request MEM resource %d\n", i);
734 return -ENODEV; 734 return -ENODEV;
735 } 735 }
736 736
737 pmx->regs[i] = devm_ioremap(&pdev->dev, res->start, 737 pmx->regs[i] = devm_ioremap(&pdev->dev, res->start,
738 resource_size(res)); 738 resource_size(res));
739 if (!pmx->regs[i]) { 739 if (!pmx->regs[i]) {
740 dev_err(&pdev->dev, "Couldn't ioremap regs %d\n", i); 740 dev_err(&pdev->dev, "Couldn't ioremap regs %d\n", i);
741 return -ENODEV; 741 return -ENODEV;
742 } 742 }
743 } 743 }
744 744
745 pmx->pctl = pinctrl_register(&tegra_pinctrl_desc, &pdev->dev, pmx); 745 pmx->pctl = pinctrl_register(&tegra_pinctrl_desc, &pdev->dev, pmx);
746 if (!pmx->pctl) { 746 if (!pmx->pctl) {
747 dev_err(&pdev->dev, "Couldn't register pinctrl driver\n"); 747 dev_err(&pdev->dev, "Couldn't register pinctrl driver\n");
748 return -ENODEV; 748 return -ENODEV;
749 } 749 }
750 750
751 pinctrl_add_gpio_range(pmx->pctl, &tegra_pinctrl_gpio_range); 751 pinctrl_add_gpio_range(pmx->pctl, &tegra_pinctrl_gpio_range);
752 752
753 platform_set_drvdata(pdev, pmx); 753 platform_set_drvdata(pdev, pmx);
754 754
755 dev_dbg(&pdev->dev, "Probed Tegra pinctrl driver\n"); 755 dev_dbg(&pdev->dev, "Probed Tegra pinctrl driver\n");
756 756
757 return 0; 757 return 0;
758 } 758 }
759 EXPORT_SYMBOL_GPL(tegra_pinctrl_probe); 759 EXPORT_SYMBOL_GPL(tegra_pinctrl_probe);
760 760
761 int __devexit tegra_pinctrl_remove(struct platform_device *pdev) 761 int tegra_pinctrl_remove(struct platform_device *pdev)
762 { 762 {
763 struct tegra_pmx *pmx = platform_get_drvdata(pdev); 763 struct tegra_pmx *pmx = platform_get_drvdata(pdev);
764 764
765 pinctrl_unregister(pmx->pctl); 765 pinctrl_unregister(pmx->pctl);
766 766
767 return 0; 767 return 0;
768 } 768 }
769 EXPORT_SYMBOL_GPL(tegra_pinctrl_remove); 769 EXPORT_SYMBOL_GPL(tegra_pinctrl_remove);
770 770
drivers/pinctrl/pinctrl-u300.c
1 /* 1 /*
2 * Driver for the U300 pin controller 2 * Driver for the U300 pin controller
3 * 3 *
4 * Based on the original U300 padmux functions 4 * Based on the original U300 padmux functions
5 * Copyright (C) 2009-2011 ST-Ericsson AB 5 * Copyright (C) 2009-2011 ST-Ericsson AB
6 * Author: Martin Persson <martin.persson@stericsson.com> 6 * Author: Martin Persson <martin.persson@stericsson.com>
7 * Author: Linus Walleij <linus.walleij@linaro.org> 7 * Author: Linus Walleij <linus.walleij@linaro.org>
8 * 8 *
9 * The DB3350 design and control registers are oriented around pads rather than 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 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 11 * are connected to different pins in different packaging types, so it would
12 * be confusing. 12 * be confusing.
13 */ 13 */
14 #include <linux/init.h> 14 #include <linux/init.h>
15 #include <linux/module.h> 15 #include <linux/module.h>
16 #include <linux/platform_device.h> 16 #include <linux/platform_device.h>
17 #include <linux/io.h> 17 #include <linux/io.h>
18 #include <linux/slab.h> 18 #include <linux/slab.h>
19 #include <linux/err.h> 19 #include <linux/err.h>
20 #include <linux/pinctrl/pinctrl.h> 20 #include <linux/pinctrl/pinctrl.h>
21 #include <linux/pinctrl/pinmux.h> 21 #include <linux/pinctrl/pinmux.h>
22 #include <linux/pinctrl/pinconf.h> 22 #include <linux/pinctrl/pinconf.h>
23 #include <linux/pinctrl/pinconf-generic.h> 23 #include <linux/pinctrl/pinconf-generic.h>
24 #include "pinctrl-coh901.h" 24 #include "pinctrl-coh901.h"
25 25
26 /* 26 /*
27 * Register definitions for the U300 Padmux control registers in the 27 * Register definitions for the U300 Padmux control registers in the
28 * system controller 28 * system controller
29 */ 29 */
30 30
31 /* PAD MUX Control register 1 (LOW) 16bit (R/W) */ 31 /* PAD MUX Control register 1 (LOW) 16bit (R/W) */
32 #define U300_SYSCON_PMC1LR 0x007C 32 #define U300_SYSCON_PMC1LR 0x007C
33 #define U300_SYSCON_PMC1LR_MASK 0xFFFF 33 #define U300_SYSCON_PMC1LR_MASK 0xFFFF
34 #define U300_SYSCON_PMC1LR_CDI_MASK 0xC000 34 #define U300_SYSCON_PMC1LR_CDI_MASK 0xC000
35 #define U300_SYSCON_PMC1LR_CDI_CDI 0x0000 35 #define U300_SYSCON_PMC1LR_CDI_CDI 0x0000
36 #define U300_SYSCON_PMC1LR_CDI_EMIF 0x4000 36 #define U300_SYSCON_PMC1LR_CDI_EMIF 0x4000
37 /* For BS335 */ 37 /* For BS335 */
38 #define U300_SYSCON_PMC1LR_CDI_CDI2 0x8000 38 #define U300_SYSCON_PMC1LR_CDI_CDI2 0x8000
39 #define U300_SYSCON_PMC1LR_CDI_WCDMA_APP_GPIO 0xC000 39 #define U300_SYSCON_PMC1LR_CDI_WCDMA_APP_GPIO 0xC000
40 /* For BS365 */ 40 /* For BS365 */
41 #define U300_SYSCON_PMC1LR_CDI_GPIO 0x8000 41 #define U300_SYSCON_PMC1LR_CDI_GPIO 0x8000
42 #define U300_SYSCON_PMC1LR_CDI_WCDMA 0xC000 42 #define U300_SYSCON_PMC1LR_CDI_WCDMA 0xC000
43 /* Common defs */ 43 /* Common defs */
44 #define U300_SYSCON_PMC1LR_PDI_MASK 0x3000 44 #define U300_SYSCON_PMC1LR_PDI_MASK 0x3000
45 #define U300_SYSCON_PMC1LR_PDI_PDI 0x0000 45 #define U300_SYSCON_PMC1LR_PDI_PDI 0x0000
46 #define U300_SYSCON_PMC1LR_PDI_EGG 0x1000 46 #define U300_SYSCON_PMC1LR_PDI_EGG 0x1000
47 #define U300_SYSCON_PMC1LR_PDI_WCDMA 0x3000 47 #define U300_SYSCON_PMC1LR_PDI_WCDMA 0x3000
48 #define U300_SYSCON_PMC1LR_MMCSD_MASK 0x0C00 48 #define U300_SYSCON_PMC1LR_MMCSD_MASK 0x0C00
49 #define U300_SYSCON_PMC1LR_MMCSD_MMCSD 0x0000 49 #define U300_SYSCON_PMC1LR_MMCSD_MMCSD 0x0000
50 #define U300_SYSCON_PMC1LR_MMCSD_MSPRO 0x0400 50 #define U300_SYSCON_PMC1LR_MMCSD_MSPRO 0x0400
51 #define U300_SYSCON_PMC1LR_MMCSD_DSP 0x0800 51 #define U300_SYSCON_PMC1LR_MMCSD_DSP 0x0800
52 #define U300_SYSCON_PMC1LR_MMCSD_WCDMA 0x0C00 52 #define U300_SYSCON_PMC1LR_MMCSD_WCDMA 0x0C00
53 #define U300_SYSCON_PMC1LR_ETM_MASK 0x0300 53 #define U300_SYSCON_PMC1LR_ETM_MASK 0x0300
54 #define U300_SYSCON_PMC1LR_ETM_ACC 0x0000 54 #define U300_SYSCON_PMC1LR_ETM_ACC 0x0000
55 #define U300_SYSCON_PMC1LR_ETM_APP 0x0100 55 #define U300_SYSCON_PMC1LR_ETM_APP 0x0100
56 #define U300_SYSCON_PMC1LR_EMIF_1_CS2_MASK 0x00C0 56 #define U300_SYSCON_PMC1LR_EMIF_1_CS2_MASK 0x00C0
57 #define U300_SYSCON_PMC1LR_EMIF_1_CS2_STATIC 0x0000 57 #define U300_SYSCON_PMC1LR_EMIF_1_CS2_STATIC 0x0000
58 #define U300_SYSCON_PMC1LR_EMIF_1_CS2_NFIF 0x0040 58 #define U300_SYSCON_PMC1LR_EMIF_1_CS2_NFIF 0x0040
59 #define U300_SYSCON_PMC1LR_EMIF_1_CS2_SDRAM 0x0080 59 #define U300_SYSCON_PMC1LR_EMIF_1_CS2_SDRAM 0x0080
60 #define U300_SYSCON_PMC1LR_EMIF_1_CS2_STATIC_2GB 0x00C0 60 #define U300_SYSCON_PMC1LR_EMIF_1_CS2_STATIC_2GB 0x00C0
61 #define U300_SYSCON_PMC1LR_EMIF_1_CS1_MASK 0x0030 61 #define U300_SYSCON_PMC1LR_EMIF_1_CS1_MASK 0x0030
62 #define U300_SYSCON_PMC1LR_EMIF_1_CS1_STATIC 0x0000 62 #define U300_SYSCON_PMC1LR_EMIF_1_CS1_STATIC 0x0000
63 #define U300_SYSCON_PMC1LR_EMIF_1_CS1_NFIF 0x0010 63 #define U300_SYSCON_PMC1LR_EMIF_1_CS1_NFIF 0x0010
64 #define U300_SYSCON_PMC1LR_EMIF_1_CS1_SDRAM 0x0020 64 #define U300_SYSCON_PMC1LR_EMIF_1_CS1_SDRAM 0x0020
65 #define U300_SYSCON_PMC1LR_EMIF_1_CS1_SEMI 0x0030 65 #define U300_SYSCON_PMC1LR_EMIF_1_CS1_SEMI 0x0030
66 #define U300_SYSCON_PMC1LR_EMIF_1_CS0_MASK 0x000C 66 #define U300_SYSCON_PMC1LR_EMIF_1_CS0_MASK 0x000C
67 #define U300_SYSCON_PMC1LR_EMIF_1_CS0_STATIC 0x0000 67 #define U300_SYSCON_PMC1LR_EMIF_1_CS0_STATIC 0x0000
68 #define U300_SYSCON_PMC1LR_EMIF_1_CS0_NFIF 0x0004 68 #define U300_SYSCON_PMC1LR_EMIF_1_CS0_NFIF 0x0004
69 #define U300_SYSCON_PMC1LR_EMIF_1_CS0_SDRAM 0x0008 69 #define U300_SYSCON_PMC1LR_EMIF_1_CS0_SDRAM 0x0008
70 #define U300_SYSCON_PMC1LR_EMIF_1_CS0_SEMI 0x000C 70 #define U300_SYSCON_PMC1LR_EMIF_1_CS0_SEMI 0x000C
71 #define U300_SYSCON_PMC1LR_EMIF_1_MASK 0x0003 71 #define U300_SYSCON_PMC1LR_EMIF_1_MASK 0x0003
72 #define U300_SYSCON_PMC1LR_EMIF_1_STATIC 0x0000 72 #define U300_SYSCON_PMC1LR_EMIF_1_STATIC 0x0000
73 #define U300_SYSCON_PMC1LR_EMIF_1_SDRAM0 0x0001 73 #define U300_SYSCON_PMC1LR_EMIF_1_SDRAM0 0x0001
74 #define U300_SYSCON_PMC1LR_EMIF_1_SDRAM1 0x0002 74 #define U300_SYSCON_PMC1LR_EMIF_1_SDRAM1 0x0002
75 #define U300_SYSCON_PMC1LR_EMIF_1 0x0003 75 #define U300_SYSCON_PMC1LR_EMIF_1 0x0003
76 /* PAD MUX Control register 2 (HIGH) 16bit (R/W) */ 76 /* PAD MUX Control register 2 (HIGH) 16bit (R/W) */
77 #define U300_SYSCON_PMC1HR 0x007E 77 #define U300_SYSCON_PMC1HR 0x007E
78 #define U300_SYSCON_PMC1HR_MASK 0xFFFF 78 #define U300_SYSCON_PMC1HR_MASK 0xFFFF
79 #define U300_SYSCON_PMC1HR_MISC_2_MASK 0xC000 79 #define U300_SYSCON_PMC1HR_MISC_2_MASK 0xC000
80 #define U300_SYSCON_PMC1HR_MISC_2_APP_GPIO 0x0000 80 #define U300_SYSCON_PMC1HR_MISC_2_APP_GPIO 0x0000
81 #define U300_SYSCON_PMC1HR_MISC_2_MSPRO 0x4000 81 #define U300_SYSCON_PMC1HR_MISC_2_MSPRO 0x4000
82 #define U300_SYSCON_PMC1HR_MISC_2_DSP 0x8000 82 #define U300_SYSCON_PMC1HR_MISC_2_DSP 0x8000
83 #define U300_SYSCON_PMC1HR_MISC_2_AAIF 0xC000 83 #define U300_SYSCON_PMC1HR_MISC_2_AAIF 0xC000
84 #define U300_SYSCON_PMC1HR_APP_GPIO_2_MASK 0x3000 84 #define U300_SYSCON_PMC1HR_APP_GPIO_2_MASK 0x3000
85 #define U300_SYSCON_PMC1HR_APP_GPIO_2_APP_GPIO 0x0000 85 #define U300_SYSCON_PMC1HR_APP_GPIO_2_APP_GPIO 0x0000
86 #define U300_SYSCON_PMC1HR_APP_GPIO_2_NFIF 0x1000 86 #define U300_SYSCON_PMC1HR_APP_GPIO_2_NFIF 0x1000
87 #define U300_SYSCON_PMC1HR_APP_GPIO_2_DSP 0x2000 87 #define U300_SYSCON_PMC1HR_APP_GPIO_2_DSP 0x2000
88 #define U300_SYSCON_PMC1HR_APP_GPIO_2_AAIF 0x3000 88 #define U300_SYSCON_PMC1HR_APP_GPIO_2_AAIF 0x3000
89 #define U300_SYSCON_PMC1HR_APP_GPIO_1_MASK 0x0C00 89 #define U300_SYSCON_PMC1HR_APP_GPIO_1_MASK 0x0C00
90 #define U300_SYSCON_PMC1HR_APP_GPIO_1_APP_GPIO 0x0000 90 #define U300_SYSCON_PMC1HR_APP_GPIO_1_APP_GPIO 0x0000
91 #define U300_SYSCON_PMC1HR_APP_GPIO_1_MMC 0x0400 91 #define U300_SYSCON_PMC1HR_APP_GPIO_1_MMC 0x0400
92 #define U300_SYSCON_PMC1HR_APP_GPIO_1_DSP 0x0800 92 #define U300_SYSCON_PMC1HR_APP_GPIO_1_DSP 0x0800
93 #define U300_SYSCON_PMC1HR_APP_GPIO_1_AAIF 0x0C00 93 #define U300_SYSCON_PMC1HR_APP_GPIO_1_AAIF 0x0C00
94 #define U300_SYSCON_PMC1HR_APP_SPI_CS_2_MASK 0x0300 94 #define U300_SYSCON_PMC1HR_APP_SPI_CS_2_MASK 0x0300
95 #define U300_SYSCON_PMC1HR_APP_SPI_CS_2_APP_GPIO 0x0000 95 #define U300_SYSCON_PMC1HR_APP_SPI_CS_2_APP_GPIO 0x0000
96 #define U300_SYSCON_PMC1HR_APP_SPI_CS_2_SPI 0x0100 96 #define U300_SYSCON_PMC1HR_APP_SPI_CS_2_SPI 0x0100
97 #define U300_SYSCON_PMC1HR_APP_SPI_CS_2_AAIF 0x0300 97 #define U300_SYSCON_PMC1HR_APP_SPI_CS_2_AAIF 0x0300
98 #define U300_SYSCON_PMC1HR_APP_SPI_CS_1_MASK 0x00C0 98 #define U300_SYSCON_PMC1HR_APP_SPI_CS_1_MASK 0x00C0
99 #define U300_SYSCON_PMC1HR_APP_SPI_CS_1_APP_GPIO 0x0000 99 #define U300_SYSCON_PMC1HR_APP_SPI_CS_1_APP_GPIO 0x0000
100 #define U300_SYSCON_PMC1HR_APP_SPI_CS_1_SPI 0x0040 100 #define U300_SYSCON_PMC1HR_APP_SPI_CS_1_SPI 0x0040
101 #define U300_SYSCON_PMC1HR_APP_SPI_CS_1_AAIF 0x00C0 101 #define U300_SYSCON_PMC1HR_APP_SPI_CS_1_AAIF 0x00C0
102 #define U300_SYSCON_PMC1HR_APP_SPI_2_MASK 0x0030 102 #define U300_SYSCON_PMC1HR_APP_SPI_2_MASK 0x0030
103 #define U300_SYSCON_PMC1HR_APP_SPI_2_APP_GPIO 0x0000 103 #define U300_SYSCON_PMC1HR_APP_SPI_2_APP_GPIO 0x0000
104 #define U300_SYSCON_PMC1HR_APP_SPI_2_SPI 0x0010 104 #define U300_SYSCON_PMC1HR_APP_SPI_2_SPI 0x0010
105 #define U300_SYSCON_PMC1HR_APP_SPI_2_DSP 0x0020 105 #define U300_SYSCON_PMC1HR_APP_SPI_2_DSP 0x0020
106 #define U300_SYSCON_PMC1HR_APP_SPI_2_AAIF 0x0030 106 #define U300_SYSCON_PMC1HR_APP_SPI_2_AAIF 0x0030
107 #define U300_SYSCON_PMC1HR_APP_UART0_2_MASK 0x000C 107 #define U300_SYSCON_PMC1HR_APP_UART0_2_MASK 0x000C
108 #define U300_SYSCON_PMC1HR_APP_UART0_2_APP_GPIO 0x0000 108 #define U300_SYSCON_PMC1HR_APP_UART0_2_APP_GPIO 0x0000
109 #define U300_SYSCON_PMC1HR_APP_UART0_2_UART0 0x0004 109 #define U300_SYSCON_PMC1HR_APP_UART0_2_UART0 0x0004
110 #define U300_SYSCON_PMC1HR_APP_UART0_2_NFIF_CS 0x0008 110 #define U300_SYSCON_PMC1HR_APP_UART0_2_NFIF_CS 0x0008
111 #define U300_SYSCON_PMC1HR_APP_UART0_2_AAIF 0x000C 111 #define U300_SYSCON_PMC1HR_APP_UART0_2_AAIF 0x000C
112 #define U300_SYSCON_PMC1HR_APP_UART0_1_MASK 0x0003 112 #define U300_SYSCON_PMC1HR_APP_UART0_1_MASK 0x0003
113 #define U300_SYSCON_PMC1HR_APP_UART0_1_APP_GPIO 0x0000 113 #define U300_SYSCON_PMC1HR_APP_UART0_1_APP_GPIO 0x0000
114 #define U300_SYSCON_PMC1HR_APP_UART0_1_UART0 0x0001 114 #define U300_SYSCON_PMC1HR_APP_UART0_1_UART0 0x0001
115 #define U300_SYSCON_PMC1HR_APP_UART0_1_AAIF 0x0003 115 #define U300_SYSCON_PMC1HR_APP_UART0_1_AAIF 0x0003
116 /* Padmux 2 control */ 116 /* Padmux 2 control */
117 #define U300_SYSCON_PMC2R 0x100 117 #define U300_SYSCON_PMC2R 0x100
118 #define U300_SYSCON_PMC2R_APP_MISC_0_MASK 0x00C0 118 #define U300_SYSCON_PMC2R_APP_MISC_0_MASK 0x00C0
119 #define U300_SYSCON_PMC2R_APP_MISC_0_APP_GPIO 0x0000 119 #define U300_SYSCON_PMC2R_APP_MISC_0_APP_GPIO 0x0000
120 #define U300_SYSCON_PMC2R_APP_MISC_0_EMIF_SDRAM 0x0040 120 #define U300_SYSCON_PMC2R_APP_MISC_0_EMIF_SDRAM 0x0040
121 #define U300_SYSCON_PMC2R_APP_MISC_0_MMC 0x0080 121 #define U300_SYSCON_PMC2R_APP_MISC_0_MMC 0x0080
122 #define U300_SYSCON_PMC2R_APP_MISC_0_CDI2 0x00C0 122 #define U300_SYSCON_PMC2R_APP_MISC_0_CDI2 0x00C0
123 #define U300_SYSCON_PMC2R_APP_MISC_1_MASK 0x0300 123 #define U300_SYSCON_PMC2R_APP_MISC_1_MASK 0x0300
124 #define U300_SYSCON_PMC2R_APP_MISC_1_APP_GPIO 0x0000 124 #define U300_SYSCON_PMC2R_APP_MISC_1_APP_GPIO 0x0000
125 #define U300_SYSCON_PMC2R_APP_MISC_1_EMIF_SDRAM 0x0100 125 #define U300_SYSCON_PMC2R_APP_MISC_1_EMIF_SDRAM 0x0100
126 #define U300_SYSCON_PMC2R_APP_MISC_1_MMC 0x0200 126 #define U300_SYSCON_PMC2R_APP_MISC_1_MMC 0x0200
127 #define U300_SYSCON_PMC2R_APP_MISC_1_CDI2 0x0300 127 #define U300_SYSCON_PMC2R_APP_MISC_1_CDI2 0x0300
128 #define U300_SYSCON_PMC2R_APP_MISC_2_MASK 0x0C00 128 #define U300_SYSCON_PMC2R_APP_MISC_2_MASK 0x0C00
129 #define U300_SYSCON_PMC2R_APP_MISC_2_APP_GPIO 0x0000 129 #define U300_SYSCON_PMC2R_APP_MISC_2_APP_GPIO 0x0000
130 #define U300_SYSCON_PMC2R_APP_MISC_2_EMIF_SDRAM 0x0400 130 #define U300_SYSCON_PMC2R_APP_MISC_2_EMIF_SDRAM 0x0400
131 #define U300_SYSCON_PMC2R_APP_MISC_2_MMC 0x0800 131 #define U300_SYSCON_PMC2R_APP_MISC_2_MMC 0x0800
132 #define U300_SYSCON_PMC2R_APP_MISC_2_CDI2 0x0C00 132 #define U300_SYSCON_PMC2R_APP_MISC_2_CDI2 0x0C00
133 #define U300_SYSCON_PMC2R_APP_MISC_3_MASK 0x3000 133 #define U300_SYSCON_PMC2R_APP_MISC_3_MASK 0x3000
134 #define U300_SYSCON_PMC2R_APP_MISC_3_APP_GPIO 0x0000 134 #define U300_SYSCON_PMC2R_APP_MISC_3_APP_GPIO 0x0000
135 #define U300_SYSCON_PMC2R_APP_MISC_3_EMIF_SDRAM 0x1000 135 #define U300_SYSCON_PMC2R_APP_MISC_3_EMIF_SDRAM 0x1000
136 #define U300_SYSCON_PMC2R_APP_MISC_3_MMC 0x2000 136 #define U300_SYSCON_PMC2R_APP_MISC_3_MMC 0x2000
137 #define U300_SYSCON_PMC2R_APP_MISC_3_CDI2 0x3000 137 #define U300_SYSCON_PMC2R_APP_MISC_3_CDI2 0x3000
138 #define U300_SYSCON_PMC2R_APP_MISC_4_MASK 0xC000 138 #define U300_SYSCON_PMC2R_APP_MISC_4_MASK 0xC000
139 #define U300_SYSCON_PMC2R_APP_MISC_4_APP_GPIO 0x0000 139 #define U300_SYSCON_PMC2R_APP_MISC_4_APP_GPIO 0x0000
140 #define U300_SYSCON_PMC2R_APP_MISC_4_EMIF_SDRAM 0x4000 140 #define U300_SYSCON_PMC2R_APP_MISC_4_EMIF_SDRAM 0x4000
141 #define U300_SYSCON_PMC2R_APP_MISC_4_MMC 0x8000 141 #define U300_SYSCON_PMC2R_APP_MISC_4_MMC 0x8000
142 #define U300_SYSCON_PMC2R_APP_MISC_4_ACC_GPIO 0xC000 142 #define U300_SYSCON_PMC2R_APP_MISC_4_ACC_GPIO 0xC000
143 /* TODO: More SYSCON registers missing */ 143 /* TODO: More SYSCON registers missing */
144 #define U300_SYSCON_PMC3R 0x10C 144 #define U300_SYSCON_PMC3R 0x10C
145 #define U300_SYSCON_PMC3R_APP_MISC_11_MASK 0xC000 145 #define U300_SYSCON_PMC3R_APP_MISC_11_MASK 0xC000
146 #define U300_SYSCON_PMC3R_APP_MISC_11_SPI 0x4000 146 #define U300_SYSCON_PMC3R_APP_MISC_11_SPI 0x4000
147 #define U300_SYSCON_PMC3R_APP_MISC_10_MASK 0x3000 147 #define U300_SYSCON_PMC3R_APP_MISC_10_MASK 0x3000
148 #define U300_SYSCON_PMC3R_APP_MISC_10_SPI 0x1000 148 #define U300_SYSCON_PMC3R_APP_MISC_10_SPI 0x1000
149 /* TODO: Missing other configs */ 149 /* TODO: Missing other configs */
150 #define U300_SYSCON_PMC4R 0x168 150 #define U300_SYSCON_PMC4R 0x168
151 #define U300_SYSCON_PMC4R_APP_MISC_12_MASK 0x0003 151 #define U300_SYSCON_PMC4R_APP_MISC_12_MASK 0x0003
152 #define U300_SYSCON_PMC4R_APP_MISC_12_APP_GPIO 0x0000 152 #define U300_SYSCON_PMC4R_APP_MISC_12_APP_GPIO 0x0000
153 #define U300_SYSCON_PMC4R_APP_MISC_13_MASK 0x000C 153 #define U300_SYSCON_PMC4R_APP_MISC_13_MASK 0x000C
154 #define U300_SYSCON_PMC4R_APP_MISC_13_CDI 0x0000 154 #define U300_SYSCON_PMC4R_APP_MISC_13_CDI 0x0000
155 #define U300_SYSCON_PMC4R_APP_MISC_13_SMIA 0x0004 155 #define U300_SYSCON_PMC4R_APP_MISC_13_SMIA 0x0004
156 #define U300_SYSCON_PMC4R_APP_MISC_13_SMIA2 0x0008 156 #define U300_SYSCON_PMC4R_APP_MISC_13_SMIA2 0x0008
157 #define U300_SYSCON_PMC4R_APP_MISC_13_APP_GPIO 0x000C 157 #define U300_SYSCON_PMC4R_APP_MISC_13_APP_GPIO 0x000C
158 #define U300_SYSCON_PMC4R_APP_MISC_14_MASK 0x0030 158 #define U300_SYSCON_PMC4R_APP_MISC_14_MASK 0x0030
159 #define U300_SYSCON_PMC4R_APP_MISC_14_CDI 0x0000 159 #define U300_SYSCON_PMC4R_APP_MISC_14_CDI 0x0000
160 #define U300_SYSCON_PMC4R_APP_MISC_14_SMIA 0x0010 160 #define U300_SYSCON_PMC4R_APP_MISC_14_SMIA 0x0010
161 #define U300_SYSCON_PMC4R_APP_MISC_14_CDI2 0x0020 161 #define U300_SYSCON_PMC4R_APP_MISC_14_CDI2 0x0020
162 #define U300_SYSCON_PMC4R_APP_MISC_14_APP_GPIO 0x0030 162 #define U300_SYSCON_PMC4R_APP_MISC_14_APP_GPIO 0x0030
163 #define U300_SYSCON_PMC4R_APP_MISC_16_MASK 0x0300 163 #define U300_SYSCON_PMC4R_APP_MISC_16_MASK 0x0300
164 #define U300_SYSCON_PMC4R_APP_MISC_16_APP_GPIO_13 0x0000 164 #define U300_SYSCON_PMC4R_APP_MISC_16_APP_GPIO_13 0x0000
165 #define U300_SYSCON_PMC4R_APP_MISC_16_APP_UART1_CTS 0x0100 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 166 #define U300_SYSCON_PMC4R_APP_MISC_16_EMIF_1_STATIC_CS5_N 0x0200
167 167
168 #define DRIVER_NAME "pinctrl-u300" 168 #define DRIVER_NAME "pinctrl-u300"
169 169
170 /* 170 /*
171 * The DB3350 has 467 pads, I have enumerated the pads clockwise around the 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. 172 * edges of the silicon, finger by finger. LTCORNER upper left is pad 0.
173 * Data taken from the PadRing chart, arranged like this: 173 * Data taken from the PadRing chart, arranged like this:
174 * 174 *
175 * 0 ..... 104 175 * 0 ..... 104
176 * 466 105 176 * 466 105
177 * . . 177 * . .
178 * . . 178 * . .
179 * 358 224 179 * 358 224
180 * 357 .... 225 180 * 357 .... 225
181 */ 181 */
182 #define U300_NUM_PADS 467 182 #define U300_NUM_PADS 467
183 183
184 /* Pad names for the pinmux subsystem */ 184 /* Pad names for the pinmux subsystem */
185 static const struct pinctrl_pin_desc u300_pads[] = { 185 static const struct pinctrl_pin_desc u300_pads[] = {
186 /* Pads along the top edge of the chip */ 186 /* Pads along the top edge of the chip */
187 PINCTRL_PIN(0, "P PAD VDD 28"), 187 PINCTRL_PIN(0, "P PAD VDD 28"),
188 PINCTRL_PIN(1, "P PAD GND 28"), 188 PINCTRL_PIN(1, "P PAD GND 28"),
189 PINCTRL_PIN(2, "PO SIM RST N"), 189 PINCTRL_PIN(2, "PO SIM RST N"),
190 PINCTRL_PIN(3, "VSSIO 25"), 190 PINCTRL_PIN(3, "VSSIO 25"),
191 PINCTRL_PIN(4, "VSSA ADDA ESDSUB"), 191 PINCTRL_PIN(4, "VSSA ADDA ESDSUB"),
192 PINCTRL_PIN(5, "PWR VSSCOMMON"), 192 PINCTRL_PIN(5, "PWR VSSCOMMON"),
193 PINCTRL_PIN(6, "PI ADC I1 POS"), 193 PINCTRL_PIN(6, "PI ADC I1 POS"),
194 PINCTRL_PIN(7, "PI ADC I1 NEG"), 194 PINCTRL_PIN(7, "PI ADC I1 NEG"),
195 PINCTRL_PIN(8, "PWR VSSAD0"), 195 PINCTRL_PIN(8, "PWR VSSAD0"),
196 PINCTRL_PIN(9, "PWR VCCAD0"), 196 PINCTRL_PIN(9, "PWR VCCAD0"),
197 PINCTRL_PIN(10, "PI ADC Q1 NEG"), 197 PINCTRL_PIN(10, "PI ADC Q1 NEG"),
198 PINCTRL_PIN(11, "PI ADC Q1 POS"), 198 PINCTRL_PIN(11, "PI ADC Q1 POS"),
199 PINCTRL_PIN(12, "PWR VDDAD"), 199 PINCTRL_PIN(12, "PWR VDDAD"),
200 PINCTRL_PIN(13, "PWR GNDAD"), 200 PINCTRL_PIN(13, "PWR GNDAD"),
201 PINCTRL_PIN(14, "PI ADC I2 POS"), 201 PINCTRL_PIN(14, "PI ADC I2 POS"),
202 PINCTRL_PIN(15, "PI ADC I2 NEG"), 202 PINCTRL_PIN(15, "PI ADC I2 NEG"),
203 PINCTRL_PIN(16, "PWR VSSAD1"), 203 PINCTRL_PIN(16, "PWR VSSAD1"),
204 PINCTRL_PIN(17, "PWR VCCAD1"), 204 PINCTRL_PIN(17, "PWR VCCAD1"),
205 PINCTRL_PIN(18, "PI ADC Q2 NEG"), 205 PINCTRL_PIN(18, "PI ADC Q2 NEG"),
206 PINCTRL_PIN(19, "PI ADC Q2 POS"), 206 PINCTRL_PIN(19, "PI ADC Q2 POS"),
207 PINCTRL_PIN(20, "VSSA ADDA ESDSUB"), 207 PINCTRL_PIN(20, "VSSA ADDA ESDSUB"),
208 PINCTRL_PIN(21, "PWR VCCGPAD"), 208 PINCTRL_PIN(21, "PWR VCCGPAD"),
209 PINCTRL_PIN(22, "PI TX POW"), 209 PINCTRL_PIN(22, "PI TX POW"),
210 PINCTRL_PIN(23, "PWR VSSGPAD"), 210 PINCTRL_PIN(23, "PWR VSSGPAD"),
211 PINCTRL_PIN(24, "PO DAC I POS"), 211 PINCTRL_PIN(24, "PO DAC I POS"),
212 PINCTRL_PIN(25, "PO DAC I NEG"), 212 PINCTRL_PIN(25, "PO DAC I NEG"),
213 PINCTRL_PIN(26, "PO DAC Q POS"), 213 PINCTRL_PIN(26, "PO DAC Q POS"),
214 PINCTRL_PIN(27, "PO DAC Q NEG"), 214 PINCTRL_PIN(27, "PO DAC Q NEG"),
215 PINCTRL_PIN(28, "PWR VSSDA"), 215 PINCTRL_PIN(28, "PWR VSSDA"),
216 PINCTRL_PIN(29, "PWR VCCDA"), 216 PINCTRL_PIN(29, "PWR VCCDA"),
217 PINCTRL_PIN(30, "VSSA ADDA ESDSUB"), 217 PINCTRL_PIN(30, "VSSA ADDA ESDSUB"),
218 PINCTRL_PIN(31, "P PAD VDDIO 11"), 218 PINCTRL_PIN(31, "P PAD VDDIO 11"),
219 PINCTRL_PIN(32, "PI PLL 26 FILTVDD"), 219 PINCTRL_PIN(32, "PI PLL 26 FILTVDD"),
220 PINCTRL_PIN(33, "PI PLL 26 VCONT"), 220 PINCTRL_PIN(33, "PI PLL 26 VCONT"),
221 PINCTRL_PIN(34, "PWR AGNDPLL2V5 32 13"), 221 PINCTRL_PIN(34, "PWR AGNDPLL2V5 32 13"),
222 PINCTRL_PIN(35, "PWR AVDDPLL2V5 32 13"), 222 PINCTRL_PIN(35, "PWR AVDDPLL2V5 32 13"),
223 PINCTRL_PIN(36, "VDDA PLL ESD"), 223 PINCTRL_PIN(36, "VDDA PLL ESD"),
224 PINCTRL_PIN(37, "VSSA PLL ESD"), 224 PINCTRL_PIN(37, "VSSA PLL ESD"),
225 PINCTRL_PIN(38, "VSS PLL"), 225 PINCTRL_PIN(38, "VSS PLL"),
226 PINCTRL_PIN(39, "VDDC PLL"), 226 PINCTRL_PIN(39, "VDDC PLL"),
227 PINCTRL_PIN(40, "PWR AGNDPLL2V5 26 60"), 227 PINCTRL_PIN(40, "PWR AGNDPLL2V5 26 60"),
228 PINCTRL_PIN(41, "PWR AVDDPLL2V5 26 60"), 228 PINCTRL_PIN(41, "PWR AVDDPLL2V5 26 60"),
229 PINCTRL_PIN(42, "PWR AVDDPLL2V5 26 208"), 229 PINCTRL_PIN(42, "PWR AVDDPLL2V5 26 208"),
230 PINCTRL_PIN(43, "PWR AGNDPLL2V5 26 208"), 230 PINCTRL_PIN(43, "PWR AGNDPLL2V5 26 208"),
231 PINCTRL_PIN(44, "PWR AVDDPLL2V5 13 208"), 231 PINCTRL_PIN(44, "PWR AVDDPLL2V5 13 208"),
232 PINCTRL_PIN(45, "PWR AGNDPLL2V5 13 208"), 232 PINCTRL_PIN(45, "PWR AGNDPLL2V5 13 208"),
233 PINCTRL_PIN(46, "P PAD VSSIO 11"), 233 PINCTRL_PIN(46, "P PAD VSSIO 11"),
234 PINCTRL_PIN(47, "P PAD VSSIO 12"), 234 PINCTRL_PIN(47, "P PAD VSSIO 12"),
235 PINCTRL_PIN(48, "PI POW RST N"), 235 PINCTRL_PIN(48, "PI POW RST N"),
236 PINCTRL_PIN(49, "VDDC IO"), 236 PINCTRL_PIN(49, "VDDC IO"),
237 PINCTRL_PIN(50, "P PAD VDDIO 16"), 237 PINCTRL_PIN(50, "P PAD VDDIO 16"),
238 PINCTRL_PIN(51, "PO RF WCDMA EN 4"), 238 PINCTRL_PIN(51, "PO RF WCDMA EN 4"),
239 PINCTRL_PIN(52, "PO RF WCDMA EN 3"), 239 PINCTRL_PIN(52, "PO RF WCDMA EN 3"),
240 PINCTRL_PIN(53, "PO RF WCDMA EN 2"), 240 PINCTRL_PIN(53, "PO RF WCDMA EN 2"),
241 PINCTRL_PIN(54, "PO RF WCDMA EN 1"), 241 PINCTRL_PIN(54, "PO RF WCDMA EN 1"),
242 PINCTRL_PIN(55, "PO RF WCDMA EN 0"), 242 PINCTRL_PIN(55, "PO RF WCDMA EN 0"),
243 PINCTRL_PIN(56, "PO GSM PA ENABLE"), 243 PINCTRL_PIN(56, "PO GSM PA ENABLE"),
244 PINCTRL_PIN(57, "PO RF DATA STRB"), 244 PINCTRL_PIN(57, "PO RF DATA STRB"),
245 PINCTRL_PIN(58, "PO RF DATA2"), 245 PINCTRL_PIN(58, "PO RF DATA2"),
246 PINCTRL_PIN(59, "PIO RF DATA1"), 246 PINCTRL_PIN(59, "PIO RF DATA1"),
247 PINCTRL_PIN(60, "PIO RF DATA0"), 247 PINCTRL_PIN(60, "PIO RF DATA0"),
248 PINCTRL_PIN(61, "P PAD VDD 11"), 248 PINCTRL_PIN(61, "P PAD VDD 11"),
249 PINCTRL_PIN(62, "P PAD GND 11"), 249 PINCTRL_PIN(62, "P PAD GND 11"),
250 PINCTRL_PIN(63, "P PAD VSSIO 16"), 250 PINCTRL_PIN(63, "P PAD VSSIO 16"),
251 PINCTRL_PIN(64, "P PAD VDDIO 18"), 251 PINCTRL_PIN(64, "P PAD VDDIO 18"),
252 PINCTRL_PIN(65, "PO RF CTRL STRB2"), 252 PINCTRL_PIN(65, "PO RF CTRL STRB2"),
253 PINCTRL_PIN(66, "PO RF CTRL STRB1"), 253 PINCTRL_PIN(66, "PO RF CTRL STRB1"),
254 PINCTRL_PIN(67, "PO RF CTRL STRB0"), 254 PINCTRL_PIN(67, "PO RF CTRL STRB0"),
255 PINCTRL_PIN(68, "PIO RF CTRL DATA"), 255 PINCTRL_PIN(68, "PIO RF CTRL DATA"),
256 PINCTRL_PIN(69, "PO RF CTRL CLK"), 256 PINCTRL_PIN(69, "PO RF CTRL CLK"),
257 PINCTRL_PIN(70, "PO TX ADC STRB"), 257 PINCTRL_PIN(70, "PO TX ADC STRB"),
258 PINCTRL_PIN(71, "PO ANT SW 2"), 258 PINCTRL_PIN(71, "PO ANT SW 2"),
259 PINCTRL_PIN(72, "PO ANT SW 3"), 259 PINCTRL_PIN(72, "PO ANT SW 3"),
260 PINCTRL_PIN(73, "PO ANT SW 0"), 260 PINCTRL_PIN(73, "PO ANT SW 0"),
261 PINCTRL_PIN(74, "PO ANT SW 1"), 261 PINCTRL_PIN(74, "PO ANT SW 1"),
262 PINCTRL_PIN(75, "PO M CLKRQ"), 262 PINCTRL_PIN(75, "PO M CLKRQ"),
263 PINCTRL_PIN(76, "PI M CLK"), 263 PINCTRL_PIN(76, "PI M CLK"),
264 PINCTRL_PIN(77, "PI RTC CLK"), 264 PINCTRL_PIN(77, "PI RTC CLK"),
265 PINCTRL_PIN(78, "P PAD VDD 8"), 265 PINCTRL_PIN(78, "P PAD VDD 8"),
266 PINCTRL_PIN(79, "P PAD GND 8"), 266 PINCTRL_PIN(79, "P PAD GND 8"),
267 PINCTRL_PIN(80, "P PAD VSSIO 13"), 267 PINCTRL_PIN(80, "P PAD VSSIO 13"),
268 PINCTRL_PIN(81, "P PAD VDDIO 13"), 268 PINCTRL_PIN(81, "P PAD VDDIO 13"),
269 PINCTRL_PIN(82, "PO SYS 1 CLK"), 269 PINCTRL_PIN(82, "PO SYS 1 CLK"),
270 PINCTRL_PIN(83, "PO SYS 2 CLK"), 270 PINCTRL_PIN(83, "PO SYS 2 CLK"),
271 PINCTRL_PIN(84, "PO SYS 0 CLK"), 271 PINCTRL_PIN(84, "PO SYS 0 CLK"),
272 PINCTRL_PIN(85, "PI SYS 0 CLKRQ"), 272 PINCTRL_PIN(85, "PI SYS 0 CLKRQ"),
273 PINCTRL_PIN(86, "PO PWR MNGT CTRL 1"), 273 PINCTRL_PIN(86, "PO PWR MNGT CTRL 1"),
274 PINCTRL_PIN(87, "PO PWR MNGT CTRL 0"), 274 PINCTRL_PIN(87, "PO PWR MNGT CTRL 0"),
275 PINCTRL_PIN(88, "PO RESOUT2 RST N"), 275 PINCTRL_PIN(88, "PO RESOUT2 RST N"),
276 PINCTRL_PIN(89, "PO RESOUT1 RST N"), 276 PINCTRL_PIN(89, "PO RESOUT1 RST N"),
277 PINCTRL_PIN(90, "PO RESOUT0 RST N"), 277 PINCTRL_PIN(90, "PO RESOUT0 RST N"),
278 PINCTRL_PIN(91, "PI SERVICE N"), 278 PINCTRL_PIN(91, "PI SERVICE N"),
279 PINCTRL_PIN(92, "P PAD VDD 29"), 279 PINCTRL_PIN(92, "P PAD VDD 29"),
280 PINCTRL_PIN(93, "P PAD GND 29"), 280 PINCTRL_PIN(93, "P PAD GND 29"),
281 PINCTRL_PIN(94, "P PAD VSSIO 8"), 281 PINCTRL_PIN(94, "P PAD VSSIO 8"),
282 PINCTRL_PIN(95, "P PAD VDDIO 8"), 282 PINCTRL_PIN(95, "P PAD VDDIO 8"),
283 PINCTRL_PIN(96, "PI EXT IRQ1 N"), 283 PINCTRL_PIN(96, "PI EXT IRQ1 N"),
284 PINCTRL_PIN(97, "PI EXT IRQ0 N"), 284 PINCTRL_PIN(97, "PI EXT IRQ0 N"),
285 PINCTRL_PIN(98, "PIO DC ON"), 285 PINCTRL_PIN(98, "PIO DC ON"),
286 PINCTRL_PIN(99, "PIO ACC APP I2C DATA"), 286 PINCTRL_PIN(99, "PIO ACC APP I2C DATA"),
287 PINCTRL_PIN(100, "PIO ACC APP I2C CLK"), 287 PINCTRL_PIN(100, "PIO ACC APP I2C CLK"),
288 PINCTRL_PIN(101, "P PAD VDD 12"), 288 PINCTRL_PIN(101, "P PAD VDD 12"),
289 PINCTRL_PIN(102, "P PAD GND 12"), 289 PINCTRL_PIN(102, "P PAD GND 12"),
290 PINCTRL_PIN(103, "P PAD VSSIO 14"), 290 PINCTRL_PIN(103, "P PAD VSSIO 14"),
291 PINCTRL_PIN(104, "P PAD VDDIO 14"), 291 PINCTRL_PIN(104, "P PAD VDDIO 14"),
292 /* Pads along the right edge of the chip */ 292 /* Pads along the right edge of the chip */
293 PINCTRL_PIN(105, "PIO APP I2C1 DATA"), 293 PINCTRL_PIN(105, "PIO APP I2C1 DATA"),
294 PINCTRL_PIN(106, "PIO APP I2C1 CLK"), 294 PINCTRL_PIN(106, "PIO APP I2C1 CLK"),
295 PINCTRL_PIN(107, "PO KEY OUT0"), 295 PINCTRL_PIN(107, "PO KEY OUT0"),
296 PINCTRL_PIN(108, "PO KEY OUT1"), 296 PINCTRL_PIN(108, "PO KEY OUT1"),
297 PINCTRL_PIN(109, "PO KEY OUT2"), 297 PINCTRL_PIN(109, "PO KEY OUT2"),
298 PINCTRL_PIN(110, "PO KEY OUT3"), 298 PINCTRL_PIN(110, "PO KEY OUT3"),
299 PINCTRL_PIN(111, "PO KEY OUT4"), 299 PINCTRL_PIN(111, "PO KEY OUT4"),
300 PINCTRL_PIN(112, "PI KEY IN0"), 300 PINCTRL_PIN(112, "PI KEY IN0"),
301 PINCTRL_PIN(113, "PI KEY IN1"), 301 PINCTRL_PIN(113, "PI KEY IN1"),
302 PINCTRL_PIN(114, "PI KEY IN2"), 302 PINCTRL_PIN(114, "PI KEY IN2"),
303 PINCTRL_PIN(115, "P PAD VDDIO 15"), 303 PINCTRL_PIN(115, "P PAD VDDIO 15"),
304 PINCTRL_PIN(116, "P PAD VSSIO 15"), 304 PINCTRL_PIN(116, "P PAD VSSIO 15"),
305 PINCTRL_PIN(117, "P PAD GND 13"), 305 PINCTRL_PIN(117, "P PAD GND 13"),
306 PINCTRL_PIN(118, "P PAD VDD 13"), 306 PINCTRL_PIN(118, "P PAD VDD 13"),
307 PINCTRL_PIN(119, "PI KEY IN3"), 307 PINCTRL_PIN(119, "PI KEY IN3"),
308 PINCTRL_PIN(120, "PI KEY IN4"), 308 PINCTRL_PIN(120, "PI KEY IN4"),
309 PINCTRL_PIN(121, "PI KEY IN5"), 309 PINCTRL_PIN(121, "PI KEY IN5"),
310 PINCTRL_PIN(122, "PIO APP PCM I2S1 DATA B"), 310 PINCTRL_PIN(122, "PIO APP PCM I2S1 DATA B"),
311 PINCTRL_PIN(123, "PIO APP PCM I2S1 DATA A"), 311 PINCTRL_PIN(123, "PIO APP PCM I2S1 DATA A"),
312 PINCTRL_PIN(124, "PIO APP PCM I2S1 WS"), 312 PINCTRL_PIN(124, "PIO APP PCM I2S1 WS"),
313 PINCTRL_PIN(125, "PIO APP PCM I2S1 CLK"), 313 PINCTRL_PIN(125, "PIO APP PCM I2S1 CLK"),
314 PINCTRL_PIN(126, "PIO APP PCM I2S0 DATA B"), 314 PINCTRL_PIN(126, "PIO APP PCM I2S0 DATA B"),
315 PINCTRL_PIN(127, "PIO APP PCM I2S0 DATA A"), 315 PINCTRL_PIN(127, "PIO APP PCM I2S0 DATA A"),
316 PINCTRL_PIN(128, "PIO APP PCM I2S0 WS"), 316 PINCTRL_PIN(128, "PIO APP PCM I2S0 WS"),
317 PINCTRL_PIN(129, "PIO APP PCM I2S0 CLK"), 317 PINCTRL_PIN(129, "PIO APP PCM I2S0 CLK"),
318 PINCTRL_PIN(130, "P PAD VDD 17"), 318 PINCTRL_PIN(130, "P PAD VDD 17"),
319 PINCTRL_PIN(131, "P PAD GND 17"), 319 PINCTRL_PIN(131, "P PAD GND 17"),
320 PINCTRL_PIN(132, "P PAD VSSIO 19"), 320 PINCTRL_PIN(132, "P PAD VSSIO 19"),
321 PINCTRL_PIN(133, "P PAD VDDIO 19"), 321 PINCTRL_PIN(133, "P PAD VDDIO 19"),
322 PINCTRL_PIN(134, "UART0 RTS"), 322 PINCTRL_PIN(134, "UART0 RTS"),
323 PINCTRL_PIN(135, "UART0 CTS"), 323 PINCTRL_PIN(135, "UART0 CTS"),
324 PINCTRL_PIN(136, "UART0 TX"), 324 PINCTRL_PIN(136, "UART0 TX"),
325 PINCTRL_PIN(137, "UART0 RX"), 325 PINCTRL_PIN(137, "UART0 RX"),
326 PINCTRL_PIN(138, "PIO ACC SPI DO"), 326 PINCTRL_PIN(138, "PIO ACC SPI DO"),
327 PINCTRL_PIN(139, "PIO ACC SPI DI"), 327 PINCTRL_PIN(139, "PIO ACC SPI DI"),
328 PINCTRL_PIN(140, "PIO ACC SPI CS0 N"), 328 PINCTRL_PIN(140, "PIO ACC SPI CS0 N"),
329 PINCTRL_PIN(141, "PIO ACC SPI CS1 N"), 329 PINCTRL_PIN(141, "PIO ACC SPI CS1 N"),
330 PINCTRL_PIN(142, "PIO ACC SPI CS2 N"), 330 PINCTRL_PIN(142, "PIO ACC SPI CS2 N"),
331 PINCTRL_PIN(143, "PIO ACC SPI CLK"), 331 PINCTRL_PIN(143, "PIO ACC SPI CLK"),
332 PINCTRL_PIN(144, "PO PDI EXT RST N"), 332 PINCTRL_PIN(144, "PO PDI EXT RST N"),
333 PINCTRL_PIN(145, "P PAD VDDIO 22"), 333 PINCTRL_PIN(145, "P PAD VDDIO 22"),
334 PINCTRL_PIN(146, "P PAD VSSIO 22"), 334 PINCTRL_PIN(146, "P PAD VSSIO 22"),
335 PINCTRL_PIN(147, "P PAD GND 18"), 335 PINCTRL_PIN(147, "P PAD GND 18"),
336 PINCTRL_PIN(148, "P PAD VDD 18"), 336 PINCTRL_PIN(148, "P PAD VDD 18"),
337 PINCTRL_PIN(149, "PIO PDI C0"), 337 PINCTRL_PIN(149, "PIO PDI C0"),
338 PINCTRL_PIN(150, "PIO PDI C1"), 338 PINCTRL_PIN(150, "PIO PDI C1"),
339 PINCTRL_PIN(151, "PIO PDI C2"), 339 PINCTRL_PIN(151, "PIO PDI C2"),
340 PINCTRL_PIN(152, "PIO PDI C3"), 340 PINCTRL_PIN(152, "PIO PDI C3"),
341 PINCTRL_PIN(153, "PIO PDI C4"), 341 PINCTRL_PIN(153, "PIO PDI C4"),
342 PINCTRL_PIN(154, "PIO PDI C5"), 342 PINCTRL_PIN(154, "PIO PDI C5"),
343 PINCTRL_PIN(155, "PIO PDI D0"), 343 PINCTRL_PIN(155, "PIO PDI D0"),
344 PINCTRL_PIN(156, "PIO PDI D1"), 344 PINCTRL_PIN(156, "PIO PDI D1"),
345 PINCTRL_PIN(157, "PIO PDI D2"), 345 PINCTRL_PIN(157, "PIO PDI D2"),
346 PINCTRL_PIN(158, "PIO PDI D3"), 346 PINCTRL_PIN(158, "PIO PDI D3"),
347 PINCTRL_PIN(159, "P PAD VDDIO 21"), 347 PINCTRL_PIN(159, "P PAD VDDIO 21"),
348 PINCTRL_PIN(160, "P PAD VSSIO 21"), 348 PINCTRL_PIN(160, "P PAD VSSIO 21"),
349 PINCTRL_PIN(161, "PIO PDI D4"), 349 PINCTRL_PIN(161, "PIO PDI D4"),
350 PINCTRL_PIN(162, "PIO PDI D5"), 350 PINCTRL_PIN(162, "PIO PDI D5"),
351 PINCTRL_PIN(163, "PIO PDI D6"), 351 PINCTRL_PIN(163, "PIO PDI D6"),
352 PINCTRL_PIN(164, "PIO PDI D7"), 352 PINCTRL_PIN(164, "PIO PDI D7"),
353 PINCTRL_PIN(165, "PIO MS INS"), 353 PINCTRL_PIN(165, "PIO MS INS"),
354 PINCTRL_PIN(166, "MMC DATA DIR LS"), 354 PINCTRL_PIN(166, "MMC DATA DIR LS"),
355 PINCTRL_PIN(167, "MMC DATA 3"), 355 PINCTRL_PIN(167, "MMC DATA 3"),
356 PINCTRL_PIN(168, "MMC DATA 2"), 356 PINCTRL_PIN(168, "MMC DATA 2"),
357 PINCTRL_PIN(169, "MMC DATA 1"), 357 PINCTRL_PIN(169, "MMC DATA 1"),
358 PINCTRL_PIN(170, "MMC DATA 0"), 358 PINCTRL_PIN(170, "MMC DATA 0"),
359 PINCTRL_PIN(171, "MMC CMD DIR LS"), 359 PINCTRL_PIN(171, "MMC CMD DIR LS"),
360 PINCTRL_PIN(172, "P PAD VDD 27"), 360 PINCTRL_PIN(172, "P PAD VDD 27"),
361 PINCTRL_PIN(173, "P PAD GND 27"), 361 PINCTRL_PIN(173, "P PAD GND 27"),
362 PINCTRL_PIN(174, "P PAD VSSIO 20"), 362 PINCTRL_PIN(174, "P PAD VSSIO 20"),
363 PINCTRL_PIN(175, "P PAD VDDIO 20"), 363 PINCTRL_PIN(175, "P PAD VDDIO 20"),
364 PINCTRL_PIN(176, "MMC CMD"), 364 PINCTRL_PIN(176, "MMC CMD"),
365 PINCTRL_PIN(177, "MMC CLK"), 365 PINCTRL_PIN(177, "MMC CLK"),
366 PINCTRL_PIN(178, "PIO APP GPIO 14"), 366 PINCTRL_PIN(178, "PIO APP GPIO 14"),
367 PINCTRL_PIN(179, "PIO APP GPIO 13"), 367 PINCTRL_PIN(179, "PIO APP GPIO 13"),
368 PINCTRL_PIN(180, "PIO APP GPIO 11"), 368 PINCTRL_PIN(180, "PIO APP GPIO 11"),
369 PINCTRL_PIN(181, "PIO APP GPIO 25"), 369 PINCTRL_PIN(181, "PIO APP GPIO 25"),
370 PINCTRL_PIN(182, "PIO APP GPIO 24"), 370 PINCTRL_PIN(182, "PIO APP GPIO 24"),
371 PINCTRL_PIN(183, "PIO APP GPIO 23"), 371 PINCTRL_PIN(183, "PIO APP GPIO 23"),
372 PINCTRL_PIN(184, "PIO APP GPIO 22"), 372 PINCTRL_PIN(184, "PIO APP GPIO 22"),
373 PINCTRL_PIN(185, "PIO APP GPIO 21"), 373 PINCTRL_PIN(185, "PIO APP GPIO 21"),
374 PINCTRL_PIN(186, "PIO APP GPIO 20"), 374 PINCTRL_PIN(186, "PIO APP GPIO 20"),
375 PINCTRL_PIN(187, "P PAD VDD 19"), 375 PINCTRL_PIN(187, "P PAD VDD 19"),
376 PINCTRL_PIN(188, "P PAD GND 19"), 376 PINCTRL_PIN(188, "P PAD GND 19"),
377 PINCTRL_PIN(189, "P PAD VSSIO 23"), 377 PINCTRL_PIN(189, "P PAD VSSIO 23"),
378 PINCTRL_PIN(190, "P PAD VDDIO 23"), 378 PINCTRL_PIN(190, "P PAD VDDIO 23"),
379 PINCTRL_PIN(191, "PIO APP GPIO 19"), 379 PINCTRL_PIN(191, "PIO APP GPIO 19"),
380 PINCTRL_PIN(192, "PIO APP GPIO 18"), 380 PINCTRL_PIN(192, "PIO APP GPIO 18"),
381 PINCTRL_PIN(193, "PIO APP GPIO 17"), 381 PINCTRL_PIN(193, "PIO APP GPIO 17"),
382 PINCTRL_PIN(194, "PIO APP GPIO 16"), 382 PINCTRL_PIN(194, "PIO APP GPIO 16"),
383 PINCTRL_PIN(195, "PI CI D1"), 383 PINCTRL_PIN(195, "PI CI D1"),
384 PINCTRL_PIN(196, "PI CI D0"), 384 PINCTRL_PIN(196, "PI CI D0"),
385 PINCTRL_PIN(197, "PI CI HSYNC"), 385 PINCTRL_PIN(197, "PI CI HSYNC"),
386 PINCTRL_PIN(198, "PI CI VSYNC"), 386 PINCTRL_PIN(198, "PI CI VSYNC"),
387 PINCTRL_PIN(199, "PI CI EXT CLK"), 387 PINCTRL_PIN(199, "PI CI EXT CLK"),
388 PINCTRL_PIN(200, "PO CI EXT RST N"), 388 PINCTRL_PIN(200, "PO CI EXT RST N"),
389 PINCTRL_PIN(201, "P PAD VSSIO 43"), 389 PINCTRL_PIN(201, "P PAD VSSIO 43"),
390 PINCTRL_PIN(202, "P PAD VDDIO 43"), 390 PINCTRL_PIN(202, "P PAD VDDIO 43"),
391 PINCTRL_PIN(203, "PI CI D6"), 391 PINCTRL_PIN(203, "PI CI D6"),
392 PINCTRL_PIN(204, "PI CI D7"), 392 PINCTRL_PIN(204, "PI CI D7"),
393 PINCTRL_PIN(205, "PI CI D2"), 393 PINCTRL_PIN(205, "PI CI D2"),
394 PINCTRL_PIN(206, "PI CI D3"), 394 PINCTRL_PIN(206, "PI CI D3"),
395 PINCTRL_PIN(207, "PI CI D4"), 395 PINCTRL_PIN(207, "PI CI D4"),
396 PINCTRL_PIN(208, "PI CI D5"), 396 PINCTRL_PIN(208, "PI CI D5"),
397 PINCTRL_PIN(209, "PI CI D8"), 397 PINCTRL_PIN(209, "PI CI D8"),
398 PINCTRL_PIN(210, "PI CI D9"), 398 PINCTRL_PIN(210, "PI CI D9"),
399 PINCTRL_PIN(211, "P PAD VDD 20"), 399 PINCTRL_PIN(211, "P PAD VDD 20"),
400 PINCTRL_PIN(212, "P PAD GND 20"), 400 PINCTRL_PIN(212, "P PAD GND 20"),
401 PINCTRL_PIN(213, "P PAD VSSIO 24"), 401 PINCTRL_PIN(213, "P PAD VSSIO 24"),
402 PINCTRL_PIN(214, "P PAD VDDIO 24"), 402 PINCTRL_PIN(214, "P PAD VDDIO 24"),
403 PINCTRL_PIN(215, "P PAD VDDIO 26"), 403 PINCTRL_PIN(215, "P PAD VDDIO 26"),
404 PINCTRL_PIN(216, "PO EMIF 1 A26"), 404 PINCTRL_PIN(216, "PO EMIF 1 A26"),
405 PINCTRL_PIN(217, "PO EMIF 1 A25"), 405 PINCTRL_PIN(217, "PO EMIF 1 A25"),
406 PINCTRL_PIN(218, "P PAD VSSIO 26"), 406 PINCTRL_PIN(218, "P PAD VSSIO 26"),
407 PINCTRL_PIN(219, "PO EMIF 1 A24"), 407 PINCTRL_PIN(219, "PO EMIF 1 A24"),
408 PINCTRL_PIN(220, "PO EMIF 1 A23"), 408 PINCTRL_PIN(220, "PO EMIF 1 A23"),
409 /* Pads along the bottom edge of the chip */ 409 /* Pads along the bottom edge of the chip */
410 PINCTRL_PIN(221, "PO EMIF 1 A22"), 410 PINCTRL_PIN(221, "PO EMIF 1 A22"),
411 PINCTRL_PIN(222, "PO EMIF 1 A21"), 411 PINCTRL_PIN(222, "PO EMIF 1 A21"),
412 PINCTRL_PIN(223, "P PAD VDD 21"), 412 PINCTRL_PIN(223, "P PAD VDD 21"),
413 PINCTRL_PIN(224, "P PAD GND 21"), 413 PINCTRL_PIN(224, "P PAD GND 21"),
414 PINCTRL_PIN(225, "P PAD VSSIO 27"), 414 PINCTRL_PIN(225, "P PAD VSSIO 27"),
415 PINCTRL_PIN(226, "P PAD VDDIO 27"), 415 PINCTRL_PIN(226, "P PAD VDDIO 27"),
416 PINCTRL_PIN(227, "PO EMIF 1 A20"), 416 PINCTRL_PIN(227, "PO EMIF 1 A20"),
417 PINCTRL_PIN(228, "PO EMIF 1 A19"), 417 PINCTRL_PIN(228, "PO EMIF 1 A19"),
418 PINCTRL_PIN(229, "PO EMIF 1 A18"), 418 PINCTRL_PIN(229, "PO EMIF 1 A18"),
419 PINCTRL_PIN(230, "PO EMIF 1 A17"), 419 PINCTRL_PIN(230, "PO EMIF 1 A17"),
420 PINCTRL_PIN(231, "P PAD VDDIO 28"), 420 PINCTRL_PIN(231, "P PAD VDDIO 28"),
421 PINCTRL_PIN(232, "P PAD VSSIO 28"), 421 PINCTRL_PIN(232, "P PAD VSSIO 28"),
422 PINCTRL_PIN(233, "PO EMIF 1 A16"), 422 PINCTRL_PIN(233, "PO EMIF 1 A16"),
423 PINCTRL_PIN(234, "PIO EMIF 1 D15"), 423 PINCTRL_PIN(234, "PIO EMIF 1 D15"),
424 PINCTRL_PIN(235, "PO EMIF 1 A15"), 424 PINCTRL_PIN(235, "PO EMIF 1 A15"),
425 PINCTRL_PIN(236, "PIO EMIF 1 D14"), 425 PINCTRL_PIN(236, "PIO EMIF 1 D14"),
426 PINCTRL_PIN(237, "P PAD VDD 22"), 426 PINCTRL_PIN(237, "P PAD VDD 22"),
427 PINCTRL_PIN(238, "P PAD GND 22"), 427 PINCTRL_PIN(238, "P PAD GND 22"),
428 PINCTRL_PIN(239, "P PAD VSSIO 29"), 428 PINCTRL_PIN(239, "P PAD VSSIO 29"),
429 PINCTRL_PIN(240, "P PAD VDDIO 29"), 429 PINCTRL_PIN(240, "P PAD VDDIO 29"),
430 PINCTRL_PIN(241, "PO EMIF 1 A14"), 430 PINCTRL_PIN(241, "PO EMIF 1 A14"),
431 PINCTRL_PIN(242, "PIO EMIF 1 D13"), 431 PINCTRL_PIN(242, "PIO EMIF 1 D13"),
432 PINCTRL_PIN(243, "PO EMIF 1 A13"), 432 PINCTRL_PIN(243, "PO EMIF 1 A13"),
433 PINCTRL_PIN(244, "PIO EMIF 1 D12"), 433 PINCTRL_PIN(244, "PIO EMIF 1 D12"),
434 PINCTRL_PIN(245, "P PAD VSSIO 30"), 434 PINCTRL_PIN(245, "P PAD VSSIO 30"),
435 PINCTRL_PIN(246, "P PAD VDDIO 30"), 435 PINCTRL_PIN(246, "P PAD VDDIO 30"),
436 PINCTRL_PIN(247, "PO EMIF 1 A12"), 436 PINCTRL_PIN(247, "PO EMIF 1 A12"),
437 PINCTRL_PIN(248, "PIO EMIF 1 D11"), 437 PINCTRL_PIN(248, "PIO EMIF 1 D11"),
438 PINCTRL_PIN(249, "PO EMIF 1 A11"), 438 PINCTRL_PIN(249, "PO EMIF 1 A11"),
439 PINCTRL_PIN(250, "PIO EMIF 1 D10"), 439 PINCTRL_PIN(250, "PIO EMIF 1 D10"),
440 PINCTRL_PIN(251, "P PAD VSSIO 31"), 440 PINCTRL_PIN(251, "P PAD VSSIO 31"),
441 PINCTRL_PIN(252, "P PAD VDDIO 31"), 441 PINCTRL_PIN(252, "P PAD VDDIO 31"),
442 PINCTRL_PIN(253, "PO EMIF 1 A10"), 442 PINCTRL_PIN(253, "PO EMIF 1 A10"),
443 PINCTRL_PIN(254, "PIO EMIF 1 D09"), 443 PINCTRL_PIN(254, "PIO EMIF 1 D09"),
444 PINCTRL_PIN(255, "PO EMIF 1 A09"), 444 PINCTRL_PIN(255, "PO EMIF 1 A09"),
445 PINCTRL_PIN(256, "P PAD VDDIO 32"), 445 PINCTRL_PIN(256, "P PAD VDDIO 32"),
446 PINCTRL_PIN(257, "P PAD VSSIO 32"), 446 PINCTRL_PIN(257, "P PAD VSSIO 32"),
447 PINCTRL_PIN(258, "P PAD GND 24"), 447 PINCTRL_PIN(258, "P PAD GND 24"),
448 PINCTRL_PIN(259, "P PAD VDD 24"), 448 PINCTRL_PIN(259, "P PAD VDD 24"),
449 PINCTRL_PIN(260, "PIO EMIF 1 D08"), 449 PINCTRL_PIN(260, "PIO EMIF 1 D08"),
450 PINCTRL_PIN(261, "PO EMIF 1 A08"), 450 PINCTRL_PIN(261, "PO EMIF 1 A08"),
451 PINCTRL_PIN(262, "PIO EMIF 1 D07"), 451 PINCTRL_PIN(262, "PIO EMIF 1 D07"),
452 PINCTRL_PIN(263, "PO EMIF 1 A07"), 452 PINCTRL_PIN(263, "PO EMIF 1 A07"),
453 PINCTRL_PIN(264, "P PAD VDDIO 33"), 453 PINCTRL_PIN(264, "P PAD VDDIO 33"),
454 PINCTRL_PIN(265, "P PAD VSSIO 33"), 454 PINCTRL_PIN(265, "P PAD VSSIO 33"),
455 PINCTRL_PIN(266, "PIO EMIF 1 D06"), 455 PINCTRL_PIN(266, "PIO EMIF 1 D06"),
456 PINCTRL_PIN(267, "PO EMIF 1 A06"), 456 PINCTRL_PIN(267, "PO EMIF 1 A06"),
457 PINCTRL_PIN(268, "PIO EMIF 1 D05"), 457 PINCTRL_PIN(268, "PIO EMIF 1 D05"),
458 PINCTRL_PIN(269, "PO EMIF 1 A05"), 458 PINCTRL_PIN(269, "PO EMIF 1 A05"),
459 PINCTRL_PIN(270, "P PAD VDDIO 34"), 459 PINCTRL_PIN(270, "P PAD VDDIO 34"),
460 PINCTRL_PIN(271, "P PAD VSSIO 34"), 460 PINCTRL_PIN(271, "P PAD VSSIO 34"),
461 PINCTRL_PIN(272, "PIO EMIF 1 D04"), 461 PINCTRL_PIN(272, "PIO EMIF 1 D04"),
462 PINCTRL_PIN(273, "PO EMIF 1 A04"), 462 PINCTRL_PIN(273, "PO EMIF 1 A04"),
463 PINCTRL_PIN(274, "PIO EMIF 1 D03"), 463 PINCTRL_PIN(274, "PIO EMIF 1 D03"),
464 PINCTRL_PIN(275, "PO EMIF 1 A03"), 464 PINCTRL_PIN(275, "PO EMIF 1 A03"),
465 PINCTRL_PIN(276, "P PAD VDDIO 35"), 465 PINCTRL_PIN(276, "P PAD VDDIO 35"),
466 PINCTRL_PIN(277, "P PAD VSSIO 35"), 466 PINCTRL_PIN(277, "P PAD VSSIO 35"),
467 PINCTRL_PIN(278, "P PAD GND 23"), 467 PINCTRL_PIN(278, "P PAD GND 23"),
468 PINCTRL_PIN(279, "P PAD VDD 23"), 468 PINCTRL_PIN(279, "P PAD VDD 23"),
469 PINCTRL_PIN(280, "PIO EMIF 1 D02"), 469 PINCTRL_PIN(280, "PIO EMIF 1 D02"),
470 PINCTRL_PIN(281, "PO EMIF 1 A02"), 470 PINCTRL_PIN(281, "PO EMIF 1 A02"),
471 PINCTRL_PIN(282, "PIO EMIF 1 D01"), 471 PINCTRL_PIN(282, "PIO EMIF 1 D01"),
472 PINCTRL_PIN(283, "PO EMIF 1 A01"), 472 PINCTRL_PIN(283, "PO EMIF 1 A01"),
473 PINCTRL_PIN(284, "P PAD VDDIO 36"), 473 PINCTRL_PIN(284, "P PAD VDDIO 36"),
474 PINCTRL_PIN(285, "P PAD VSSIO 36"), 474 PINCTRL_PIN(285, "P PAD VSSIO 36"),
475 PINCTRL_PIN(286, "PIO EMIF 1 D00"), 475 PINCTRL_PIN(286, "PIO EMIF 1 D00"),
476 PINCTRL_PIN(287, "PO EMIF 1 BE1 N"), 476 PINCTRL_PIN(287, "PO EMIF 1 BE1 N"),
477 PINCTRL_PIN(288, "PO EMIF 1 BE0 N"), 477 PINCTRL_PIN(288, "PO EMIF 1 BE0 N"),
478 PINCTRL_PIN(289, "PO EMIF 1 ADV N"), 478 PINCTRL_PIN(289, "PO EMIF 1 ADV N"),
479 PINCTRL_PIN(290, "P PAD VDDIO 37"), 479 PINCTRL_PIN(290, "P PAD VDDIO 37"),
480 PINCTRL_PIN(291, "P PAD VSSIO 37"), 480 PINCTRL_PIN(291, "P PAD VSSIO 37"),
481 PINCTRL_PIN(292, "PO EMIF 1 SD CKE0"), 481 PINCTRL_PIN(292, "PO EMIF 1 SD CKE0"),
482 PINCTRL_PIN(293, "PO EMIF 1 OE N"), 482 PINCTRL_PIN(293, "PO EMIF 1 OE N"),
483 PINCTRL_PIN(294, "PO EMIF 1 WE N"), 483 PINCTRL_PIN(294, "PO EMIF 1 WE N"),
484 PINCTRL_PIN(295, "P PAD VDDIO 38"), 484 PINCTRL_PIN(295, "P PAD VDDIO 38"),
485 PINCTRL_PIN(296, "P PAD VSSIO 38"), 485 PINCTRL_PIN(296, "P PAD VSSIO 38"),
486 PINCTRL_PIN(297, "PO EMIF 1 CLK"), 486 PINCTRL_PIN(297, "PO EMIF 1 CLK"),
487 PINCTRL_PIN(298, "PIO EMIF 1 SD CLK"), 487 PINCTRL_PIN(298, "PIO EMIF 1 SD CLK"),
488 PINCTRL_PIN(299, "P PAD VSSIO 45 (not bonded)"), 488 PINCTRL_PIN(299, "P PAD VSSIO 45 (not bonded)"),
489 PINCTRL_PIN(300, "P PAD VDDIO 42"), 489 PINCTRL_PIN(300, "P PAD VDDIO 42"),
490 PINCTRL_PIN(301, "P PAD VSSIO 42"), 490 PINCTRL_PIN(301, "P PAD VSSIO 42"),
491 PINCTRL_PIN(302, "P PAD GND 31"), 491 PINCTRL_PIN(302, "P PAD GND 31"),
492 PINCTRL_PIN(303, "P PAD VDD 31"), 492 PINCTRL_PIN(303, "P PAD VDD 31"),
493 PINCTRL_PIN(304, "PI EMIF 1 RET CLK"), 493 PINCTRL_PIN(304, "PI EMIF 1 RET CLK"),
494 PINCTRL_PIN(305, "PI EMIF 1 WAIT N"), 494 PINCTRL_PIN(305, "PI EMIF 1 WAIT N"),
495 PINCTRL_PIN(306, "PI EMIF 1 NFIF READY"), 495 PINCTRL_PIN(306, "PI EMIF 1 NFIF READY"),
496 PINCTRL_PIN(307, "PO EMIF 1 SD CKE1"), 496 PINCTRL_PIN(307, "PO EMIF 1 SD CKE1"),
497 PINCTRL_PIN(308, "PO EMIF 1 CS3 N"), 497 PINCTRL_PIN(308, "PO EMIF 1 CS3 N"),
498 PINCTRL_PIN(309, "P PAD VDD 25"), 498 PINCTRL_PIN(309, "P PAD VDD 25"),
499 PINCTRL_PIN(310, "P PAD GND 25"), 499 PINCTRL_PIN(310, "P PAD GND 25"),
500 PINCTRL_PIN(311, "P PAD VSSIO 39"), 500 PINCTRL_PIN(311, "P PAD VSSIO 39"),
501 PINCTRL_PIN(312, "P PAD VDDIO 39"), 501 PINCTRL_PIN(312, "P PAD VDDIO 39"),
502 PINCTRL_PIN(313, "PO EMIF 1 CS2 N"), 502 PINCTRL_PIN(313, "PO EMIF 1 CS2 N"),
503 PINCTRL_PIN(314, "PO EMIF 1 CS1 N"), 503 PINCTRL_PIN(314, "PO EMIF 1 CS1 N"),
504 PINCTRL_PIN(315, "PO EMIF 1 CS0 N"), 504 PINCTRL_PIN(315, "PO EMIF 1 CS0 N"),
505 PINCTRL_PIN(316, "PO ETM TRACE PKT0"), 505 PINCTRL_PIN(316, "PO ETM TRACE PKT0"),
506 PINCTRL_PIN(317, "PO ETM TRACE PKT1"), 506 PINCTRL_PIN(317, "PO ETM TRACE PKT1"),
507 PINCTRL_PIN(318, "PO ETM TRACE PKT2"), 507 PINCTRL_PIN(318, "PO ETM TRACE PKT2"),
508 PINCTRL_PIN(319, "P PAD VDD 30"), 508 PINCTRL_PIN(319, "P PAD VDD 30"),
509 PINCTRL_PIN(320, "P PAD GND 30"), 509 PINCTRL_PIN(320, "P PAD GND 30"),
510 PINCTRL_PIN(321, "P PAD VSSIO 44"), 510 PINCTRL_PIN(321, "P PAD VSSIO 44"),
511 PINCTRL_PIN(322, "P PAD VDDIO 44"), 511 PINCTRL_PIN(322, "P PAD VDDIO 44"),
512 PINCTRL_PIN(323, "PO ETM TRACE PKT3"), 512 PINCTRL_PIN(323, "PO ETM TRACE PKT3"),
513 PINCTRL_PIN(324, "PO ETM TRACE PKT4"), 513 PINCTRL_PIN(324, "PO ETM TRACE PKT4"),
514 PINCTRL_PIN(325, "PO ETM TRACE PKT5"), 514 PINCTRL_PIN(325, "PO ETM TRACE PKT5"),
515 PINCTRL_PIN(326, "PO ETM TRACE PKT6"), 515 PINCTRL_PIN(326, "PO ETM TRACE PKT6"),
516 PINCTRL_PIN(327, "PO ETM TRACE PKT7"), 516 PINCTRL_PIN(327, "PO ETM TRACE PKT7"),
517 PINCTRL_PIN(328, "PO ETM PIPE STAT0"), 517 PINCTRL_PIN(328, "PO ETM PIPE STAT0"),
518 PINCTRL_PIN(329, "P PAD VDD 26"), 518 PINCTRL_PIN(329, "P PAD VDD 26"),
519 PINCTRL_PIN(330, "P PAD GND 26"), 519 PINCTRL_PIN(330, "P PAD GND 26"),
520 PINCTRL_PIN(331, "P PAD VSSIO 40"), 520 PINCTRL_PIN(331, "P PAD VSSIO 40"),
521 PINCTRL_PIN(332, "P PAD VDDIO 40"), 521 PINCTRL_PIN(332, "P PAD VDDIO 40"),
522 PINCTRL_PIN(333, "PO ETM PIPE STAT1"), 522 PINCTRL_PIN(333, "PO ETM PIPE STAT1"),
523 PINCTRL_PIN(334, "PO ETM PIPE STAT2"), 523 PINCTRL_PIN(334, "PO ETM PIPE STAT2"),
524 PINCTRL_PIN(335, "PO ETM TRACE CLK"), 524 PINCTRL_PIN(335, "PO ETM TRACE CLK"),
525 PINCTRL_PIN(336, "PO ETM TRACE SYNC"), 525 PINCTRL_PIN(336, "PO ETM TRACE SYNC"),
526 PINCTRL_PIN(337, "PIO ACC GPIO 33"), 526 PINCTRL_PIN(337, "PIO ACC GPIO 33"),
527 PINCTRL_PIN(338, "PIO ACC GPIO 32"), 527 PINCTRL_PIN(338, "PIO ACC GPIO 32"),
528 PINCTRL_PIN(339, "PIO ACC GPIO 30"), 528 PINCTRL_PIN(339, "PIO ACC GPIO 30"),
529 PINCTRL_PIN(340, "PIO ACC GPIO 29"), 529 PINCTRL_PIN(340, "PIO ACC GPIO 29"),
530 PINCTRL_PIN(341, "P PAD VDDIO 17"), 530 PINCTRL_PIN(341, "P PAD VDDIO 17"),
531 PINCTRL_PIN(342, "P PAD VSSIO 17"), 531 PINCTRL_PIN(342, "P PAD VSSIO 17"),
532 PINCTRL_PIN(343, "P PAD GND 15"), 532 PINCTRL_PIN(343, "P PAD GND 15"),
533 PINCTRL_PIN(344, "P PAD VDD 15"), 533 PINCTRL_PIN(344, "P PAD VDD 15"),
534 PINCTRL_PIN(345, "PIO ACC GPIO 28"), 534 PINCTRL_PIN(345, "PIO ACC GPIO 28"),
535 PINCTRL_PIN(346, "PIO ACC GPIO 27"), 535 PINCTRL_PIN(346, "PIO ACC GPIO 27"),
536 PINCTRL_PIN(347, "PIO ACC GPIO 16"), 536 PINCTRL_PIN(347, "PIO ACC GPIO 16"),
537 PINCTRL_PIN(348, "PI TAP TMS"), 537 PINCTRL_PIN(348, "PI TAP TMS"),
538 PINCTRL_PIN(349, "PI TAP TDI"), 538 PINCTRL_PIN(349, "PI TAP TDI"),
539 PINCTRL_PIN(350, "PO TAP TDO"), 539 PINCTRL_PIN(350, "PO TAP TDO"),
540 PINCTRL_PIN(351, "PI TAP RST N"), 540 PINCTRL_PIN(351, "PI TAP RST N"),
541 /* Pads along the left edge of the chip */ 541 /* Pads along the left edge of the chip */
542 PINCTRL_PIN(352, "PI EMU MODE 0"), 542 PINCTRL_PIN(352, "PI EMU MODE 0"),
543 PINCTRL_PIN(353, "PO TAP RET CLK"), 543 PINCTRL_PIN(353, "PO TAP RET CLK"),
544 PINCTRL_PIN(354, "PI TAP CLK"), 544 PINCTRL_PIN(354, "PI TAP CLK"),
545 PINCTRL_PIN(355, "PO EMIF 0 SD CS N"), 545 PINCTRL_PIN(355, "PO EMIF 0 SD CS N"),
546 PINCTRL_PIN(356, "PO EMIF 0 SD CAS N"), 546 PINCTRL_PIN(356, "PO EMIF 0 SD CAS N"),
547 PINCTRL_PIN(357, "PO EMIF 0 SD WE N"), 547 PINCTRL_PIN(357, "PO EMIF 0 SD WE N"),
548 PINCTRL_PIN(358, "P PAD VDDIO 1"), 548 PINCTRL_PIN(358, "P PAD VDDIO 1"),
549 PINCTRL_PIN(359, "P PAD VSSIO 1"), 549 PINCTRL_PIN(359, "P PAD VSSIO 1"),
550 PINCTRL_PIN(360, "P PAD GND 1"), 550 PINCTRL_PIN(360, "P PAD GND 1"),
551 PINCTRL_PIN(361, "P PAD VDD 1"), 551 PINCTRL_PIN(361, "P PAD VDD 1"),
552 PINCTRL_PIN(362, "PO EMIF 0 SD CKE"), 552 PINCTRL_PIN(362, "PO EMIF 0 SD CKE"),
553 PINCTRL_PIN(363, "PO EMIF 0 SD DQML"), 553 PINCTRL_PIN(363, "PO EMIF 0 SD DQML"),
554 PINCTRL_PIN(364, "PO EMIF 0 SD DQMU"), 554 PINCTRL_PIN(364, "PO EMIF 0 SD DQMU"),
555 PINCTRL_PIN(365, "PO EMIF 0 SD RAS N"), 555 PINCTRL_PIN(365, "PO EMIF 0 SD RAS N"),
556 PINCTRL_PIN(366, "PIO EMIF 0 D15"), 556 PINCTRL_PIN(366, "PIO EMIF 0 D15"),
557 PINCTRL_PIN(367, "PO EMIF 0 A15"), 557 PINCTRL_PIN(367, "PO EMIF 0 A15"),
558 PINCTRL_PIN(368, "PIO EMIF 0 D14"), 558 PINCTRL_PIN(368, "PIO EMIF 0 D14"),
559 PINCTRL_PIN(369, "PO EMIF 0 A14"), 559 PINCTRL_PIN(369, "PO EMIF 0 A14"),
560 PINCTRL_PIN(370, "PIO EMIF 0 D13"), 560 PINCTRL_PIN(370, "PIO EMIF 0 D13"),
561 PINCTRL_PIN(371, "PO EMIF 0 A13"), 561 PINCTRL_PIN(371, "PO EMIF 0 A13"),
562 PINCTRL_PIN(372, "P PAD VDDIO 2"), 562 PINCTRL_PIN(372, "P PAD VDDIO 2"),
563 PINCTRL_PIN(373, "P PAD VSSIO 2"), 563 PINCTRL_PIN(373, "P PAD VSSIO 2"),
564 PINCTRL_PIN(374, "P PAD GND 2"), 564 PINCTRL_PIN(374, "P PAD GND 2"),
565 PINCTRL_PIN(375, "P PAD VDD 2"), 565 PINCTRL_PIN(375, "P PAD VDD 2"),
566 PINCTRL_PIN(376, "PIO EMIF 0 D12"), 566 PINCTRL_PIN(376, "PIO EMIF 0 D12"),
567 PINCTRL_PIN(377, "PO EMIF 0 A12"), 567 PINCTRL_PIN(377, "PO EMIF 0 A12"),
568 PINCTRL_PIN(378, "PIO EMIF 0 D11"), 568 PINCTRL_PIN(378, "PIO EMIF 0 D11"),
569 PINCTRL_PIN(379, "PO EMIF 0 A11"), 569 PINCTRL_PIN(379, "PO EMIF 0 A11"),
570 PINCTRL_PIN(380, "PIO EMIF 0 D10"), 570 PINCTRL_PIN(380, "PIO EMIF 0 D10"),
571 PINCTRL_PIN(381, "PO EMIF 0 A10"), 571 PINCTRL_PIN(381, "PO EMIF 0 A10"),
572 PINCTRL_PIN(382, "PIO EMIF 0 D09"), 572 PINCTRL_PIN(382, "PIO EMIF 0 D09"),
573 PINCTRL_PIN(383, "PO EMIF 0 A09"), 573 PINCTRL_PIN(383, "PO EMIF 0 A09"),
574 PINCTRL_PIN(384, "PIO EMIF 0 D08"), 574 PINCTRL_PIN(384, "PIO EMIF 0 D08"),
575 PINCTRL_PIN(385, "PO EMIF 0 A08"), 575 PINCTRL_PIN(385, "PO EMIF 0 A08"),
576 PINCTRL_PIN(386, "PIO EMIF 0 D07"), 576 PINCTRL_PIN(386, "PIO EMIF 0 D07"),
577 PINCTRL_PIN(387, "PO EMIF 0 A07"), 577 PINCTRL_PIN(387, "PO EMIF 0 A07"),
578 PINCTRL_PIN(388, "P PAD VDDIO 3"), 578 PINCTRL_PIN(388, "P PAD VDDIO 3"),
579 PINCTRL_PIN(389, "P PAD VSSIO 3"), 579 PINCTRL_PIN(389, "P PAD VSSIO 3"),
580 PINCTRL_PIN(390, "P PAD GND 3"), 580 PINCTRL_PIN(390, "P PAD GND 3"),
581 PINCTRL_PIN(391, "P PAD VDD 3"), 581 PINCTRL_PIN(391, "P PAD VDD 3"),
582 PINCTRL_PIN(392, "PO EFUSE RDOUT1"), 582 PINCTRL_PIN(392, "PO EFUSE RDOUT1"),
583 PINCTRL_PIN(393, "PIO EMIF 0 D06"), 583 PINCTRL_PIN(393, "PIO EMIF 0 D06"),
584 PINCTRL_PIN(394, "PO EMIF 0 A06"), 584 PINCTRL_PIN(394, "PO EMIF 0 A06"),
585 PINCTRL_PIN(395, "PIO EMIF 0 D05"), 585 PINCTRL_PIN(395, "PIO EMIF 0 D05"),
586 PINCTRL_PIN(396, "PO EMIF 0 A05"), 586 PINCTRL_PIN(396, "PO EMIF 0 A05"),
587 PINCTRL_PIN(397, "PIO EMIF 0 D04"), 587 PINCTRL_PIN(397, "PIO EMIF 0 D04"),
588 PINCTRL_PIN(398, "PO EMIF 0 A04"), 588 PINCTRL_PIN(398, "PO EMIF 0 A04"),
589 PINCTRL_PIN(399, "A PADS/A VDDCO1v82v5 GND 80U SF LIN VDDCO AF"), 589 PINCTRL_PIN(399, "A PADS/A VDDCO1v82v5 GND 80U SF LIN VDDCO AF"),
590 PINCTRL_PIN(400, "PWR VDDCO AF"), 590 PINCTRL_PIN(400, "PWR VDDCO AF"),
591 PINCTRL_PIN(401, "PWR EFUSE HV1"), 591 PINCTRL_PIN(401, "PWR EFUSE HV1"),
592 PINCTRL_PIN(402, "P PAD VSSIO 4"), 592 PINCTRL_PIN(402, "P PAD VSSIO 4"),
593 PINCTRL_PIN(403, "P PAD VDDIO 4"), 593 PINCTRL_PIN(403, "P PAD VDDIO 4"),
594 PINCTRL_PIN(404, "P PAD GND 4"), 594 PINCTRL_PIN(404, "P PAD GND 4"),
595 PINCTRL_PIN(405, "P PAD VDD 4"), 595 PINCTRL_PIN(405, "P PAD VDD 4"),
596 PINCTRL_PIN(406, "PIO EMIF 0 D03"), 596 PINCTRL_PIN(406, "PIO EMIF 0 D03"),
597 PINCTRL_PIN(407, "PO EMIF 0 A03"), 597 PINCTRL_PIN(407, "PO EMIF 0 A03"),
598 PINCTRL_PIN(408, "PWR EFUSE HV2"), 598 PINCTRL_PIN(408, "PWR EFUSE HV2"),
599 PINCTRL_PIN(409, "PWR EFUSE HV3"), 599 PINCTRL_PIN(409, "PWR EFUSE HV3"),
600 PINCTRL_PIN(410, "PIO EMIF 0 D02"), 600 PINCTRL_PIN(410, "PIO EMIF 0 D02"),
601 PINCTRL_PIN(411, "PO EMIF 0 A02"), 601 PINCTRL_PIN(411, "PO EMIF 0 A02"),
602 PINCTRL_PIN(412, "PIO EMIF 0 D01"), 602 PINCTRL_PIN(412, "PIO EMIF 0 D01"),
603 PINCTRL_PIN(413, "P PAD VDDIO 5"), 603 PINCTRL_PIN(413, "P PAD VDDIO 5"),
604 PINCTRL_PIN(414, "P PAD VSSIO 5"), 604 PINCTRL_PIN(414, "P PAD VSSIO 5"),
605 PINCTRL_PIN(415, "P PAD GND 5"), 605 PINCTRL_PIN(415, "P PAD GND 5"),
606 PINCTRL_PIN(416, "P PAD VDD 5"), 606 PINCTRL_PIN(416, "P PAD VDD 5"),
607 PINCTRL_PIN(417, "PO EMIF 0 A01"), 607 PINCTRL_PIN(417, "PO EMIF 0 A01"),
608 PINCTRL_PIN(418, "PIO EMIF 0 D00"), 608 PINCTRL_PIN(418, "PIO EMIF 0 D00"),
609 PINCTRL_PIN(419, "IF 0 SD CLK"), 609 PINCTRL_PIN(419, "IF 0 SD CLK"),
610 PINCTRL_PIN(420, "APP SPI CLK"), 610 PINCTRL_PIN(420, "APP SPI CLK"),
611 PINCTRL_PIN(421, "APP SPI DO"), 611 PINCTRL_PIN(421, "APP SPI DO"),
612 PINCTRL_PIN(422, "APP SPI DI"), 612 PINCTRL_PIN(422, "APP SPI DI"),
613 PINCTRL_PIN(423, "APP SPI CS0"), 613 PINCTRL_PIN(423, "APP SPI CS0"),
614 PINCTRL_PIN(424, "APP SPI CS1"), 614 PINCTRL_PIN(424, "APP SPI CS1"),
615 PINCTRL_PIN(425, "APP SPI CS2"), 615 PINCTRL_PIN(425, "APP SPI CS2"),
616 PINCTRL_PIN(426, "PIO APP GPIO 10"), 616 PINCTRL_PIN(426, "PIO APP GPIO 10"),
617 PINCTRL_PIN(427, "P PAD VDDIO 41"), 617 PINCTRL_PIN(427, "P PAD VDDIO 41"),
618 PINCTRL_PIN(428, "P PAD VSSIO 41"), 618 PINCTRL_PIN(428, "P PAD VSSIO 41"),
619 PINCTRL_PIN(429, "P PAD GND 6"), 619 PINCTRL_PIN(429, "P PAD GND 6"),
620 PINCTRL_PIN(430, "P PAD VDD 6"), 620 PINCTRL_PIN(430, "P PAD VDD 6"),
621 PINCTRL_PIN(431, "PIO ACC SDIO0 CMD"), 621 PINCTRL_PIN(431, "PIO ACC SDIO0 CMD"),
622 PINCTRL_PIN(432, "PIO ACC SDIO0 CK"), 622 PINCTRL_PIN(432, "PIO ACC SDIO0 CK"),
623 PINCTRL_PIN(433, "PIO ACC SDIO0 D3"), 623 PINCTRL_PIN(433, "PIO ACC SDIO0 D3"),
624 PINCTRL_PIN(434, "PIO ACC SDIO0 D2"), 624 PINCTRL_PIN(434, "PIO ACC SDIO0 D2"),
625 PINCTRL_PIN(435, "PIO ACC SDIO0 D1"), 625 PINCTRL_PIN(435, "PIO ACC SDIO0 D1"),
626 PINCTRL_PIN(436, "PIO ACC SDIO0 D0"), 626 PINCTRL_PIN(436, "PIO ACC SDIO0 D0"),
627 PINCTRL_PIN(437, "PIO USB PU"), 627 PINCTRL_PIN(437, "PIO USB PU"),
628 PINCTRL_PIN(438, "PIO USB SP"), 628 PINCTRL_PIN(438, "PIO USB SP"),
629 PINCTRL_PIN(439, "PIO USB DAT VP"), 629 PINCTRL_PIN(439, "PIO USB DAT VP"),
630 PINCTRL_PIN(440, "PIO USB SE0 VM"), 630 PINCTRL_PIN(440, "PIO USB SE0 VM"),
631 PINCTRL_PIN(441, "PIO USB OE"), 631 PINCTRL_PIN(441, "PIO USB OE"),
632 PINCTRL_PIN(442, "PIO USB SUSP"), 632 PINCTRL_PIN(442, "PIO USB SUSP"),
633 PINCTRL_PIN(443, "P PAD VSSIO 6"), 633 PINCTRL_PIN(443, "P PAD VSSIO 6"),
634 PINCTRL_PIN(444, "P PAD VDDIO 6"), 634 PINCTRL_PIN(444, "P PAD VDDIO 6"),
635 PINCTRL_PIN(445, "PIO USB PUEN"), 635 PINCTRL_PIN(445, "PIO USB PUEN"),
636 PINCTRL_PIN(446, "PIO ACC UART0 RX"), 636 PINCTRL_PIN(446, "PIO ACC UART0 RX"),
637 PINCTRL_PIN(447, "PIO ACC UART0 TX"), 637 PINCTRL_PIN(447, "PIO ACC UART0 TX"),
638 PINCTRL_PIN(448, "PIO ACC UART0 CTS"), 638 PINCTRL_PIN(448, "PIO ACC UART0 CTS"),
639 PINCTRL_PIN(449, "PIO ACC UART0 RTS"), 639 PINCTRL_PIN(449, "PIO ACC UART0 RTS"),
640 PINCTRL_PIN(450, "PIO ACC UART3 RX"), 640 PINCTRL_PIN(450, "PIO ACC UART3 RX"),
641 PINCTRL_PIN(451, "PIO ACC UART3 TX"), 641 PINCTRL_PIN(451, "PIO ACC UART3 TX"),
642 PINCTRL_PIN(452, "PIO ACC UART3 CTS"), 642 PINCTRL_PIN(452, "PIO ACC UART3 CTS"),
643 PINCTRL_PIN(453, "PIO ACC UART3 RTS"), 643 PINCTRL_PIN(453, "PIO ACC UART3 RTS"),
644 PINCTRL_PIN(454, "PIO ACC IRDA TX"), 644 PINCTRL_PIN(454, "PIO ACC IRDA TX"),
645 PINCTRL_PIN(455, "P PAD VDDIO 7"), 645 PINCTRL_PIN(455, "P PAD VDDIO 7"),
646 PINCTRL_PIN(456, "P PAD VSSIO 7"), 646 PINCTRL_PIN(456, "P PAD VSSIO 7"),
647 PINCTRL_PIN(457, "P PAD GND 7"), 647 PINCTRL_PIN(457, "P PAD GND 7"),
648 PINCTRL_PIN(458, "P PAD VDD 7"), 648 PINCTRL_PIN(458, "P PAD VDD 7"),
649 PINCTRL_PIN(459, "PIO ACC IRDA RX"), 649 PINCTRL_PIN(459, "PIO ACC IRDA RX"),
650 PINCTRL_PIN(460, "PIO ACC PCM I2S CLK"), 650 PINCTRL_PIN(460, "PIO ACC PCM I2S CLK"),
651 PINCTRL_PIN(461, "PIO ACC PCM I2S WS"), 651 PINCTRL_PIN(461, "PIO ACC PCM I2S WS"),
652 PINCTRL_PIN(462, "PIO ACC PCM I2S DATA A"), 652 PINCTRL_PIN(462, "PIO ACC PCM I2S DATA A"),
653 PINCTRL_PIN(463, "PIO ACC PCM I2S DATA B"), 653 PINCTRL_PIN(463, "PIO ACC PCM I2S DATA B"),
654 PINCTRL_PIN(464, "PO SIM CLK"), 654 PINCTRL_PIN(464, "PO SIM CLK"),
655 PINCTRL_PIN(465, "PIO ACC IRDA SD"), 655 PINCTRL_PIN(465, "PIO ACC IRDA SD"),
656 PINCTRL_PIN(466, "PIO SIM DATA"), 656 PINCTRL_PIN(466, "PIO SIM DATA"),
657 }; 657 };
658 658
659 /** 659 /**
660 * @dev: a pointer back to containing device 660 * @dev: a pointer back to containing device
661 * @virtbase: the offset to the controller in virtual memory 661 * @virtbase: the offset to the controller in virtual memory
662 */ 662 */
663 struct u300_pmx { 663 struct u300_pmx {
664 struct device *dev; 664 struct device *dev;
665 struct pinctrl_dev *pctl; 665 struct pinctrl_dev *pctl;
666 u32 phybase; 666 u32 phybase;
667 u32 physize; 667 u32 physize;
668 void __iomem *virtbase; 668 void __iomem *virtbase;
669 }; 669 };
670 670
671 /** 671 /**
672 * u300_pmx_registers - the array of registers read/written for each pinmux 672 * u300_pmx_registers - the array of registers read/written for each pinmux
673 * shunt setting 673 * shunt setting
674 */ 674 */
675 const u32 u300_pmx_registers[] = { 675 const u32 u300_pmx_registers[] = {
676 U300_SYSCON_PMC1LR, 676 U300_SYSCON_PMC1LR,
677 U300_SYSCON_PMC1HR, 677 U300_SYSCON_PMC1HR,
678 U300_SYSCON_PMC2R, 678 U300_SYSCON_PMC2R,
679 U300_SYSCON_PMC3R, 679 U300_SYSCON_PMC3R,
680 U300_SYSCON_PMC4R, 680 U300_SYSCON_PMC4R,
681 }; 681 };
682 682
683 /** 683 /**
684 * struct u300_pin_group - describes a U300 pin group 684 * struct u300_pin_group - describes a U300 pin group
685 * @name: the name of this specific pin group 685 * @name: the name of this specific pin group
686 * @pins: an array of discrete physical pins used in this group, taken 686 * @pins: an array of discrete physical pins used in this group, taken
687 * from the driver-local pin enumeration space 687 * from the driver-local pin enumeration space
688 * @num_pins: the number of pins in this group array, i.e. the number of 688 * @num_pins: the number of pins in this group array, i.e. the number of
689 * elements in .pins so we can iterate over that array 689 * elements in .pins so we can iterate over that array
690 */ 690 */
691 struct u300_pin_group { 691 struct u300_pin_group {
692 const char *name; 692 const char *name;
693 const unsigned int *pins; 693 const unsigned int *pins;
694 const unsigned num_pins; 694 const unsigned num_pins;
695 }; 695 };
696 696
697 /** 697 /**
698 * struct pmx_onmask - mask bits to enable/disable padmux 698 * struct pmx_onmask - mask bits to enable/disable padmux
699 * @mask: mask bits to disable 699 * @mask: mask bits to disable
700 * @val: mask bits to enable 700 * @val: mask bits to enable
701 * 701 *
702 * onmask lazy dog: 702 * onmask lazy dog:
703 * onmask = { 703 * onmask = {
704 * {"PMC1LR" mask, "PMC1LR" value}, 704 * {"PMC1LR" mask, "PMC1LR" value},
705 * {"PMC1HR" mask, "PMC1HR" value}, 705 * {"PMC1HR" mask, "PMC1HR" value},
706 * {"PMC2R" mask, "PMC2R" value}, 706 * {"PMC2R" mask, "PMC2R" value},
707 * {"PMC3R" mask, "PMC3R" value}, 707 * {"PMC3R" mask, "PMC3R" value},
708 * {"PMC4R" mask, "PMC4R" value} 708 * {"PMC4R" mask, "PMC4R" value}
709 * } 709 * }
710 */ 710 */
711 struct u300_pmx_mask { 711 struct u300_pmx_mask {
712 u16 mask; 712 u16 mask;
713 u16 bits; 713 u16 bits;
714 }; 714 };
715 715
716 /* The chip power pins are VDD, GND, VDDIO and VSSIO */ 716 /* The chip power pins are VDD, GND, VDDIO and VSSIO */
717 static const unsigned power_pins[] = { 0, 1, 3, 31, 46, 47, 49, 50, 61, 62, 63, 717 static const unsigned power_pins[] = { 0, 1, 3, 31, 46, 47, 49, 50, 61, 62, 63,
718 64, 78, 79, 80, 81, 92, 93, 94, 95, 101, 102, 103, 104, 115, 116, 117, 718 64, 78, 79, 80, 81, 92, 93, 94, 95, 101, 102, 103, 104, 115, 116, 117,
719 118, 130, 131, 132, 133, 145, 146, 147, 148, 159, 160, 172, 173, 174, 719 118, 130, 131, 132, 133, 145, 146, 147, 148, 159, 160, 172, 173, 174,
720 175, 187, 188, 189, 190, 201, 202, 211, 212, 213, 214, 215, 218, 223, 720 175, 187, 188, 189, 190, 201, 202, 211, 212, 213, 214, 215, 218, 223,
721 224, 225, 226, 231, 232, 237, 238, 239, 240, 245, 246, 251, 252, 256, 721 224, 225, 226, 231, 232, 237, 238, 239, 240, 245, 246, 251, 252, 256,
722 257, 258, 259, 264, 265, 270, 271, 276, 277, 278, 279, 284, 285, 290, 722 257, 258, 259, 264, 265, 270, 271, 276, 277, 278, 279, 284, 285, 290,
723 291, 295, 296, 299, 300, 301, 302, 303, 309, 310, 311, 312, 319, 320, 723 291, 295, 296, 299, 300, 301, 302, 303, 309, 310, 311, 312, 319, 320,
724 321, 322, 329, 330, 331, 332, 341, 342, 343, 344, 358, 359, 360, 361, 724 321, 322, 329, 330, 331, 332, 341, 342, 343, 344, 358, 359, 360, 361,
725 372, 373, 374, 375, 388, 389, 390, 391, 402, 403, 404, 405, 413, 414, 725 372, 373, 374, 375, 388, 389, 390, 391, 402, 403, 404, 405, 413, 414,
726 415, 416, 427, 428, 429, 430, 443, 444, 455, 456, 457, 458 }; 726 415, 416, 427, 428, 429, 430, 443, 444, 455, 456, 457, 458 };
727 static const unsigned emif0_pins[] = { 355, 356, 357, 362, 363, 364, 365, 366, 727 static const unsigned emif0_pins[] = { 355, 356, 357, 362, 363, 364, 365, 366,
728 367, 368, 369, 370, 371, 376, 377, 378, 379, 380, 381, 382, 383, 384, 728 367, 368, 369, 370, 371, 376, 377, 378, 379, 380, 381, 382, 383, 384,
729 385, 386, 387, 393, 394, 395, 396, 397, 398, 406, 407, 410, 411, 412, 729 385, 386, 387, 393, 394, 395, 396, 397, 398, 406, 407, 410, 411, 412,
730 417, 418 }; 730 417, 418 };
731 static const unsigned emif1_pins[] = { 216, 217, 219, 220, 221, 222, 227, 228, 731 static const unsigned emif1_pins[] = { 216, 217, 219, 220, 221, 222, 227, 228,
732 229, 230, 233, 234, 235, 236, 241, 242, 243, 244, 247, 248, 249, 250, 732 229, 230, 233, 234, 235, 236, 241, 242, 243, 244, 247, 248, 249, 250,
733 253, 254, 255, 260, 261, 262, 263, 266, 267, 268, 269, 272, 273, 274, 733 253, 254, 255, 260, 261, 262, 263, 266, 267, 268, 269, 272, 273, 274,
734 275, 280, 281, 282, 283, 286, 287, 288, 289, 292, 293, 294, 297, 298, 734 275, 280, 281, 282, 283, 286, 287, 288, 289, 292, 293, 294, 297, 298,
735 304, 305, 306, 307, 308, 313, 314, 315 }; 735 304, 305, 306, 307, 308, 313, 314, 315 };
736 static const unsigned uart0_pins[] = { 134, 135, 136, 137 }; 736 static const unsigned uart0_pins[] = { 134, 135, 136, 137 };
737 static const unsigned mmc0_pins[] = { 166, 167, 168, 169, 170, 171, 176, 177 }; 737 static const unsigned mmc0_pins[] = { 166, 167, 168, 169, 170, 171, 176, 177 };
738 static const unsigned spi0_pins[] = { 420, 421, 422, 423, 424, 425 }; 738 static const unsigned spi0_pins[] = { 420, 421, 422, 423, 424, 425 };
739 739
740 static const struct u300_pmx_mask emif0_mask[] = { 740 static const struct u300_pmx_mask emif0_mask[] = {
741 {0, 0}, 741 {0, 0},
742 {0, 0}, 742 {0, 0},
743 {0, 0}, 743 {0, 0},
744 {0, 0}, 744 {0, 0},
745 {0, 0}, 745 {0, 0},
746 }; 746 };
747 747
748 static const struct u300_pmx_mask emif1_mask[] = { 748 static const struct u300_pmx_mask emif1_mask[] = {
749 /* 749 /*
750 * This connects the SDRAM to CS2 and a NAND flash to 750 * This connects the SDRAM to CS2 and a NAND flash to
751 * CS0 on the EMIF. 751 * CS0 on the EMIF.
752 */ 752 */
753 { 753 {
754 U300_SYSCON_PMC1LR_EMIF_1_CS2_MASK | 754 U300_SYSCON_PMC1LR_EMIF_1_CS2_MASK |
755 U300_SYSCON_PMC1LR_EMIF_1_CS1_MASK | 755 U300_SYSCON_PMC1LR_EMIF_1_CS1_MASK |
756 U300_SYSCON_PMC1LR_EMIF_1_CS0_MASK | 756 U300_SYSCON_PMC1LR_EMIF_1_CS0_MASK |
757 U300_SYSCON_PMC1LR_EMIF_1_MASK, 757 U300_SYSCON_PMC1LR_EMIF_1_MASK,
758 U300_SYSCON_PMC1LR_EMIF_1_CS2_SDRAM | 758 U300_SYSCON_PMC1LR_EMIF_1_CS2_SDRAM |
759 U300_SYSCON_PMC1LR_EMIF_1_CS1_STATIC | 759 U300_SYSCON_PMC1LR_EMIF_1_CS1_STATIC |
760 U300_SYSCON_PMC1LR_EMIF_1_CS0_NFIF | 760 U300_SYSCON_PMC1LR_EMIF_1_CS0_NFIF |
761 U300_SYSCON_PMC1LR_EMIF_1_SDRAM0 761 U300_SYSCON_PMC1LR_EMIF_1_SDRAM0
762 }, 762 },
763 {0, 0}, 763 {0, 0},
764 {0, 0}, 764 {0, 0},
765 {0, 0}, 765 {0, 0},
766 {0, 0}, 766 {0, 0},
767 }; 767 };
768 768
769 static const struct u300_pmx_mask uart0_mask[] = { 769 static const struct u300_pmx_mask uart0_mask[] = {
770 {0, 0}, 770 {0, 0},
771 { 771 {
772 U300_SYSCON_PMC1HR_APP_UART0_1_MASK | 772 U300_SYSCON_PMC1HR_APP_UART0_1_MASK |
773 U300_SYSCON_PMC1HR_APP_UART0_2_MASK, 773 U300_SYSCON_PMC1HR_APP_UART0_2_MASK,
774 U300_SYSCON_PMC1HR_APP_UART0_1_UART0 | 774 U300_SYSCON_PMC1HR_APP_UART0_1_UART0 |
775 U300_SYSCON_PMC1HR_APP_UART0_2_UART0 775 U300_SYSCON_PMC1HR_APP_UART0_2_UART0
776 }, 776 },
777 {0, 0}, 777 {0, 0},
778 {0, 0}, 778 {0, 0},
779 {0, 0}, 779 {0, 0},
780 }; 780 };
781 781
782 static const struct u300_pmx_mask mmc0_mask[] = { 782 static const struct u300_pmx_mask mmc0_mask[] = {
783 { U300_SYSCON_PMC1LR_MMCSD_MASK, U300_SYSCON_PMC1LR_MMCSD_MMCSD}, 783 { U300_SYSCON_PMC1LR_MMCSD_MASK, U300_SYSCON_PMC1LR_MMCSD_MMCSD},
784 {0, 0}, 784 {0, 0},
785 {0, 0}, 785 {0, 0},
786 {0, 0}, 786 {0, 0},
787 { U300_SYSCON_PMC4R_APP_MISC_12_MASK, 787 { U300_SYSCON_PMC4R_APP_MISC_12_MASK,
788 U300_SYSCON_PMC4R_APP_MISC_12_APP_GPIO } 788 U300_SYSCON_PMC4R_APP_MISC_12_APP_GPIO }
789 }; 789 };
790 790
791 static const struct u300_pmx_mask spi0_mask[] = { 791 static const struct u300_pmx_mask spi0_mask[] = {
792 {0, 0}, 792 {0, 0},
793 { 793 {
794 U300_SYSCON_PMC1HR_APP_SPI_2_MASK | 794 U300_SYSCON_PMC1HR_APP_SPI_2_MASK |
795 U300_SYSCON_PMC1HR_APP_SPI_CS_1_MASK | 795 U300_SYSCON_PMC1HR_APP_SPI_CS_1_MASK |
796 U300_SYSCON_PMC1HR_APP_SPI_CS_2_MASK, 796 U300_SYSCON_PMC1HR_APP_SPI_CS_2_MASK,
797 U300_SYSCON_PMC1HR_APP_SPI_2_SPI | 797 U300_SYSCON_PMC1HR_APP_SPI_2_SPI |
798 U300_SYSCON_PMC1HR_APP_SPI_CS_1_SPI | 798 U300_SYSCON_PMC1HR_APP_SPI_CS_1_SPI |
799 U300_SYSCON_PMC1HR_APP_SPI_CS_2_SPI 799 U300_SYSCON_PMC1HR_APP_SPI_CS_2_SPI
800 }, 800 },
801 {0, 0}, 801 {0, 0},
802 {0, 0}, 802 {0, 0},
803 {0, 0} 803 {0, 0}
804 }; 804 };
805 805
806 static const struct u300_pin_group u300_pin_groups[] = { 806 static const struct u300_pin_group u300_pin_groups[] = {
807 { 807 {
808 .name = "powergrp", 808 .name = "powergrp",
809 .pins = power_pins, 809 .pins = power_pins,
810 .num_pins = ARRAY_SIZE(power_pins), 810 .num_pins = ARRAY_SIZE(power_pins),
811 }, 811 },
812 { 812 {
813 .name = "emif0grp", 813 .name = "emif0grp",
814 .pins = emif0_pins, 814 .pins = emif0_pins,
815 .num_pins = ARRAY_SIZE(emif0_pins), 815 .num_pins = ARRAY_SIZE(emif0_pins),
816 }, 816 },
817 { 817 {
818 .name = "emif1grp", 818 .name = "emif1grp",
819 .pins = emif1_pins, 819 .pins = emif1_pins,
820 .num_pins = ARRAY_SIZE(emif1_pins), 820 .num_pins = ARRAY_SIZE(emif1_pins),
821 }, 821 },
822 { 822 {
823 .name = "uart0grp", 823 .name = "uart0grp",
824 .pins = uart0_pins, 824 .pins = uart0_pins,
825 .num_pins = ARRAY_SIZE(uart0_pins), 825 .num_pins = ARRAY_SIZE(uart0_pins),
826 }, 826 },
827 { 827 {
828 .name = "mmc0grp", 828 .name = "mmc0grp",
829 .pins = mmc0_pins, 829 .pins = mmc0_pins,
830 .num_pins = ARRAY_SIZE(mmc0_pins), 830 .num_pins = ARRAY_SIZE(mmc0_pins),
831 }, 831 },
832 { 832 {
833 .name = "spi0grp", 833 .name = "spi0grp",
834 .pins = spi0_pins, 834 .pins = spi0_pins,
835 .num_pins = ARRAY_SIZE(spi0_pins), 835 .num_pins = ARRAY_SIZE(spi0_pins),
836 }, 836 },
837 }; 837 };
838 838
839 static int u300_get_groups_count(struct pinctrl_dev *pctldev) 839 static int u300_get_groups_count(struct pinctrl_dev *pctldev)
840 { 840 {
841 return ARRAY_SIZE(u300_pin_groups); 841 return ARRAY_SIZE(u300_pin_groups);
842 } 842 }
843 843
844 static const char *u300_get_group_name(struct pinctrl_dev *pctldev, 844 static const char *u300_get_group_name(struct pinctrl_dev *pctldev,
845 unsigned selector) 845 unsigned selector)
846 { 846 {
847 return u300_pin_groups[selector].name; 847 return u300_pin_groups[selector].name;
848 } 848 }
849 849
850 static int u300_get_group_pins(struct pinctrl_dev *pctldev, unsigned selector, 850 static int u300_get_group_pins(struct pinctrl_dev *pctldev, unsigned selector,
851 const unsigned **pins, 851 const unsigned **pins,
852 unsigned *num_pins) 852 unsigned *num_pins)
853 { 853 {
854 *pins = u300_pin_groups[selector].pins; 854 *pins = u300_pin_groups[selector].pins;
855 *num_pins = u300_pin_groups[selector].num_pins; 855 *num_pins = u300_pin_groups[selector].num_pins;
856 return 0; 856 return 0;
857 } 857 }
858 858
859 static void u300_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s, 859 static void u300_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s,
860 unsigned offset) 860 unsigned offset)
861 { 861 {
862 seq_printf(s, " " DRIVER_NAME); 862 seq_printf(s, " " DRIVER_NAME);
863 } 863 }
864 864
865 static struct pinctrl_ops u300_pctrl_ops = { 865 static struct pinctrl_ops u300_pctrl_ops = {
866 .get_groups_count = u300_get_groups_count, 866 .get_groups_count = u300_get_groups_count,
867 .get_group_name = u300_get_group_name, 867 .get_group_name = u300_get_group_name,
868 .get_group_pins = u300_get_group_pins, 868 .get_group_pins = u300_get_group_pins,
869 .pin_dbg_show = u300_pin_dbg_show, 869 .pin_dbg_show = u300_pin_dbg_show,
870 }; 870 };
871 871
872 /* 872 /*
873 * Here we define the available functions and their corresponding pin groups 873 * Here we define the available functions and their corresponding pin groups
874 */ 874 */
875 875
876 /** 876 /**
877 * struct u300_pmx_func - describes U300 pinmux functions 877 * struct u300_pmx_func - describes U300 pinmux functions
878 * @name: the name of this specific function 878 * @name: the name of this specific function
879 * @groups: corresponding pin groups 879 * @groups: corresponding pin groups
880 * @onmask: bits to set to enable this when doing pin muxing 880 * @onmask: bits to set to enable this when doing pin muxing
881 */ 881 */
882 struct u300_pmx_func { 882 struct u300_pmx_func {
883 const char *name; 883 const char *name;
884 const char * const *groups; 884 const char * const *groups;
885 const unsigned num_groups; 885 const unsigned num_groups;
886 const struct u300_pmx_mask *mask; 886 const struct u300_pmx_mask *mask;
887 }; 887 };
888 888
889 static const char * const powergrps[] = { "powergrp" }; 889 static const char * const powergrps[] = { "powergrp" };
890 static const char * const emif0grps[] = { "emif0grp" }; 890 static const char * const emif0grps[] = { "emif0grp" };
891 static const char * const emif1grps[] = { "emif1grp" }; 891 static const char * const emif1grps[] = { "emif1grp" };
892 static const char * const uart0grps[] = { "uart0grp" }; 892 static const char * const uart0grps[] = { "uart0grp" };
893 static const char * const mmc0grps[] = { "mmc0grp" }; 893 static const char * const mmc0grps[] = { "mmc0grp" };
894 static const char * const spi0grps[] = { "spi0grp" }; 894 static const char * const spi0grps[] = { "spi0grp" };
895 895
896 static const struct u300_pmx_func u300_pmx_functions[] = { 896 static const struct u300_pmx_func u300_pmx_functions[] = {
897 { 897 {
898 .name = "power", 898 .name = "power",
899 .groups = powergrps, 899 .groups = powergrps,
900 .num_groups = ARRAY_SIZE(powergrps), 900 .num_groups = ARRAY_SIZE(powergrps),
901 /* Mask is N/A */ 901 /* Mask is N/A */
902 }, 902 },
903 { 903 {
904 .name = "emif0", 904 .name = "emif0",
905 .groups = emif0grps, 905 .groups = emif0grps,
906 .num_groups = ARRAY_SIZE(emif0grps), 906 .num_groups = ARRAY_SIZE(emif0grps),
907 .mask = emif0_mask, 907 .mask = emif0_mask,
908 }, 908 },
909 { 909 {
910 .name = "emif1", 910 .name = "emif1",
911 .groups = emif1grps, 911 .groups = emif1grps,
912 .num_groups = ARRAY_SIZE(emif1grps), 912 .num_groups = ARRAY_SIZE(emif1grps),
913 .mask = emif1_mask, 913 .mask = emif1_mask,
914 }, 914 },
915 { 915 {
916 .name = "uart0", 916 .name = "uart0",
917 .groups = uart0grps, 917 .groups = uart0grps,
918 .num_groups = ARRAY_SIZE(uart0grps), 918 .num_groups = ARRAY_SIZE(uart0grps),
919 .mask = uart0_mask, 919 .mask = uart0_mask,
920 }, 920 },
921 { 921 {
922 .name = "mmc0", 922 .name = "mmc0",
923 .groups = mmc0grps, 923 .groups = mmc0grps,
924 .num_groups = ARRAY_SIZE(mmc0grps), 924 .num_groups = ARRAY_SIZE(mmc0grps),
925 .mask = mmc0_mask, 925 .mask = mmc0_mask,
926 }, 926 },
927 { 927 {
928 .name = "spi0", 928 .name = "spi0",
929 .groups = spi0grps, 929 .groups = spi0grps,
930 .num_groups = ARRAY_SIZE(spi0grps), 930 .num_groups = ARRAY_SIZE(spi0grps),
931 .mask = spi0_mask, 931 .mask = spi0_mask,
932 }, 932 },
933 }; 933 };
934 934
935 static void u300_pmx_endisable(struct u300_pmx *upmx, unsigned selector, 935 static void u300_pmx_endisable(struct u300_pmx *upmx, unsigned selector,
936 bool enable) 936 bool enable)
937 { 937 {
938 u16 regval, val, mask; 938 u16 regval, val, mask;
939 int i; 939 int i;
940 const struct u300_pmx_mask *upmx_mask; 940 const struct u300_pmx_mask *upmx_mask;
941 941
942 upmx_mask = u300_pmx_functions[selector].mask; 942 upmx_mask = u300_pmx_functions[selector].mask;
943 for (i = 0; i < ARRAY_SIZE(u300_pmx_registers); i++) { 943 for (i = 0; i < ARRAY_SIZE(u300_pmx_registers); i++) {
944 if (enable) 944 if (enable)
945 val = upmx_mask->bits; 945 val = upmx_mask->bits;
946 else 946 else
947 val = 0; 947 val = 0;
948 948
949 mask = upmx_mask->mask; 949 mask = upmx_mask->mask;
950 if (mask != 0) { 950 if (mask != 0) {
951 regval = readw(upmx->virtbase + u300_pmx_registers[i]); 951 regval = readw(upmx->virtbase + u300_pmx_registers[i]);
952 regval &= ~mask; 952 regval &= ~mask;
953 regval |= val; 953 regval |= val;
954 writew(regval, upmx->virtbase + u300_pmx_registers[i]); 954 writew(regval, upmx->virtbase + u300_pmx_registers[i]);
955 } 955 }
956 upmx_mask++; 956 upmx_mask++;
957 } 957 }
958 } 958 }
959 959
960 static int u300_pmx_enable(struct pinctrl_dev *pctldev, unsigned selector, 960 static int u300_pmx_enable(struct pinctrl_dev *pctldev, unsigned selector,
961 unsigned group) 961 unsigned group)
962 { 962 {
963 struct u300_pmx *upmx; 963 struct u300_pmx *upmx;
964 964
965 /* There is nothing to do with the power pins */ 965 /* There is nothing to do with the power pins */
966 if (selector == 0) 966 if (selector == 0)
967 return 0; 967 return 0;
968 968
969 upmx = pinctrl_dev_get_drvdata(pctldev); 969 upmx = pinctrl_dev_get_drvdata(pctldev);
970 u300_pmx_endisable(upmx, selector, true); 970 u300_pmx_endisable(upmx, selector, true);
971 971
972 return 0; 972 return 0;
973 } 973 }
974 974
975 static void u300_pmx_disable(struct pinctrl_dev *pctldev, unsigned selector, 975 static void u300_pmx_disable(struct pinctrl_dev *pctldev, unsigned selector,
976 unsigned group) 976 unsigned group)
977 { 977 {
978 struct u300_pmx *upmx; 978 struct u300_pmx *upmx;
979 979
980 /* There is nothing to do with the power pins */ 980 /* There is nothing to do with the power pins */
981 if (selector == 0) 981 if (selector == 0)
982 return; 982 return;
983 983
984 upmx = pinctrl_dev_get_drvdata(pctldev); 984 upmx = pinctrl_dev_get_drvdata(pctldev);
985 u300_pmx_endisable(upmx, selector, false); 985 u300_pmx_endisable(upmx, selector, false);
986 } 986 }
987 987
988 static int u300_pmx_get_funcs_count(struct pinctrl_dev *pctldev) 988 static int u300_pmx_get_funcs_count(struct pinctrl_dev *pctldev)
989 { 989 {
990 return ARRAY_SIZE(u300_pmx_functions); 990 return ARRAY_SIZE(u300_pmx_functions);
991 } 991 }
992 992
993 static const char *u300_pmx_get_func_name(struct pinctrl_dev *pctldev, 993 static const char *u300_pmx_get_func_name(struct pinctrl_dev *pctldev,
994 unsigned selector) 994 unsigned selector)
995 { 995 {
996 return u300_pmx_functions[selector].name; 996 return u300_pmx_functions[selector].name;
997 } 997 }
998 998
999 static int u300_pmx_get_groups(struct pinctrl_dev *pctldev, unsigned selector, 999 static int u300_pmx_get_groups(struct pinctrl_dev *pctldev, unsigned selector,
1000 const char * const **groups, 1000 const char * const **groups,
1001 unsigned * const num_groups) 1001 unsigned * const num_groups)
1002 { 1002 {
1003 *groups = u300_pmx_functions[selector].groups; 1003 *groups = u300_pmx_functions[selector].groups;
1004 *num_groups = u300_pmx_functions[selector].num_groups; 1004 *num_groups = u300_pmx_functions[selector].num_groups;
1005 return 0; 1005 return 0;
1006 } 1006 }
1007 1007
1008 static struct pinmux_ops u300_pmx_ops = { 1008 static struct pinmux_ops u300_pmx_ops = {
1009 .get_functions_count = u300_pmx_get_funcs_count, 1009 .get_functions_count = u300_pmx_get_funcs_count,
1010 .get_function_name = u300_pmx_get_func_name, 1010 .get_function_name = u300_pmx_get_func_name,
1011 .get_function_groups = u300_pmx_get_groups, 1011 .get_function_groups = u300_pmx_get_groups,
1012 .enable = u300_pmx_enable, 1012 .enable = u300_pmx_enable,
1013 .disable = u300_pmx_disable, 1013 .disable = u300_pmx_disable,
1014 }; 1014 };
1015 1015
1016 /* 1016 /*
1017 * GPIO ranges handled by the application-side COH901XXX GPIO controller 1017 * GPIO ranges handled by the application-side COH901XXX GPIO controller
1018 * Very many pins can be converted into GPIO pins, but we only list those 1018 * Very many pins can be converted into GPIO pins, but we only list those
1019 * that are useful in practice to cut down on tables. 1019 * that are useful in practice to cut down on tables.
1020 */ 1020 */
1021 #define U300_GPIO_RANGE(a, b, c) { .name = "COH901XXX", .id = a, .base= a, \ 1021 #define U300_GPIO_RANGE(a, b, c) { .name = "COH901XXX", .id = a, .base= a, \
1022 .pin_base = b, .npins = c } 1022 .pin_base = b, .npins = c }
1023 1023
1024 static struct pinctrl_gpio_range u300_gpio_ranges[] = { 1024 static struct pinctrl_gpio_range u300_gpio_ranges[] = {
1025 U300_GPIO_RANGE(10, 426, 1), 1025 U300_GPIO_RANGE(10, 426, 1),
1026 U300_GPIO_RANGE(11, 180, 1), 1026 U300_GPIO_RANGE(11, 180, 1),
1027 U300_GPIO_RANGE(12, 165, 1), /* MS/MMC card insertion */ 1027 U300_GPIO_RANGE(12, 165, 1), /* MS/MMC card insertion */
1028 U300_GPIO_RANGE(13, 179, 1), 1028 U300_GPIO_RANGE(13, 179, 1),
1029 U300_GPIO_RANGE(14, 178, 1), 1029 U300_GPIO_RANGE(14, 178, 1),
1030 U300_GPIO_RANGE(16, 194, 1), 1030 U300_GPIO_RANGE(16, 194, 1),
1031 U300_GPIO_RANGE(17, 193, 1), 1031 U300_GPIO_RANGE(17, 193, 1),
1032 U300_GPIO_RANGE(18, 192, 1), 1032 U300_GPIO_RANGE(18, 192, 1),
1033 U300_GPIO_RANGE(19, 191, 1), 1033 U300_GPIO_RANGE(19, 191, 1),
1034 U300_GPIO_RANGE(20, 186, 1), 1034 U300_GPIO_RANGE(20, 186, 1),
1035 U300_GPIO_RANGE(21, 185, 1), 1035 U300_GPIO_RANGE(21, 185, 1),
1036 U300_GPIO_RANGE(22, 184, 1), 1036 U300_GPIO_RANGE(22, 184, 1),
1037 U300_GPIO_RANGE(23, 183, 1), 1037 U300_GPIO_RANGE(23, 183, 1),
1038 U300_GPIO_RANGE(24, 182, 1), 1038 U300_GPIO_RANGE(24, 182, 1),
1039 U300_GPIO_RANGE(25, 181, 1), 1039 U300_GPIO_RANGE(25, 181, 1),
1040 }; 1040 };
1041 1041
1042 static struct pinctrl_gpio_range *u300_match_gpio_range(unsigned pin) 1042 static struct pinctrl_gpio_range *u300_match_gpio_range(unsigned pin)
1043 { 1043 {
1044 int i; 1044 int i;
1045 1045
1046 for (i = 0; i < ARRAY_SIZE(u300_gpio_ranges); i++) { 1046 for (i = 0; i < ARRAY_SIZE(u300_gpio_ranges); i++) {
1047 struct pinctrl_gpio_range *range; 1047 struct pinctrl_gpio_range *range;
1048 1048
1049 range = &u300_gpio_ranges[i]; 1049 range = &u300_gpio_ranges[i];
1050 if (pin >= range->pin_base && 1050 if (pin >= range->pin_base &&
1051 pin <= (range->pin_base + range->npins - 1)) 1051 pin <= (range->pin_base + range->npins - 1))
1052 return range; 1052 return range;
1053 } 1053 }
1054 return NULL; 1054 return NULL;
1055 } 1055 }
1056 1056
1057 int u300_pin_config_get(struct pinctrl_dev *pctldev, 1057 int u300_pin_config_get(struct pinctrl_dev *pctldev,
1058 unsigned pin, 1058 unsigned pin,
1059 unsigned long *config) 1059 unsigned long *config)
1060 { 1060 {
1061 struct pinctrl_gpio_range *range = u300_match_gpio_range(pin); 1061 struct pinctrl_gpio_range *range = u300_match_gpio_range(pin);
1062 1062
1063 /* We get config for those pins we CAN get it for and that's it */ 1063 /* We get config for those pins we CAN get it for and that's it */
1064 if (!range) 1064 if (!range)
1065 return -ENOTSUPP; 1065 return -ENOTSUPP;
1066 1066
1067 return u300_gpio_config_get(range->gc, 1067 return u300_gpio_config_get(range->gc,
1068 (pin - range->pin_base + range->base), 1068 (pin - range->pin_base + range->base),
1069 config); 1069 config);
1070 } 1070 }
1071 1071
1072 int u300_pin_config_set(struct pinctrl_dev *pctldev, 1072 int u300_pin_config_set(struct pinctrl_dev *pctldev,
1073 unsigned pin, 1073 unsigned pin,
1074 unsigned long config) 1074 unsigned long config)
1075 { 1075 {
1076 struct pinctrl_gpio_range *range = u300_match_gpio_range(pin); 1076 struct pinctrl_gpio_range *range = u300_match_gpio_range(pin);
1077 int ret; 1077 int ret;
1078 1078
1079 if (!range) 1079 if (!range)
1080 return -EINVAL; 1080 return -EINVAL;
1081 1081
1082 /* Note: none of these configurations take any argument */ 1082 /* Note: none of these configurations take any argument */
1083 ret = u300_gpio_config_set(range->gc, 1083 ret = u300_gpio_config_set(range->gc,
1084 (pin - range->pin_base + range->base), 1084 (pin - range->pin_base + range->base),
1085 pinconf_to_config_param(config)); 1085 pinconf_to_config_param(config));
1086 if (ret) 1086 if (ret)
1087 return ret; 1087 return ret;
1088 1088
1089 return 0; 1089 return 0;
1090 } 1090 }
1091 1091
1092 static struct pinconf_ops u300_pconf_ops = { 1092 static struct pinconf_ops u300_pconf_ops = {
1093 .is_generic = true, 1093 .is_generic = true,
1094 .pin_config_get = u300_pin_config_get, 1094 .pin_config_get = u300_pin_config_get,
1095 .pin_config_set = u300_pin_config_set, 1095 .pin_config_set = u300_pin_config_set,
1096 }; 1096 };
1097 1097
1098 static struct pinctrl_desc u300_pmx_desc = { 1098 static struct pinctrl_desc u300_pmx_desc = {
1099 .name = DRIVER_NAME, 1099 .name = DRIVER_NAME,
1100 .pins = u300_pads, 1100 .pins = u300_pads,
1101 .npins = ARRAY_SIZE(u300_pads), 1101 .npins = ARRAY_SIZE(u300_pads),
1102 .pctlops = &u300_pctrl_ops, 1102 .pctlops = &u300_pctrl_ops,
1103 .pmxops = &u300_pmx_ops, 1103 .pmxops = &u300_pmx_ops,
1104 .confops = &u300_pconf_ops, 1104 .confops = &u300_pconf_ops,
1105 .owner = THIS_MODULE, 1105 .owner = THIS_MODULE,
1106 }; 1106 };
1107 1107
1108 static int __devinit u300_pmx_probe(struct platform_device *pdev) 1108 static int __devinit u300_pmx_probe(struct platform_device *pdev)
1109 { 1109 {
1110 struct u300_pmx *upmx; 1110 struct u300_pmx *upmx;
1111 struct resource *res; 1111 struct resource *res;
1112 struct gpio_chip *gpio_chip = dev_get_platdata(&pdev->dev); 1112 struct gpio_chip *gpio_chip = dev_get_platdata(&pdev->dev);
1113 int ret; 1113 int ret;
1114 int i; 1114 int i;
1115 1115
1116 /* Create state holders etc for this driver */ 1116 /* Create state holders etc for this driver */
1117 upmx = devm_kzalloc(&pdev->dev, sizeof(*upmx), GFP_KERNEL); 1117 upmx = devm_kzalloc(&pdev->dev, sizeof(*upmx), GFP_KERNEL);
1118 if (!upmx) 1118 if (!upmx)
1119 return -ENOMEM; 1119 return -ENOMEM;
1120 1120
1121 upmx->dev = &pdev->dev; 1121 upmx->dev = &pdev->dev;
1122 1122
1123 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1123 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1124 if (!res) 1124 if (!res)
1125 return -ENOENT; 1125 return -ENOENT;
1126 upmx->phybase = res->start; 1126 upmx->phybase = res->start;
1127 upmx->physize = resource_size(res); 1127 upmx->physize = resource_size(res);
1128 1128
1129 if (request_mem_region(upmx->phybase, upmx->physize, 1129 if (request_mem_region(upmx->phybase, upmx->physize,
1130 DRIVER_NAME) == NULL) { 1130 DRIVER_NAME) == NULL) {
1131 ret = -ENOMEM; 1131 ret = -ENOMEM;
1132 goto out_no_memregion; 1132 goto out_no_memregion;
1133 } 1133 }
1134 1134
1135 upmx->virtbase = ioremap(upmx->phybase, upmx->physize); 1135 upmx->virtbase = ioremap(upmx->phybase, upmx->physize);
1136 if (!upmx->virtbase) { 1136 if (!upmx->virtbase) {
1137 ret = -ENOMEM; 1137 ret = -ENOMEM;
1138 goto out_no_remap; 1138 goto out_no_remap;
1139 } 1139 }
1140 1140
1141 upmx->pctl = pinctrl_register(&u300_pmx_desc, &pdev->dev, upmx); 1141 upmx->pctl = pinctrl_register(&u300_pmx_desc, &pdev->dev, upmx);
1142 if (!upmx->pctl) { 1142 if (!upmx->pctl) {
1143 dev_err(&pdev->dev, "could not register U300 pinmux driver\n"); 1143 dev_err(&pdev->dev, "could not register U300 pinmux driver\n");
1144 ret = -EINVAL; 1144 ret = -EINVAL;
1145 goto out_no_pmx; 1145 goto out_no_pmx;
1146 } 1146 }
1147 1147
1148 /* We will handle a range of GPIO pins */ 1148 /* We will handle a range of GPIO pins */
1149 for (i = 0; i < ARRAY_SIZE(u300_gpio_ranges); i++) { 1149 for (i = 0; i < ARRAY_SIZE(u300_gpio_ranges); i++) {
1150 u300_gpio_ranges[i].gc = gpio_chip; 1150 u300_gpio_ranges[i].gc = gpio_chip;
1151 pinctrl_add_gpio_range(upmx->pctl, &u300_gpio_ranges[i]); 1151 pinctrl_add_gpio_range(upmx->pctl, &u300_gpio_ranges[i]);
1152 } 1152 }
1153 1153
1154 platform_set_drvdata(pdev, upmx); 1154 platform_set_drvdata(pdev, upmx);
1155 1155
1156 dev_info(&pdev->dev, "initialized U300 pin control driver\n"); 1156 dev_info(&pdev->dev, "initialized U300 pin control driver\n");
1157 1157
1158 return 0; 1158 return 0;
1159 1159
1160 out_no_pmx: 1160 out_no_pmx:
1161 iounmap(upmx->virtbase); 1161 iounmap(upmx->virtbase);
1162 out_no_remap: 1162 out_no_remap:
1163 platform_set_drvdata(pdev, NULL); 1163 platform_set_drvdata(pdev, NULL);
1164 out_no_memregion: 1164 out_no_memregion:
1165 release_mem_region(upmx->phybase, upmx->physize); 1165 release_mem_region(upmx->phybase, upmx->physize);
1166 return ret; 1166 return ret;
1167 } 1167 }
1168 1168
1169 static int __devexit u300_pmx_remove(struct platform_device *pdev) 1169 static int u300_pmx_remove(struct platform_device *pdev)
1170 { 1170 {
1171 struct u300_pmx *upmx = platform_get_drvdata(pdev); 1171 struct u300_pmx *upmx = platform_get_drvdata(pdev);
1172 1172
1173 pinctrl_unregister(upmx->pctl); 1173 pinctrl_unregister(upmx->pctl);
1174 iounmap(upmx->virtbase); 1174 iounmap(upmx->virtbase);
1175 release_mem_region(upmx->phybase, upmx->physize); 1175 release_mem_region(upmx->phybase, upmx->physize);
1176 platform_set_drvdata(pdev, NULL); 1176 platform_set_drvdata(pdev, NULL);
1177 1177
1178 return 0; 1178 return 0;
1179 } 1179 }
1180 1180
1181 static struct platform_driver u300_pmx_driver = { 1181 static struct platform_driver u300_pmx_driver = {
1182 .driver = { 1182 .driver = {
1183 .name = DRIVER_NAME, 1183 .name = DRIVER_NAME,
1184 .owner = THIS_MODULE, 1184 .owner = THIS_MODULE,
1185 }, 1185 },
1186 .probe = u300_pmx_probe, 1186 .probe = u300_pmx_probe,
1187 .remove = u300_pmx_remove, 1187 .remove = u300_pmx_remove,
1188 }; 1188 };
1189 1189
1190 static int __init u300_pmx_init(void) 1190 static int __init u300_pmx_init(void)
1191 { 1191 {
1192 return platform_driver_register(&u300_pmx_driver); 1192 return platform_driver_register(&u300_pmx_driver);
1193 } 1193 }
1194 arch_initcall(u300_pmx_init); 1194 arch_initcall(u300_pmx_init);
1195 1195
1196 static void __exit u300_pmx_exit(void) 1196 static void __exit u300_pmx_exit(void)
1197 { 1197 {
1198 platform_driver_unregister(&u300_pmx_driver); 1198 platform_driver_unregister(&u300_pmx_driver);
1199 } 1199 }
1200 module_exit(u300_pmx_exit); 1200 module_exit(u300_pmx_exit);
1201 1201
1202 MODULE_AUTHOR("Linus Walleij <linus.walleij@linaro.org>"); 1202 MODULE_AUTHOR("Linus Walleij <linus.walleij@linaro.org>");
1203 MODULE_DESCRIPTION("U300 pin control driver"); 1203 MODULE_DESCRIPTION("U300 pin control driver");
1204 MODULE_LICENSE("GPL v2"); 1204 MODULE_LICENSE("GPL v2");
1205 1205
drivers/pinctrl/spear/pinctrl-spear.c
1 /* 1 /*
2 * Driver for the ST Microelectronics SPEAr pinmux 2 * Driver for the ST Microelectronics SPEAr pinmux
3 * 3 *
4 * Copyright (C) 2012 ST Microelectronics 4 * Copyright (C) 2012 ST Microelectronics
5 * Viresh Kumar <viresh.linux@gmail.com> 5 * Viresh Kumar <viresh.linux@gmail.com>
6 * 6 *
7 * Inspired from: 7 * Inspired from:
8 * - U300 Pinctl drivers 8 * - U300 Pinctl drivers
9 * - Tegra Pinctl drivers 9 * - Tegra Pinctl drivers
10 * 10 *
11 * This file is licensed under the terms of the GNU General Public 11 * This file is licensed under the terms of the GNU General Public
12 * License version 2. This program is licensed "as is" without any 12 * License version 2. This program is licensed "as is" without any
13 * warranty of any kind, whether express or implied. 13 * warranty of any kind, whether express or implied.
14 */ 14 */
15 15
16 #include <linux/err.h> 16 #include <linux/err.h>
17 #include <linux/io.h> 17 #include <linux/io.h>
18 #include <linux/module.h> 18 #include <linux/module.h>
19 #include <linux/of.h> 19 #include <linux/of.h>
20 #include <linux/of_address.h> 20 #include <linux/of_address.h>
21 #include <linux/pinctrl/machine.h> 21 #include <linux/pinctrl/machine.h>
22 #include <linux/pinctrl/pinctrl.h> 22 #include <linux/pinctrl/pinctrl.h>
23 #include <linux/pinctrl/pinmux.h> 23 #include <linux/pinctrl/pinmux.h>
24 #include <linux/platform_device.h> 24 #include <linux/platform_device.h>
25 #include <linux/slab.h> 25 #include <linux/slab.h>
26 26
27 #include "pinctrl-spear.h" 27 #include "pinctrl-spear.h"
28 28
29 #define DRIVER_NAME "spear-pinmux" 29 #define DRIVER_NAME "spear-pinmux"
30 30
31 static inline u32 pmx_readl(struct spear_pmx *pmx, u32 reg) 31 static inline u32 pmx_readl(struct spear_pmx *pmx, u32 reg)
32 { 32 {
33 return readl_relaxed(pmx->vbase + reg); 33 return readl_relaxed(pmx->vbase + reg);
34 } 34 }
35 35
36 static inline void pmx_writel(struct spear_pmx *pmx, u32 val, u32 reg) 36 static inline void pmx_writel(struct spear_pmx *pmx, u32 val, u32 reg)
37 { 37 {
38 writel_relaxed(val, pmx->vbase + reg); 38 writel_relaxed(val, pmx->vbase + reg);
39 } 39 }
40 40
41 static int set_mode(struct spear_pmx *pmx, int mode) 41 static int set_mode(struct spear_pmx *pmx, int mode)
42 { 42 {
43 struct spear_pmx_mode *pmx_mode = NULL; 43 struct spear_pmx_mode *pmx_mode = NULL;
44 int i; 44 int i;
45 u32 val; 45 u32 val;
46 46
47 if (!pmx->machdata->pmx_modes || !pmx->machdata->npmx_modes) 47 if (!pmx->machdata->pmx_modes || !pmx->machdata->npmx_modes)
48 return -EINVAL; 48 return -EINVAL;
49 49
50 for (i = 0; i < pmx->machdata->npmx_modes; i++) { 50 for (i = 0; i < pmx->machdata->npmx_modes; i++) {
51 if (pmx->machdata->pmx_modes[i]->mode == (1 << mode)) { 51 if (pmx->machdata->pmx_modes[i]->mode == (1 << mode)) {
52 pmx_mode = pmx->machdata->pmx_modes[i]; 52 pmx_mode = pmx->machdata->pmx_modes[i];
53 break; 53 break;
54 } 54 }
55 } 55 }
56 56
57 if (!pmx_mode) 57 if (!pmx_mode)
58 return -EINVAL; 58 return -EINVAL;
59 59
60 val = pmx_readl(pmx, pmx_mode->reg); 60 val = pmx_readl(pmx, pmx_mode->reg);
61 val &= ~pmx_mode->mask; 61 val &= ~pmx_mode->mask;
62 val |= pmx_mode->val; 62 val |= pmx_mode->val;
63 pmx_writel(pmx, val, pmx_mode->reg); 63 pmx_writel(pmx, val, pmx_mode->reg);
64 64
65 pmx->machdata->mode = pmx_mode->mode; 65 pmx->machdata->mode = pmx_mode->mode;
66 dev_info(pmx->dev, "Configured Mode: %s with id: %x\n\n", 66 dev_info(pmx->dev, "Configured Mode: %s with id: %x\n\n",
67 pmx_mode->name ? pmx_mode->name : "no_name", 67 pmx_mode->name ? pmx_mode->name : "no_name",
68 pmx_mode->reg); 68 pmx_mode->reg);
69 69
70 return 0; 70 return 0;
71 } 71 }
72 72
73 void __devinit pmx_init_addr(struct spear_pinctrl_machdata *machdata, u16 reg) 73 void __devinit pmx_init_addr(struct spear_pinctrl_machdata *machdata, u16 reg)
74 { 74 {
75 struct spear_pingroup *pgroup; 75 struct spear_pingroup *pgroup;
76 struct spear_modemux *modemux; 76 struct spear_modemux *modemux;
77 int i, j, group; 77 int i, j, group;
78 78
79 for (group = 0; group < machdata->ngroups; group++) { 79 for (group = 0; group < machdata->ngroups; group++) {
80 pgroup = machdata->groups[group]; 80 pgroup = machdata->groups[group];
81 81
82 for (i = 0; i < pgroup->nmodemuxs; i++) { 82 for (i = 0; i < pgroup->nmodemuxs; i++) {
83 modemux = &pgroup->modemuxs[i]; 83 modemux = &pgroup->modemuxs[i];
84 84
85 for (j = 0; j < modemux->nmuxregs; j++) 85 for (j = 0; j < modemux->nmuxregs; j++)
86 if (modemux->muxregs[j].reg == 0xFFFF) 86 if (modemux->muxregs[j].reg == 0xFFFF)
87 modemux->muxregs[j].reg = reg; 87 modemux->muxregs[j].reg = reg;
88 } 88 }
89 } 89 }
90 } 90 }
91 91
92 static int spear_pinctrl_get_groups_cnt(struct pinctrl_dev *pctldev) 92 static int spear_pinctrl_get_groups_cnt(struct pinctrl_dev *pctldev)
93 { 93 {
94 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 94 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
95 95
96 return pmx->machdata->ngroups; 96 return pmx->machdata->ngroups;
97 } 97 }
98 98
99 static const char *spear_pinctrl_get_group_name(struct pinctrl_dev *pctldev, 99 static const char *spear_pinctrl_get_group_name(struct pinctrl_dev *pctldev,
100 unsigned group) 100 unsigned group)
101 { 101 {
102 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 102 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
103 103
104 return pmx->machdata->groups[group]->name; 104 return pmx->machdata->groups[group]->name;
105 } 105 }
106 106
107 static int spear_pinctrl_get_group_pins(struct pinctrl_dev *pctldev, 107 static int spear_pinctrl_get_group_pins(struct pinctrl_dev *pctldev,
108 unsigned group, const unsigned **pins, unsigned *num_pins) 108 unsigned group, const unsigned **pins, unsigned *num_pins)
109 { 109 {
110 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 110 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
111 111
112 *pins = pmx->machdata->groups[group]->pins; 112 *pins = pmx->machdata->groups[group]->pins;
113 *num_pins = pmx->machdata->groups[group]->npins; 113 *num_pins = pmx->machdata->groups[group]->npins;
114 114
115 return 0; 115 return 0;
116 } 116 }
117 117
118 static void spear_pinctrl_pin_dbg_show(struct pinctrl_dev *pctldev, 118 static void spear_pinctrl_pin_dbg_show(struct pinctrl_dev *pctldev,
119 struct seq_file *s, unsigned offset) 119 struct seq_file *s, unsigned offset)
120 { 120 {
121 seq_printf(s, " " DRIVER_NAME); 121 seq_printf(s, " " DRIVER_NAME);
122 } 122 }
123 123
124 int spear_pinctrl_dt_node_to_map(struct pinctrl_dev *pctldev, 124 int spear_pinctrl_dt_node_to_map(struct pinctrl_dev *pctldev,
125 struct device_node *np_config, 125 struct device_node *np_config,
126 struct pinctrl_map **map, unsigned *num_maps) 126 struct pinctrl_map **map, unsigned *num_maps)
127 { 127 {
128 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 128 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
129 struct device_node *np; 129 struct device_node *np;
130 struct property *prop; 130 struct property *prop;
131 const char *function, *group; 131 const char *function, *group;
132 int ret, index = 0, count = 0; 132 int ret, index = 0, count = 0;
133 133
134 /* calculate number of maps required */ 134 /* calculate number of maps required */
135 for_each_child_of_node(np_config, np) { 135 for_each_child_of_node(np_config, np) {
136 ret = of_property_read_string(np, "st,function", &function); 136 ret = of_property_read_string(np, "st,function", &function);
137 if (ret < 0) 137 if (ret < 0)
138 return ret; 138 return ret;
139 139
140 ret = of_property_count_strings(np, "st,pins"); 140 ret = of_property_count_strings(np, "st,pins");
141 if (ret < 0) 141 if (ret < 0)
142 return ret; 142 return ret;
143 143
144 count += ret; 144 count += ret;
145 } 145 }
146 146
147 if (!count) { 147 if (!count) {
148 dev_err(pmx->dev, "No child nodes passed via DT\n"); 148 dev_err(pmx->dev, "No child nodes passed via DT\n");
149 return -ENODEV; 149 return -ENODEV;
150 } 150 }
151 151
152 *map = kzalloc(sizeof(**map) * count, GFP_KERNEL); 152 *map = kzalloc(sizeof(**map) * count, GFP_KERNEL);
153 if (!*map) 153 if (!*map)
154 return -ENOMEM; 154 return -ENOMEM;
155 155
156 for_each_child_of_node(np_config, np) { 156 for_each_child_of_node(np_config, np) {
157 of_property_read_string(np, "st,function", &function); 157 of_property_read_string(np, "st,function", &function);
158 of_property_for_each_string(np, "st,pins", prop, group) { 158 of_property_for_each_string(np, "st,pins", prop, group) {
159 (*map)[index].type = PIN_MAP_TYPE_MUX_GROUP; 159 (*map)[index].type = PIN_MAP_TYPE_MUX_GROUP;
160 (*map)[index].data.mux.group = group; 160 (*map)[index].data.mux.group = group;
161 (*map)[index].data.mux.function = function; 161 (*map)[index].data.mux.function = function;
162 index++; 162 index++;
163 } 163 }
164 } 164 }
165 165
166 *num_maps = count; 166 *num_maps = count;
167 167
168 return 0; 168 return 0;
169 } 169 }
170 170
171 void spear_pinctrl_dt_free_map(struct pinctrl_dev *pctldev, 171 void spear_pinctrl_dt_free_map(struct pinctrl_dev *pctldev,
172 struct pinctrl_map *map, unsigned num_maps) 172 struct pinctrl_map *map, unsigned num_maps)
173 { 173 {
174 kfree(map); 174 kfree(map);
175 } 175 }
176 176
177 static struct pinctrl_ops spear_pinctrl_ops = { 177 static struct pinctrl_ops spear_pinctrl_ops = {
178 .get_groups_count = spear_pinctrl_get_groups_cnt, 178 .get_groups_count = spear_pinctrl_get_groups_cnt,
179 .get_group_name = spear_pinctrl_get_group_name, 179 .get_group_name = spear_pinctrl_get_group_name,
180 .get_group_pins = spear_pinctrl_get_group_pins, 180 .get_group_pins = spear_pinctrl_get_group_pins,
181 .pin_dbg_show = spear_pinctrl_pin_dbg_show, 181 .pin_dbg_show = spear_pinctrl_pin_dbg_show,
182 .dt_node_to_map = spear_pinctrl_dt_node_to_map, 182 .dt_node_to_map = spear_pinctrl_dt_node_to_map,
183 .dt_free_map = spear_pinctrl_dt_free_map, 183 .dt_free_map = spear_pinctrl_dt_free_map,
184 }; 184 };
185 185
186 static int spear_pinctrl_get_funcs_count(struct pinctrl_dev *pctldev) 186 static int spear_pinctrl_get_funcs_count(struct pinctrl_dev *pctldev)
187 { 187 {
188 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 188 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
189 189
190 return pmx->machdata->nfunctions; 190 return pmx->machdata->nfunctions;
191 } 191 }
192 192
193 static const char *spear_pinctrl_get_func_name(struct pinctrl_dev *pctldev, 193 static const char *spear_pinctrl_get_func_name(struct pinctrl_dev *pctldev,
194 unsigned function) 194 unsigned function)
195 { 195 {
196 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 196 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
197 197
198 return pmx->machdata->functions[function]->name; 198 return pmx->machdata->functions[function]->name;
199 } 199 }
200 200
201 static int spear_pinctrl_get_func_groups(struct pinctrl_dev *pctldev, 201 static int spear_pinctrl_get_func_groups(struct pinctrl_dev *pctldev,
202 unsigned function, const char *const **groups, 202 unsigned function, const char *const **groups,
203 unsigned * const ngroups) 203 unsigned * const ngroups)
204 { 204 {
205 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 205 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
206 206
207 *groups = pmx->machdata->functions[function]->groups; 207 *groups = pmx->machdata->functions[function]->groups;
208 *ngroups = pmx->machdata->functions[function]->ngroups; 208 *ngroups = pmx->machdata->functions[function]->ngroups;
209 209
210 return 0; 210 return 0;
211 } 211 }
212 212
213 static int spear_pinctrl_endisable(struct pinctrl_dev *pctldev, 213 static int spear_pinctrl_endisable(struct pinctrl_dev *pctldev,
214 unsigned function, unsigned group, bool enable) 214 unsigned function, unsigned group, bool enable)
215 { 215 {
216 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 216 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
217 const struct spear_pingroup *pgroup; 217 const struct spear_pingroup *pgroup;
218 const struct spear_modemux *modemux; 218 const struct spear_modemux *modemux;
219 struct spear_muxreg *muxreg; 219 struct spear_muxreg *muxreg;
220 u32 val, temp; 220 u32 val, temp;
221 int i, j; 221 int i, j;
222 bool found = false; 222 bool found = false;
223 223
224 pgroup = pmx->machdata->groups[group]; 224 pgroup = pmx->machdata->groups[group];
225 225
226 for (i = 0; i < pgroup->nmodemuxs; i++) { 226 for (i = 0; i < pgroup->nmodemuxs; i++) {
227 modemux = &pgroup->modemuxs[i]; 227 modemux = &pgroup->modemuxs[i];
228 228
229 /* SoC have any modes */ 229 /* SoC have any modes */
230 if (pmx->machdata->modes_supported) { 230 if (pmx->machdata->modes_supported) {
231 if (!(pmx->machdata->mode & modemux->modes)) 231 if (!(pmx->machdata->mode & modemux->modes))
232 continue; 232 continue;
233 } 233 }
234 234
235 found = true; 235 found = true;
236 for (j = 0; j < modemux->nmuxregs; j++) { 236 for (j = 0; j < modemux->nmuxregs; j++) {
237 muxreg = &modemux->muxregs[j]; 237 muxreg = &modemux->muxregs[j];
238 238
239 val = pmx_readl(pmx, muxreg->reg); 239 val = pmx_readl(pmx, muxreg->reg);
240 val &= ~muxreg->mask; 240 val &= ~muxreg->mask;
241 241
242 if (enable) 242 if (enable)
243 temp = muxreg->val; 243 temp = muxreg->val;
244 else 244 else
245 temp = ~muxreg->val; 245 temp = ~muxreg->val;
246 246
247 val |= muxreg->mask & temp; 247 val |= muxreg->mask & temp;
248 pmx_writel(pmx, val, muxreg->reg); 248 pmx_writel(pmx, val, muxreg->reg);
249 } 249 }
250 } 250 }
251 251
252 if (!found) { 252 if (!found) {
253 dev_err(pmx->dev, "pinmux group: %s not supported\n", 253 dev_err(pmx->dev, "pinmux group: %s not supported\n",
254 pgroup->name); 254 pgroup->name);
255 return -ENODEV; 255 return -ENODEV;
256 } 256 }
257 257
258 return 0; 258 return 0;
259 } 259 }
260 260
261 static int spear_pinctrl_enable(struct pinctrl_dev *pctldev, unsigned function, 261 static int spear_pinctrl_enable(struct pinctrl_dev *pctldev, unsigned function,
262 unsigned group) 262 unsigned group)
263 { 263 {
264 return spear_pinctrl_endisable(pctldev, function, group, true); 264 return spear_pinctrl_endisable(pctldev, function, group, true);
265 } 265 }
266 266
267 static void spear_pinctrl_disable(struct pinctrl_dev *pctldev, 267 static void spear_pinctrl_disable(struct pinctrl_dev *pctldev,
268 unsigned function, unsigned group) 268 unsigned function, unsigned group)
269 { 269 {
270 spear_pinctrl_endisable(pctldev, function, group, false); 270 spear_pinctrl_endisable(pctldev, function, group, false);
271 } 271 }
272 272
273 static struct pinmux_ops spear_pinmux_ops = { 273 static struct pinmux_ops spear_pinmux_ops = {
274 .get_functions_count = spear_pinctrl_get_funcs_count, 274 .get_functions_count = spear_pinctrl_get_funcs_count,
275 .get_function_name = spear_pinctrl_get_func_name, 275 .get_function_name = spear_pinctrl_get_func_name,
276 .get_function_groups = spear_pinctrl_get_func_groups, 276 .get_function_groups = spear_pinctrl_get_func_groups,
277 .enable = spear_pinctrl_enable, 277 .enable = spear_pinctrl_enable,
278 .disable = spear_pinctrl_disable, 278 .disable = spear_pinctrl_disable,
279 }; 279 };
280 280
281 static struct pinctrl_desc spear_pinctrl_desc = { 281 static struct pinctrl_desc spear_pinctrl_desc = {
282 .name = DRIVER_NAME, 282 .name = DRIVER_NAME,
283 .pctlops = &spear_pinctrl_ops, 283 .pctlops = &spear_pinctrl_ops,
284 .pmxops = &spear_pinmux_ops, 284 .pmxops = &spear_pinmux_ops,
285 .owner = THIS_MODULE, 285 .owner = THIS_MODULE,
286 }; 286 };
287 287
288 int __devinit spear_pinctrl_probe(struct platform_device *pdev, 288 int __devinit spear_pinctrl_probe(struct platform_device *pdev,
289 struct spear_pinctrl_machdata *machdata) 289 struct spear_pinctrl_machdata *machdata)
290 { 290 {
291 struct device_node *np = pdev->dev.of_node; 291 struct device_node *np = pdev->dev.of_node;
292 struct resource *res; 292 struct resource *res;
293 struct spear_pmx *pmx; 293 struct spear_pmx *pmx;
294 294
295 if (!machdata) 295 if (!machdata)
296 return -ENODEV; 296 return -ENODEV;
297 297
298 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 298 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
299 if (!res) 299 if (!res)
300 return -EINVAL; 300 return -EINVAL;
301 301
302 pmx = devm_kzalloc(&pdev->dev, sizeof(*pmx), GFP_KERNEL); 302 pmx = devm_kzalloc(&pdev->dev, sizeof(*pmx), GFP_KERNEL);
303 if (!pmx) { 303 if (!pmx) {
304 dev_err(&pdev->dev, "Can't alloc spear_pmx\n"); 304 dev_err(&pdev->dev, "Can't alloc spear_pmx\n");
305 return -ENOMEM; 305 return -ENOMEM;
306 } 306 }
307 307
308 pmx->vbase = devm_ioremap(&pdev->dev, res->start, resource_size(res)); 308 pmx->vbase = devm_ioremap(&pdev->dev, res->start, resource_size(res));
309 if (!pmx->vbase) { 309 if (!pmx->vbase) {
310 dev_err(&pdev->dev, "Couldn't ioremap at index 0\n"); 310 dev_err(&pdev->dev, "Couldn't ioremap at index 0\n");
311 return -ENODEV; 311 return -ENODEV;
312 } 312 }
313 313
314 pmx->dev = &pdev->dev; 314 pmx->dev = &pdev->dev;
315 pmx->machdata = machdata; 315 pmx->machdata = machdata;
316 316
317 /* configure mode, if supported by SoC */ 317 /* configure mode, if supported by SoC */
318 if (machdata->modes_supported) { 318 if (machdata->modes_supported) {
319 int mode = 0; 319 int mode = 0;
320 320
321 if (of_property_read_u32(np, "st,pinmux-mode", &mode)) { 321 if (of_property_read_u32(np, "st,pinmux-mode", &mode)) {
322 dev_err(&pdev->dev, "OF: pinmux mode not passed\n"); 322 dev_err(&pdev->dev, "OF: pinmux mode not passed\n");
323 return -EINVAL; 323 return -EINVAL;
324 } 324 }
325 325
326 if (set_mode(pmx, mode)) { 326 if (set_mode(pmx, mode)) {
327 dev_err(&pdev->dev, "OF: Couldn't configure mode: %x\n", 327 dev_err(&pdev->dev, "OF: Couldn't configure mode: %x\n",
328 mode); 328 mode);
329 return -EINVAL; 329 return -EINVAL;
330 } 330 }
331 } 331 }
332 332
333 platform_set_drvdata(pdev, pmx); 333 platform_set_drvdata(pdev, pmx);
334 334
335 spear_pinctrl_desc.pins = machdata->pins; 335 spear_pinctrl_desc.pins = machdata->pins;
336 spear_pinctrl_desc.npins = machdata->npins; 336 spear_pinctrl_desc.npins = machdata->npins;
337 337
338 pmx->pctl = pinctrl_register(&spear_pinctrl_desc, &pdev->dev, pmx); 338 pmx->pctl = pinctrl_register(&spear_pinctrl_desc, &pdev->dev, pmx);
339 if (!pmx->pctl) { 339 if (!pmx->pctl) {
340 dev_err(&pdev->dev, "Couldn't register pinctrl driver\n"); 340 dev_err(&pdev->dev, "Couldn't register pinctrl driver\n");
341 return -ENODEV; 341 return -ENODEV;
342 } 342 }
343 343
344 return 0; 344 return 0;
345 } 345 }
346 346
347 int __devexit spear_pinctrl_remove(struct platform_device *pdev) 347 int spear_pinctrl_remove(struct platform_device *pdev)
348 { 348 {
349 struct spear_pmx *pmx = platform_get_drvdata(pdev); 349 struct spear_pmx *pmx = platform_get_drvdata(pdev);
350 350
351 pinctrl_unregister(pmx->pctl); 351 pinctrl_unregister(pmx->pctl);
352 352
353 return 0; 353 return 0;
354 } 354 }
355 355
drivers/pinctrl/spear/pinctrl-spear.h
1 /* 1 /*
2 * Driver header file for the ST Microelectronics SPEAr pinmux 2 * Driver header file for the ST Microelectronics SPEAr pinmux
3 * 3 *
4 * Copyright (C) 2012 ST Microelectronics 4 * Copyright (C) 2012 ST Microelectronics
5 * Viresh Kumar <viresh.linux@gmail.com> 5 * Viresh Kumar <viresh.linux@gmail.com>
6 * 6 *
7 * This file is licensed under the terms of the GNU General Public 7 * This file is licensed under the terms of the GNU General Public
8 * License version 2. This program is licensed "as is" without any 8 * License version 2. This program is licensed "as is" without any
9 * warranty of any kind, whether express or implied. 9 * warranty of any kind, whether express or implied.
10 */ 10 */
11 11
12 #ifndef __PINMUX_SPEAR_H__ 12 #ifndef __PINMUX_SPEAR_H__
13 #define __PINMUX_SPEAR_H__ 13 #define __PINMUX_SPEAR_H__
14 14
15 #include <linux/pinctrl/pinctrl.h> 15 #include <linux/pinctrl/pinctrl.h>
16 #include <linux/types.h> 16 #include <linux/types.h>
17 17
18 struct platform_device; 18 struct platform_device;
19 struct device; 19 struct device;
20 20
21 /** 21 /**
22 * struct spear_pmx_mode - SPEAr pmx mode 22 * struct spear_pmx_mode - SPEAr pmx mode
23 * @name: name of pmx mode 23 * @name: name of pmx mode
24 * @mode: mode id 24 * @mode: mode id
25 * @reg: register for configuring this mode 25 * @reg: register for configuring this mode
26 * @mask: mask of this mode in reg 26 * @mask: mask of this mode in reg
27 * @val: val to be configured at reg after doing (val & mask) 27 * @val: val to be configured at reg after doing (val & mask)
28 */ 28 */
29 struct spear_pmx_mode { 29 struct spear_pmx_mode {
30 const char *const name; 30 const char *const name;
31 u16 mode; 31 u16 mode;
32 u16 reg; 32 u16 reg;
33 u16 mask; 33 u16 mask;
34 u32 val; 34 u32 val;
35 }; 35 };
36 36
37 /** 37 /**
38 * struct spear_muxreg - SPEAr mux reg configuration 38 * struct spear_muxreg - SPEAr mux reg configuration
39 * @reg: register offset 39 * @reg: register offset
40 * @mask: mask bits 40 * @mask: mask bits
41 * @val: val to be written on mask bits 41 * @val: val to be written on mask bits
42 */ 42 */
43 struct spear_muxreg { 43 struct spear_muxreg {
44 u16 reg; 44 u16 reg;
45 u32 mask; 45 u32 mask;
46 u32 val; 46 u32 val;
47 }; 47 };
48 48
49 /** 49 /**
50 * struct spear_modemux - SPEAr mode mux configuration 50 * struct spear_modemux - SPEAr mode mux configuration
51 * @modes: mode ids supported by this group of muxregs 51 * @modes: mode ids supported by this group of muxregs
52 * @nmuxregs: number of muxreg configurations to be done for modes 52 * @nmuxregs: number of muxreg configurations to be done for modes
53 * @muxregs: array of muxreg configurations to be done for modes 53 * @muxregs: array of muxreg configurations to be done for modes
54 */ 54 */
55 struct spear_modemux { 55 struct spear_modemux {
56 u16 modes; 56 u16 modes;
57 u8 nmuxregs; 57 u8 nmuxregs;
58 struct spear_muxreg *muxregs; 58 struct spear_muxreg *muxregs;
59 }; 59 };
60 60
61 /** 61 /**
62 * struct spear_pingroup - SPEAr pin group configurations 62 * struct spear_pingroup - SPEAr pin group configurations
63 * @name: name of pin group 63 * @name: name of pin group
64 * @pins: array containing pin numbers 64 * @pins: array containing pin numbers
65 * @npins: size of pins array 65 * @npins: size of pins array
66 * @modemuxs: array of modemux configurations for this pin group 66 * @modemuxs: array of modemux configurations for this pin group
67 * @nmodemuxs: size of array modemuxs 67 * @nmodemuxs: size of array modemuxs
68 * 68 *
69 * A representation of a group of pins in the SPEAr pin controller. Each group 69 * A representation of a group of pins in the SPEAr pin controller. Each group
70 * allows some parameter or parameters to be configured. 70 * allows some parameter or parameters to be configured.
71 */ 71 */
72 struct spear_pingroup { 72 struct spear_pingroup {
73 const char *name; 73 const char *name;
74 const unsigned *pins; 74 const unsigned *pins;
75 unsigned npins; 75 unsigned npins;
76 struct spear_modemux *modemuxs; 76 struct spear_modemux *modemuxs;
77 unsigned nmodemuxs; 77 unsigned nmodemuxs;
78 }; 78 };
79 79
80 /** 80 /**
81 * struct spear_function - SPEAr pinctrl mux function 81 * struct spear_function - SPEAr pinctrl mux function
82 * @name: The name of the function, exported to pinctrl core. 82 * @name: The name of the function, exported to pinctrl core.
83 * @groups: An array of pin groups that may select this function. 83 * @groups: An array of pin groups that may select this function.
84 * @ngroups: The number of entries in @groups. 84 * @ngroups: The number of entries in @groups.
85 */ 85 */
86 struct spear_function { 86 struct spear_function {
87 const char *name; 87 const char *name;
88 const char *const *groups; 88 const char *const *groups;
89 unsigned ngroups; 89 unsigned ngroups;
90 }; 90 };
91 91
92 /** 92 /**
93 * struct spear_pinctrl_machdata - SPEAr pin controller machine driver 93 * struct spear_pinctrl_machdata - SPEAr pin controller machine driver
94 * configuration 94 * configuration
95 * @pins: An array describing all pins the pin controller affects. 95 * @pins: An array describing all pins the pin controller affects.
96 * All pins which are also GPIOs must be listed first within the *array, 96 * All pins which are also GPIOs must be listed first within the *array,
97 * and be numbered identically to the GPIO controller's *numbering. 97 * and be numbered identically to the GPIO controller's *numbering.
98 * @npins: The numbmer of entries in @pins. 98 * @npins: The numbmer of entries in @pins.
99 * @functions: An array describing all mux functions the SoC supports. 99 * @functions: An array describing all mux functions the SoC supports.
100 * @nfunctions: The numbmer of entries in @functions. 100 * @nfunctions: The numbmer of entries in @functions.
101 * @groups: An array describing all pin groups the pin SoC supports. 101 * @groups: An array describing all pin groups the pin SoC supports.
102 * @ngroups: The numbmer of entries in @groups. 102 * @ngroups: The numbmer of entries in @groups.
103 * 103 *
104 * @modes_supported: Does SoC support modes 104 * @modes_supported: Does SoC support modes
105 * @mode: mode configured from probe 105 * @mode: mode configured from probe
106 * @pmx_modes: array of modes supported by SoC 106 * @pmx_modes: array of modes supported by SoC
107 * @npmx_modes: number of entries in pmx_modes. 107 * @npmx_modes: number of entries in pmx_modes.
108 */ 108 */
109 struct spear_pinctrl_machdata { 109 struct spear_pinctrl_machdata {
110 const struct pinctrl_pin_desc *pins; 110 const struct pinctrl_pin_desc *pins;
111 unsigned npins; 111 unsigned npins;
112 struct spear_function **functions; 112 struct spear_function **functions;
113 unsigned nfunctions; 113 unsigned nfunctions;
114 struct spear_pingroup **groups; 114 struct spear_pingroup **groups;
115 unsigned ngroups; 115 unsigned ngroups;
116 116
117 bool modes_supported; 117 bool modes_supported;
118 u16 mode; 118 u16 mode;
119 struct spear_pmx_mode **pmx_modes; 119 struct spear_pmx_mode **pmx_modes;
120 unsigned npmx_modes; 120 unsigned npmx_modes;
121 }; 121 };
122 122
123 /** 123 /**
124 * struct spear_pmx - SPEAr pinctrl mux 124 * struct spear_pmx - SPEAr pinctrl mux
125 * @dev: pointer to struct dev of platform_device registered 125 * @dev: pointer to struct dev of platform_device registered
126 * @pctl: pointer to struct pinctrl_dev 126 * @pctl: pointer to struct pinctrl_dev
127 * @machdata: pointer to SoC or machine specific structure 127 * @machdata: pointer to SoC or machine specific structure
128 * @vbase: virtual base address of pinmux controller 128 * @vbase: virtual base address of pinmux controller
129 */ 129 */
130 struct spear_pmx { 130 struct spear_pmx {
131 struct device *dev; 131 struct device *dev;
132 struct pinctrl_dev *pctl; 132 struct pinctrl_dev *pctl;
133 struct spear_pinctrl_machdata *machdata; 133 struct spear_pinctrl_machdata *machdata;
134 void __iomem *vbase; 134 void __iomem *vbase;
135 }; 135 };
136 136
137 /* exported routines */ 137 /* exported routines */
138 void __devinit pmx_init_addr(struct spear_pinctrl_machdata *machdata, u16 reg); 138 void __devinit pmx_init_addr(struct spear_pinctrl_machdata *machdata, u16 reg);
139 int __devinit spear_pinctrl_probe(struct platform_device *pdev, 139 int __devinit spear_pinctrl_probe(struct platform_device *pdev,
140 struct spear_pinctrl_machdata *machdata); 140 struct spear_pinctrl_machdata *machdata);
141 int __devexit spear_pinctrl_remove(struct platform_device *pdev); 141 int spear_pinctrl_remove(struct platform_device *pdev);
142 142
143 #define SPEAR_PIN_0_TO_101 \ 143 #define SPEAR_PIN_0_TO_101 \
144 PINCTRL_PIN(0, "PLGPIO0"), \ 144 PINCTRL_PIN(0, "PLGPIO0"), \
145 PINCTRL_PIN(1, "PLGPIO1"), \ 145 PINCTRL_PIN(1, "PLGPIO1"), \
146 PINCTRL_PIN(2, "PLGPIO2"), \ 146 PINCTRL_PIN(2, "PLGPIO2"), \
147 PINCTRL_PIN(3, "PLGPIO3"), \ 147 PINCTRL_PIN(3, "PLGPIO3"), \
148 PINCTRL_PIN(4, "PLGPIO4"), \ 148 PINCTRL_PIN(4, "PLGPIO4"), \
149 PINCTRL_PIN(5, "PLGPIO5"), \ 149 PINCTRL_PIN(5, "PLGPIO5"), \
150 PINCTRL_PIN(6, "PLGPIO6"), \ 150 PINCTRL_PIN(6, "PLGPIO6"), \
151 PINCTRL_PIN(7, "PLGPIO7"), \ 151 PINCTRL_PIN(7, "PLGPIO7"), \
152 PINCTRL_PIN(8, "PLGPIO8"), \ 152 PINCTRL_PIN(8, "PLGPIO8"), \
153 PINCTRL_PIN(9, "PLGPIO9"), \ 153 PINCTRL_PIN(9, "PLGPIO9"), \
154 PINCTRL_PIN(10, "PLGPIO10"), \ 154 PINCTRL_PIN(10, "PLGPIO10"), \
155 PINCTRL_PIN(11, "PLGPIO11"), \ 155 PINCTRL_PIN(11, "PLGPIO11"), \
156 PINCTRL_PIN(12, "PLGPIO12"), \ 156 PINCTRL_PIN(12, "PLGPIO12"), \
157 PINCTRL_PIN(13, "PLGPIO13"), \ 157 PINCTRL_PIN(13, "PLGPIO13"), \
158 PINCTRL_PIN(14, "PLGPIO14"), \ 158 PINCTRL_PIN(14, "PLGPIO14"), \
159 PINCTRL_PIN(15, "PLGPIO15"), \ 159 PINCTRL_PIN(15, "PLGPIO15"), \
160 PINCTRL_PIN(16, "PLGPIO16"), \ 160 PINCTRL_PIN(16, "PLGPIO16"), \
161 PINCTRL_PIN(17, "PLGPIO17"), \ 161 PINCTRL_PIN(17, "PLGPIO17"), \
162 PINCTRL_PIN(18, "PLGPIO18"), \ 162 PINCTRL_PIN(18, "PLGPIO18"), \
163 PINCTRL_PIN(19, "PLGPIO19"), \ 163 PINCTRL_PIN(19, "PLGPIO19"), \
164 PINCTRL_PIN(20, "PLGPIO20"), \ 164 PINCTRL_PIN(20, "PLGPIO20"), \
165 PINCTRL_PIN(21, "PLGPIO21"), \ 165 PINCTRL_PIN(21, "PLGPIO21"), \
166 PINCTRL_PIN(22, "PLGPIO22"), \ 166 PINCTRL_PIN(22, "PLGPIO22"), \
167 PINCTRL_PIN(23, "PLGPIO23"), \ 167 PINCTRL_PIN(23, "PLGPIO23"), \
168 PINCTRL_PIN(24, "PLGPIO24"), \ 168 PINCTRL_PIN(24, "PLGPIO24"), \
169 PINCTRL_PIN(25, "PLGPIO25"), \ 169 PINCTRL_PIN(25, "PLGPIO25"), \
170 PINCTRL_PIN(26, "PLGPIO26"), \ 170 PINCTRL_PIN(26, "PLGPIO26"), \
171 PINCTRL_PIN(27, "PLGPIO27"), \ 171 PINCTRL_PIN(27, "PLGPIO27"), \
172 PINCTRL_PIN(28, "PLGPIO28"), \ 172 PINCTRL_PIN(28, "PLGPIO28"), \
173 PINCTRL_PIN(29, "PLGPIO29"), \ 173 PINCTRL_PIN(29, "PLGPIO29"), \
174 PINCTRL_PIN(30, "PLGPIO30"), \ 174 PINCTRL_PIN(30, "PLGPIO30"), \
175 PINCTRL_PIN(31, "PLGPIO31"), \ 175 PINCTRL_PIN(31, "PLGPIO31"), \
176 PINCTRL_PIN(32, "PLGPIO32"), \ 176 PINCTRL_PIN(32, "PLGPIO32"), \
177 PINCTRL_PIN(33, "PLGPIO33"), \ 177 PINCTRL_PIN(33, "PLGPIO33"), \
178 PINCTRL_PIN(34, "PLGPIO34"), \ 178 PINCTRL_PIN(34, "PLGPIO34"), \
179 PINCTRL_PIN(35, "PLGPIO35"), \ 179 PINCTRL_PIN(35, "PLGPIO35"), \
180 PINCTRL_PIN(36, "PLGPIO36"), \ 180 PINCTRL_PIN(36, "PLGPIO36"), \
181 PINCTRL_PIN(37, "PLGPIO37"), \ 181 PINCTRL_PIN(37, "PLGPIO37"), \
182 PINCTRL_PIN(38, "PLGPIO38"), \ 182 PINCTRL_PIN(38, "PLGPIO38"), \
183 PINCTRL_PIN(39, "PLGPIO39"), \ 183 PINCTRL_PIN(39, "PLGPIO39"), \
184 PINCTRL_PIN(40, "PLGPIO40"), \ 184 PINCTRL_PIN(40, "PLGPIO40"), \
185 PINCTRL_PIN(41, "PLGPIO41"), \ 185 PINCTRL_PIN(41, "PLGPIO41"), \
186 PINCTRL_PIN(42, "PLGPIO42"), \ 186 PINCTRL_PIN(42, "PLGPIO42"), \
187 PINCTRL_PIN(43, "PLGPIO43"), \ 187 PINCTRL_PIN(43, "PLGPIO43"), \
188 PINCTRL_PIN(44, "PLGPIO44"), \ 188 PINCTRL_PIN(44, "PLGPIO44"), \
189 PINCTRL_PIN(45, "PLGPIO45"), \ 189 PINCTRL_PIN(45, "PLGPIO45"), \
190 PINCTRL_PIN(46, "PLGPIO46"), \ 190 PINCTRL_PIN(46, "PLGPIO46"), \
191 PINCTRL_PIN(47, "PLGPIO47"), \ 191 PINCTRL_PIN(47, "PLGPIO47"), \
192 PINCTRL_PIN(48, "PLGPIO48"), \ 192 PINCTRL_PIN(48, "PLGPIO48"), \
193 PINCTRL_PIN(49, "PLGPIO49"), \ 193 PINCTRL_PIN(49, "PLGPIO49"), \
194 PINCTRL_PIN(50, "PLGPIO50"), \ 194 PINCTRL_PIN(50, "PLGPIO50"), \
195 PINCTRL_PIN(51, "PLGPIO51"), \ 195 PINCTRL_PIN(51, "PLGPIO51"), \
196 PINCTRL_PIN(52, "PLGPIO52"), \ 196 PINCTRL_PIN(52, "PLGPIO52"), \
197 PINCTRL_PIN(53, "PLGPIO53"), \ 197 PINCTRL_PIN(53, "PLGPIO53"), \
198 PINCTRL_PIN(54, "PLGPIO54"), \ 198 PINCTRL_PIN(54, "PLGPIO54"), \
199 PINCTRL_PIN(55, "PLGPIO55"), \ 199 PINCTRL_PIN(55, "PLGPIO55"), \
200 PINCTRL_PIN(56, "PLGPIO56"), \ 200 PINCTRL_PIN(56, "PLGPIO56"), \
201 PINCTRL_PIN(57, "PLGPIO57"), \ 201 PINCTRL_PIN(57, "PLGPIO57"), \
202 PINCTRL_PIN(58, "PLGPIO58"), \ 202 PINCTRL_PIN(58, "PLGPIO58"), \
203 PINCTRL_PIN(59, "PLGPIO59"), \ 203 PINCTRL_PIN(59, "PLGPIO59"), \
204 PINCTRL_PIN(60, "PLGPIO60"), \ 204 PINCTRL_PIN(60, "PLGPIO60"), \
205 PINCTRL_PIN(61, "PLGPIO61"), \ 205 PINCTRL_PIN(61, "PLGPIO61"), \
206 PINCTRL_PIN(62, "PLGPIO62"), \ 206 PINCTRL_PIN(62, "PLGPIO62"), \
207 PINCTRL_PIN(63, "PLGPIO63"), \ 207 PINCTRL_PIN(63, "PLGPIO63"), \
208 PINCTRL_PIN(64, "PLGPIO64"), \ 208 PINCTRL_PIN(64, "PLGPIO64"), \
209 PINCTRL_PIN(65, "PLGPIO65"), \ 209 PINCTRL_PIN(65, "PLGPIO65"), \
210 PINCTRL_PIN(66, "PLGPIO66"), \ 210 PINCTRL_PIN(66, "PLGPIO66"), \
211 PINCTRL_PIN(67, "PLGPIO67"), \ 211 PINCTRL_PIN(67, "PLGPIO67"), \
212 PINCTRL_PIN(68, "PLGPIO68"), \ 212 PINCTRL_PIN(68, "PLGPIO68"), \
213 PINCTRL_PIN(69, "PLGPIO69"), \ 213 PINCTRL_PIN(69, "PLGPIO69"), \
214 PINCTRL_PIN(70, "PLGPIO70"), \ 214 PINCTRL_PIN(70, "PLGPIO70"), \
215 PINCTRL_PIN(71, "PLGPIO71"), \ 215 PINCTRL_PIN(71, "PLGPIO71"), \
216 PINCTRL_PIN(72, "PLGPIO72"), \ 216 PINCTRL_PIN(72, "PLGPIO72"), \
217 PINCTRL_PIN(73, "PLGPIO73"), \ 217 PINCTRL_PIN(73, "PLGPIO73"), \
218 PINCTRL_PIN(74, "PLGPIO74"), \ 218 PINCTRL_PIN(74, "PLGPIO74"), \
219 PINCTRL_PIN(75, "PLGPIO75"), \ 219 PINCTRL_PIN(75, "PLGPIO75"), \
220 PINCTRL_PIN(76, "PLGPIO76"), \ 220 PINCTRL_PIN(76, "PLGPIO76"), \
221 PINCTRL_PIN(77, "PLGPIO77"), \ 221 PINCTRL_PIN(77, "PLGPIO77"), \
222 PINCTRL_PIN(78, "PLGPIO78"), \ 222 PINCTRL_PIN(78, "PLGPIO78"), \
223 PINCTRL_PIN(79, "PLGPIO79"), \ 223 PINCTRL_PIN(79, "PLGPIO79"), \
224 PINCTRL_PIN(80, "PLGPIO80"), \ 224 PINCTRL_PIN(80, "PLGPIO80"), \
225 PINCTRL_PIN(81, "PLGPIO81"), \ 225 PINCTRL_PIN(81, "PLGPIO81"), \
226 PINCTRL_PIN(82, "PLGPIO82"), \ 226 PINCTRL_PIN(82, "PLGPIO82"), \
227 PINCTRL_PIN(83, "PLGPIO83"), \ 227 PINCTRL_PIN(83, "PLGPIO83"), \
228 PINCTRL_PIN(84, "PLGPIO84"), \ 228 PINCTRL_PIN(84, "PLGPIO84"), \
229 PINCTRL_PIN(85, "PLGPIO85"), \ 229 PINCTRL_PIN(85, "PLGPIO85"), \
230 PINCTRL_PIN(86, "PLGPIO86"), \ 230 PINCTRL_PIN(86, "PLGPIO86"), \
231 PINCTRL_PIN(87, "PLGPIO87"), \ 231 PINCTRL_PIN(87, "PLGPIO87"), \
232 PINCTRL_PIN(88, "PLGPIO88"), \ 232 PINCTRL_PIN(88, "PLGPIO88"), \
233 PINCTRL_PIN(89, "PLGPIO89"), \ 233 PINCTRL_PIN(89, "PLGPIO89"), \
234 PINCTRL_PIN(90, "PLGPIO90"), \ 234 PINCTRL_PIN(90, "PLGPIO90"), \
235 PINCTRL_PIN(91, "PLGPIO91"), \ 235 PINCTRL_PIN(91, "PLGPIO91"), \
236 PINCTRL_PIN(92, "PLGPIO92"), \ 236 PINCTRL_PIN(92, "PLGPIO92"), \
237 PINCTRL_PIN(93, "PLGPIO93"), \ 237 PINCTRL_PIN(93, "PLGPIO93"), \
238 PINCTRL_PIN(94, "PLGPIO94"), \ 238 PINCTRL_PIN(94, "PLGPIO94"), \
239 PINCTRL_PIN(95, "PLGPIO95"), \ 239 PINCTRL_PIN(95, "PLGPIO95"), \
240 PINCTRL_PIN(96, "PLGPIO96"), \ 240 PINCTRL_PIN(96, "PLGPIO96"), \
241 PINCTRL_PIN(97, "PLGPIO97"), \ 241 PINCTRL_PIN(97, "PLGPIO97"), \
242 PINCTRL_PIN(98, "PLGPIO98"), \ 242 PINCTRL_PIN(98, "PLGPIO98"), \
243 PINCTRL_PIN(99, "PLGPIO99"), \ 243 PINCTRL_PIN(99, "PLGPIO99"), \
244 PINCTRL_PIN(100, "PLGPIO100"), \ 244 PINCTRL_PIN(100, "PLGPIO100"), \
245 PINCTRL_PIN(101, "PLGPIO101") 245 PINCTRL_PIN(101, "PLGPIO101")
246 246
247 #define SPEAR_PIN_102_TO_245 \ 247 #define SPEAR_PIN_102_TO_245 \
248 PINCTRL_PIN(102, "PLGPIO102"), \ 248 PINCTRL_PIN(102, "PLGPIO102"), \
249 PINCTRL_PIN(103, "PLGPIO103"), \ 249 PINCTRL_PIN(103, "PLGPIO103"), \
250 PINCTRL_PIN(104, "PLGPIO104"), \ 250 PINCTRL_PIN(104, "PLGPIO104"), \
251 PINCTRL_PIN(105, "PLGPIO105"), \ 251 PINCTRL_PIN(105, "PLGPIO105"), \
252 PINCTRL_PIN(106, "PLGPIO106"), \ 252 PINCTRL_PIN(106, "PLGPIO106"), \
253 PINCTRL_PIN(107, "PLGPIO107"), \ 253 PINCTRL_PIN(107, "PLGPIO107"), \
254 PINCTRL_PIN(108, "PLGPIO108"), \ 254 PINCTRL_PIN(108, "PLGPIO108"), \
255 PINCTRL_PIN(109, "PLGPIO109"), \ 255 PINCTRL_PIN(109, "PLGPIO109"), \
256 PINCTRL_PIN(110, "PLGPIO110"), \ 256 PINCTRL_PIN(110, "PLGPIO110"), \
257 PINCTRL_PIN(111, "PLGPIO111"), \ 257 PINCTRL_PIN(111, "PLGPIO111"), \
258 PINCTRL_PIN(112, "PLGPIO112"), \ 258 PINCTRL_PIN(112, "PLGPIO112"), \
259 PINCTRL_PIN(113, "PLGPIO113"), \ 259 PINCTRL_PIN(113, "PLGPIO113"), \
260 PINCTRL_PIN(114, "PLGPIO114"), \ 260 PINCTRL_PIN(114, "PLGPIO114"), \
261 PINCTRL_PIN(115, "PLGPIO115"), \ 261 PINCTRL_PIN(115, "PLGPIO115"), \
262 PINCTRL_PIN(116, "PLGPIO116"), \ 262 PINCTRL_PIN(116, "PLGPIO116"), \
263 PINCTRL_PIN(117, "PLGPIO117"), \ 263 PINCTRL_PIN(117, "PLGPIO117"), \
264 PINCTRL_PIN(118, "PLGPIO118"), \ 264 PINCTRL_PIN(118, "PLGPIO118"), \
265 PINCTRL_PIN(119, "PLGPIO119"), \ 265 PINCTRL_PIN(119, "PLGPIO119"), \
266 PINCTRL_PIN(120, "PLGPIO120"), \ 266 PINCTRL_PIN(120, "PLGPIO120"), \
267 PINCTRL_PIN(121, "PLGPIO121"), \ 267 PINCTRL_PIN(121, "PLGPIO121"), \
268 PINCTRL_PIN(122, "PLGPIO122"), \ 268 PINCTRL_PIN(122, "PLGPIO122"), \
269 PINCTRL_PIN(123, "PLGPIO123"), \ 269 PINCTRL_PIN(123, "PLGPIO123"), \
270 PINCTRL_PIN(124, "PLGPIO124"), \ 270 PINCTRL_PIN(124, "PLGPIO124"), \
271 PINCTRL_PIN(125, "PLGPIO125"), \ 271 PINCTRL_PIN(125, "PLGPIO125"), \
272 PINCTRL_PIN(126, "PLGPIO126"), \ 272 PINCTRL_PIN(126, "PLGPIO126"), \
273 PINCTRL_PIN(127, "PLGPIO127"), \ 273 PINCTRL_PIN(127, "PLGPIO127"), \
274 PINCTRL_PIN(128, "PLGPIO128"), \ 274 PINCTRL_PIN(128, "PLGPIO128"), \
275 PINCTRL_PIN(129, "PLGPIO129"), \ 275 PINCTRL_PIN(129, "PLGPIO129"), \
276 PINCTRL_PIN(130, "PLGPIO130"), \ 276 PINCTRL_PIN(130, "PLGPIO130"), \
277 PINCTRL_PIN(131, "PLGPIO131"), \ 277 PINCTRL_PIN(131, "PLGPIO131"), \
278 PINCTRL_PIN(132, "PLGPIO132"), \ 278 PINCTRL_PIN(132, "PLGPIO132"), \
279 PINCTRL_PIN(133, "PLGPIO133"), \ 279 PINCTRL_PIN(133, "PLGPIO133"), \
280 PINCTRL_PIN(134, "PLGPIO134"), \ 280 PINCTRL_PIN(134, "PLGPIO134"), \
281 PINCTRL_PIN(135, "PLGPIO135"), \ 281 PINCTRL_PIN(135, "PLGPIO135"), \
282 PINCTRL_PIN(136, "PLGPIO136"), \ 282 PINCTRL_PIN(136, "PLGPIO136"), \
283 PINCTRL_PIN(137, "PLGPIO137"), \ 283 PINCTRL_PIN(137, "PLGPIO137"), \
284 PINCTRL_PIN(138, "PLGPIO138"), \ 284 PINCTRL_PIN(138, "PLGPIO138"), \
285 PINCTRL_PIN(139, "PLGPIO139"), \ 285 PINCTRL_PIN(139, "PLGPIO139"), \
286 PINCTRL_PIN(140, "PLGPIO140"), \ 286 PINCTRL_PIN(140, "PLGPIO140"), \
287 PINCTRL_PIN(141, "PLGPIO141"), \ 287 PINCTRL_PIN(141, "PLGPIO141"), \
288 PINCTRL_PIN(142, "PLGPIO142"), \ 288 PINCTRL_PIN(142, "PLGPIO142"), \
289 PINCTRL_PIN(143, "PLGPIO143"), \ 289 PINCTRL_PIN(143, "PLGPIO143"), \
290 PINCTRL_PIN(144, "PLGPIO144"), \ 290 PINCTRL_PIN(144, "PLGPIO144"), \
291 PINCTRL_PIN(145, "PLGPIO145"), \ 291 PINCTRL_PIN(145, "PLGPIO145"), \
292 PINCTRL_PIN(146, "PLGPIO146"), \ 292 PINCTRL_PIN(146, "PLGPIO146"), \
293 PINCTRL_PIN(147, "PLGPIO147"), \ 293 PINCTRL_PIN(147, "PLGPIO147"), \
294 PINCTRL_PIN(148, "PLGPIO148"), \ 294 PINCTRL_PIN(148, "PLGPIO148"), \
295 PINCTRL_PIN(149, "PLGPIO149"), \ 295 PINCTRL_PIN(149, "PLGPIO149"), \
296 PINCTRL_PIN(150, "PLGPIO150"), \ 296 PINCTRL_PIN(150, "PLGPIO150"), \
297 PINCTRL_PIN(151, "PLGPIO151"), \ 297 PINCTRL_PIN(151, "PLGPIO151"), \
298 PINCTRL_PIN(152, "PLGPIO152"), \ 298 PINCTRL_PIN(152, "PLGPIO152"), \
299 PINCTRL_PIN(153, "PLGPIO153"), \ 299 PINCTRL_PIN(153, "PLGPIO153"), \
300 PINCTRL_PIN(154, "PLGPIO154"), \ 300 PINCTRL_PIN(154, "PLGPIO154"), \
301 PINCTRL_PIN(155, "PLGPIO155"), \ 301 PINCTRL_PIN(155, "PLGPIO155"), \
302 PINCTRL_PIN(156, "PLGPIO156"), \ 302 PINCTRL_PIN(156, "PLGPIO156"), \
303 PINCTRL_PIN(157, "PLGPIO157"), \ 303 PINCTRL_PIN(157, "PLGPIO157"), \
304 PINCTRL_PIN(158, "PLGPIO158"), \ 304 PINCTRL_PIN(158, "PLGPIO158"), \
305 PINCTRL_PIN(159, "PLGPIO159"), \ 305 PINCTRL_PIN(159, "PLGPIO159"), \
306 PINCTRL_PIN(160, "PLGPIO160"), \ 306 PINCTRL_PIN(160, "PLGPIO160"), \
307 PINCTRL_PIN(161, "PLGPIO161"), \ 307 PINCTRL_PIN(161, "PLGPIO161"), \
308 PINCTRL_PIN(162, "PLGPIO162"), \ 308 PINCTRL_PIN(162, "PLGPIO162"), \
309 PINCTRL_PIN(163, "PLGPIO163"), \ 309 PINCTRL_PIN(163, "PLGPIO163"), \
310 PINCTRL_PIN(164, "PLGPIO164"), \ 310 PINCTRL_PIN(164, "PLGPIO164"), \
311 PINCTRL_PIN(165, "PLGPIO165"), \ 311 PINCTRL_PIN(165, "PLGPIO165"), \
312 PINCTRL_PIN(166, "PLGPIO166"), \ 312 PINCTRL_PIN(166, "PLGPIO166"), \
313 PINCTRL_PIN(167, "PLGPIO167"), \ 313 PINCTRL_PIN(167, "PLGPIO167"), \
314 PINCTRL_PIN(168, "PLGPIO168"), \ 314 PINCTRL_PIN(168, "PLGPIO168"), \
315 PINCTRL_PIN(169, "PLGPIO169"), \ 315 PINCTRL_PIN(169, "PLGPIO169"), \
316 PINCTRL_PIN(170, "PLGPIO170"), \ 316 PINCTRL_PIN(170, "PLGPIO170"), \
317 PINCTRL_PIN(171, "PLGPIO171"), \ 317 PINCTRL_PIN(171, "PLGPIO171"), \
318 PINCTRL_PIN(172, "PLGPIO172"), \ 318 PINCTRL_PIN(172, "PLGPIO172"), \
319 PINCTRL_PIN(173, "PLGPIO173"), \ 319 PINCTRL_PIN(173, "PLGPIO173"), \
320 PINCTRL_PIN(174, "PLGPIO174"), \ 320 PINCTRL_PIN(174, "PLGPIO174"), \
321 PINCTRL_PIN(175, "PLGPIO175"), \ 321 PINCTRL_PIN(175, "PLGPIO175"), \
322 PINCTRL_PIN(176, "PLGPIO176"), \ 322 PINCTRL_PIN(176, "PLGPIO176"), \
323 PINCTRL_PIN(177, "PLGPIO177"), \ 323 PINCTRL_PIN(177, "PLGPIO177"), \
324 PINCTRL_PIN(178, "PLGPIO178"), \ 324 PINCTRL_PIN(178, "PLGPIO178"), \
325 PINCTRL_PIN(179, "PLGPIO179"), \ 325 PINCTRL_PIN(179, "PLGPIO179"), \
326 PINCTRL_PIN(180, "PLGPIO180"), \ 326 PINCTRL_PIN(180, "PLGPIO180"), \
327 PINCTRL_PIN(181, "PLGPIO181"), \ 327 PINCTRL_PIN(181, "PLGPIO181"), \
328 PINCTRL_PIN(182, "PLGPIO182"), \ 328 PINCTRL_PIN(182, "PLGPIO182"), \
329 PINCTRL_PIN(183, "PLGPIO183"), \ 329 PINCTRL_PIN(183, "PLGPIO183"), \
330 PINCTRL_PIN(184, "PLGPIO184"), \ 330 PINCTRL_PIN(184, "PLGPIO184"), \
331 PINCTRL_PIN(185, "PLGPIO185"), \ 331 PINCTRL_PIN(185, "PLGPIO185"), \
332 PINCTRL_PIN(186, "PLGPIO186"), \ 332 PINCTRL_PIN(186, "PLGPIO186"), \
333 PINCTRL_PIN(187, "PLGPIO187"), \ 333 PINCTRL_PIN(187, "PLGPIO187"), \
334 PINCTRL_PIN(188, "PLGPIO188"), \ 334 PINCTRL_PIN(188, "PLGPIO188"), \
335 PINCTRL_PIN(189, "PLGPIO189"), \ 335 PINCTRL_PIN(189, "PLGPIO189"), \
336 PINCTRL_PIN(190, "PLGPIO190"), \ 336 PINCTRL_PIN(190, "PLGPIO190"), \
337 PINCTRL_PIN(191, "PLGPIO191"), \ 337 PINCTRL_PIN(191, "PLGPIO191"), \
338 PINCTRL_PIN(192, "PLGPIO192"), \ 338 PINCTRL_PIN(192, "PLGPIO192"), \
339 PINCTRL_PIN(193, "PLGPIO193"), \ 339 PINCTRL_PIN(193, "PLGPIO193"), \
340 PINCTRL_PIN(194, "PLGPIO194"), \ 340 PINCTRL_PIN(194, "PLGPIO194"), \
341 PINCTRL_PIN(195, "PLGPIO195"), \ 341 PINCTRL_PIN(195, "PLGPIO195"), \
342 PINCTRL_PIN(196, "PLGPIO196"), \ 342 PINCTRL_PIN(196, "PLGPIO196"), \
343 PINCTRL_PIN(197, "PLGPIO197"), \ 343 PINCTRL_PIN(197, "PLGPIO197"), \
344 PINCTRL_PIN(198, "PLGPIO198"), \ 344 PINCTRL_PIN(198, "PLGPIO198"), \
345 PINCTRL_PIN(199, "PLGPIO199"), \ 345 PINCTRL_PIN(199, "PLGPIO199"), \
346 PINCTRL_PIN(200, "PLGPIO200"), \ 346 PINCTRL_PIN(200, "PLGPIO200"), \
347 PINCTRL_PIN(201, "PLGPIO201"), \ 347 PINCTRL_PIN(201, "PLGPIO201"), \
348 PINCTRL_PIN(202, "PLGPIO202"), \ 348 PINCTRL_PIN(202, "PLGPIO202"), \
349 PINCTRL_PIN(203, "PLGPIO203"), \ 349 PINCTRL_PIN(203, "PLGPIO203"), \
350 PINCTRL_PIN(204, "PLGPIO204"), \ 350 PINCTRL_PIN(204, "PLGPIO204"), \
351 PINCTRL_PIN(205, "PLGPIO205"), \ 351 PINCTRL_PIN(205, "PLGPIO205"), \
352 PINCTRL_PIN(206, "PLGPIO206"), \ 352 PINCTRL_PIN(206, "PLGPIO206"), \
353 PINCTRL_PIN(207, "PLGPIO207"), \ 353 PINCTRL_PIN(207, "PLGPIO207"), \
354 PINCTRL_PIN(208, "PLGPIO208"), \ 354 PINCTRL_PIN(208, "PLGPIO208"), \
355 PINCTRL_PIN(209, "PLGPIO209"), \ 355 PINCTRL_PIN(209, "PLGPIO209"), \
356 PINCTRL_PIN(210, "PLGPIO210"), \ 356 PINCTRL_PIN(210, "PLGPIO210"), \
357 PINCTRL_PIN(211, "PLGPIO211"), \ 357 PINCTRL_PIN(211, "PLGPIO211"), \
358 PINCTRL_PIN(212, "PLGPIO212"), \ 358 PINCTRL_PIN(212, "PLGPIO212"), \
359 PINCTRL_PIN(213, "PLGPIO213"), \ 359 PINCTRL_PIN(213, "PLGPIO213"), \
360 PINCTRL_PIN(214, "PLGPIO214"), \ 360 PINCTRL_PIN(214, "PLGPIO214"), \
361 PINCTRL_PIN(215, "PLGPIO215"), \ 361 PINCTRL_PIN(215, "PLGPIO215"), \
362 PINCTRL_PIN(216, "PLGPIO216"), \ 362 PINCTRL_PIN(216, "PLGPIO216"), \
363 PINCTRL_PIN(217, "PLGPIO217"), \ 363 PINCTRL_PIN(217, "PLGPIO217"), \
364 PINCTRL_PIN(218, "PLGPIO218"), \ 364 PINCTRL_PIN(218, "PLGPIO218"), \
365 PINCTRL_PIN(219, "PLGPIO219"), \ 365 PINCTRL_PIN(219, "PLGPIO219"), \
366 PINCTRL_PIN(220, "PLGPIO220"), \ 366 PINCTRL_PIN(220, "PLGPIO220"), \
367 PINCTRL_PIN(221, "PLGPIO221"), \ 367 PINCTRL_PIN(221, "PLGPIO221"), \
368 PINCTRL_PIN(222, "PLGPIO222"), \ 368 PINCTRL_PIN(222, "PLGPIO222"), \
369 PINCTRL_PIN(223, "PLGPIO223"), \ 369 PINCTRL_PIN(223, "PLGPIO223"), \
370 PINCTRL_PIN(224, "PLGPIO224"), \ 370 PINCTRL_PIN(224, "PLGPIO224"), \
371 PINCTRL_PIN(225, "PLGPIO225"), \ 371 PINCTRL_PIN(225, "PLGPIO225"), \
372 PINCTRL_PIN(226, "PLGPIO226"), \ 372 PINCTRL_PIN(226, "PLGPIO226"), \
373 PINCTRL_PIN(227, "PLGPIO227"), \ 373 PINCTRL_PIN(227, "PLGPIO227"), \
374 PINCTRL_PIN(228, "PLGPIO228"), \ 374 PINCTRL_PIN(228, "PLGPIO228"), \
375 PINCTRL_PIN(229, "PLGPIO229"), \ 375 PINCTRL_PIN(229, "PLGPIO229"), \
376 PINCTRL_PIN(230, "PLGPIO230"), \ 376 PINCTRL_PIN(230, "PLGPIO230"), \
377 PINCTRL_PIN(231, "PLGPIO231"), \ 377 PINCTRL_PIN(231, "PLGPIO231"), \
378 PINCTRL_PIN(232, "PLGPIO232"), \ 378 PINCTRL_PIN(232, "PLGPIO232"), \
379 PINCTRL_PIN(233, "PLGPIO233"), \ 379 PINCTRL_PIN(233, "PLGPIO233"), \
380 PINCTRL_PIN(234, "PLGPIO234"), \ 380 PINCTRL_PIN(234, "PLGPIO234"), \
381 PINCTRL_PIN(235, "PLGPIO235"), \ 381 PINCTRL_PIN(235, "PLGPIO235"), \
382 PINCTRL_PIN(236, "PLGPIO236"), \ 382 PINCTRL_PIN(236, "PLGPIO236"), \
383 PINCTRL_PIN(237, "PLGPIO237"), \ 383 PINCTRL_PIN(237, "PLGPIO237"), \
384 PINCTRL_PIN(238, "PLGPIO238"), \ 384 PINCTRL_PIN(238, "PLGPIO238"), \
385 PINCTRL_PIN(239, "PLGPIO239"), \ 385 PINCTRL_PIN(239, "PLGPIO239"), \
386 PINCTRL_PIN(240, "PLGPIO240"), \ 386 PINCTRL_PIN(240, "PLGPIO240"), \
387 PINCTRL_PIN(241, "PLGPIO241"), \ 387 PINCTRL_PIN(241, "PLGPIO241"), \
388 PINCTRL_PIN(242, "PLGPIO242"), \ 388 PINCTRL_PIN(242, "PLGPIO242"), \
389 PINCTRL_PIN(243, "PLGPIO243"), \ 389 PINCTRL_PIN(243, "PLGPIO243"), \
390 PINCTRL_PIN(244, "PLGPIO244"), \ 390 PINCTRL_PIN(244, "PLGPIO244"), \
391 PINCTRL_PIN(245, "PLGPIO245") 391 PINCTRL_PIN(245, "PLGPIO245")
392 392
393 #endif /* __PINMUX_SPEAR_H__ */ 393 #endif /* __PINMUX_SPEAR_H__ */
394 394
drivers/pinctrl/spear/pinctrl-spear1310.c
1 /* 1 /*
2 * Driver for the ST Microelectronics SPEAr1310 pinmux 2 * Driver for the ST Microelectronics SPEAr1310 pinmux
3 * 3 *
4 * Copyright (C) 2012 ST Microelectronics 4 * Copyright (C) 2012 ST Microelectronics
5 * Viresh Kumar <viresh.linux@gmail.com> 5 * Viresh Kumar <viresh.linux@gmail.com>
6 * 6 *
7 * This file is licensed under the terms of the GNU General Public 7 * This file is licensed under the terms of the GNU General Public
8 * License version 2. This program is licensed "as is" without any 8 * License version 2. This program is licensed "as is" without any
9 * warranty of any kind, whether express or implied. 9 * warranty of any kind, whether express or implied.
10 */ 10 */
11 11
12 #include <linux/err.h> 12 #include <linux/err.h>
13 #include <linux/init.h> 13 #include <linux/init.h>
14 #include <linux/module.h> 14 #include <linux/module.h>
15 #include <linux/of_device.h> 15 #include <linux/of_device.h>
16 #include <linux/platform_device.h> 16 #include <linux/platform_device.h>
17 #include "pinctrl-spear.h" 17 #include "pinctrl-spear.h"
18 18
19 #define DRIVER_NAME "spear1310-pinmux" 19 #define DRIVER_NAME "spear1310-pinmux"
20 20
21 /* pins */ 21 /* pins */
22 static const struct pinctrl_pin_desc spear1310_pins[] = { 22 static const struct pinctrl_pin_desc spear1310_pins[] = {
23 SPEAR_PIN_0_TO_101, 23 SPEAR_PIN_0_TO_101,
24 SPEAR_PIN_102_TO_245, 24 SPEAR_PIN_102_TO_245,
25 }; 25 };
26 26
27 /* registers */ 27 /* registers */
28 #define PERIP_CFG 0x3B0 28 #define PERIP_CFG 0x3B0
29 #define MCIF_SEL_SHIFT 5 29 #define MCIF_SEL_SHIFT 5
30 #define MCIF_SEL_SD (0x1 << MCIF_SEL_SHIFT) 30 #define MCIF_SEL_SD (0x1 << MCIF_SEL_SHIFT)
31 #define MCIF_SEL_CF (0x2 << MCIF_SEL_SHIFT) 31 #define MCIF_SEL_CF (0x2 << MCIF_SEL_SHIFT)
32 #define MCIF_SEL_XD (0x3 << MCIF_SEL_SHIFT) 32 #define MCIF_SEL_XD (0x3 << MCIF_SEL_SHIFT)
33 #define MCIF_SEL_MASK (0x3 << MCIF_SEL_SHIFT) 33 #define MCIF_SEL_MASK (0x3 << MCIF_SEL_SHIFT)
34 34
35 #define PCIE_SATA_CFG 0x3A4 35 #define PCIE_SATA_CFG 0x3A4
36 #define PCIE_SATA2_SEL_PCIE (0 << 31) 36 #define PCIE_SATA2_SEL_PCIE (0 << 31)
37 #define PCIE_SATA1_SEL_PCIE (0 << 30) 37 #define PCIE_SATA1_SEL_PCIE (0 << 30)
38 #define PCIE_SATA0_SEL_PCIE (0 << 29) 38 #define PCIE_SATA0_SEL_PCIE (0 << 29)
39 #define PCIE_SATA2_SEL_SATA (1 << 31) 39 #define PCIE_SATA2_SEL_SATA (1 << 31)
40 #define PCIE_SATA1_SEL_SATA (1 << 30) 40 #define PCIE_SATA1_SEL_SATA (1 << 30)
41 #define PCIE_SATA0_SEL_SATA (1 << 29) 41 #define PCIE_SATA0_SEL_SATA (1 << 29)
42 #define SATA2_CFG_TX_CLK_EN (1 << 27) 42 #define SATA2_CFG_TX_CLK_EN (1 << 27)
43 #define SATA2_CFG_RX_CLK_EN (1 << 26) 43 #define SATA2_CFG_RX_CLK_EN (1 << 26)
44 #define SATA2_CFG_POWERUP_RESET (1 << 25) 44 #define SATA2_CFG_POWERUP_RESET (1 << 25)
45 #define SATA2_CFG_PM_CLK_EN (1 << 24) 45 #define SATA2_CFG_PM_CLK_EN (1 << 24)
46 #define SATA1_CFG_TX_CLK_EN (1 << 23) 46 #define SATA1_CFG_TX_CLK_EN (1 << 23)
47 #define SATA1_CFG_RX_CLK_EN (1 << 22) 47 #define SATA1_CFG_RX_CLK_EN (1 << 22)
48 #define SATA1_CFG_POWERUP_RESET (1 << 21) 48 #define SATA1_CFG_POWERUP_RESET (1 << 21)
49 #define SATA1_CFG_PM_CLK_EN (1 << 20) 49 #define SATA1_CFG_PM_CLK_EN (1 << 20)
50 #define SATA0_CFG_TX_CLK_EN (1 << 19) 50 #define SATA0_CFG_TX_CLK_EN (1 << 19)
51 #define SATA0_CFG_RX_CLK_EN (1 << 18) 51 #define SATA0_CFG_RX_CLK_EN (1 << 18)
52 #define SATA0_CFG_POWERUP_RESET (1 << 17) 52 #define SATA0_CFG_POWERUP_RESET (1 << 17)
53 #define SATA0_CFG_PM_CLK_EN (1 << 16) 53 #define SATA0_CFG_PM_CLK_EN (1 << 16)
54 #define PCIE2_CFG_DEVICE_PRESENT (1 << 11) 54 #define PCIE2_CFG_DEVICE_PRESENT (1 << 11)
55 #define PCIE2_CFG_POWERUP_RESET (1 << 10) 55 #define PCIE2_CFG_POWERUP_RESET (1 << 10)
56 #define PCIE2_CFG_CORE_CLK_EN (1 << 9) 56 #define PCIE2_CFG_CORE_CLK_EN (1 << 9)
57 #define PCIE2_CFG_AUX_CLK_EN (1 << 8) 57 #define PCIE2_CFG_AUX_CLK_EN (1 << 8)
58 #define PCIE1_CFG_DEVICE_PRESENT (1 << 7) 58 #define PCIE1_CFG_DEVICE_PRESENT (1 << 7)
59 #define PCIE1_CFG_POWERUP_RESET (1 << 6) 59 #define PCIE1_CFG_POWERUP_RESET (1 << 6)
60 #define PCIE1_CFG_CORE_CLK_EN (1 << 5) 60 #define PCIE1_CFG_CORE_CLK_EN (1 << 5)
61 #define PCIE1_CFG_AUX_CLK_EN (1 << 4) 61 #define PCIE1_CFG_AUX_CLK_EN (1 << 4)
62 #define PCIE0_CFG_DEVICE_PRESENT (1 << 3) 62 #define PCIE0_CFG_DEVICE_PRESENT (1 << 3)
63 #define PCIE0_CFG_POWERUP_RESET (1 << 2) 63 #define PCIE0_CFG_POWERUP_RESET (1 << 2)
64 #define PCIE0_CFG_CORE_CLK_EN (1 << 1) 64 #define PCIE0_CFG_CORE_CLK_EN (1 << 1)
65 #define PCIE0_CFG_AUX_CLK_EN (1 << 0) 65 #define PCIE0_CFG_AUX_CLK_EN (1 << 0)
66 66
67 #define PAD_FUNCTION_EN_0 0x650 67 #define PAD_FUNCTION_EN_0 0x650
68 #define PMX_UART0_MASK (1 << 1) 68 #define PMX_UART0_MASK (1 << 1)
69 #define PMX_I2C0_MASK (1 << 2) 69 #define PMX_I2C0_MASK (1 << 2)
70 #define PMX_I2S0_MASK (1 << 3) 70 #define PMX_I2S0_MASK (1 << 3)
71 #define PMX_SSP0_MASK (1 << 4) 71 #define PMX_SSP0_MASK (1 << 4)
72 #define PMX_CLCD1_MASK (1 << 5) 72 #define PMX_CLCD1_MASK (1 << 5)
73 #define PMX_EGPIO00_MASK (1 << 6) 73 #define PMX_EGPIO00_MASK (1 << 6)
74 #define PMX_EGPIO01_MASK (1 << 7) 74 #define PMX_EGPIO01_MASK (1 << 7)
75 #define PMX_EGPIO02_MASK (1 << 8) 75 #define PMX_EGPIO02_MASK (1 << 8)
76 #define PMX_EGPIO03_MASK (1 << 9) 76 #define PMX_EGPIO03_MASK (1 << 9)
77 #define PMX_EGPIO04_MASK (1 << 10) 77 #define PMX_EGPIO04_MASK (1 << 10)
78 #define PMX_EGPIO05_MASK (1 << 11) 78 #define PMX_EGPIO05_MASK (1 << 11)
79 #define PMX_EGPIO06_MASK (1 << 12) 79 #define PMX_EGPIO06_MASK (1 << 12)
80 #define PMX_EGPIO07_MASK (1 << 13) 80 #define PMX_EGPIO07_MASK (1 << 13)
81 #define PMX_EGPIO08_MASK (1 << 14) 81 #define PMX_EGPIO08_MASK (1 << 14)
82 #define PMX_EGPIO09_MASK (1 << 15) 82 #define PMX_EGPIO09_MASK (1 << 15)
83 #define PMX_SMI_MASK (1 << 16) 83 #define PMX_SMI_MASK (1 << 16)
84 #define PMX_NAND8_MASK (1 << 17) 84 #define PMX_NAND8_MASK (1 << 17)
85 #define PMX_GMIICLK_MASK (1 << 18) 85 #define PMX_GMIICLK_MASK (1 << 18)
86 #define PMX_GMIICOL_CRS_XFERER_MIITXCLK_MASK (1 << 19) 86 #define PMX_GMIICOL_CRS_XFERER_MIITXCLK_MASK (1 << 19)
87 #define PMX_RXCLK_RDV_TXEN_D03_MASK (1 << 20) 87 #define PMX_RXCLK_RDV_TXEN_D03_MASK (1 << 20)
88 #define PMX_GMIID47_MASK (1 << 21) 88 #define PMX_GMIID47_MASK (1 << 21)
89 #define PMX_MDC_MDIO_MASK (1 << 22) 89 #define PMX_MDC_MDIO_MASK (1 << 22)
90 #define PMX_MCI_DATA8_15_MASK (1 << 23) 90 #define PMX_MCI_DATA8_15_MASK (1 << 23)
91 #define PMX_NFAD23_MASK (1 << 24) 91 #define PMX_NFAD23_MASK (1 << 24)
92 #define PMX_NFAD24_MASK (1 << 25) 92 #define PMX_NFAD24_MASK (1 << 25)
93 #define PMX_NFAD25_MASK (1 << 26) 93 #define PMX_NFAD25_MASK (1 << 26)
94 #define PMX_NFCE3_MASK (1 << 27) 94 #define PMX_NFCE3_MASK (1 << 27)
95 #define PMX_NFWPRT3_MASK (1 << 28) 95 #define PMX_NFWPRT3_MASK (1 << 28)
96 #define PMX_NFRSTPWDWN0_MASK (1 << 29) 96 #define PMX_NFRSTPWDWN0_MASK (1 << 29)
97 #define PMX_NFRSTPWDWN1_MASK (1 << 30) 97 #define PMX_NFRSTPWDWN1_MASK (1 << 30)
98 #define PMX_NFRSTPWDWN2_MASK (1 << 31) 98 #define PMX_NFRSTPWDWN2_MASK (1 << 31)
99 99
100 #define PAD_FUNCTION_EN_1 0x654 100 #define PAD_FUNCTION_EN_1 0x654
101 #define PMX_NFRSTPWDWN3_MASK (1 << 0) 101 #define PMX_NFRSTPWDWN3_MASK (1 << 0)
102 #define PMX_SMINCS2_MASK (1 << 1) 102 #define PMX_SMINCS2_MASK (1 << 1)
103 #define PMX_SMINCS3_MASK (1 << 2) 103 #define PMX_SMINCS3_MASK (1 << 2)
104 #define PMX_CLCD2_MASK (1 << 3) 104 #define PMX_CLCD2_MASK (1 << 3)
105 #define PMX_KBD_ROWCOL68_MASK (1 << 4) 105 #define PMX_KBD_ROWCOL68_MASK (1 << 4)
106 #define PMX_EGPIO10_MASK (1 << 5) 106 #define PMX_EGPIO10_MASK (1 << 5)
107 #define PMX_EGPIO11_MASK (1 << 6) 107 #define PMX_EGPIO11_MASK (1 << 6)
108 #define PMX_EGPIO12_MASK (1 << 7) 108 #define PMX_EGPIO12_MASK (1 << 7)
109 #define PMX_EGPIO13_MASK (1 << 8) 109 #define PMX_EGPIO13_MASK (1 << 8)
110 #define PMX_EGPIO14_MASK (1 << 9) 110 #define PMX_EGPIO14_MASK (1 << 9)
111 #define PMX_EGPIO15_MASK (1 << 10) 111 #define PMX_EGPIO15_MASK (1 << 10)
112 #define PMX_UART0_MODEM_MASK (1 << 11) 112 #define PMX_UART0_MODEM_MASK (1 << 11)
113 #define PMX_GPT0_TMR0_MASK (1 << 12) 113 #define PMX_GPT0_TMR0_MASK (1 << 12)
114 #define PMX_GPT0_TMR1_MASK (1 << 13) 114 #define PMX_GPT0_TMR1_MASK (1 << 13)
115 #define PMX_GPT1_TMR0_MASK (1 << 14) 115 #define PMX_GPT1_TMR0_MASK (1 << 14)
116 #define PMX_GPT1_TMR1_MASK (1 << 15) 116 #define PMX_GPT1_TMR1_MASK (1 << 15)
117 #define PMX_I2S1_MASK (1 << 16) 117 #define PMX_I2S1_MASK (1 << 16)
118 #define PMX_KBD_ROWCOL25_MASK (1 << 17) 118 #define PMX_KBD_ROWCOL25_MASK (1 << 17)
119 #define PMX_NFIO8_15_MASK (1 << 18) 119 #define PMX_NFIO8_15_MASK (1 << 18)
120 #define PMX_KBD_COL1_MASK (1 << 19) 120 #define PMX_KBD_COL1_MASK (1 << 19)
121 #define PMX_NFCE1_MASK (1 << 20) 121 #define PMX_NFCE1_MASK (1 << 20)
122 #define PMX_KBD_COL0_MASK (1 << 21) 122 #define PMX_KBD_COL0_MASK (1 << 21)
123 #define PMX_NFCE2_MASK (1 << 22) 123 #define PMX_NFCE2_MASK (1 << 22)
124 #define PMX_KBD_ROW1_MASK (1 << 23) 124 #define PMX_KBD_ROW1_MASK (1 << 23)
125 #define PMX_NFWPRT1_MASK (1 << 24) 125 #define PMX_NFWPRT1_MASK (1 << 24)
126 #define PMX_KBD_ROW0_MASK (1 << 25) 126 #define PMX_KBD_ROW0_MASK (1 << 25)
127 #define PMX_NFWPRT2_MASK (1 << 26) 127 #define PMX_NFWPRT2_MASK (1 << 26)
128 #define PMX_MCIDATA0_MASK (1 << 27) 128 #define PMX_MCIDATA0_MASK (1 << 27)
129 #define PMX_MCIDATA1_MASK (1 << 28) 129 #define PMX_MCIDATA1_MASK (1 << 28)
130 #define PMX_MCIDATA2_MASK (1 << 29) 130 #define PMX_MCIDATA2_MASK (1 << 29)
131 #define PMX_MCIDATA3_MASK (1 << 30) 131 #define PMX_MCIDATA3_MASK (1 << 30)
132 #define PMX_MCIDATA4_MASK (1 << 31) 132 #define PMX_MCIDATA4_MASK (1 << 31)
133 133
134 #define PAD_FUNCTION_EN_2 0x658 134 #define PAD_FUNCTION_EN_2 0x658
135 #define PMX_MCIDATA5_MASK (1 << 0) 135 #define PMX_MCIDATA5_MASK (1 << 0)
136 #define PMX_MCIDATA6_MASK (1 << 1) 136 #define PMX_MCIDATA6_MASK (1 << 1)
137 #define PMX_MCIDATA7_MASK (1 << 2) 137 #define PMX_MCIDATA7_MASK (1 << 2)
138 #define PMX_MCIDATA1SD_MASK (1 << 3) 138 #define PMX_MCIDATA1SD_MASK (1 << 3)
139 #define PMX_MCIDATA2SD_MASK (1 << 4) 139 #define PMX_MCIDATA2SD_MASK (1 << 4)
140 #define PMX_MCIDATA3SD_MASK (1 << 5) 140 #define PMX_MCIDATA3SD_MASK (1 << 5)
141 #define PMX_MCIADDR0ALE_MASK (1 << 6) 141 #define PMX_MCIADDR0ALE_MASK (1 << 6)
142 #define PMX_MCIADDR1CLECLK_MASK (1 << 7) 142 #define PMX_MCIADDR1CLECLK_MASK (1 << 7)
143 #define PMX_MCIADDR2_MASK (1 << 8) 143 #define PMX_MCIADDR2_MASK (1 << 8)
144 #define PMX_MCICECF_MASK (1 << 9) 144 #define PMX_MCICECF_MASK (1 << 9)
145 #define PMX_MCICEXD_MASK (1 << 10) 145 #define PMX_MCICEXD_MASK (1 << 10)
146 #define PMX_MCICESDMMC_MASK (1 << 11) 146 #define PMX_MCICESDMMC_MASK (1 << 11)
147 #define PMX_MCICDCF1_MASK (1 << 12) 147 #define PMX_MCICDCF1_MASK (1 << 12)
148 #define PMX_MCICDCF2_MASK (1 << 13) 148 #define PMX_MCICDCF2_MASK (1 << 13)
149 #define PMX_MCICDXD_MASK (1 << 14) 149 #define PMX_MCICDXD_MASK (1 << 14)
150 #define PMX_MCICDSDMMC_MASK (1 << 15) 150 #define PMX_MCICDSDMMC_MASK (1 << 15)
151 #define PMX_MCIDATADIR_MASK (1 << 16) 151 #define PMX_MCIDATADIR_MASK (1 << 16)
152 #define PMX_MCIDMARQWP_MASK (1 << 17) 152 #define PMX_MCIDMARQWP_MASK (1 << 17)
153 #define PMX_MCIIORDRE_MASK (1 << 18) 153 #define PMX_MCIIORDRE_MASK (1 << 18)
154 #define PMX_MCIIOWRWE_MASK (1 << 19) 154 #define PMX_MCIIOWRWE_MASK (1 << 19)
155 #define PMX_MCIRESETCF_MASK (1 << 20) 155 #define PMX_MCIRESETCF_MASK (1 << 20)
156 #define PMX_MCICS0CE_MASK (1 << 21) 156 #define PMX_MCICS0CE_MASK (1 << 21)
157 #define PMX_MCICFINTR_MASK (1 << 22) 157 #define PMX_MCICFINTR_MASK (1 << 22)
158 #define PMX_MCIIORDY_MASK (1 << 23) 158 #define PMX_MCIIORDY_MASK (1 << 23)
159 #define PMX_MCICS1_MASK (1 << 24) 159 #define PMX_MCICS1_MASK (1 << 24)
160 #define PMX_MCIDMAACK_MASK (1 << 25) 160 #define PMX_MCIDMAACK_MASK (1 << 25)
161 #define PMX_MCISDCMD_MASK (1 << 26) 161 #define PMX_MCISDCMD_MASK (1 << 26)
162 #define PMX_MCILEDS_MASK (1 << 27) 162 #define PMX_MCILEDS_MASK (1 << 27)
163 #define PMX_TOUCH_XY_MASK (1 << 28) 163 #define PMX_TOUCH_XY_MASK (1 << 28)
164 #define PMX_SSP0_CS0_MASK (1 << 29) 164 #define PMX_SSP0_CS0_MASK (1 << 29)
165 #define PMX_SSP0_CS1_2_MASK (1 << 30) 165 #define PMX_SSP0_CS1_2_MASK (1 << 30)
166 166
167 #define PAD_DIRECTION_SEL_0 0x65C 167 #define PAD_DIRECTION_SEL_0 0x65C
168 #define PAD_DIRECTION_SEL_1 0x660 168 #define PAD_DIRECTION_SEL_1 0x660
169 #define PAD_DIRECTION_SEL_2 0x664 169 #define PAD_DIRECTION_SEL_2 0x664
170 170
171 /* combined macros */ 171 /* combined macros */
172 #define PMX_GMII_MASK (PMX_GMIICLK_MASK | \ 172 #define PMX_GMII_MASK (PMX_GMIICLK_MASK | \
173 PMX_GMIICOL_CRS_XFERER_MIITXCLK_MASK | \ 173 PMX_GMIICOL_CRS_XFERER_MIITXCLK_MASK | \
174 PMX_RXCLK_RDV_TXEN_D03_MASK | \ 174 PMX_RXCLK_RDV_TXEN_D03_MASK | \
175 PMX_GMIID47_MASK | PMX_MDC_MDIO_MASK) 175 PMX_GMIID47_MASK | PMX_MDC_MDIO_MASK)
176 176
177 #define PMX_EGPIO_0_GRP_MASK (PMX_EGPIO00_MASK | PMX_EGPIO01_MASK | \ 177 #define PMX_EGPIO_0_GRP_MASK (PMX_EGPIO00_MASK | PMX_EGPIO01_MASK | \
178 PMX_EGPIO02_MASK | \ 178 PMX_EGPIO02_MASK | \
179 PMX_EGPIO03_MASK | PMX_EGPIO04_MASK | \ 179 PMX_EGPIO03_MASK | PMX_EGPIO04_MASK | \
180 PMX_EGPIO05_MASK | PMX_EGPIO06_MASK | \ 180 PMX_EGPIO05_MASK | PMX_EGPIO06_MASK | \
181 PMX_EGPIO07_MASK | PMX_EGPIO08_MASK | \ 181 PMX_EGPIO07_MASK | PMX_EGPIO08_MASK | \
182 PMX_EGPIO09_MASK) 182 PMX_EGPIO09_MASK)
183 #define PMX_EGPIO_1_GRP_MASK (PMX_EGPIO10_MASK | PMX_EGPIO11_MASK | \ 183 #define PMX_EGPIO_1_GRP_MASK (PMX_EGPIO10_MASK | PMX_EGPIO11_MASK | \
184 PMX_EGPIO12_MASK | PMX_EGPIO13_MASK | \ 184 PMX_EGPIO12_MASK | PMX_EGPIO13_MASK | \
185 PMX_EGPIO14_MASK | PMX_EGPIO15_MASK) 185 PMX_EGPIO14_MASK | PMX_EGPIO15_MASK)
186 186
187 #define PMX_KEYBOARD_6X6_MASK (PMX_KBD_ROW0_MASK | PMX_KBD_ROW1_MASK | \ 187 #define PMX_KEYBOARD_6X6_MASK (PMX_KBD_ROW0_MASK | PMX_KBD_ROW1_MASK | \
188 PMX_KBD_ROWCOL25_MASK | PMX_KBD_COL0_MASK | \ 188 PMX_KBD_ROWCOL25_MASK | PMX_KBD_COL0_MASK | \
189 PMX_KBD_COL1_MASK) 189 PMX_KBD_COL1_MASK)
190 190
191 #define PMX_NAND8BIT_0_MASK (PMX_NAND8_MASK | PMX_NFAD23_MASK | \ 191 #define PMX_NAND8BIT_0_MASK (PMX_NAND8_MASK | PMX_NFAD23_MASK | \
192 PMX_NFAD24_MASK | PMX_NFAD25_MASK | \ 192 PMX_NFAD24_MASK | PMX_NFAD25_MASK | \
193 PMX_NFWPRT3_MASK | PMX_NFRSTPWDWN0_MASK | \ 193 PMX_NFWPRT3_MASK | PMX_NFRSTPWDWN0_MASK | \
194 PMX_NFRSTPWDWN1_MASK | PMX_NFRSTPWDWN2_MASK | \ 194 PMX_NFRSTPWDWN1_MASK | PMX_NFRSTPWDWN2_MASK | \
195 PMX_NFCE3_MASK) 195 PMX_NFCE3_MASK)
196 #define PMX_NAND8BIT_1_MASK PMX_NFRSTPWDWN3_MASK 196 #define PMX_NAND8BIT_1_MASK PMX_NFRSTPWDWN3_MASK
197 197
198 #define PMX_NAND16BIT_1_MASK (PMX_KBD_ROWCOL25_MASK | PMX_NFIO8_15_MASK) 198 #define PMX_NAND16BIT_1_MASK (PMX_KBD_ROWCOL25_MASK | PMX_NFIO8_15_MASK)
199 #define PMX_NAND_4CHIPS_MASK (PMX_NFCE1_MASK | PMX_NFCE2_MASK | \ 199 #define PMX_NAND_4CHIPS_MASK (PMX_NFCE1_MASK | PMX_NFCE2_MASK | \
200 PMX_NFWPRT1_MASK | PMX_NFWPRT2_MASK | \ 200 PMX_NFWPRT1_MASK | PMX_NFWPRT2_MASK | \
201 PMX_KBD_ROW0_MASK | PMX_KBD_ROW1_MASK | \ 201 PMX_KBD_ROW0_MASK | PMX_KBD_ROW1_MASK | \
202 PMX_KBD_COL0_MASK | PMX_KBD_COL1_MASK) 202 PMX_KBD_COL0_MASK | PMX_KBD_COL1_MASK)
203 203
204 #define PMX_MCIFALL_1_MASK 0xF8000000 204 #define PMX_MCIFALL_1_MASK 0xF8000000
205 #define PMX_MCIFALL_2_MASK 0x0FFFFFFF 205 #define PMX_MCIFALL_2_MASK 0x0FFFFFFF
206 206
207 #define PMX_PCI_REG1_MASK (PMX_SMINCS2_MASK | PMX_SMINCS3_MASK | \ 207 #define PMX_PCI_REG1_MASK (PMX_SMINCS2_MASK | PMX_SMINCS3_MASK | \
208 PMX_CLCD2_MASK | PMX_KBD_ROWCOL68_MASK | \ 208 PMX_CLCD2_MASK | PMX_KBD_ROWCOL68_MASK | \
209 PMX_EGPIO_1_GRP_MASK | PMX_GPT0_TMR0_MASK | \ 209 PMX_EGPIO_1_GRP_MASK | PMX_GPT0_TMR0_MASK | \
210 PMX_GPT0_TMR1_MASK | PMX_GPT1_TMR0_MASK | \ 210 PMX_GPT0_TMR1_MASK | PMX_GPT1_TMR0_MASK | \
211 PMX_GPT1_TMR1_MASK | PMX_I2S1_MASK | \ 211 PMX_GPT1_TMR1_MASK | PMX_I2S1_MASK | \
212 PMX_NFCE2_MASK) 212 PMX_NFCE2_MASK)
213 #define PMX_PCI_REG2_MASK (PMX_TOUCH_XY_MASK | PMX_SSP0_CS0_MASK | \ 213 #define PMX_PCI_REG2_MASK (PMX_TOUCH_XY_MASK | PMX_SSP0_CS0_MASK | \
214 PMX_SSP0_CS1_2_MASK) 214 PMX_SSP0_CS1_2_MASK)
215 215
216 #define PMX_SMII_0_1_2_MASK (PMX_CLCD2_MASK | PMX_KBD_ROWCOL68_MASK) 216 #define PMX_SMII_0_1_2_MASK (PMX_CLCD2_MASK | PMX_KBD_ROWCOL68_MASK)
217 #define PMX_RGMII_REG0_MASK (PMX_MCI_DATA8_15_MASK | \ 217 #define PMX_RGMII_REG0_MASK (PMX_MCI_DATA8_15_MASK | \
218 PMX_GMIICOL_CRS_XFERER_MIITXCLK_MASK | \ 218 PMX_GMIICOL_CRS_XFERER_MIITXCLK_MASK | \
219 PMX_GMIID47_MASK) 219 PMX_GMIID47_MASK)
220 #define PMX_RGMII_REG1_MASK (PMX_KBD_ROWCOL68_MASK | PMX_EGPIO_1_GRP_MASK |\ 220 #define PMX_RGMII_REG1_MASK (PMX_KBD_ROWCOL68_MASK | PMX_EGPIO_1_GRP_MASK |\
221 PMX_KBD_ROW1_MASK | PMX_NFWPRT1_MASK | \ 221 PMX_KBD_ROW1_MASK | PMX_NFWPRT1_MASK | \
222 PMX_KBD_ROW0_MASK | PMX_NFWPRT2_MASK) 222 PMX_KBD_ROW0_MASK | PMX_NFWPRT2_MASK)
223 #define PMX_RGMII_REG2_MASK (PMX_TOUCH_XY_MASK | PMX_SSP0_CS0_MASK | \ 223 #define PMX_RGMII_REG2_MASK (PMX_TOUCH_XY_MASK | PMX_SSP0_CS0_MASK | \
224 PMX_SSP0_CS1_2_MASK) 224 PMX_SSP0_CS1_2_MASK)
225 225
226 #define PCIE_CFG_VAL(x) (PCIE_SATA##x##_SEL_PCIE | \ 226 #define PCIE_CFG_VAL(x) (PCIE_SATA##x##_SEL_PCIE | \
227 PCIE##x##_CFG_AUX_CLK_EN | \ 227 PCIE##x##_CFG_AUX_CLK_EN | \
228 PCIE##x##_CFG_CORE_CLK_EN | \ 228 PCIE##x##_CFG_CORE_CLK_EN | \
229 PCIE##x##_CFG_POWERUP_RESET | \ 229 PCIE##x##_CFG_POWERUP_RESET | \
230 PCIE##x##_CFG_DEVICE_PRESENT) 230 PCIE##x##_CFG_DEVICE_PRESENT)
231 #define SATA_CFG_VAL(x) (PCIE_SATA##x##_SEL_SATA | \ 231 #define SATA_CFG_VAL(x) (PCIE_SATA##x##_SEL_SATA | \
232 SATA##x##_CFG_PM_CLK_EN | \ 232 SATA##x##_CFG_PM_CLK_EN | \
233 SATA##x##_CFG_POWERUP_RESET | \ 233 SATA##x##_CFG_POWERUP_RESET | \
234 SATA##x##_CFG_RX_CLK_EN | \ 234 SATA##x##_CFG_RX_CLK_EN | \
235 SATA##x##_CFG_TX_CLK_EN) 235 SATA##x##_CFG_TX_CLK_EN)
236 236
237 /* Pad multiplexing for i2c0 device */ 237 /* Pad multiplexing for i2c0 device */
238 static const unsigned i2c0_pins[] = { 102, 103 }; 238 static const unsigned i2c0_pins[] = { 102, 103 };
239 static struct spear_muxreg i2c0_muxreg[] = { 239 static struct spear_muxreg i2c0_muxreg[] = {
240 { 240 {
241 .reg = PAD_FUNCTION_EN_0, 241 .reg = PAD_FUNCTION_EN_0,
242 .mask = PMX_I2C0_MASK, 242 .mask = PMX_I2C0_MASK,
243 .val = PMX_I2C0_MASK, 243 .val = PMX_I2C0_MASK,
244 }, { 244 }, {
245 .reg = PAD_DIRECTION_SEL_0, 245 .reg = PAD_DIRECTION_SEL_0,
246 .mask = PMX_I2C0_MASK, 246 .mask = PMX_I2C0_MASK,
247 .val = PMX_I2C0_MASK, 247 .val = PMX_I2C0_MASK,
248 }, 248 },
249 }; 249 };
250 250
251 static struct spear_modemux i2c0_modemux[] = { 251 static struct spear_modemux i2c0_modemux[] = {
252 { 252 {
253 .muxregs = i2c0_muxreg, 253 .muxregs = i2c0_muxreg,
254 .nmuxregs = ARRAY_SIZE(i2c0_muxreg), 254 .nmuxregs = ARRAY_SIZE(i2c0_muxreg),
255 }, 255 },
256 }; 256 };
257 257
258 static struct spear_pingroup i2c0_pingroup = { 258 static struct spear_pingroup i2c0_pingroup = {
259 .name = "i2c0_grp", 259 .name = "i2c0_grp",
260 .pins = i2c0_pins, 260 .pins = i2c0_pins,
261 .npins = ARRAY_SIZE(i2c0_pins), 261 .npins = ARRAY_SIZE(i2c0_pins),
262 .modemuxs = i2c0_modemux, 262 .modemuxs = i2c0_modemux,
263 .nmodemuxs = ARRAY_SIZE(i2c0_modemux), 263 .nmodemuxs = ARRAY_SIZE(i2c0_modemux),
264 }; 264 };
265 265
266 static const char *const i2c0_grps[] = { "i2c0_grp" }; 266 static const char *const i2c0_grps[] = { "i2c0_grp" };
267 static struct spear_function i2c0_function = { 267 static struct spear_function i2c0_function = {
268 .name = "i2c0", 268 .name = "i2c0",
269 .groups = i2c0_grps, 269 .groups = i2c0_grps,
270 .ngroups = ARRAY_SIZE(i2c0_grps), 270 .ngroups = ARRAY_SIZE(i2c0_grps),
271 }; 271 };
272 272
273 /* Pad multiplexing for ssp0 device */ 273 /* Pad multiplexing for ssp0 device */
274 static const unsigned ssp0_pins[] = { 109, 110, 111, 112 }; 274 static const unsigned ssp0_pins[] = { 109, 110, 111, 112 };
275 static struct spear_muxreg ssp0_muxreg[] = { 275 static struct spear_muxreg ssp0_muxreg[] = {
276 { 276 {
277 .reg = PAD_FUNCTION_EN_0, 277 .reg = PAD_FUNCTION_EN_0,
278 .mask = PMX_SSP0_MASK, 278 .mask = PMX_SSP0_MASK,
279 .val = PMX_SSP0_MASK, 279 .val = PMX_SSP0_MASK,
280 }, { 280 }, {
281 .reg = PAD_DIRECTION_SEL_0, 281 .reg = PAD_DIRECTION_SEL_0,
282 .mask = PMX_SSP0_MASK, 282 .mask = PMX_SSP0_MASK,
283 .val = PMX_SSP0_MASK, 283 .val = PMX_SSP0_MASK,
284 }, 284 },
285 }; 285 };
286 286
287 static struct spear_modemux ssp0_modemux[] = { 287 static struct spear_modemux ssp0_modemux[] = {
288 { 288 {
289 .muxregs = ssp0_muxreg, 289 .muxregs = ssp0_muxreg,
290 .nmuxregs = ARRAY_SIZE(ssp0_muxreg), 290 .nmuxregs = ARRAY_SIZE(ssp0_muxreg),
291 }, 291 },
292 }; 292 };
293 293
294 static struct spear_pingroup ssp0_pingroup = { 294 static struct spear_pingroup ssp0_pingroup = {
295 .name = "ssp0_grp", 295 .name = "ssp0_grp",
296 .pins = ssp0_pins, 296 .pins = ssp0_pins,
297 .npins = ARRAY_SIZE(ssp0_pins), 297 .npins = ARRAY_SIZE(ssp0_pins),
298 .modemuxs = ssp0_modemux, 298 .modemuxs = ssp0_modemux,
299 .nmodemuxs = ARRAY_SIZE(ssp0_modemux), 299 .nmodemuxs = ARRAY_SIZE(ssp0_modemux),
300 }; 300 };
301 301
302 /* Pad multiplexing for ssp0_cs0 device */ 302 /* Pad multiplexing for ssp0_cs0 device */
303 static const unsigned ssp0_cs0_pins[] = { 96 }; 303 static const unsigned ssp0_cs0_pins[] = { 96 };
304 static struct spear_muxreg ssp0_cs0_muxreg[] = { 304 static struct spear_muxreg ssp0_cs0_muxreg[] = {
305 { 305 {
306 .reg = PAD_FUNCTION_EN_2, 306 .reg = PAD_FUNCTION_EN_2,
307 .mask = PMX_SSP0_CS0_MASK, 307 .mask = PMX_SSP0_CS0_MASK,
308 .val = PMX_SSP0_CS0_MASK, 308 .val = PMX_SSP0_CS0_MASK,
309 }, { 309 }, {
310 .reg = PAD_DIRECTION_SEL_2, 310 .reg = PAD_DIRECTION_SEL_2,
311 .mask = PMX_SSP0_CS0_MASK, 311 .mask = PMX_SSP0_CS0_MASK,
312 .val = PMX_SSP0_CS0_MASK, 312 .val = PMX_SSP0_CS0_MASK,
313 }, 313 },
314 }; 314 };
315 315
316 static struct spear_modemux ssp0_cs0_modemux[] = { 316 static struct spear_modemux ssp0_cs0_modemux[] = {
317 { 317 {
318 .muxregs = ssp0_cs0_muxreg, 318 .muxregs = ssp0_cs0_muxreg,
319 .nmuxregs = ARRAY_SIZE(ssp0_cs0_muxreg), 319 .nmuxregs = ARRAY_SIZE(ssp0_cs0_muxreg),
320 }, 320 },
321 }; 321 };
322 322
323 static struct spear_pingroup ssp0_cs0_pingroup = { 323 static struct spear_pingroup ssp0_cs0_pingroup = {
324 .name = "ssp0_cs0_grp", 324 .name = "ssp0_cs0_grp",
325 .pins = ssp0_cs0_pins, 325 .pins = ssp0_cs0_pins,
326 .npins = ARRAY_SIZE(ssp0_cs0_pins), 326 .npins = ARRAY_SIZE(ssp0_cs0_pins),
327 .modemuxs = ssp0_cs0_modemux, 327 .modemuxs = ssp0_cs0_modemux,
328 .nmodemuxs = ARRAY_SIZE(ssp0_cs0_modemux), 328 .nmodemuxs = ARRAY_SIZE(ssp0_cs0_modemux),
329 }; 329 };
330 330
331 /* ssp0_cs1_2 device */ 331 /* ssp0_cs1_2 device */
332 static const unsigned ssp0_cs1_2_pins[] = { 94, 95 }; 332 static const unsigned ssp0_cs1_2_pins[] = { 94, 95 };
333 static struct spear_muxreg ssp0_cs1_2_muxreg[] = { 333 static struct spear_muxreg ssp0_cs1_2_muxreg[] = {
334 { 334 {
335 .reg = PAD_FUNCTION_EN_2, 335 .reg = PAD_FUNCTION_EN_2,
336 .mask = PMX_SSP0_CS1_2_MASK, 336 .mask = PMX_SSP0_CS1_2_MASK,
337 .val = PMX_SSP0_CS1_2_MASK, 337 .val = PMX_SSP0_CS1_2_MASK,
338 }, { 338 }, {
339 .reg = PAD_DIRECTION_SEL_2, 339 .reg = PAD_DIRECTION_SEL_2,
340 .mask = PMX_SSP0_CS1_2_MASK, 340 .mask = PMX_SSP0_CS1_2_MASK,
341 .val = PMX_SSP0_CS1_2_MASK, 341 .val = PMX_SSP0_CS1_2_MASK,
342 }, 342 },
343 }; 343 };
344 344
345 static struct spear_modemux ssp0_cs1_2_modemux[] = { 345 static struct spear_modemux ssp0_cs1_2_modemux[] = {
346 { 346 {
347 .muxregs = ssp0_cs1_2_muxreg, 347 .muxregs = ssp0_cs1_2_muxreg,
348 .nmuxregs = ARRAY_SIZE(ssp0_cs1_2_muxreg), 348 .nmuxregs = ARRAY_SIZE(ssp0_cs1_2_muxreg),
349 }, 349 },
350 }; 350 };
351 351
352 static struct spear_pingroup ssp0_cs1_2_pingroup = { 352 static struct spear_pingroup ssp0_cs1_2_pingroup = {
353 .name = "ssp0_cs1_2_grp", 353 .name = "ssp0_cs1_2_grp",
354 .pins = ssp0_cs1_2_pins, 354 .pins = ssp0_cs1_2_pins,
355 .npins = ARRAY_SIZE(ssp0_cs1_2_pins), 355 .npins = ARRAY_SIZE(ssp0_cs1_2_pins),
356 .modemuxs = ssp0_cs1_2_modemux, 356 .modemuxs = ssp0_cs1_2_modemux,
357 .nmodemuxs = ARRAY_SIZE(ssp0_cs1_2_modemux), 357 .nmodemuxs = ARRAY_SIZE(ssp0_cs1_2_modemux),
358 }; 358 };
359 359
360 static const char *const ssp0_grps[] = { "ssp0_grp", "ssp0_cs0_grp", 360 static const char *const ssp0_grps[] = { "ssp0_grp", "ssp0_cs0_grp",
361 "ssp0_cs1_2_grp" }; 361 "ssp0_cs1_2_grp" };
362 static struct spear_function ssp0_function = { 362 static struct spear_function ssp0_function = {
363 .name = "ssp0", 363 .name = "ssp0",
364 .groups = ssp0_grps, 364 .groups = ssp0_grps,
365 .ngroups = ARRAY_SIZE(ssp0_grps), 365 .ngroups = ARRAY_SIZE(ssp0_grps),
366 }; 366 };
367 367
368 /* Pad multiplexing for i2s0 device */ 368 /* Pad multiplexing for i2s0 device */
369 static const unsigned i2s0_pins[] = { 104, 105, 106, 107, 108 }; 369 static const unsigned i2s0_pins[] = { 104, 105, 106, 107, 108 };
370 static struct spear_muxreg i2s0_muxreg[] = { 370 static struct spear_muxreg i2s0_muxreg[] = {
371 { 371 {
372 .reg = PAD_FUNCTION_EN_0, 372 .reg = PAD_FUNCTION_EN_0,
373 .mask = PMX_I2S0_MASK, 373 .mask = PMX_I2S0_MASK,
374 .val = PMX_I2S0_MASK, 374 .val = PMX_I2S0_MASK,
375 }, { 375 }, {
376 .reg = PAD_DIRECTION_SEL_0, 376 .reg = PAD_DIRECTION_SEL_0,
377 .mask = PMX_I2S0_MASK, 377 .mask = PMX_I2S0_MASK,
378 .val = PMX_I2S0_MASK, 378 .val = PMX_I2S0_MASK,
379 }, 379 },
380 }; 380 };
381 381
382 static struct spear_modemux i2s0_modemux[] = { 382 static struct spear_modemux i2s0_modemux[] = {
383 { 383 {
384 .muxregs = i2s0_muxreg, 384 .muxregs = i2s0_muxreg,
385 .nmuxregs = ARRAY_SIZE(i2s0_muxreg), 385 .nmuxregs = ARRAY_SIZE(i2s0_muxreg),
386 }, 386 },
387 }; 387 };
388 388
389 static struct spear_pingroup i2s0_pingroup = { 389 static struct spear_pingroup i2s0_pingroup = {
390 .name = "i2s0_grp", 390 .name = "i2s0_grp",
391 .pins = i2s0_pins, 391 .pins = i2s0_pins,
392 .npins = ARRAY_SIZE(i2s0_pins), 392 .npins = ARRAY_SIZE(i2s0_pins),
393 .modemuxs = i2s0_modemux, 393 .modemuxs = i2s0_modemux,
394 .nmodemuxs = ARRAY_SIZE(i2s0_modemux), 394 .nmodemuxs = ARRAY_SIZE(i2s0_modemux),
395 }; 395 };
396 396
397 static const char *const i2s0_grps[] = { "i2s0_grp" }; 397 static const char *const i2s0_grps[] = { "i2s0_grp" };
398 static struct spear_function i2s0_function = { 398 static struct spear_function i2s0_function = {
399 .name = "i2s0", 399 .name = "i2s0",
400 .groups = i2s0_grps, 400 .groups = i2s0_grps,
401 .ngroups = ARRAY_SIZE(i2s0_grps), 401 .ngroups = ARRAY_SIZE(i2s0_grps),
402 }; 402 };
403 403
404 /* Pad multiplexing for i2s1 device */ 404 /* Pad multiplexing for i2s1 device */
405 static const unsigned i2s1_pins[] = { 0, 1, 2, 3 }; 405 static const unsigned i2s1_pins[] = { 0, 1, 2, 3 };
406 static struct spear_muxreg i2s1_muxreg[] = { 406 static struct spear_muxreg i2s1_muxreg[] = {
407 { 407 {
408 .reg = PAD_FUNCTION_EN_1, 408 .reg = PAD_FUNCTION_EN_1,
409 .mask = PMX_I2S1_MASK, 409 .mask = PMX_I2S1_MASK,
410 .val = PMX_I2S1_MASK, 410 .val = PMX_I2S1_MASK,
411 }, { 411 }, {
412 .reg = PAD_DIRECTION_SEL_1, 412 .reg = PAD_DIRECTION_SEL_1,
413 .mask = PMX_I2S1_MASK, 413 .mask = PMX_I2S1_MASK,
414 .val = PMX_I2S1_MASK, 414 .val = PMX_I2S1_MASK,
415 }, 415 },
416 }; 416 };
417 417
418 static struct spear_modemux i2s1_modemux[] = { 418 static struct spear_modemux i2s1_modemux[] = {
419 { 419 {
420 .muxregs = i2s1_muxreg, 420 .muxregs = i2s1_muxreg,
421 .nmuxregs = ARRAY_SIZE(i2s1_muxreg), 421 .nmuxregs = ARRAY_SIZE(i2s1_muxreg),
422 }, 422 },
423 }; 423 };
424 424
425 static struct spear_pingroup i2s1_pingroup = { 425 static struct spear_pingroup i2s1_pingroup = {
426 .name = "i2s1_grp", 426 .name = "i2s1_grp",
427 .pins = i2s1_pins, 427 .pins = i2s1_pins,
428 .npins = ARRAY_SIZE(i2s1_pins), 428 .npins = ARRAY_SIZE(i2s1_pins),
429 .modemuxs = i2s1_modemux, 429 .modemuxs = i2s1_modemux,
430 .nmodemuxs = ARRAY_SIZE(i2s1_modemux), 430 .nmodemuxs = ARRAY_SIZE(i2s1_modemux),
431 }; 431 };
432 432
433 static const char *const i2s1_grps[] = { "i2s1_grp" }; 433 static const char *const i2s1_grps[] = { "i2s1_grp" };
434 static struct spear_function i2s1_function = { 434 static struct spear_function i2s1_function = {
435 .name = "i2s1", 435 .name = "i2s1",
436 .groups = i2s1_grps, 436 .groups = i2s1_grps,
437 .ngroups = ARRAY_SIZE(i2s1_grps), 437 .ngroups = ARRAY_SIZE(i2s1_grps),
438 }; 438 };
439 439
440 /* Pad multiplexing for clcd device */ 440 /* Pad multiplexing for clcd device */
441 static const unsigned clcd_pins[] = { 113, 114, 115, 116, 117, 118, 119, 120, 441 static const unsigned clcd_pins[] = { 113, 114, 115, 116, 117, 118, 119, 120,
442 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 442 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
443 135, 136, 137, 138, 139, 140, 141, 142 }; 443 135, 136, 137, 138, 139, 140, 141, 142 };
444 static struct spear_muxreg clcd_muxreg[] = { 444 static struct spear_muxreg clcd_muxreg[] = {
445 { 445 {
446 .reg = PAD_FUNCTION_EN_0, 446 .reg = PAD_FUNCTION_EN_0,
447 .mask = PMX_CLCD1_MASK, 447 .mask = PMX_CLCD1_MASK,
448 .val = PMX_CLCD1_MASK, 448 .val = PMX_CLCD1_MASK,
449 }, { 449 }, {
450 .reg = PAD_DIRECTION_SEL_0, 450 .reg = PAD_DIRECTION_SEL_0,
451 .mask = PMX_CLCD1_MASK, 451 .mask = PMX_CLCD1_MASK,
452 .val = PMX_CLCD1_MASK, 452 .val = PMX_CLCD1_MASK,
453 }, 453 },
454 }; 454 };
455 455
456 static struct spear_modemux clcd_modemux[] = { 456 static struct spear_modemux clcd_modemux[] = {
457 { 457 {
458 .muxregs = clcd_muxreg, 458 .muxregs = clcd_muxreg,
459 .nmuxregs = ARRAY_SIZE(clcd_muxreg), 459 .nmuxregs = ARRAY_SIZE(clcd_muxreg),
460 }, 460 },
461 }; 461 };
462 462
463 static struct spear_pingroup clcd_pingroup = { 463 static struct spear_pingroup clcd_pingroup = {
464 .name = "clcd_grp", 464 .name = "clcd_grp",
465 .pins = clcd_pins, 465 .pins = clcd_pins,
466 .npins = ARRAY_SIZE(clcd_pins), 466 .npins = ARRAY_SIZE(clcd_pins),
467 .modemuxs = clcd_modemux, 467 .modemuxs = clcd_modemux,
468 .nmodemuxs = ARRAY_SIZE(clcd_modemux), 468 .nmodemuxs = ARRAY_SIZE(clcd_modemux),
469 }; 469 };
470 470
471 static const unsigned clcd_high_res_pins[] = { 30, 31, 32, 33, 34, 35, 36, 37, 471 static const unsigned clcd_high_res_pins[] = { 30, 31, 32, 33, 34, 35, 36, 37,
472 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53 }; 472 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53 };
473 static struct spear_muxreg clcd_high_res_muxreg[] = { 473 static struct spear_muxreg clcd_high_res_muxreg[] = {
474 { 474 {
475 .reg = PAD_FUNCTION_EN_1, 475 .reg = PAD_FUNCTION_EN_1,
476 .mask = PMX_CLCD2_MASK, 476 .mask = PMX_CLCD2_MASK,
477 .val = PMX_CLCD2_MASK, 477 .val = PMX_CLCD2_MASK,
478 }, { 478 }, {
479 .reg = PAD_DIRECTION_SEL_1, 479 .reg = PAD_DIRECTION_SEL_1,
480 .mask = PMX_CLCD2_MASK, 480 .mask = PMX_CLCD2_MASK,
481 .val = PMX_CLCD2_MASK, 481 .val = PMX_CLCD2_MASK,
482 }, 482 },
483 }; 483 };
484 484
485 static struct spear_modemux clcd_high_res_modemux[] = { 485 static struct spear_modemux clcd_high_res_modemux[] = {
486 { 486 {
487 .muxregs = clcd_high_res_muxreg, 487 .muxregs = clcd_high_res_muxreg,
488 .nmuxregs = ARRAY_SIZE(clcd_high_res_muxreg), 488 .nmuxregs = ARRAY_SIZE(clcd_high_res_muxreg),
489 }, 489 },
490 }; 490 };
491 491
492 static struct spear_pingroup clcd_high_res_pingroup = { 492 static struct spear_pingroup clcd_high_res_pingroup = {
493 .name = "clcd_high_res_grp", 493 .name = "clcd_high_res_grp",
494 .pins = clcd_high_res_pins, 494 .pins = clcd_high_res_pins,
495 .npins = ARRAY_SIZE(clcd_high_res_pins), 495 .npins = ARRAY_SIZE(clcd_high_res_pins),
496 .modemuxs = clcd_high_res_modemux, 496 .modemuxs = clcd_high_res_modemux,
497 .nmodemuxs = ARRAY_SIZE(clcd_high_res_modemux), 497 .nmodemuxs = ARRAY_SIZE(clcd_high_res_modemux),
498 }; 498 };
499 499
500 static const char *const clcd_grps[] = { "clcd_grp", "clcd_high_res_grp" }; 500 static const char *const clcd_grps[] = { "clcd_grp", "clcd_high_res_grp" };
501 static struct spear_function clcd_function = { 501 static struct spear_function clcd_function = {
502 .name = "clcd", 502 .name = "clcd",
503 .groups = clcd_grps, 503 .groups = clcd_grps,
504 .ngroups = ARRAY_SIZE(clcd_grps), 504 .ngroups = ARRAY_SIZE(clcd_grps),
505 }; 505 };
506 506
507 static const unsigned arm_gpio_pins[] = { 18, 19, 20, 21, 22, 23, 143, 144, 145, 507 static const unsigned arm_gpio_pins[] = { 18, 19, 20, 21, 22, 23, 143, 144, 145,
508 146, 147, 148, 149, 150, 151, 152 }; 508 146, 147, 148, 149, 150, 151, 152 };
509 static struct spear_muxreg arm_gpio_muxreg[] = { 509 static struct spear_muxreg arm_gpio_muxreg[] = {
510 { 510 {
511 .reg = PAD_FUNCTION_EN_0, 511 .reg = PAD_FUNCTION_EN_0,
512 .mask = PMX_EGPIO_0_GRP_MASK, 512 .mask = PMX_EGPIO_0_GRP_MASK,
513 .val = PMX_EGPIO_0_GRP_MASK, 513 .val = PMX_EGPIO_0_GRP_MASK,
514 }, { 514 }, {
515 .reg = PAD_FUNCTION_EN_1, 515 .reg = PAD_FUNCTION_EN_1,
516 .mask = PMX_EGPIO_1_GRP_MASK, 516 .mask = PMX_EGPIO_1_GRP_MASK,
517 .val = PMX_EGPIO_1_GRP_MASK, 517 .val = PMX_EGPIO_1_GRP_MASK,
518 }, { 518 }, {
519 .reg = PAD_DIRECTION_SEL_0, 519 .reg = PAD_DIRECTION_SEL_0,
520 .mask = PMX_EGPIO_0_GRP_MASK, 520 .mask = PMX_EGPIO_0_GRP_MASK,
521 .val = PMX_EGPIO_0_GRP_MASK, 521 .val = PMX_EGPIO_0_GRP_MASK,
522 }, { 522 }, {
523 .reg = PAD_DIRECTION_SEL_1, 523 .reg = PAD_DIRECTION_SEL_1,
524 .mask = PMX_EGPIO_1_GRP_MASK, 524 .mask = PMX_EGPIO_1_GRP_MASK,
525 .val = PMX_EGPIO_1_GRP_MASK, 525 .val = PMX_EGPIO_1_GRP_MASK,
526 }, 526 },
527 }; 527 };
528 528
529 static struct spear_modemux arm_gpio_modemux[] = { 529 static struct spear_modemux arm_gpio_modemux[] = {
530 { 530 {
531 .muxregs = arm_gpio_muxreg, 531 .muxregs = arm_gpio_muxreg,
532 .nmuxregs = ARRAY_SIZE(arm_gpio_muxreg), 532 .nmuxregs = ARRAY_SIZE(arm_gpio_muxreg),
533 }, 533 },
534 }; 534 };
535 535
536 static struct spear_pingroup arm_gpio_pingroup = { 536 static struct spear_pingroup arm_gpio_pingroup = {
537 .name = "arm_gpio_grp", 537 .name = "arm_gpio_grp",
538 .pins = arm_gpio_pins, 538 .pins = arm_gpio_pins,
539 .npins = ARRAY_SIZE(arm_gpio_pins), 539 .npins = ARRAY_SIZE(arm_gpio_pins),
540 .modemuxs = arm_gpio_modemux, 540 .modemuxs = arm_gpio_modemux,
541 .nmodemuxs = ARRAY_SIZE(arm_gpio_modemux), 541 .nmodemuxs = ARRAY_SIZE(arm_gpio_modemux),
542 }; 542 };
543 543
544 static const char *const arm_gpio_grps[] = { "arm_gpio_grp" }; 544 static const char *const arm_gpio_grps[] = { "arm_gpio_grp" };
545 static struct spear_function arm_gpio_function = { 545 static struct spear_function arm_gpio_function = {
546 .name = "arm_gpio", 546 .name = "arm_gpio",
547 .groups = arm_gpio_grps, 547 .groups = arm_gpio_grps,
548 .ngroups = ARRAY_SIZE(arm_gpio_grps), 548 .ngroups = ARRAY_SIZE(arm_gpio_grps),
549 }; 549 };
550 550
551 /* Pad multiplexing for smi 2 chips device */ 551 /* Pad multiplexing for smi 2 chips device */
552 static const unsigned smi_2_chips_pins[] = { 153, 154, 155, 156, 157 }; 552 static const unsigned smi_2_chips_pins[] = { 153, 154, 155, 156, 157 };
553 static struct spear_muxreg smi_2_chips_muxreg[] = { 553 static struct spear_muxreg smi_2_chips_muxreg[] = {
554 { 554 {
555 .reg = PAD_FUNCTION_EN_0, 555 .reg = PAD_FUNCTION_EN_0,
556 .mask = PMX_SMI_MASK, 556 .mask = PMX_SMI_MASK,
557 .val = PMX_SMI_MASK, 557 .val = PMX_SMI_MASK,
558 }, { 558 }, {
559 .reg = PAD_DIRECTION_SEL_0, 559 .reg = PAD_DIRECTION_SEL_0,
560 .mask = PMX_SMI_MASK, 560 .mask = PMX_SMI_MASK,
561 .val = PMX_SMI_MASK, 561 .val = PMX_SMI_MASK,
562 }, 562 },
563 }; 563 };
564 564
565 static struct spear_modemux smi_2_chips_modemux[] = { 565 static struct spear_modemux smi_2_chips_modemux[] = {
566 { 566 {
567 .muxregs = smi_2_chips_muxreg, 567 .muxregs = smi_2_chips_muxreg,
568 .nmuxregs = ARRAY_SIZE(smi_2_chips_muxreg), 568 .nmuxregs = ARRAY_SIZE(smi_2_chips_muxreg),
569 }, 569 },
570 }; 570 };
571 571
572 static struct spear_pingroup smi_2_chips_pingroup = { 572 static struct spear_pingroup smi_2_chips_pingroup = {
573 .name = "smi_2_chips_grp", 573 .name = "smi_2_chips_grp",
574 .pins = smi_2_chips_pins, 574 .pins = smi_2_chips_pins,
575 .npins = ARRAY_SIZE(smi_2_chips_pins), 575 .npins = ARRAY_SIZE(smi_2_chips_pins),
576 .modemuxs = smi_2_chips_modemux, 576 .modemuxs = smi_2_chips_modemux,
577 .nmodemuxs = ARRAY_SIZE(smi_2_chips_modemux), 577 .nmodemuxs = ARRAY_SIZE(smi_2_chips_modemux),
578 }; 578 };
579 579
580 static const unsigned smi_4_chips_pins[] = { 54, 55 }; 580 static const unsigned smi_4_chips_pins[] = { 54, 55 };
581 static struct spear_muxreg smi_4_chips_muxreg[] = { 581 static struct spear_muxreg smi_4_chips_muxreg[] = {
582 { 582 {
583 .reg = PAD_FUNCTION_EN_0, 583 .reg = PAD_FUNCTION_EN_0,
584 .mask = PMX_SMI_MASK, 584 .mask = PMX_SMI_MASK,
585 .val = PMX_SMI_MASK, 585 .val = PMX_SMI_MASK,
586 }, { 586 }, {
587 .reg = PAD_FUNCTION_EN_1, 587 .reg = PAD_FUNCTION_EN_1,
588 .mask = PMX_SMINCS2_MASK | PMX_SMINCS3_MASK, 588 .mask = PMX_SMINCS2_MASK | PMX_SMINCS3_MASK,
589 .val = PMX_SMINCS2_MASK | PMX_SMINCS3_MASK, 589 .val = PMX_SMINCS2_MASK | PMX_SMINCS3_MASK,
590 }, { 590 }, {
591 .reg = PAD_DIRECTION_SEL_0, 591 .reg = PAD_DIRECTION_SEL_0,
592 .mask = PMX_SMI_MASK, 592 .mask = PMX_SMI_MASK,
593 .val = PMX_SMI_MASK, 593 .val = PMX_SMI_MASK,
594 }, { 594 }, {
595 .reg = PAD_DIRECTION_SEL_1, 595 .reg = PAD_DIRECTION_SEL_1,
596 .mask = PMX_SMINCS2_MASK | PMX_SMINCS3_MASK, 596 .mask = PMX_SMINCS2_MASK | PMX_SMINCS3_MASK,
597 .val = PMX_SMINCS2_MASK | PMX_SMINCS3_MASK, 597 .val = PMX_SMINCS2_MASK | PMX_SMINCS3_MASK,
598 }, 598 },
599 }; 599 };
600 600
601 static struct spear_modemux smi_4_chips_modemux[] = { 601 static struct spear_modemux smi_4_chips_modemux[] = {
602 { 602 {
603 .muxregs = smi_4_chips_muxreg, 603 .muxregs = smi_4_chips_muxreg,
604 .nmuxregs = ARRAY_SIZE(smi_4_chips_muxreg), 604 .nmuxregs = ARRAY_SIZE(smi_4_chips_muxreg),
605 }, 605 },
606 }; 606 };
607 607
608 static struct spear_pingroup smi_4_chips_pingroup = { 608 static struct spear_pingroup smi_4_chips_pingroup = {
609 .name = "smi_4_chips_grp", 609 .name = "smi_4_chips_grp",
610 .pins = smi_4_chips_pins, 610 .pins = smi_4_chips_pins,
611 .npins = ARRAY_SIZE(smi_4_chips_pins), 611 .npins = ARRAY_SIZE(smi_4_chips_pins),
612 .modemuxs = smi_4_chips_modemux, 612 .modemuxs = smi_4_chips_modemux,
613 .nmodemuxs = ARRAY_SIZE(smi_4_chips_modemux), 613 .nmodemuxs = ARRAY_SIZE(smi_4_chips_modemux),
614 }; 614 };
615 615
616 static const char *const smi_grps[] = { "smi_2_chips_grp", "smi_4_chips_grp" }; 616 static const char *const smi_grps[] = { "smi_2_chips_grp", "smi_4_chips_grp" };
617 static struct spear_function smi_function = { 617 static struct spear_function smi_function = {
618 .name = "smi", 618 .name = "smi",
619 .groups = smi_grps, 619 .groups = smi_grps,
620 .ngroups = ARRAY_SIZE(smi_grps), 620 .ngroups = ARRAY_SIZE(smi_grps),
621 }; 621 };
622 622
623 /* Pad multiplexing for gmii device */ 623 /* Pad multiplexing for gmii device */
624 static const unsigned gmii_pins[] = { 173, 174, 175, 176, 177, 178, 179, 180, 624 static const unsigned gmii_pins[] = { 173, 174, 175, 176, 177, 178, 179, 180,
625 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 625 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
626 195, 196, 197, 198, 199, 200 }; 626 195, 196, 197, 198, 199, 200 };
627 static struct spear_muxreg gmii_muxreg[] = { 627 static struct spear_muxreg gmii_muxreg[] = {
628 { 628 {
629 .reg = PAD_FUNCTION_EN_0, 629 .reg = PAD_FUNCTION_EN_0,
630 .mask = PMX_GMII_MASK, 630 .mask = PMX_GMII_MASK,
631 .val = PMX_GMII_MASK, 631 .val = PMX_GMII_MASK,
632 }, { 632 }, {
633 .reg = PAD_DIRECTION_SEL_0, 633 .reg = PAD_DIRECTION_SEL_0,
634 .mask = PMX_GMII_MASK, 634 .mask = PMX_GMII_MASK,
635 .val = PMX_GMII_MASK, 635 .val = PMX_GMII_MASK,
636 }, 636 },
637 }; 637 };
638 638
639 static struct spear_modemux gmii_modemux[] = { 639 static struct spear_modemux gmii_modemux[] = {
640 { 640 {
641 .muxregs = gmii_muxreg, 641 .muxregs = gmii_muxreg,
642 .nmuxregs = ARRAY_SIZE(gmii_muxreg), 642 .nmuxregs = ARRAY_SIZE(gmii_muxreg),
643 }, 643 },
644 }; 644 };
645 645
646 static struct spear_pingroup gmii_pingroup = { 646 static struct spear_pingroup gmii_pingroup = {
647 .name = "gmii_grp", 647 .name = "gmii_grp",
648 .pins = gmii_pins, 648 .pins = gmii_pins,
649 .npins = ARRAY_SIZE(gmii_pins), 649 .npins = ARRAY_SIZE(gmii_pins),
650 .modemuxs = gmii_modemux, 650 .modemuxs = gmii_modemux,
651 .nmodemuxs = ARRAY_SIZE(gmii_modemux), 651 .nmodemuxs = ARRAY_SIZE(gmii_modemux),
652 }; 652 };
653 653
654 static const char *const gmii_grps[] = { "gmii_grp" }; 654 static const char *const gmii_grps[] = { "gmii_grp" };
655 static struct spear_function gmii_function = { 655 static struct spear_function gmii_function = {
656 .name = "gmii", 656 .name = "gmii",
657 .groups = gmii_grps, 657 .groups = gmii_grps,
658 .ngroups = ARRAY_SIZE(gmii_grps), 658 .ngroups = ARRAY_SIZE(gmii_grps),
659 }; 659 };
660 660
661 /* Pad multiplexing for rgmii device */ 661 /* Pad multiplexing for rgmii device */
662 static const unsigned rgmii_pins[] = { 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 662 static const unsigned rgmii_pins[] = { 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
663 28, 29, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 175, 663 28, 29, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 175,
664 180, 181, 182, 183, 185, 188, 193, 194, 195, 196, 197, 198, 211, 212 }; 664 180, 181, 182, 183, 185, 188, 193, 194, 195, 196, 197, 198, 211, 212 };
665 static struct spear_muxreg rgmii_muxreg[] = { 665 static struct spear_muxreg rgmii_muxreg[] = {
666 { 666 {
667 .reg = PAD_FUNCTION_EN_0, 667 .reg = PAD_FUNCTION_EN_0,
668 .mask = PMX_RGMII_REG0_MASK, 668 .mask = PMX_RGMII_REG0_MASK,
669 .val = 0, 669 .val = 0,
670 }, { 670 }, {
671 .reg = PAD_FUNCTION_EN_1, 671 .reg = PAD_FUNCTION_EN_1,
672 .mask = PMX_RGMII_REG1_MASK, 672 .mask = PMX_RGMII_REG1_MASK,
673 .val = 0, 673 .val = 0,
674 }, { 674 }, {
675 .reg = PAD_FUNCTION_EN_2, 675 .reg = PAD_FUNCTION_EN_2,
676 .mask = PMX_RGMII_REG2_MASK, 676 .mask = PMX_RGMII_REG2_MASK,
677 .val = 0, 677 .val = 0,
678 }, { 678 }, {
679 .reg = PAD_DIRECTION_SEL_0, 679 .reg = PAD_DIRECTION_SEL_0,
680 .mask = PMX_RGMII_REG0_MASK, 680 .mask = PMX_RGMII_REG0_MASK,
681 .val = PMX_RGMII_REG0_MASK, 681 .val = PMX_RGMII_REG0_MASK,
682 }, { 682 }, {
683 .reg = PAD_DIRECTION_SEL_1, 683 .reg = PAD_DIRECTION_SEL_1,
684 .mask = PMX_RGMII_REG1_MASK, 684 .mask = PMX_RGMII_REG1_MASK,
685 .val = PMX_RGMII_REG1_MASK, 685 .val = PMX_RGMII_REG1_MASK,
686 }, { 686 }, {
687 .reg = PAD_DIRECTION_SEL_2, 687 .reg = PAD_DIRECTION_SEL_2,
688 .mask = PMX_RGMII_REG2_MASK, 688 .mask = PMX_RGMII_REG2_MASK,
689 .val = PMX_RGMII_REG2_MASK, 689 .val = PMX_RGMII_REG2_MASK,
690 }, 690 },
691 }; 691 };
692 692
693 static struct spear_modemux rgmii_modemux[] = { 693 static struct spear_modemux rgmii_modemux[] = {
694 { 694 {
695 .muxregs = rgmii_muxreg, 695 .muxregs = rgmii_muxreg,
696 .nmuxregs = ARRAY_SIZE(rgmii_muxreg), 696 .nmuxregs = ARRAY_SIZE(rgmii_muxreg),
697 }, 697 },
698 }; 698 };
699 699
700 static struct spear_pingroup rgmii_pingroup = { 700 static struct spear_pingroup rgmii_pingroup = {
701 .name = "rgmii_grp", 701 .name = "rgmii_grp",
702 .pins = rgmii_pins, 702 .pins = rgmii_pins,
703 .npins = ARRAY_SIZE(rgmii_pins), 703 .npins = ARRAY_SIZE(rgmii_pins),
704 .modemuxs = rgmii_modemux, 704 .modemuxs = rgmii_modemux,
705 .nmodemuxs = ARRAY_SIZE(rgmii_modemux), 705 .nmodemuxs = ARRAY_SIZE(rgmii_modemux),
706 }; 706 };
707 707
708 static const char *const rgmii_grps[] = { "rgmii_grp" }; 708 static const char *const rgmii_grps[] = { "rgmii_grp" };
709 static struct spear_function rgmii_function = { 709 static struct spear_function rgmii_function = {
710 .name = "rgmii", 710 .name = "rgmii",
711 .groups = rgmii_grps, 711 .groups = rgmii_grps,
712 .ngroups = ARRAY_SIZE(rgmii_grps), 712 .ngroups = ARRAY_SIZE(rgmii_grps),
713 }; 713 };
714 714
715 /* Pad multiplexing for smii_0_1_2 device */ 715 /* Pad multiplexing for smii_0_1_2 device */
716 static const unsigned smii_0_1_2_pins[] = { 24, 25, 26, 27, 28, 29, 30, 31, 32, 716 static const unsigned smii_0_1_2_pins[] = { 24, 25, 26, 27, 28, 29, 30, 31, 32,
717 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 717 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
718 51, 52, 53, 54, 55 }; 718 51, 52, 53, 54, 55 };
719 static struct spear_muxreg smii_0_1_2_muxreg[] = { 719 static struct spear_muxreg smii_0_1_2_muxreg[] = {
720 { 720 {
721 .reg = PAD_FUNCTION_EN_1, 721 .reg = PAD_FUNCTION_EN_1,
722 .mask = PMX_SMII_0_1_2_MASK, 722 .mask = PMX_SMII_0_1_2_MASK,
723 .val = 0, 723 .val = 0,
724 }, { 724 }, {
725 .reg = PAD_DIRECTION_SEL_1, 725 .reg = PAD_DIRECTION_SEL_1,
726 .mask = PMX_SMII_0_1_2_MASK, 726 .mask = PMX_SMII_0_1_2_MASK,
727 .val = PMX_SMII_0_1_2_MASK, 727 .val = PMX_SMII_0_1_2_MASK,
728 }, 728 },
729 }; 729 };
730 730
731 static struct spear_modemux smii_0_1_2_modemux[] = { 731 static struct spear_modemux smii_0_1_2_modemux[] = {
732 { 732 {
733 .muxregs = smii_0_1_2_muxreg, 733 .muxregs = smii_0_1_2_muxreg,
734 .nmuxregs = ARRAY_SIZE(smii_0_1_2_muxreg), 734 .nmuxregs = ARRAY_SIZE(smii_0_1_2_muxreg),
735 }, 735 },
736 }; 736 };
737 737
738 static struct spear_pingroup smii_0_1_2_pingroup = { 738 static struct spear_pingroup smii_0_1_2_pingroup = {
739 .name = "smii_0_1_2_grp", 739 .name = "smii_0_1_2_grp",
740 .pins = smii_0_1_2_pins, 740 .pins = smii_0_1_2_pins,
741 .npins = ARRAY_SIZE(smii_0_1_2_pins), 741 .npins = ARRAY_SIZE(smii_0_1_2_pins),
742 .modemuxs = smii_0_1_2_modemux, 742 .modemuxs = smii_0_1_2_modemux,
743 .nmodemuxs = ARRAY_SIZE(smii_0_1_2_modemux), 743 .nmodemuxs = ARRAY_SIZE(smii_0_1_2_modemux),
744 }; 744 };
745 745
746 static const char *const smii_0_1_2_grps[] = { "smii_0_1_2_grp" }; 746 static const char *const smii_0_1_2_grps[] = { "smii_0_1_2_grp" };
747 static struct spear_function smii_0_1_2_function = { 747 static struct spear_function smii_0_1_2_function = {
748 .name = "smii_0_1_2", 748 .name = "smii_0_1_2",
749 .groups = smii_0_1_2_grps, 749 .groups = smii_0_1_2_grps,
750 .ngroups = ARRAY_SIZE(smii_0_1_2_grps), 750 .ngroups = ARRAY_SIZE(smii_0_1_2_grps),
751 }; 751 };
752 752
753 /* Pad multiplexing for ras_mii_txclk device */ 753 /* Pad multiplexing for ras_mii_txclk device */
754 static const unsigned ras_mii_txclk_pins[] = { 98, 99 }; 754 static const unsigned ras_mii_txclk_pins[] = { 98, 99 };
755 static struct spear_muxreg ras_mii_txclk_muxreg[] = { 755 static struct spear_muxreg ras_mii_txclk_muxreg[] = {
756 { 756 {
757 .reg = PAD_FUNCTION_EN_1, 757 .reg = PAD_FUNCTION_EN_1,
758 .mask = PMX_NFCE2_MASK, 758 .mask = PMX_NFCE2_MASK,
759 .val = 0, 759 .val = 0,
760 }, { 760 }, {
761 .reg = PAD_DIRECTION_SEL_1, 761 .reg = PAD_DIRECTION_SEL_1,
762 .mask = PMX_NFCE2_MASK, 762 .mask = PMX_NFCE2_MASK,
763 .val = PMX_NFCE2_MASK, 763 .val = PMX_NFCE2_MASK,
764 }, 764 },
765 }; 765 };
766 766
767 static struct spear_modemux ras_mii_txclk_modemux[] = { 767 static struct spear_modemux ras_mii_txclk_modemux[] = {
768 { 768 {
769 .muxregs = ras_mii_txclk_muxreg, 769 .muxregs = ras_mii_txclk_muxreg,
770 .nmuxregs = ARRAY_SIZE(ras_mii_txclk_muxreg), 770 .nmuxregs = ARRAY_SIZE(ras_mii_txclk_muxreg),
771 }, 771 },
772 }; 772 };
773 773
774 static struct spear_pingroup ras_mii_txclk_pingroup = { 774 static struct spear_pingroup ras_mii_txclk_pingroup = {
775 .name = "ras_mii_txclk_grp", 775 .name = "ras_mii_txclk_grp",
776 .pins = ras_mii_txclk_pins, 776 .pins = ras_mii_txclk_pins,
777 .npins = ARRAY_SIZE(ras_mii_txclk_pins), 777 .npins = ARRAY_SIZE(ras_mii_txclk_pins),
778 .modemuxs = ras_mii_txclk_modemux, 778 .modemuxs = ras_mii_txclk_modemux,
779 .nmodemuxs = ARRAY_SIZE(ras_mii_txclk_modemux), 779 .nmodemuxs = ARRAY_SIZE(ras_mii_txclk_modemux),
780 }; 780 };
781 781
782 static const char *const ras_mii_txclk_grps[] = { "ras_mii_txclk_grp" }; 782 static const char *const ras_mii_txclk_grps[] = { "ras_mii_txclk_grp" };
783 static struct spear_function ras_mii_txclk_function = { 783 static struct spear_function ras_mii_txclk_function = {
784 .name = "ras_mii_txclk", 784 .name = "ras_mii_txclk",
785 .groups = ras_mii_txclk_grps, 785 .groups = ras_mii_txclk_grps,
786 .ngroups = ARRAY_SIZE(ras_mii_txclk_grps), 786 .ngroups = ARRAY_SIZE(ras_mii_txclk_grps),
787 }; 787 };
788 788
789 /* Pad multiplexing for nand 8bit device (cs0 only) */ 789 /* Pad multiplexing for nand 8bit device (cs0 only) */
790 static const unsigned nand_8bit_pins[] = { 56, 57, 58, 59, 60, 61, 62, 63, 64, 790 static const unsigned nand_8bit_pins[] = { 56, 57, 58, 59, 60, 61, 62, 63, 64,
791 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 791 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
792 83, 84, 85, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 792 83, 84, 85, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
793 170, 171, 172, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 793 170, 171, 172, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
794 212 }; 794 212 };
795 static struct spear_muxreg nand_8bit_muxreg[] = { 795 static struct spear_muxreg nand_8bit_muxreg[] = {
796 { 796 {
797 .reg = PAD_FUNCTION_EN_0, 797 .reg = PAD_FUNCTION_EN_0,
798 .mask = PMX_NAND8BIT_0_MASK, 798 .mask = PMX_NAND8BIT_0_MASK,
799 .val = PMX_NAND8BIT_0_MASK, 799 .val = PMX_NAND8BIT_0_MASK,
800 }, { 800 }, {
801 .reg = PAD_FUNCTION_EN_1, 801 .reg = PAD_FUNCTION_EN_1,
802 .mask = PMX_NAND8BIT_1_MASK, 802 .mask = PMX_NAND8BIT_1_MASK,
803 .val = PMX_NAND8BIT_1_MASK, 803 .val = PMX_NAND8BIT_1_MASK,
804 }, { 804 }, {
805 .reg = PAD_DIRECTION_SEL_0, 805 .reg = PAD_DIRECTION_SEL_0,
806 .mask = PMX_NAND8BIT_0_MASK, 806 .mask = PMX_NAND8BIT_0_MASK,
807 .val = PMX_NAND8BIT_0_MASK, 807 .val = PMX_NAND8BIT_0_MASK,
808 }, { 808 }, {
809 .reg = PAD_DIRECTION_SEL_1, 809 .reg = PAD_DIRECTION_SEL_1,
810 .mask = PMX_NAND8BIT_1_MASK, 810 .mask = PMX_NAND8BIT_1_MASK,
811 .val = PMX_NAND8BIT_1_MASK, 811 .val = PMX_NAND8BIT_1_MASK,
812 }, 812 },
813 }; 813 };
814 814
815 static struct spear_modemux nand_8bit_modemux[] = { 815 static struct spear_modemux nand_8bit_modemux[] = {
816 { 816 {
817 .muxregs = nand_8bit_muxreg, 817 .muxregs = nand_8bit_muxreg,
818 .nmuxregs = ARRAY_SIZE(nand_8bit_muxreg), 818 .nmuxregs = ARRAY_SIZE(nand_8bit_muxreg),
819 }, 819 },
820 }; 820 };
821 821
822 static struct spear_pingroup nand_8bit_pingroup = { 822 static struct spear_pingroup nand_8bit_pingroup = {
823 .name = "nand_8bit_grp", 823 .name = "nand_8bit_grp",
824 .pins = nand_8bit_pins, 824 .pins = nand_8bit_pins,
825 .npins = ARRAY_SIZE(nand_8bit_pins), 825 .npins = ARRAY_SIZE(nand_8bit_pins),
826 .modemuxs = nand_8bit_modemux, 826 .modemuxs = nand_8bit_modemux,
827 .nmodemuxs = ARRAY_SIZE(nand_8bit_modemux), 827 .nmodemuxs = ARRAY_SIZE(nand_8bit_modemux),
828 }; 828 };
829 829
830 /* Pad multiplexing for nand 16bit device */ 830 /* Pad multiplexing for nand 16bit device */
831 static const unsigned nand_16bit_pins[] = { 201, 202, 203, 204, 207, 208, 209, 831 static const unsigned nand_16bit_pins[] = { 201, 202, 203, 204, 207, 208, 209,
832 210 }; 832 210 };
833 static struct spear_muxreg nand_16bit_muxreg[] = { 833 static struct spear_muxreg nand_16bit_muxreg[] = {
834 { 834 {
835 .reg = PAD_FUNCTION_EN_1, 835 .reg = PAD_FUNCTION_EN_1,
836 .mask = PMX_NAND16BIT_1_MASK, 836 .mask = PMX_NAND16BIT_1_MASK,
837 .val = PMX_NAND16BIT_1_MASK, 837 .val = PMX_NAND16BIT_1_MASK,
838 }, { 838 }, {
839 .reg = PAD_DIRECTION_SEL_1, 839 .reg = PAD_DIRECTION_SEL_1,
840 .mask = PMX_NAND16BIT_1_MASK, 840 .mask = PMX_NAND16BIT_1_MASK,
841 .val = PMX_NAND16BIT_1_MASK, 841 .val = PMX_NAND16BIT_1_MASK,
842 }, 842 },
843 }; 843 };
844 844
845 static struct spear_modemux nand_16bit_modemux[] = { 845 static struct spear_modemux nand_16bit_modemux[] = {
846 { 846 {
847 .muxregs = nand_16bit_muxreg, 847 .muxregs = nand_16bit_muxreg,
848 .nmuxregs = ARRAY_SIZE(nand_16bit_muxreg), 848 .nmuxregs = ARRAY_SIZE(nand_16bit_muxreg),
849 }, 849 },
850 }; 850 };
851 851
852 static struct spear_pingroup nand_16bit_pingroup = { 852 static struct spear_pingroup nand_16bit_pingroup = {
853 .name = "nand_16bit_grp", 853 .name = "nand_16bit_grp",
854 .pins = nand_16bit_pins, 854 .pins = nand_16bit_pins,
855 .npins = ARRAY_SIZE(nand_16bit_pins), 855 .npins = ARRAY_SIZE(nand_16bit_pins),
856 .modemuxs = nand_16bit_modemux, 856 .modemuxs = nand_16bit_modemux,
857 .nmodemuxs = ARRAY_SIZE(nand_16bit_modemux), 857 .nmodemuxs = ARRAY_SIZE(nand_16bit_modemux),
858 }; 858 };
859 859
860 /* Pad multiplexing for nand 4 chips */ 860 /* Pad multiplexing for nand 4 chips */
861 static const unsigned nand_4_chips_pins[] = { 205, 206, 211, 212 }; 861 static const unsigned nand_4_chips_pins[] = { 205, 206, 211, 212 };
862 static struct spear_muxreg nand_4_chips_muxreg[] = { 862 static struct spear_muxreg nand_4_chips_muxreg[] = {
863 { 863 {
864 .reg = PAD_FUNCTION_EN_1, 864 .reg = PAD_FUNCTION_EN_1,
865 .mask = PMX_NAND_4CHIPS_MASK, 865 .mask = PMX_NAND_4CHIPS_MASK,
866 .val = PMX_NAND_4CHIPS_MASK, 866 .val = PMX_NAND_4CHIPS_MASK,
867 }, { 867 }, {
868 .reg = PAD_DIRECTION_SEL_1, 868 .reg = PAD_DIRECTION_SEL_1,
869 .mask = PMX_NAND_4CHIPS_MASK, 869 .mask = PMX_NAND_4CHIPS_MASK,
870 .val = PMX_NAND_4CHIPS_MASK, 870 .val = PMX_NAND_4CHIPS_MASK,
871 }, 871 },
872 }; 872 };
873 873
874 static struct spear_modemux nand_4_chips_modemux[] = { 874 static struct spear_modemux nand_4_chips_modemux[] = {
875 { 875 {
876 .muxregs = nand_4_chips_muxreg, 876 .muxregs = nand_4_chips_muxreg,
877 .nmuxregs = ARRAY_SIZE(nand_4_chips_muxreg), 877 .nmuxregs = ARRAY_SIZE(nand_4_chips_muxreg),
878 }, 878 },
879 }; 879 };
880 880
881 static struct spear_pingroup nand_4_chips_pingroup = { 881 static struct spear_pingroup nand_4_chips_pingroup = {
882 .name = "nand_4_chips_grp", 882 .name = "nand_4_chips_grp",
883 .pins = nand_4_chips_pins, 883 .pins = nand_4_chips_pins,
884 .npins = ARRAY_SIZE(nand_4_chips_pins), 884 .npins = ARRAY_SIZE(nand_4_chips_pins),
885 .modemuxs = nand_4_chips_modemux, 885 .modemuxs = nand_4_chips_modemux,
886 .nmodemuxs = ARRAY_SIZE(nand_4_chips_modemux), 886 .nmodemuxs = ARRAY_SIZE(nand_4_chips_modemux),
887 }; 887 };
888 888
889 static const char *const nand_grps[] = { "nand_8bit_grp", "nand_16bit_grp", 889 static const char *const nand_grps[] = { "nand_8bit_grp", "nand_16bit_grp",
890 "nand_4_chips_grp" }; 890 "nand_4_chips_grp" };
891 static struct spear_function nand_function = { 891 static struct spear_function nand_function = {
892 .name = "nand", 892 .name = "nand",
893 .groups = nand_grps, 893 .groups = nand_grps,
894 .ngroups = ARRAY_SIZE(nand_grps), 894 .ngroups = ARRAY_SIZE(nand_grps),
895 }; 895 };
896 896
897 /* Pad multiplexing for keyboard_6x6 device */ 897 /* Pad multiplexing for keyboard_6x6 device */
898 static const unsigned keyboard_6x6_pins[] = { 201, 202, 203, 204, 205, 206, 207, 898 static const unsigned keyboard_6x6_pins[] = { 201, 202, 203, 204, 205, 206, 207,
899 208, 209, 210, 211, 212 }; 899 208, 209, 210, 211, 212 };
900 static struct spear_muxreg keyboard_6x6_muxreg[] = { 900 static struct spear_muxreg keyboard_6x6_muxreg[] = {
901 { 901 {
902 .reg = PAD_FUNCTION_EN_1, 902 .reg = PAD_FUNCTION_EN_1,
903 .mask = PMX_KEYBOARD_6X6_MASK | PMX_NFIO8_15_MASK | 903 .mask = PMX_KEYBOARD_6X6_MASK | PMX_NFIO8_15_MASK |
904 PMX_NFCE1_MASK | PMX_NFCE2_MASK | PMX_NFWPRT1_MASK | 904 PMX_NFCE1_MASK | PMX_NFCE2_MASK | PMX_NFWPRT1_MASK |
905 PMX_NFWPRT2_MASK, 905 PMX_NFWPRT2_MASK,
906 .val = PMX_KEYBOARD_6X6_MASK, 906 .val = PMX_KEYBOARD_6X6_MASK,
907 }, 907 },
908 }; 908 };
909 909
910 static struct spear_modemux keyboard_6x6_modemux[] = { 910 static struct spear_modemux keyboard_6x6_modemux[] = {
911 { 911 {
912 .muxregs = keyboard_6x6_muxreg, 912 .muxregs = keyboard_6x6_muxreg,
913 .nmuxregs = ARRAY_SIZE(keyboard_6x6_muxreg), 913 .nmuxregs = ARRAY_SIZE(keyboard_6x6_muxreg),
914 }, 914 },
915 }; 915 };
916 916
917 static struct spear_pingroup keyboard_6x6_pingroup = { 917 static struct spear_pingroup keyboard_6x6_pingroup = {
918 .name = "keyboard_6x6_grp", 918 .name = "keyboard_6x6_grp",
919 .pins = keyboard_6x6_pins, 919 .pins = keyboard_6x6_pins,
920 .npins = ARRAY_SIZE(keyboard_6x6_pins), 920 .npins = ARRAY_SIZE(keyboard_6x6_pins),
921 .modemuxs = keyboard_6x6_modemux, 921 .modemuxs = keyboard_6x6_modemux,
922 .nmodemuxs = ARRAY_SIZE(keyboard_6x6_modemux), 922 .nmodemuxs = ARRAY_SIZE(keyboard_6x6_modemux),
923 }; 923 };
924 924
925 /* Pad multiplexing for keyboard_rowcol6_8 device */ 925 /* Pad multiplexing for keyboard_rowcol6_8 device */
926 static const unsigned keyboard_rowcol6_8_pins[] = { 24, 25, 26, 27, 28, 29 }; 926 static const unsigned keyboard_rowcol6_8_pins[] = { 24, 25, 26, 27, 28, 29 };
927 static struct spear_muxreg keyboard_rowcol6_8_muxreg[] = { 927 static struct spear_muxreg keyboard_rowcol6_8_muxreg[] = {
928 { 928 {
929 .reg = PAD_FUNCTION_EN_1, 929 .reg = PAD_FUNCTION_EN_1,
930 .mask = PMX_KBD_ROWCOL68_MASK, 930 .mask = PMX_KBD_ROWCOL68_MASK,
931 .val = PMX_KBD_ROWCOL68_MASK, 931 .val = PMX_KBD_ROWCOL68_MASK,
932 }, { 932 }, {
933 .reg = PAD_DIRECTION_SEL_1, 933 .reg = PAD_DIRECTION_SEL_1,
934 .mask = PMX_KBD_ROWCOL68_MASK, 934 .mask = PMX_KBD_ROWCOL68_MASK,
935 .val = PMX_KBD_ROWCOL68_MASK, 935 .val = PMX_KBD_ROWCOL68_MASK,
936 }, 936 },
937 }; 937 };
938 938
939 static struct spear_modemux keyboard_rowcol6_8_modemux[] = { 939 static struct spear_modemux keyboard_rowcol6_8_modemux[] = {
940 { 940 {
941 .muxregs = keyboard_rowcol6_8_muxreg, 941 .muxregs = keyboard_rowcol6_8_muxreg,
942 .nmuxregs = ARRAY_SIZE(keyboard_rowcol6_8_muxreg), 942 .nmuxregs = ARRAY_SIZE(keyboard_rowcol6_8_muxreg),
943 }, 943 },
944 }; 944 };
945 945
946 static struct spear_pingroup keyboard_rowcol6_8_pingroup = { 946 static struct spear_pingroup keyboard_rowcol6_8_pingroup = {
947 .name = "keyboard_rowcol6_8_grp", 947 .name = "keyboard_rowcol6_8_grp",
948 .pins = keyboard_rowcol6_8_pins, 948 .pins = keyboard_rowcol6_8_pins,
949 .npins = ARRAY_SIZE(keyboard_rowcol6_8_pins), 949 .npins = ARRAY_SIZE(keyboard_rowcol6_8_pins),
950 .modemuxs = keyboard_rowcol6_8_modemux, 950 .modemuxs = keyboard_rowcol6_8_modemux,
951 .nmodemuxs = ARRAY_SIZE(keyboard_rowcol6_8_modemux), 951 .nmodemuxs = ARRAY_SIZE(keyboard_rowcol6_8_modemux),
952 }; 952 };
953 953
954 static const char *const keyboard_grps[] = { "keyboard_6x6_grp", 954 static const char *const keyboard_grps[] = { "keyboard_6x6_grp",
955 "keyboard_rowcol6_8_grp" }; 955 "keyboard_rowcol6_8_grp" };
956 static struct spear_function keyboard_function = { 956 static struct spear_function keyboard_function = {
957 .name = "keyboard", 957 .name = "keyboard",
958 .groups = keyboard_grps, 958 .groups = keyboard_grps,
959 .ngroups = ARRAY_SIZE(keyboard_grps), 959 .ngroups = ARRAY_SIZE(keyboard_grps),
960 }; 960 };
961 961
962 /* Pad multiplexing for uart0 device */ 962 /* Pad multiplexing for uart0 device */
963 static const unsigned uart0_pins[] = { 100, 101 }; 963 static const unsigned uart0_pins[] = { 100, 101 };
964 static struct spear_muxreg uart0_muxreg[] = { 964 static struct spear_muxreg uart0_muxreg[] = {
965 { 965 {
966 .reg = PAD_FUNCTION_EN_0, 966 .reg = PAD_FUNCTION_EN_0,
967 .mask = PMX_UART0_MASK, 967 .mask = PMX_UART0_MASK,
968 .val = PMX_UART0_MASK, 968 .val = PMX_UART0_MASK,
969 }, { 969 }, {
970 .reg = PAD_DIRECTION_SEL_0, 970 .reg = PAD_DIRECTION_SEL_0,
971 .mask = PMX_UART0_MASK, 971 .mask = PMX_UART0_MASK,
972 .val = PMX_UART0_MASK, 972 .val = PMX_UART0_MASK,
973 }, 973 },
974 }; 974 };
975 975
976 static struct spear_modemux uart0_modemux[] = { 976 static struct spear_modemux uart0_modemux[] = {
977 { 977 {
978 .muxregs = uart0_muxreg, 978 .muxregs = uart0_muxreg,
979 .nmuxregs = ARRAY_SIZE(uart0_muxreg), 979 .nmuxregs = ARRAY_SIZE(uart0_muxreg),
980 }, 980 },
981 }; 981 };
982 982
983 static struct spear_pingroup uart0_pingroup = { 983 static struct spear_pingroup uart0_pingroup = {
984 .name = "uart0_grp", 984 .name = "uart0_grp",
985 .pins = uart0_pins, 985 .pins = uart0_pins,
986 .npins = ARRAY_SIZE(uart0_pins), 986 .npins = ARRAY_SIZE(uart0_pins),
987 .modemuxs = uart0_modemux, 987 .modemuxs = uart0_modemux,
988 .nmodemuxs = ARRAY_SIZE(uart0_modemux), 988 .nmodemuxs = ARRAY_SIZE(uart0_modemux),
989 }; 989 };
990 990
991 /* Pad multiplexing for uart0_modem device */ 991 /* Pad multiplexing for uart0_modem device */
992 static const unsigned uart0_modem_pins[] = { 12, 13, 14, 15, 16, 17 }; 992 static const unsigned uart0_modem_pins[] = { 12, 13, 14, 15, 16, 17 };
993 static struct spear_muxreg uart0_modem_muxreg[] = { 993 static struct spear_muxreg uart0_modem_muxreg[] = {
994 { 994 {
995 .reg = PAD_FUNCTION_EN_1, 995 .reg = PAD_FUNCTION_EN_1,
996 .mask = PMX_UART0_MODEM_MASK, 996 .mask = PMX_UART0_MODEM_MASK,
997 .val = PMX_UART0_MODEM_MASK, 997 .val = PMX_UART0_MODEM_MASK,
998 }, { 998 }, {
999 .reg = PAD_DIRECTION_SEL_1, 999 .reg = PAD_DIRECTION_SEL_1,
1000 .mask = PMX_UART0_MODEM_MASK, 1000 .mask = PMX_UART0_MODEM_MASK,
1001 .val = PMX_UART0_MODEM_MASK, 1001 .val = PMX_UART0_MODEM_MASK,
1002 }, 1002 },
1003 }; 1003 };
1004 1004
1005 static struct spear_modemux uart0_modem_modemux[] = { 1005 static struct spear_modemux uart0_modem_modemux[] = {
1006 { 1006 {
1007 .muxregs = uart0_modem_muxreg, 1007 .muxregs = uart0_modem_muxreg,
1008 .nmuxregs = ARRAY_SIZE(uart0_modem_muxreg), 1008 .nmuxregs = ARRAY_SIZE(uart0_modem_muxreg),
1009 }, 1009 },
1010 }; 1010 };
1011 1011
1012 static struct spear_pingroup uart0_modem_pingroup = { 1012 static struct spear_pingroup uart0_modem_pingroup = {
1013 .name = "uart0_modem_grp", 1013 .name = "uart0_modem_grp",
1014 .pins = uart0_modem_pins, 1014 .pins = uart0_modem_pins,
1015 .npins = ARRAY_SIZE(uart0_modem_pins), 1015 .npins = ARRAY_SIZE(uart0_modem_pins),
1016 .modemuxs = uart0_modem_modemux, 1016 .modemuxs = uart0_modem_modemux,
1017 .nmodemuxs = ARRAY_SIZE(uart0_modem_modemux), 1017 .nmodemuxs = ARRAY_SIZE(uart0_modem_modemux),
1018 }; 1018 };
1019 1019
1020 static const char *const uart0_grps[] = { "uart0_grp", "uart0_modem_grp" }; 1020 static const char *const uart0_grps[] = { "uart0_grp", "uart0_modem_grp" };
1021 static struct spear_function uart0_function = { 1021 static struct spear_function uart0_function = {
1022 .name = "uart0", 1022 .name = "uart0",
1023 .groups = uart0_grps, 1023 .groups = uart0_grps,
1024 .ngroups = ARRAY_SIZE(uart0_grps), 1024 .ngroups = ARRAY_SIZE(uart0_grps),
1025 }; 1025 };
1026 1026
1027 /* Pad multiplexing for gpt0_tmr0 device */ 1027 /* Pad multiplexing for gpt0_tmr0 device */
1028 static const unsigned gpt0_tmr0_pins[] = { 10, 11 }; 1028 static const unsigned gpt0_tmr0_pins[] = { 10, 11 };
1029 static struct spear_muxreg gpt0_tmr0_muxreg[] = { 1029 static struct spear_muxreg gpt0_tmr0_muxreg[] = {
1030 { 1030 {
1031 .reg = PAD_FUNCTION_EN_1, 1031 .reg = PAD_FUNCTION_EN_1,
1032 .mask = PMX_GPT0_TMR0_MASK, 1032 .mask = PMX_GPT0_TMR0_MASK,
1033 .val = PMX_GPT0_TMR0_MASK, 1033 .val = PMX_GPT0_TMR0_MASK,
1034 }, { 1034 }, {
1035 .reg = PAD_DIRECTION_SEL_1, 1035 .reg = PAD_DIRECTION_SEL_1,
1036 .mask = PMX_GPT0_TMR0_MASK, 1036 .mask = PMX_GPT0_TMR0_MASK,
1037 .val = PMX_GPT0_TMR0_MASK, 1037 .val = PMX_GPT0_TMR0_MASK,
1038 }, 1038 },
1039 }; 1039 };
1040 1040
1041 static struct spear_modemux gpt0_tmr0_modemux[] = { 1041 static struct spear_modemux gpt0_tmr0_modemux[] = {
1042 { 1042 {
1043 .muxregs = gpt0_tmr0_muxreg, 1043 .muxregs = gpt0_tmr0_muxreg,
1044 .nmuxregs = ARRAY_SIZE(gpt0_tmr0_muxreg), 1044 .nmuxregs = ARRAY_SIZE(gpt0_tmr0_muxreg),
1045 }, 1045 },
1046 }; 1046 };
1047 1047
1048 static struct spear_pingroup gpt0_tmr0_pingroup = { 1048 static struct spear_pingroup gpt0_tmr0_pingroup = {
1049 .name = "gpt0_tmr0_grp", 1049 .name = "gpt0_tmr0_grp",
1050 .pins = gpt0_tmr0_pins, 1050 .pins = gpt0_tmr0_pins,
1051 .npins = ARRAY_SIZE(gpt0_tmr0_pins), 1051 .npins = ARRAY_SIZE(gpt0_tmr0_pins),
1052 .modemuxs = gpt0_tmr0_modemux, 1052 .modemuxs = gpt0_tmr0_modemux,
1053 .nmodemuxs = ARRAY_SIZE(gpt0_tmr0_modemux), 1053 .nmodemuxs = ARRAY_SIZE(gpt0_tmr0_modemux),
1054 }; 1054 };
1055 1055
1056 /* Pad multiplexing for gpt0_tmr1 device */ 1056 /* Pad multiplexing for gpt0_tmr1 device */
1057 static const unsigned gpt0_tmr1_pins[] = { 8, 9 }; 1057 static const unsigned gpt0_tmr1_pins[] = { 8, 9 };
1058 static struct spear_muxreg gpt0_tmr1_muxreg[] = { 1058 static struct spear_muxreg gpt0_tmr1_muxreg[] = {
1059 { 1059 {
1060 .reg = PAD_FUNCTION_EN_1, 1060 .reg = PAD_FUNCTION_EN_1,
1061 .mask = PMX_GPT0_TMR1_MASK, 1061 .mask = PMX_GPT0_TMR1_MASK,
1062 .val = PMX_GPT0_TMR1_MASK, 1062 .val = PMX_GPT0_TMR1_MASK,
1063 }, { 1063 }, {
1064 .reg = PAD_DIRECTION_SEL_1, 1064 .reg = PAD_DIRECTION_SEL_1,
1065 .mask = PMX_GPT0_TMR1_MASK, 1065 .mask = PMX_GPT0_TMR1_MASK,
1066 .val = PMX_GPT0_TMR1_MASK, 1066 .val = PMX_GPT0_TMR1_MASK,
1067 }, 1067 },
1068 }; 1068 };
1069 1069
1070 static struct spear_modemux gpt0_tmr1_modemux[] = { 1070 static struct spear_modemux gpt0_tmr1_modemux[] = {
1071 { 1071 {
1072 .muxregs = gpt0_tmr1_muxreg, 1072 .muxregs = gpt0_tmr1_muxreg,
1073 .nmuxregs = ARRAY_SIZE(gpt0_tmr1_muxreg), 1073 .nmuxregs = ARRAY_SIZE(gpt0_tmr1_muxreg),
1074 }, 1074 },
1075 }; 1075 };
1076 1076
1077 static struct spear_pingroup gpt0_tmr1_pingroup = { 1077 static struct spear_pingroup gpt0_tmr1_pingroup = {
1078 .name = "gpt0_tmr1_grp", 1078 .name = "gpt0_tmr1_grp",
1079 .pins = gpt0_tmr1_pins, 1079 .pins = gpt0_tmr1_pins,
1080 .npins = ARRAY_SIZE(gpt0_tmr1_pins), 1080 .npins = ARRAY_SIZE(gpt0_tmr1_pins),
1081 .modemuxs = gpt0_tmr1_modemux, 1081 .modemuxs = gpt0_tmr1_modemux,
1082 .nmodemuxs = ARRAY_SIZE(gpt0_tmr1_modemux), 1082 .nmodemuxs = ARRAY_SIZE(gpt0_tmr1_modemux),
1083 }; 1083 };
1084 1084
1085 static const char *const gpt0_grps[] = { "gpt0_tmr0_grp", "gpt0_tmr1_grp" }; 1085 static const char *const gpt0_grps[] = { "gpt0_tmr0_grp", "gpt0_tmr1_grp" };
1086 static struct spear_function gpt0_function = { 1086 static struct spear_function gpt0_function = {
1087 .name = "gpt0", 1087 .name = "gpt0",
1088 .groups = gpt0_grps, 1088 .groups = gpt0_grps,
1089 .ngroups = ARRAY_SIZE(gpt0_grps), 1089 .ngroups = ARRAY_SIZE(gpt0_grps),
1090 }; 1090 };
1091 1091
1092 /* Pad multiplexing for gpt1_tmr0 device */ 1092 /* Pad multiplexing for gpt1_tmr0 device */
1093 static const unsigned gpt1_tmr0_pins[] = { 6, 7 }; 1093 static const unsigned gpt1_tmr0_pins[] = { 6, 7 };
1094 static struct spear_muxreg gpt1_tmr0_muxreg[] = { 1094 static struct spear_muxreg gpt1_tmr0_muxreg[] = {
1095 { 1095 {
1096 .reg = PAD_FUNCTION_EN_1, 1096 .reg = PAD_FUNCTION_EN_1,
1097 .mask = PMX_GPT1_TMR0_MASK, 1097 .mask = PMX_GPT1_TMR0_MASK,
1098 .val = PMX_GPT1_TMR0_MASK, 1098 .val = PMX_GPT1_TMR0_MASK,
1099 }, { 1099 }, {
1100 .reg = PAD_DIRECTION_SEL_1, 1100 .reg = PAD_DIRECTION_SEL_1,
1101 .mask = PMX_GPT1_TMR0_MASK, 1101 .mask = PMX_GPT1_TMR0_MASK,
1102 .val = PMX_GPT1_TMR0_MASK, 1102 .val = PMX_GPT1_TMR0_MASK,
1103 }, 1103 },
1104 }; 1104 };
1105 1105
1106 static struct spear_modemux gpt1_tmr0_modemux[] = { 1106 static struct spear_modemux gpt1_tmr0_modemux[] = {
1107 { 1107 {
1108 .muxregs = gpt1_tmr0_muxreg, 1108 .muxregs = gpt1_tmr0_muxreg,
1109 .nmuxregs = ARRAY_SIZE(gpt1_tmr0_muxreg), 1109 .nmuxregs = ARRAY_SIZE(gpt1_tmr0_muxreg),
1110 }, 1110 },
1111 }; 1111 };
1112 1112
1113 static struct spear_pingroup gpt1_tmr0_pingroup = { 1113 static struct spear_pingroup gpt1_tmr0_pingroup = {
1114 .name = "gpt1_tmr0_grp", 1114 .name = "gpt1_tmr0_grp",
1115 .pins = gpt1_tmr0_pins, 1115 .pins = gpt1_tmr0_pins,
1116 .npins = ARRAY_SIZE(gpt1_tmr0_pins), 1116 .npins = ARRAY_SIZE(gpt1_tmr0_pins),
1117 .modemuxs = gpt1_tmr0_modemux, 1117 .modemuxs = gpt1_tmr0_modemux,
1118 .nmodemuxs = ARRAY_SIZE(gpt1_tmr0_modemux), 1118 .nmodemuxs = ARRAY_SIZE(gpt1_tmr0_modemux),
1119 }; 1119 };
1120 1120
1121 /* Pad multiplexing for gpt1_tmr1 device */ 1121 /* Pad multiplexing for gpt1_tmr1 device */
1122 static const unsigned gpt1_tmr1_pins[] = { 4, 5 }; 1122 static const unsigned gpt1_tmr1_pins[] = { 4, 5 };
1123 static struct spear_muxreg gpt1_tmr1_muxreg[] = { 1123 static struct spear_muxreg gpt1_tmr1_muxreg[] = {
1124 { 1124 {
1125 .reg = PAD_FUNCTION_EN_1, 1125 .reg = PAD_FUNCTION_EN_1,
1126 .mask = PMX_GPT1_TMR1_MASK, 1126 .mask = PMX_GPT1_TMR1_MASK,
1127 .val = PMX_GPT1_TMR1_MASK, 1127 .val = PMX_GPT1_TMR1_MASK,
1128 }, { 1128 }, {
1129 .reg = PAD_DIRECTION_SEL_1, 1129 .reg = PAD_DIRECTION_SEL_1,
1130 .mask = PMX_GPT1_TMR1_MASK, 1130 .mask = PMX_GPT1_TMR1_MASK,
1131 .val = PMX_GPT1_TMR1_MASK, 1131 .val = PMX_GPT1_TMR1_MASK,
1132 }, 1132 },
1133 }; 1133 };
1134 1134
1135 static struct spear_modemux gpt1_tmr1_modemux[] = { 1135 static struct spear_modemux gpt1_tmr1_modemux[] = {
1136 { 1136 {
1137 .muxregs = gpt1_tmr1_muxreg, 1137 .muxregs = gpt1_tmr1_muxreg,
1138 .nmuxregs = ARRAY_SIZE(gpt1_tmr1_muxreg), 1138 .nmuxregs = ARRAY_SIZE(gpt1_tmr1_muxreg),
1139 }, 1139 },
1140 }; 1140 };
1141 1141
1142 static struct spear_pingroup gpt1_tmr1_pingroup = { 1142 static struct spear_pingroup gpt1_tmr1_pingroup = {
1143 .name = "gpt1_tmr1_grp", 1143 .name = "gpt1_tmr1_grp",
1144 .pins = gpt1_tmr1_pins, 1144 .pins = gpt1_tmr1_pins,
1145 .npins = ARRAY_SIZE(gpt1_tmr1_pins), 1145 .npins = ARRAY_SIZE(gpt1_tmr1_pins),
1146 .modemuxs = gpt1_tmr1_modemux, 1146 .modemuxs = gpt1_tmr1_modemux,
1147 .nmodemuxs = ARRAY_SIZE(gpt1_tmr1_modemux), 1147 .nmodemuxs = ARRAY_SIZE(gpt1_tmr1_modemux),
1148 }; 1148 };
1149 1149
1150 static const char *const gpt1_grps[] = { "gpt1_tmr1_grp", "gpt1_tmr0_grp" }; 1150 static const char *const gpt1_grps[] = { "gpt1_tmr1_grp", "gpt1_tmr0_grp" };
1151 static struct spear_function gpt1_function = { 1151 static struct spear_function gpt1_function = {
1152 .name = "gpt1", 1152 .name = "gpt1",
1153 .groups = gpt1_grps, 1153 .groups = gpt1_grps,
1154 .ngroups = ARRAY_SIZE(gpt1_grps), 1154 .ngroups = ARRAY_SIZE(gpt1_grps),
1155 }; 1155 };
1156 1156
1157 /* Pad multiplexing for mcif device */ 1157 /* Pad multiplexing for mcif device */
1158 static const unsigned mcif_pins[] = { 86, 87, 88, 89, 90, 91, 92, 93, 213, 214, 1158 static const unsigned mcif_pins[] = { 86, 87, 88, 89, 90, 91, 92, 93, 213, 214,
1159 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 1159 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228,
1160 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 1160 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242,
1161 243, 244, 245 }; 1161 243, 244, 245 };
1162 #define MCIF_MUXREG \ 1162 #define MCIF_MUXREG \
1163 { \ 1163 { \
1164 .reg = PAD_FUNCTION_EN_0, \ 1164 .reg = PAD_FUNCTION_EN_0, \
1165 .mask = PMX_MCI_DATA8_15_MASK, \ 1165 .mask = PMX_MCI_DATA8_15_MASK, \
1166 .val = PMX_MCI_DATA8_15_MASK, \ 1166 .val = PMX_MCI_DATA8_15_MASK, \
1167 }, { \ 1167 }, { \
1168 .reg = PAD_FUNCTION_EN_1, \ 1168 .reg = PAD_FUNCTION_EN_1, \
1169 .mask = PMX_MCIFALL_1_MASK | PMX_NFWPRT1_MASK | \ 1169 .mask = PMX_MCIFALL_1_MASK | PMX_NFWPRT1_MASK | \
1170 PMX_NFWPRT2_MASK, \ 1170 PMX_NFWPRT2_MASK, \
1171 .val = PMX_MCIFALL_1_MASK, \ 1171 .val = PMX_MCIFALL_1_MASK, \
1172 }, { \ 1172 }, { \
1173 .reg = PAD_FUNCTION_EN_2, \ 1173 .reg = PAD_FUNCTION_EN_2, \
1174 .mask = PMX_MCIFALL_2_MASK, \ 1174 .mask = PMX_MCIFALL_2_MASK, \
1175 .val = PMX_MCIFALL_2_MASK, \ 1175 .val = PMX_MCIFALL_2_MASK, \
1176 }, { \ 1176 }, { \
1177 .reg = PAD_DIRECTION_SEL_0, \ 1177 .reg = PAD_DIRECTION_SEL_0, \
1178 .mask = PMX_MCI_DATA8_15_MASK, \ 1178 .mask = PMX_MCI_DATA8_15_MASK, \
1179 .val = PMX_MCI_DATA8_15_MASK, \ 1179 .val = PMX_MCI_DATA8_15_MASK, \
1180 }, { \ 1180 }, { \
1181 .reg = PAD_DIRECTION_SEL_1, \ 1181 .reg = PAD_DIRECTION_SEL_1, \
1182 .mask = PMX_MCIFALL_1_MASK | PMX_NFWPRT1_MASK | \ 1182 .mask = PMX_MCIFALL_1_MASK | PMX_NFWPRT1_MASK | \
1183 PMX_NFWPRT2_MASK, \ 1183 PMX_NFWPRT2_MASK, \
1184 .val = PMX_MCIFALL_1_MASK | PMX_NFWPRT1_MASK | \ 1184 .val = PMX_MCIFALL_1_MASK | PMX_NFWPRT1_MASK | \
1185 PMX_NFWPRT2_MASK, \ 1185 PMX_NFWPRT2_MASK, \
1186 }, { \ 1186 }, { \
1187 .reg = PAD_DIRECTION_SEL_2, \ 1187 .reg = PAD_DIRECTION_SEL_2, \
1188 .mask = PMX_MCIFALL_2_MASK, \ 1188 .mask = PMX_MCIFALL_2_MASK, \
1189 .val = PMX_MCIFALL_2_MASK, \ 1189 .val = PMX_MCIFALL_2_MASK, \
1190 } 1190 }
1191 1191
1192 /* sdhci device */ 1192 /* sdhci device */
1193 static struct spear_muxreg sdhci_muxreg[] = { 1193 static struct spear_muxreg sdhci_muxreg[] = {
1194 MCIF_MUXREG, 1194 MCIF_MUXREG,
1195 { 1195 {
1196 .reg = PERIP_CFG, 1196 .reg = PERIP_CFG,
1197 .mask = MCIF_SEL_MASK, 1197 .mask = MCIF_SEL_MASK,
1198 .val = MCIF_SEL_SD, 1198 .val = MCIF_SEL_SD,
1199 }, 1199 },
1200 }; 1200 };
1201 1201
1202 static struct spear_modemux sdhci_modemux[] = { 1202 static struct spear_modemux sdhci_modemux[] = {
1203 { 1203 {
1204 .muxregs = sdhci_muxreg, 1204 .muxregs = sdhci_muxreg,
1205 .nmuxregs = ARRAY_SIZE(sdhci_muxreg), 1205 .nmuxregs = ARRAY_SIZE(sdhci_muxreg),
1206 }, 1206 },
1207 }; 1207 };
1208 1208
1209 static struct spear_pingroup sdhci_pingroup = { 1209 static struct spear_pingroup sdhci_pingroup = {
1210 .name = "sdhci_grp", 1210 .name = "sdhci_grp",
1211 .pins = mcif_pins, 1211 .pins = mcif_pins,
1212 .npins = ARRAY_SIZE(mcif_pins), 1212 .npins = ARRAY_SIZE(mcif_pins),
1213 .modemuxs = sdhci_modemux, 1213 .modemuxs = sdhci_modemux,
1214 .nmodemuxs = ARRAY_SIZE(sdhci_modemux), 1214 .nmodemuxs = ARRAY_SIZE(sdhci_modemux),
1215 }; 1215 };
1216 1216
1217 static const char *const sdhci_grps[] = { "sdhci_grp" }; 1217 static const char *const sdhci_grps[] = { "sdhci_grp" };
1218 static struct spear_function sdhci_function = { 1218 static struct spear_function sdhci_function = {
1219 .name = "sdhci", 1219 .name = "sdhci",
1220 .groups = sdhci_grps, 1220 .groups = sdhci_grps,
1221 .ngroups = ARRAY_SIZE(sdhci_grps), 1221 .ngroups = ARRAY_SIZE(sdhci_grps),
1222 }; 1222 };
1223 1223
1224 /* cf device */ 1224 /* cf device */
1225 static struct spear_muxreg cf_muxreg[] = { 1225 static struct spear_muxreg cf_muxreg[] = {
1226 MCIF_MUXREG, 1226 MCIF_MUXREG,
1227 { 1227 {
1228 .reg = PERIP_CFG, 1228 .reg = PERIP_CFG,
1229 .mask = MCIF_SEL_MASK, 1229 .mask = MCIF_SEL_MASK,
1230 .val = MCIF_SEL_CF, 1230 .val = MCIF_SEL_CF,
1231 }, 1231 },
1232 }; 1232 };
1233 1233
1234 static struct spear_modemux cf_modemux[] = { 1234 static struct spear_modemux cf_modemux[] = {
1235 { 1235 {
1236 .muxregs = cf_muxreg, 1236 .muxregs = cf_muxreg,
1237 .nmuxregs = ARRAY_SIZE(cf_muxreg), 1237 .nmuxregs = ARRAY_SIZE(cf_muxreg),
1238 }, 1238 },
1239 }; 1239 };
1240 1240
1241 static struct spear_pingroup cf_pingroup = { 1241 static struct spear_pingroup cf_pingroup = {
1242 .name = "cf_grp", 1242 .name = "cf_grp",
1243 .pins = mcif_pins, 1243 .pins = mcif_pins,
1244 .npins = ARRAY_SIZE(mcif_pins), 1244 .npins = ARRAY_SIZE(mcif_pins),
1245 .modemuxs = cf_modemux, 1245 .modemuxs = cf_modemux,
1246 .nmodemuxs = ARRAY_SIZE(cf_modemux), 1246 .nmodemuxs = ARRAY_SIZE(cf_modemux),
1247 }; 1247 };
1248 1248
1249 static const char *const cf_grps[] = { "cf_grp" }; 1249 static const char *const cf_grps[] = { "cf_grp" };
1250 static struct spear_function cf_function = { 1250 static struct spear_function cf_function = {
1251 .name = "cf", 1251 .name = "cf",
1252 .groups = cf_grps, 1252 .groups = cf_grps,
1253 .ngroups = ARRAY_SIZE(cf_grps), 1253 .ngroups = ARRAY_SIZE(cf_grps),
1254 }; 1254 };
1255 1255
1256 /* xd device */ 1256 /* xd device */
1257 static struct spear_muxreg xd_muxreg[] = { 1257 static struct spear_muxreg xd_muxreg[] = {
1258 MCIF_MUXREG, 1258 MCIF_MUXREG,
1259 { 1259 {
1260 .reg = PERIP_CFG, 1260 .reg = PERIP_CFG,
1261 .mask = MCIF_SEL_MASK, 1261 .mask = MCIF_SEL_MASK,
1262 .val = MCIF_SEL_XD, 1262 .val = MCIF_SEL_XD,
1263 }, 1263 },
1264 }; 1264 };
1265 1265
1266 static struct spear_modemux xd_modemux[] = { 1266 static struct spear_modemux xd_modemux[] = {
1267 { 1267 {
1268 .muxregs = xd_muxreg, 1268 .muxregs = xd_muxreg,
1269 .nmuxregs = ARRAY_SIZE(xd_muxreg), 1269 .nmuxregs = ARRAY_SIZE(xd_muxreg),
1270 }, 1270 },
1271 }; 1271 };
1272 1272
1273 static struct spear_pingroup xd_pingroup = { 1273 static struct spear_pingroup xd_pingroup = {
1274 .name = "xd_grp", 1274 .name = "xd_grp",
1275 .pins = mcif_pins, 1275 .pins = mcif_pins,
1276 .npins = ARRAY_SIZE(mcif_pins), 1276 .npins = ARRAY_SIZE(mcif_pins),
1277 .modemuxs = xd_modemux, 1277 .modemuxs = xd_modemux,
1278 .nmodemuxs = ARRAY_SIZE(xd_modemux), 1278 .nmodemuxs = ARRAY_SIZE(xd_modemux),
1279 }; 1279 };
1280 1280
1281 static const char *const xd_grps[] = { "xd_grp" }; 1281 static const char *const xd_grps[] = { "xd_grp" };
1282 static struct spear_function xd_function = { 1282 static struct spear_function xd_function = {
1283 .name = "xd", 1283 .name = "xd",
1284 .groups = xd_grps, 1284 .groups = xd_grps,
1285 .ngroups = ARRAY_SIZE(xd_grps), 1285 .ngroups = ARRAY_SIZE(xd_grps),
1286 }; 1286 };
1287 1287
1288 /* Pad multiplexing for touch_xy device */ 1288 /* Pad multiplexing for touch_xy device */
1289 static const unsigned touch_xy_pins[] = { 97 }; 1289 static const unsigned touch_xy_pins[] = { 97 };
1290 static struct spear_muxreg touch_xy_muxreg[] = { 1290 static struct spear_muxreg touch_xy_muxreg[] = {
1291 { 1291 {
1292 .reg = PAD_FUNCTION_EN_2, 1292 .reg = PAD_FUNCTION_EN_2,
1293 .mask = PMX_TOUCH_XY_MASK, 1293 .mask = PMX_TOUCH_XY_MASK,
1294 .val = PMX_TOUCH_XY_MASK, 1294 .val = PMX_TOUCH_XY_MASK,
1295 }, { 1295 }, {
1296 .reg = PAD_DIRECTION_SEL_2, 1296 .reg = PAD_DIRECTION_SEL_2,
1297 .mask = PMX_TOUCH_XY_MASK, 1297 .mask = PMX_TOUCH_XY_MASK,
1298 .val = PMX_TOUCH_XY_MASK, 1298 .val = PMX_TOUCH_XY_MASK,
1299 }, 1299 },
1300 }; 1300 };
1301 1301
1302 static struct spear_modemux touch_xy_modemux[] = { 1302 static struct spear_modemux touch_xy_modemux[] = {
1303 { 1303 {
1304 .muxregs = touch_xy_muxreg, 1304 .muxregs = touch_xy_muxreg,
1305 .nmuxregs = ARRAY_SIZE(touch_xy_muxreg), 1305 .nmuxregs = ARRAY_SIZE(touch_xy_muxreg),
1306 }, 1306 },
1307 }; 1307 };
1308 1308
1309 static struct spear_pingroup touch_xy_pingroup = { 1309 static struct spear_pingroup touch_xy_pingroup = {
1310 .name = "touch_xy_grp", 1310 .name = "touch_xy_grp",
1311 .pins = touch_xy_pins, 1311 .pins = touch_xy_pins,
1312 .npins = ARRAY_SIZE(touch_xy_pins), 1312 .npins = ARRAY_SIZE(touch_xy_pins),
1313 .modemuxs = touch_xy_modemux, 1313 .modemuxs = touch_xy_modemux,
1314 .nmodemuxs = ARRAY_SIZE(touch_xy_modemux), 1314 .nmodemuxs = ARRAY_SIZE(touch_xy_modemux),
1315 }; 1315 };
1316 1316
1317 static const char *const touch_xy_grps[] = { "touch_xy_grp" }; 1317 static const char *const touch_xy_grps[] = { "touch_xy_grp" };
1318 static struct spear_function touch_xy_function = { 1318 static struct spear_function touch_xy_function = {
1319 .name = "touchscreen", 1319 .name = "touchscreen",
1320 .groups = touch_xy_grps, 1320 .groups = touch_xy_grps,
1321 .ngroups = ARRAY_SIZE(touch_xy_grps), 1321 .ngroups = ARRAY_SIZE(touch_xy_grps),
1322 }; 1322 };
1323 1323
1324 /* Pad multiplexing for uart1 device */ 1324 /* Pad multiplexing for uart1 device */
1325 /* Muxed with I2C */ 1325 /* Muxed with I2C */
1326 static const unsigned uart1_dis_i2c_pins[] = { 102, 103 }; 1326 static const unsigned uart1_dis_i2c_pins[] = { 102, 103 };
1327 static struct spear_muxreg uart1_dis_i2c_muxreg[] = { 1327 static struct spear_muxreg uart1_dis_i2c_muxreg[] = {
1328 { 1328 {
1329 .reg = PAD_FUNCTION_EN_0, 1329 .reg = PAD_FUNCTION_EN_0,
1330 .mask = PMX_I2C0_MASK, 1330 .mask = PMX_I2C0_MASK,
1331 .val = 0, 1331 .val = 0,
1332 }, { 1332 }, {
1333 .reg = PAD_DIRECTION_SEL_0, 1333 .reg = PAD_DIRECTION_SEL_0,
1334 .mask = PMX_I2C0_MASK, 1334 .mask = PMX_I2C0_MASK,
1335 .val = PMX_I2C0_MASK, 1335 .val = PMX_I2C0_MASK,
1336 }, 1336 },
1337 }; 1337 };
1338 1338
1339 static struct spear_modemux uart1_dis_i2c_modemux[] = { 1339 static struct spear_modemux uart1_dis_i2c_modemux[] = {
1340 { 1340 {
1341 .muxregs = uart1_dis_i2c_muxreg, 1341 .muxregs = uart1_dis_i2c_muxreg,
1342 .nmuxregs = ARRAY_SIZE(uart1_dis_i2c_muxreg), 1342 .nmuxregs = ARRAY_SIZE(uart1_dis_i2c_muxreg),
1343 }, 1343 },
1344 }; 1344 };
1345 1345
1346 static struct spear_pingroup uart_1_dis_i2c_pingroup = { 1346 static struct spear_pingroup uart_1_dis_i2c_pingroup = {
1347 .name = "uart1_disable_i2c_grp", 1347 .name = "uart1_disable_i2c_grp",
1348 .pins = uart1_dis_i2c_pins, 1348 .pins = uart1_dis_i2c_pins,
1349 .npins = ARRAY_SIZE(uart1_dis_i2c_pins), 1349 .npins = ARRAY_SIZE(uart1_dis_i2c_pins),
1350 .modemuxs = uart1_dis_i2c_modemux, 1350 .modemuxs = uart1_dis_i2c_modemux,
1351 .nmodemuxs = ARRAY_SIZE(uart1_dis_i2c_modemux), 1351 .nmodemuxs = ARRAY_SIZE(uart1_dis_i2c_modemux),
1352 }; 1352 };
1353 1353
1354 /* Muxed with SD/MMC */ 1354 /* Muxed with SD/MMC */
1355 static const unsigned uart1_dis_sd_pins[] = { 214, 215 }; 1355 static const unsigned uart1_dis_sd_pins[] = { 214, 215 };
1356 static struct spear_muxreg uart1_dis_sd_muxreg[] = { 1356 static struct spear_muxreg uart1_dis_sd_muxreg[] = {
1357 { 1357 {
1358 .reg = PAD_FUNCTION_EN_1, 1358 .reg = PAD_FUNCTION_EN_1,
1359 .mask = PMX_MCIDATA1_MASK | 1359 .mask = PMX_MCIDATA1_MASK |
1360 PMX_MCIDATA2_MASK, 1360 PMX_MCIDATA2_MASK,
1361 .val = 0, 1361 .val = 0,
1362 }, { 1362 }, {
1363 .reg = PAD_DIRECTION_SEL_1, 1363 .reg = PAD_DIRECTION_SEL_1,
1364 .mask = PMX_MCIDATA1_MASK | 1364 .mask = PMX_MCIDATA1_MASK |
1365 PMX_MCIDATA2_MASK, 1365 PMX_MCIDATA2_MASK,
1366 .val = PMX_MCIDATA1_MASK | 1366 .val = PMX_MCIDATA1_MASK |
1367 PMX_MCIDATA2_MASK, 1367 PMX_MCIDATA2_MASK,
1368 }, 1368 },
1369 }; 1369 };
1370 1370
1371 static struct spear_modemux uart1_dis_sd_modemux[] = { 1371 static struct spear_modemux uart1_dis_sd_modemux[] = {
1372 { 1372 {
1373 .muxregs = uart1_dis_sd_muxreg, 1373 .muxregs = uart1_dis_sd_muxreg,
1374 .nmuxregs = ARRAY_SIZE(uart1_dis_sd_muxreg), 1374 .nmuxregs = ARRAY_SIZE(uart1_dis_sd_muxreg),
1375 }, 1375 },
1376 }; 1376 };
1377 1377
1378 static struct spear_pingroup uart_1_dis_sd_pingroup = { 1378 static struct spear_pingroup uart_1_dis_sd_pingroup = {
1379 .name = "uart1_disable_sd_grp", 1379 .name = "uart1_disable_sd_grp",
1380 .pins = uart1_dis_sd_pins, 1380 .pins = uart1_dis_sd_pins,
1381 .npins = ARRAY_SIZE(uart1_dis_sd_pins), 1381 .npins = ARRAY_SIZE(uart1_dis_sd_pins),
1382 .modemuxs = uart1_dis_sd_modemux, 1382 .modemuxs = uart1_dis_sd_modemux,
1383 .nmodemuxs = ARRAY_SIZE(uart1_dis_sd_modemux), 1383 .nmodemuxs = ARRAY_SIZE(uart1_dis_sd_modemux),
1384 }; 1384 };
1385 1385
1386 static const char *const uart1_grps[] = { "uart1_disable_i2c_grp", 1386 static const char *const uart1_grps[] = { "uart1_disable_i2c_grp",
1387 "uart1_disable_sd_grp" }; 1387 "uart1_disable_sd_grp" };
1388 static struct spear_function uart1_function = { 1388 static struct spear_function uart1_function = {
1389 .name = "uart1", 1389 .name = "uart1",
1390 .groups = uart1_grps, 1390 .groups = uart1_grps,
1391 .ngroups = ARRAY_SIZE(uart1_grps), 1391 .ngroups = ARRAY_SIZE(uart1_grps),
1392 }; 1392 };
1393 1393
1394 /* Pad multiplexing for uart2_3 device */ 1394 /* Pad multiplexing for uart2_3 device */
1395 static const unsigned uart2_3_pins[] = { 104, 105, 106, 107 }; 1395 static const unsigned uart2_3_pins[] = { 104, 105, 106, 107 };
1396 static struct spear_muxreg uart2_3_muxreg[] = { 1396 static struct spear_muxreg uart2_3_muxreg[] = {
1397 { 1397 {
1398 .reg = PAD_FUNCTION_EN_0, 1398 .reg = PAD_FUNCTION_EN_0,
1399 .mask = PMX_I2S0_MASK, 1399 .mask = PMX_I2S0_MASK,
1400 .val = 0, 1400 .val = 0,
1401 }, { 1401 }, {
1402 .reg = PAD_DIRECTION_SEL_0, 1402 .reg = PAD_DIRECTION_SEL_0,
1403 .mask = PMX_I2S0_MASK, 1403 .mask = PMX_I2S0_MASK,
1404 .val = PMX_I2S0_MASK, 1404 .val = PMX_I2S0_MASK,
1405 }, 1405 },
1406 }; 1406 };
1407 1407
1408 static struct spear_modemux uart2_3_modemux[] = { 1408 static struct spear_modemux uart2_3_modemux[] = {
1409 { 1409 {
1410 .muxregs = uart2_3_muxreg, 1410 .muxregs = uart2_3_muxreg,
1411 .nmuxregs = ARRAY_SIZE(uart2_3_muxreg), 1411 .nmuxregs = ARRAY_SIZE(uart2_3_muxreg),
1412 }, 1412 },
1413 }; 1413 };
1414 1414
1415 static struct spear_pingroup uart_2_3_pingroup = { 1415 static struct spear_pingroup uart_2_3_pingroup = {
1416 .name = "uart2_3_grp", 1416 .name = "uart2_3_grp",
1417 .pins = uart2_3_pins, 1417 .pins = uart2_3_pins,
1418 .npins = ARRAY_SIZE(uart2_3_pins), 1418 .npins = ARRAY_SIZE(uart2_3_pins),
1419 .modemuxs = uart2_3_modemux, 1419 .modemuxs = uart2_3_modemux,
1420 .nmodemuxs = ARRAY_SIZE(uart2_3_modemux), 1420 .nmodemuxs = ARRAY_SIZE(uart2_3_modemux),
1421 }; 1421 };
1422 1422
1423 static const char *const uart2_3_grps[] = { "uart2_3_grp" }; 1423 static const char *const uart2_3_grps[] = { "uart2_3_grp" };
1424 static struct spear_function uart2_3_function = { 1424 static struct spear_function uart2_3_function = {
1425 .name = "uart2_3", 1425 .name = "uart2_3",
1426 .groups = uart2_3_grps, 1426 .groups = uart2_3_grps,
1427 .ngroups = ARRAY_SIZE(uart2_3_grps), 1427 .ngroups = ARRAY_SIZE(uart2_3_grps),
1428 }; 1428 };
1429 1429
1430 /* Pad multiplexing for uart4 device */ 1430 /* Pad multiplexing for uart4 device */
1431 static const unsigned uart4_pins[] = { 108, 113 }; 1431 static const unsigned uart4_pins[] = { 108, 113 };
1432 static struct spear_muxreg uart4_muxreg[] = { 1432 static struct spear_muxreg uart4_muxreg[] = {
1433 { 1433 {
1434 .reg = PAD_FUNCTION_EN_0, 1434 .reg = PAD_FUNCTION_EN_0,
1435 .mask = PMX_I2S0_MASK | PMX_CLCD1_MASK, 1435 .mask = PMX_I2S0_MASK | PMX_CLCD1_MASK,
1436 .val = 0, 1436 .val = 0,
1437 }, { 1437 }, {
1438 .reg = PAD_DIRECTION_SEL_0, 1438 .reg = PAD_DIRECTION_SEL_0,
1439 .mask = PMX_I2S0_MASK | PMX_CLCD1_MASK, 1439 .mask = PMX_I2S0_MASK | PMX_CLCD1_MASK,
1440 .val = PMX_I2S0_MASK | PMX_CLCD1_MASK, 1440 .val = PMX_I2S0_MASK | PMX_CLCD1_MASK,
1441 }, 1441 },
1442 }; 1442 };
1443 1443
1444 static struct spear_modemux uart4_modemux[] = { 1444 static struct spear_modemux uart4_modemux[] = {
1445 { 1445 {
1446 .muxregs = uart4_muxreg, 1446 .muxregs = uart4_muxreg,
1447 .nmuxregs = ARRAY_SIZE(uart4_muxreg), 1447 .nmuxregs = ARRAY_SIZE(uart4_muxreg),
1448 }, 1448 },
1449 }; 1449 };
1450 1450
1451 static struct spear_pingroup uart_4_pingroup = { 1451 static struct spear_pingroup uart_4_pingroup = {
1452 .name = "uart4_grp", 1452 .name = "uart4_grp",
1453 .pins = uart4_pins, 1453 .pins = uart4_pins,
1454 .npins = ARRAY_SIZE(uart4_pins), 1454 .npins = ARRAY_SIZE(uart4_pins),
1455 .modemuxs = uart4_modemux, 1455 .modemuxs = uart4_modemux,
1456 .nmodemuxs = ARRAY_SIZE(uart4_modemux), 1456 .nmodemuxs = ARRAY_SIZE(uart4_modemux),
1457 }; 1457 };
1458 1458
1459 static const char *const uart4_grps[] = { "uart4_grp" }; 1459 static const char *const uart4_grps[] = { "uart4_grp" };
1460 static struct spear_function uart4_function = { 1460 static struct spear_function uart4_function = {
1461 .name = "uart4", 1461 .name = "uart4",
1462 .groups = uart4_grps, 1462 .groups = uart4_grps,
1463 .ngroups = ARRAY_SIZE(uart4_grps), 1463 .ngroups = ARRAY_SIZE(uart4_grps),
1464 }; 1464 };
1465 1465
1466 /* Pad multiplexing for uart5 device */ 1466 /* Pad multiplexing for uart5 device */
1467 static const unsigned uart5_pins[] = { 114, 115 }; 1467 static const unsigned uart5_pins[] = { 114, 115 };
1468 static struct spear_muxreg uart5_muxreg[] = { 1468 static struct spear_muxreg uart5_muxreg[] = {
1469 { 1469 {
1470 .reg = PAD_FUNCTION_EN_0, 1470 .reg = PAD_FUNCTION_EN_0,
1471 .mask = PMX_CLCD1_MASK, 1471 .mask = PMX_CLCD1_MASK,
1472 .val = 0, 1472 .val = 0,
1473 }, { 1473 }, {
1474 .reg = PAD_DIRECTION_SEL_0, 1474 .reg = PAD_DIRECTION_SEL_0,
1475 .mask = PMX_CLCD1_MASK, 1475 .mask = PMX_CLCD1_MASK,
1476 .val = PMX_CLCD1_MASK, 1476 .val = PMX_CLCD1_MASK,
1477 }, 1477 },
1478 }; 1478 };
1479 1479
1480 static struct spear_modemux uart5_modemux[] = { 1480 static struct spear_modemux uart5_modemux[] = {
1481 { 1481 {
1482 .muxregs = uart5_muxreg, 1482 .muxregs = uart5_muxreg,
1483 .nmuxregs = ARRAY_SIZE(uart5_muxreg), 1483 .nmuxregs = ARRAY_SIZE(uart5_muxreg),
1484 }, 1484 },
1485 }; 1485 };
1486 1486
1487 static struct spear_pingroup uart_5_pingroup = { 1487 static struct spear_pingroup uart_5_pingroup = {
1488 .name = "uart5_grp", 1488 .name = "uart5_grp",
1489 .pins = uart5_pins, 1489 .pins = uart5_pins,
1490 .npins = ARRAY_SIZE(uart5_pins), 1490 .npins = ARRAY_SIZE(uart5_pins),
1491 .modemuxs = uart5_modemux, 1491 .modemuxs = uart5_modemux,
1492 .nmodemuxs = ARRAY_SIZE(uart5_modemux), 1492 .nmodemuxs = ARRAY_SIZE(uart5_modemux),
1493 }; 1493 };
1494 1494
1495 static const char *const uart5_grps[] = { "uart5_grp" }; 1495 static const char *const uart5_grps[] = { "uart5_grp" };
1496 static struct spear_function uart5_function = { 1496 static struct spear_function uart5_function = {
1497 .name = "uart5", 1497 .name = "uart5",
1498 .groups = uart5_grps, 1498 .groups = uart5_grps,
1499 .ngroups = ARRAY_SIZE(uart5_grps), 1499 .ngroups = ARRAY_SIZE(uart5_grps),
1500 }; 1500 };
1501 1501
1502 /* Pad multiplexing for rs485_0_1_tdm_0_1 device */ 1502 /* Pad multiplexing for rs485_0_1_tdm_0_1 device */
1503 static const unsigned rs485_0_1_tdm_0_1_pins[] = { 116, 117, 118, 119, 120, 121, 1503 static const unsigned rs485_0_1_tdm_0_1_pins[] = { 116, 117, 118, 119, 120, 121,
1504 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 1504 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
1505 136, 137 }; 1505 136, 137 };
1506 static struct spear_muxreg rs485_0_1_tdm_0_1_muxreg[] = { 1506 static struct spear_muxreg rs485_0_1_tdm_0_1_muxreg[] = {
1507 { 1507 {
1508 .reg = PAD_FUNCTION_EN_0, 1508 .reg = PAD_FUNCTION_EN_0,
1509 .mask = PMX_CLCD1_MASK, 1509 .mask = PMX_CLCD1_MASK,
1510 .val = 0, 1510 .val = 0,
1511 }, { 1511 }, {
1512 .reg = PAD_DIRECTION_SEL_0, 1512 .reg = PAD_DIRECTION_SEL_0,
1513 .mask = PMX_CLCD1_MASK, 1513 .mask = PMX_CLCD1_MASK,
1514 .val = PMX_CLCD1_MASK, 1514 .val = PMX_CLCD1_MASK,
1515 }, 1515 },
1516 }; 1516 };
1517 1517
1518 static struct spear_modemux rs485_0_1_tdm_0_1_modemux[] = { 1518 static struct spear_modemux rs485_0_1_tdm_0_1_modemux[] = {
1519 { 1519 {
1520 .muxregs = rs485_0_1_tdm_0_1_muxreg, 1520 .muxregs = rs485_0_1_tdm_0_1_muxreg,
1521 .nmuxregs = ARRAY_SIZE(rs485_0_1_tdm_0_1_muxreg), 1521 .nmuxregs = ARRAY_SIZE(rs485_0_1_tdm_0_1_muxreg),
1522 }, 1522 },
1523 }; 1523 };
1524 1524
1525 static struct spear_pingroup rs485_0_1_tdm_0_1_pingroup = { 1525 static struct spear_pingroup rs485_0_1_tdm_0_1_pingroup = {
1526 .name = "rs485_0_1_tdm_0_1_grp", 1526 .name = "rs485_0_1_tdm_0_1_grp",
1527 .pins = rs485_0_1_tdm_0_1_pins, 1527 .pins = rs485_0_1_tdm_0_1_pins,
1528 .npins = ARRAY_SIZE(rs485_0_1_tdm_0_1_pins), 1528 .npins = ARRAY_SIZE(rs485_0_1_tdm_0_1_pins),
1529 .modemuxs = rs485_0_1_tdm_0_1_modemux, 1529 .modemuxs = rs485_0_1_tdm_0_1_modemux,
1530 .nmodemuxs = ARRAY_SIZE(rs485_0_1_tdm_0_1_modemux), 1530 .nmodemuxs = ARRAY_SIZE(rs485_0_1_tdm_0_1_modemux),
1531 }; 1531 };
1532 1532
1533 static const char *const rs485_0_1_tdm_0_1_grps[] = { "rs485_0_1_tdm_0_1_grp" }; 1533 static const char *const rs485_0_1_tdm_0_1_grps[] = { "rs485_0_1_tdm_0_1_grp" };
1534 static struct spear_function rs485_0_1_tdm_0_1_function = { 1534 static struct spear_function rs485_0_1_tdm_0_1_function = {
1535 .name = "rs485_0_1_tdm_0_1", 1535 .name = "rs485_0_1_tdm_0_1",
1536 .groups = rs485_0_1_tdm_0_1_grps, 1536 .groups = rs485_0_1_tdm_0_1_grps,
1537 .ngroups = ARRAY_SIZE(rs485_0_1_tdm_0_1_grps), 1537 .ngroups = ARRAY_SIZE(rs485_0_1_tdm_0_1_grps),
1538 }; 1538 };
1539 1539
1540 /* Pad multiplexing for i2c_1_2 device */ 1540 /* Pad multiplexing for i2c_1_2 device */
1541 static const unsigned i2c_1_2_pins[] = { 138, 139, 140, 141 }; 1541 static const unsigned i2c_1_2_pins[] = { 138, 139, 140, 141 };
1542 static struct spear_muxreg i2c_1_2_muxreg[] = { 1542 static struct spear_muxreg i2c_1_2_muxreg[] = {
1543 { 1543 {
1544 .reg = PAD_FUNCTION_EN_0, 1544 .reg = PAD_FUNCTION_EN_0,
1545 .mask = PMX_CLCD1_MASK, 1545 .mask = PMX_CLCD1_MASK,
1546 .val = 0, 1546 .val = 0,
1547 }, { 1547 }, {
1548 .reg = PAD_DIRECTION_SEL_0, 1548 .reg = PAD_DIRECTION_SEL_0,
1549 .mask = PMX_CLCD1_MASK, 1549 .mask = PMX_CLCD1_MASK,
1550 .val = PMX_CLCD1_MASK, 1550 .val = PMX_CLCD1_MASK,
1551 }, 1551 },
1552 }; 1552 };
1553 1553
1554 static struct spear_modemux i2c_1_2_modemux[] = { 1554 static struct spear_modemux i2c_1_2_modemux[] = {
1555 { 1555 {
1556 .muxregs = i2c_1_2_muxreg, 1556 .muxregs = i2c_1_2_muxreg,
1557 .nmuxregs = ARRAY_SIZE(i2c_1_2_muxreg), 1557 .nmuxregs = ARRAY_SIZE(i2c_1_2_muxreg),
1558 }, 1558 },
1559 }; 1559 };
1560 1560
1561 static struct spear_pingroup i2c_1_2_pingroup = { 1561 static struct spear_pingroup i2c_1_2_pingroup = {
1562 .name = "i2c_1_2_grp", 1562 .name = "i2c_1_2_grp",
1563 .pins = i2c_1_2_pins, 1563 .pins = i2c_1_2_pins,
1564 .npins = ARRAY_SIZE(i2c_1_2_pins), 1564 .npins = ARRAY_SIZE(i2c_1_2_pins),
1565 .modemuxs = i2c_1_2_modemux, 1565 .modemuxs = i2c_1_2_modemux,
1566 .nmodemuxs = ARRAY_SIZE(i2c_1_2_modemux), 1566 .nmodemuxs = ARRAY_SIZE(i2c_1_2_modemux),
1567 }; 1567 };
1568 1568
1569 static const char *const i2c_1_2_grps[] = { "i2c_1_2_grp" }; 1569 static const char *const i2c_1_2_grps[] = { "i2c_1_2_grp" };
1570 static struct spear_function i2c_1_2_function = { 1570 static struct spear_function i2c_1_2_function = {
1571 .name = "i2c_1_2", 1571 .name = "i2c_1_2",
1572 .groups = i2c_1_2_grps, 1572 .groups = i2c_1_2_grps,
1573 .ngroups = ARRAY_SIZE(i2c_1_2_grps), 1573 .ngroups = ARRAY_SIZE(i2c_1_2_grps),
1574 }; 1574 };
1575 1575
1576 /* Pad multiplexing for i2c3_dis_smi_clcd device */ 1576 /* Pad multiplexing for i2c3_dis_smi_clcd device */
1577 /* Muxed with SMI & CLCD */ 1577 /* Muxed with SMI & CLCD */
1578 static const unsigned i2c3_dis_smi_clcd_pins[] = { 142, 153 }; 1578 static const unsigned i2c3_dis_smi_clcd_pins[] = { 142, 153 };
1579 static struct spear_muxreg i2c3_dis_smi_clcd_muxreg[] = { 1579 static struct spear_muxreg i2c3_dis_smi_clcd_muxreg[] = {
1580 { 1580 {
1581 .reg = PAD_FUNCTION_EN_0, 1581 .reg = PAD_FUNCTION_EN_0,
1582 .mask = PMX_CLCD1_MASK | PMX_SMI_MASK, 1582 .mask = PMX_CLCD1_MASK | PMX_SMI_MASK,
1583 .val = 0, 1583 .val = 0,
1584 }, { 1584 }, {
1585 .reg = PAD_DIRECTION_SEL_0, 1585 .reg = PAD_DIRECTION_SEL_0,
1586 .mask = PMX_CLCD1_MASK | PMX_SMI_MASK, 1586 .mask = PMX_CLCD1_MASK | PMX_SMI_MASK,
1587 .val = PMX_CLCD1_MASK | PMX_SMI_MASK, 1587 .val = PMX_CLCD1_MASK | PMX_SMI_MASK,
1588 }, 1588 },
1589 }; 1589 };
1590 1590
1591 static struct spear_modemux i2c3_dis_smi_clcd_modemux[] = { 1591 static struct spear_modemux i2c3_dis_smi_clcd_modemux[] = {
1592 { 1592 {
1593 .muxregs = i2c3_dis_smi_clcd_muxreg, 1593 .muxregs = i2c3_dis_smi_clcd_muxreg,
1594 .nmuxregs = ARRAY_SIZE(i2c3_dis_smi_clcd_muxreg), 1594 .nmuxregs = ARRAY_SIZE(i2c3_dis_smi_clcd_muxreg),
1595 }, 1595 },
1596 }; 1596 };
1597 1597
1598 static struct spear_pingroup i2c3_dis_smi_clcd_pingroup = { 1598 static struct spear_pingroup i2c3_dis_smi_clcd_pingroup = {
1599 .name = "i2c3_dis_smi_clcd_grp", 1599 .name = "i2c3_dis_smi_clcd_grp",
1600 .pins = i2c3_dis_smi_clcd_pins, 1600 .pins = i2c3_dis_smi_clcd_pins,
1601 .npins = ARRAY_SIZE(i2c3_dis_smi_clcd_pins), 1601 .npins = ARRAY_SIZE(i2c3_dis_smi_clcd_pins),
1602 .modemuxs = i2c3_dis_smi_clcd_modemux, 1602 .modemuxs = i2c3_dis_smi_clcd_modemux,
1603 .nmodemuxs = ARRAY_SIZE(i2c3_dis_smi_clcd_modemux), 1603 .nmodemuxs = ARRAY_SIZE(i2c3_dis_smi_clcd_modemux),
1604 }; 1604 };
1605 1605
1606 /* Pad multiplexing for i2c3_dis_sd_i2s0 device */ 1606 /* Pad multiplexing for i2c3_dis_sd_i2s0 device */
1607 /* Muxed with SD/MMC & I2S1 */ 1607 /* Muxed with SD/MMC & I2S1 */
1608 static const unsigned i2c3_dis_sd_i2s0_pins[] = { 0, 216 }; 1608 static const unsigned i2c3_dis_sd_i2s0_pins[] = { 0, 216 };
1609 static struct spear_muxreg i2c3_dis_sd_i2s0_muxreg[] = { 1609 static struct spear_muxreg i2c3_dis_sd_i2s0_muxreg[] = {
1610 { 1610 {
1611 .reg = PAD_FUNCTION_EN_1, 1611 .reg = PAD_FUNCTION_EN_1,
1612 .mask = PMX_I2S1_MASK | PMX_MCIDATA3_MASK, 1612 .mask = PMX_I2S1_MASK | PMX_MCIDATA3_MASK,
1613 .val = 0, 1613 .val = 0,
1614 }, { 1614 }, {
1615 .reg = PAD_DIRECTION_SEL_1, 1615 .reg = PAD_DIRECTION_SEL_1,
1616 .mask = PMX_I2S1_MASK | PMX_MCIDATA3_MASK, 1616 .mask = PMX_I2S1_MASK | PMX_MCIDATA3_MASK,
1617 .val = PMX_I2S1_MASK | PMX_MCIDATA3_MASK, 1617 .val = PMX_I2S1_MASK | PMX_MCIDATA3_MASK,
1618 }, 1618 },
1619 }; 1619 };
1620 1620
1621 static struct spear_modemux i2c3_dis_sd_i2s0_modemux[] = { 1621 static struct spear_modemux i2c3_dis_sd_i2s0_modemux[] = {
1622 { 1622 {
1623 .muxregs = i2c3_dis_sd_i2s0_muxreg, 1623 .muxregs = i2c3_dis_sd_i2s0_muxreg,
1624 .nmuxregs = ARRAY_SIZE(i2c3_dis_sd_i2s0_muxreg), 1624 .nmuxregs = ARRAY_SIZE(i2c3_dis_sd_i2s0_muxreg),
1625 }, 1625 },
1626 }; 1626 };
1627 1627
1628 static struct spear_pingroup i2c3_dis_sd_i2s0_pingroup = { 1628 static struct spear_pingroup i2c3_dis_sd_i2s0_pingroup = {
1629 .name = "i2c3_dis_sd_i2s0_grp", 1629 .name = "i2c3_dis_sd_i2s0_grp",
1630 .pins = i2c3_dis_sd_i2s0_pins, 1630 .pins = i2c3_dis_sd_i2s0_pins,
1631 .npins = ARRAY_SIZE(i2c3_dis_sd_i2s0_pins), 1631 .npins = ARRAY_SIZE(i2c3_dis_sd_i2s0_pins),
1632 .modemuxs = i2c3_dis_sd_i2s0_modemux, 1632 .modemuxs = i2c3_dis_sd_i2s0_modemux,
1633 .nmodemuxs = ARRAY_SIZE(i2c3_dis_sd_i2s0_modemux), 1633 .nmodemuxs = ARRAY_SIZE(i2c3_dis_sd_i2s0_modemux),
1634 }; 1634 };
1635 1635
1636 static const char *const i2c3_grps[] = { "i2c3_dis_smi_clcd_grp", 1636 static const char *const i2c3_grps[] = { "i2c3_dis_smi_clcd_grp",
1637 "i2c3_dis_sd_i2s0_grp" }; 1637 "i2c3_dis_sd_i2s0_grp" };
1638 static struct spear_function i2c3_unction = { 1638 static struct spear_function i2c3_unction = {
1639 .name = "i2c3_i2s1", 1639 .name = "i2c3_i2s1",
1640 .groups = i2c3_grps, 1640 .groups = i2c3_grps,
1641 .ngroups = ARRAY_SIZE(i2c3_grps), 1641 .ngroups = ARRAY_SIZE(i2c3_grps),
1642 }; 1642 };
1643 1643
1644 /* Pad multiplexing for i2c_4_5_dis_smi device */ 1644 /* Pad multiplexing for i2c_4_5_dis_smi device */
1645 /* Muxed with SMI */ 1645 /* Muxed with SMI */
1646 static const unsigned i2c_4_5_dis_smi_pins[] = { 154, 155, 156, 157 }; 1646 static const unsigned i2c_4_5_dis_smi_pins[] = { 154, 155, 156, 157 };
1647 static struct spear_muxreg i2c_4_5_dis_smi_muxreg[] = { 1647 static struct spear_muxreg i2c_4_5_dis_smi_muxreg[] = {
1648 { 1648 {
1649 .reg = PAD_FUNCTION_EN_0, 1649 .reg = PAD_FUNCTION_EN_0,
1650 .mask = PMX_SMI_MASK, 1650 .mask = PMX_SMI_MASK,
1651 .val = 0, 1651 .val = 0,
1652 }, { 1652 }, {
1653 .reg = PAD_DIRECTION_SEL_0, 1653 .reg = PAD_DIRECTION_SEL_0,
1654 .mask = PMX_SMI_MASK, 1654 .mask = PMX_SMI_MASK,
1655 .val = PMX_SMI_MASK, 1655 .val = PMX_SMI_MASK,
1656 }, 1656 },
1657 }; 1657 };
1658 1658
1659 static struct spear_modemux i2c_4_5_dis_smi_modemux[] = { 1659 static struct spear_modemux i2c_4_5_dis_smi_modemux[] = {
1660 { 1660 {
1661 .muxregs = i2c_4_5_dis_smi_muxreg, 1661 .muxregs = i2c_4_5_dis_smi_muxreg,
1662 .nmuxregs = ARRAY_SIZE(i2c_4_5_dis_smi_muxreg), 1662 .nmuxregs = ARRAY_SIZE(i2c_4_5_dis_smi_muxreg),
1663 }, 1663 },
1664 }; 1664 };
1665 1665
1666 static struct spear_pingroup i2c_4_5_dis_smi_pingroup = { 1666 static struct spear_pingroup i2c_4_5_dis_smi_pingroup = {
1667 .name = "i2c_4_5_dis_smi_grp", 1667 .name = "i2c_4_5_dis_smi_grp",
1668 .pins = i2c_4_5_dis_smi_pins, 1668 .pins = i2c_4_5_dis_smi_pins,
1669 .npins = ARRAY_SIZE(i2c_4_5_dis_smi_pins), 1669 .npins = ARRAY_SIZE(i2c_4_5_dis_smi_pins),
1670 .modemuxs = i2c_4_5_dis_smi_modemux, 1670 .modemuxs = i2c_4_5_dis_smi_modemux,
1671 .nmodemuxs = ARRAY_SIZE(i2c_4_5_dis_smi_modemux), 1671 .nmodemuxs = ARRAY_SIZE(i2c_4_5_dis_smi_modemux),
1672 }; 1672 };
1673 1673
1674 /* Pad multiplexing for i2c4_dis_sd device */ 1674 /* Pad multiplexing for i2c4_dis_sd device */
1675 /* Muxed with SD/MMC */ 1675 /* Muxed with SD/MMC */
1676 static const unsigned i2c4_dis_sd_pins[] = { 217, 218 }; 1676 static const unsigned i2c4_dis_sd_pins[] = { 217, 218 };
1677 static struct spear_muxreg i2c4_dis_sd_muxreg[] = { 1677 static struct spear_muxreg i2c4_dis_sd_muxreg[] = {
1678 { 1678 {
1679 .reg = PAD_FUNCTION_EN_1, 1679 .reg = PAD_FUNCTION_EN_1,
1680 .mask = PMX_MCIDATA4_MASK, 1680 .mask = PMX_MCIDATA4_MASK,
1681 .val = 0, 1681 .val = 0,
1682 }, { 1682 }, {
1683 .reg = PAD_FUNCTION_EN_2, 1683 .reg = PAD_FUNCTION_EN_2,
1684 .mask = PMX_MCIDATA5_MASK, 1684 .mask = PMX_MCIDATA5_MASK,
1685 .val = 0, 1685 .val = 0,
1686 }, { 1686 }, {
1687 .reg = PAD_DIRECTION_SEL_1, 1687 .reg = PAD_DIRECTION_SEL_1,
1688 .mask = PMX_MCIDATA4_MASK, 1688 .mask = PMX_MCIDATA4_MASK,
1689 .val = PMX_MCIDATA4_MASK, 1689 .val = PMX_MCIDATA4_MASK,
1690 }, { 1690 }, {
1691 .reg = PAD_DIRECTION_SEL_2, 1691 .reg = PAD_DIRECTION_SEL_2,
1692 .mask = PMX_MCIDATA5_MASK, 1692 .mask = PMX_MCIDATA5_MASK,
1693 .val = PMX_MCIDATA5_MASK, 1693 .val = PMX_MCIDATA5_MASK,
1694 }, 1694 },
1695 }; 1695 };
1696 1696
1697 static struct spear_modemux i2c4_dis_sd_modemux[] = { 1697 static struct spear_modemux i2c4_dis_sd_modemux[] = {
1698 { 1698 {
1699 .muxregs = i2c4_dis_sd_muxreg, 1699 .muxregs = i2c4_dis_sd_muxreg,
1700 .nmuxregs = ARRAY_SIZE(i2c4_dis_sd_muxreg), 1700 .nmuxregs = ARRAY_SIZE(i2c4_dis_sd_muxreg),
1701 }, 1701 },
1702 }; 1702 };
1703 1703
1704 static struct spear_pingroup i2c4_dis_sd_pingroup = { 1704 static struct spear_pingroup i2c4_dis_sd_pingroup = {
1705 .name = "i2c4_dis_sd_grp", 1705 .name = "i2c4_dis_sd_grp",
1706 .pins = i2c4_dis_sd_pins, 1706 .pins = i2c4_dis_sd_pins,
1707 .npins = ARRAY_SIZE(i2c4_dis_sd_pins), 1707 .npins = ARRAY_SIZE(i2c4_dis_sd_pins),
1708 .modemuxs = i2c4_dis_sd_modemux, 1708 .modemuxs = i2c4_dis_sd_modemux,
1709 .nmodemuxs = ARRAY_SIZE(i2c4_dis_sd_modemux), 1709 .nmodemuxs = ARRAY_SIZE(i2c4_dis_sd_modemux),
1710 }; 1710 };
1711 1711
1712 /* Pad multiplexing for i2c5_dis_sd device */ 1712 /* Pad multiplexing for i2c5_dis_sd device */
1713 /* Muxed with SD/MMC */ 1713 /* Muxed with SD/MMC */
1714 static const unsigned i2c5_dis_sd_pins[] = { 219, 220 }; 1714 static const unsigned i2c5_dis_sd_pins[] = { 219, 220 };
1715 static struct spear_muxreg i2c5_dis_sd_muxreg[] = { 1715 static struct spear_muxreg i2c5_dis_sd_muxreg[] = {
1716 { 1716 {
1717 .reg = PAD_FUNCTION_EN_2, 1717 .reg = PAD_FUNCTION_EN_2,
1718 .mask = PMX_MCIDATA6_MASK | 1718 .mask = PMX_MCIDATA6_MASK |
1719 PMX_MCIDATA7_MASK, 1719 PMX_MCIDATA7_MASK,
1720 .val = 0, 1720 .val = 0,
1721 }, { 1721 }, {
1722 .reg = PAD_DIRECTION_SEL_2, 1722 .reg = PAD_DIRECTION_SEL_2,
1723 .mask = PMX_MCIDATA6_MASK | 1723 .mask = PMX_MCIDATA6_MASK |
1724 PMX_MCIDATA7_MASK, 1724 PMX_MCIDATA7_MASK,
1725 .val = PMX_MCIDATA6_MASK | 1725 .val = PMX_MCIDATA6_MASK |
1726 PMX_MCIDATA7_MASK, 1726 PMX_MCIDATA7_MASK,
1727 }, 1727 },
1728 }; 1728 };
1729 1729
1730 static struct spear_modemux i2c5_dis_sd_modemux[] = { 1730 static struct spear_modemux i2c5_dis_sd_modemux[] = {
1731 { 1731 {
1732 .muxregs = i2c5_dis_sd_muxreg, 1732 .muxregs = i2c5_dis_sd_muxreg,
1733 .nmuxregs = ARRAY_SIZE(i2c5_dis_sd_muxreg), 1733 .nmuxregs = ARRAY_SIZE(i2c5_dis_sd_muxreg),
1734 }, 1734 },
1735 }; 1735 };
1736 1736
1737 static struct spear_pingroup i2c5_dis_sd_pingroup = { 1737 static struct spear_pingroup i2c5_dis_sd_pingroup = {
1738 .name = "i2c5_dis_sd_grp", 1738 .name = "i2c5_dis_sd_grp",
1739 .pins = i2c5_dis_sd_pins, 1739 .pins = i2c5_dis_sd_pins,
1740 .npins = ARRAY_SIZE(i2c5_dis_sd_pins), 1740 .npins = ARRAY_SIZE(i2c5_dis_sd_pins),
1741 .modemuxs = i2c5_dis_sd_modemux, 1741 .modemuxs = i2c5_dis_sd_modemux,
1742 .nmodemuxs = ARRAY_SIZE(i2c5_dis_sd_modemux), 1742 .nmodemuxs = ARRAY_SIZE(i2c5_dis_sd_modemux),
1743 }; 1743 };
1744 1744
1745 static const char *const i2c_4_5_grps[] = { "i2c5_dis_sd_grp", 1745 static const char *const i2c_4_5_grps[] = { "i2c5_dis_sd_grp",
1746 "i2c4_dis_sd_grp", "i2c_4_5_dis_smi_grp" }; 1746 "i2c4_dis_sd_grp", "i2c_4_5_dis_smi_grp" };
1747 static struct spear_function i2c_4_5_function = { 1747 static struct spear_function i2c_4_5_function = {
1748 .name = "i2c_4_5", 1748 .name = "i2c_4_5",
1749 .groups = i2c_4_5_grps, 1749 .groups = i2c_4_5_grps,
1750 .ngroups = ARRAY_SIZE(i2c_4_5_grps), 1750 .ngroups = ARRAY_SIZE(i2c_4_5_grps),
1751 }; 1751 };
1752 1752
1753 /* Pad multiplexing for i2c_6_7_dis_kbd device */ 1753 /* Pad multiplexing for i2c_6_7_dis_kbd device */
1754 /* Muxed with KBD */ 1754 /* Muxed with KBD */
1755 static const unsigned i2c_6_7_dis_kbd_pins[] = { 207, 208, 209, 210 }; 1755 static const unsigned i2c_6_7_dis_kbd_pins[] = { 207, 208, 209, 210 };
1756 static struct spear_muxreg i2c_6_7_dis_kbd_muxreg[] = { 1756 static struct spear_muxreg i2c_6_7_dis_kbd_muxreg[] = {
1757 { 1757 {
1758 .reg = PAD_FUNCTION_EN_1, 1758 .reg = PAD_FUNCTION_EN_1,
1759 .mask = PMX_KBD_ROWCOL25_MASK, 1759 .mask = PMX_KBD_ROWCOL25_MASK,
1760 .val = 0, 1760 .val = 0,
1761 }, { 1761 }, {
1762 .reg = PAD_DIRECTION_SEL_1, 1762 .reg = PAD_DIRECTION_SEL_1,
1763 .mask = PMX_KBD_ROWCOL25_MASK, 1763 .mask = PMX_KBD_ROWCOL25_MASK,
1764 .val = PMX_KBD_ROWCOL25_MASK, 1764 .val = PMX_KBD_ROWCOL25_MASK,
1765 }, 1765 },
1766 }; 1766 };
1767 1767
1768 static struct spear_modemux i2c_6_7_dis_kbd_modemux[] = { 1768 static struct spear_modemux i2c_6_7_dis_kbd_modemux[] = {
1769 { 1769 {
1770 .muxregs = i2c_6_7_dis_kbd_muxreg, 1770 .muxregs = i2c_6_7_dis_kbd_muxreg,
1771 .nmuxregs = ARRAY_SIZE(i2c_6_7_dis_kbd_muxreg), 1771 .nmuxregs = ARRAY_SIZE(i2c_6_7_dis_kbd_muxreg),
1772 }, 1772 },
1773 }; 1773 };
1774 1774
1775 static struct spear_pingroup i2c_6_7_dis_kbd_pingroup = { 1775 static struct spear_pingroup i2c_6_7_dis_kbd_pingroup = {
1776 .name = "i2c_6_7_dis_kbd_grp", 1776 .name = "i2c_6_7_dis_kbd_grp",
1777 .pins = i2c_6_7_dis_kbd_pins, 1777 .pins = i2c_6_7_dis_kbd_pins,
1778 .npins = ARRAY_SIZE(i2c_6_7_dis_kbd_pins), 1778 .npins = ARRAY_SIZE(i2c_6_7_dis_kbd_pins),
1779 .modemuxs = i2c_6_7_dis_kbd_modemux, 1779 .modemuxs = i2c_6_7_dis_kbd_modemux,
1780 .nmodemuxs = ARRAY_SIZE(i2c_6_7_dis_kbd_modemux), 1780 .nmodemuxs = ARRAY_SIZE(i2c_6_7_dis_kbd_modemux),
1781 }; 1781 };
1782 1782
1783 /* Pad multiplexing for i2c6_dis_sd device */ 1783 /* Pad multiplexing for i2c6_dis_sd device */
1784 /* Muxed with SD/MMC */ 1784 /* Muxed with SD/MMC */
1785 static const unsigned i2c6_dis_sd_pins[] = { 236, 237 }; 1785 static const unsigned i2c6_dis_sd_pins[] = { 236, 237 };
1786 static struct spear_muxreg i2c6_dis_sd_muxreg[] = { 1786 static struct spear_muxreg i2c6_dis_sd_muxreg[] = {
1787 { 1787 {
1788 .reg = PAD_FUNCTION_EN_2, 1788 .reg = PAD_FUNCTION_EN_2,
1789 .mask = PMX_MCIIORDRE_MASK | 1789 .mask = PMX_MCIIORDRE_MASK |
1790 PMX_MCIIOWRWE_MASK, 1790 PMX_MCIIOWRWE_MASK,
1791 .val = 0, 1791 .val = 0,
1792 }, { 1792 }, {
1793 .reg = PAD_DIRECTION_SEL_2, 1793 .reg = PAD_DIRECTION_SEL_2,
1794 .mask = PMX_MCIIORDRE_MASK | 1794 .mask = PMX_MCIIORDRE_MASK |
1795 PMX_MCIIOWRWE_MASK, 1795 PMX_MCIIOWRWE_MASK,
1796 .val = PMX_MCIIORDRE_MASK | 1796 .val = PMX_MCIIORDRE_MASK |
1797 PMX_MCIIOWRWE_MASK, 1797 PMX_MCIIOWRWE_MASK,
1798 }, 1798 },
1799 }; 1799 };
1800 1800
1801 static struct spear_modemux i2c6_dis_sd_modemux[] = { 1801 static struct spear_modemux i2c6_dis_sd_modemux[] = {
1802 { 1802 {
1803 .muxregs = i2c6_dis_sd_muxreg, 1803 .muxregs = i2c6_dis_sd_muxreg,
1804 .nmuxregs = ARRAY_SIZE(i2c6_dis_sd_muxreg), 1804 .nmuxregs = ARRAY_SIZE(i2c6_dis_sd_muxreg),
1805 }, 1805 },
1806 }; 1806 };
1807 1807
1808 static struct spear_pingroup i2c6_dis_sd_pingroup = { 1808 static struct spear_pingroup i2c6_dis_sd_pingroup = {
1809 .name = "i2c6_dis_sd_grp", 1809 .name = "i2c6_dis_sd_grp",
1810 .pins = i2c6_dis_sd_pins, 1810 .pins = i2c6_dis_sd_pins,
1811 .npins = ARRAY_SIZE(i2c6_dis_sd_pins), 1811 .npins = ARRAY_SIZE(i2c6_dis_sd_pins),
1812 .modemuxs = i2c6_dis_sd_modemux, 1812 .modemuxs = i2c6_dis_sd_modemux,
1813 .nmodemuxs = ARRAY_SIZE(i2c6_dis_sd_modemux), 1813 .nmodemuxs = ARRAY_SIZE(i2c6_dis_sd_modemux),
1814 }; 1814 };
1815 1815
1816 /* Pad multiplexing for i2c7_dis_sd device */ 1816 /* Pad multiplexing for i2c7_dis_sd device */
1817 static const unsigned i2c7_dis_sd_pins[] = { 238, 239 }; 1817 static const unsigned i2c7_dis_sd_pins[] = { 238, 239 };
1818 static struct spear_muxreg i2c7_dis_sd_muxreg[] = { 1818 static struct spear_muxreg i2c7_dis_sd_muxreg[] = {
1819 { 1819 {
1820 .reg = PAD_FUNCTION_EN_2, 1820 .reg = PAD_FUNCTION_EN_2,
1821 .mask = PMX_MCIRESETCF_MASK | 1821 .mask = PMX_MCIRESETCF_MASK |
1822 PMX_MCICS0CE_MASK, 1822 PMX_MCICS0CE_MASK,
1823 .val = 0, 1823 .val = 0,
1824 }, { 1824 }, {
1825 .reg = PAD_DIRECTION_SEL_2, 1825 .reg = PAD_DIRECTION_SEL_2,
1826 .mask = PMX_MCIRESETCF_MASK | 1826 .mask = PMX_MCIRESETCF_MASK |
1827 PMX_MCICS0CE_MASK, 1827 PMX_MCICS0CE_MASK,
1828 .val = PMX_MCIRESETCF_MASK | 1828 .val = PMX_MCIRESETCF_MASK |
1829 PMX_MCICS0CE_MASK, 1829 PMX_MCICS0CE_MASK,
1830 }, 1830 },
1831 }; 1831 };
1832 1832
1833 static struct spear_modemux i2c7_dis_sd_modemux[] = { 1833 static struct spear_modemux i2c7_dis_sd_modemux[] = {
1834 { 1834 {
1835 .muxregs = i2c7_dis_sd_muxreg, 1835 .muxregs = i2c7_dis_sd_muxreg,
1836 .nmuxregs = ARRAY_SIZE(i2c7_dis_sd_muxreg), 1836 .nmuxregs = ARRAY_SIZE(i2c7_dis_sd_muxreg),
1837 }, 1837 },
1838 }; 1838 };
1839 1839
1840 static struct spear_pingroup i2c7_dis_sd_pingroup = { 1840 static struct spear_pingroup i2c7_dis_sd_pingroup = {
1841 .name = "i2c7_dis_sd_grp", 1841 .name = "i2c7_dis_sd_grp",
1842 .pins = i2c7_dis_sd_pins, 1842 .pins = i2c7_dis_sd_pins,
1843 .npins = ARRAY_SIZE(i2c7_dis_sd_pins), 1843 .npins = ARRAY_SIZE(i2c7_dis_sd_pins),
1844 .modemuxs = i2c7_dis_sd_modemux, 1844 .modemuxs = i2c7_dis_sd_modemux,
1845 .nmodemuxs = ARRAY_SIZE(i2c7_dis_sd_modemux), 1845 .nmodemuxs = ARRAY_SIZE(i2c7_dis_sd_modemux),
1846 }; 1846 };
1847 1847
1848 static const char *const i2c_6_7_grps[] = { "i2c6_dis_sd_grp", 1848 static const char *const i2c_6_7_grps[] = { "i2c6_dis_sd_grp",
1849 "i2c7_dis_sd_grp", "i2c_6_7_dis_kbd_grp" }; 1849 "i2c7_dis_sd_grp", "i2c_6_7_dis_kbd_grp" };
1850 static struct spear_function i2c_6_7_function = { 1850 static struct spear_function i2c_6_7_function = {
1851 .name = "i2c_6_7", 1851 .name = "i2c_6_7",
1852 .groups = i2c_6_7_grps, 1852 .groups = i2c_6_7_grps,
1853 .ngroups = ARRAY_SIZE(i2c_6_7_grps), 1853 .ngroups = ARRAY_SIZE(i2c_6_7_grps),
1854 }; 1854 };
1855 1855
1856 /* Pad multiplexing for can0_dis_nor device */ 1856 /* Pad multiplexing for can0_dis_nor device */
1857 /* Muxed with NOR */ 1857 /* Muxed with NOR */
1858 static const unsigned can0_dis_nor_pins[] = { 56, 57 }; 1858 static const unsigned can0_dis_nor_pins[] = { 56, 57 };
1859 static struct spear_muxreg can0_dis_nor_muxreg[] = { 1859 static struct spear_muxreg can0_dis_nor_muxreg[] = {
1860 { 1860 {
1861 .reg = PAD_FUNCTION_EN_0, 1861 .reg = PAD_FUNCTION_EN_0,
1862 .mask = PMX_NFRSTPWDWN2_MASK, 1862 .mask = PMX_NFRSTPWDWN2_MASK,
1863 .val = 0, 1863 .val = 0,
1864 }, { 1864 }, {
1865 .reg = PAD_FUNCTION_EN_1, 1865 .reg = PAD_FUNCTION_EN_1,
1866 .mask = PMX_NFRSTPWDWN3_MASK, 1866 .mask = PMX_NFRSTPWDWN3_MASK,
1867 .val = 0, 1867 .val = 0,
1868 }, { 1868 }, {
1869 .reg = PAD_DIRECTION_SEL_0, 1869 .reg = PAD_DIRECTION_SEL_0,
1870 .mask = PMX_NFRSTPWDWN2_MASK, 1870 .mask = PMX_NFRSTPWDWN2_MASK,
1871 .val = PMX_NFRSTPWDWN2_MASK, 1871 .val = PMX_NFRSTPWDWN2_MASK,
1872 }, { 1872 }, {
1873 .reg = PAD_DIRECTION_SEL_1, 1873 .reg = PAD_DIRECTION_SEL_1,
1874 .mask = PMX_NFRSTPWDWN3_MASK, 1874 .mask = PMX_NFRSTPWDWN3_MASK,
1875 .val = PMX_NFRSTPWDWN3_MASK, 1875 .val = PMX_NFRSTPWDWN3_MASK,
1876 }, 1876 },
1877 }; 1877 };
1878 1878
1879 static struct spear_modemux can0_dis_nor_modemux[] = { 1879 static struct spear_modemux can0_dis_nor_modemux[] = {
1880 { 1880 {
1881 .muxregs = can0_dis_nor_muxreg, 1881 .muxregs = can0_dis_nor_muxreg,
1882 .nmuxregs = ARRAY_SIZE(can0_dis_nor_muxreg), 1882 .nmuxregs = ARRAY_SIZE(can0_dis_nor_muxreg),
1883 }, 1883 },
1884 }; 1884 };
1885 1885
1886 static struct spear_pingroup can0_dis_nor_pingroup = { 1886 static struct spear_pingroup can0_dis_nor_pingroup = {
1887 .name = "can0_dis_nor_grp", 1887 .name = "can0_dis_nor_grp",
1888 .pins = can0_dis_nor_pins, 1888 .pins = can0_dis_nor_pins,
1889 .npins = ARRAY_SIZE(can0_dis_nor_pins), 1889 .npins = ARRAY_SIZE(can0_dis_nor_pins),
1890 .modemuxs = can0_dis_nor_modemux, 1890 .modemuxs = can0_dis_nor_modemux,
1891 .nmodemuxs = ARRAY_SIZE(can0_dis_nor_modemux), 1891 .nmodemuxs = ARRAY_SIZE(can0_dis_nor_modemux),
1892 }; 1892 };
1893 1893
1894 /* Pad multiplexing for can0_dis_sd device */ 1894 /* Pad multiplexing for can0_dis_sd device */
1895 /* Muxed with SD/MMC */ 1895 /* Muxed with SD/MMC */
1896 static const unsigned can0_dis_sd_pins[] = { 240, 241 }; 1896 static const unsigned can0_dis_sd_pins[] = { 240, 241 };
1897 static struct spear_muxreg can0_dis_sd_muxreg[] = { 1897 static struct spear_muxreg can0_dis_sd_muxreg[] = {
1898 { 1898 {
1899 .reg = PAD_FUNCTION_EN_2, 1899 .reg = PAD_FUNCTION_EN_2,
1900 .mask = PMX_MCICFINTR_MASK | PMX_MCIIORDY_MASK, 1900 .mask = PMX_MCICFINTR_MASK | PMX_MCIIORDY_MASK,
1901 .val = 0, 1901 .val = 0,
1902 }, { 1902 }, {
1903 .reg = PAD_DIRECTION_SEL_2, 1903 .reg = PAD_DIRECTION_SEL_2,
1904 .mask = PMX_MCICFINTR_MASK | PMX_MCIIORDY_MASK, 1904 .mask = PMX_MCICFINTR_MASK | PMX_MCIIORDY_MASK,
1905 .val = PMX_MCICFINTR_MASK | PMX_MCIIORDY_MASK, 1905 .val = PMX_MCICFINTR_MASK | PMX_MCIIORDY_MASK,
1906 }, 1906 },
1907 }; 1907 };
1908 1908
1909 static struct spear_modemux can0_dis_sd_modemux[] = { 1909 static struct spear_modemux can0_dis_sd_modemux[] = {
1910 { 1910 {
1911 .muxregs = can0_dis_sd_muxreg, 1911 .muxregs = can0_dis_sd_muxreg,
1912 .nmuxregs = ARRAY_SIZE(can0_dis_sd_muxreg), 1912 .nmuxregs = ARRAY_SIZE(can0_dis_sd_muxreg),
1913 }, 1913 },
1914 }; 1914 };
1915 1915
1916 static struct spear_pingroup can0_dis_sd_pingroup = { 1916 static struct spear_pingroup can0_dis_sd_pingroup = {
1917 .name = "can0_dis_sd_grp", 1917 .name = "can0_dis_sd_grp",
1918 .pins = can0_dis_sd_pins, 1918 .pins = can0_dis_sd_pins,
1919 .npins = ARRAY_SIZE(can0_dis_sd_pins), 1919 .npins = ARRAY_SIZE(can0_dis_sd_pins),
1920 .modemuxs = can0_dis_sd_modemux, 1920 .modemuxs = can0_dis_sd_modemux,
1921 .nmodemuxs = ARRAY_SIZE(can0_dis_sd_modemux), 1921 .nmodemuxs = ARRAY_SIZE(can0_dis_sd_modemux),
1922 }; 1922 };
1923 1923
1924 static const char *const can0_grps[] = { "can0_dis_nor_grp", "can0_dis_sd_grp" 1924 static const char *const can0_grps[] = { "can0_dis_nor_grp", "can0_dis_sd_grp"
1925 }; 1925 };
1926 static struct spear_function can0_function = { 1926 static struct spear_function can0_function = {
1927 .name = "can0", 1927 .name = "can0",
1928 .groups = can0_grps, 1928 .groups = can0_grps,
1929 .ngroups = ARRAY_SIZE(can0_grps), 1929 .ngroups = ARRAY_SIZE(can0_grps),
1930 }; 1930 };
1931 1931
1932 /* Pad multiplexing for can1_dis_sd device */ 1932 /* Pad multiplexing for can1_dis_sd device */
1933 /* Muxed with SD/MMC */ 1933 /* Muxed with SD/MMC */
1934 static const unsigned can1_dis_sd_pins[] = { 242, 243 }; 1934 static const unsigned can1_dis_sd_pins[] = { 242, 243 };
1935 static struct spear_muxreg can1_dis_sd_muxreg[] = { 1935 static struct spear_muxreg can1_dis_sd_muxreg[] = {
1936 { 1936 {
1937 .reg = PAD_FUNCTION_EN_2, 1937 .reg = PAD_FUNCTION_EN_2,
1938 .mask = PMX_MCICS1_MASK | PMX_MCIDMAACK_MASK, 1938 .mask = PMX_MCICS1_MASK | PMX_MCIDMAACK_MASK,
1939 .val = 0, 1939 .val = 0,
1940 }, { 1940 }, {
1941 .reg = PAD_DIRECTION_SEL_2, 1941 .reg = PAD_DIRECTION_SEL_2,
1942 .mask = PMX_MCICS1_MASK | PMX_MCIDMAACK_MASK, 1942 .mask = PMX_MCICS1_MASK | PMX_MCIDMAACK_MASK,
1943 .val = PMX_MCICS1_MASK | PMX_MCIDMAACK_MASK, 1943 .val = PMX_MCICS1_MASK | PMX_MCIDMAACK_MASK,
1944 }, 1944 },
1945 }; 1945 };
1946 1946
1947 static struct spear_modemux can1_dis_sd_modemux[] = { 1947 static struct spear_modemux can1_dis_sd_modemux[] = {
1948 { 1948 {
1949 .muxregs = can1_dis_sd_muxreg, 1949 .muxregs = can1_dis_sd_muxreg,
1950 .nmuxregs = ARRAY_SIZE(can1_dis_sd_muxreg), 1950 .nmuxregs = ARRAY_SIZE(can1_dis_sd_muxreg),
1951 }, 1951 },
1952 }; 1952 };
1953 1953
1954 static struct spear_pingroup can1_dis_sd_pingroup = { 1954 static struct spear_pingroup can1_dis_sd_pingroup = {
1955 .name = "can1_dis_sd_grp", 1955 .name = "can1_dis_sd_grp",
1956 .pins = can1_dis_sd_pins, 1956 .pins = can1_dis_sd_pins,
1957 .npins = ARRAY_SIZE(can1_dis_sd_pins), 1957 .npins = ARRAY_SIZE(can1_dis_sd_pins),
1958 .modemuxs = can1_dis_sd_modemux, 1958 .modemuxs = can1_dis_sd_modemux,
1959 .nmodemuxs = ARRAY_SIZE(can1_dis_sd_modemux), 1959 .nmodemuxs = ARRAY_SIZE(can1_dis_sd_modemux),
1960 }; 1960 };
1961 1961
1962 /* Pad multiplexing for can1_dis_kbd device */ 1962 /* Pad multiplexing for can1_dis_kbd device */
1963 /* Muxed with KBD */ 1963 /* Muxed with KBD */
1964 static const unsigned can1_dis_kbd_pins[] = { 201, 202 }; 1964 static const unsigned can1_dis_kbd_pins[] = { 201, 202 };
1965 static struct spear_muxreg can1_dis_kbd_muxreg[] = { 1965 static struct spear_muxreg can1_dis_kbd_muxreg[] = {
1966 { 1966 {
1967 .reg = PAD_FUNCTION_EN_1, 1967 .reg = PAD_FUNCTION_EN_1,
1968 .mask = PMX_KBD_ROWCOL25_MASK, 1968 .mask = PMX_KBD_ROWCOL25_MASK,
1969 .val = 0, 1969 .val = 0,
1970 }, { 1970 }, {
1971 .reg = PAD_DIRECTION_SEL_1, 1971 .reg = PAD_DIRECTION_SEL_1,
1972 .mask = PMX_KBD_ROWCOL25_MASK, 1972 .mask = PMX_KBD_ROWCOL25_MASK,
1973 .val = PMX_KBD_ROWCOL25_MASK, 1973 .val = PMX_KBD_ROWCOL25_MASK,
1974 }, 1974 },
1975 }; 1975 };
1976 1976
1977 static struct spear_modemux can1_dis_kbd_modemux[] = { 1977 static struct spear_modemux can1_dis_kbd_modemux[] = {
1978 { 1978 {
1979 .muxregs = can1_dis_kbd_muxreg, 1979 .muxregs = can1_dis_kbd_muxreg,
1980 .nmuxregs = ARRAY_SIZE(can1_dis_kbd_muxreg), 1980 .nmuxregs = ARRAY_SIZE(can1_dis_kbd_muxreg),
1981 }, 1981 },
1982 }; 1982 };
1983 1983
1984 static struct spear_pingroup can1_dis_kbd_pingroup = { 1984 static struct spear_pingroup can1_dis_kbd_pingroup = {
1985 .name = "can1_dis_kbd_grp", 1985 .name = "can1_dis_kbd_grp",
1986 .pins = can1_dis_kbd_pins, 1986 .pins = can1_dis_kbd_pins,
1987 .npins = ARRAY_SIZE(can1_dis_kbd_pins), 1987 .npins = ARRAY_SIZE(can1_dis_kbd_pins),
1988 .modemuxs = can1_dis_kbd_modemux, 1988 .modemuxs = can1_dis_kbd_modemux,
1989 .nmodemuxs = ARRAY_SIZE(can1_dis_kbd_modemux), 1989 .nmodemuxs = ARRAY_SIZE(can1_dis_kbd_modemux),
1990 }; 1990 };
1991 1991
1992 static const char *const can1_grps[] = { "can1_dis_sd_grp", "can1_dis_kbd_grp" 1992 static const char *const can1_grps[] = { "can1_dis_sd_grp", "can1_dis_kbd_grp"
1993 }; 1993 };
1994 static struct spear_function can1_function = { 1994 static struct spear_function can1_function = {
1995 .name = "can1", 1995 .name = "can1",
1996 .groups = can1_grps, 1996 .groups = can1_grps,
1997 .ngroups = ARRAY_SIZE(can1_grps), 1997 .ngroups = ARRAY_SIZE(can1_grps),
1998 }; 1998 };
1999 1999
2000 /* Pad multiplexing for (ras-ip) pci device */ 2000 /* Pad multiplexing for (ras-ip) pci device */
2001 static const unsigned pci_pins[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 18, 2001 static const unsigned pci_pins[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 18,
2002 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 2002 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
2003 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 2003 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
2004 55, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99 }; 2004 55, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99 };
2005 2005
2006 static struct spear_muxreg pci_muxreg[] = { 2006 static struct spear_muxreg pci_muxreg[] = {
2007 { 2007 {
2008 .reg = PAD_FUNCTION_EN_0, 2008 .reg = PAD_FUNCTION_EN_0,
2009 .mask = PMX_MCI_DATA8_15_MASK, 2009 .mask = PMX_MCI_DATA8_15_MASK,
2010 .val = 0, 2010 .val = 0,
2011 }, { 2011 }, {
2012 .reg = PAD_FUNCTION_EN_1, 2012 .reg = PAD_FUNCTION_EN_1,
2013 .mask = PMX_PCI_REG1_MASK, 2013 .mask = PMX_PCI_REG1_MASK,
2014 .val = 0, 2014 .val = 0,
2015 }, { 2015 }, {
2016 .reg = PAD_FUNCTION_EN_2, 2016 .reg = PAD_FUNCTION_EN_2,
2017 .mask = PMX_PCI_REG2_MASK, 2017 .mask = PMX_PCI_REG2_MASK,
2018 .val = 0, 2018 .val = 0,
2019 }, { 2019 }, {
2020 .reg = PAD_DIRECTION_SEL_0, 2020 .reg = PAD_DIRECTION_SEL_0,
2021 .mask = PMX_MCI_DATA8_15_MASK, 2021 .mask = PMX_MCI_DATA8_15_MASK,
2022 .val = PMX_MCI_DATA8_15_MASK, 2022 .val = PMX_MCI_DATA8_15_MASK,
2023 }, { 2023 }, {
2024 .reg = PAD_DIRECTION_SEL_1, 2024 .reg = PAD_DIRECTION_SEL_1,
2025 .mask = PMX_PCI_REG1_MASK, 2025 .mask = PMX_PCI_REG1_MASK,
2026 .val = PMX_PCI_REG1_MASK, 2026 .val = PMX_PCI_REG1_MASK,
2027 }, { 2027 }, {
2028 .reg = PAD_DIRECTION_SEL_2, 2028 .reg = PAD_DIRECTION_SEL_2,
2029 .mask = PMX_PCI_REG2_MASK, 2029 .mask = PMX_PCI_REG2_MASK,
2030 .val = PMX_PCI_REG2_MASK, 2030 .val = PMX_PCI_REG2_MASK,
2031 }, 2031 },
2032 }; 2032 };
2033 2033
2034 static struct spear_modemux pci_modemux[] = { 2034 static struct spear_modemux pci_modemux[] = {
2035 { 2035 {
2036 .muxregs = pci_muxreg, 2036 .muxregs = pci_muxreg,
2037 .nmuxregs = ARRAY_SIZE(pci_muxreg), 2037 .nmuxregs = ARRAY_SIZE(pci_muxreg),
2038 }, 2038 },
2039 }; 2039 };
2040 2040
2041 static struct spear_pingroup pci_pingroup = { 2041 static struct spear_pingroup pci_pingroup = {
2042 .name = "pci_grp", 2042 .name = "pci_grp",
2043 .pins = pci_pins, 2043 .pins = pci_pins,
2044 .npins = ARRAY_SIZE(pci_pins), 2044 .npins = ARRAY_SIZE(pci_pins),
2045 .modemuxs = pci_modemux, 2045 .modemuxs = pci_modemux,
2046 .nmodemuxs = ARRAY_SIZE(pci_modemux), 2046 .nmodemuxs = ARRAY_SIZE(pci_modemux),
2047 }; 2047 };
2048 2048
2049 static const char *const pci_grps[] = { "pci_grp" }; 2049 static const char *const pci_grps[] = { "pci_grp" };
2050 static struct spear_function pci_function = { 2050 static struct spear_function pci_function = {
2051 .name = "pci", 2051 .name = "pci",
2052 .groups = pci_grps, 2052 .groups = pci_grps,
2053 .ngroups = ARRAY_SIZE(pci_grps), 2053 .ngroups = ARRAY_SIZE(pci_grps),
2054 }; 2054 };
2055 2055
2056 /* pad multiplexing for (fix-part) pcie0 device */ 2056 /* pad multiplexing for (fix-part) pcie0 device */
2057 static struct spear_muxreg pcie0_muxreg[] = { 2057 static struct spear_muxreg pcie0_muxreg[] = {
2058 { 2058 {
2059 .reg = PCIE_SATA_CFG, 2059 .reg = PCIE_SATA_CFG,
2060 .mask = PCIE_CFG_VAL(0), 2060 .mask = PCIE_CFG_VAL(0),
2061 .val = PCIE_CFG_VAL(0), 2061 .val = PCIE_CFG_VAL(0),
2062 }, 2062 },
2063 }; 2063 };
2064 2064
2065 static struct spear_modemux pcie0_modemux[] = { 2065 static struct spear_modemux pcie0_modemux[] = {
2066 { 2066 {
2067 .muxregs = pcie0_muxreg, 2067 .muxregs = pcie0_muxreg,
2068 .nmuxregs = ARRAY_SIZE(pcie0_muxreg), 2068 .nmuxregs = ARRAY_SIZE(pcie0_muxreg),
2069 }, 2069 },
2070 }; 2070 };
2071 2071
2072 static struct spear_pingroup pcie0_pingroup = { 2072 static struct spear_pingroup pcie0_pingroup = {
2073 .name = "pcie0_grp", 2073 .name = "pcie0_grp",
2074 .modemuxs = pcie0_modemux, 2074 .modemuxs = pcie0_modemux,
2075 .nmodemuxs = ARRAY_SIZE(pcie0_modemux), 2075 .nmodemuxs = ARRAY_SIZE(pcie0_modemux),
2076 }; 2076 };
2077 2077
2078 /* pad multiplexing for (fix-part) pcie1 device */ 2078 /* pad multiplexing for (fix-part) pcie1 device */
2079 static struct spear_muxreg pcie1_muxreg[] = { 2079 static struct spear_muxreg pcie1_muxreg[] = {
2080 { 2080 {
2081 .reg = PCIE_SATA_CFG, 2081 .reg = PCIE_SATA_CFG,
2082 .mask = PCIE_CFG_VAL(1), 2082 .mask = PCIE_CFG_VAL(1),
2083 .val = PCIE_CFG_VAL(1), 2083 .val = PCIE_CFG_VAL(1),
2084 }, 2084 },
2085 }; 2085 };
2086 2086
2087 static struct spear_modemux pcie1_modemux[] = { 2087 static struct spear_modemux pcie1_modemux[] = {
2088 { 2088 {
2089 .muxregs = pcie1_muxreg, 2089 .muxregs = pcie1_muxreg,
2090 .nmuxregs = ARRAY_SIZE(pcie1_muxreg), 2090 .nmuxregs = ARRAY_SIZE(pcie1_muxreg),
2091 }, 2091 },
2092 }; 2092 };
2093 2093
2094 static struct spear_pingroup pcie1_pingroup = { 2094 static struct spear_pingroup pcie1_pingroup = {
2095 .name = "pcie1_grp", 2095 .name = "pcie1_grp",
2096 .modemuxs = pcie1_modemux, 2096 .modemuxs = pcie1_modemux,
2097 .nmodemuxs = ARRAY_SIZE(pcie1_modemux), 2097 .nmodemuxs = ARRAY_SIZE(pcie1_modemux),
2098 }; 2098 };
2099 2099
2100 /* pad multiplexing for (fix-part) pcie2 device */ 2100 /* pad multiplexing for (fix-part) pcie2 device */
2101 static struct spear_muxreg pcie2_muxreg[] = { 2101 static struct spear_muxreg pcie2_muxreg[] = {
2102 { 2102 {
2103 .reg = PCIE_SATA_CFG, 2103 .reg = PCIE_SATA_CFG,
2104 .mask = PCIE_CFG_VAL(2), 2104 .mask = PCIE_CFG_VAL(2),
2105 .val = PCIE_CFG_VAL(2), 2105 .val = PCIE_CFG_VAL(2),
2106 }, 2106 },
2107 }; 2107 };
2108 2108
2109 static struct spear_modemux pcie2_modemux[] = { 2109 static struct spear_modemux pcie2_modemux[] = {
2110 { 2110 {
2111 .muxregs = pcie2_muxreg, 2111 .muxregs = pcie2_muxreg,
2112 .nmuxregs = ARRAY_SIZE(pcie2_muxreg), 2112 .nmuxregs = ARRAY_SIZE(pcie2_muxreg),
2113 }, 2113 },
2114 }; 2114 };
2115 2115
2116 static struct spear_pingroup pcie2_pingroup = { 2116 static struct spear_pingroup pcie2_pingroup = {
2117 .name = "pcie2_grp", 2117 .name = "pcie2_grp",
2118 .modemuxs = pcie2_modemux, 2118 .modemuxs = pcie2_modemux,
2119 .nmodemuxs = ARRAY_SIZE(pcie2_modemux), 2119 .nmodemuxs = ARRAY_SIZE(pcie2_modemux),
2120 }; 2120 };
2121 2121
2122 static const char *const pcie_grps[] = { "pcie0_grp", "pcie1_grp", "pcie2_grp" 2122 static const char *const pcie_grps[] = { "pcie0_grp", "pcie1_grp", "pcie2_grp"
2123 }; 2123 };
2124 static struct spear_function pcie_function = { 2124 static struct spear_function pcie_function = {
2125 .name = "pci_express", 2125 .name = "pci_express",
2126 .groups = pcie_grps, 2126 .groups = pcie_grps,
2127 .ngroups = ARRAY_SIZE(pcie_grps), 2127 .ngroups = ARRAY_SIZE(pcie_grps),
2128 }; 2128 };
2129 2129
2130 /* pad multiplexing for sata0 device */ 2130 /* pad multiplexing for sata0 device */
2131 static struct spear_muxreg sata0_muxreg[] = { 2131 static struct spear_muxreg sata0_muxreg[] = {
2132 { 2132 {
2133 .reg = PCIE_SATA_CFG, 2133 .reg = PCIE_SATA_CFG,
2134 .mask = SATA_CFG_VAL(0), 2134 .mask = SATA_CFG_VAL(0),
2135 .val = SATA_CFG_VAL(0), 2135 .val = SATA_CFG_VAL(0),
2136 }, 2136 },
2137 }; 2137 };
2138 2138
2139 static struct spear_modemux sata0_modemux[] = { 2139 static struct spear_modemux sata0_modemux[] = {
2140 { 2140 {
2141 .muxregs = sata0_muxreg, 2141 .muxregs = sata0_muxreg,
2142 .nmuxregs = ARRAY_SIZE(sata0_muxreg), 2142 .nmuxregs = ARRAY_SIZE(sata0_muxreg),
2143 }, 2143 },
2144 }; 2144 };
2145 2145
2146 static struct spear_pingroup sata0_pingroup = { 2146 static struct spear_pingroup sata0_pingroup = {
2147 .name = "sata0_grp", 2147 .name = "sata0_grp",
2148 .modemuxs = sata0_modemux, 2148 .modemuxs = sata0_modemux,
2149 .nmodemuxs = ARRAY_SIZE(sata0_modemux), 2149 .nmodemuxs = ARRAY_SIZE(sata0_modemux),
2150 }; 2150 };
2151 2151
2152 /* pad multiplexing for sata1 device */ 2152 /* pad multiplexing for sata1 device */
2153 static struct spear_muxreg sata1_muxreg[] = { 2153 static struct spear_muxreg sata1_muxreg[] = {
2154 { 2154 {
2155 .reg = PCIE_SATA_CFG, 2155 .reg = PCIE_SATA_CFG,
2156 .mask = SATA_CFG_VAL(1), 2156 .mask = SATA_CFG_VAL(1),
2157 .val = SATA_CFG_VAL(1), 2157 .val = SATA_CFG_VAL(1),
2158 }, 2158 },
2159 }; 2159 };
2160 2160
2161 static struct spear_modemux sata1_modemux[] = { 2161 static struct spear_modemux sata1_modemux[] = {
2162 { 2162 {
2163 .muxregs = sata1_muxreg, 2163 .muxregs = sata1_muxreg,
2164 .nmuxregs = ARRAY_SIZE(sata1_muxreg), 2164 .nmuxregs = ARRAY_SIZE(sata1_muxreg),
2165 }, 2165 },
2166 }; 2166 };
2167 2167
2168 static struct spear_pingroup sata1_pingroup = { 2168 static struct spear_pingroup sata1_pingroup = {
2169 .name = "sata1_grp", 2169 .name = "sata1_grp",
2170 .modemuxs = sata1_modemux, 2170 .modemuxs = sata1_modemux,
2171 .nmodemuxs = ARRAY_SIZE(sata1_modemux), 2171 .nmodemuxs = ARRAY_SIZE(sata1_modemux),
2172 }; 2172 };
2173 2173
2174 /* pad multiplexing for sata2 device */ 2174 /* pad multiplexing for sata2 device */
2175 static struct spear_muxreg sata2_muxreg[] = { 2175 static struct spear_muxreg sata2_muxreg[] = {
2176 { 2176 {
2177 .reg = PCIE_SATA_CFG, 2177 .reg = PCIE_SATA_CFG,
2178 .mask = SATA_CFG_VAL(2), 2178 .mask = SATA_CFG_VAL(2),
2179 .val = SATA_CFG_VAL(2), 2179 .val = SATA_CFG_VAL(2),
2180 }, 2180 },
2181 }; 2181 };
2182 2182
2183 static struct spear_modemux sata2_modemux[] = { 2183 static struct spear_modemux sata2_modemux[] = {
2184 { 2184 {
2185 .muxregs = sata2_muxreg, 2185 .muxregs = sata2_muxreg,
2186 .nmuxregs = ARRAY_SIZE(sata2_muxreg), 2186 .nmuxregs = ARRAY_SIZE(sata2_muxreg),
2187 }, 2187 },
2188 }; 2188 };
2189 2189
2190 static struct spear_pingroup sata2_pingroup = { 2190 static struct spear_pingroup sata2_pingroup = {
2191 .name = "sata2_grp", 2191 .name = "sata2_grp",
2192 .modemuxs = sata2_modemux, 2192 .modemuxs = sata2_modemux,
2193 .nmodemuxs = ARRAY_SIZE(sata2_modemux), 2193 .nmodemuxs = ARRAY_SIZE(sata2_modemux),
2194 }; 2194 };
2195 2195
2196 static const char *const sata_grps[] = { "sata0_grp", "sata1_grp", "sata2_grp" 2196 static const char *const sata_grps[] = { "sata0_grp", "sata1_grp", "sata2_grp"
2197 }; 2197 };
2198 static struct spear_function sata_function = { 2198 static struct spear_function sata_function = {
2199 .name = "sata", 2199 .name = "sata",
2200 .groups = sata_grps, 2200 .groups = sata_grps,
2201 .ngroups = ARRAY_SIZE(sata_grps), 2201 .ngroups = ARRAY_SIZE(sata_grps),
2202 }; 2202 };
2203 2203
2204 /* Pad multiplexing for ssp1_dis_kbd device */ 2204 /* Pad multiplexing for ssp1_dis_kbd device */
2205 static const unsigned ssp1_dis_kbd_pins[] = { 203, 204, 205, 206 }; 2205 static const unsigned ssp1_dis_kbd_pins[] = { 203, 204, 205, 206 };
2206 static struct spear_muxreg ssp1_dis_kbd_muxreg[] = { 2206 static struct spear_muxreg ssp1_dis_kbd_muxreg[] = {
2207 { 2207 {
2208 .reg = PAD_FUNCTION_EN_1, 2208 .reg = PAD_FUNCTION_EN_1,
2209 .mask = PMX_KBD_ROWCOL25_MASK | PMX_KBD_COL1_MASK | 2209 .mask = PMX_KBD_ROWCOL25_MASK | PMX_KBD_COL1_MASK |
2210 PMX_KBD_COL0_MASK | PMX_NFIO8_15_MASK | PMX_NFCE1_MASK | 2210 PMX_KBD_COL0_MASK | PMX_NFIO8_15_MASK | PMX_NFCE1_MASK |
2211 PMX_NFCE2_MASK, 2211 PMX_NFCE2_MASK,
2212 .val = 0, 2212 .val = 0,
2213 }, { 2213 }, {
2214 .reg = PAD_DIRECTION_SEL_1, 2214 .reg = PAD_DIRECTION_SEL_1,
2215 .mask = PMX_KBD_ROWCOL25_MASK | PMX_KBD_COL1_MASK | 2215 .mask = PMX_KBD_ROWCOL25_MASK | PMX_KBD_COL1_MASK |
2216 PMX_KBD_COL0_MASK | PMX_NFIO8_15_MASK | PMX_NFCE1_MASK | 2216 PMX_KBD_COL0_MASK | PMX_NFIO8_15_MASK | PMX_NFCE1_MASK |
2217 PMX_NFCE2_MASK, 2217 PMX_NFCE2_MASK,
2218 .val = PMX_KBD_ROWCOL25_MASK | PMX_KBD_COL1_MASK | 2218 .val = PMX_KBD_ROWCOL25_MASK | PMX_KBD_COL1_MASK |
2219 PMX_KBD_COL0_MASK | PMX_NFIO8_15_MASK | PMX_NFCE1_MASK | 2219 PMX_KBD_COL0_MASK | PMX_NFIO8_15_MASK | PMX_NFCE1_MASK |
2220 PMX_NFCE2_MASK, 2220 PMX_NFCE2_MASK,
2221 }, 2221 },
2222 }; 2222 };
2223 2223
2224 static struct spear_modemux ssp1_dis_kbd_modemux[] = { 2224 static struct spear_modemux ssp1_dis_kbd_modemux[] = {
2225 { 2225 {
2226 .muxregs = ssp1_dis_kbd_muxreg, 2226 .muxregs = ssp1_dis_kbd_muxreg,
2227 .nmuxregs = ARRAY_SIZE(ssp1_dis_kbd_muxreg), 2227 .nmuxregs = ARRAY_SIZE(ssp1_dis_kbd_muxreg),
2228 }, 2228 },
2229 }; 2229 };
2230 2230
2231 static struct spear_pingroup ssp1_dis_kbd_pingroup = { 2231 static struct spear_pingroup ssp1_dis_kbd_pingroup = {
2232 .name = "ssp1_dis_kbd_grp", 2232 .name = "ssp1_dis_kbd_grp",
2233 .pins = ssp1_dis_kbd_pins, 2233 .pins = ssp1_dis_kbd_pins,
2234 .npins = ARRAY_SIZE(ssp1_dis_kbd_pins), 2234 .npins = ARRAY_SIZE(ssp1_dis_kbd_pins),
2235 .modemuxs = ssp1_dis_kbd_modemux, 2235 .modemuxs = ssp1_dis_kbd_modemux,
2236 .nmodemuxs = ARRAY_SIZE(ssp1_dis_kbd_modemux), 2236 .nmodemuxs = ARRAY_SIZE(ssp1_dis_kbd_modemux),
2237 }; 2237 };
2238 2238
2239 /* Pad multiplexing for ssp1_dis_sd device */ 2239 /* Pad multiplexing for ssp1_dis_sd device */
2240 static const unsigned ssp1_dis_sd_pins[] = { 224, 226, 227, 228 }; 2240 static const unsigned ssp1_dis_sd_pins[] = { 224, 226, 227, 228 };
2241 static struct spear_muxreg ssp1_dis_sd_muxreg[] = { 2241 static struct spear_muxreg ssp1_dis_sd_muxreg[] = {
2242 { 2242 {
2243 .reg = PAD_FUNCTION_EN_2, 2243 .reg = PAD_FUNCTION_EN_2,
2244 .mask = PMX_MCIADDR0ALE_MASK | PMX_MCIADDR2_MASK | 2244 .mask = PMX_MCIADDR0ALE_MASK | PMX_MCIADDR2_MASK |
2245 PMX_MCICECF_MASK | PMX_MCICEXD_MASK, 2245 PMX_MCICECF_MASK | PMX_MCICEXD_MASK,
2246 .val = 0, 2246 .val = 0,
2247 }, { 2247 }, {
2248 .reg = PAD_DIRECTION_SEL_2, 2248 .reg = PAD_DIRECTION_SEL_2,
2249 .mask = PMX_MCIADDR0ALE_MASK | PMX_MCIADDR2_MASK | 2249 .mask = PMX_MCIADDR0ALE_MASK | PMX_MCIADDR2_MASK |
2250 PMX_MCICECF_MASK | PMX_MCICEXD_MASK, 2250 PMX_MCICECF_MASK | PMX_MCICEXD_MASK,
2251 .val = PMX_MCIADDR0ALE_MASK | PMX_MCIADDR2_MASK | 2251 .val = PMX_MCIADDR0ALE_MASK | PMX_MCIADDR2_MASK |
2252 PMX_MCICECF_MASK | PMX_MCICEXD_MASK, 2252 PMX_MCICECF_MASK | PMX_MCICEXD_MASK,
2253 }, 2253 },
2254 }; 2254 };
2255 2255
2256 static struct spear_modemux ssp1_dis_sd_modemux[] = { 2256 static struct spear_modemux ssp1_dis_sd_modemux[] = {
2257 { 2257 {
2258 .muxregs = ssp1_dis_sd_muxreg, 2258 .muxregs = ssp1_dis_sd_muxreg,
2259 .nmuxregs = ARRAY_SIZE(ssp1_dis_sd_muxreg), 2259 .nmuxregs = ARRAY_SIZE(ssp1_dis_sd_muxreg),
2260 }, 2260 },
2261 }; 2261 };
2262 2262
2263 static struct spear_pingroup ssp1_dis_sd_pingroup = { 2263 static struct spear_pingroup ssp1_dis_sd_pingroup = {
2264 .name = "ssp1_dis_sd_grp", 2264 .name = "ssp1_dis_sd_grp",
2265 .pins = ssp1_dis_sd_pins, 2265 .pins = ssp1_dis_sd_pins,
2266 .npins = ARRAY_SIZE(ssp1_dis_sd_pins), 2266 .npins = ARRAY_SIZE(ssp1_dis_sd_pins),
2267 .modemuxs = ssp1_dis_sd_modemux, 2267 .modemuxs = ssp1_dis_sd_modemux,
2268 .nmodemuxs = ARRAY_SIZE(ssp1_dis_sd_modemux), 2268 .nmodemuxs = ARRAY_SIZE(ssp1_dis_sd_modemux),
2269 }; 2269 };
2270 2270
2271 static const char *const ssp1_grps[] = { "ssp1_dis_kbd_grp", 2271 static const char *const ssp1_grps[] = { "ssp1_dis_kbd_grp",
2272 "ssp1_dis_sd_grp" }; 2272 "ssp1_dis_sd_grp" };
2273 static struct spear_function ssp1_function = { 2273 static struct spear_function ssp1_function = {
2274 .name = "ssp1", 2274 .name = "ssp1",
2275 .groups = ssp1_grps, 2275 .groups = ssp1_grps,
2276 .ngroups = ARRAY_SIZE(ssp1_grps), 2276 .ngroups = ARRAY_SIZE(ssp1_grps),
2277 }; 2277 };
2278 2278
2279 /* Pad multiplexing for gpt64 device */ 2279 /* Pad multiplexing for gpt64 device */
2280 static const unsigned gpt64_pins[] = { 230, 231, 232, 245 }; 2280 static const unsigned gpt64_pins[] = { 230, 231, 232, 245 };
2281 static struct spear_muxreg gpt64_muxreg[] = { 2281 static struct spear_muxreg gpt64_muxreg[] = {
2282 { 2282 {
2283 .reg = PAD_FUNCTION_EN_2, 2283 .reg = PAD_FUNCTION_EN_2,
2284 .mask = PMX_MCICDCF1_MASK | PMX_MCICDCF2_MASK | PMX_MCICDXD_MASK 2284 .mask = PMX_MCICDCF1_MASK | PMX_MCICDCF2_MASK | PMX_MCICDXD_MASK
2285 | PMX_MCILEDS_MASK, 2285 | PMX_MCILEDS_MASK,
2286 .val = 0, 2286 .val = 0,
2287 }, { 2287 }, {
2288 .reg = PAD_DIRECTION_SEL_2, 2288 .reg = PAD_DIRECTION_SEL_2,
2289 .mask = PMX_MCICDCF1_MASK | PMX_MCICDCF2_MASK | PMX_MCICDXD_MASK 2289 .mask = PMX_MCICDCF1_MASK | PMX_MCICDCF2_MASK | PMX_MCICDXD_MASK
2290 | PMX_MCILEDS_MASK, 2290 | PMX_MCILEDS_MASK,
2291 .val = PMX_MCICDCF1_MASK | PMX_MCICDCF2_MASK | PMX_MCICDXD_MASK 2291 .val = PMX_MCICDCF1_MASK | PMX_MCICDCF2_MASK | PMX_MCICDXD_MASK
2292 | PMX_MCILEDS_MASK, 2292 | PMX_MCILEDS_MASK,
2293 }, 2293 },
2294 }; 2294 };
2295 2295
2296 static struct spear_modemux gpt64_modemux[] = { 2296 static struct spear_modemux gpt64_modemux[] = {
2297 { 2297 {
2298 .muxregs = gpt64_muxreg, 2298 .muxregs = gpt64_muxreg,
2299 .nmuxregs = ARRAY_SIZE(gpt64_muxreg), 2299 .nmuxregs = ARRAY_SIZE(gpt64_muxreg),
2300 }, 2300 },
2301 }; 2301 };
2302 2302
2303 static struct spear_pingroup gpt64_pingroup = { 2303 static struct spear_pingroup gpt64_pingroup = {
2304 .name = "gpt64_grp", 2304 .name = "gpt64_grp",
2305 .pins = gpt64_pins, 2305 .pins = gpt64_pins,
2306 .npins = ARRAY_SIZE(gpt64_pins), 2306 .npins = ARRAY_SIZE(gpt64_pins),
2307 .modemuxs = gpt64_modemux, 2307 .modemuxs = gpt64_modemux,
2308 .nmodemuxs = ARRAY_SIZE(gpt64_modemux), 2308 .nmodemuxs = ARRAY_SIZE(gpt64_modemux),
2309 }; 2309 };
2310 2310
2311 static const char *const gpt64_grps[] = { "gpt64_grp" }; 2311 static const char *const gpt64_grps[] = { "gpt64_grp" };
2312 static struct spear_function gpt64_function = { 2312 static struct spear_function gpt64_function = {
2313 .name = "gpt64", 2313 .name = "gpt64",
2314 .groups = gpt64_grps, 2314 .groups = gpt64_grps,
2315 .ngroups = ARRAY_SIZE(gpt64_grps), 2315 .ngroups = ARRAY_SIZE(gpt64_grps),
2316 }; 2316 };
2317 2317
2318 /* pingroups */ 2318 /* pingroups */
2319 static struct spear_pingroup *spear1310_pingroups[] = { 2319 static struct spear_pingroup *spear1310_pingroups[] = {
2320 &i2c0_pingroup, 2320 &i2c0_pingroup,
2321 &ssp0_pingroup, 2321 &ssp0_pingroup,
2322 &i2s0_pingroup, 2322 &i2s0_pingroup,
2323 &i2s1_pingroup, 2323 &i2s1_pingroup,
2324 &clcd_pingroup, 2324 &clcd_pingroup,
2325 &clcd_high_res_pingroup, 2325 &clcd_high_res_pingroup,
2326 &arm_gpio_pingroup, 2326 &arm_gpio_pingroup,
2327 &smi_2_chips_pingroup, 2327 &smi_2_chips_pingroup,
2328 &smi_4_chips_pingroup, 2328 &smi_4_chips_pingroup,
2329 &gmii_pingroup, 2329 &gmii_pingroup,
2330 &rgmii_pingroup, 2330 &rgmii_pingroup,
2331 &smii_0_1_2_pingroup, 2331 &smii_0_1_2_pingroup,
2332 &ras_mii_txclk_pingroup, 2332 &ras_mii_txclk_pingroup,
2333 &nand_8bit_pingroup, 2333 &nand_8bit_pingroup,
2334 &nand_16bit_pingroup, 2334 &nand_16bit_pingroup,
2335 &nand_4_chips_pingroup, 2335 &nand_4_chips_pingroup,
2336 &keyboard_6x6_pingroup, 2336 &keyboard_6x6_pingroup,
2337 &keyboard_rowcol6_8_pingroup, 2337 &keyboard_rowcol6_8_pingroup,
2338 &uart0_pingroup, 2338 &uart0_pingroup,
2339 &uart0_modem_pingroup, 2339 &uart0_modem_pingroup,
2340 &gpt0_tmr0_pingroup, 2340 &gpt0_tmr0_pingroup,
2341 &gpt0_tmr1_pingroup, 2341 &gpt0_tmr1_pingroup,
2342 &gpt1_tmr0_pingroup, 2342 &gpt1_tmr0_pingroup,
2343 &gpt1_tmr1_pingroup, 2343 &gpt1_tmr1_pingroup,
2344 &sdhci_pingroup, 2344 &sdhci_pingroup,
2345 &cf_pingroup, 2345 &cf_pingroup,
2346 &xd_pingroup, 2346 &xd_pingroup,
2347 &touch_xy_pingroup, 2347 &touch_xy_pingroup,
2348 &ssp0_cs0_pingroup, 2348 &ssp0_cs0_pingroup,
2349 &ssp0_cs1_2_pingroup, 2349 &ssp0_cs1_2_pingroup,
2350 &uart_1_dis_i2c_pingroup, 2350 &uart_1_dis_i2c_pingroup,
2351 &uart_1_dis_sd_pingroup, 2351 &uart_1_dis_sd_pingroup,
2352 &uart_2_3_pingroup, 2352 &uart_2_3_pingroup,
2353 &uart_4_pingroup, 2353 &uart_4_pingroup,
2354 &uart_5_pingroup, 2354 &uart_5_pingroup,
2355 &rs485_0_1_tdm_0_1_pingroup, 2355 &rs485_0_1_tdm_0_1_pingroup,
2356 &i2c_1_2_pingroup, 2356 &i2c_1_2_pingroup,
2357 &i2c3_dis_smi_clcd_pingroup, 2357 &i2c3_dis_smi_clcd_pingroup,
2358 &i2c3_dis_sd_i2s0_pingroup, 2358 &i2c3_dis_sd_i2s0_pingroup,
2359 &i2c_4_5_dis_smi_pingroup, 2359 &i2c_4_5_dis_smi_pingroup,
2360 &i2c4_dis_sd_pingroup, 2360 &i2c4_dis_sd_pingroup,
2361 &i2c5_dis_sd_pingroup, 2361 &i2c5_dis_sd_pingroup,
2362 &i2c_6_7_dis_kbd_pingroup, 2362 &i2c_6_7_dis_kbd_pingroup,
2363 &i2c6_dis_sd_pingroup, 2363 &i2c6_dis_sd_pingroup,
2364 &i2c7_dis_sd_pingroup, 2364 &i2c7_dis_sd_pingroup,
2365 &can0_dis_nor_pingroup, 2365 &can0_dis_nor_pingroup,
2366 &can0_dis_sd_pingroup, 2366 &can0_dis_sd_pingroup,
2367 &can1_dis_sd_pingroup, 2367 &can1_dis_sd_pingroup,
2368 &can1_dis_kbd_pingroup, 2368 &can1_dis_kbd_pingroup,
2369 &pci_pingroup, 2369 &pci_pingroup,
2370 &pcie0_pingroup, 2370 &pcie0_pingroup,
2371 &pcie1_pingroup, 2371 &pcie1_pingroup,
2372 &pcie2_pingroup, 2372 &pcie2_pingroup,
2373 &sata0_pingroup, 2373 &sata0_pingroup,
2374 &sata1_pingroup, 2374 &sata1_pingroup,
2375 &sata2_pingroup, 2375 &sata2_pingroup,
2376 &ssp1_dis_kbd_pingroup, 2376 &ssp1_dis_kbd_pingroup,
2377 &ssp1_dis_sd_pingroup, 2377 &ssp1_dis_sd_pingroup,
2378 &gpt64_pingroup, 2378 &gpt64_pingroup,
2379 }; 2379 };
2380 2380
2381 /* functions */ 2381 /* functions */
2382 static struct spear_function *spear1310_functions[] = { 2382 static struct spear_function *spear1310_functions[] = {
2383 &i2c0_function, 2383 &i2c0_function,
2384 &ssp0_function, 2384 &ssp0_function,
2385 &i2s0_function, 2385 &i2s0_function,
2386 &i2s1_function, 2386 &i2s1_function,
2387 &clcd_function, 2387 &clcd_function,
2388 &arm_gpio_function, 2388 &arm_gpio_function,
2389 &smi_function, 2389 &smi_function,
2390 &gmii_function, 2390 &gmii_function,
2391 &rgmii_function, 2391 &rgmii_function,
2392 &smii_0_1_2_function, 2392 &smii_0_1_2_function,
2393 &ras_mii_txclk_function, 2393 &ras_mii_txclk_function,
2394 &nand_function, 2394 &nand_function,
2395 &keyboard_function, 2395 &keyboard_function,
2396 &uart0_function, 2396 &uart0_function,
2397 &gpt0_function, 2397 &gpt0_function,
2398 &gpt1_function, 2398 &gpt1_function,
2399 &sdhci_function, 2399 &sdhci_function,
2400 &cf_function, 2400 &cf_function,
2401 &xd_function, 2401 &xd_function,
2402 &touch_xy_function, 2402 &touch_xy_function,
2403 &uart1_function, 2403 &uart1_function,
2404 &uart2_3_function, 2404 &uart2_3_function,
2405 &uart4_function, 2405 &uart4_function,
2406 &uart5_function, 2406 &uart5_function,
2407 &rs485_0_1_tdm_0_1_function, 2407 &rs485_0_1_tdm_0_1_function,
2408 &i2c_1_2_function, 2408 &i2c_1_2_function,
2409 &i2c3_unction, 2409 &i2c3_unction,
2410 &i2c_4_5_function, 2410 &i2c_4_5_function,
2411 &i2c_6_7_function, 2411 &i2c_6_7_function,
2412 &can0_function, 2412 &can0_function,
2413 &can1_function, 2413 &can1_function,
2414 &pci_function, 2414 &pci_function,
2415 &pcie_function, 2415 &pcie_function,
2416 &sata_function, 2416 &sata_function,
2417 &ssp1_function, 2417 &ssp1_function,
2418 &gpt64_function, 2418 &gpt64_function,
2419 }; 2419 };
2420 2420
2421 static struct spear_pinctrl_machdata spear1310_machdata = { 2421 static struct spear_pinctrl_machdata spear1310_machdata = {
2422 .pins = spear1310_pins, 2422 .pins = spear1310_pins,
2423 .npins = ARRAY_SIZE(spear1310_pins), 2423 .npins = ARRAY_SIZE(spear1310_pins),
2424 .groups = spear1310_pingroups, 2424 .groups = spear1310_pingroups,
2425 .ngroups = ARRAY_SIZE(spear1310_pingroups), 2425 .ngroups = ARRAY_SIZE(spear1310_pingroups),
2426 .functions = spear1310_functions, 2426 .functions = spear1310_functions,
2427 .nfunctions = ARRAY_SIZE(spear1310_functions), 2427 .nfunctions = ARRAY_SIZE(spear1310_functions),
2428 .modes_supported = false, 2428 .modes_supported = false,
2429 }; 2429 };
2430 2430
2431 static struct of_device_id spear1310_pinctrl_of_match[] = { 2431 static struct of_device_id spear1310_pinctrl_of_match[] = {
2432 { 2432 {
2433 .compatible = "st,spear1310-pinmux", 2433 .compatible = "st,spear1310-pinmux",
2434 }, 2434 },
2435 {}, 2435 {},
2436 }; 2436 };
2437 2437
2438 static int __devinit spear1310_pinctrl_probe(struct platform_device *pdev) 2438 static int __devinit spear1310_pinctrl_probe(struct platform_device *pdev)
2439 { 2439 {
2440 return spear_pinctrl_probe(pdev, &spear1310_machdata); 2440 return spear_pinctrl_probe(pdev, &spear1310_machdata);
2441 } 2441 }
2442 2442
2443 static int __devexit spear1310_pinctrl_remove(struct platform_device *pdev) 2443 static int spear1310_pinctrl_remove(struct platform_device *pdev)
2444 { 2444 {
2445 return spear_pinctrl_remove(pdev); 2445 return spear_pinctrl_remove(pdev);
2446 } 2446 }
2447 2447
2448 static struct platform_driver spear1310_pinctrl_driver = { 2448 static struct platform_driver spear1310_pinctrl_driver = {
2449 .driver = { 2449 .driver = {
2450 .name = DRIVER_NAME, 2450 .name = DRIVER_NAME,
2451 .owner = THIS_MODULE, 2451 .owner = THIS_MODULE,
2452 .of_match_table = spear1310_pinctrl_of_match, 2452 .of_match_table = spear1310_pinctrl_of_match,
2453 }, 2453 },
2454 .probe = spear1310_pinctrl_probe, 2454 .probe = spear1310_pinctrl_probe,
2455 .remove = spear1310_pinctrl_remove, 2455 .remove = spear1310_pinctrl_remove,
2456 }; 2456 };
2457 2457
2458 static int __init spear1310_pinctrl_init(void) 2458 static int __init spear1310_pinctrl_init(void)
2459 { 2459 {
2460 return platform_driver_register(&spear1310_pinctrl_driver); 2460 return platform_driver_register(&spear1310_pinctrl_driver);
2461 } 2461 }
2462 arch_initcall(spear1310_pinctrl_init); 2462 arch_initcall(spear1310_pinctrl_init);
2463 2463
2464 static void __exit spear1310_pinctrl_exit(void) 2464 static void __exit spear1310_pinctrl_exit(void)
2465 { 2465 {
2466 platform_driver_unregister(&spear1310_pinctrl_driver); 2466 platform_driver_unregister(&spear1310_pinctrl_driver);
2467 } 2467 }
2468 module_exit(spear1310_pinctrl_exit); 2468 module_exit(spear1310_pinctrl_exit);
2469 2469
2470 MODULE_AUTHOR("Viresh Kumar <viresh.linux@gmail.com>"); 2470 MODULE_AUTHOR("Viresh Kumar <viresh.linux@gmail.com>");
2471 MODULE_DESCRIPTION("ST Microelectronics SPEAr1310 pinctrl driver"); 2471 MODULE_DESCRIPTION("ST Microelectronics SPEAr1310 pinctrl driver");
2472 MODULE_LICENSE("GPL v2"); 2472 MODULE_LICENSE("GPL v2");
2473 MODULE_DEVICE_TABLE(of, spear1310_pinctrl_of_match); 2473 MODULE_DEVICE_TABLE(of, spear1310_pinctrl_of_match);
2474 2474
drivers/pinctrl/spear/pinctrl-spear1340.c
1 /* 1 /*
2 * Driver for the ST Microelectronics SPEAr1340 pinmux 2 * Driver for the ST Microelectronics SPEAr1340 pinmux
3 * 3 *
4 * Copyright (C) 2012 ST Microelectronics 4 * Copyright (C) 2012 ST Microelectronics
5 * Viresh Kumar <viresh.linux@gmail.com> 5 * Viresh Kumar <viresh.linux@gmail.com>
6 * 6 *
7 * This file is licensed under the terms of the GNU General Public 7 * This file is licensed under the terms of the GNU General Public
8 * License version 2. This program is licensed "as is" without any 8 * License version 2. This program is licensed "as is" without any
9 * warranty of any kind, whether express or implied. 9 * warranty of any kind, whether express or implied.
10 */ 10 */
11 11
12 #include <linux/err.h> 12 #include <linux/err.h>
13 #include <linux/init.h> 13 #include <linux/init.h>
14 #include <linux/module.h> 14 #include <linux/module.h>
15 #include <linux/of_device.h> 15 #include <linux/of_device.h>
16 #include <linux/platform_device.h> 16 #include <linux/platform_device.h>
17 #include "pinctrl-spear.h" 17 #include "pinctrl-spear.h"
18 18
19 #define DRIVER_NAME "spear1340-pinmux" 19 #define DRIVER_NAME "spear1340-pinmux"
20 20
21 /* pins */ 21 /* pins */
22 static const struct pinctrl_pin_desc spear1340_pins[] = { 22 static const struct pinctrl_pin_desc spear1340_pins[] = {
23 SPEAR_PIN_0_TO_101, 23 SPEAR_PIN_0_TO_101,
24 SPEAR_PIN_102_TO_245, 24 SPEAR_PIN_102_TO_245,
25 PINCTRL_PIN(246, "PLGPIO246"), 25 PINCTRL_PIN(246, "PLGPIO246"),
26 PINCTRL_PIN(247, "PLGPIO247"), 26 PINCTRL_PIN(247, "PLGPIO247"),
27 PINCTRL_PIN(248, "PLGPIO248"), 27 PINCTRL_PIN(248, "PLGPIO248"),
28 PINCTRL_PIN(249, "PLGPIO249"), 28 PINCTRL_PIN(249, "PLGPIO249"),
29 PINCTRL_PIN(250, "PLGPIO250"), 29 PINCTRL_PIN(250, "PLGPIO250"),
30 PINCTRL_PIN(251, "PLGPIO251"), 30 PINCTRL_PIN(251, "PLGPIO251"),
31 }; 31 };
32 32
33 /* In SPEAr1340 there are two levels of pad muxing */ 33 /* In SPEAr1340 there are two levels of pad muxing */
34 /* - pads as gpio OR peripherals */ 34 /* - pads as gpio OR peripherals */
35 #define PAD_FUNCTION_EN_1 0x668 35 #define PAD_FUNCTION_EN_1 0x668
36 #define PAD_FUNCTION_EN_2 0x66C 36 #define PAD_FUNCTION_EN_2 0x66C
37 #define PAD_FUNCTION_EN_3 0x670 37 #define PAD_FUNCTION_EN_3 0x670
38 #define PAD_FUNCTION_EN_4 0x674 38 #define PAD_FUNCTION_EN_4 0x674
39 #define PAD_FUNCTION_EN_5 0x690 39 #define PAD_FUNCTION_EN_5 0x690
40 #define PAD_FUNCTION_EN_6 0x694 40 #define PAD_FUNCTION_EN_6 0x694
41 #define PAD_FUNCTION_EN_7 0x698 41 #define PAD_FUNCTION_EN_7 0x698
42 #define PAD_FUNCTION_EN_8 0x69C 42 #define PAD_FUNCTION_EN_8 0x69C
43 43
44 /* - If peripherals, then primary OR alternate peripheral */ 44 /* - If peripherals, then primary OR alternate peripheral */
45 #define PAD_SHARED_IP_EN_1 0x6A0 45 #define PAD_SHARED_IP_EN_1 0x6A0
46 #define PAD_SHARED_IP_EN_2 0x6A4 46 #define PAD_SHARED_IP_EN_2 0x6A4
47 47
48 /* 48 /*
49 * Macro's for first level of pmx - pads as gpio OR peripherals. There are 8 49 * Macro's for first level of pmx - pads as gpio OR peripherals. There are 8
50 * registers with 32 bits each for handling gpio pads, register 8 has only 26 50 * registers with 32 bits each for handling gpio pads, register 8 has only 26
51 * relevant bits. 51 * relevant bits.
52 */ 52 */
53 /* macro's for making pads as gpio's */ 53 /* macro's for making pads as gpio's */
54 #define PADS_AS_GPIO_REG0_MASK 0xFFFFFFFE 54 #define PADS_AS_GPIO_REG0_MASK 0xFFFFFFFE
55 #define PADS_AS_GPIO_REGS_MASK 0xFFFFFFFF 55 #define PADS_AS_GPIO_REGS_MASK 0xFFFFFFFF
56 #define PADS_AS_GPIO_REG7_MASK 0x07FFFFFF 56 #define PADS_AS_GPIO_REG7_MASK 0x07FFFFFF
57 57
58 /* macro's for making pads as peripherals */ 58 /* macro's for making pads as peripherals */
59 #define FSMC_16_BIT_AND_KBD_ROW_COL_REG0_MASK 0x00000FFE 59 #define FSMC_16_BIT_AND_KBD_ROW_COL_REG0_MASK 0x00000FFE
60 #define UART0_ENH_AND_GPT_REG0_MASK 0x0003F000 60 #define UART0_ENH_AND_GPT_REG0_MASK 0x0003F000
61 #define PWM1_AND_KBD_COL5_REG0_MASK 0x00040000 61 #define PWM1_AND_KBD_COL5_REG0_MASK 0x00040000
62 #define I2C1_REG0_MASK 0x01080000 62 #define I2C1_REG0_MASK 0x01080000
63 #define SPDIF_IN_REG0_MASK 0x00100000 63 #define SPDIF_IN_REG0_MASK 0x00100000
64 #define PWM2_AND_GPT0_TMR0_CPT_REG0_MASK 0x00400000 64 #define PWM2_AND_GPT0_TMR0_CPT_REG0_MASK 0x00400000
65 #define PWM3_AND_GPT0_TMR1_CLK_REG0_MASK 0x00800000 65 #define PWM3_AND_GPT0_TMR1_CLK_REG0_MASK 0x00800000
66 #define PWM0_AND_SSP0_CS1_REG0_MASK 0x02000000 66 #define PWM0_AND_SSP0_CS1_REG0_MASK 0x02000000
67 #define VIP_AND_CAM3_REG0_MASK 0xFC200000 67 #define VIP_AND_CAM3_REG0_MASK 0xFC200000
68 #define VIP_AND_CAM3_REG1_MASK 0x0000000F 68 #define VIP_AND_CAM3_REG1_MASK 0x0000000F
69 #define VIP_REG1_MASK 0x00001EF0 69 #define VIP_REG1_MASK 0x00001EF0
70 #define VIP_AND_CAM2_REG1_MASK 0x007FE100 70 #define VIP_AND_CAM2_REG1_MASK 0x007FE100
71 #define VIP_AND_CAM1_REG1_MASK 0xFF800000 71 #define VIP_AND_CAM1_REG1_MASK 0xFF800000
72 #define VIP_AND_CAM1_REG2_MASK 0x00000003 72 #define VIP_AND_CAM1_REG2_MASK 0x00000003
73 #define VIP_AND_CAM0_REG2_MASK 0x00001FFC 73 #define VIP_AND_CAM0_REG2_MASK 0x00001FFC
74 #define SMI_REG2_MASK 0x0021E000 74 #define SMI_REG2_MASK 0x0021E000
75 #define SSP0_REG2_MASK 0x001E0000 75 #define SSP0_REG2_MASK 0x001E0000
76 #define TS_AND_SSP0_CS2_REG2_MASK 0x00400000 76 #define TS_AND_SSP0_CS2_REG2_MASK 0x00400000
77 #define UART0_REG2_MASK 0x01800000 77 #define UART0_REG2_MASK 0x01800000
78 #define UART1_REG2_MASK 0x06000000 78 #define UART1_REG2_MASK 0x06000000
79 #define I2S_IN_REG2_MASK 0xF8000000 79 #define I2S_IN_REG2_MASK 0xF8000000
80 #define DEVS_GRP_AND_MIPHY_DBG_REG3_MASK 0x000001FE 80 #define DEVS_GRP_AND_MIPHY_DBG_REG3_MASK 0x000001FE
81 #define I2S_OUT_REG3_MASK 0x000001EF 81 #define I2S_OUT_REG3_MASK 0x000001EF
82 #define I2S_IN_REG3_MASK 0x00000010 82 #define I2S_IN_REG3_MASK 0x00000010
83 #define GMAC_REG3_MASK 0xFFFFFE00 83 #define GMAC_REG3_MASK 0xFFFFFE00
84 #define GMAC_REG4_MASK 0x0000001F 84 #define GMAC_REG4_MASK 0x0000001F
85 #define DEVS_GRP_AND_MIPHY_DBG_REG4_MASK 0x7FFFFF20 85 #define DEVS_GRP_AND_MIPHY_DBG_REG4_MASK 0x7FFFFF20
86 #define SSP0_CS3_REG4_MASK 0x00000020 86 #define SSP0_CS3_REG4_MASK 0x00000020
87 #define I2C0_REG4_MASK 0x000000C0 87 #define I2C0_REG4_MASK 0x000000C0
88 #define CEC0_REG4_MASK 0x00000100 88 #define CEC0_REG4_MASK 0x00000100
89 #define CEC1_REG4_MASK 0x00000200 89 #define CEC1_REG4_MASK 0x00000200
90 #define SPDIF_OUT_REG4_MASK 0x00000400 90 #define SPDIF_OUT_REG4_MASK 0x00000400
91 #define CLCD_REG4_MASK 0x7FFFF800 91 #define CLCD_REG4_MASK 0x7FFFF800
92 #define CLCD_AND_ARM_TRACE_REG4_MASK 0x80000000 92 #define CLCD_AND_ARM_TRACE_REG4_MASK 0x80000000
93 #define CLCD_AND_ARM_TRACE_REG5_MASK 0xFFFFFFFF 93 #define CLCD_AND_ARM_TRACE_REG5_MASK 0xFFFFFFFF
94 #define CLCD_AND_ARM_TRACE_REG6_MASK 0x00000001 94 #define CLCD_AND_ARM_TRACE_REG6_MASK 0x00000001
95 #define FSMC_PNOR_AND_MCIF_REG6_MASK 0x073FFFFE 95 #define FSMC_PNOR_AND_MCIF_REG6_MASK 0x073FFFFE
96 #define MCIF_REG6_MASK 0xF8C00000 96 #define MCIF_REG6_MASK 0xF8C00000
97 #define MCIF_REG7_MASK 0x000043FF 97 #define MCIF_REG7_MASK 0x000043FF
98 #define FSMC_8BIT_REG7_MASK 0x07FFBC00 98 #define FSMC_8BIT_REG7_MASK 0x07FFBC00
99 99
100 /* other registers */ 100 /* other registers */
101 #define PERIP_CFG 0x42C 101 #define PERIP_CFG 0x42C
102 /* PERIP_CFG register masks */ 102 /* PERIP_CFG register masks */
103 #define SSP_CS_CTL_HW 0 103 #define SSP_CS_CTL_HW 0
104 #define SSP_CS_CTL_SW 1 104 #define SSP_CS_CTL_SW 1
105 #define SSP_CS_CTL_MASK 1 105 #define SSP_CS_CTL_MASK 1
106 #define SSP_CS_CTL_SHIFT 21 106 #define SSP_CS_CTL_SHIFT 21
107 #define SSP_CS_VAL_MASK 1 107 #define SSP_CS_VAL_MASK 1
108 #define SSP_CS_VAL_SHIFT 20 108 #define SSP_CS_VAL_SHIFT 20
109 #define SSP_CS_SEL_CS0 0 109 #define SSP_CS_SEL_CS0 0
110 #define SSP_CS_SEL_CS1 1 110 #define SSP_CS_SEL_CS1 1
111 #define SSP_CS_SEL_CS2 2 111 #define SSP_CS_SEL_CS2 2
112 #define SSP_CS_SEL_MASK 3 112 #define SSP_CS_SEL_MASK 3
113 #define SSP_CS_SEL_SHIFT 18 113 #define SSP_CS_SEL_SHIFT 18
114 114
115 #define I2S_CHNL_2_0 (0) 115 #define I2S_CHNL_2_0 (0)
116 #define I2S_CHNL_3_1 (1) 116 #define I2S_CHNL_3_1 (1)
117 #define I2S_CHNL_5_1 (2) 117 #define I2S_CHNL_5_1 (2)
118 #define I2S_CHNL_7_1 (3) 118 #define I2S_CHNL_7_1 (3)
119 #define I2S_CHNL_PLAY_SHIFT (4) 119 #define I2S_CHNL_PLAY_SHIFT (4)
120 #define I2S_CHNL_PLAY_MASK (3 << 4) 120 #define I2S_CHNL_PLAY_MASK (3 << 4)
121 #define I2S_CHNL_REC_SHIFT (6) 121 #define I2S_CHNL_REC_SHIFT (6)
122 #define I2S_CHNL_REC_MASK (3 << 6) 122 #define I2S_CHNL_REC_MASK (3 << 6)
123 123
124 #define SPDIF_OUT_ENB_MASK (1 << 2) 124 #define SPDIF_OUT_ENB_MASK (1 << 2)
125 #define SPDIF_OUT_ENB_SHIFT 2 125 #define SPDIF_OUT_ENB_SHIFT 2
126 126
127 #define MCIF_SEL_SD 1 127 #define MCIF_SEL_SD 1
128 #define MCIF_SEL_CF 2 128 #define MCIF_SEL_CF 2
129 #define MCIF_SEL_XD 3 129 #define MCIF_SEL_XD 3
130 #define MCIF_SEL_MASK 3 130 #define MCIF_SEL_MASK 3
131 #define MCIF_SEL_SHIFT 0 131 #define MCIF_SEL_SHIFT 0
132 132
133 #define GMAC_CLK_CFG 0x248 133 #define GMAC_CLK_CFG 0x248
134 #define GMAC_PHY_IF_GMII_VAL (0 << 3) 134 #define GMAC_PHY_IF_GMII_VAL (0 << 3)
135 #define GMAC_PHY_IF_RGMII_VAL (1 << 3) 135 #define GMAC_PHY_IF_RGMII_VAL (1 << 3)
136 #define GMAC_PHY_IF_SGMII_VAL (2 << 3) 136 #define GMAC_PHY_IF_SGMII_VAL (2 << 3)
137 #define GMAC_PHY_IF_RMII_VAL (4 << 3) 137 #define GMAC_PHY_IF_RMII_VAL (4 << 3)
138 #define GMAC_PHY_IF_SEL_MASK (7 << 3) 138 #define GMAC_PHY_IF_SEL_MASK (7 << 3)
139 #define GMAC_PHY_INPUT_ENB_VAL 0 139 #define GMAC_PHY_INPUT_ENB_VAL 0
140 #define GMAC_PHY_SYNT_ENB_VAL 1 140 #define GMAC_PHY_SYNT_ENB_VAL 1
141 #define GMAC_PHY_CLK_MASK 1 141 #define GMAC_PHY_CLK_MASK 1
142 #define GMAC_PHY_CLK_SHIFT 2 142 #define GMAC_PHY_CLK_SHIFT 2
143 #define GMAC_PHY_125M_PAD_VAL 0 143 #define GMAC_PHY_125M_PAD_VAL 0
144 #define GMAC_PHY_PLL2_VAL 1 144 #define GMAC_PHY_PLL2_VAL 1
145 #define GMAC_PHY_OSC3_VAL 2 145 #define GMAC_PHY_OSC3_VAL 2
146 #define GMAC_PHY_INPUT_CLK_MASK 3 146 #define GMAC_PHY_INPUT_CLK_MASK 3
147 #define GMAC_PHY_INPUT_CLK_SHIFT 0 147 #define GMAC_PHY_INPUT_CLK_SHIFT 0
148 148
149 #define PCIE_SATA_CFG 0x424 149 #define PCIE_SATA_CFG 0x424
150 /* PCIE CFG MASks */ 150 /* PCIE CFG MASks */
151 #define PCIE_CFG_DEVICE_PRESENT (1 << 11) 151 #define PCIE_CFG_DEVICE_PRESENT (1 << 11)
152 #define PCIE_CFG_POWERUP_RESET (1 << 10) 152 #define PCIE_CFG_POWERUP_RESET (1 << 10)
153 #define PCIE_CFG_CORE_CLK_EN (1 << 9) 153 #define PCIE_CFG_CORE_CLK_EN (1 << 9)
154 #define PCIE_CFG_AUX_CLK_EN (1 << 8) 154 #define PCIE_CFG_AUX_CLK_EN (1 << 8)
155 #define SATA_CFG_TX_CLK_EN (1 << 4) 155 #define SATA_CFG_TX_CLK_EN (1 << 4)
156 #define SATA_CFG_RX_CLK_EN (1 << 3) 156 #define SATA_CFG_RX_CLK_EN (1 << 3)
157 #define SATA_CFG_POWERUP_RESET (1 << 2) 157 #define SATA_CFG_POWERUP_RESET (1 << 2)
158 #define SATA_CFG_PM_CLK_EN (1 << 1) 158 #define SATA_CFG_PM_CLK_EN (1 << 1)
159 #define PCIE_SATA_SEL_PCIE (0) 159 #define PCIE_SATA_SEL_PCIE (0)
160 #define PCIE_SATA_SEL_SATA (1) 160 #define PCIE_SATA_SEL_SATA (1)
161 #define SATA_PCIE_CFG_MASK 0xF1F 161 #define SATA_PCIE_CFG_MASK 0xF1F
162 #define PCIE_CFG_VAL (PCIE_SATA_SEL_PCIE | PCIE_CFG_AUX_CLK_EN | \ 162 #define PCIE_CFG_VAL (PCIE_SATA_SEL_PCIE | PCIE_CFG_AUX_CLK_EN | \
163 PCIE_CFG_CORE_CLK_EN | PCIE_CFG_POWERUP_RESET |\ 163 PCIE_CFG_CORE_CLK_EN | PCIE_CFG_POWERUP_RESET |\
164 PCIE_CFG_DEVICE_PRESENT) 164 PCIE_CFG_DEVICE_PRESENT)
165 #define SATA_CFG_VAL (PCIE_SATA_SEL_SATA | SATA_CFG_PM_CLK_EN | \ 165 #define SATA_CFG_VAL (PCIE_SATA_SEL_SATA | SATA_CFG_PM_CLK_EN | \
166 SATA_CFG_POWERUP_RESET | SATA_CFG_RX_CLK_EN | \ 166 SATA_CFG_POWERUP_RESET | SATA_CFG_RX_CLK_EN | \
167 SATA_CFG_TX_CLK_EN) 167 SATA_CFG_TX_CLK_EN)
168 168
169 /* Macro's for second level of pmx - pads as primary OR alternate peripheral */ 169 /* Macro's for second level of pmx - pads as primary OR alternate peripheral */
170 /* Write 0 to enable FSMC_16_BIT */ 170 /* Write 0 to enable FSMC_16_BIT */
171 #define KBD_ROW_COL_MASK (1 << 0) 171 #define KBD_ROW_COL_MASK (1 << 0)
172 172
173 /* Write 0 to enable UART0_ENH */ 173 /* Write 0 to enable UART0_ENH */
174 #define GPT_MASK (1 << 1) /* Only clk & cpt */ 174 #define GPT_MASK (1 << 1) /* Only clk & cpt */
175 175
176 /* Write 0 to enable PWM1 */ 176 /* Write 0 to enable PWM1 */
177 #define KBD_COL5_MASK (1 << 2) 177 #define KBD_COL5_MASK (1 << 2)
178 178
179 /* Write 0 to enable PWM2 */ 179 /* Write 0 to enable PWM2 */
180 #define GPT0_TMR0_CPT_MASK (1 << 3) /* Only clk & cpt */ 180 #define GPT0_TMR0_CPT_MASK (1 << 3) /* Only clk & cpt */
181 181
182 /* Write 0 to enable PWM3 */ 182 /* Write 0 to enable PWM3 */
183 #define GPT0_TMR1_CLK_MASK (1 << 4) /* Only clk & cpt */ 183 #define GPT0_TMR1_CLK_MASK (1 << 4) /* Only clk & cpt */
184 184
185 /* Write 0 to enable PWM0 */ 185 /* Write 0 to enable PWM0 */
186 #define SSP0_CS1_MASK (1 << 5) 186 #define SSP0_CS1_MASK (1 << 5)
187 187
188 /* Write 0 to enable VIP */ 188 /* Write 0 to enable VIP */
189 #define CAM3_MASK (1 << 6) 189 #define CAM3_MASK (1 << 6)
190 190
191 /* Write 0 to enable VIP */ 191 /* Write 0 to enable VIP */
192 #define CAM2_MASK (1 << 7) 192 #define CAM2_MASK (1 << 7)
193 193
194 /* Write 0 to enable VIP */ 194 /* Write 0 to enable VIP */
195 #define CAM1_MASK (1 << 8) 195 #define CAM1_MASK (1 << 8)
196 196
197 /* Write 0 to enable VIP */ 197 /* Write 0 to enable VIP */
198 #define CAM0_MASK (1 << 9) 198 #define CAM0_MASK (1 << 9)
199 199
200 /* Write 0 to enable TS */ 200 /* Write 0 to enable TS */
201 #define SSP0_CS2_MASK (1 << 10) 201 #define SSP0_CS2_MASK (1 << 10)
202 202
203 /* Write 0 to enable FSMC PNOR */ 203 /* Write 0 to enable FSMC PNOR */
204 #define MCIF_MASK (1 << 11) 204 #define MCIF_MASK (1 << 11)
205 205
206 /* Write 0 to enable CLCD */ 206 /* Write 0 to enable CLCD */
207 #define ARM_TRACE_MASK (1 << 12) 207 #define ARM_TRACE_MASK (1 << 12)
208 208
209 /* Write 0 to enable I2S, SSP0_CS2, CEC0, 1, SPDIF out, CLCD */ 209 /* Write 0 to enable I2S, SSP0_CS2, CEC0, 1, SPDIF out, CLCD */
210 #define MIPHY_DBG_MASK (1 << 13) 210 #define MIPHY_DBG_MASK (1 << 13)
211 211
212 /* 212 /*
213 * Pad multiplexing for making all pads as gpio's. This is done to override the 213 * Pad multiplexing for making all pads as gpio's. This is done to override the
214 * values passed from bootloader and start from scratch. 214 * values passed from bootloader and start from scratch.
215 */ 215 */
216 static const unsigned pads_as_gpio_pins[] = { 12, 88, 89, 251 }; 216 static const unsigned pads_as_gpio_pins[] = { 12, 88, 89, 251 };
217 static struct spear_muxreg pads_as_gpio_muxreg[] = { 217 static struct spear_muxreg pads_as_gpio_muxreg[] = {
218 { 218 {
219 .reg = PAD_FUNCTION_EN_1, 219 .reg = PAD_FUNCTION_EN_1,
220 .mask = PADS_AS_GPIO_REG0_MASK, 220 .mask = PADS_AS_GPIO_REG0_MASK,
221 .val = 0x0, 221 .val = 0x0,
222 }, { 222 }, {
223 .reg = PAD_FUNCTION_EN_2, 223 .reg = PAD_FUNCTION_EN_2,
224 .mask = PADS_AS_GPIO_REGS_MASK, 224 .mask = PADS_AS_GPIO_REGS_MASK,
225 .val = 0x0, 225 .val = 0x0,
226 }, { 226 }, {
227 .reg = PAD_FUNCTION_EN_3, 227 .reg = PAD_FUNCTION_EN_3,
228 .mask = PADS_AS_GPIO_REGS_MASK, 228 .mask = PADS_AS_GPIO_REGS_MASK,
229 .val = 0x0, 229 .val = 0x0,
230 }, { 230 }, {
231 .reg = PAD_FUNCTION_EN_4, 231 .reg = PAD_FUNCTION_EN_4,
232 .mask = PADS_AS_GPIO_REGS_MASK, 232 .mask = PADS_AS_GPIO_REGS_MASK,
233 .val = 0x0, 233 .val = 0x0,
234 }, { 234 }, {
235 .reg = PAD_FUNCTION_EN_5, 235 .reg = PAD_FUNCTION_EN_5,
236 .mask = PADS_AS_GPIO_REGS_MASK, 236 .mask = PADS_AS_GPIO_REGS_MASK,
237 .val = 0x0, 237 .val = 0x0,
238 }, { 238 }, {
239 .reg = PAD_FUNCTION_EN_6, 239 .reg = PAD_FUNCTION_EN_6,
240 .mask = PADS_AS_GPIO_REGS_MASK, 240 .mask = PADS_AS_GPIO_REGS_MASK,
241 .val = 0x0, 241 .val = 0x0,
242 }, { 242 }, {
243 .reg = PAD_FUNCTION_EN_7, 243 .reg = PAD_FUNCTION_EN_7,
244 .mask = PADS_AS_GPIO_REGS_MASK, 244 .mask = PADS_AS_GPIO_REGS_MASK,
245 .val = 0x0, 245 .val = 0x0,
246 }, { 246 }, {
247 .reg = PAD_FUNCTION_EN_8, 247 .reg = PAD_FUNCTION_EN_8,
248 .mask = PADS_AS_GPIO_REG7_MASK, 248 .mask = PADS_AS_GPIO_REG7_MASK,
249 .val = 0x0, 249 .val = 0x0,
250 }, 250 },
251 }; 251 };
252 252
253 static struct spear_modemux pads_as_gpio_modemux[] = { 253 static struct spear_modemux pads_as_gpio_modemux[] = {
254 { 254 {
255 .muxregs = pads_as_gpio_muxreg, 255 .muxregs = pads_as_gpio_muxreg,
256 .nmuxregs = ARRAY_SIZE(pads_as_gpio_muxreg), 256 .nmuxregs = ARRAY_SIZE(pads_as_gpio_muxreg),
257 }, 257 },
258 }; 258 };
259 259
260 static struct spear_pingroup pads_as_gpio_pingroup = { 260 static struct spear_pingroup pads_as_gpio_pingroup = {
261 .name = "pads_as_gpio_grp", 261 .name = "pads_as_gpio_grp",
262 .pins = pads_as_gpio_pins, 262 .pins = pads_as_gpio_pins,
263 .npins = ARRAY_SIZE(pads_as_gpio_pins), 263 .npins = ARRAY_SIZE(pads_as_gpio_pins),
264 .modemuxs = pads_as_gpio_modemux, 264 .modemuxs = pads_as_gpio_modemux,
265 .nmodemuxs = ARRAY_SIZE(pads_as_gpio_modemux), 265 .nmodemuxs = ARRAY_SIZE(pads_as_gpio_modemux),
266 }; 266 };
267 267
268 static const char *const pads_as_gpio_grps[] = { "pads_as_gpio_grp" }; 268 static const char *const pads_as_gpio_grps[] = { "pads_as_gpio_grp" };
269 static struct spear_function pads_as_gpio_function = { 269 static struct spear_function pads_as_gpio_function = {
270 .name = "pads_as_gpio", 270 .name = "pads_as_gpio",
271 .groups = pads_as_gpio_grps, 271 .groups = pads_as_gpio_grps,
272 .ngroups = ARRAY_SIZE(pads_as_gpio_grps), 272 .ngroups = ARRAY_SIZE(pads_as_gpio_grps),
273 }; 273 };
274 274
275 /* Pad multiplexing for fsmc_8bit device */ 275 /* Pad multiplexing for fsmc_8bit device */
276 static const unsigned fsmc_8bit_pins[] = { 233, 234, 235, 236, 238, 239, 240, 276 static const unsigned fsmc_8bit_pins[] = { 233, 234, 235, 236, 238, 239, 240,
277 241, 242, 243, 244, 245, 246, 247, 248, 249 }; 277 241, 242, 243, 244, 245, 246, 247, 248, 249 };
278 static struct spear_muxreg fsmc_8bit_muxreg[] = { 278 static struct spear_muxreg fsmc_8bit_muxreg[] = {
279 { 279 {
280 .reg = PAD_FUNCTION_EN_8, 280 .reg = PAD_FUNCTION_EN_8,
281 .mask = FSMC_8BIT_REG7_MASK, 281 .mask = FSMC_8BIT_REG7_MASK,
282 .val = FSMC_8BIT_REG7_MASK, 282 .val = FSMC_8BIT_REG7_MASK,
283 } 283 }
284 }; 284 };
285 285
286 static struct spear_modemux fsmc_8bit_modemux[] = { 286 static struct spear_modemux fsmc_8bit_modemux[] = {
287 { 287 {
288 .muxregs = fsmc_8bit_muxreg, 288 .muxregs = fsmc_8bit_muxreg,
289 .nmuxregs = ARRAY_SIZE(fsmc_8bit_muxreg), 289 .nmuxregs = ARRAY_SIZE(fsmc_8bit_muxreg),
290 }, 290 },
291 }; 291 };
292 292
293 static struct spear_pingroup fsmc_8bit_pingroup = { 293 static struct spear_pingroup fsmc_8bit_pingroup = {
294 .name = "fsmc_8bit_grp", 294 .name = "fsmc_8bit_grp",
295 .pins = fsmc_8bit_pins, 295 .pins = fsmc_8bit_pins,
296 .npins = ARRAY_SIZE(fsmc_8bit_pins), 296 .npins = ARRAY_SIZE(fsmc_8bit_pins),
297 .modemuxs = fsmc_8bit_modemux, 297 .modemuxs = fsmc_8bit_modemux,
298 .nmodemuxs = ARRAY_SIZE(fsmc_8bit_modemux), 298 .nmodemuxs = ARRAY_SIZE(fsmc_8bit_modemux),
299 }; 299 };
300 300
301 /* Pad multiplexing for fsmc_16bit device */ 301 /* Pad multiplexing for fsmc_16bit device */
302 static const unsigned fsmc_16bit_pins[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 302 static const unsigned fsmc_16bit_pins[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
303 static struct spear_muxreg fsmc_16bit_muxreg[] = { 303 static struct spear_muxreg fsmc_16bit_muxreg[] = {
304 { 304 {
305 .reg = PAD_SHARED_IP_EN_1, 305 .reg = PAD_SHARED_IP_EN_1,
306 .mask = KBD_ROW_COL_MASK, 306 .mask = KBD_ROW_COL_MASK,
307 .val = 0, 307 .val = 0,
308 }, { 308 }, {
309 .reg = PAD_FUNCTION_EN_1, 309 .reg = PAD_FUNCTION_EN_1,
310 .mask = FSMC_16_BIT_AND_KBD_ROW_COL_REG0_MASK, 310 .mask = FSMC_16_BIT_AND_KBD_ROW_COL_REG0_MASK,
311 .val = FSMC_16_BIT_AND_KBD_ROW_COL_REG0_MASK, 311 .val = FSMC_16_BIT_AND_KBD_ROW_COL_REG0_MASK,
312 }, 312 },
313 }; 313 };
314 314
315 static struct spear_modemux fsmc_16bit_modemux[] = { 315 static struct spear_modemux fsmc_16bit_modemux[] = {
316 { 316 {
317 .muxregs = fsmc_16bit_muxreg, 317 .muxregs = fsmc_16bit_muxreg,
318 .nmuxregs = ARRAY_SIZE(fsmc_16bit_muxreg), 318 .nmuxregs = ARRAY_SIZE(fsmc_16bit_muxreg),
319 }, 319 },
320 }; 320 };
321 321
322 static struct spear_pingroup fsmc_16bit_pingroup = { 322 static struct spear_pingroup fsmc_16bit_pingroup = {
323 .name = "fsmc_16bit_grp", 323 .name = "fsmc_16bit_grp",
324 .pins = fsmc_16bit_pins, 324 .pins = fsmc_16bit_pins,
325 .npins = ARRAY_SIZE(fsmc_16bit_pins), 325 .npins = ARRAY_SIZE(fsmc_16bit_pins),
326 .modemuxs = fsmc_16bit_modemux, 326 .modemuxs = fsmc_16bit_modemux,
327 .nmodemuxs = ARRAY_SIZE(fsmc_16bit_modemux), 327 .nmodemuxs = ARRAY_SIZE(fsmc_16bit_modemux),
328 }; 328 };
329 329
330 /* pad multiplexing for fsmc_pnor device */ 330 /* pad multiplexing for fsmc_pnor device */
331 static const unsigned fsmc_pnor_pins[] = { 192, 193, 194, 195, 196, 197, 198, 331 static const unsigned fsmc_pnor_pins[] = { 192, 193, 194, 195, 196, 197, 198,
332 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 332 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
333 215, 216, 217 }; 333 215, 216, 217 };
334 static struct spear_muxreg fsmc_pnor_muxreg[] = { 334 static struct spear_muxreg fsmc_pnor_muxreg[] = {
335 { 335 {
336 .reg = PAD_SHARED_IP_EN_1, 336 .reg = PAD_SHARED_IP_EN_1,
337 .mask = MCIF_MASK, 337 .mask = MCIF_MASK,
338 .val = 0, 338 .val = 0,
339 }, { 339 }, {
340 .reg = PAD_FUNCTION_EN_7, 340 .reg = PAD_FUNCTION_EN_7,
341 .mask = FSMC_PNOR_AND_MCIF_REG6_MASK, 341 .mask = FSMC_PNOR_AND_MCIF_REG6_MASK,
342 .val = FSMC_PNOR_AND_MCIF_REG6_MASK, 342 .val = FSMC_PNOR_AND_MCIF_REG6_MASK,
343 }, 343 },
344 }; 344 };
345 345
346 static struct spear_modemux fsmc_pnor_modemux[] = { 346 static struct spear_modemux fsmc_pnor_modemux[] = {
347 { 347 {
348 .muxregs = fsmc_pnor_muxreg, 348 .muxregs = fsmc_pnor_muxreg,
349 .nmuxregs = ARRAY_SIZE(fsmc_pnor_muxreg), 349 .nmuxregs = ARRAY_SIZE(fsmc_pnor_muxreg),
350 }, 350 },
351 }; 351 };
352 352
353 static struct spear_pingroup fsmc_pnor_pingroup = { 353 static struct spear_pingroup fsmc_pnor_pingroup = {
354 .name = "fsmc_pnor_grp", 354 .name = "fsmc_pnor_grp",
355 .pins = fsmc_pnor_pins, 355 .pins = fsmc_pnor_pins,
356 .npins = ARRAY_SIZE(fsmc_pnor_pins), 356 .npins = ARRAY_SIZE(fsmc_pnor_pins),
357 .modemuxs = fsmc_pnor_modemux, 357 .modemuxs = fsmc_pnor_modemux,
358 .nmodemuxs = ARRAY_SIZE(fsmc_pnor_modemux), 358 .nmodemuxs = ARRAY_SIZE(fsmc_pnor_modemux),
359 }; 359 };
360 360
361 static const char *const fsmc_grps[] = { "fsmc_8bit_grp", "fsmc_16bit_grp", 361 static const char *const fsmc_grps[] = { "fsmc_8bit_grp", "fsmc_16bit_grp",
362 "fsmc_pnor_grp" }; 362 "fsmc_pnor_grp" };
363 static struct spear_function fsmc_function = { 363 static struct spear_function fsmc_function = {
364 .name = "fsmc", 364 .name = "fsmc",
365 .groups = fsmc_grps, 365 .groups = fsmc_grps,
366 .ngroups = ARRAY_SIZE(fsmc_grps), 366 .ngroups = ARRAY_SIZE(fsmc_grps),
367 }; 367 };
368 368
369 /* pad multiplexing for keyboard rows-cols device */ 369 /* pad multiplexing for keyboard rows-cols device */
370 static const unsigned keyboard_row_col_pins[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 370 static const unsigned keyboard_row_col_pins[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
371 10 }; 371 10 };
372 static struct spear_muxreg keyboard_row_col_muxreg[] = { 372 static struct spear_muxreg keyboard_row_col_muxreg[] = {
373 { 373 {
374 .reg = PAD_SHARED_IP_EN_1, 374 .reg = PAD_SHARED_IP_EN_1,
375 .mask = KBD_ROW_COL_MASK, 375 .mask = KBD_ROW_COL_MASK,
376 .val = KBD_ROW_COL_MASK, 376 .val = KBD_ROW_COL_MASK,
377 }, { 377 }, {
378 .reg = PAD_FUNCTION_EN_1, 378 .reg = PAD_FUNCTION_EN_1,
379 .mask = FSMC_16_BIT_AND_KBD_ROW_COL_REG0_MASK, 379 .mask = FSMC_16_BIT_AND_KBD_ROW_COL_REG0_MASK,
380 .val = FSMC_16_BIT_AND_KBD_ROW_COL_REG0_MASK, 380 .val = FSMC_16_BIT_AND_KBD_ROW_COL_REG0_MASK,
381 }, 381 },
382 }; 382 };
383 383
384 static struct spear_modemux keyboard_row_col_modemux[] = { 384 static struct spear_modemux keyboard_row_col_modemux[] = {
385 { 385 {
386 .muxregs = keyboard_row_col_muxreg, 386 .muxregs = keyboard_row_col_muxreg,
387 .nmuxregs = ARRAY_SIZE(keyboard_row_col_muxreg), 387 .nmuxregs = ARRAY_SIZE(keyboard_row_col_muxreg),
388 }, 388 },
389 }; 389 };
390 390
391 static struct spear_pingroup keyboard_row_col_pingroup = { 391 static struct spear_pingroup keyboard_row_col_pingroup = {
392 .name = "keyboard_row_col_grp", 392 .name = "keyboard_row_col_grp",
393 .pins = keyboard_row_col_pins, 393 .pins = keyboard_row_col_pins,
394 .npins = ARRAY_SIZE(keyboard_row_col_pins), 394 .npins = ARRAY_SIZE(keyboard_row_col_pins),
395 .modemuxs = keyboard_row_col_modemux, 395 .modemuxs = keyboard_row_col_modemux,
396 .nmodemuxs = ARRAY_SIZE(keyboard_row_col_modemux), 396 .nmodemuxs = ARRAY_SIZE(keyboard_row_col_modemux),
397 }; 397 };
398 398
399 /* pad multiplexing for keyboard col5 device */ 399 /* pad multiplexing for keyboard col5 device */
400 static const unsigned keyboard_col5_pins[] = { 17 }; 400 static const unsigned keyboard_col5_pins[] = { 17 };
401 static struct spear_muxreg keyboard_col5_muxreg[] = { 401 static struct spear_muxreg keyboard_col5_muxreg[] = {
402 { 402 {
403 .reg = PAD_SHARED_IP_EN_1, 403 .reg = PAD_SHARED_IP_EN_1,
404 .mask = KBD_COL5_MASK, 404 .mask = KBD_COL5_MASK,
405 .val = KBD_COL5_MASK, 405 .val = KBD_COL5_MASK,
406 }, { 406 }, {
407 .reg = PAD_FUNCTION_EN_1, 407 .reg = PAD_FUNCTION_EN_1,
408 .mask = PWM1_AND_KBD_COL5_REG0_MASK, 408 .mask = PWM1_AND_KBD_COL5_REG0_MASK,
409 .val = PWM1_AND_KBD_COL5_REG0_MASK, 409 .val = PWM1_AND_KBD_COL5_REG0_MASK,
410 }, 410 },
411 }; 411 };
412 412
413 static struct spear_modemux keyboard_col5_modemux[] = { 413 static struct spear_modemux keyboard_col5_modemux[] = {
414 { 414 {
415 .muxregs = keyboard_col5_muxreg, 415 .muxregs = keyboard_col5_muxreg,
416 .nmuxregs = ARRAY_SIZE(keyboard_col5_muxreg), 416 .nmuxregs = ARRAY_SIZE(keyboard_col5_muxreg),
417 }, 417 },
418 }; 418 };
419 419
420 static struct spear_pingroup keyboard_col5_pingroup = { 420 static struct spear_pingroup keyboard_col5_pingroup = {
421 .name = "keyboard_col5_grp", 421 .name = "keyboard_col5_grp",
422 .pins = keyboard_col5_pins, 422 .pins = keyboard_col5_pins,
423 .npins = ARRAY_SIZE(keyboard_col5_pins), 423 .npins = ARRAY_SIZE(keyboard_col5_pins),
424 .modemuxs = keyboard_col5_modemux, 424 .modemuxs = keyboard_col5_modemux,
425 .nmodemuxs = ARRAY_SIZE(keyboard_col5_modemux), 425 .nmodemuxs = ARRAY_SIZE(keyboard_col5_modemux),
426 }; 426 };
427 427
428 static const char *const keyboard_grps[] = { "keyboard_row_col_grp", 428 static const char *const keyboard_grps[] = { "keyboard_row_col_grp",
429 "keyboard_col5_grp" }; 429 "keyboard_col5_grp" };
430 static struct spear_function keyboard_function = { 430 static struct spear_function keyboard_function = {
431 .name = "keyboard", 431 .name = "keyboard",
432 .groups = keyboard_grps, 432 .groups = keyboard_grps,
433 .ngroups = ARRAY_SIZE(keyboard_grps), 433 .ngroups = ARRAY_SIZE(keyboard_grps),
434 }; 434 };
435 435
436 /* pad multiplexing for spdif_in device */ 436 /* pad multiplexing for spdif_in device */
437 static const unsigned spdif_in_pins[] = { 19 }; 437 static const unsigned spdif_in_pins[] = { 19 };
438 static struct spear_muxreg spdif_in_muxreg[] = { 438 static struct spear_muxreg spdif_in_muxreg[] = {
439 { 439 {
440 .reg = PAD_FUNCTION_EN_1, 440 .reg = PAD_FUNCTION_EN_1,
441 .mask = SPDIF_IN_REG0_MASK, 441 .mask = SPDIF_IN_REG0_MASK,
442 .val = SPDIF_IN_REG0_MASK, 442 .val = SPDIF_IN_REG0_MASK,
443 }, 443 },
444 }; 444 };
445 445
446 static struct spear_modemux spdif_in_modemux[] = { 446 static struct spear_modemux spdif_in_modemux[] = {
447 { 447 {
448 .muxregs = spdif_in_muxreg, 448 .muxregs = spdif_in_muxreg,
449 .nmuxregs = ARRAY_SIZE(spdif_in_muxreg), 449 .nmuxregs = ARRAY_SIZE(spdif_in_muxreg),
450 }, 450 },
451 }; 451 };
452 452
453 static struct spear_pingroup spdif_in_pingroup = { 453 static struct spear_pingroup spdif_in_pingroup = {
454 .name = "spdif_in_grp", 454 .name = "spdif_in_grp",
455 .pins = spdif_in_pins, 455 .pins = spdif_in_pins,
456 .npins = ARRAY_SIZE(spdif_in_pins), 456 .npins = ARRAY_SIZE(spdif_in_pins),
457 .modemuxs = spdif_in_modemux, 457 .modemuxs = spdif_in_modemux,
458 .nmodemuxs = ARRAY_SIZE(spdif_in_modemux), 458 .nmodemuxs = ARRAY_SIZE(spdif_in_modemux),
459 }; 459 };
460 460
461 static const char *const spdif_in_grps[] = { "spdif_in_grp" }; 461 static const char *const spdif_in_grps[] = { "spdif_in_grp" };
462 static struct spear_function spdif_in_function = { 462 static struct spear_function spdif_in_function = {
463 .name = "spdif_in", 463 .name = "spdif_in",
464 .groups = spdif_in_grps, 464 .groups = spdif_in_grps,
465 .ngroups = ARRAY_SIZE(spdif_in_grps), 465 .ngroups = ARRAY_SIZE(spdif_in_grps),
466 }; 466 };
467 467
468 /* pad multiplexing for spdif_out device */ 468 /* pad multiplexing for spdif_out device */
469 static const unsigned spdif_out_pins[] = { 137 }; 469 static const unsigned spdif_out_pins[] = { 137 };
470 static struct spear_muxreg spdif_out_muxreg[] = { 470 static struct spear_muxreg spdif_out_muxreg[] = {
471 { 471 {
472 .reg = PAD_FUNCTION_EN_5, 472 .reg = PAD_FUNCTION_EN_5,
473 .mask = SPDIF_OUT_REG4_MASK, 473 .mask = SPDIF_OUT_REG4_MASK,
474 .val = SPDIF_OUT_REG4_MASK, 474 .val = SPDIF_OUT_REG4_MASK,
475 }, { 475 }, {
476 .reg = PERIP_CFG, 476 .reg = PERIP_CFG,
477 .mask = SPDIF_OUT_ENB_MASK, 477 .mask = SPDIF_OUT_ENB_MASK,
478 .val = SPDIF_OUT_ENB_MASK, 478 .val = SPDIF_OUT_ENB_MASK,
479 } 479 }
480 }; 480 };
481 481
482 static struct spear_modemux spdif_out_modemux[] = { 482 static struct spear_modemux spdif_out_modemux[] = {
483 { 483 {
484 .muxregs = spdif_out_muxreg, 484 .muxregs = spdif_out_muxreg,
485 .nmuxregs = ARRAY_SIZE(spdif_out_muxreg), 485 .nmuxregs = ARRAY_SIZE(spdif_out_muxreg),
486 }, 486 },
487 }; 487 };
488 488
489 static struct spear_pingroup spdif_out_pingroup = { 489 static struct spear_pingroup spdif_out_pingroup = {
490 .name = "spdif_out_grp", 490 .name = "spdif_out_grp",
491 .pins = spdif_out_pins, 491 .pins = spdif_out_pins,
492 .npins = ARRAY_SIZE(spdif_out_pins), 492 .npins = ARRAY_SIZE(spdif_out_pins),
493 .modemuxs = spdif_out_modemux, 493 .modemuxs = spdif_out_modemux,
494 .nmodemuxs = ARRAY_SIZE(spdif_out_modemux), 494 .nmodemuxs = ARRAY_SIZE(spdif_out_modemux),
495 }; 495 };
496 496
497 static const char *const spdif_out_grps[] = { "spdif_out_grp" }; 497 static const char *const spdif_out_grps[] = { "spdif_out_grp" };
498 static struct spear_function spdif_out_function = { 498 static struct spear_function spdif_out_function = {
499 .name = "spdif_out", 499 .name = "spdif_out",
500 .groups = spdif_out_grps, 500 .groups = spdif_out_grps,
501 .ngroups = ARRAY_SIZE(spdif_out_grps), 501 .ngroups = ARRAY_SIZE(spdif_out_grps),
502 }; 502 };
503 503
504 /* pad multiplexing for gpt_0_1 device */ 504 /* pad multiplexing for gpt_0_1 device */
505 static const unsigned gpt_0_1_pins[] = { 11, 12, 13, 14, 15, 16, 21, 22 }; 505 static const unsigned gpt_0_1_pins[] = { 11, 12, 13, 14, 15, 16, 21, 22 };
506 static struct spear_muxreg gpt_0_1_muxreg[] = { 506 static struct spear_muxreg gpt_0_1_muxreg[] = {
507 { 507 {
508 .reg = PAD_SHARED_IP_EN_1, 508 .reg = PAD_SHARED_IP_EN_1,
509 .mask = GPT_MASK | GPT0_TMR0_CPT_MASK | GPT0_TMR1_CLK_MASK, 509 .mask = GPT_MASK | GPT0_TMR0_CPT_MASK | GPT0_TMR1_CLK_MASK,
510 .val = GPT_MASK | GPT0_TMR0_CPT_MASK | GPT0_TMR1_CLK_MASK, 510 .val = GPT_MASK | GPT0_TMR0_CPT_MASK | GPT0_TMR1_CLK_MASK,
511 }, { 511 }, {
512 .reg = PAD_FUNCTION_EN_1, 512 .reg = PAD_FUNCTION_EN_1,
513 .mask = UART0_ENH_AND_GPT_REG0_MASK | 513 .mask = UART0_ENH_AND_GPT_REG0_MASK |
514 PWM2_AND_GPT0_TMR0_CPT_REG0_MASK | 514 PWM2_AND_GPT0_TMR0_CPT_REG0_MASK |
515 PWM3_AND_GPT0_TMR1_CLK_REG0_MASK, 515 PWM3_AND_GPT0_TMR1_CLK_REG0_MASK,
516 .val = UART0_ENH_AND_GPT_REG0_MASK | 516 .val = UART0_ENH_AND_GPT_REG0_MASK |
517 PWM2_AND_GPT0_TMR0_CPT_REG0_MASK | 517 PWM2_AND_GPT0_TMR0_CPT_REG0_MASK |
518 PWM3_AND_GPT0_TMR1_CLK_REG0_MASK, 518 PWM3_AND_GPT0_TMR1_CLK_REG0_MASK,
519 }, 519 },
520 }; 520 };
521 521
522 static struct spear_modemux gpt_0_1_modemux[] = { 522 static struct spear_modemux gpt_0_1_modemux[] = {
523 { 523 {
524 .muxregs = gpt_0_1_muxreg, 524 .muxregs = gpt_0_1_muxreg,
525 .nmuxregs = ARRAY_SIZE(gpt_0_1_muxreg), 525 .nmuxregs = ARRAY_SIZE(gpt_0_1_muxreg),
526 }, 526 },
527 }; 527 };
528 528
529 static struct spear_pingroup gpt_0_1_pingroup = { 529 static struct spear_pingroup gpt_0_1_pingroup = {
530 .name = "gpt_0_1_grp", 530 .name = "gpt_0_1_grp",
531 .pins = gpt_0_1_pins, 531 .pins = gpt_0_1_pins,
532 .npins = ARRAY_SIZE(gpt_0_1_pins), 532 .npins = ARRAY_SIZE(gpt_0_1_pins),
533 .modemuxs = gpt_0_1_modemux, 533 .modemuxs = gpt_0_1_modemux,
534 .nmodemuxs = ARRAY_SIZE(gpt_0_1_modemux), 534 .nmodemuxs = ARRAY_SIZE(gpt_0_1_modemux),
535 }; 535 };
536 536
537 static const char *const gpt_0_1_grps[] = { "gpt_0_1_grp" }; 537 static const char *const gpt_0_1_grps[] = { "gpt_0_1_grp" };
538 static struct spear_function gpt_0_1_function = { 538 static struct spear_function gpt_0_1_function = {
539 .name = "gpt_0_1", 539 .name = "gpt_0_1",
540 .groups = gpt_0_1_grps, 540 .groups = gpt_0_1_grps,
541 .ngroups = ARRAY_SIZE(gpt_0_1_grps), 541 .ngroups = ARRAY_SIZE(gpt_0_1_grps),
542 }; 542 };
543 543
544 /* pad multiplexing for pwm0 device */ 544 /* pad multiplexing for pwm0 device */
545 static const unsigned pwm0_pins[] = { 24 }; 545 static const unsigned pwm0_pins[] = { 24 };
546 static struct spear_muxreg pwm0_muxreg[] = { 546 static struct spear_muxreg pwm0_muxreg[] = {
547 { 547 {
548 .reg = PAD_SHARED_IP_EN_1, 548 .reg = PAD_SHARED_IP_EN_1,
549 .mask = SSP0_CS1_MASK, 549 .mask = SSP0_CS1_MASK,
550 .val = 0, 550 .val = 0,
551 }, { 551 }, {
552 .reg = PAD_FUNCTION_EN_1, 552 .reg = PAD_FUNCTION_EN_1,
553 .mask = PWM0_AND_SSP0_CS1_REG0_MASK, 553 .mask = PWM0_AND_SSP0_CS1_REG0_MASK,
554 .val = PWM0_AND_SSP0_CS1_REG0_MASK, 554 .val = PWM0_AND_SSP0_CS1_REG0_MASK,
555 }, 555 },
556 }; 556 };
557 557
558 static struct spear_modemux pwm0_modemux[] = { 558 static struct spear_modemux pwm0_modemux[] = {
559 { 559 {
560 .muxregs = pwm0_muxreg, 560 .muxregs = pwm0_muxreg,
561 .nmuxregs = ARRAY_SIZE(pwm0_muxreg), 561 .nmuxregs = ARRAY_SIZE(pwm0_muxreg),
562 }, 562 },
563 }; 563 };
564 564
565 static struct spear_pingroup pwm0_pingroup = { 565 static struct spear_pingroup pwm0_pingroup = {
566 .name = "pwm0_grp", 566 .name = "pwm0_grp",
567 .pins = pwm0_pins, 567 .pins = pwm0_pins,
568 .npins = ARRAY_SIZE(pwm0_pins), 568 .npins = ARRAY_SIZE(pwm0_pins),
569 .modemuxs = pwm0_modemux, 569 .modemuxs = pwm0_modemux,
570 .nmodemuxs = ARRAY_SIZE(pwm0_modemux), 570 .nmodemuxs = ARRAY_SIZE(pwm0_modemux),
571 }; 571 };
572 572
573 /* pad multiplexing for pwm1 device */ 573 /* pad multiplexing for pwm1 device */
574 static const unsigned pwm1_pins[] = { 17 }; 574 static const unsigned pwm1_pins[] = { 17 };
575 static struct spear_muxreg pwm1_muxreg[] = { 575 static struct spear_muxreg pwm1_muxreg[] = {
576 { 576 {
577 .reg = PAD_SHARED_IP_EN_1, 577 .reg = PAD_SHARED_IP_EN_1,
578 .mask = KBD_COL5_MASK, 578 .mask = KBD_COL5_MASK,
579 .val = 0, 579 .val = 0,
580 }, { 580 }, {
581 .reg = PAD_FUNCTION_EN_1, 581 .reg = PAD_FUNCTION_EN_1,
582 .mask = PWM1_AND_KBD_COL5_REG0_MASK, 582 .mask = PWM1_AND_KBD_COL5_REG0_MASK,
583 .val = PWM1_AND_KBD_COL5_REG0_MASK, 583 .val = PWM1_AND_KBD_COL5_REG0_MASK,
584 }, 584 },
585 }; 585 };
586 586
587 static struct spear_modemux pwm1_modemux[] = { 587 static struct spear_modemux pwm1_modemux[] = {
588 { 588 {
589 .muxregs = pwm1_muxreg, 589 .muxregs = pwm1_muxreg,
590 .nmuxregs = ARRAY_SIZE(pwm1_muxreg), 590 .nmuxregs = ARRAY_SIZE(pwm1_muxreg),
591 }, 591 },
592 }; 592 };
593 593
594 static struct spear_pingroup pwm1_pingroup = { 594 static struct spear_pingroup pwm1_pingroup = {
595 .name = "pwm1_grp", 595 .name = "pwm1_grp",
596 .pins = pwm1_pins, 596 .pins = pwm1_pins,
597 .npins = ARRAY_SIZE(pwm1_pins), 597 .npins = ARRAY_SIZE(pwm1_pins),
598 .modemuxs = pwm1_modemux, 598 .modemuxs = pwm1_modemux,
599 .nmodemuxs = ARRAY_SIZE(pwm1_modemux), 599 .nmodemuxs = ARRAY_SIZE(pwm1_modemux),
600 }; 600 };
601 601
602 /* pad multiplexing for pwm2 device */ 602 /* pad multiplexing for pwm2 device */
603 static const unsigned pwm2_pins[] = { 21 }; 603 static const unsigned pwm2_pins[] = { 21 };
604 static struct spear_muxreg pwm2_muxreg[] = { 604 static struct spear_muxreg pwm2_muxreg[] = {
605 { 605 {
606 .reg = PAD_SHARED_IP_EN_1, 606 .reg = PAD_SHARED_IP_EN_1,
607 .mask = GPT0_TMR0_CPT_MASK, 607 .mask = GPT0_TMR0_CPT_MASK,
608 .val = 0, 608 .val = 0,
609 }, { 609 }, {
610 .reg = PAD_FUNCTION_EN_1, 610 .reg = PAD_FUNCTION_EN_1,
611 .mask = PWM2_AND_GPT0_TMR0_CPT_REG0_MASK, 611 .mask = PWM2_AND_GPT0_TMR0_CPT_REG0_MASK,
612 .val = PWM2_AND_GPT0_TMR0_CPT_REG0_MASK, 612 .val = PWM2_AND_GPT0_TMR0_CPT_REG0_MASK,
613 }, 613 },
614 }; 614 };
615 615
616 static struct spear_modemux pwm2_modemux[] = { 616 static struct spear_modemux pwm2_modemux[] = {
617 { 617 {
618 .muxregs = pwm2_muxreg, 618 .muxregs = pwm2_muxreg,
619 .nmuxregs = ARRAY_SIZE(pwm2_muxreg), 619 .nmuxregs = ARRAY_SIZE(pwm2_muxreg),
620 }, 620 },
621 }; 621 };
622 622
623 static struct spear_pingroup pwm2_pingroup = { 623 static struct spear_pingroup pwm2_pingroup = {
624 .name = "pwm2_grp", 624 .name = "pwm2_grp",
625 .pins = pwm2_pins, 625 .pins = pwm2_pins,
626 .npins = ARRAY_SIZE(pwm2_pins), 626 .npins = ARRAY_SIZE(pwm2_pins),
627 .modemuxs = pwm2_modemux, 627 .modemuxs = pwm2_modemux,
628 .nmodemuxs = ARRAY_SIZE(pwm2_modemux), 628 .nmodemuxs = ARRAY_SIZE(pwm2_modemux),
629 }; 629 };
630 630
631 /* pad multiplexing for pwm3 device */ 631 /* pad multiplexing for pwm3 device */
632 static const unsigned pwm3_pins[] = { 22 }; 632 static const unsigned pwm3_pins[] = { 22 };
633 static struct spear_muxreg pwm3_muxreg[] = { 633 static struct spear_muxreg pwm3_muxreg[] = {
634 { 634 {
635 .reg = PAD_SHARED_IP_EN_1, 635 .reg = PAD_SHARED_IP_EN_1,
636 .mask = GPT0_TMR1_CLK_MASK, 636 .mask = GPT0_TMR1_CLK_MASK,
637 .val = 0, 637 .val = 0,
638 }, { 638 }, {
639 .reg = PAD_FUNCTION_EN_1, 639 .reg = PAD_FUNCTION_EN_1,
640 .mask = PWM3_AND_GPT0_TMR1_CLK_REG0_MASK, 640 .mask = PWM3_AND_GPT0_TMR1_CLK_REG0_MASK,
641 .val = PWM3_AND_GPT0_TMR1_CLK_REG0_MASK, 641 .val = PWM3_AND_GPT0_TMR1_CLK_REG0_MASK,
642 }, 642 },
643 }; 643 };
644 644
645 static struct spear_modemux pwm3_modemux[] = { 645 static struct spear_modemux pwm3_modemux[] = {
646 { 646 {
647 .muxregs = pwm3_muxreg, 647 .muxregs = pwm3_muxreg,
648 .nmuxregs = ARRAY_SIZE(pwm3_muxreg), 648 .nmuxregs = ARRAY_SIZE(pwm3_muxreg),
649 }, 649 },
650 }; 650 };
651 651
652 static struct spear_pingroup pwm3_pingroup = { 652 static struct spear_pingroup pwm3_pingroup = {
653 .name = "pwm3_grp", 653 .name = "pwm3_grp",
654 .pins = pwm3_pins, 654 .pins = pwm3_pins,
655 .npins = ARRAY_SIZE(pwm3_pins), 655 .npins = ARRAY_SIZE(pwm3_pins),
656 .modemuxs = pwm3_modemux, 656 .modemuxs = pwm3_modemux,
657 .nmodemuxs = ARRAY_SIZE(pwm3_modemux), 657 .nmodemuxs = ARRAY_SIZE(pwm3_modemux),
658 }; 658 };
659 659
660 static const char *const pwm_grps[] = { "pwm0_grp", "pwm1_grp", "pwm2_grp", 660 static const char *const pwm_grps[] = { "pwm0_grp", "pwm1_grp", "pwm2_grp",
661 "pwm3_grp" }; 661 "pwm3_grp" };
662 static struct spear_function pwm_function = { 662 static struct spear_function pwm_function = {
663 .name = "pwm", 663 .name = "pwm",
664 .groups = pwm_grps, 664 .groups = pwm_grps,
665 .ngroups = ARRAY_SIZE(pwm_grps), 665 .ngroups = ARRAY_SIZE(pwm_grps),
666 }; 666 };
667 667
668 /* pad multiplexing for vip_mux device */ 668 /* pad multiplexing for vip_mux device */
669 static const unsigned vip_mux_pins[] = { 35, 36, 37, 38, 40, 41, 42, 43 }; 669 static const unsigned vip_mux_pins[] = { 35, 36, 37, 38, 40, 41, 42, 43 };
670 static struct spear_muxreg vip_mux_muxreg[] = { 670 static struct spear_muxreg vip_mux_muxreg[] = {
671 { 671 {
672 .reg = PAD_FUNCTION_EN_2, 672 .reg = PAD_FUNCTION_EN_2,
673 .mask = VIP_REG1_MASK, 673 .mask = VIP_REG1_MASK,
674 .val = VIP_REG1_MASK, 674 .val = VIP_REG1_MASK,
675 }, 675 },
676 }; 676 };
677 677
678 static struct spear_modemux vip_mux_modemux[] = { 678 static struct spear_modemux vip_mux_modemux[] = {
679 { 679 {
680 .muxregs = vip_mux_muxreg, 680 .muxregs = vip_mux_muxreg,
681 .nmuxregs = ARRAY_SIZE(vip_mux_muxreg), 681 .nmuxregs = ARRAY_SIZE(vip_mux_muxreg),
682 }, 682 },
683 }; 683 };
684 684
685 static struct spear_pingroup vip_mux_pingroup = { 685 static struct spear_pingroup vip_mux_pingroup = {
686 .name = "vip_mux_grp", 686 .name = "vip_mux_grp",
687 .pins = vip_mux_pins, 687 .pins = vip_mux_pins,
688 .npins = ARRAY_SIZE(vip_mux_pins), 688 .npins = ARRAY_SIZE(vip_mux_pins),
689 .modemuxs = vip_mux_modemux, 689 .modemuxs = vip_mux_modemux,
690 .nmodemuxs = ARRAY_SIZE(vip_mux_modemux), 690 .nmodemuxs = ARRAY_SIZE(vip_mux_modemux),
691 }; 691 };
692 692
693 /* pad multiplexing for vip_mux_cam0 (disables cam0) device */ 693 /* pad multiplexing for vip_mux_cam0 (disables cam0) device */
694 static const unsigned vip_mux_cam0_pins[] = { 65, 66, 67, 68, 69, 70, 71, 72, 694 static const unsigned vip_mux_cam0_pins[] = { 65, 66, 67, 68, 69, 70, 71, 72,
695 73, 74, 75 }; 695 73, 74, 75 };
696 static struct spear_muxreg vip_mux_cam0_muxreg[] = { 696 static struct spear_muxreg vip_mux_cam0_muxreg[] = {
697 { 697 {
698 .reg = PAD_SHARED_IP_EN_1, 698 .reg = PAD_SHARED_IP_EN_1,
699 .mask = CAM0_MASK, 699 .mask = CAM0_MASK,
700 .val = 0, 700 .val = 0,
701 }, { 701 }, {
702 .reg = PAD_FUNCTION_EN_3, 702 .reg = PAD_FUNCTION_EN_3,
703 .mask = VIP_AND_CAM0_REG2_MASK, 703 .mask = VIP_AND_CAM0_REG2_MASK,
704 .val = VIP_AND_CAM0_REG2_MASK, 704 .val = VIP_AND_CAM0_REG2_MASK,
705 }, 705 },
706 }; 706 };
707 707
708 static struct spear_modemux vip_mux_cam0_modemux[] = { 708 static struct spear_modemux vip_mux_cam0_modemux[] = {
709 { 709 {
710 .muxregs = vip_mux_cam0_muxreg, 710 .muxregs = vip_mux_cam0_muxreg,
711 .nmuxregs = ARRAY_SIZE(vip_mux_cam0_muxreg), 711 .nmuxregs = ARRAY_SIZE(vip_mux_cam0_muxreg),
712 }, 712 },
713 }; 713 };
714 714
715 static struct spear_pingroup vip_mux_cam0_pingroup = { 715 static struct spear_pingroup vip_mux_cam0_pingroup = {
716 .name = "vip_mux_cam0_grp", 716 .name = "vip_mux_cam0_grp",
717 .pins = vip_mux_cam0_pins, 717 .pins = vip_mux_cam0_pins,
718 .npins = ARRAY_SIZE(vip_mux_cam0_pins), 718 .npins = ARRAY_SIZE(vip_mux_cam0_pins),
719 .modemuxs = vip_mux_cam0_modemux, 719 .modemuxs = vip_mux_cam0_modemux,
720 .nmodemuxs = ARRAY_SIZE(vip_mux_cam0_modemux), 720 .nmodemuxs = ARRAY_SIZE(vip_mux_cam0_modemux),
721 }; 721 };
722 722
723 /* pad multiplexing for vip_mux_cam1 (disables cam1) device */ 723 /* pad multiplexing for vip_mux_cam1 (disables cam1) device */
724 static const unsigned vip_mux_cam1_pins[] = { 54, 55, 56, 57, 58, 59, 60, 61, 724 static const unsigned vip_mux_cam1_pins[] = { 54, 55, 56, 57, 58, 59, 60, 61,
725 62, 63, 64 }; 725 62, 63, 64 };
726 static struct spear_muxreg vip_mux_cam1_muxreg[] = { 726 static struct spear_muxreg vip_mux_cam1_muxreg[] = {
727 { 727 {
728 .reg = PAD_SHARED_IP_EN_1, 728 .reg = PAD_SHARED_IP_EN_1,
729 .mask = CAM1_MASK, 729 .mask = CAM1_MASK,
730 .val = 0, 730 .val = 0,
731 }, { 731 }, {
732 .reg = PAD_FUNCTION_EN_2, 732 .reg = PAD_FUNCTION_EN_2,
733 .mask = VIP_AND_CAM1_REG1_MASK, 733 .mask = VIP_AND_CAM1_REG1_MASK,
734 .val = VIP_AND_CAM1_REG1_MASK, 734 .val = VIP_AND_CAM1_REG1_MASK,
735 }, { 735 }, {
736 .reg = PAD_FUNCTION_EN_3, 736 .reg = PAD_FUNCTION_EN_3,
737 .mask = VIP_AND_CAM1_REG2_MASK, 737 .mask = VIP_AND_CAM1_REG2_MASK,
738 .val = VIP_AND_CAM1_REG2_MASK, 738 .val = VIP_AND_CAM1_REG2_MASK,
739 }, 739 },
740 }; 740 };
741 741
742 static struct spear_modemux vip_mux_cam1_modemux[] = { 742 static struct spear_modemux vip_mux_cam1_modemux[] = {
743 { 743 {
744 .muxregs = vip_mux_cam1_muxreg, 744 .muxregs = vip_mux_cam1_muxreg,
745 .nmuxregs = ARRAY_SIZE(vip_mux_cam1_muxreg), 745 .nmuxregs = ARRAY_SIZE(vip_mux_cam1_muxreg),
746 }, 746 },
747 }; 747 };
748 748
749 static struct spear_pingroup vip_mux_cam1_pingroup = { 749 static struct spear_pingroup vip_mux_cam1_pingroup = {
750 .name = "vip_mux_cam1_grp", 750 .name = "vip_mux_cam1_grp",
751 .pins = vip_mux_cam1_pins, 751 .pins = vip_mux_cam1_pins,
752 .npins = ARRAY_SIZE(vip_mux_cam1_pins), 752 .npins = ARRAY_SIZE(vip_mux_cam1_pins),
753 .modemuxs = vip_mux_cam1_modemux, 753 .modemuxs = vip_mux_cam1_modemux,
754 .nmodemuxs = ARRAY_SIZE(vip_mux_cam1_modemux), 754 .nmodemuxs = ARRAY_SIZE(vip_mux_cam1_modemux),
755 }; 755 };
756 756
757 /* pad multiplexing for vip_mux_cam2 (disables cam2) device */ 757 /* pad multiplexing for vip_mux_cam2 (disables cam2) device */
758 static const unsigned vip_mux_cam2_pins[] = { 39, 44, 45, 46, 47, 48, 49, 50, 758 static const unsigned vip_mux_cam2_pins[] = { 39, 44, 45, 46, 47, 48, 49, 50,
759 51, 52, 53 }; 759 51, 52, 53 };
760 static struct spear_muxreg vip_mux_cam2_muxreg[] = { 760 static struct spear_muxreg vip_mux_cam2_muxreg[] = {
761 { 761 {
762 .reg = PAD_SHARED_IP_EN_1, 762 .reg = PAD_SHARED_IP_EN_1,
763 .mask = CAM2_MASK, 763 .mask = CAM2_MASK,
764 .val = 0, 764 .val = 0,
765 }, { 765 }, {
766 .reg = PAD_FUNCTION_EN_2, 766 .reg = PAD_FUNCTION_EN_2,
767 .mask = VIP_AND_CAM2_REG1_MASK, 767 .mask = VIP_AND_CAM2_REG1_MASK,
768 .val = VIP_AND_CAM2_REG1_MASK, 768 .val = VIP_AND_CAM2_REG1_MASK,
769 }, 769 },
770 }; 770 };
771 771
772 static struct spear_modemux vip_mux_cam2_modemux[] = { 772 static struct spear_modemux vip_mux_cam2_modemux[] = {
773 { 773 {
774 .muxregs = vip_mux_cam2_muxreg, 774 .muxregs = vip_mux_cam2_muxreg,
775 .nmuxregs = ARRAY_SIZE(vip_mux_cam2_muxreg), 775 .nmuxregs = ARRAY_SIZE(vip_mux_cam2_muxreg),
776 }, 776 },
777 }; 777 };
778 778
779 static struct spear_pingroup vip_mux_cam2_pingroup = { 779 static struct spear_pingroup vip_mux_cam2_pingroup = {
780 .name = "vip_mux_cam2_grp", 780 .name = "vip_mux_cam2_grp",
781 .pins = vip_mux_cam2_pins, 781 .pins = vip_mux_cam2_pins,
782 .npins = ARRAY_SIZE(vip_mux_cam2_pins), 782 .npins = ARRAY_SIZE(vip_mux_cam2_pins),
783 .modemuxs = vip_mux_cam2_modemux, 783 .modemuxs = vip_mux_cam2_modemux,
784 .nmodemuxs = ARRAY_SIZE(vip_mux_cam2_modemux), 784 .nmodemuxs = ARRAY_SIZE(vip_mux_cam2_modemux),
785 }; 785 };
786 786
787 /* pad multiplexing for vip_mux_cam3 (disables cam3) device */ 787 /* pad multiplexing for vip_mux_cam3 (disables cam3) device */
788 static const unsigned vip_mux_cam3_pins[] = { 20, 25, 26, 27, 28, 29, 30, 31, 788 static const unsigned vip_mux_cam3_pins[] = { 20, 25, 26, 27, 28, 29, 30, 31,
789 32, 33, 34 }; 789 32, 33, 34 };
790 static struct spear_muxreg vip_mux_cam3_muxreg[] = { 790 static struct spear_muxreg vip_mux_cam3_muxreg[] = {
791 { 791 {
792 .reg = PAD_SHARED_IP_EN_1, 792 .reg = PAD_SHARED_IP_EN_1,
793 .mask = CAM3_MASK, 793 .mask = CAM3_MASK,
794 .val = 0, 794 .val = 0,
795 }, { 795 }, {
796 .reg = PAD_FUNCTION_EN_1, 796 .reg = PAD_FUNCTION_EN_1,
797 .mask = VIP_AND_CAM3_REG0_MASK, 797 .mask = VIP_AND_CAM3_REG0_MASK,
798 .val = VIP_AND_CAM3_REG0_MASK, 798 .val = VIP_AND_CAM3_REG0_MASK,
799 }, { 799 }, {
800 .reg = PAD_FUNCTION_EN_2, 800 .reg = PAD_FUNCTION_EN_2,
801 .mask = VIP_AND_CAM3_REG1_MASK, 801 .mask = VIP_AND_CAM3_REG1_MASK,
802 .val = VIP_AND_CAM3_REG1_MASK, 802 .val = VIP_AND_CAM3_REG1_MASK,
803 }, 803 },
804 }; 804 };
805 805
806 static struct spear_modemux vip_mux_cam3_modemux[] = { 806 static struct spear_modemux vip_mux_cam3_modemux[] = {
807 { 807 {
808 .muxregs = vip_mux_cam3_muxreg, 808 .muxregs = vip_mux_cam3_muxreg,
809 .nmuxregs = ARRAY_SIZE(vip_mux_cam3_muxreg), 809 .nmuxregs = ARRAY_SIZE(vip_mux_cam3_muxreg),
810 }, 810 },
811 }; 811 };
812 812
813 static struct spear_pingroup vip_mux_cam3_pingroup = { 813 static struct spear_pingroup vip_mux_cam3_pingroup = {
814 .name = "vip_mux_cam3_grp", 814 .name = "vip_mux_cam3_grp",
815 .pins = vip_mux_cam3_pins, 815 .pins = vip_mux_cam3_pins,
816 .npins = ARRAY_SIZE(vip_mux_cam3_pins), 816 .npins = ARRAY_SIZE(vip_mux_cam3_pins),
817 .modemuxs = vip_mux_cam3_modemux, 817 .modemuxs = vip_mux_cam3_modemux,
818 .nmodemuxs = ARRAY_SIZE(vip_mux_cam3_modemux), 818 .nmodemuxs = ARRAY_SIZE(vip_mux_cam3_modemux),
819 }; 819 };
820 820
821 static const char *const vip_grps[] = { "vip_mux_grp", "vip_mux_cam0_grp" , 821 static const char *const vip_grps[] = { "vip_mux_grp", "vip_mux_cam0_grp" ,
822 "vip_mux_cam1_grp" , "vip_mux_cam2_grp", "vip_mux_cam3_grp" }; 822 "vip_mux_cam1_grp" , "vip_mux_cam2_grp", "vip_mux_cam3_grp" };
823 static struct spear_function vip_function = { 823 static struct spear_function vip_function = {
824 .name = "vip", 824 .name = "vip",
825 .groups = vip_grps, 825 .groups = vip_grps,
826 .ngroups = ARRAY_SIZE(vip_grps), 826 .ngroups = ARRAY_SIZE(vip_grps),
827 }; 827 };
828 828
829 /* pad multiplexing for cam0 device */ 829 /* pad multiplexing for cam0 device */
830 static const unsigned cam0_pins[] = { 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75 830 static const unsigned cam0_pins[] = { 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75
831 }; 831 };
832 static struct spear_muxreg cam0_muxreg[] = { 832 static struct spear_muxreg cam0_muxreg[] = {
833 { 833 {
834 .reg = PAD_SHARED_IP_EN_1, 834 .reg = PAD_SHARED_IP_EN_1,
835 .mask = CAM0_MASK, 835 .mask = CAM0_MASK,
836 .val = CAM0_MASK, 836 .val = CAM0_MASK,
837 }, { 837 }, {
838 .reg = PAD_FUNCTION_EN_3, 838 .reg = PAD_FUNCTION_EN_3,
839 .mask = VIP_AND_CAM0_REG2_MASK, 839 .mask = VIP_AND_CAM0_REG2_MASK,
840 .val = VIP_AND_CAM0_REG2_MASK, 840 .val = VIP_AND_CAM0_REG2_MASK,
841 }, 841 },
842 }; 842 };
843 843
844 static struct spear_modemux cam0_modemux[] = { 844 static struct spear_modemux cam0_modemux[] = {
845 { 845 {
846 .muxregs = cam0_muxreg, 846 .muxregs = cam0_muxreg,
847 .nmuxregs = ARRAY_SIZE(cam0_muxreg), 847 .nmuxregs = ARRAY_SIZE(cam0_muxreg),
848 }, 848 },
849 }; 849 };
850 850
851 static struct spear_pingroup cam0_pingroup = { 851 static struct spear_pingroup cam0_pingroup = {
852 .name = "cam0_grp", 852 .name = "cam0_grp",
853 .pins = cam0_pins, 853 .pins = cam0_pins,
854 .npins = ARRAY_SIZE(cam0_pins), 854 .npins = ARRAY_SIZE(cam0_pins),
855 .modemuxs = cam0_modemux, 855 .modemuxs = cam0_modemux,
856 .nmodemuxs = ARRAY_SIZE(cam0_modemux), 856 .nmodemuxs = ARRAY_SIZE(cam0_modemux),
857 }; 857 };
858 858
859 static const char *const cam0_grps[] = { "cam0_grp" }; 859 static const char *const cam0_grps[] = { "cam0_grp" };
860 static struct spear_function cam0_function = { 860 static struct spear_function cam0_function = {
861 .name = "cam0", 861 .name = "cam0",
862 .groups = cam0_grps, 862 .groups = cam0_grps,
863 .ngroups = ARRAY_SIZE(cam0_grps), 863 .ngroups = ARRAY_SIZE(cam0_grps),
864 }; 864 };
865 865
866 /* pad multiplexing for cam1 device */ 866 /* pad multiplexing for cam1 device */
867 static const unsigned cam1_pins[] = { 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64 867 static const unsigned cam1_pins[] = { 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64
868 }; 868 };
869 static struct spear_muxreg cam1_muxreg[] = { 869 static struct spear_muxreg cam1_muxreg[] = {
870 { 870 {
871 .reg = PAD_SHARED_IP_EN_1, 871 .reg = PAD_SHARED_IP_EN_1,
872 .mask = CAM1_MASK, 872 .mask = CAM1_MASK,
873 .val = CAM1_MASK, 873 .val = CAM1_MASK,
874 }, { 874 }, {
875 .reg = PAD_FUNCTION_EN_2, 875 .reg = PAD_FUNCTION_EN_2,
876 .mask = VIP_AND_CAM1_REG1_MASK, 876 .mask = VIP_AND_CAM1_REG1_MASK,
877 .val = VIP_AND_CAM1_REG1_MASK, 877 .val = VIP_AND_CAM1_REG1_MASK,
878 }, { 878 }, {
879 .reg = PAD_FUNCTION_EN_3, 879 .reg = PAD_FUNCTION_EN_3,
880 .mask = VIP_AND_CAM1_REG2_MASK, 880 .mask = VIP_AND_CAM1_REG2_MASK,
881 .val = VIP_AND_CAM1_REG2_MASK, 881 .val = VIP_AND_CAM1_REG2_MASK,
882 }, 882 },
883 }; 883 };
884 884
885 static struct spear_modemux cam1_modemux[] = { 885 static struct spear_modemux cam1_modemux[] = {
886 { 886 {
887 .muxregs = cam1_muxreg, 887 .muxregs = cam1_muxreg,
888 .nmuxregs = ARRAY_SIZE(cam1_muxreg), 888 .nmuxregs = ARRAY_SIZE(cam1_muxreg),
889 }, 889 },
890 }; 890 };
891 891
892 static struct spear_pingroup cam1_pingroup = { 892 static struct spear_pingroup cam1_pingroup = {
893 .name = "cam1_grp", 893 .name = "cam1_grp",
894 .pins = cam1_pins, 894 .pins = cam1_pins,
895 .npins = ARRAY_SIZE(cam1_pins), 895 .npins = ARRAY_SIZE(cam1_pins),
896 .modemuxs = cam1_modemux, 896 .modemuxs = cam1_modemux,
897 .nmodemuxs = ARRAY_SIZE(cam1_modemux), 897 .nmodemuxs = ARRAY_SIZE(cam1_modemux),
898 }; 898 };
899 899
900 static const char *const cam1_grps[] = { "cam1_grp" }; 900 static const char *const cam1_grps[] = { "cam1_grp" };
901 static struct spear_function cam1_function = { 901 static struct spear_function cam1_function = {
902 .name = "cam1", 902 .name = "cam1",
903 .groups = cam1_grps, 903 .groups = cam1_grps,
904 .ngroups = ARRAY_SIZE(cam1_grps), 904 .ngroups = ARRAY_SIZE(cam1_grps),
905 }; 905 };
906 906
907 /* pad multiplexing for cam2 device */ 907 /* pad multiplexing for cam2 device */
908 static const unsigned cam2_pins[] = { 39, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53 908 static const unsigned cam2_pins[] = { 39, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53
909 }; 909 };
910 static struct spear_muxreg cam2_muxreg[] = { 910 static struct spear_muxreg cam2_muxreg[] = {
911 { 911 {
912 .reg = PAD_SHARED_IP_EN_1, 912 .reg = PAD_SHARED_IP_EN_1,
913 .mask = CAM2_MASK, 913 .mask = CAM2_MASK,
914 .val = CAM2_MASK, 914 .val = CAM2_MASK,
915 }, { 915 }, {
916 .reg = PAD_FUNCTION_EN_2, 916 .reg = PAD_FUNCTION_EN_2,
917 .mask = VIP_AND_CAM2_REG1_MASK, 917 .mask = VIP_AND_CAM2_REG1_MASK,
918 .val = VIP_AND_CAM2_REG1_MASK, 918 .val = VIP_AND_CAM2_REG1_MASK,
919 }, 919 },
920 }; 920 };
921 921
922 static struct spear_modemux cam2_modemux[] = { 922 static struct spear_modemux cam2_modemux[] = {
923 { 923 {
924 .muxregs = cam2_muxreg, 924 .muxregs = cam2_muxreg,
925 .nmuxregs = ARRAY_SIZE(cam2_muxreg), 925 .nmuxregs = ARRAY_SIZE(cam2_muxreg),
926 }, 926 },
927 }; 927 };
928 928
929 static struct spear_pingroup cam2_pingroup = { 929 static struct spear_pingroup cam2_pingroup = {
930 .name = "cam2_grp", 930 .name = "cam2_grp",
931 .pins = cam2_pins, 931 .pins = cam2_pins,
932 .npins = ARRAY_SIZE(cam2_pins), 932 .npins = ARRAY_SIZE(cam2_pins),
933 .modemuxs = cam2_modemux, 933 .modemuxs = cam2_modemux,
934 .nmodemuxs = ARRAY_SIZE(cam2_modemux), 934 .nmodemuxs = ARRAY_SIZE(cam2_modemux),
935 }; 935 };
936 936
937 static const char *const cam2_grps[] = { "cam2_grp" }; 937 static const char *const cam2_grps[] = { "cam2_grp" };
938 static struct spear_function cam2_function = { 938 static struct spear_function cam2_function = {
939 .name = "cam2", 939 .name = "cam2",
940 .groups = cam2_grps, 940 .groups = cam2_grps,
941 .ngroups = ARRAY_SIZE(cam2_grps), 941 .ngroups = ARRAY_SIZE(cam2_grps),
942 }; 942 };
943 943
944 /* pad multiplexing for cam3 device */ 944 /* pad multiplexing for cam3 device */
945 static const unsigned cam3_pins[] = { 20, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34 945 static const unsigned cam3_pins[] = { 20, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34
946 }; 946 };
947 static struct spear_muxreg cam3_muxreg[] = { 947 static struct spear_muxreg cam3_muxreg[] = {
948 { 948 {
949 .reg = PAD_SHARED_IP_EN_1, 949 .reg = PAD_SHARED_IP_EN_1,
950 .mask = CAM3_MASK, 950 .mask = CAM3_MASK,
951 .val = CAM3_MASK, 951 .val = CAM3_MASK,
952 }, { 952 }, {
953 .reg = PAD_FUNCTION_EN_1, 953 .reg = PAD_FUNCTION_EN_1,
954 .mask = VIP_AND_CAM3_REG0_MASK, 954 .mask = VIP_AND_CAM3_REG0_MASK,
955 .val = VIP_AND_CAM3_REG0_MASK, 955 .val = VIP_AND_CAM3_REG0_MASK,
956 }, { 956 }, {
957 .reg = PAD_FUNCTION_EN_2, 957 .reg = PAD_FUNCTION_EN_2,
958 .mask = VIP_AND_CAM3_REG1_MASK, 958 .mask = VIP_AND_CAM3_REG1_MASK,
959 .val = VIP_AND_CAM3_REG1_MASK, 959 .val = VIP_AND_CAM3_REG1_MASK,
960 }, 960 },
961 }; 961 };
962 962
963 static struct spear_modemux cam3_modemux[] = { 963 static struct spear_modemux cam3_modemux[] = {
964 { 964 {
965 .muxregs = cam3_muxreg, 965 .muxregs = cam3_muxreg,
966 .nmuxregs = ARRAY_SIZE(cam3_muxreg), 966 .nmuxregs = ARRAY_SIZE(cam3_muxreg),
967 }, 967 },
968 }; 968 };
969 969
970 static struct spear_pingroup cam3_pingroup = { 970 static struct spear_pingroup cam3_pingroup = {
971 .name = "cam3_grp", 971 .name = "cam3_grp",
972 .pins = cam3_pins, 972 .pins = cam3_pins,
973 .npins = ARRAY_SIZE(cam3_pins), 973 .npins = ARRAY_SIZE(cam3_pins),
974 .modemuxs = cam3_modemux, 974 .modemuxs = cam3_modemux,
975 .nmodemuxs = ARRAY_SIZE(cam3_modemux), 975 .nmodemuxs = ARRAY_SIZE(cam3_modemux),
976 }; 976 };
977 977
978 static const char *const cam3_grps[] = { "cam3_grp" }; 978 static const char *const cam3_grps[] = { "cam3_grp" };
979 static struct spear_function cam3_function = { 979 static struct spear_function cam3_function = {
980 .name = "cam3", 980 .name = "cam3",
981 .groups = cam3_grps, 981 .groups = cam3_grps,
982 .ngroups = ARRAY_SIZE(cam3_grps), 982 .ngroups = ARRAY_SIZE(cam3_grps),
983 }; 983 };
984 984
985 /* pad multiplexing for smi device */ 985 /* pad multiplexing for smi device */
986 static const unsigned smi_pins[] = { 76, 77, 78, 79, 84 }; 986 static const unsigned smi_pins[] = { 76, 77, 78, 79, 84 };
987 static struct spear_muxreg smi_muxreg[] = { 987 static struct spear_muxreg smi_muxreg[] = {
988 { 988 {
989 .reg = PAD_FUNCTION_EN_3, 989 .reg = PAD_FUNCTION_EN_3,
990 .mask = SMI_REG2_MASK, 990 .mask = SMI_REG2_MASK,
991 .val = SMI_REG2_MASK, 991 .val = SMI_REG2_MASK,
992 }, 992 },
993 }; 993 };
994 994
995 static struct spear_modemux smi_modemux[] = { 995 static struct spear_modemux smi_modemux[] = {
996 { 996 {
997 .muxregs = smi_muxreg, 997 .muxregs = smi_muxreg,
998 .nmuxregs = ARRAY_SIZE(smi_muxreg), 998 .nmuxregs = ARRAY_SIZE(smi_muxreg),
999 }, 999 },
1000 }; 1000 };
1001 1001
1002 static struct spear_pingroup smi_pingroup = { 1002 static struct spear_pingroup smi_pingroup = {
1003 .name = "smi_grp", 1003 .name = "smi_grp",
1004 .pins = smi_pins, 1004 .pins = smi_pins,
1005 .npins = ARRAY_SIZE(smi_pins), 1005 .npins = ARRAY_SIZE(smi_pins),
1006 .modemuxs = smi_modemux, 1006 .modemuxs = smi_modemux,
1007 .nmodemuxs = ARRAY_SIZE(smi_modemux), 1007 .nmodemuxs = ARRAY_SIZE(smi_modemux),
1008 }; 1008 };
1009 1009
1010 static const char *const smi_grps[] = { "smi_grp" }; 1010 static const char *const smi_grps[] = { "smi_grp" };
1011 static struct spear_function smi_function = { 1011 static struct spear_function smi_function = {
1012 .name = "smi", 1012 .name = "smi",
1013 .groups = smi_grps, 1013 .groups = smi_grps,
1014 .ngroups = ARRAY_SIZE(smi_grps), 1014 .ngroups = ARRAY_SIZE(smi_grps),
1015 }; 1015 };
1016 1016
1017 /* pad multiplexing for ssp0 device */ 1017 /* pad multiplexing for ssp0 device */
1018 static const unsigned ssp0_pins[] = { 80, 81, 82, 83 }; 1018 static const unsigned ssp0_pins[] = { 80, 81, 82, 83 };
1019 static struct spear_muxreg ssp0_muxreg[] = { 1019 static struct spear_muxreg ssp0_muxreg[] = {
1020 { 1020 {
1021 .reg = PAD_FUNCTION_EN_3, 1021 .reg = PAD_FUNCTION_EN_3,
1022 .mask = SSP0_REG2_MASK, 1022 .mask = SSP0_REG2_MASK,
1023 .val = SSP0_REG2_MASK, 1023 .val = SSP0_REG2_MASK,
1024 }, 1024 },
1025 }; 1025 };
1026 1026
1027 static struct spear_modemux ssp0_modemux[] = { 1027 static struct spear_modemux ssp0_modemux[] = {
1028 { 1028 {
1029 .muxregs = ssp0_muxreg, 1029 .muxregs = ssp0_muxreg,
1030 .nmuxregs = ARRAY_SIZE(ssp0_muxreg), 1030 .nmuxregs = ARRAY_SIZE(ssp0_muxreg),
1031 }, 1031 },
1032 }; 1032 };
1033 1033
1034 static struct spear_pingroup ssp0_pingroup = { 1034 static struct spear_pingroup ssp0_pingroup = {
1035 .name = "ssp0_grp", 1035 .name = "ssp0_grp",
1036 .pins = ssp0_pins, 1036 .pins = ssp0_pins,
1037 .npins = ARRAY_SIZE(ssp0_pins), 1037 .npins = ARRAY_SIZE(ssp0_pins),
1038 .modemuxs = ssp0_modemux, 1038 .modemuxs = ssp0_modemux,
1039 .nmodemuxs = ARRAY_SIZE(ssp0_modemux), 1039 .nmodemuxs = ARRAY_SIZE(ssp0_modemux),
1040 }; 1040 };
1041 1041
1042 /* pad multiplexing for ssp0_cs1 device */ 1042 /* pad multiplexing for ssp0_cs1 device */
1043 static const unsigned ssp0_cs1_pins[] = { 24 }; 1043 static const unsigned ssp0_cs1_pins[] = { 24 };
1044 static struct spear_muxreg ssp0_cs1_muxreg[] = { 1044 static struct spear_muxreg ssp0_cs1_muxreg[] = {
1045 { 1045 {
1046 .reg = PAD_SHARED_IP_EN_1, 1046 .reg = PAD_SHARED_IP_EN_1,
1047 .mask = SSP0_CS1_MASK, 1047 .mask = SSP0_CS1_MASK,
1048 .val = SSP0_CS1_MASK, 1048 .val = SSP0_CS1_MASK,
1049 }, { 1049 }, {
1050 .reg = PAD_FUNCTION_EN_1, 1050 .reg = PAD_FUNCTION_EN_1,
1051 .mask = PWM0_AND_SSP0_CS1_REG0_MASK, 1051 .mask = PWM0_AND_SSP0_CS1_REG0_MASK,
1052 .val = PWM0_AND_SSP0_CS1_REG0_MASK, 1052 .val = PWM0_AND_SSP0_CS1_REG0_MASK,
1053 }, 1053 },
1054 }; 1054 };
1055 1055
1056 static struct spear_modemux ssp0_cs1_modemux[] = { 1056 static struct spear_modemux ssp0_cs1_modemux[] = {
1057 { 1057 {
1058 .muxregs = ssp0_cs1_muxreg, 1058 .muxregs = ssp0_cs1_muxreg,
1059 .nmuxregs = ARRAY_SIZE(ssp0_cs1_muxreg), 1059 .nmuxregs = ARRAY_SIZE(ssp0_cs1_muxreg),
1060 }, 1060 },
1061 }; 1061 };
1062 1062
1063 static struct spear_pingroup ssp0_cs1_pingroup = { 1063 static struct spear_pingroup ssp0_cs1_pingroup = {
1064 .name = "ssp0_cs1_grp", 1064 .name = "ssp0_cs1_grp",
1065 .pins = ssp0_cs1_pins, 1065 .pins = ssp0_cs1_pins,
1066 .npins = ARRAY_SIZE(ssp0_cs1_pins), 1066 .npins = ARRAY_SIZE(ssp0_cs1_pins),
1067 .modemuxs = ssp0_cs1_modemux, 1067 .modemuxs = ssp0_cs1_modemux,
1068 .nmodemuxs = ARRAY_SIZE(ssp0_cs1_modemux), 1068 .nmodemuxs = ARRAY_SIZE(ssp0_cs1_modemux),
1069 }; 1069 };
1070 1070
1071 /* pad multiplexing for ssp0_cs2 device */ 1071 /* pad multiplexing for ssp0_cs2 device */
1072 static const unsigned ssp0_cs2_pins[] = { 85 }; 1072 static const unsigned ssp0_cs2_pins[] = { 85 };
1073 static struct spear_muxreg ssp0_cs2_muxreg[] = { 1073 static struct spear_muxreg ssp0_cs2_muxreg[] = {
1074 { 1074 {
1075 .reg = PAD_SHARED_IP_EN_1, 1075 .reg = PAD_SHARED_IP_EN_1,
1076 .mask = SSP0_CS2_MASK, 1076 .mask = SSP0_CS2_MASK,
1077 .val = SSP0_CS2_MASK, 1077 .val = SSP0_CS2_MASK,
1078 }, { 1078 }, {
1079 .reg = PAD_FUNCTION_EN_3, 1079 .reg = PAD_FUNCTION_EN_3,
1080 .mask = TS_AND_SSP0_CS2_REG2_MASK, 1080 .mask = TS_AND_SSP0_CS2_REG2_MASK,
1081 .val = TS_AND_SSP0_CS2_REG2_MASK, 1081 .val = TS_AND_SSP0_CS2_REG2_MASK,
1082 }, 1082 },
1083 }; 1083 };
1084 1084
1085 static struct spear_modemux ssp0_cs2_modemux[] = { 1085 static struct spear_modemux ssp0_cs2_modemux[] = {
1086 { 1086 {
1087 .muxregs = ssp0_cs2_muxreg, 1087 .muxregs = ssp0_cs2_muxreg,
1088 .nmuxregs = ARRAY_SIZE(ssp0_cs2_muxreg), 1088 .nmuxregs = ARRAY_SIZE(ssp0_cs2_muxreg),
1089 }, 1089 },
1090 }; 1090 };
1091 1091
1092 static struct spear_pingroup ssp0_cs2_pingroup = { 1092 static struct spear_pingroup ssp0_cs2_pingroup = {
1093 .name = "ssp0_cs2_grp", 1093 .name = "ssp0_cs2_grp",
1094 .pins = ssp0_cs2_pins, 1094 .pins = ssp0_cs2_pins,
1095 .npins = ARRAY_SIZE(ssp0_cs2_pins), 1095 .npins = ARRAY_SIZE(ssp0_cs2_pins),
1096 .modemuxs = ssp0_cs2_modemux, 1096 .modemuxs = ssp0_cs2_modemux,
1097 .nmodemuxs = ARRAY_SIZE(ssp0_cs2_modemux), 1097 .nmodemuxs = ARRAY_SIZE(ssp0_cs2_modemux),
1098 }; 1098 };
1099 1099
1100 /* pad multiplexing for ssp0_cs3 device */ 1100 /* pad multiplexing for ssp0_cs3 device */
1101 static const unsigned ssp0_cs3_pins[] = { 132 }; 1101 static const unsigned ssp0_cs3_pins[] = { 132 };
1102 static struct spear_muxreg ssp0_cs3_muxreg[] = { 1102 static struct spear_muxreg ssp0_cs3_muxreg[] = {
1103 { 1103 {
1104 .reg = PAD_FUNCTION_EN_5, 1104 .reg = PAD_FUNCTION_EN_5,
1105 .mask = SSP0_CS3_REG4_MASK, 1105 .mask = SSP0_CS3_REG4_MASK,
1106 .val = SSP0_CS3_REG4_MASK, 1106 .val = SSP0_CS3_REG4_MASK,
1107 }, 1107 },
1108 }; 1108 };
1109 1109
1110 static struct spear_modemux ssp0_cs3_modemux[] = { 1110 static struct spear_modemux ssp0_cs3_modemux[] = {
1111 { 1111 {
1112 .muxregs = ssp0_cs3_muxreg, 1112 .muxregs = ssp0_cs3_muxreg,
1113 .nmuxregs = ARRAY_SIZE(ssp0_cs3_muxreg), 1113 .nmuxregs = ARRAY_SIZE(ssp0_cs3_muxreg),
1114 }, 1114 },
1115 }; 1115 };
1116 1116
1117 static struct spear_pingroup ssp0_cs3_pingroup = { 1117 static struct spear_pingroup ssp0_cs3_pingroup = {
1118 .name = "ssp0_cs3_grp", 1118 .name = "ssp0_cs3_grp",
1119 .pins = ssp0_cs3_pins, 1119 .pins = ssp0_cs3_pins,
1120 .npins = ARRAY_SIZE(ssp0_cs3_pins), 1120 .npins = ARRAY_SIZE(ssp0_cs3_pins),
1121 .modemuxs = ssp0_cs3_modemux, 1121 .modemuxs = ssp0_cs3_modemux,
1122 .nmodemuxs = ARRAY_SIZE(ssp0_cs3_modemux), 1122 .nmodemuxs = ARRAY_SIZE(ssp0_cs3_modemux),
1123 }; 1123 };
1124 1124
1125 static const char *const ssp0_grps[] = { "ssp0_grp", "ssp0_cs1_grp", 1125 static const char *const ssp0_grps[] = { "ssp0_grp", "ssp0_cs1_grp",
1126 "ssp0_cs2_grp", "ssp0_cs3_grp" }; 1126 "ssp0_cs2_grp", "ssp0_cs3_grp" };
1127 static struct spear_function ssp0_function = { 1127 static struct spear_function ssp0_function = {
1128 .name = "ssp0", 1128 .name = "ssp0",
1129 .groups = ssp0_grps, 1129 .groups = ssp0_grps,
1130 .ngroups = ARRAY_SIZE(ssp0_grps), 1130 .ngroups = ARRAY_SIZE(ssp0_grps),
1131 }; 1131 };
1132 1132
1133 /* pad multiplexing for uart0 device */ 1133 /* pad multiplexing for uart0 device */
1134 static const unsigned uart0_pins[] = { 86, 87 }; 1134 static const unsigned uart0_pins[] = { 86, 87 };
1135 static struct spear_muxreg uart0_muxreg[] = { 1135 static struct spear_muxreg uart0_muxreg[] = {
1136 { 1136 {
1137 .reg = PAD_FUNCTION_EN_3, 1137 .reg = PAD_FUNCTION_EN_3,
1138 .mask = UART0_REG2_MASK, 1138 .mask = UART0_REG2_MASK,
1139 .val = UART0_REG2_MASK, 1139 .val = UART0_REG2_MASK,
1140 }, 1140 },
1141 }; 1141 };
1142 1142
1143 static struct spear_modemux uart0_modemux[] = { 1143 static struct spear_modemux uart0_modemux[] = {
1144 { 1144 {
1145 .muxregs = uart0_muxreg, 1145 .muxregs = uart0_muxreg,
1146 .nmuxregs = ARRAY_SIZE(uart0_muxreg), 1146 .nmuxregs = ARRAY_SIZE(uart0_muxreg),
1147 }, 1147 },
1148 }; 1148 };
1149 1149
1150 static struct spear_pingroup uart0_pingroup = { 1150 static struct spear_pingroup uart0_pingroup = {
1151 .name = "uart0_grp", 1151 .name = "uart0_grp",
1152 .pins = uart0_pins, 1152 .pins = uart0_pins,
1153 .npins = ARRAY_SIZE(uart0_pins), 1153 .npins = ARRAY_SIZE(uart0_pins),
1154 .modemuxs = uart0_modemux, 1154 .modemuxs = uart0_modemux,
1155 .nmodemuxs = ARRAY_SIZE(uart0_modemux), 1155 .nmodemuxs = ARRAY_SIZE(uart0_modemux),
1156 }; 1156 };
1157 1157
1158 /* pad multiplexing for uart0_enh device */ 1158 /* pad multiplexing for uart0_enh device */
1159 static const unsigned uart0_enh_pins[] = { 11, 12, 13, 14, 15, 16 }; 1159 static const unsigned uart0_enh_pins[] = { 11, 12, 13, 14, 15, 16 };
1160 static struct spear_muxreg uart0_enh_muxreg[] = { 1160 static struct spear_muxreg uart0_enh_muxreg[] = {
1161 { 1161 {
1162 .reg = PAD_SHARED_IP_EN_1, 1162 .reg = PAD_SHARED_IP_EN_1,
1163 .mask = GPT_MASK, 1163 .mask = GPT_MASK,
1164 .val = 0, 1164 .val = 0,
1165 }, { 1165 }, {
1166 .reg = PAD_FUNCTION_EN_1, 1166 .reg = PAD_FUNCTION_EN_1,
1167 .mask = UART0_ENH_AND_GPT_REG0_MASK, 1167 .mask = UART0_ENH_AND_GPT_REG0_MASK,
1168 .val = UART0_ENH_AND_GPT_REG0_MASK, 1168 .val = UART0_ENH_AND_GPT_REG0_MASK,
1169 }, 1169 },
1170 }; 1170 };
1171 1171
1172 static struct spear_modemux uart0_enh_modemux[] = { 1172 static struct spear_modemux uart0_enh_modemux[] = {
1173 { 1173 {
1174 .muxregs = uart0_enh_muxreg, 1174 .muxregs = uart0_enh_muxreg,
1175 .nmuxregs = ARRAY_SIZE(uart0_enh_muxreg), 1175 .nmuxregs = ARRAY_SIZE(uart0_enh_muxreg),
1176 }, 1176 },
1177 }; 1177 };
1178 1178
1179 static struct spear_pingroup uart0_enh_pingroup = { 1179 static struct spear_pingroup uart0_enh_pingroup = {
1180 .name = "uart0_enh_grp", 1180 .name = "uart0_enh_grp",
1181 .pins = uart0_enh_pins, 1181 .pins = uart0_enh_pins,
1182 .npins = ARRAY_SIZE(uart0_enh_pins), 1182 .npins = ARRAY_SIZE(uart0_enh_pins),
1183 .modemuxs = uart0_enh_modemux, 1183 .modemuxs = uart0_enh_modemux,
1184 .nmodemuxs = ARRAY_SIZE(uart0_enh_modemux), 1184 .nmodemuxs = ARRAY_SIZE(uart0_enh_modemux),
1185 }; 1185 };
1186 1186
1187 static const char *const uart0_grps[] = { "uart0_grp", "uart0_enh_grp" }; 1187 static const char *const uart0_grps[] = { "uart0_grp", "uart0_enh_grp" };
1188 static struct spear_function uart0_function = { 1188 static struct spear_function uart0_function = {
1189 .name = "uart0", 1189 .name = "uart0",
1190 .groups = uart0_grps, 1190 .groups = uart0_grps,
1191 .ngroups = ARRAY_SIZE(uart0_grps), 1191 .ngroups = ARRAY_SIZE(uart0_grps),
1192 }; 1192 };
1193 1193
1194 /* pad multiplexing for uart1 device */ 1194 /* pad multiplexing for uart1 device */
1195 static const unsigned uart1_pins[] = { 88, 89 }; 1195 static const unsigned uart1_pins[] = { 88, 89 };
1196 static struct spear_muxreg uart1_muxreg[] = { 1196 static struct spear_muxreg uart1_muxreg[] = {
1197 { 1197 {
1198 .reg = PAD_FUNCTION_EN_3, 1198 .reg = PAD_FUNCTION_EN_3,
1199 .mask = UART1_REG2_MASK, 1199 .mask = UART1_REG2_MASK,
1200 .val = UART1_REG2_MASK, 1200 .val = UART1_REG2_MASK,
1201 }, 1201 },
1202 }; 1202 };
1203 1203
1204 static struct spear_modemux uart1_modemux[] = { 1204 static struct spear_modemux uart1_modemux[] = {
1205 { 1205 {
1206 .muxregs = uart1_muxreg, 1206 .muxregs = uart1_muxreg,
1207 .nmuxregs = ARRAY_SIZE(uart1_muxreg), 1207 .nmuxregs = ARRAY_SIZE(uart1_muxreg),
1208 }, 1208 },
1209 }; 1209 };
1210 1210
1211 static struct spear_pingroup uart1_pingroup = { 1211 static struct spear_pingroup uart1_pingroup = {
1212 .name = "uart1_grp", 1212 .name = "uart1_grp",
1213 .pins = uart1_pins, 1213 .pins = uart1_pins,
1214 .npins = ARRAY_SIZE(uart1_pins), 1214 .npins = ARRAY_SIZE(uart1_pins),
1215 .modemuxs = uart1_modemux, 1215 .modemuxs = uart1_modemux,
1216 .nmodemuxs = ARRAY_SIZE(uart1_modemux), 1216 .nmodemuxs = ARRAY_SIZE(uart1_modemux),
1217 }; 1217 };
1218 1218
1219 static const char *const uart1_grps[] = { "uart1_grp" }; 1219 static const char *const uart1_grps[] = { "uart1_grp" };
1220 static struct spear_function uart1_function = { 1220 static struct spear_function uart1_function = {
1221 .name = "uart1", 1221 .name = "uart1",
1222 .groups = uart1_grps, 1222 .groups = uart1_grps,
1223 .ngroups = ARRAY_SIZE(uart1_grps), 1223 .ngroups = ARRAY_SIZE(uart1_grps),
1224 }; 1224 };
1225 1225
1226 /* pad multiplexing for i2s_in device */ 1226 /* pad multiplexing for i2s_in device */
1227 static const unsigned i2s_in_pins[] = { 90, 91, 92, 93, 94, 99 }; 1227 static const unsigned i2s_in_pins[] = { 90, 91, 92, 93, 94, 99 };
1228 static struct spear_muxreg i2s_in_muxreg[] = { 1228 static struct spear_muxreg i2s_in_muxreg[] = {
1229 { 1229 {
1230 .reg = PAD_FUNCTION_EN_3, 1230 .reg = PAD_FUNCTION_EN_3,
1231 .mask = I2S_IN_REG2_MASK, 1231 .mask = I2S_IN_REG2_MASK,
1232 .val = I2S_IN_REG2_MASK, 1232 .val = I2S_IN_REG2_MASK,
1233 }, { 1233 }, {
1234 .reg = PAD_FUNCTION_EN_4, 1234 .reg = PAD_FUNCTION_EN_4,
1235 .mask = I2S_IN_REG3_MASK, 1235 .mask = I2S_IN_REG3_MASK,
1236 .val = I2S_IN_REG3_MASK, 1236 .val = I2S_IN_REG3_MASK,
1237 }, 1237 },
1238 }; 1238 };
1239 1239
1240 static struct spear_modemux i2s_in_modemux[] = { 1240 static struct spear_modemux i2s_in_modemux[] = {
1241 { 1241 {
1242 .muxregs = i2s_in_muxreg, 1242 .muxregs = i2s_in_muxreg,
1243 .nmuxregs = ARRAY_SIZE(i2s_in_muxreg), 1243 .nmuxregs = ARRAY_SIZE(i2s_in_muxreg),
1244 }, 1244 },
1245 }; 1245 };
1246 1246
1247 static struct spear_pingroup i2s_in_pingroup = { 1247 static struct spear_pingroup i2s_in_pingroup = {
1248 .name = "i2s_in_grp", 1248 .name = "i2s_in_grp",
1249 .pins = i2s_in_pins, 1249 .pins = i2s_in_pins,
1250 .npins = ARRAY_SIZE(i2s_in_pins), 1250 .npins = ARRAY_SIZE(i2s_in_pins),
1251 .modemuxs = i2s_in_modemux, 1251 .modemuxs = i2s_in_modemux,
1252 .nmodemuxs = ARRAY_SIZE(i2s_in_modemux), 1252 .nmodemuxs = ARRAY_SIZE(i2s_in_modemux),
1253 }; 1253 };
1254 1254
1255 /* pad multiplexing for i2s_out device */ 1255 /* pad multiplexing for i2s_out device */
1256 static const unsigned i2s_out_pins[] = { 95, 96, 97, 98, 100, 101, 102, 103 }; 1256 static const unsigned i2s_out_pins[] = { 95, 96, 97, 98, 100, 101, 102, 103 };
1257 static struct spear_muxreg i2s_out_muxreg[] = { 1257 static struct spear_muxreg i2s_out_muxreg[] = {
1258 { 1258 {
1259 .reg = PAD_FUNCTION_EN_4, 1259 .reg = PAD_FUNCTION_EN_4,
1260 .mask = I2S_OUT_REG3_MASK, 1260 .mask = I2S_OUT_REG3_MASK,
1261 .val = I2S_OUT_REG3_MASK, 1261 .val = I2S_OUT_REG3_MASK,
1262 }, 1262 },
1263 }; 1263 };
1264 1264
1265 static struct spear_modemux i2s_out_modemux[] = { 1265 static struct spear_modemux i2s_out_modemux[] = {
1266 { 1266 {
1267 .muxregs = i2s_out_muxreg, 1267 .muxregs = i2s_out_muxreg,
1268 .nmuxregs = ARRAY_SIZE(i2s_out_muxreg), 1268 .nmuxregs = ARRAY_SIZE(i2s_out_muxreg),
1269 }, 1269 },
1270 }; 1270 };
1271 1271
1272 static struct spear_pingroup i2s_out_pingroup = { 1272 static struct spear_pingroup i2s_out_pingroup = {
1273 .name = "i2s_out_grp", 1273 .name = "i2s_out_grp",
1274 .pins = i2s_out_pins, 1274 .pins = i2s_out_pins,
1275 .npins = ARRAY_SIZE(i2s_out_pins), 1275 .npins = ARRAY_SIZE(i2s_out_pins),
1276 .modemuxs = i2s_out_modemux, 1276 .modemuxs = i2s_out_modemux,
1277 .nmodemuxs = ARRAY_SIZE(i2s_out_modemux), 1277 .nmodemuxs = ARRAY_SIZE(i2s_out_modemux),
1278 }; 1278 };
1279 1279
1280 static const char *const i2s_grps[] = { "i2s_in_grp", "i2s_out_grp" }; 1280 static const char *const i2s_grps[] = { "i2s_in_grp", "i2s_out_grp" };
1281 static struct spear_function i2s_function = { 1281 static struct spear_function i2s_function = {
1282 .name = "i2s", 1282 .name = "i2s",
1283 .groups = i2s_grps, 1283 .groups = i2s_grps,
1284 .ngroups = ARRAY_SIZE(i2s_grps), 1284 .ngroups = ARRAY_SIZE(i2s_grps),
1285 }; 1285 };
1286 1286
1287 /* pad multiplexing for gmac device */ 1287 /* pad multiplexing for gmac device */
1288 static const unsigned gmac_pins[] = { 104, 105, 106, 107, 108, 109, 110, 111, 1288 static const unsigned gmac_pins[] = { 104, 105, 106, 107, 108, 109, 110, 111,
1289 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 1289 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
1290 126, 127, 128, 129, 130, 131 }; 1290 126, 127, 128, 129, 130, 131 };
1291 #define GMAC_MUXREG \ 1291 #define GMAC_MUXREG \
1292 { \ 1292 { \
1293 .reg = PAD_FUNCTION_EN_4, \ 1293 .reg = PAD_FUNCTION_EN_4, \
1294 .mask = GMAC_REG3_MASK, \ 1294 .mask = GMAC_REG3_MASK, \
1295 .val = GMAC_REG3_MASK, \ 1295 .val = GMAC_REG3_MASK, \
1296 }, { \ 1296 }, { \
1297 .reg = PAD_FUNCTION_EN_5, \ 1297 .reg = PAD_FUNCTION_EN_5, \
1298 .mask = GMAC_REG4_MASK, \ 1298 .mask = GMAC_REG4_MASK, \
1299 .val = GMAC_REG4_MASK, \ 1299 .val = GMAC_REG4_MASK, \
1300 } 1300 }
1301 1301
1302 /* pad multiplexing for gmii device */ 1302 /* pad multiplexing for gmii device */
1303 static struct spear_muxreg gmii_muxreg[] = { 1303 static struct spear_muxreg gmii_muxreg[] = {
1304 GMAC_MUXREG, 1304 GMAC_MUXREG,
1305 { 1305 {
1306 .reg = GMAC_CLK_CFG, 1306 .reg = GMAC_CLK_CFG,
1307 .mask = GMAC_PHY_IF_SEL_MASK, 1307 .mask = GMAC_PHY_IF_SEL_MASK,
1308 .val = GMAC_PHY_IF_GMII_VAL, 1308 .val = GMAC_PHY_IF_GMII_VAL,
1309 }, 1309 },
1310 }; 1310 };
1311 1311
1312 static struct spear_modemux gmii_modemux[] = { 1312 static struct spear_modemux gmii_modemux[] = {
1313 { 1313 {
1314 .muxregs = gmii_muxreg, 1314 .muxregs = gmii_muxreg,
1315 .nmuxregs = ARRAY_SIZE(gmii_muxreg), 1315 .nmuxregs = ARRAY_SIZE(gmii_muxreg),
1316 }, 1316 },
1317 }; 1317 };
1318 1318
1319 static struct spear_pingroup gmii_pingroup = { 1319 static struct spear_pingroup gmii_pingroup = {
1320 .name = "gmii_grp", 1320 .name = "gmii_grp",
1321 .pins = gmac_pins, 1321 .pins = gmac_pins,
1322 .npins = ARRAY_SIZE(gmac_pins), 1322 .npins = ARRAY_SIZE(gmac_pins),
1323 .modemuxs = gmii_modemux, 1323 .modemuxs = gmii_modemux,
1324 .nmodemuxs = ARRAY_SIZE(gmii_modemux), 1324 .nmodemuxs = ARRAY_SIZE(gmii_modemux),
1325 }; 1325 };
1326 1326
1327 /* pad multiplexing for rgmii device */ 1327 /* pad multiplexing for rgmii device */
1328 static struct spear_muxreg rgmii_muxreg[] = { 1328 static struct spear_muxreg rgmii_muxreg[] = {
1329 GMAC_MUXREG, 1329 GMAC_MUXREG,
1330 { 1330 {
1331 .reg = GMAC_CLK_CFG, 1331 .reg = GMAC_CLK_CFG,
1332 .mask = GMAC_PHY_IF_SEL_MASK, 1332 .mask = GMAC_PHY_IF_SEL_MASK,
1333 .val = GMAC_PHY_IF_RGMII_VAL, 1333 .val = GMAC_PHY_IF_RGMII_VAL,
1334 }, 1334 },
1335 }; 1335 };
1336 1336
1337 static struct spear_modemux rgmii_modemux[] = { 1337 static struct spear_modemux rgmii_modemux[] = {
1338 { 1338 {
1339 .muxregs = rgmii_muxreg, 1339 .muxregs = rgmii_muxreg,
1340 .nmuxregs = ARRAY_SIZE(rgmii_muxreg), 1340 .nmuxregs = ARRAY_SIZE(rgmii_muxreg),
1341 }, 1341 },
1342 }; 1342 };
1343 1343
1344 static struct spear_pingroup rgmii_pingroup = { 1344 static struct spear_pingroup rgmii_pingroup = {
1345 .name = "rgmii_grp", 1345 .name = "rgmii_grp",
1346 .pins = gmac_pins, 1346 .pins = gmac_pins,
1347 .npins = ARRAY_SIZE(gmac_pins), 1347 .npins = ARRAY_SIZE(gmac_pins),
1348 .modemuxs = rgmii_modemux, 1348 .modemuxs = rgmii_modemux,
1349 .nmodemuxs = ARRAY_SIZE(rgmii_modemux), 1349 .nmodemuxs = ARRAY_SIZE(rgmii_modemux),
1350 }; 1350 };
1351 1351
1352 /* pad multiplexing for rmii device */ 1352 /* pad multiplexing for rmii device */
1353 static struct spear_muxreg rmii_muxreg[] = { 1353 static struct spear_muxreg rmii_muxreg[] = {
1354 GMAC_MUXREG, 1354 GMAC_MUXREG,
1355 { 1355 {
1356 .reg = GMAC_CLK_CFG, 1356 .reg = GMAC_CLK_CFG,
1357 .mask = GMAC_PHY_IF_SEL_MASK, 1357 .mask = GMAC_PHY_IF_SEL_MASK,
1358 .val = GMAC_PHY_IF_RMII_VAL, 1358 .val = GMAC_PHY_IF_RMII_VAL,
1359 }, 1359 },
1360 }; 1360 };
1361 1361
1362 static struct spear_modemux rmii_modemux[] = { 1362 static struct spear_modemux rmii_modemux[] = {
1363 { 1363 {
1364 .muxregs = rmii_muxreg, 1364 .muxregs = rmii_muxreg,
1365 .nmuxregs = ARRAY_SIZE(rmii_muxreg), 1365 .nmuxregs = ARRAY_SIZE(rmii_muxreg),
1366 }, 1366 },
1367 }; 1367 };
1368 1368
1369 static struct spear_pingroup rmii_pingroup = { 1369 static struct spear_pingroup rmii_pingroup = {
1370 .name = "rmii_grp", 1370 .name = "rmii_grp",
1371 .pins = gmac_pins, 1371 .pins = gmac_pins,
1372 .npins = ARRAY_SIZE(gmac_pins), 1372 .npins = ARRAY_SIZE(gmac_pins),
1373 .modemuxs = rmii_modemux, 1373 .modemuxs = rmii_modemux,
1374 .nmodemuxs = ARRAY_SIZE(rmii_modemux), 1374 .nmodemuxs = ARRAY_SIZE(rmii_modemux),
1375 }; 1375 };
1376 1376
1377 /* pad multiplexing for sgmii device */ 1377 /* pad multiplexing for sgmii device */
1378 static struct spear_muxreg sgmii_muxreg[] = { 1378 static struct spear_muxreg sgmii_muxreg[] = {
1379 GMAC_MUXREG, 1379 GMAC_MUXREG,
1380 { 1380 {
1381 .reg = GMAC_CLK_CFG, 1381 .reg = GMAC_CLK_CFG,
1382 .mask = GMAC_PHY_IF_SEL_MASK, 1382 .mask = GMAC_PHY_IF_SEL_MASK,
1383 .val = GMAC_PHY_IF_SGMII_VAL, 1383 .val = GMAC_PHY_IF_SGMII_VAL,
1384 }, 1384 },
1385 }; 1385 };
1386 1386
1387 static struct spear_modemux sgmii_modemux[] = { 1387 static struct spear_modemux sgmii_modemux[] = {
1388 { 1388 {
1389 .muxregs = sgmii_muxreg, 1389 .muxregs = sgmii_muxreg,
1390 .nmuxregs = ARRAY_SIZE(sgmii_muxreg), 1390 .nmuxregs = ARRAY_SIZE(sgmii_muxreg),
1391 }, 1391 },
1392 }; 1392 };
1393 1393
1394 static struct spear_pingroup sgmii_pingroup = { 1394 static struct spear_pingroup sgmii_pingroup = {
1395 .name = "sgmii_grp", 1395 .name = "sgmii_grp",
1396 .pins = gmac_pins, 1396 .pins = gmac_pins,
1397 .npins = ARRAY_SIZE(gmac_pins), 1397 .npins = ARRAY_SIZE(gmac_pins),
1398 .modemuxs = sgmii_modemux, 1398 .modemuxs = sgmii_modemux,
1399 .nmodemuxs = ARRAY_SIZE(sgmii_modemux), 1399 .nmodemuxs = ARRAY_SIZE(sgmii_modemux),
1400 }; 1400 };
1401 1401
1402 static const char *const gmac_grps[] = { "gmii_grp", "rgmii_grp", "rmii_grp", 1402 static const char *const gmac_grps[] = { "gmii_grp", "rgmii_grp", "rmii_grp",
1403 "sgmii_grp" }; 1403 "sgmii_grp" };
1404 static struct spear_function gmac_function = { 1404 static struct spear_function gmac_function = {
1405 .name = "gmac", 1405 .name = "gmac",
1406 .groups = gmac_grps, 1406 .groups = gmac_grps,
1407 .ngroups = ARRAY_SIZE(gmac_grps), 1407 .ngroups = ARRAY_SIZE(gmac_grps),
1408 }; 1408 };
1409 1409
1410 /* pad multiplexing for i2c0 device */ 1410 /* pad multiplexing for i2c0 device */
1411 static const unsigned i2c0_pins[] = { 133, 134 }; 1411 static const unsigned i2c0_pins[] = { 133, 134 };
1412 static struct spear_muxreg i2c0_muxreg[] = { 1412 static struct spear_muxreg i2c0_muxreg[] = {
1413 { 1413 {
1414 .reg = PAD_FUNCTION_EN_5, 1414 .reg = PAD_FUNCTION_EN_5,
1415 .mask = I2C0_REG4_MASK, 1415 .mask = I2C0_REG4_MASK,
1416 .val = I2C0_REG4_MASK, 1416 .val = I2C0_REG4_MASK,
1417 }, 1417 },
1418 }; 1418 };
1419 1419
1420 static struct spear_modemux i2c0_modemux[] = { 1420 static struct spear_modemux i2c0_modemux[] = {
1421 { 1421 {
1422 .muxregs = i2c0_muxreg, 1422 .muxregs = i2c0_muxreg,
1423 .nmuxregs = ARRAY_SIZE(i2c0_muxreg), 1423 .nmuxregs = ARRAY_SIZE(i2c0_muxreg),
1424 }, 1424 },
1425 }; 1425 };
1426 1426
1427 static struct spear_pingroup i2c0_pingroup = { 1427 static struct spear_pingroup i2c0_pingroup = {
1428 .name = "i2c0_grp", 1428 .name = "i2c0_grp",
1429 .pins = i2c0_pins, 1429 .pins = i2c0_pins,
1430 .npins = ARRAY_SIZE(i2c0_pins), 1430 .npins = ARRAY_SIZE(i2c0_pins),
1431 .modemuxs = i2c0_modemux, 1431 .modemuxs = i2c0_modemux,
1432 .nmodemuxs = ARRAY_SIZE(i2c0_modemux), 1432 .nmodemuxs = ARRAY_SIZE(i2c0_modemux),
1433 }; 1433 };
1434 1434
1435 static const char *const i2c0_grps[] = { "i2c0_grp" }; 1435 static const char *const i2c0_grps[] = { "i2c0_grp" };
1436 static struct spear_function i2c0_function = { 1436 static struct spear_function i2c0_function = {
1437 .name = "i2c0", 1437 .name = "i2c0",
1438 .groups = i2c0_grps, 1438 .groups = i2c0_grps,
1439 .ngroups = ARRAY_SIZE(i2c0_grps), 1439 .ngroups = ARRAY_SIZE(i2c0_grps),
1440 }; 1440 };
1441 1441
1442 /* pad multiplexing for i2c1 device */ 1442 /* pad multiplexing for i2c1 device */
1443 static const unsigned i2c1_pins[] = { 18, 23 }; 1443 static const unsigned i2c1_pins[] = { 18, 23 };
1444 static struct spear_muxreg i2c1_muxreg[] = { 1444 static struct spear_muxreg i2c1_muxreg[] = {
1445 { 1445 {
1446 .reg = PAD_FUNCTION_EN_1, 1446 .reg = PAD_FUNCTION_EN_1,
1447 .mask = I2C1_REG0_MASK, 1447 .mask = I2C1_REG0_MASK,
1448 .val = I2C1_REG0_MASK, 1448 .val = I2C1_REG0_MASK,
1449 }, 1449 },
1450 }; 1450 };
1451 1451
1452 static struct spear_modemux i2c1_modemux[] = { 1452 static struct spear_modemux i2c1_modemux[] = {
1453 { 1453 {
1454 .muxregs = i2c1_muxreg, 1454 .muxregs = i2c1_muxreg,
1455 .nmuxregs = ARRAY_SIZE(i2c1_muxreg), 1455 .nmuxregs = ARRAY_SIZE(i2c1_muxreg),
1456 }, 1456 },
1457 }; 1457 };
1458 1458
1459 static struct spear_pingroup i2c1_pingroup = { 1459 static struct spear_pingroup i2c1_pingroup = {
1460 .name = "i2c1_grp", 1460 .name = "i2c1_grp",
1461 .pins = i2c1_pins, 1461 .pins = i2c1_pins,
1462 .npins = ARRAY_SIZE(i2c1_pins), 1462 .npins = ARRAY_SIZE(i2c1_pins),
1463 .modemuxs = i2c1_modemux, 1463 .modemuxs = i2c1_modemux,
1464 .nmodemuxs = ARRAY_SIZE(i2c1_modemux), 1464 .nmodemuxs = ARRAY_SIZE(i2c1_modemux),
1465 }; 1465 };
1466 1466
1467 static const char *const i2c1_grps[] = { "i2c1_grp" }; 1467 static const char *const i2c1_grps[] = { "i2c1_grp" };
1468 static struct spear_function i2c1_function = { 1468 static struct spear_function i2c1_function = {
1469 .name = "i2c1", 1469 .name = "i2c1",
1470 .groups = i2c1_grps, 1470 .groups = i2c1_grps,
1471 .ngroups = ARRAY_SIZE(i2c1_grps), 1471 .ngroups = ARRAY_SIZE(i2c1_grps),
1472 }; 1472 };
1473 1473
1474 /* pad multiplexing for cec0 device */ 1474 /* pad multiplexing for cec0 device */
1475 static const unsigned cec0_pins[] = { 135 }; 1475 static const unsigned cec0_pins[] = { 135 };
1476 static struct spear_muxreg cec0_muxreg[] = { 1476 static struct spear_muxreg cec0_muxreg[] = {
1477 { 1477 {
1478 .reg = PAD_FUNCTION_EN_5, 1478 .reg = PAD_FUNCTION_EN_5,
1479 .mask = CEC0_REG4_MASK, 1479 .mask = CEC0_REG4_MASK,
1480 .val = CEC0_REG4_MASK, 1480 .val = CEC0_REG4_MASK,
1481 }, 1481 },
1482 }; 1482 };
1483 1483
1484 static struct spear_modemux cec0_modemux[] = { 1484 static struct spear_modemux cec0_modemux[] = {
1485 { 1485 {
1486 .muxregs = cec0_muxreg, 1486 .muxregs = cec0_muxreg,
1487 .nmuxregs = ARRAY_SIZE(cec0_muxreg), 1487 .nmuxregs = ARRAY_SIZE(cec0_muxreg),
1488 }, 1488 },
1489 }; 1489 };
1490 1490
1491 static struct spear_pingroup cec0_pingroup = { 1491 static struct spear_pingroup cec0_pingroup = {
1492 .name = "cec0_grp", 1492 .name = "cec0_grp",
1493 .pins = cec0_pins, 1493 .pins = cec0_pins,
1494 .npins = ARRAY_SIZE(cec0_pins), 1494 .npins = ARRAY_SIZE(cec0_pins),
1495 .modemuxs = cec0_modemux, 1495 .modemuxs = cec0_modemux,
1496 .nmodemuxs = ARRAY_SIZE(cec0_modemux), 1496 .nmodemuxs = ARRAY_SIZE(cec0_modemux),
1497 }; 1497 };
1498 1498
1499 static const char *const cec0_grps[] = { "cec0_grp" }; 1499 static const char *const cec0_grps[] = { "cec0_grp" };
1500 static struct spear_function cec0_function = { 1500 static struct spear_function cec0_function = {
1501 .name = "cec0", 1501 .name = "cec0",
1502 .groups = cec0_grps, 1502 .groups = cec0_grps,
1503 .ngroups = ARRAY_SIZE(cec0_grps), 1503 .ngroups = ARRAY_SIZE(cec0_grps),
1504 }; 1504 };
1505 1505
1506 /* pad multiplexing for cec1 device */ 1506 /* pad multiplexing for cec1 device */
1507 static const unsigned cec1_pins[] = { 136 }; 1507 static const unsigned cec1_pins[] = { 136 };
1508 static struct spear_muxreg cec1_muxreg[] = { 1508 static struct spear_muxreg cec1_muxreg[] = {
1509 { 1509 {
1510 .reg = PAD_FUNCTION_EN_5, 1510 .reg = PAD_FUNCTION_EN_5,
1511 .mask = CEC1_REG4_MASK, 1511 .mask = CEC1_REG4_MASK,
1512 .val = CEC1_REG4_MASK, 1512 .val = CEC1_REG4_MASK,
1513 }, 1513 },
1514 }; 1514 };
1515 1515
1516 static struct spear_modemux cec1_modemux[] = { 1516 static struct spear_modemux cec1_modemux[] = {
1517 { 1517 {
1518 .muxregs = cec1_muxreg, 1518 .muxregs = cec1_muxreg,
1519 .nmuxregs = ARRAY_SIZE(cec1_muxreg), 1519 .nmuxregs = ARRAY_SIZE(cec1_muxreg),
1520 }, 1520 },
1521 }; 1521 };
1522 1522
1523 static struct spear_pingroup cec1_pingroup = { 1523 static struct spear_pingroup cec1_pingroup = {
1524 .name = "cec1_grp", 1524 .name = "cec1_grp",
1525 .pins = cec1_pins, 1525 .pins = cec1_pins,
1526 .npins = ARRAY_SIZE(cec1_pins), 1526 .npins = ARRAY_SIZE(cec1_pins),
1527 .modemuxs = cec1_modemux, 1527 .modemuxs = cec1_modemux,
1528 .nmodemuxs = ARRAY_SIZE(cec1_modemux), 1528 .nmodemuxs = ARRAY_SIZE(cec1_modemux),
1529 }; 1529 };
1530 1530
1531 static const char *const cec1_grps[] = { "cec1_grp" }; 1531 static const char *const cec1_grps[] = { "cec1_grp" };
1532 static struct spear_function cec1_function = { 1532 static struct spear_function cec1_function = {
1533 .name = "cec1", 1533 .name = "cec1",
1534 .groups = cec1_grps, 1534 .groups = cec1_grps,
1535 .ngroups = ARRAY_SIZE(cec1_grps), 1535 .ngroups = ARRAY_SIZE(cec1_grps),
1536 }; 1536 };
1537 1537
1538 /* pad multiplexing for mcif devices */ 1538 /* pad multiplexing for mcif devices */
1539 static const unsigned mcif_pins[] = { 193, 194, 195, 196, 197, 198, 199, 200, 1539 static const unsigned mcif_pins[] = { 193, 194, 195, 196, 197, 198, 199, 200,
1540 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 1540 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
1541 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 1541 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228,
1542 229, 230, 231, 232, 237 }; 1542 229, 230, 231, 232, 237 };
1543 #define MCIF_MUXREG \ 1543 #define MCIF_MUXREG \
1544 { \ 1544 { \
1545 .reg = PAD_SHARED_IP_EN_1, \ 1545 .reg = PAD_SHARED_IP_EN_1, \
1546 .mask = MCIF_MASK, \ 1546 .mask = MCIF_MASK, \
1547 .val = MCIF_MASK, \ 1547 .val = MCIF_MASK, \
1548 }, { \ 1548 }, { \
1549 .reg = PAD_FUNCTION_EN_7, \ 1549 .reg = PAD_FUNCTION_EN_7, \
1550 .mask = FSMC_PNOR_AND_MCIF_REG6_MASK | MCIF_REG6_MASK, \ 1550 .mask = FSMC_PNOR_AND_MCIF_REG6_MASK | MCIF_REG6_MASK, \
1551 .val = FSMC_PNOR_AND_MCIF_REG6_MASK | MCIF_REG6_MASK, \ 1551 .val = FSMC_PNOR_AND_MCIF_REG6_MASK | MCIF_REG6_MASK, \
1552 }, { \ 1552 }, { \
1553 .reg = PAD_FUNCTION_EN_8, \ 1553 .reg = PAD_FUNCTION_EN_8, \
1554 .mask = MCIF_REG7_MASK, \ 1554 .mask = MCIF_REG7_MASK, \
1555 .val = MCIF_REG7_MASK, \ 1555 .val = MCIF_REG7_MASK, \
1556 } 1556 }
1557 1557
1558 /* Pad multiplexing for sdhci device */ 1558 /* Pad multiplexing for sdhci device */
1559 static struct spear_muxreg sdhci_muxreg[] = { 1559 static struct spear_muxreg sdhci_muxreg[] = {
1560 MCIF_MUXREG, 1560 MCIF_MUXREG,
1561 { 1561 {
1562 .reg = PERIP_CFG, 1562 .reg = PERIP_CFG,
1563 .mask = MCIF_SEL_MASK, 1563 .mask = MCIF_SEL_MASK,
1564 .val = MCIF_SEL_SD, 1564 .val = MCIF_SEL_SD,
1565 }, 1565 },
1566 }; 1566 };
1567 1567
1568 static struct spear_modemux sdhci_modemux[] = { 1568 static struct spear_modemux sdhci_modemux[] = {
1569 { 1569 {
1570 .muxregs = sdhci_muxreg, 1570 .muxregs = sdhci_muxreg,
1571 .nmuxregs = ARRAY_SIZE(sdhci_muxreg), 1571 .nmuxregs = ARRAY_SIZE(sdhci_muxreg),
1572 }, 1572 },
1573 }; 1573 };
1574 1574
1575 static struct spear_pingroup sdhci_pingroup = { 1575 static struct spear_pingroup sdhci_pingroup = {
1576 .name = "sdhci_grp", 1576 .name = "sdhci_grp",
1577 .pins = mcif_pins, 1577 .pins = mcif_pins,
1578 .npins = ARRAY_SIZE(mcif_pins), 1578 .npins = ARRAY_SIZE(mcif_pins),
1579 .modemuxs = sdhci_modemux, 1579 .modemuxs = sdhci_modemux,
1580 .nmodemuxs = ARRAY_SIZE(sdhci_modemux), 1580 .nmodemuxs = ARRAY_SIZE(sdhci_modemux),
1581 }; 1581 };
1582 1582
1583 static const char *const sdhci_grps[] = { "sdhci_grp" }; 1583 static const char *const sdhci_grps[] = { "sdhci_grp" };
1584 static struct spear_function sdhci_function = { 1584 static struct spear_function sdhci_function = {
1585 .name = "sdhci", 1585 .name = "sdhci",
1586 .groups = sdhci_grps, 1586 .groups = sdhci_grps,
1587 .ngroups = ARRAY_SIZE(sdhci_grps), 1587 .ngroups = ARRAY_SIZE(sdhci_grps),
1588 }; 1588 };
1589 1589
1590 /* Pad multiplexing for cf device */ 1590 /* Pad multiplexing for cf device */
1591 static struct spear_muxreg cf_muxreg[] = { 1591 static struct spear_muxreg cf_muxreg[] = {
1592 MCIF_MUXREG, 1592 MCIF_MUXREG,
1593 { 1593 {
1594 .reg = PERIP_CFG, 1594 .reg = PERIP_CFG,
1595 .mask = MCIF_SEL_MASK, 1595 .mask = MCIF_SEL_MASK,
1596 .val = MCIF_SEL_CF, 1596 .val = MCIF_SEL_CF,
1597 }, 1597 },
1598 }; 1598 };
1599 1599
1600 static struct spear_modemux cf_modemux[] = { 1600 static struct spear_modemux cf_modemux[] = {
1601 { 1601 {
1602 .muxregs = cf_muxreg, 1602 .muxregs = cf_muxreg,
1603 .nmuxregs = ARRAY_SIZE(cf_muxreg), 1603 .nmuxregs = ARRAY_SIZE(cf_muxreg),
1604 }, 1604 },
1605 }; 1605 };
1606 1606
1607 static struct spear_pingroup cf_pingroup = { 1607 static struct spear_pingroup cf_pingroup = {
1608 .name = "cf_grp", 1608 .name = "cf_grp",
1609 .pins = mcif_pins, 1609 .pins = mcif_pins,
1610 .npins = ARRAY_SIZE(mcif_pins), 1610 .npins = ARRAY_SIZE(mcif_pins),
1611 .modemuxs = cf_modemux, 1611 .modemuxs = cf_modemux,
1612 .nmodemuxs = ARRAY_SIZE(cf_modemux), 1612 .nmodemuxs = ARRAY_SIZE(cf_modemux),
1613 }; 1613 };
1614 1614
1615 static const char *const cf_grps[] = { "cf_grp" }; 1615 static const char *const cf_grps[] = { "cf_grp" };
1616 static struct spear_function cf_function = { 1616 static struct spear_function cf_function = {
1617 .name = "cf", 1617 .name = "cf",
1618 .groups = cf_grps, 1618 .groups = cf_grps,
1619 .ngroups = ARRAY_SIZE(cf_grps), 1619 .ngroups = ARRAY_SIZE(cf_grps),
1620 }; 1620 };
1621 1621
1622 /* Pad multiplexing for xd device */ 1622 /* Pad multiplexing for xd device */
1623 static struct spear_muxreg xd_muxreg[] = { 1623 static struct spear_muxreg xd_muxreg[] = {
1624 MCIF_MUXREG, 1624 MCIF_MUXREG,
1625 { 1625 {
1626 .reg = PERIP_CFG, 1626 .reg = PERIP_CFG,
1627 .mask = MCIF_SEL_MASK, 1627 .mask = MCIF_SEL_MASK,
1628 .val = MCIF_SEL_XD, 1628 .val = MCIF_SEL_XD,
1629 }, 1629 },
1630 }; 1630 };
1631 1631
1632 static struct spear_modemux xd_modemux[] = { 1632 static struct spear_modemux xd_modemux[] = {
1633 { 1633 {
1634 .muxregs = xd_muxreg, 1634 .muxregs = xd_muxreg,
1635 .nmuxregs = ARRAY_SIZE(xd_muxreg), 1635 .nmuxregs = ARRAY_SIZE(xd_muxreg),
1636 }, 1636 },
1637 }; 1637 };
1638 1638
1639 static struct spear_pingroup xd_pingroup = { 1639 static struct spear_pingroup xd_pingroup = {
1640 .name = "xd_grp", 1640 .name = "xd_grp",
1641 .pins = mcif_pins, 1641 .pins = mcif_pins,
1642 .npins = ARRAY_SIZE(mcif_pins), 1642 .npins = ARRAY_SIZE(mcif_pins),
1643 .modemuxs = xd_modemux, 1643 .modemuxs = xd_modemux,
1644 .nmodemuxs = ARRAY_SIZE(xd_modemux), 1644 .nmodemuxs = ARRAY_SIZE(xd_modemux),
1645 }; 1645 };
1646 1646
1647 static const char *const xd_grps[] = { "xd_grp" }; 1647 static const char *const xd_grps[] = { "xd_grp" };
1648 static struct spear_function xd_function = { 1648 static struct spear_function xd_function = {
1649 .name = "xd", 1649 .name = "xd",
1650 .groups = xd_grps, 1650 .groups = xd_grps,
1651 .ngroups = ARRAY_SIZE(xd_grps), 1651 .ngroups = ARRAY_SIZE(xd_grps),
1652 }; 1652 };
1653 1653
1654 /* pad multiplexing for clcd device */ 1654 /* pad multiplexing for clcd device */
1655 static const unsigned clcd_pins[] = { 138, 139, 140, 141, 142, 143, 144, 145, 1655 static const unsigned clcd_pins[] = { 138, 139, 140, 141, 142, 143, 144, 145,
1656 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 1656 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
1657 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 1657 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
1658 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 1658 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187,
1659 188, 189, 190, 191 }; 1659 188, 189, 190, 191 };
1660 static struct spear_muxreg clcd_muxreg[] = { 1660 static struct spear_muxreg clcd_muxreg[] = {
1661 { 1661 {
1662 .reg = PAD_SHARED_IP_EN_1, 1662 .reg = PAD_SHARED_IP_EN_1,
1663 .mask = ARM_TRACE_MASK | MIPHY_DBG_MASK, 1663 .mask = ARM_TRACE_MASK | MIPHY_DBG_MASK,
1664 .val = 0, 1664 .val = 0,
1665 }, { 1665 }, {
1666 .reg = PAD_FUNCTION_EN_5, 1666 .reg = PAD_FUNCTION_EN_5,
1667 .mask = CLCD_REG4_MASK | CLCD_AND_ARM_TRACE_REG4_MASK, 1667 .mask = CLCD_REG4_MASK | CLCD_AND_ARM_TRACE_REG4_MASK,
1668 .val = CLCD_REG4_MASK | CLCD_AND_ARM_TRACE_REG4_MASK, 1668 .val = CLCD_REG4_MASK | CLCD_AND_ARM_TRACE_REG4_MASK,
1669 }, { 1669 }, {
1670 .reg = PAD_FUNCTION_EN_6, 1670 .reg = PAD_FUNCTION_EN_6,
1671 .mask = CLCD_AND_ARM_TRACE_REG5_MASK, 1671 .mask = CLCD_AND_ARM_TRACE_REG5_MASK,
1672 .val = CLCD_AND_ARM_TRACE_REG5_MASK, 1672 .val = CLCD_AND_ARM_TRACE_REG5_MASK,
1673 }, { 1673 }, {
1674 .reg = PAD_FUNCTION_EN_7, 1674 .reg = PAD_FUNCTION_EN_7,
1675 .mask = CLCD_AND_ARM_TRACE_REG6_MASK, 1675 .mask = CLCD_AND_ARM_TRACE_REG6_MASK,
1676 .val = CLCD_AND_ARM_TRACE_REG6_MASK, 1676 .val = CLCD_AND_ARM_TRACE_REG6_MASK,
1677 }, 1677 },
1678 }; 1678 };
1679 1679
1680 static struct spear_modemux clcd_modemux[] = { 1680 static struct spear_modemux clcd_modemux[] = {
1681 { 1681 {
1682 .muxregs = clcd_muxreg, 1682 .muxregs = clcd_muxreg,
1683 .nmuxregs = ARRAY_SIZE(clcd_muxreg), 1683 .nmuxregs = ARRAY_SIZE(clcd_muxreg),
1684 }, 1684 },
1685 }; 1685 };
1686 1686
1687 static struct spear_pingroup clcd_pingroup = { 1687 static struct spear_pingroup clcd_pingroup = {
1688 .name = "clcd_grp", 1688 .name = "clcd_grp",
1689 .pins = clcd_pins, 1689 .pins = clcd_pins,
1690 .npins = ARRAY_SIZE(clcd_pins), 1690 .npins = ARRAY_SIZE(clcd_pins),
1691 .modemuxs = clcd_modemux, 1691 .modemuxs = clcd_modemux,
1692 .nmodemuxs = ARRAY_SIZE(clcd_modemux), 1692 .nmodemuxs = ARRAY_SIZE(clcd_modemux),
1693 }; 1693 };
1694 1694
1695 /* Disable cld runtime to save panel damage */ 1695 /* Disable cld runtime to save panel damage */
1696 static struct spear_muxreg clcd_sleep_muxreg[] = { 1696 static struct spear_muxreg clcd_sleep_muxreg[] = {
1697 { 1697 {
1698 .reg = PAD_SHARED_IP_EN_1, 1698 .reg = PAD_SHARED_IP_EN_1,
1699 .mask = ARM_TRACE_MASK | MIPHY_DBG_MASK, 1699 .mask = ARM_TRACE_MASK | MIPHY_DBG_MASK,
1700 .val = 0, 1700 .val = 0,
1701 }, { 1701 }, {
1702 .reg = PAD_FUNCTION_EN_5, 1702 .reg = PAD_FUNCTION_EN_5,
1703 .mask = CLCD_REG4_MASK | CLCD_AND_ARM_TRACE_REG4_MASK, 1703 .mask = CLCD_REG4_MASK | CLCD_AND_ARM_TRACE_REG4_MASK,
1704 .val = 0x0, 1704 .val = 0x0,
1705 }, { 1705 }, {
1706 .reg = PAD_FUNCTION_EN_6, 1706 .reg = PAD_FUNCTION_EN_6,
1707 .mask = CLCD_AND_ARM_TRACE_REG5_MASK, 1707 .mask = CLCD_AND_ARM_TRACE_REG5_MASK,
1708 .val = 0x0, 1708 .val = 0x0,
1709 }, { 1709 }, {
1710 .reg = PAD_FUNCTION_EN_7, 1710 .reg = PAD_FUNCTION_EN_7,
1711 .mask = CLCD_AND_ARM_TRACE_REG6_MASK, 1711 .mask = CLCD_AND_ARM_TRACE_REG6_MASK,
1712 .val = 0x0, 1712 .val = 0x0,
1713 }, 1713 },
1714 }; 1714 };
1715 1715
1716 static struct spear_modemux clcd_sleep_modemux[] = { 1716 static struct spear_modemux clcd_sleep_modemux[] = {
1717 { 1717 {
1718 .muxregs = clcd_sleep_muxreg, 1718 .muxregs = clcd_sleep_muxreg,
1719 .nmuxregs = ARRAY_SIZE(clcd_sleep_muxreg), 1719 .nmuxregs = ARRAY_SIZE(clcd_sleep_muxreg),
1720 }, 1720 },
1721 }; 1721 };
1722 1722
1723 static struct spear_pingroup clcd_sleep_pingroup = { 1723 static struct spear_pingroup clcd_sleep_pingroup = {
1724 .name = "clcd_sleep_grp", 1724 .name = "clcd_sleep_grp",
1725 .pins = clcd_pins, 1725 .pins = clcd_pins,
1726 .npins = ARRAY_SIZE(clcd_pins), 1726 .npins = ARRAY_SIZE(clcd_pins),
1727 .modemuxs = clcd_sleep_modemux, 1727 .modemuxs = clcd_sleep_modemux,
1728 .nmodemuxs = ARRAY_SIZE(clcd_sleep_modemux), 1728 .nmodemuxs = ARRAY_SIZE(clcd_sleep_modemux),
1729 }; 1729 };
1730 1730
1731 static const char *const clcd_grps[] = { "clcd_grp", "clcd_sleep_grp" }; 1731 static const char *const clcd_grps[] = { "clcd_grp", "clcd_sleep_grp" };
1732 static struct spear_function clcd_function = { 1732 static struct spear_function clcd_function = {
1733 .name = "clcd", 1733 .name = "clcd",
1734 .groups = clcd_grps, 1734 .groups = clcd_grps,
1735 .ngroups = ARRAY_SIZE(clcd_grps), 1735 .ngroups = ARRAY_SIZE(clcd_grps),
1736 }; 1736 };
1737 1737
1738 /* pad multiplexing for arm_trace device */ 1738 /* pad multiplexing for arm_trace device */
1739 static const unsigned arm_trace_pins[] = { 158, 159, 160, 161, 162, 163, 164, 1739 static const unsigned arm_trace_pins[] = { 158, 159, 160, 161, 162, 163, 164,
1740 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 1740 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
1741 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 1741 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
1742 193, 194, 195, 196, 197, 198, 199, 200 }; 1742 193, 194, 195, 196, 197, 198, 199, 200 };
1743 static struct spear_muxreg arm_trace_muxreg[] = { 1743 static struct spear_muxreg arm_trace_muxreg[] = {
1744 { 1744 {
1745 .reg = PAD_SHARED_IP_EN_1, 1745 .reg = PAD_SHARED_IP_EN_1,
1746 .mask = ARM_TRACE_MASK, 1746 .mask = ARM_TRACE_MASK,
1747 .val = ARM_TRACE_MASK, 1747 .val = ARM_TRACE_MASK,
1748 }, { 1748 }, {
1749 .reg = PAD_FUNCTION_EN_5, 1749 .reg = PAD_FUNCTION_EN_5,
1750 .mask = CLCD_AND_ARM_TRACE_REG4_MASK, 1750 .mask = CLCD_AND_ARM_TRACE_REG4_MASK,
1751 .val = CLCD_AND_ARM_TRACE_REG4_MASK, 1751 .val = CLCD_AND_ARM_TRACE_REG4_MASK,
1752 }, { 1752 }, {
1753 .reg = PAD_FUNCTION_EN_6, 1753 .reg = PAD_FUNCTION_EN_6,
1754 .mask = CLCD_AND_ARM_TRACE_REG5_MASK, 1754 .mask = CLCD_AND_ARM_TRACE_REG5_MASK,
1755 .val = CLCD_AND_ARM_TRACE_REG5_MASK, 1755 .val = CLCD_AND_ARM_TRACE_REG5_MASK,
1756 }, { 1756 }, {
1757 .reg = PAD_FUNCTION_EN_7, 1757 .reg = PAD_FUNCTION_EN_7,
1758 .mask = CLCD_AND_ARM_TRACE_REG6_MASK, 1758 .mask = CLCD_AND_ARM_TRACE_REG6_MASK,
1759 .val = CLCD_AND_ARM_TRACE_REG6_MASK, 1759 .val = CLCD_AND_ARM_TRACE_REG6_MASK,
1760 }, 1760 },
1761 }; 1761 };
1762 1762
1763 static struct spear_modemux arm_trace_modemux[] = { 1763 static struct spear_modemux arm_trace_modemux[] = {
1764 { 1764 {
1765 .muxregs = arm_trace_muxreg, 1765 .muxregs = arm_trace_muxreg,
1766 .nmuxregs = ARRAY_SIZE(arm_trace_muxreg), 1766 .nmuxregs = ARRAY_SIZE(arm_trace_muxreg),
1767 }, 1767 },
1768 }; 1768 };
1769 1769
1770 static struct spear_pingroup arm_trace_pingroup = { 1770 static struct spear_pingroup arm_trace_pingroup = {
1771 .name = "arm_trace_grp", 1771 .name = "arm_trace_grp",
1772 .pins = arm_trace_pins, 1772 .pins = arm_trace_pins,
1773 .npins = ARRAY_SIZE(arm_trace_pins), 1773 .npins = ARRAY_SIZE(arm_trace_pins),
1774 .modemuxs = arm_trace_modemux, 1774 .modemuxs = arm_trace_modemux,
1775 .nmodemuxs = ARRAY_SIZE(arm_trace_modemux), 1775 .nmodemuxs = ARRAY_SIZE(arm_trace_modemux),
1776 }; 1776 };
1777 1777
1778 static const char *const arm_trace_grps[] = { "arm_trace_grp" }; 1778 static const char *const arm_trace_grps[] = { "arm_trace_grp" };
1779 static struct spear_function arm_trace_function = { 1779 static struct spear_function arm_trace_function = {
1780 .name = "arm_trace", 1780 .name = "arm_trace",
1781 .groups = arm_trace_grps, 1781 .groups = arm_trace_grps,
1782 .ngroups = ARRAY_SIZE(arm_trace_grps), 1782 .ngroups = ARRAY_SIZE(arm_trace_grps),
1783 }; 1783 };
1784 1784
1785 /* pad multiplexing for miphy_dbg device */ 1785 /* pad multiplexing for miphy_dbg device */
1786 static const unsigned miphy_dbg_pins[] = { 96, 97, 98, 99, 100, 101, 102, 103, 1786 static const unsigned miphy_dbg_pins[] = { 96, 97, 98, 99, 100, 101, 102, 103,
1787 132, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 1787 132, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
1788 148, 149, 150, 151, 152, 153, 154, 155, 156, 157 }; 1788 148, 149, 150, 151, 152, 153, 154, 155, 156, 157 };
1789 static struct spear_muxreg miphy_dbg_muxreg[] = { 1789 static struct spear_muxreg miphy_dbg_muxreg[] = {
1790 { 1790 {
1791 .reg = PAD_SHARED_IP_EN_1, 1791 .reg = PAD_SHARED_IP_EN_1,
1792 .mask = MIPHY_DBG_MASK, 1792 .mask = MIPHY_DBG_MASK,
1793 .val = MIPHY_DBG_MASK, 1793 .val = MIPHY_DBG_MASK,
1794 }, { 1794 }, {
1795 .reg = PAD_FUNCTION_EN_5, 1795 .reg = PAD_FUNCTION_EN_5,
1796 .mask = DEVS_GRP_AND_MIPHY_DBG_REG4_MASK, 1796 .mask = DEVS_GRP_AND_MIPHY_DBG_REG4_MASK,
1797 .val = DEVS_GRP_AND_MIPHY_DBG_REG4_MASK, 1797 .val = DEVS_GRP_AND_MIPHY_DBG_REG4_MASK,
1798 }, 1798 },
1799 }; 1799 };
1800 1800
1801 static struct spear_modemux miphy_dbg_modemux[] = { 1801 static struct spear_modemux miphy_dbg_modemux[] = {
1802 { 1802 {
1803 .muxregs = miphy_dbg_muxreg, 1803 .muxregs = miphy_dbg_muxreg,
1804 .nmuxregs = ARRAY_SIZE(miphy_dbg_muxreg), 1804 .nmuxregs = ARRAY_SIZE(miphy_dbg_muxreg),
1805 }, 1805 },
1806 }; 1806 };
1807 1807
1808 static struct spear_pingroup miphy_dbg_pingroup = { 1808 static struct spear_pingroup miphy_dbg_pingroup = {
1809 .name = "miphy_dbg_grp", 1809 .name = "miphy_dbg_grp",
1810 .pins = miphy_dbg_pins, 1810 .pins = miphy_dbg_pins,
1811 .npins = ARRAY_SIZE(miphy_dbg_pins), 1811 .npins = ARRAY_SIZE(miphy_dbg_pins),
1812 .modemuxs = miphy_dbg_modemux, 1812 .modemuxs = miphy_dbg_modemux,
1813 .nmodemuxs = ARRAY_SIZE(miphy_dbg_modemux), 1813 .nmodemuxs = ARRAY_SIZE(miphy_dbg_modemux),
1814 }; 1814 };
1815 1815
1816 static const char *const miphy_dbg_grps[] = { "miphy_dbg_grp" }; 1816 static const char *const miphy_dbg_grps[] = { "miphy_dbg_grp" };
1817 static struct spear_function miphy_dbg_function = { 1817 static struct spear_function miphy_dbg_function = {
1818 .name = "miphy_dbg", 1818 .name = "miphy_dbg",
1819 .groups = miphy_dbg_grps, 1819 .groups = miphy_dbg_grps,
1820 .ngroups = ARRAY_SIZE(miphy_dbg_grps), 1820 .ngroups = ARRAY_SIZE(miphy_dbg_grps),
1821 }; 1821 };
1822 1822
1823 /* pad multiplexing for pcie device */ 1823 /* pad multiplexing for pcie device */
1824 static const unsigned pcie_pins[] = { 250 }; 1824 static const unsigned pcie_pins[] = { 250 };
1825 static struct spear_muxreg pcie_muxreg[] = { 1825 static struct spear_muxreg pcie_muxreg[] = {
1826 { 1826 {
1827 .reg = PCIE_SATA_CFG, 1827 .reg = PCIE_SATA_CFG,
1828 .mask = SATA_PCIE_CFG_MASK, 1828 .mask = SATA_PCIE_CFG_MASK,
1829 .val = PCIE_CFG_VAL, 1829 .val = PCIE_CFG_VAL,
1830 }, 1830 },
1831 }; 1831 };
1832 1832
1833 static struct spear_modemux pcie_modemux[] = { 1833 static struct spear_modemux pcie_modemux[] = {
1834 { 1834 {
1835 .muxregs = pcie_muxreg, 1835 .muxregs = pcie_muxreg,
1836 .nmuxregs = ARRAY_SIZE(pcie_muxreg), 1836 .nmuxregs = ARRAY_SIZE(pcie_muxreg),
1837 }, 1837 },
1838 }; 1838 };
1839 1839
1840 static struct spear_pingroup pcie_pingroup = { 1840 static struct spear_pingroup pcie_pingroup = {
1841 .name = "pcie_grp", 1841 .name = "pcie_grp",
1842 .pins = pcie_pins, 1842 .pins = pcie_pins,
1843 .npins = ARRAY_SIZE(pcie_pins), 1843 .npins = ARRAY_SIZE(pcie_pins),
1844 .modemuxs = pcie_modemux, 1844 .modemuxs = pcie_modemux,
1845 .nmodemuxs = ARRAY_SIZE(pcie_modemux), 1845 .nmodemuxs = ARRAY_SIZE(pcie_modemux),
1846 }; 1846 };
1847 1847
1848 static const char *const pcie_grps[] = { "pcie_grp" }; 1848 static const char *const pcie_grps[] = { "pcie_grp" };
1849 static struct spear_function pcie_function = { 1849 static struct spear_function pcie_function = {
1850 .name = "pcie", 1850 .name = "pcie",
1851 .groups = pcie_grps, 1851 .groups = pcie_grps,
1852 .ngroups = ARRAY_SIZE(pcie_grps), 1852 .ngroups = ARRAY_SIZE(pcie_grps),
1853 }; 1853 };
1854 1854
1855 /* pad multiplexing for sata device */ 1855 /* pad multiplexing for sata device */
1856 static const unsigned sata_pins[] = { 250 }; 1856 static const unsigned sata_pins[] = { 250 };
1857 static struct spear_muxreg sata_muxreg[] = { 1857 static struct spear_muxreg sata_muxreg[] = {
1858 { 1858 {
1859 .reg = PCIE_SATA_CFG, 1859 .reg = PCIE_SATA_CFG,
1860 .mask = SATA_PCIE_CFG_MASK, 1860 .mask = SATA_PCIE_CFG_MASK,
1861 .val = SATA_CFG_VAL, 1861 .val = SATA_CFG_VAL,
1862 }, 1862 },
1863 }; 1863 };
1864 1864
1865 static struct spear_modemux sata_modemux[] = { 1865 static struct spear_modemux sata_modemux[] = {
1866 { 1866 {
1867 .muxregs = sata_muxreg, 1867 .muxregs = sata_muxreg,
1868 .nmuxregs = ARRAY_SIZE(sata_muxreg), 1868 .nmuxregs = ARRAY_SIZE(sata_muxreg),
1869 }, 1869 },
1870 }; 1870 };
1871 1871
1872 static struct spear_pingroup sata_pingroup = { 1872 static struct spear_pingroup sata_pingroup = {
1873 .name = "sata_grp", 1873 .name = "sata_grp",
1874 .pins = sata_pins, 1874 .pins = sata_pins,
1875 .npins = ARRAY_SIZE(sata_pins), 1875 .npins = ARRAY_SIZE(sata_pins),
1876 .modemuxs = sata_modemux, 1876 .modemuxs = sata_modemux,
1877 .nmodemuxs = ARRAY_SIZE(sata_modemux), 1877 .nmodemuxs = ARRAY_SIZE(sata_modemux),
1878 }; 1878 };
1879 1879
1880 static const char *const sata_grps[] = { "sata_grp" }; 1880 static const char *const sata_grps[] = { "sata_grp" };
1881 static struct spear_function sata_function = { 1881 static struct spear_function sata_function = {
1882 .name = "sata", 1882 .name = "sata",
1883 .groups = sata_grps, 1883 .groups = sata_grps,
1884 .ngroups = ARRAY_SIZE(sata_grps), 1884 .ngroups = ARRAY_SIZE(sata_grps),
1885 }; 1885 };
1886 1886
1887 /* pingroups */ 1887 /* pingroups */
1888 static struct spear_pingroup *spear1340_pingroups[] = { 1888 static struct spear_pingroup *spear1340_pingroups[] = {
1889 &pads_as_gpio_pingroup, 1889 &pads_as_gpio_pingroup,
1890 &fsmc_8bit_pingroup, 1890 &fsmc_8bit_pingroup,
1891 &fsmc_16bit_pingroup, 1891 &fsmc_16bit_pingroup,
1892 &fsmc_pnor_pingroup, 1892 &fsmc_pnor_pingroup,
1893 &keyboard_row_col_pingroup, 1893 &keyboard_row_col_pingroup,
1894 &keyboard_col5_pingroup, 1894 &keyboard_col5_pingroup,
1895 &spdif_in_pingroup, 1895 &spdif_in_pingroup,
1896 &spdif_out_pingroup, 1896 &spdif_out_pingroup,
1897 &gpt_0_1_pingroup, 1897 &gpt_0_1_pingroup,
1898 &pwm0_pingroup, 1898 &pwm0_pingroup,
1899 &pwm1_pingroup, 1899 &pwm1_pingroup,
1900 &pwm2_pingroup, 1900 &pwm2_pingroup,
1901 &pwm3_pingroup, 1901 &pwm3_pingroup,
1902 &vip_mux_pingroup, 1902 &vip_mux_pingroup,
1903 &vip_mux_cam0_pingroup, 1903 &vip_mux_cam0_pingroup,
1904 &vip_mux_cam1_pingroup, 1904 &vip_mux_cam1_pingroup,
1905 &vip_mux_cam2_pingroup, 1905 &vip_mux_cam2_pingroup,
1906 &vip_mux_cam3_pingroup, 1906 &vip_mux_cam3_pingroup,
1907 &cam0_pingroup, 1907 &cam0_pingroup,
1908 &cam1_pingroup, 1908 &cam1_pingroup,
1909 &cam2_pingroup, 1909 &cam2_pingroup,
1910 &cam3_pingroup, 1910 &cam3_pingroup,
1911 &smi_pingroup, 1911 &smi_pingroup,
1912 &ssp0_pingroup, 1912 &ssp0_pingroup,
1913 &ssp0_cs1_pingroup, 1913 &ssp0_cs1_pingroup,
1914 &ssp0_cs2_pingroup, 1914 &ssp0_cs2_pingroup,
1915 &ssp0_cs3_pingroup, 1915 &ssp0_cs3_pingroup,
1916 &uart0_pingroup, 1916 &uart0_pingroup,
1917 &uart0_enh_pingroup, 1917 &uart0_enh_pingroup,
1918 &uart1_pingroup, 1918 &uart1_pingroup,
1919 &i2s_in_pingroup, 1919 &i2s_in_pingroup,
1920 &i2s_out_pingroup, 1920 &i2s_out_pingroup,
1921 &gmii_pingroup, 1921 &gmii_pingroup,
1922 &rgmii_pingroup, 1922 &rgmii_pingroup,
1923 &rmii_pingroup, 1923 &rmii_pingroup,
1924 &sgmii_pingroup, 1924 &sgmii_pingroup,
1925 &i2c0_pingroup, 1925 &i2c0_pingroup,
1926 &i2c1_pingroup, 1926 &i2c1_pingroup,
1927 &cec0_pingroup, 1927 &cec0_pingroup,
1928 &cec1_pingroup, 1928 &cec1_pingroup,
1929 &sdhci_pingroup, 1929 &sdhci_pingroup,
1930 &cf_pingroup, 1930 &cf_pingroup,
1931 &xd_pingroup, 1931 &xd_pingroup,
1932 &clcd_sleep_pingroup, 1932 &clcd_sleep_pingroup,
1933 &clcd_pingroup, 1933 &clcd_pingroup,
1934 &arm_trace_pingroup, 1934 &arm_trace_pingroup,
1935 &miphy_dbg_pingroup, 1935 &miphy_dbg_pingroup,
1936 &pcie_pingroup, 1936 &pcie_pingroup,
1937 &sata_pingroup, 1937 &sata_pingroup,
1938 }; 1938 };
1939 1939
1940 /* functions */ 1940 /* functions */
1941 static struct spear_function *spear1340_functions[] = { 1941 static struct spear_function *spear1340_functions[] = {
1942 &pads_as_gpio_function, 1942 &pads_as_gpio_function,
1943 &fsmc_function, 1943 &fsmc_function,
1944 &keyboard_function, 1944 &keyboard_function,
1945 &spdif_in_function, 1945 &spdif_in_function,
1946 &spdif_out_function, 1946 &spdif_out_function,
1947 &gpt_0_1_function, 1947 &gpt_0_1_function,
1948 &pwm_function, 1948 &pwm_function,
1949 &vip_function, 1949 &vip_function,
1950 &cam0_function, 1950 &cam0_function,
1951 &cam1_function, 1951 &cam1_function,
1952 &cam2_function, 1952 &cam2_function,
1953 &cam3_function, 1953 &cam3_function,
1954 &smi_function, 1954 &smi_function,
1955 &ssp0_function, 1955 &ssp0_function,
1956 &uart0_function, 1956 &uart0_function,
1957 &uart1_function, 1957 &uart1_function,
1958 &i2s_function, 1958 &i2s_function,
1959 &gmac_function, 1959 &gmac_function,
1960 &i2c0_function, 1960 &i2c0_function,
1961 &i2c1_function, 1961 &i2c1_function,
1962 &cec0_function, 1962 &cec0_function,
1963 &cec1_function, 1963 &cec1_function,
1964 &sdhci_function, 1964 &sdhci_function,
1965 &cf_function, 1965 &cf_function,
1966 &xd_function, 1966 &xd_function,
1967 &clcd_function, 1967 &clcd_function,
1968 &arm_trace_function, 1968 &arm_trace_function,
1969 &miphy_dbg_function, 1969 &miphy_dbg_function,
1970 &pcie_function, 1970 &pcie_function,
1971 &sata_function, 1971 &sata_function,
1972 }; 1972 };
1973 1973
1974 static struct spear_pinctrl_machdata spear1340_machdata = { 1974 static struct spear_pinctrl_machdata spear1340_machdata = {
1975 .pins = spear1340_pins, 1975 .pins = spear1340_pins,
1976 .npins = ARRAY_SIZE(spear1340_pins), 1976 .npins = ARRAY_SIZE(spear1340_pins),
1977 .groups = spear1340_pingroups, 1977 .groups = spear1340_pingroups,
1978 .ngroups = ARRAY_SIZE(spear1340_pingroups), 1978 .ngroups = ARRAY_SIZE(spear1340_pingroups),
1979 .functions = spear1340_functions, 1979 .functions = spear1340_functions,
1980 .nfunctions = ARRAY_SIZE(spear1340_functions), 1980 .nfunctions = ARRAY_SIZE(spear1340_functions),
1981 .modes_supported = false, 1981 .modes_supported = false,
1982 }; 1982 };
1983 1983
1984 static struct of_device_id spear1340_pinctrl_of_match[] = { 1984 static struct of_device_id spear1340_pinctrl_of_match[] = {
1985 { 1985 {
1986 .compatible = "st,spear1340-pinmux", 1986 .compatible = "st,spear1340-pinmux",
1987 }, 1987 },
1988 {}, 1988 {},
1989 }; 1989 };
1990 1990
1991 static int __devinit spear1340_pinctrl_probe(struct platform_device *pdev) 1991 static int __devinit spear1340_pinctrl_probe(struct platform_device *pdev)
1992 { 1992 {
1993 return spear_pinctrl_probe(pdev, &spear1340_machdata); 1993 return spear_pinctrl_probe(pdev, &spear1340_machdata);
1994 } 1994 }
1995 1995
1996 static int __devexit spear1340_pinctrl_remove(struct platform_device *pdev) 1996 static int spear1340_pinctrl_remove(struct platform_device *pdev)
1997 { 1997 {
1998 return spear_pinctrl_remove(pdev); 1998 return spear_pinctrl_remove(pdev);
1999 } 1999 }
2000 2000
2001 static struct platform_driver spear1340_pinctrl_driver = { 2001 static struct platform_driver spear1340_pinctrl_driver = {
2002 .driver = { 2002 .driver = {
2003 .name = DRIVER_NAME, 2003 .name = DRIVER_NAME,
2004 .owner = THIS_MODULE, 2004 .owner = THIS_MODULE,
2005 .of_match_table = spear1340_pinctrl_of_match, 2005 .of_match_table = spear1340_pinctrl_of_match,
2006 }, 2006 },
2007 .probe = spear1340_pinctrl_probe, 2007 .probe = spear1340_pinctrl_probe,
2008 .remove = spear1340_pinctrl_remove, 2008 .remove = spear1340_pinctrl_remove,
2009 }; 2009 };
2010 2010
2011 static int __init spear1340_pinctrl_init(void) 2011 static int __init spear1340_pinctrl_init(void)
2012 { 2012 {
2013 return platform_driver_register(&spear1340_pinctrl_driver); 2013 return platform_driver_register(&spear1340_pinctrl_driver);
2014 } 2014 }
2015 arch_initcall(spear1340_pinctrl_init); 2015 arch_initcall(spear1340_pinctrl_init);
2016 2016
2017 static void __exit spear1340_pinctrl_exit(void) 2017 static void __exit spear1340_pinctrl_exit(void)
2018 { 2018 {
2019 platform_driver_unregister(&spear1340_pinctrl_driver); 2019 platform_driver_unregister(&spear1340_pinctrl_driver);
2020 } 2020 }
2021 module_exit(spear1340_pinctrl_exit); 2021 module_exit(spear1340_pinctrl_exit);
2022 2022
2023 MODULE_AUTHOR("Viresh Kumar <viresh.linux@gmail.com>"); 2023 MODULE_AUTHOR("Viresh Kumar <viresh.linux@gmail.com>");
2024 MODULE_DESCRIPTION("ST Microelectronics SPEAr1340 pinctrl driver"); 2024 MODULE_DESCRIPTION("ST Microelectronics SPEAr1340 pinctrl driver");
2025 MODULE_LICENSE("GPL v2"); 2025 MODULE_LICENSE("GPL v2");
2026 MODULE_DEVICE_TABLE(of, spear1340_pinctrl_of_match); 2026 MODULE_DEVICE_TABLE(of, spear1340_pinctrl_of_match);
2027 2027
drivers/pinctrl/spear/pinctrl-spear300.c
1 /* 1 /*
2 * Driver for the ST Microelectronics SPEAr300 pinmux 2 * Driver for the ST Microelectronics SPEAr300 pinmux
3 * 3 *
4 * Copyright (C) 2012 ST Microelectronics 4 * Copyright (C) 2012 ST Microelectronics
5 * Viresh Kumar <viresh.linux@gmail.com> 5 * Viresh Kumar <viresh.linux@gmail.com>
6 * 6 *
7 * This file is licensed under the terms of the GNU General Public 7 * This file is licensed under the terms of the GNU General Public
8 * License version 2. This program is licensed "as is" without any 8 * License version 2. This program is licensed "as is" without any
9 * warranty of any kind, whether express or implied. 9 * warranty of any kind, whether express or implied.
10 */ 10 */
11 11
12 #include <linux/err.h> 12 #include <linux/err.h>
13 #include <linux/init.h> 13 #include <linux/init.h>
14 #include <linux/module.h> 14 #include <linux/module.h>
15 #include <linux/of_device.h> 15 #include <linux/of_device.h>
16 #include <linux/platform_device.h> 16 #include <linux/platform_device.h>
17 #include "pinctrl-spear3xx.h" 17 #include "pinctrl-spear3xx.h"
18 18
19 #define DRIVER_NAME "spear300-pinmux" 19 #define DRIVER_NAME "spear300-pinmux"
20 20
21 /* addresses */ 21 /* addresses */
22 #define PMX_CONFIG_REG 0x00 22 #define PMX_CONFIG_REG 0x00
23 #define MODE_CONFIG_REG 0x04 23 #define MODE_CONFIG_REG 0x04
24 24
25 /* modes */ 25 /* modes */
26 #define NAND_MODE (1 << 0) 26 #define NAND_MODE (1 << 0)
27 #define NOR_MODE (1 << 1) 27 #define NOR_MODE (1 << 1)
28 #define PHOTO_FRAME_MODE (1 << 2) 28 #define PHOTO_FRAME_MODE (1 << 2)
29 #define LEND_IP_PHONE_MODE (1 << 3) 29 #define LEND_IP_PHONE_MODE (1 << 3)
30 #define HEND_IP_PHONE_MODE (1 << 4) 30 #define HEND_IP_PHONE_MODE (1 << 4)
31 #define LEND_WIFI_PHONE_MODE (1 << 5) 31 #define LEND_WIFI_PHONE_MODE (1 << 5)
32 #define HEND_WIFI_PHONE_MODE (1 << 6) 32 #define HEND_WIFI_PHONE_MODE (1 << 6)
33 #define ATA_PABX_WI2S_MODE (1 << 7) 33 #define ATA_PABX_WI2S_MODE (1 << 7)
34 #define ATA_PABX_I2S_MODE (1 << 8) 34 #define ATA_PABX_I2S_MODE (1 << 8)
35 #define CAML_LCDW_MODE (1 << 9) 35 #define CAML_LCDW_MODE (1 << 9)
36 #define CAMU_LCD_MODE (1 << 10) 36 #define CAMU_LCD_MODE (1 << 10)
37 #define CAMU_WLCD_MODE (1 << 11) 37 #define CAMU_WLCD_MODE (1 << 11)
38 #define CAML_LCD_MODE (1 << 12) 38 #define CAML_LCD_MODE (1 << 12)
39 39
40 static struct spear_pmx_mode pmx_mode_nand = { 40 static struct spear_pmx_mode pmx_mode_nand = {
41 .name = "nand", 41 .name = "nand",
42 .mode = NAND_MODE, 42 .mode = NAND_MODE,
43 .reg = MODE_CONFIG_REG, 43 .reg = MODE_CONFIG_REG,
44 .mask = 0x0000000F, 44 .mask = 0x0000000F,
45 .val = 0x00, 45 .val = 0x00,
46 }; 46 };
47 47
48 static struct spear_pmx_mode pmx_mode_nor = { 48 static struct spear_pmx_mode pmx_mode_nor = {
49 .name = "nor", 49 .name = "nor",
50 .mode = NOR_MODE, 50 .mode = NOR_MODE,
51 .reg = MODE_CONFIG_REG, 51 .reg = MODE_CONFIG_REG,
52 .mask = 0x0000000F, 52 .mask = 0x0000000F,
53 .val = 0x01, 53 .val = 0x01,
54 }; 54 };
55 55
56 static struct spear_pmx_mode pmx_mode_photo_frame = { 56 static struct spear_pmx_mode pmx_mode_photo_frame = {
57 .name = "photo frame mode", 57 .name = "photo frame mode",
58 .mode = PHOTO_FRAME_MODE, 58 .mode = PHOTO_FRAME_MODE,
59 .reg = MODE_CONFIG_REG, 59 .reg = MODE_CONFIG_REG,
60 .mask = 0x0000000F, 60 .mask = 0x0000000F,
61 .val = 0x02, 61 .val = 0x02,
62 }; 62 };
63 63
64 static struct spear_pmx_mode pmx_mode_lend_ip_phone = { 64 static struct spear_pmx_mode pmx_mode_lend_ip_phone = {
65 .name = "lend ip phone mode", 65 .name = "lend ip phone mode",
66 .mode = LEND_IP_PHONE_MODE, 66 .mode = LEND_IP_PHONE_MODE,
67 .reg = MODE_CONFIG_REG, 67 .reg = MODE_CONFIG_REG,
68 .mask = 0x0000000F, 68 .mask = 0x0000000F,
69 .val = 0x03, 69 .val = 0x03,
70 }; 70 };
71 71
72 static struct spear_pmx_mode pmx_mode_hend_ip_phone = { 72 static struct spear_pmx_mode pmx_mode_hend_ip_phone = {
73 .name = "hend ip phone mode", 73 .name = "hend ip phone mode",
74 .mode = HEND_IP_PHONE_MODE, 74 .mode = HEND_IP_PHONE_MODE,
75 .reg = MODE_CONFIG_REG, 75 .reg = MODE_CONFIG_REG,
76 .mask = 0x0000000F, 76 .mask = 0x0000000F,
77 .val = 0x04, 77 .val = 0x04,
78 }; 78 };
79 79
80 static struct spear_pmx_mode pmx_mode_lend_wifi_phone = { 80 static struct spear_pmx_mode pmx_mode_lend_wifi_phone = {
81 .name = "lend wifi phone mode", 81 .name = "lend wifi phone mode",
82 .mode = LEND_WIFI_PHONE_MODE, 82 .mode = LEND_WIFI_PHONE_MODE,
83 .reg = MODE_CONFIG_REG, 83 .reg = MODE_CONFIG_REG,
84 .mask = 0x0000000F, 84 .mask = 0x0000000F,
85 .val = 0x05, 85 .val = 0x05,
86 }; 86 };
87 87
88 static struct spear_pmx_mode pmx_mode_hend_wifi_phone = { 88 static struct spear_pmx_mode pmx_mode_hend_wifi_phone = {
89 .name = "hend wifi phone mode", 89 .name = "hend wifi phone mode",
90 .mode = HEND_WIFI_PHONE_MODE, 90 .mode = HEND_WIFI_PHONE_MODE,
91 .reg = MODE_CONFIG_REG, 91 .reg = MODE_CONFIG_REG,
92 .mask = 0x0000000F, 92 .mask = 0x0000000F,
93 .val = 0x06, 93 .val = 0x06,
94 }; 94 };
95 95
96 static struct spear_pmx_mode pmx_mode_ata_pabx_wi2s = { 96 static struct spear_pmx_mode pmx_mode_ata_pabx_wi2s = {
97 .name = "ata pabx wi2s mode", 97 .name = "ata pabx wi2s mode",
98 .mode = ATA_PABX_WI2S_MODE, 98 .mode = ATA_PABX_WI2S_MODE,
99 .reg = MODE_CONFIG_REG, 99 .reg = MODE_CONFIG_REG,
100 .mask = 0x0000000F, 100 .mask = 0x0000000F,
101 .val = 0x07, 101 .val = 0x07,
102 }; 102 };
103 103
104 static struct spear_pmx_mode pmx_mode_ata_pabx_i2s = { 104 static struct spear_pmx_mode pmx_mode_ata_pabx_i2s = {
105 .name = "ata pabx i2s mode", 105 .name = "ata pabx i2s mode",
106 .mode = ATA_PABX_I2S_MODE, 106 .mode = ATA_PABX_I2S_MODE,
107 .reg = MODE_CONFIG_REG, 107 .reg = MODE_CONFIG_REG,
108 .mask = 0x0000000F, 108 .mask = 0x0000000F,
109 .val = 0x08, 109 .val = 0x08,
110 }; 110 };
111 111
112 static struct spear_pmx_mode pmx_mode_caml_lcdw = { 112 static struct spear_pmx_mode pmx_mode_caml_lcdw = {
113 .name = "caml lcdw mode", 113 .name = "caml lcdw mode",
114 .mode = CAML_LCDW_MODE, 114 .mode = CAML_LCDW_MODE,
115 .reg = MODE_CONFIG_REG, 115 .reg = MODE_CONFIG_REG,
116 .mask = 0x0000000F, 116 .mask = 0x0000000F,
117 .val = 0x0C, 117 .val = 0x0C,
118 }; 118 };
119 119
120 static struct spear_pmx_mode pmx_mode_camu_lcd = { 120 static struct spear_pmx_mode pmx_mode_camu_lcd = {
121 .name = "camu lcd mode", 121 .name = "camu lcd mode",
122 .mode = CAMU_LCD_MODE, 122 .mode = CAMU_LCD_MODE,
123 .reg = MODE_CONFIG_REG, 123 .reg = MODE_CONFIG_REG,
124 .mask = 0x0000000F, 124 .mask = 0x0000000F,
125 .val = 0x0D, 125 .val = 0x0D,
126 }; 126 };
127 127
128 static struct spear_pmx_mode pmx_mode_camu_wlcd = { 128 static struct spear_pmx_mode pmx_mode_camu_wlcd = {
129 .name = "camu wlcd mode", 129 .name = "camu wlcd mode",
130 .mode = CAMU_WLCD_MODE, 130 .mode = CAMU_WLCD_MODE,
131 .reg = MODE_CONFIG_REG, 131 .reg = MODE_CONFIG_REG,
132 .mask = 0x0000000F, 132 .mask = 0x0000000F,
133 .val = 0xE, 133 .val = 0xE,
134 }; 134 };
135 135
136 static struct spear_pmx_mode pmx_mode_caml_lcd = { 136 static struct spear_pmx_mode pmx_mode_caml_lcd = {
137 .name = "caml lcd mode", 137 .name = "caml lcd mode",
138 .mode = CAML_LCD_MODE, 138 .mode = CAML_LCD_MODE,
139 .reg = MODE_CONFIG_REG, 139 .reg = MODE_CONFIG_REG,
140 .mask = 0x0000000F, 140 .mask = 0x0000000F,
141 .val = 0x0F, 141 .val = 0x0F,
142 }; 142 };
143 143
144 static struct spear_pmx_mode *spear300_pmx_modes[] = { 144 static struct spear_pmx_mode *spear300_pmx_modes[] = {
145 &pmx_mode_nand, 145 &pmx_mode_nand,
146 &pmx_mode_nor, 146 &pmx_mode_nor,
147 &pmx_mode_photo_frame, 147 &pmx_mode_photo_frame,
148 &pmx_mode_lend_ip_phone, 148 &pmx_mode_lend_ip_phone,
149 &pmx_mode_hend_ip_phone, 149 &pmx_mode_hend_ip_phone,
150 &pmx_mode_lend_wifi_phone, 150 &pmx_mode_lend_wifi_phone,
151 &pmx_mode_hend_wifi_phone, 151 &pmx_mode_hend_wifi_phone,
152 &pmx_mode_ata_pabx_wi2s, 152 &pmx_mode_ata_pabx_wi2s,
153 &pmx_mode_ata_pabx_i2s, 153 &pmx_mode_ata_pabx_i2s,
154 &pmx_mode_caml_lcdw, 154 &pmx_mode_caml_lcdw,
155 &pmx_mode_camu_lcd, 155 &pmx_mode_camu_lcd,
156 &pmx_mode_camu_wlcd, 156 &pmx_mode_camu_wlcd,
157 &pmx_mode_caml_lcd, 157 &pmx_mode_caml_lcd,
158 }; 158 };
159 159
160 /* fsmc_2chips_pins */ 160 /* fsmc_2chips_pins */
161 static const unsigned fsmc_2chips_pins[] = { 1, 97 }; 161 static const unsigned fsmc_2chips_pins[] = { 1, 97 };
162 static struct spear_muxreg fsmc_2chips_muxreg[] = { 162 static struct spear_muxreg fsmc_2chips_muxreg[] = {
163 { 163 {
164 .reg = PMX_CONFIG_REG, 164 .reg = PMX_CONFIG_REG,
165 .mask = PMX_FIRDA_MASK, 165 .mask = PMX_FIRDA_MASK,
166 .val = 0, 166 .val = 0,
167 }, 167 },
168 }; 168 };
169 169
170 static struct spear_modemux fsmc_2chips_modemux[] = { 170 static struct spear_modemux fsmc_2chips_modemux[] = {
171 { 171 {
172 .modes = NAND_MODE | NOR_MODE | PHOTO_FRAME_MODE | 172 .modes = NAND_MODE | NOR_MODE | PHOTO_FRAME_MODE |
173 ATA_PABX_WI2S_MODE | ATA_PABX_I2S_MODE, 173 ATA_PABX_WI2S_MODE | ATA_PABX_I2S_MODE,
174 .muxregs = fsmc_2chips_muxreg, 174 .muxregs = fsmc_2chips_muxreg,
175 .nmuxregs = ARRAY_SIZE(fsmc_2chips_muxreg), 175 .nmuxregs = ARRAY_SIZE(fsmc_2chips_muxreg),
176 }, 176 },
177 }; 177 };
178 178
179 static struct spear_pingroup fsmc_2chips_pingroup = { 179 static struct spear_pingroup fsmc_2chips_pingroup = {
180 .name = "fsmc_2chips_grp", 180 .name = "fsmc_2chips_grp",
181 .pins = fsmc_2chips_pins, 181 .pins = fsmc_2chips_pins,
182 .npins = ARRAY_SIZE(fsmc_2chips_pins), 182 .npins = ARRAY_SIZE(fsmc_2chips_pins),
183 .modemuxs = fsmc_2chips_modemux, 183 .modemuxs = fsmc_2chips_modemux,
184 .nmodemuxs = ARRAY_SIZE(fsmc_2chips_modemux), 184 .nmodemuxs = ARRAY_SIZE(fsmc_2chips_modemux),
185 }; 185 };
186 186
187 /* fsmc_4chips_pins */ 187 /* fsmc_4chips_pins */
188 static const unsigned fsmc_4chips_pins[] = { 1, 2, 3, 97 }; 188 static const unsigned fsmc_4chips_pins[] = { 1, 2, 3, 97 };
189 static struct spear_muxreg fsmc_4chips_muxreg[] = { 189 static struct spear_muxreg fsmc_4chips_muxreg[] = {
190 { 190 {
191 .reg = PMX_CONFIG_REG, 191 .reg = PMX_CONFIG_REG,
192 .mask = PMX_FIRDA_MASK | PMX_UART0_MASK, 192 .mask = PMX_FIRDA_MASK | PMX_UART0_MASK,
193 .val = 0, 193 .val = 0,
194 }, 194 },
195 }; 195 };
196 196
197 static struct spear_modemux fsmc_4chips_modemux[] = { 197 static struct spear_modemux fsmc_4chips_modemux[] = {
198 { 198 {
199 .modes = NAND_MODE | NOR_MODE | PHOTO_FRAME_MODE | 199 .modes = NAND_MODE | NOR_MODE | PHOTO_FRAME_MODE |
200 ATA_PABX_WI2S_MODE | ATA_PABX_I2S_MODE, 200 ATA_PABX_WI2S_MODE | ATA_PABX_I2S_MODE,
201 .muxregs = fsmc_4chips_muxreg, 201 .muxregs = fsmc_4chips_muxreg,
202 .nmuxregs = ARRAY_SIZE(fsmc_4chips_muxreg), 202 .nmuxregs = ARRAY_SIZE(fsmc_4chips_muxreg),
203 }, 203 },
204 }; 204 };
205 205
206 static struct spear_pingroup fsmc_4chips_pingroup = { 206 static struct spear_pingroup fsmc_4chips_pingroup = {
207 .name = "fsmc_4chips_grp", 207 .name = "fsmc_4chips_grp",
208 .pins = fsmc_4chips_pins, 208 .pins = fsmc_4chips_pins,
209 .npins = ARRAY_SIZE(fsmc_4chips_pins), 209 .npins = ARRAY_SIZE(fsmc_4chips_pins),
210 .modemuxs = fsmc_4chips_modemux, 210 .modemuxs = fsmc_4chips_modemux,
211 .nmodemuxs = ARRAY_SIZE(fsmc_4chips_modemux), 211 .nmodemuxs = ARRAY_SIZE(fsmc_4chips_modemux),
212 }; 212 };
213 213
214 static const char *const fsmc_grps[] = { "fsmc_2chips_grp", "fsmc_4chips_grp" 214 static const char *const fsmc_grps[] = { "fsmc_2chips_grp", "fsmc_4chips_grp"
215 }; 215 };
216 static struct spear_function fsmc_function = { 216 static struct spear_function fsmc_function = {
217 .name = "fsmc", 217 .name = "fsmc",
218 .groups = fsmc_grps, 218 .groups = fsmc_grps,
219 .ngroups = ARRAY_SIZE(fsmc_grps), 219 .ngroups = ARRAY_SIZE(fsmc_grps),
220 }; 220 };
221 221
222 /* clcd_lcdmode_pins */ 222 /* clcd_lcdmode_pins */
223 static const unsigned clcd_lcdmode_pins[] = { 49, 50 }; 223 static const unsigned clcd_lcdmode_pins[] = { 49, 50 };
224 static struct spear_muxreg clcd_lcdmode_muxreg[] = { 224 static struct spear_muxreg clcd_lcdmode_muxreg[] = {
225 { 225 {
226 .reg = PMX_CONFIG_REG, 226 .reg = PMX_CONFIG_REG,
227 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK, 227 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK,
228 .val = 0, 228 .val = 0,
229 }, 229 },
230 }; 230 };
231 231
232 static struct spear_modemux clcd_lcdmode_modemux[] = { 232 static struct spear_modemux clcd_lcdmode_modemux[] = {
233 { 233 {
234 .modes = HEND_IP_PHONE_MODE | HEND_WIFI_PHONE_MODE | 234 .modes = HEND_IP_PHONE_MODE | HEND_WIFI_PHONE_MODE |
235 CAMU_LCD_MODE | CAML_LCD_MODE, 235 CAMU_LCD_MODE | CAML_LCD_MODE,
236 .muxregs = clcd_lcdmode_muxreg, 236 .muxregs = clcd_lcdmode_muxreg,
237 .nmuxregs = ARRAY_SIZE(clcd_lcdmode_muxreg), 237 .nmuxregs = ARRAY_SIZE(clcd_lcdmode_muxreg),
238 }, 238 },
239 }; 239 };
240 240
241 static struct spear_pingroup clcd_lcdmode_pingroup = { 241 static struct spear_pingroup clcd_lcdmode_pingroup = {
242 .name = "clcd_lcdmode_grp", 242 .name = "clcd_lcdmode_grp",
243 .pins = clcd_lcdmode_pins, 243 .pins = clcd_lcdmode_pins,
244 .npins = ARRAY_SIZE(clcd_lcdmode_pins), 244 .npins = ARRAY_SIZE(clcd_lcdmode_pins),
245 .modemuxs = clcd_lcdmode_modemux, 245 .modemuxs = clcd_lcdmode_modemux,
246 .nmodemuxs = ARRAY_SIZE(clcd_lcdmode_modemux), 246 .nmodemuxs = ARRAY_SIZE(clcd_lcdmode_modemux),
247 }; 247 };
248 248
249 /* clcd_pfmode_pins */ 249 /* clcd_pfmode_pins */
250 static const unsigned clcd_pfmode_pins[] = { 47, 48, 49, 50 }; 250 static const unsigned clcd_pfmode_pins[] = { 47, 48, 49, 50 };
251 static struct spear_muxreg clcd_pfmode_muxreg[] = { 251 static struct spear_muxreg clcd_pfmode_muxreg[] = {
252 { 252 {
253 .reg = PMX_CONFIG_REG, 253 .reg = PMX_CONFIG_REG,
254 .mask = PMX_TIMER_2_3_MASK, 254 .mask = PMX_TIMER_2_3_MASK,
255 .val = 0, 255 .val = 0,
256 }, 256 },
257 }; 257 };
258 258
259 static struct spear_modemux clcd_pfmode_modemux[] = { 259 static struct spear_modemux clcd_pfmode_modemux[] = {
260 { 260 {
261 .modes = PHOTO_FRAME_MODE, 261 .modes = PHOTO_FRAME_MODE,
262 .muxregs = clcd_pfmode_muxreg, 262 .muxregs = clcd_pfmode_muxreg,
263 .nmuxregs = ARRAY_SIZE(clcd_pfmode_muxreg), 263 .nmuxregs = ARRAY_SIZE(clcd_pfmode_muxreg),
264 }, 264 },
265 }; 265 };
266 266
267 static struct spear_pingroup clcd_pfmode_pingroup = { 267 static struct spear_pingroup clcd_pfmode_pingroup = {
268 .name = "clcd_pfmode_grp", 268 .name = "clcd_pfmode_grp",
269 .pins = clcd_pfmode_pins, 269 .pins = clcd_pfmode_pins,
270 .npins = ARRAY_SIZE(clcd_pfmode_pins), 270 .npins = ARRAY_SIZE(clcd_pfmode_pins),
271 .modemuxs = clcd_pfmode_modemux, 271 .modemuxs = clcd_pfmode_modemux,
272 .nmodemuxs = ARRAY_SIZE(clcd_pfmode_modemux), 272 .nmodemuxs = ARRAY_SIZE(clcd_pfmode_modemux),
273 }; 273 };
274 274
275 static const char *const clcd_grps[] = { "clcd_lcdmode_grp", "clcd_pfmode_grp" 275 static const char *const clcd_grps[] = { "clcd_lcdmode_grp", "clcd_pfmode_grp"
276 }; 276 };
277 static struct spear_function clcd_function = { 277 static struct spear_function clcd_function = {
278 .name = "clcd", 278 .name = "clcd",
279 .groups = clcd_grps, 279 .groups = clcd_grps,
280 .ngroups = ARRAY_SIZE(clcd_grps), 280 .ngroups = ARRAY_SIZE(clcd_grps),
281 }; 281 };
282 282
283 /* tdm_pins */ 283 /* tdm_pins */
284 static const unsigned tdm_pins[] = { 34, 35, 36, 37, 38 }; 284 static const unsigned tdm_pins[] = { 34, 35, 36, 37, 38 };
285 static struct spear_muxreg tdm_muxreg[] = { 285 static struct spear_muxreg tdm_muxreg[] = {
286 { 286 {
287 .reg = PMX_CONFIG_REG, 287 .reg = PMX_CONFIG_REG,
288 .mask = PMX_UART0_MODEM_MASK | PMX_SSP_CS_MASK, 288 .mask = PMX_UART0_MODEM_MASK | PMX_SSP_CS_MASK,
289 .val = 0, 289 .val = 0,
290 }, 290 },
291 }; 291 };
292 292
293 static struct spear_modemux tdm_modemux[] = { 293 static struct spear_modemux tdm_modemux[] = {
294 { 294 {
295 .modes = PHOTO_FRAME_MODE | LEND_IP_PHONE_MODE | 295 .modes = PHOTO_FRAME_MODE | LEND_IP_PHONE_MODE |
296 HEND_IP_PHONE_MODE | LEND_WIFI_PHONE_MODE 296 HEND_IP_PHONE_MODE | LEND_WIFI_PHONE_MODE
297 | HEND_WIFI_PHONE_MODE | ATA_PABX_WI2S_MODE 297 | HEND_WIFI_PHONE_MODE | ATA_PABX_WI2S_MODE
298 | ATA_PABX_I2S_MODE | CAML_LCDW_MODE | CAMU_LCD_MODE 298 | ATA_PABX_I2S_MODE | CAML_LCDW_MODE | CAMU_LCD_MODE
299 | CAMU_WLCD_MODE | CAML_LCD_MODE, 299 | CAMU_WLCD_MODE | CAML_LCD_MODE,
300 .muxregs = tdm_muxreg, 300 .muxregs = tdm_muxreg,
301 .nmuxregs = ARRAY_SIZE(tdm_muxreg), 301 .nmuxregs = ARRAY_SIZE(tdm_muxreg),
302 }, 302 },
303 }; 303 };
304 304
305 static struct spear_pingroup tdm_pingroup = { 305 static struct spear_pingroup tdm_pingroup = {
306 .name = "tdm_grp", 306 .name = "tdm_grp",
307 .pins = tdm_pins, 307 .pins = tdm_pins,
308 .npins = ARRAY_SIZE(tdm_pins), 308 .npins = ARRAY_SIZE(tdm_pins),
309 .modemuxs = tdm_modemux, 309 .modemuxs = tdm_modemux,
310 .nmodemuxs = ARRAY_SIZE(tdm_modemux), 310 .nmodemuxs = ARRAY_SIZE(tdm_modemux),
311 }; 311 };
312 312
313 static const char *const tdm_grps[] = { "tdm_grp" }; 313 static const char *const tdm_grps[] = { "tdm_grp" };
314 static struct spear_function tdm_function = { 314 static struct spear_function tdm_function = {
315 .name = "tdm", 315 .name = "tdm",
316 .groups = tdm_grps, 316 .groups = tdm_grps,
317 .ngroups = ARRAY_SIZE(tdm_grps), 317 .ngroups = ARRAY_SIZE(tdm_grps),
318 }; 318 };
319 319
320 /* i2c_clk_pins */ 320 /* i2c_clk_pins */
321 static const unsigned i2c_clk_pins[] = { 45, 46, 47, 48 }; 321 static const unsigned i2c_clk_pins[] = { 45, 46, 47, 48 };
322 static struct spear_muxreg i2c_clk_muxreg[] = { 322 static struct spear_muxreg i2c_clk_muxreg[] = {
323 { 323 {
324 .reg = PMX_CONFIG_REG, 324 .reg = PMX_CONFIG_REG,
325 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK, 325 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK,
326 .val = 0, 326 .val = 0,
327 }, 327 },
328 }; 328 };
329 329
330 static struct spear_modemux i2c_clk_modemux[] = { 330 static struct spear_modemux i2c_clk_modemux[] = {
331 { 331 {
332 .modes = LEND_IP_PHONE_MODE | HEND_IP_PHONE_MODE | 332 .modes = LEND_IP_PHONE_MODE | HEND_IP_PHONE_MODE |
333 LEND_WIFI_PHONE_MODE | HEND_WIFI_PHONE_MODE | 333 LEND_WIFI_PHONE_MODE | HEND_WIFI_PHONE_MODE |
334 ATA_PABX_WI2S_MODE | ATA_PABX_I2S_MODE | CAML_LCDW_MODE 334 ATA_PABX_WI2S_MODE | ATA_PABX_I2S_MODE | CAML_LCDW_MODE
335 | CAML_LCD_MODE, 335 | CAML_LCD_MODE,
336 .muxregs = i2c_clk_muxreg, 336 .muxregs = i2c_clk_muxreg,
337 .nmuxregs = ARRAY_SIZE(i2c_clk_muxreg), 337 .nmuxregs = ARRAY_SIZE(i2c_clk_muxreg),
338 }, 338 },
339 }; 339 };
340 340
341 static struct spear_pingroup i2c_clk_pingroup = { 341 static struct spear_pingroup i2c_clk_pingroup = {
342 .name = "i2c_clk_grp_grp", 342 .name = "i2c_clk_grp_grp",
343 .pins = i2c_clk_pins, 343 .pins = i2c_clk_pins,
344 .npins = ARRAY_SIZE(i2c_clk_pins), 344 .npins = ARRAY_SIZE(i2c_clk_pins),
345 .modemuxs = i2c_clk_modemux, 345 .modemuxs = i2c_clk_modemux,
346 .nmodemuxs = ARRAY_SIZE(i2c_clk_modemux), 346 .nmodemuxs = ARRAY_SIZE(i2c_clk_modemux),
347 }; 347 };
348 348
349 static const char *const i2c_grps[] = { "i2c_clk_grp" }; 349 static const char *const i2c_grps[] = { "i2c_clk_grp" };
350 static struct spear_function i2c_function = { 350 static struct spear_function i2c_function = {
351 .name = "i2c1", 351 .name = "i2c1",
352 .groups = i2c_grps, 352 .groups = i2c_grps,
353 .ngroups = ARRAY_SIZE(i2c_grps), 353 .ngroups = ARRAY_SIZE(i2c_grps),
354 }; 354 };
355 355
356 /* caml_pins */ 356 /* caml_pins */
357 static const unsigned caml_pins[] = { 12, 13, 14, 15, 16, 17, 18, 19, 20, 21 }; 357 static const unsigned caml_pins[] = { 12, 13, 14, 15, 16, 17, 18, 19, 20, 21 };
358 static struct spear_muxreg caml_muxreg[] = { 358 static struct spear_muxreg caml_muxreg[] = {
359 { 359 {
360 .reg = PMX_CONFIG_REG, 360 .reg = PMX_CONFIG_REG,
361 .mask = PMX_MII_MASK, 361 .mask = PMX_MII_MASK,
362 .val = 0, 362 .val = 0,
363 }, 363 },
364 }; 364 };
365 365
366 static struct spear_modemux caml_modemux[] = { 366 static struct spear_modemux caml_modemux[] = {
367 { 367 {
368 .modes = CAML_LCDW_MODE | CAML_LCD_MODE, 368 .modes = CAML_LCDW_MODE | CAML_LCD_MODE,
369 .muxregs = caml_muxreg, 369 .muxregs = caml_muxreg,
370 .nmuxregs = ARRAY_SIZE(caml_muxreg), 370 .nmuxregs = ARRAY_SIZE(caml_muxreg),
371 }, 371 },
372 }; 372 };
373 373
374 static struct spear_pingroup caml_pingroup = { 374 static struct spear_pingroup caml_pingroup = {
375 .name = "caml_grp", 375 .name = "caml_grp",
376 .pins = caml_pins, 376 .pins = caml_pins,
377 .npins = ARRAY_SIZE(caml_pins), 377 .npins = ARRAY_SIZE(caml_pins),
378 .modemuxs = caml_modemux, 378 .modemuxs = caml_modemux,
379 .nmodemuxs = ARRAY_SIZE(caml_modemux), 379 .nmodemuxs = ARRAY_SIZE(caml_modemux),
380 }; 380 };
381 381
382 /* camu_pins */ 382 /* camu_pins */
383 static const unsigned camu_pins[] = { 16, 17, 18, 19, 20, 21, 45, 46, 47, 48 }; 383 static const unsigned camu_pins[] = { 16, 17, 18, 19, 20, 21, 45, 46, 47, 48 };
384 static struct spear_muxreg camu_muxreg[] = { 384 static struct spear_muxreg camu_muxreg[] = {
385 { 385 {
386 .reg = PMX_CONFIG_REG, 386 .reg = PMX_CONFIG_REG,
387 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK | PMX_MII_MASK, 387 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK | PMX_MII_MASK,
388 .val = 0, 388 .val = 0,
389 }, 389 },
390 }; 390 };
391 391
392 static struct spear_modemux camu_modemux[] = { 392 static struct spear_modemux camu_modemux[] = {
393 { 393 {
394 .modes = CAMU_LCD_MODE | CAMU_WLCD_MODE, 394 .modes = CAMU_LCD_MODE | CAMU_WLCD_MODE,
395 .muxregs = camu_muxreg, 395 .muxregs = camu_muxreg,
396 .nmuxregs = ARRAY_SIZE(camu_muxreg), 396 .nmuxregs = ARRAY_SIZE(camu_muxreg),
397 }, 397 },
398 }; 398 };
399 399
400 static struct spear_pingroup camu_pingroup = { 400 static struct spear_pingroup camu_pingroup = {
401 .name = "camu_grp", 401 .name = "camu_grp",
402 .pins = camu_pins, 402 .pins = camu_pins,
403 .npins = ARRAY_SIZE(camu_pins), 403 .npins = ARRAY_SIZE(camu_pins),
404 .modemuxs = camu_modemux, 404 .modemuxs = camu_modemux,
405 .nmodemuxs = ARRAY_SIZE(camu_modemux), 405 .nmodemuxs = ARRAY_SIZE(camu_modemux),
406 }; 406 };
407 407
408 static const char *const cam_grps[] = { "caml_grp", "camu_grp" }; 408 static const char *const cam_grps[] = { "caml_grp", "camu_grp" };
409 static struct spear_function cam_function = { 409 static struct spear_function cam_function = {
410 .name = "cam", 410 .name = "cam",
411 .groups = cam_grps, 411 .groups = cam_grps,
412 .ngroups = ARRAY_SIZE(cam_grps), 412 .ngroups = ARRAY_SIZE(cam_grps),
413 }; 413 };
414 414
415 /* dac_pins */ 415 /* dac_pins */
416 static const unsigned dac_pins[] = { 43, 44 }; 416 static const unsigned dac_pins[] = { 43, 44 };
417 static struct spear_muxreg dac_muxreg[] = { 417 static struct spear_muxreg dac_muxreg[] = {
418 { 418 {
419 .reg = PMX_CONFIG_REG, 419 .reg = PMX_CONFIG_REG,
420 .mask = PMX_TIMER_0_1_MASK, 420 .mask = PMX_TIMER_0_1_MASK,
421 .val = 0, 421 .val = 0,
422 }, 422 },
423 }; 423 };
424 424
425 static struct spear_modemux dac_modemux[] = { 425 static struct spear_modemux dac_modemux[] = {
426 { 426 {
427 .modes = ATA_PABX_I2S_MODE | CAML_LCDW_MODE | CAMU_LCD_MODE 427 .modes = ATA_PABX_I2S_MODE | CAML_LCDW_MODE | CAMU_LCD_MODE
428 | CAMU_WLCD_MODE | CAML_LCD_MODE, 428 | CAMU_WLCD_MODE | CAML_LCD_MODE,
429 .muxregs = dac_muxreg, 429 .muxregs = dac_muxreg,
430 .nmuxregs = ARRAY_SIZE(dac_muxreg), 430 .nmuxregs = ARRAY_SIZE(dac_muxreg),
431 }, 431 },
432 }; 432 };
433 433
434 static struct spear_pingroup dac_pingroup = { 434 static struct spear_pingroup dac_pingroup = {
435 .name = "dac_grp", 435 .name = "dac_grp",
436 .pins = dac_pins, 436 .pins = dac_pins,
437 .npins = ARRAY_SIZE(dac_pins), 437 .npins = ARRAY_SIZE(dac_pins),
438 .modemuxs = dac_modemux, 438 .modemuxs = dac_modemux,
439 .nmodemuxs = ARRAY_SIZE(dac_modemux), 439 .nmodemuxs = ARRAY_SIZE(dac_modemux),
440 }; 440 };
441 441
442 static const char *const dac_grps[] = { "dac_grp" }; 442 static const char *const dac_grps[] = { "dac_grp" };
443 static struct spear_function dac_function = { 443 static struct spear_function dac_function = {
444 .name = "dac", 444 .name = "dac",
445 .groups = dac_grps, 445 .groups = dac_grps,
446 .ngroups = ARRAY_SIZE(dac_grps), 446 .ngroups = ARRAY_SIZE(dac_grps),
447 }; 447 };
448 448
449 /* i2s_pins */ 449 /* i2s_pins */
450 static const unsigned i2s_pins[] = { 39, 40, 41, 42 }; 450 static const unsigned i2s_pins[] = { 39, 40, 41, 42 };
451 static struct spear_muxreg i2s_muxreg[] = { 451 static struct spear_muxreg i2s_muxreg[] = {
452 { 452 {
453 .reg = PMX_CONFIG_REG, 453 .reg = PMX_CONFIG_REG,
454 .mask = PMX_UART0_MODEM_MASK, 454 .mask = PMX_UART0_MODEM_MASK,
455 .val = 0, 455 .val = 0,
456 }, 456 },
457 }; 457 };
458 458
459 static struct spear_modemux i2s_modemux[] = { 459 static struct spear_modemux i2s_modemux[] = {
460 { 460 {
461 .modes = LEND_IP_PHONE_MODE | HEND_IP_PHONE_MODE 461 .modes = LEND_IP_PHONE_MODE | HEND_IP_PHONE_MODE
462 | LEND_WIFI_PHONE_MODE | HEND_WIFI_PHONE_MODE | 462 | LEND_WIFI_PHONE_MODE | HEND_WIFI_PHONE_MODE |
463 ATA_PABX_I2S_MODE | CAML_LCDW_MODE | CAMU_LCD_MODE 463 ATA_PABX_I2S_MODE | CAML_LCDW_MODE | CAMU_LCD_MODE
464 | CAMU_WLCD_MODE | CAML_LCD_MODE, 464 | CAMU_WLCD_MODE | CAML_LCD_MODE,
465 .muxregs = i2s_muxreg, 465 .muxregs = i2s_muxreg,
466 .nmuxregs = ARRAY_SIZE(i2s_muxreg), 466 .nmuxregs = ARRAY_SIZE(i2s_muxreg),
467 }, 467 },
468 }; 468 };
469 469
470 static struct spear_pingroup i2s_pingroup = { 470 static struct spear_pingroup i2s_pingroup = {
471 .name = "i2s_grp", 471 .name = "i2s_grp",
472 .pins = i2s_pins, 472 .pins = i2s_pins,
473 .npins = ARRAY_SIZE(i2s_pins), 473 .npins = ARRAY_SIZE(i2s_pins),
474 .modemuxs = i2s_modemux, 474 .modemuxs = i2s_modemux,
475 .nmodemuxs = ARRAY_SIZE(i2s_modemux), 475 .nmodemuxs = ARRAY_SIZE(i2s_modemux),
476 }; 476 };
477 477
478 static const char *const i2s_grps[] = { "i2s_grp" }; 478 static const char *const i2s_grps[] = { "i2s_grp" };
479 static struct spear_function i2s_function = { 479 static struct spear_function i2s_function = {
480 .name = "i2s", 480 .name = "i2s",
481 .groups = i2s_grps, 481 .groups = i2s_grps,
482 .ngroups = ARRAY_SIZE(i2s_grps), 482 .ngroups = ARRAY_SIZE(i2s_grps),
483 }; 483 };
484 484
485 /* sdhci_4bit_pins */ 485 /* sdhci_4bit_pins */
486 static const unsigned sdhci_4bit_pins[] = { 28, 29, 30, 31, 32, 33 }; 486 static const unsigned sdhci_4bit_pins[] = { 28, 29, 30, 31, 32, 33 };
487 static struct spear_muxreg sdhci_4bit_muxreg[] = { 487 static struct spear_muxreg sdhci_4bit_muxreg[] = {
488 { 488 {
489 .reg = PMX_CONFIG_REG, 489 .reg = PMX_CONFIG_REG,
490 .mask = PMX_GPIO_PIN0_MASK | PMX_GPIO_PIN1_MASK | 490 .mask = PMX_GPIO_PIN0_MASK | PMX_GPIO_PIN1_MASK |
491 PMX_GPIO_PIN2_MASK | PMX_GPIO_PIN3_MASK | 491 PMX_GPIO_PIN2_MASK | PMX_GPIO_PIN3_MASK |
492 PMX_GPIO_PIN4_MASK | PMX_GPIO_PIN5_MASK, 492 PMX_GPIO_PIN4_MASK | PMX_GPIO_PIN5_MASK,
493 .val = 0, 493 .val = 0,
494 }, 494 },
495 }; 495 };
496 496
497 static struct spear_modemux sdhci_4bit_modemux[] = { 497 static struct spear_modemux sdhci_4bit_modemux[] = {
498 { 498 {
499 .modes = PHOTO_FRAME_MODE | LEND_IP_PHONE_MODE | 499 .modes = PHOTO_FRAME_MODE | LEND_IP_PHONE_MODE |
500 HEND_IP_PHONE_MODE | LEND_WIFI_PHONE_MODE | 500 HEND_IP_PHONE_MODE | LEND_WIFI_PHONE_MODE |
501 HEND_WIFI_PHONE_MODE | CAML_LCDW_MODE | CAMU_LCD_MODE | 501 HEND_WIFI_PHONE_MODE | CAML_LCDW_MODE | CAMU_LCD_MODE |
502 CAMU_WLCD_MODE | CAML_LCD_MODE | ATA_PABX_WI2S_MODE, 502 CAMU_WLCD_MODE | CAML_LCD_MODE | ATA_PABX_WI2S_MODE,
503 .muxregs = sdhci_4bit_muxreg, 503 .muxregs = sdhci_4bit_muxreg,
504 .nmuxregs = ARRAY_SIZE(sdhci_4bit_muxreg), 504 .nmuxregs = ARRAY_SIZE(sdhci_4bit_muxreg),
505 }, 505 },
506 }; 506 };
507 507
508 static struct spear_pingroup sdhci_4bit_pingroup = { 508 static struct spear_pingroup sdhci_4bit_pingroup = {
509 .name = "sdhci_4bit_grp", 509 .name = "sdhci_4bit_grp",
510 .pins = sdhci_4bit_pins, 510 .pins = sdhci_4bit_pins,
511 .npins = ARRAY_SIZE(sdhci_4bit_pins), 511 .npins = ARRAY_SIZE(sdhci_4bit_pins),
512 .modemuxs = sdhci_4bit_modemux, 512 .modemuxs = sdhci_4bit_modemux,
513 .nmodemuxs = ARRAY_SIZE(sdhci_4bit_modemux), 513 .nmodemuxs = ARRAY_SIZE(sdhci_4bit_modemux),
514 }; 514 };
515 515
516 /* sdhci_8bit_pins */ 516 /* sdhci_8bit_pins */
517 static const unsigned sdhci_8bit_pins[] = { 24, 25, 26, 27, 28, 29, 30, 31, 32, 517 static const unsigned sdhci_8bit_pins[] = { 24, 25, 26, 27, 28, 29, 30, 31, 32,
518 33 }; 518 33 };
519 static struct spear_muxreg sdhci_8bit_muxreg[] = { 519 static struct spear_muxreg sdhci_8bit_muxreg[] = {
520 { 520 {
521 .reg = PMX_CONFIG_REG, 521 .reg = PMX_CONFIG_REG,
522 .mask = PMX_GPIO_PIN0_MASK | PMX_GPIO_PIN1_MASK | 522 .mask = PMX_GPIO_PIN0_MASK | PMX_GPIO_PIN1_MASK |
523 PMX_GPIO_PIN2_MASK | PMX_GPIO_PIN3_MASK | 523 PMX_GPIO_PIN2_MASK | PMX_GPIO_PIN3_MASK |
524 PMX_GPIO_PIN4_MASK | PMX_GPIO_PIN5_MASK | PMX_MII_MASK, 524 PMX_GPIO_PIN4_MASK | PMX_GPIO_PIN5_MASK | PMX_MII_MASK,
525 .val = 0, 525 .val = 0,
526 }, 526 },
527 }; 527 };
528 528
529 static struct spear_modemux sdhci_8bit_modemux[] = { 529 static struct spear_modemux sdhci_8bit_modemux[] = {
530 { 530 {
531 .modes = PHOTO_FRAME_MODE | LEND_IP_PHONE_MODE | 531 .modes = PHOTO_FRAME_MODE | LEND_IP_PHONE_MODE |
532 HEND_IP_PHONE_MODE | LEND_WIFI_PHONE_MODE | 532 HEND_IP_PHONE_MODE | LEND_WIFI_PHONE_MODE |
533 HEND_WIFI_PHONE_MODE | CAML_LCDW_MODE | CAMU_LCD_MODE | 533 HEND_WIFI_PHONE_MODE | CAML_LCDW_MODE | CAMU_LCD_MODE |
534 CAMU_WLCD_MODE | CAML_LCD_MODE, 534 CAMU_WLCD_MODE | CAML_LCD_MODE,
535 .muxregs = sdhci_8bit_muxreg, 535 .muxregs = sdhci_8bit_muxreg,
536 .nmuxregs = ARRAY_SIZE(sdhci_8bit_muxreg), 536 .nmuxregs = ARRAY_SIZE(sdhci_8bit_muxreg),
537 }, 537 },
538 }; 538 };
539 539
540 static struct spear_pingroup sdhci_8bit_pingroup = { 540 static struct spear_pingroup sdhci_8bit_pingroup = {
541 .name = "sdhci_8bit_grp", 541 .name = "sdhci_8bit_grp",
542 .pins = sdhci_8bit_pins, 542 .pins = sdhci_8bit_pins,
543 .npins = ARRAY_SIZE(sdhci_8bit_pins), 543 .npins = ARRAY_SIZE(sdhci_8bit_pins),
544 .modemuxs = sdhci_8bit_modemux, 544 .modemuxs = sdhci_8bit_modemux,
545 .nmodemuxs = ARRAY_SIZE(sdhci_8bit_modemux), 545 .nmodemuxs = ARRAY_SIZE(sdhci_8bit_modemux),
546 }; 546 };
547 547
548 static const char *const sdhci_grps[] = { "sdhci_4bit_grp", "sdhci_8bit_grp" }; 548 static const char *const sdhci_grps[] = { "sdhci_4bit_grp", "sdhci_8bit_grp" };
549 static struct spear_function sdhci_function = { 549 static struct spear_function sdhci_function = {
550 .name = "sdhci", 550 .name = "sdhci",
551 .groups = sdhci_grps, 551 .groups = sdhci_grps,
552 .ngroups = ARRAY_SIZE(sdhci_grps), 552 .ngroups = ARRAY_SIZE(sdhci_grps),
553 }; 553 };
554 554
555 /* gpio1_0_to_3_pins */ 555 /* gpio1_0_to_3_pins */
556 static const unsigned gpio1_0_to_3_pins[] = { 39, 40, 41, 42 }; 556 static const unsigned gpio1_0_to_3_pins[] = { 39, 40, 41, 42 };
557 static struct spear_muxreg gpio1_0_to_3_muxreg[] = { 557 static struct spear_muxreg gpio1_0_to_3_muxreg[] = {
558 { 558 {
559 .reg = PMX_CONFIG_REG, 559 .reg = PMX_CONFIG_REG,
560 .mask = PMX_UART0_MODEM_MASK, 560 .mask = PMX_UART0_MODEM_MASK,
561 .val = 0, 561 .val = 0,
562 }, 562 },
563 }; 563 };
564 564
565 static struct spear_modemux gpio1_0_to_3_modemux[] = { 565 static struct spear_modemux gpio1_0_to_3_modemux[] = {
566 { 566 {
567 .modes = PHOTO_FRAME_MODE, 567 .modes = PHOTO_FRAME_MODE,
568 .muxregs = gpio1_0_to_3_muxreg, 568 .muxregs = gpio1_0_to_3_muxreg,
569 .nmuxregs = ARRAY_SIZE(gpio1_0_to_3_muxreg), 569 .nmuxregs = ARRAY_SIZE(gpio1_0_to_3_muxreg),
570 }, 570 },
571 }; 571 };
572 572
573 static struct spear_pingroup gpio1_0_to_3_pingroup = { 573 static struct spear_pingroup gpio1_0_to_3_pingroup = {
574 .name = "gpio1_0_to_3_grp", 574 .name = "gpio1_0_to_3_grp",
575 .pins = gpio1_0_to_3_pins, 575 .pins = gpio1_0_to_3_pins,
576 .npins = ARRAY_SIZE(gpio1_0_to_3_pins), 576 .npins = ARRAY_SIZE(gpio1_0_to_3_pins),
577 .modemuxs = gpio1_0_to_3_modemux, 577 .modemuxs = gpio1_0_to_3_modemux,
578 .nmodemuxs = ARRAY_SIZE(gpio1_0_to_3_modemux), 578 .nmodemuxs = ARRAY_SIZE(gpio1_0_to_3_modemux),
579 }; 579 };
580 580
581 /* gpio1_4_to_7_pins */ 581 /* gpio1_4_to_7_pins */
582 static const unsigned gpio1_4_to_7_pins[] = { 43, 44, 45, 46 }; 582 static const unsigned gpio1_4_to_7_pins[] = { 43, 44, 45, 46 };
583 583
584 static struct spear_muxreg gpio1_4_to_7_muxreg[] = { 584 static struct spear_muxreg gpio1_4_to_7_muxreg[] = {
585 { 585 {
586 .reg = PMX_CONFIG_REG, 586 .reg = PMX_CONFIG_REG,
587 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK, 587 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK,
588 .val = 0, 588 .val = 0,
589 }, 589 },
590 }; 590 };
591 591
592 static struct spear_modemux gpio1_4_to_7_modemux[] = { 592 static struct spear_modemux gpio1_4_to_7_modemux[] = {
593 { 593 {
594 .modes = PHOTO_FRAME_MODE, 594 .modes = PHOTO_FRAME_MODE,
595 .muxregs = gpio1_4_to_7_muxreg, 595 .muxregs = gpio1_4_to_7_muxreg,
596 .nmuxregs = ARRAY_SIZE(gpio1_4_to_7_muxreg), 596 .nmuxregs = ARRAY_SIZE(gpio1_4_to_7_muxreg),
597 }, 597 },
598 }; 598 };
599 599
600 static struct spear_pingroup gpio1_4_to_7_pingroup = { 600 static struct spear_pingroup gpio1_4_to_7_pingroup = {
601 .name = "gpio1_4_to_7_grp", 601 .name = "gpio1_4_to_7_grp",
602 .pins = gpio1_4_to_7_pins, 602 .pins = gpio1_4_to_7_pins,
603 .npins = ARRAY_SIZE(gpio1_4_to_7_pins), 603 .npins = ARRAY_SIZE(gpio1_4_to_7_pins),
604 .modemuxs = gpio1_4_to_7_modemux, 604 .modemuxs = gpio1_4_to_7_modemux,
605 .nmodemuxs = ARRAY_SIZE(gpio1_4_to_7_modemux), 605 .nmodemuxs = ARRAY_SIZE(gpio1_4_to_7_modemux),
606 }; 606 };
607 607
608 static const char *const gpio1_grps[] = { "gpio1_0_to_3_grp", "gpio1_4_to_7_grp" 608 static const char *const gpio1_grps[] = { "gpio1_0_to_3_grp", "gpio1_4_to_7_grp"
609 }; 609 };
610 static struct spear_function gpio1_function = { 610 static struct spear_function gpio1_function = {
611 .name = "gpio1", 611 .name = "gpio1",
612 .groups = gpio1_grps, 612 .groups = gpio1_grps,
613 .ngroups = ARRAY_SIZE(gpio1_grps), 613 .ngroups = ARRAY_SIZE(gpio1_grps),
614 }; 614 };
615 615
616 /* pingroups */ 616 /* pingroups */
617 static struct spear_pingroup *spear300_pingroups[] = { 617 static struct spear_pingroup *spear300_pingroups[] = {
618 SPEAR3XX_COMMON_PINGROUPS, 618 SPEAR3XX_COMMON_PINGROUPS,
619 &fsmc_2chips_pingroup, 619 &fsmc_2chips_pingroup,
620 &fsmc_4chips_pingroup, 620 &fsmc_4chips_pingroup,
621 &clcd_lcdmode_pingroup, 621 &clcd_lcdmode_pingroup,
622 &clcd_pfmode_pingroup, 622 &clcd_pfmode_pingroup,
623 &tdm_pingroup, 623 &tdm_pingroup,
624 &i2c_clk_pingroup, 624 &i2c_clk_pingroup,
625 &caml_pingroup, 625 &caml_pingroup,
626 &camu_pingroup, 626 &camu_pingroup,
627 &dac_pingroup, 627 &dac_pingroup,
628 &i2s_pingroup, 628 &i2s_pingroup,
629 &sdhci_4bit_pingroup, 629 &sdhci_4bit_pingroup,
630 &sdhci_8bit_pingroup, 630 &sdhci_8bit_pingroup,
631 &gpio1_0_to_3_pingroup, 631 &gpio1_0_to_3_pingroup,
632 &gpio1_4_to_7_pingroup, 632 &gpio1_4_to_7_pingroup,
633 }; 633 };
634 634
635 /* functions */ 635 /* functions */
636 static struct spear_function *spear300_functions[] = { 636 static struct spear_function *spear300_functions[] = {
637 SPEAR3XX_COMMON_FUNCTIONS, 637 SPEAR3XX_COMMON_FUNCTIONS,
638 &fsmc_function, 638 &fsmc_function,
639 &clcd_function, 639 &clcd_function,
640 &tdm_function, 640 &tdm_function,
641 &i2c_function, 641 &i2c_function,
642 &cam_function, 642 &cam_function,
643 &dac_function, 643 &dac_function,
644 &i2s_function, 644 &i2s_function,
645 &sdhci_function, 645 &sdhci_function,
646 &gpio1_function, 646 &gpio1_function,
647 }; 647 };
648 648
649 static struct of_device_id spear300_pinctrl_of_match[] = { 649 static struct of_device_id spear300_pinctrl_of_match[] = {
650 { 650 {
651 .compatible = "st,spear300-pinmux", 651 .compatible = "st,spear300-pinmux",
652 }, 652 },
653 {}, 653 {},
654 }; 654 };
655 655
656 static int __devinit spear300_pinctrl_probe(struct platform_device *pdev) 656 static int __devinit spear300_pinctrl_probe(struct platform_device *pdev)
657 { 657 {
658 int ret; 658 int ret;
659 659
660 spear3xx_machdata.groups = spear300_pingroups; 660 spear3xx_machdata.groups = spear300_pingroups;
661 spear3xx_machdata.ngroups = ARRAY_SIZE(spear300_pingroups); 661 spear3xx_machdata.ngroups = ARRAY_SIZE(spear300_pingroups);
662 spear3xx_machdata.functions = spear300_functions; 662 spear3xx_machdata.functions = spear300_functions;
663 spear3xx_machdata.nfunctions = ARRAY_SIZE(spear300_functions); 663 spear3xx_machdata.nfunctions = ARRAY_SIZE(spear300_functions);
664 664
665 spear3xx_machdata.modes_supported = true; 665 spear3xx_machdata.modes_supported = true;
666 spear3xx_machdata.pmx_modes = spear300_pmx_modes; 666 spear3xx_machdata.pmx_modes = spear300_pmx_modes;
667 spear3xx_machdata.npmx_modes = ARRAY_SIZE(spear300_pmx_modes); 667 spear3xx_machdata.npmx_modes = ARRAY_SIZE(spear300_pmx_modes);
668 668
669 pmx_init_addr(&spear3xx_machdata, PMX_CONFIG_REG); 669 pmx_init_addr(&spear3xx_machdata, PMX_CONFIG_REG);
670 670
671 ret = spear_pinctrl_probe(pdev, &spear3xx_machdata); 671 ret = spear_pinctrl_probe(pdev, &spear3xx_machdata);
672 if (ret) 672 if (ret)
673 return ret; 673 return ret;
674 674
675 return 0; 675 return 0;
676 } 676 }
677 677
678 static int __devexit spear300_pinctrl_remove(struct platform_device *pdev) 678 static int spear300_pinctrl_remove(struct platform_device *pdev)
679 { 679 {
680 return spear_pinctrl_remove(pdev); 680 return spear_pinctrl_remove(pdev);
681 } 681 }
682 682
683 static struct platform_driver spear300_pinctrl_driver = { 683 static struct platform_driver spear300_pinctrl_driver = {
684 .driver = { 684 .driver = {
685 .name = DRIVER_NAME, 685 .name = DRIVER_NAME,
686 .owner = THIS_MODULE, 686 .owner = THIS_MODULE,
687 .of_match_table = spear300_pinctrl_of_match, 687 .of_match_table = spear300_pinctrl_of_match,
688 }, 688 },
689 .probe = spear300_pinctrl_probe, 689 .probe = spear300_pinctrl_probe,
690 .remove = spear300_pinctrl_remove, 690 .remove = spear300_pinctrl_remove,
691 }; 691 };
692 692
693 static int __init spear300_pinctrl_init(void) 693 static int __init spear300_pinctrl_init(void)
694 { 694 {
695 return platform_driver_register(&spear300_pinctrl_driver); 695 return platform_driver_register(&spear300_pinctrl_driver);
696 } 696 }
697 arch_initcall(spear300_pinctrl_init); 697 arch_initcall(spear300_pinctrl_init);
698 698
699 static void __exit spear300_pinctrl_exit(void) 699 static void __exit spear300_pinctrl_exit(void)
700 { 700 {
701 platform_driver_unregister(&spear300_pinctrl_driver); 701 platform_driver_unregister(&spear300_pinctrl_driver);
702 } 702 }
703 module_exit(spear300_pinctrl_exit); 703 module_exit(spear300_pinctrl_exit);
704 704
705 MODULE_AUTHOR("Viresh Kumar <viresh.linux@gmail.com>"); 705 MODULE_AUTHOR("Viresh Kumar <viresh.linux@gmail.com>");
706 MODULE_DESCRIPTION("ST Microelectronics SPEAr300 pinctrl driver"); 706 MODULE_DESCRIPTION("ST Microelectronics SPEAr300 pinctrl driver");
707 MODULE_LICENSE("GPL v2"); 707 MODULE_LICENSE("GPL v2");
708 MODULE_DEVICE_TABLE(of, spear300_pinctrl_of_match); 708 MODULE_DEVICE_TABLE(of, spear300_pinctrl_of_match);
709 709
drivers/pinctrl/spear/pinctrl-spear310.c
1 /* 1 /*
2 * Driver for the ST Microelectronics SPEAr310 pinmux 2 * Driver for the ST Microelectronics SPEAr310 pinmux
3 * 3 *
4 * Copyright (C) 2012 ST Microelectronics 4 * Copyright (C) 2012 ST Microelectronics
5 * Viresh Kumar <viresh.linux@gmail.com> 5 * Viresh Kumar <viresh.linux@gmail.com>
6 * 6 *
7 * This file is licensed under the terms of the GNU General Public 7 * This file is licensed under the terms of the GNU General Public
8 * License version 2. This program is licensed "as is" without any 8 * License version 2. This program is licensed "as is" without any
9 * warranty of any kind, whether express or implied. 9 * warranty of any kind, whether express or implied.
10 */ 10 */
11 11
12 #include <linux/err.h> 12 #include <linux/err.h>
13 #include <linux/init.h> 13 #include <linux/init.h>
14 #include <linux/module.h> 14 #include <linux/module.h>
15 #include <linux/of_device.h> 15 #include <linux/of_device.h>
16 #include <linux/platform_device.h> 16 #include <linux/platform_device.h>
17 #include "pinctrl-spear3xx.h" 17 #include "pinctrl-spear3xx.h"
18 18
19 #define DRIVER_NAME "spear310-pinmux" 19 #define DRIVER_NAME "spear310-pinmux"
20 20
21 /* addresses */ 21 /* addresses */
22 #define PMX_CONFIG_REG 0x08 22 #define PMX_CONFIG_REG 0x08
23 23
24 /* emi_cs_0_to_5_pins */ 24 /* emi_cs_0_to_5_pins */
25 static const unsigned emi_cs_0_to_5_pins[] = { 45, 46, 47, 48, 49, 50 }; 25 static const unsigned emi_cs_0_to_5_pins[] = { 45, 46, 47, 48, 49, 50 };
26 static struct spear_muxreg emi_cs_0_to_5_muxreg[] = { 26 static struct spear_muxreg emi_cs_0_to_5_muxreg[] = {
27 { 27 {
28 .reg = PMX_CONFIG_REG, 28 .reg = PMX_CONFIG_REG,
29 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK, 29 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK,
30 .val = 0, 30 .val = 0,
31 }, 31 },
32 }; 32 };
33 33
34 static struct spear_modemux emi_cs_0_to_5_modemux[] = { 34 static struct spear_modemux emi_cs_0_to_5_modemux[] = {
35 { 35 {
36 .muxregs = emi_cs_0_to_5_muxreg, 36 .muxregs = emi_cs_0_to_5_muxreg,
37 .nmuxregs = ARRAY_SIZE(emi_cs_0_to_5_muxreg), 37 .nmuxregs = ARRAY_SIZE(emi_cs_0_to_5_muxreg),
38 }, 38 },
39 }; 39 };
40 40
41 static struct spear_pingroup emi_cs_0_to_5_pingroup = { 41 static struct spear_pingroup emi_cs_0_to_5_pingroup = {
42 .name = "emi_cs_0_to_5_grp", 42 .name = "emi_cs_0_to_5_grp",
43 .pins = emi_cs_0_to_5_pins, 43 .pins = emi_cs_0_to_5_pins,
44 .npins = ARRAY_SIZE(emi_cs_0_to_5_pins), 44 .npins = ARRAY_SIZE(emi_cs_0_to_5_pins),
45 .modemuxs = emi_cs_0_to_5_modemux, 45 .modemuxs = emi_cs_0_to_5_modemux,
46 .nmodemuxs = ARRAY_SIZE(emi_cs_0_to_5_modemux), 46 .nmodemuxs = ARRAY_SIZE(emi_cs_0_to_5_modemux),
47 }; 47 };
48 48
49 static const char *const emi_cs_0_to_5_grps[] = { "emi_cs_0_to_5_grp" }; 49 static const char *const emi_cs_0_to_5_grps[] = { "emi_cs_0_to_5_grp" };
50 static struct spear_function emi_cs_0_to_5_function = { 50 static struct spear_function emi_cs_0_to_5_function = {
51 .name = "emi", 51 .name = "emi",
52 .groups = emi_cs_0_to_5_grps, 52 .groups = emi_cs_0_to_5_grps,
53 .ngroups = ARRAY_SIZE(emi_cs_0_to_5_grps), 53 .ngroups = ARRAY_SIZE(emi_cs_0_to_5_grps),
54 }; 54 };
55 55
56 /* uart1_pins */ 56 /* uart1_pins */
57 static const unsigned uart1_pins[] = { 0, 1 }; 57 static const unsigned uart1_pins[] = { 0, 1 };
58 static struct spear_muxreg uart1_muxreg[] = { 58 static struct spear_muxreg uart1_muxreg[] = {
59 { 59 {
60 .reg = PMX_CONFIG_REG, 60 .reg = PMX_CONFIG_REG,
61 .mask = PMX_FIRDA_MASK, 61 .mask = PMX_FIRDA_MASK,
62 .val = 0, 62 .val = 0,
63 }, 63 },
64 }; 64 };
65 65
66 static struct spear_modemux uart1_modemux[] = { 66 static struct spear_modemux uart1_modemux[] = {
67 { 67 {
68 .muxregs = uart1_muxreg, 68 .muxregs = uart1_muxreg,
69 .nmuxregs = ARRAY_SIZE(uart1_muxreg), 69 .nmuxregs = ARRAY_SIZE(uart1_muxreg),
70 }, 70 },
71 }; 71 };
72 72
73 static struct spear_pingroup uart1_pingroup = { 73 static struct spear_pingroup uart1_pingroup = {
74 .name = "uart1_grp", 74 .name = "uart1_grp",
75 .pins = uart1_pins, 75 .pins = uart1_pins,
76 .npins = ARRAY_SIZE(uart1_pins), 76 .npins = ARRAY_SIZE(uart1_pins),
77 .modemuxs = uart1_modemux, 77 .modemuxs = uart1_modemux,
78 .nmodemuxs = ARRAY_SIZE(uart1_modemux), 78 .nmodemuxs = ARRAY_SIZE(uart1_modemux),
79 }; 79 };
80 80
81 static const char *const uart1_grps[] = { "uart1_grp" }; 81 static const char *const uart1_grps[] = { "uart1_grp" };
82 static struct spear_function uart1_function = { 82 static struct spear_function uart1_function = {
83 .name = "uart1", 83 .name = "uart1",
84 .groups = uart1_grps, 84 .groups = uart1_grps,
85 .ngroups = ARRAY_SIZE(uart1_grps), 85 .ngroups = ARRAY_SIZE(uart1_grps),
86 }; 86 };
87 87
88 /* uart2_pins */ 88 /* uart2_pins */
89 static const unsigned uart2_pins[] = { 43, 44 }; 89 static const unsigned uart2_pins[] = { 43, 44 };
90 static struct spear_muxreg uart2_muxreg[] = { 90 static struct spear_muxreg uart2_muxreg[] = {
91 { 91 {
92 .reg = PMX_CONFIG_REG, 92 .reg = PMX_CONFIG_REG,
93 .mask = PMX_TIMER_0_1_MASK, 93 .mask = PMX_TIMER_0_1_MASK,
94 .val = 0, 94 .val = 0,
95 }, 95 },
96 }; 96 };
97 97
98 static struct spear_modemux uart2_modemux[] = { 98 static struct spear_modemux uart2_modemux[] = {
99 { 99 {
100 .muxregs = uart2_muxreg, 100 .muxregs = uart2_muxreg,
101 .nmuxregs = ARRAY_SIZE(uart2_muxreg), 101 .nmuxregs = ARRAY_SIZE(uart2_muxreg),
102 }, 102 },
103 }; 103 };
104 104
105 static struct spear_pingroup uart2_pingroup = { 105 static struct spear_pingroup uart2_pingroup = {
106 .name = "uart2_grp", 106 .name = "uart2_grp",
107 .pins = uart2_pins, 107 .pins = uart2_pins,
108 .npins = ARRAY_SIZE(uart2_pins), 108 .npins = ARRAY_SIZE(uart2_pins),
109 .modemuxs = uart2_modemux, 109 .modemuxs = uart2_modemux,
110 .nmodemuxs = ARRAY_SIZE(uart2_modemux), 110 .nmodemuxs = ARRAY_SIZE(uart2_modemux),
111 }; 111 };
112 112
113 static const char *const uart2_grps[] = { "uart2_grp" }; 113 static const char *const uart2_grps[] = { "uart2_grp" };
114 static struct spear_function uart2_function = { 114 static struct spear_function uart2_function = {
115 .name = "uart2", 115 .name = "uart2",
116 .groups = uart2_grps, 116 .groups = uart2_grps,
117 .ngroups = ARRAY_SIZE(uart2_grps), 117 .ngroups = ARRAY_SIZE(uart2_grps),
118 }; 118 };
119 119
120 /* uart3_pins */ 120 /* uart3_pins */
121 static const unsigned uart3_pins[] = { 37, 38 }; 121 static const unsigned uart3_pins[] = { 37, 38 };
122 static struct spear_muxreg uart3_muxreg[] = { 122 static struct spear_muxreg uart3_muxreg[] = {
123 { 123 {
124 .reg = PMX_CONFIG_REG, 124 .reg = PMX_CONFIG_REG,
125 .mask = PMX_UART0_MODEM_MASK, 125 .mask = PMX_UART0_MODEM_MASK,
126 .val = 0, 126 .val = 0,
127 }, 127 },
128 }; 128 };
129 129
130 static struct spear_modemux uart3_modemux[] = { 130 static struct spear_modemux uart3_modemux[] = {
131 { 131 {
132 .muxregs = uart3_muxreg, 132 .muxregs = uart3_muxreg,
133 .nmuxregs = ARRAY_SIZE(uart3_muxreg), 133 .nmuxregs = ARRAY_SIZE(uart3_muxreg),
134 }, 134 },
135 }; 135 };
136 136
137 static struct spear_pingroup uart3_pingroup = { 137 static struct spear_pingroup uart3_pingroup = {
138 .name = "uart3_grp", 138 .name = "uart3_grp",
139 .pins = uart3_pins, 139 .pins = uart3_pins,
140 .npins = ARRAY_SIZE(uart3_pins), 140 .npins = ARRAY_SIZE(uart3_pins),
141 .modemuxs = uart3_modemux, 141 .modemuxs = uart3_modemux,
142 .nmodemuxs = ARRAY_SIZE(uart3_modemux), 142 .nmodemuxs = ARRAY_SIZE(uart3_modemux),
143 }; 143 };
144 144
145 static const char *const uart3_grps[] = { "uart3_grp" }; 145 static const char *const uart3_grps[] = { "uart3_grp" };
146 static struct spear_function uart3_function = { 146 static struct spear_function uart3_function = {
147 .name = "uart3", 147 .name = "uart3",
148 .groups = uart3_grps, 148 .groups = uart3_grps,
149 .ngroups = ARRAY_SIZE(uart3_grps), 149 .ngroups = ARRAY_SIZE(uart3_grps),
150 }; 150 };
151 151
152 /* uart4_pins */ 152 /* uart4_pins */
153 static const unsigned uart4_pins[] = { 39, 40 }; 153 static const unsigned uart4_pins[] = { 39, 40 };
154 static struct spear_muxreg uart4_muxreg[] = { 154 static struct spear_muxreg uart4_muxreg[] = {
155 { 155 {
156 .reg = PMX_CONFIG_REG, 156 .reg = PMX_CONFIG_REG,
157 .mask = PMX_UART0_MODEM_MASK, 157 .mask = PMX_UART0_MODEM_MASK,
158 .val = 0, 158 .val = 0,
159 }, 159 },
160 }; 160 };
161 161
162 static struct spear_modemux uart4_modemux[] = { 162 static struct spear_modemux uart4_modemux[] = {
163 { 163 {
164 .muxregs = uart4_muxreg, 164 .muxregs = uart4_muxreg,
165 .nmuxregs = ARRAY_SIZE(uart4_muxreg), 165 .nmuxregs = ARRAY_SIZE(uart4_muxreg),
166 }, 166 },
167 }; 167 };
168 168
169 static struct spear_pingroup uart4_pingroup = { 169 static struct spear_pingroup uart4_pingroup = {
170 .name = "uart4_grp", 170 .name = "uart4_grp",
171 .pins = uart4_pins, 171 .pins = uart4_pins,
172 .npins = ARRAY_SIZE(uart4_pins), 172 .npins = ARRAY_SIZE(uart4_pins),
173 .modemuxs = uart4_modemux, 173 .modemuxs = uart4_modemux,
174 .nmodemuxs = ARRAY_SIZE(uart4_modemux), 174 .nmodemuxs = ARRAY_SIZE(uart4_modemux),
175 }; 175 };
176 176
177 static const char *const uart4_grps[] = { "uart4_grp" }; 177 static const char *const uart4_grps[] = { "uart4_grp" };
178 static struct spear_function uart4_function = { 178 static struct spear_function uart4_function = {
179 .name = "uart4", 179 .name = "uart4",
180 .groups = uart4_grps, 180 .groups = uart4_grps,
181 .ngroups = ARRAY_SIZE(uart4_grps), 181 .ngroups = ARRAY_SIZE(uart4_grps),
182 }; 182 };
183 183
184 /* uart5_pins */ 184 /* uart5_pins */
185 static const unsigned uart5_pins[] = { 41, 42 }; 185 static const unsigned uart5_pins[] = { 41, 42 };
186 static struct spear_muxreg uart5_muxreg[] = { 186 static struct spear_muxreg uart5_muxreg[] = {
187 { 187 {
188 .reg = PMX_CONFIG_REG, 188 .reg = PMX_CONFIG_REG,
189 .mask = PMX_UART0_MODEM_MASK, 189 .mask = PMX_UART0_MODEM_MASK,
190 .val = 0, 190 .val = 0,
191 }, 191 },
192 }; 192 };
193 193
194 static struct spear_modemux uart5_modemux[] = { 194 static struct spear_modemux uart5_modemux[] = {
195 { 195 {
196 .muxregs = uart5_muxreg, 196 .muxregs = uart5_muxreg,
197 .nmuxregs = ARRAY_SIZE(uart5_muxreg), 197 .nmuxregs = ARRAY_SIZE(uart5_muxreg),
198 }, 198 },
199 }; 199 };
200 200
201 static struct spear_pingroup uart5_pingroup = { 201 static struct spear_pingroup uart5_pingroup = {
202 .name = "uart5_grp", 202 .name = "uart5_grp",
203 .pins = uart5_pins, 203 .pins = uart5_pins,
204 .npins = ARRAY_SIZE(uart5_pins), 204 .npins = ARRAY_SIZE(uart5_pins),
205 .modemuxs = uart5_modemux, 205 .modemuxs = uart5_modemux,
206 .nmodemuxs = ARRAY_SIZE(uart5_modemux), 206 .nmodemuxs = ARRAY_SIZE(uart5_modemux),
207 }; 207 };
208 208
209 static const char *const uart5_grps[] = { "uart5_grp" }; 209 static const char *const uart5_grps[] = { "uart5_grp" };
210 static struct spear_function uart5_function = { 210 static struct spear_function uart5_function = {
211 .name = "uart5", 211 .name = "uart5",
212 .groups = uart5_grps, 212 .groups = uart5_grps,
213 .ngroups = ARRAY_SIZE(uart5_grps), 213 .ngroups = ARRAY_SIZE(uart5_grps),
214 }; 214 };
215 215
216 /* fsmc_pins */ 216 /* fsmc_pins */
217 static const unsigned fsmc_pins[] = { 34, 35, 36 }; 217 static const unsigned fsmc_pins[] = { 34, 35, 36 };
218 static struct spear_muxreg fsmc_muxreg[] = { 218 static struct spear_muxreg fsmc_muxreg[] = {
219 { 219 {
220 .reg = PMX_CONFIG_REG, 220 .reg = PMX_CONFIG_REG,
221 .mask = PMX_SSP_CS_MASK, 221 .mask = PMX_SSP_CS_MASK,
222 .val = 0, 222 .val = 0,
223 }, 223 },
224 }; 224 };
225 225
226 static struct spear_modemux fsmc_modemux[] = { 226 static struct spear_modemux fsmc_modemux[] = {
227 { 227 {
228 .muxregs = fsmc_muxreg, 228 .muxregs = fsmc_muxreg,
229 .nmuxregs = ARRAY_SIZE(fsmc_muxreg), 229 .nmuxregs = ARRAY_SIZE(fsmc_muxreg),
230 }, 230 },
231 }; 231 };
232 232
233 static struct spear_pingroup fsmc_pingroup = { 233 static struct spear_pingroup fsmc_pingroup = {
234 .name = "fsmc_grp", 234 .name = "fsmc_grp",
235 .pins = fsmc_pins, 235 .pins = fsmc_pins,
236 .npins = ARRAY_SIZE(fsmc_pins), 236 .npins = ARRAY_SIZE(fsmc_pins),
237 .modemuxs = fsmc_modemux, 237 .modemuxs = fsmc_modemux,
238 .nmodemuxs = ARRAY_SIZE(fsmc_modemux), 238 .nmodemuxs = ARRAY_SIZE(fsmc_modemux),
239 }; 239 };
240 240
241 static const char *const fsmc_grps[] = { "fsmc_grp" }; 241 static const char *const fsmc_grps[] = { "fsmc_grp" };
242 static struct spear_function fsmc_function = { 242 static struct spear_function fsmc_function = {
243 .name = "fsmc", 243 .name = "fsmc",
244 .groups = fsmc_grps, 244 .groups = fsmc_grps,
245 .ngroups = ARRAY_SIZE(fsmc_grps), 245 .ngroups = ARRAY_SIZE(fsmc_grps),
246 }; 246 };
247 247
248 /* rs485_0_pins */ 248 /* rs485_0_pins */
249 static const unsigned rs485_0_pins[] = { 19, 20, 21, 22, 23 }; 249 static const unsigned rs485_0_pins[] = { 19, 20, 21, 22, 23 };
250 static struct spear_muxreg rs485_0_muxreg[] = { 250 static struct spear_muxreg rs485_0_muxreg[] = {
251 { 251 {
252 .reg = PMX_CONFIG_REG, 252 .reg = PMX_CONFIG_REG,
253 .mask = PMX_MII_MASK, 253 .mask = PMX_MII_MASK,
254 .val = 0, 254 .val = 0,
255 }, 255 },
256 }; 256 };
257 257
258 static struct spear_modemux rs485_0_modemux[] = { 258 static struct spear_modemux rs485_0_modemux[] = {
259 { 259 {
260 .muxregs = rs485_0_muxreg, 260 .muxregs = rs485_0_muxreg,
261 .nmuxregs = ARRAY_SIZE(rs485_0_muxreg), 261 .nmuxregs = ARRAY_SIZE(rs485_0_muxreg),
262 }, 262 },
263 }; 263 };
264 264
265 static struct spear_pingroup rs485_0_pingroup = { 265 static struct spear_pingroup rs485_0_pingroup = {
266 .name = "rs485_0_grp", 266 .name = "rs485_0_grp",
267 .pins = rs485_0_pins, 267 .pins = rs485_0_pins,
268 .npins = ARRAY_SIZE(rs485_0_pins), 268 .npins = ARRAY_SIZE(rs485_0_pins),
269 .modemuxs = rs485_0_modemux, 269 .modemuxs = rs485_0_modemux,
270 .nmodemuxs = ARRAY_SIZE(rs485_0_modemux), 270 .nmodemuxs = ARRAY_SIZE(rs485_0_modemux),
271 }; 271 };
272 272
273 static const char *const rs485_0_grps[] = { "rs485_0" }; 273 static const char *const rs485_0_grps[] = { "rs485_0" };
274 static struct spear_function rs485_0_function = { 274 static struct spear_function rs485_0_function = {
275 .name = "rs485_0", 275 .name = "rs485_0",
276 .groups = rs485_0_grps, 276 .groups = rs485_0_grps,
277 .ngroups = ARRAY_SIZE(rs485_0_grps), 277 .ngroups = ARRAY_SIZE(rs485_0_grps),
278 }; 278 };
279 279
280 /* rs485_1_pins */ 280 /* rs485_1_pins */
281 static const unsigned rs485_1_pins[] = { 14, 15, 16, 17, 18 }; 281 static const unsigned rs485_1_pins[] = { 14, 15, 16, 17, 18 };
282 static struct spear_muxreg rs485_1_muxreg[] = { 282 static struct spear_muxreg rs485_1_muxreg[] = {
283 { 283 {
284 .reg = PMX_CONFIG_REG, 284 .reg = PMX_CONFIG_REG,
285 .mask = PMX_MII_MASK, 285 .mask = PMX_MII_MASK,
286 .val = 0, 286 .val = 0,
287 }, 287 },
288 }; 288 };
289 289
290 static struct spear_modemux rs485_1_modemux[] = { 290 static struct spear_modemux rs485_1_modemux[] = {
291 { 291 {
292 .muxregs = rs485_1_muxreg, 292 .muxregs = rs485_1_muxreg,
293 .nmuxregs = ARRAY_SIZE(rs485_1_muxreg), 293 .nmuxregs = ARRAY_SIZE(rs485_1_muxreg),
294 }, 294 },
295 }; 295 };
296 296
297 static struct spear_pingroup rs485_1_pingroup = { 297 static struct spear_pingroup rs485_1_pingroup = {
298 .name = "rs485_1_grp", 298 .name = "rs485_1_grp",
299 .pins = rs485_1_pins, 299 .pins = rs485_1_pins,
300 .npins = ARRAY_SIZE(rs485_1_pins), 300 .npins = ARRAY_SIZE(rs485_1_pins),
301 .modemuxs = rs485_1_modemux, 301 .modemuxs = rs485_1_modemux,
302 .nmodemuxs = ARRAY_SIZE(rs485_1_modemux), 302 .nmodemuxs = ARRAY_SIZE(rs485_1_modemux),
303 }; 303 };
304 304
305 static const char *const rs485_1_grps[] = { "rs485_1" }; 305 static const char *const rs485_1_grps[] = { "rs485_1" };
306 static struct spear_function rs485_1_function = { 306 static struct spear_function rs485_1_function = {
307 .name = "rs485_1", 307 .name = "rs485_1",
308 .groups = rs485_1_grps, 308 .groups = rs485_1_grps,
309 .ngroups = ARRAY_SIZE(rs485_1_grps), 309 .ngroups = ARRAY_SIZE(rs485_1_grps),
310 }; 310 };
311 311
312 /* tdm_pins */ 312 /* tdm_pins */
313 static const unsigned tdm_pins[] = { 10, 11, 12, 13 }; 313 static const unsigned tdm_pins[] = { 10, 11, 12, 13 };
314 static struct spear_muxreg tdm_muxreg[] = { 314 static struct spear_muxreg tdm_muxreg[] = {
315 { 315 {
316 .reg = PMX_CONFIG_REG, 316 .reg = PMX_CONFIG_REG,
317 .mask = PMX_MII_MASK, 317 .mask = PMX_MII_MASK,
318 .val = 0, 318 .val = 0,
319 }, 319 },
320 }; 320 };
321 321
322 static struct spear_modemux tdm_modemux[] = { 322 static struct spear_modemux tdm_modemux[] = {
323 { 323 {
324 .muxregs = tdm_muxreg, 324 .muxregs = tdm_muxreg,
325 .nmuxregs = ARRAY_SIZE(tdm_muxreg), 325 .nmuxregs = ARRAY_SIZE(tdm_muxreg),
326 }, 326 },
327 }; 327 };
328 328
329 static struct spear_pingroup tdm_pingroup = { 329 static struct spear_pingroup tdm_pingroup = {
330 .name = "tdm_grp", 330 .name = "tdm_grp",
331 .pins = tdm_pins, 331 .pins = tdm_pins,
332 .npins = ARRAY_SIZE(tdm_pins), 332 .npins = ARRAY_SIZE(tdm_pins),
333 .modemuxs = tdm_modemux, 333 .modemuxs = tdm_modemux,
334 .nmodemuxs = ARRAY_SIZE(tdm_modemux), 334 .nmodemuxs = ARRAY_SIZE(tdm_modemux),
335 }; 335 };
336 336
337 static const char *const tdm_grps[] = { "tdm_grp" }; 337 static const char *const tdm_grps[] = { "tdm_grp" };
338 static struct spear_function tdm_function = { 338 static struct spear_function tdm_function = {
339 .name = "tdm", 339 .name = "tdm",
340 .groups = tdm_grps, 340 .groups = tdm_grps,
341 .ngroups = ARRAY_SIZE(tdm_grps), 341 .ngroups = ARRAY_SIZE(tdm_grps),
342 }; 342 };
343 343
344 /* pingroups */ 344 /* pingroups */
345 static struct spear_pingroup *spear310_pingroups[] = { 345 static struct spear_pingroup *spear310_pingroups[] = {
346 SPEAR3XX_COMMON_PINGROUPS, 346 SPEAR3XX_COMMON_PINGROUPS,
347 &emi_cs_0_to_5_pingroup, 347 &emi_cs_0_to_5_pingroup,
348 &uart1_pingroup, 348 &uart1_pingroup,
349 &uart2_pingroup, 349 &uart2_pingroup,
350 &uart3_pingroup, 350 &uart3_pingroup,
351 &uart4_pingroup, 351 &uart4_pingroup,
352 &uart5_pingroup, 352 &uart5_pingroup,
353 &fsmc_pingroup, 353 &fsmc_pingroup,
354 &rs485_0_pingroup, 354 &rs485_0_pingroup,
355 &rs485_1_pingroup, 355 &rs485_1_pingroup,
356 &tdm_pingroup, 356 &tdm_pingroup,
357 }; 357 };
358 358
359 /* functions */ 359 /* functions */
360 static struct spear_function *spear310_functions[] = { 360 static struct spear_function *spear310_functions[] = {
361 SPEAR3XX_COMMON_FUNCTIONS, 361 SPEAR3XX_COMMON_FUNCTIONS,
362 &emi_cs_0_to_5_function, 362 &emi_cs_0_to_5_function,
363 &uart1_function, 363 &uart1_function,
364 &uart2_function, 364 &uart2_function,
365 &uart3_function, 365 &uart3_function,
366 &uart4_function, 366 &uart4_function,
367 &uart5_function, 367 &uart5_function,
368 &fsmc_function, 368 &fsmc_function,
369 &rs485_0_function, 369 &rs485_0_function,
370 &rs485_1_function, 370 &rs485_1_function,
371 &tdm_function, 371 &tdm_function,
372 }; 372 };
373 373
374 static struct of_device_id spear310_pinctrl_of_match[] = { 374 static struct of_device_id spear310_pinctrl_of_match[] = {
375 { 375 {
376 .compatible = "st,spear310-pinmux", 376 .compatible = "st,spear310-pinmux",
377 }, 377 },
378 {}, 378 {},
379 }; 379 };
380 380
381 static int __devinit spear310_pinctrl_probe(struct platform_device *pdev) 381 static int __devinit spear310_pinctrl_probe(struct platform_device *pdev)
382 { 382 {
383 int ret; 383 int ret;
384 384
385 spear3xx_machdata.groups = spear310_pingroups; 385 spear3xx_machdata.groups = spear310_pingroups;
386 spear3xx_machdata.ngroups = ARRAY_SIZE(spear310_pingroups); 386 spear3xx_machdata.ngroups = ARRAY_SIZE(spear310_pingroups);
387 spear3xx_machdata.functions = spear310_functions; 387 spear3xx_machdata.functions = spear310_functions;
388 spear3xx_machdata.nfunctions = ARRAY_SIZE(spear310_functions); 388 spear3xx_machdata.nfunctions = ARRAY_SIZE(spear310_functions);
389 389
390 pmx_init_addr(&spear3xx_machdata, PMX_CONFIG_REG); 390 pmx_init_addr(&spear3xx_machdata, PMX_CONFIG_REG);
391 391
392 spear3xx_machdata.modes_supported = false; 392 spear3xx_machdata.modes_supported = false;
393 393
394 ret = spear_pinctrl_probe(pdev, &spear3xx_machdata); 394 ret = spear_pinctrl_probe(pdev, &spear3xx_machdata);
395 if (ret) 395 if (ret)
396 return ret; 396 return ret;
397 397
398 return 0; 398 return 0;
399 } 399 }
400 400
401 static int __devexit spear310_pinctrl_remove(struct platform_device *pdev) 401 static int spear310_pinctrl_remove(struct platform_device *pdev)
402 { 402 {
403 return spear_pinctrl_remove(pdev); 403 return spear_pinctrl_remove(pdev);
404 } 404 }
405 405
406 static struct platform_driver spear310_pinctrl_driver = { 406 static struct platform_driver spear310_pinctrl_driver = {
407 .driver = { 407 .driver = {
408 .name = DRIVER_NAME, 408 .name = DRIVER_NAME,
409 .owner = THIS_MODULE, 409 .owner = THIS_MODULE,
410 .of_match_table = spear310_pinctrl_of_match, 410 .of_match_table = spear310_pinctrl_of_match,
411 }, 411 },
412 .probe = spear310_pinctrl_probe, 412 .probe = spear310_pinctrl_probe,
413 .remove = spear310_pinctrl_remove, 413 .remove = spear310_pinctrl_remove,
414 }; 414 };
415 415
416 static int __init spear310_pinctrl_init(void) 416 static int __init spear310_pinctrl_init(void)
417 { 417 {
418 return platform_driver_register(&spear310_pinctrl_driver); 418 return platform_driver_register(&spear310_pinctrl_driver);
419 } 419 }
420 arch_initcall(spear310_pinctrl_init); 420 arch_initcall(spear310_pinctrl_init);
421 421
422 static void __exit spear310_pinctrl_exit(void) 422 static void __exit spear310_pinctrl_exit(void)
423 { 423 {
424 platform_driver_unregister(&spear310_pinctrl_driver); 424 platform_driver_unregister(&spear310_pinctrl_driver);
425 } 425 }
426 module_exit(spear310_pinctrl_exit); 426 module_exit(spear310_pinctrl_exit);
427 427
428 MODULE_AUTHOR("Viresh Kumar <viresh.linux@gmail.com>"); 428 MODULE_AUTHOR("Viresh Kumar <viresh.linux@gmail.com>");
429 MODULE_DESCRIPTION("ST Microelectronics SPEAr310 pinctrl driver"); 429 MODULE_DESCRIPTION("ST Microelectronics SPEAr310 pinctrl driver");
430 MODULE_LICENSE("GPL v2"); 430 MODULE_LICENSE("GPL v2");
431 MODULE_DEVICE_TABLE(of, SPEAr310_pinctrl_of_match); 431 MODULE_DEVICE_TABLE(of, SPEAr310_pinctrl_of_match);
432 432
drivers/pinctrl/spear/pinctrl-spear320.c
1 /* 1 /*
2 * Driver for the ST Microelectronics SPEAr320 pinmux 2 * Driver for the ST Microelectronics SPEAr320 pinmux
3 * 3 *
4 * Copyright (C) 2012 ST Microelectronics 4 * Copyright (C) 2012 ST Microelectronics
5 * Viresh Kumar <viresh.linux@gmail.com> 5 * Viresh Kumar <viresh.linux@gmail.com>
6 * 6 *
7 * This file is licensed under the terms of the GNU General Public 7 * This file is licensed under the terms of the GNU General Public
8 * License version 2. This program is licensed "as is" without any 8 * License version 2. This program is licensed "as is" without any
9 * warranty of any kind, whether express or implied. 9 * warranty of any kind, whether express or implied.
10 */ 10 */
11 11
12 #include <linux/err.h> 12 #include <linux/err.h>
13 #include <linux/init.h> 13 #include <linux/init.h>
14 #include <linux/module.h> 14 #include <linux/module.h>
15 #include <linux/of_device.h> 15 #include <linux/of_device.h>
16 #include <linux/platform_device.h> 16 #include <linux/platform_device.h>
17 #include "pinctrl-spear3xx.h" 17 #include "pinctrl-spear3xx.h"
18 18
19 #define DRIVER_NAME "spear320-pinmux" 19 #define DRIVER_NAME "spear320-pinmux"
20 20
21 /* addresses */ 21 /* addresses */
22 #define PMX_CONFIG_REG 0x0C 22 #define PMX_CONFIG_REG 0x0C
23 #define MODE_CONFIG_REG 0x10 23 #define MODE_CONFIG_REG 0x10
24 #define MODE_EXT_CONFIG_REG 0x18 24 #define MODE_EXT_CONFIG_REG 0x18
25 25
26 /* modes */ 26 /* modes */
27 #define AUTO_NET_SMII_MODE (1 << 0) 27 #define AUTO_NET_SMII_MODE (1 << 0)
28 #define AUTO_NET_MII_MODE (1 << 1) 28 #define AUTO_NET_MII_MODE (1 << 1)
29 #define AUTO_EXP_MODE (1 << 2) 29 #define AUTO_EXP_MODE (1 << 2)
30 #define SMALL_PRINTERS_MODE (1 << 3) 30 #define SMALL_PRINTERS_MODE (1 << 3)
31 #define EXTENDED_MODE (1 << 4) 31 #define EXTENDED_MODE (1 << 4)
32 32
33 static struct spear_pmx_mode pmx_mode_auto_net_smii = { 33 static struct spear_pmx_mode pmx_mode_auto_net_smii = {
34 .name = "Automation Networking SMII mode", 34 .name = "Automation Networking SMII mode",
35 .mode = AUTO_NET_SMII_MODE, 35 .mode = AUTO_NET_SMII_MODE,
36 .reg = MODE_CONFIG_REG, 36 .reg = MODE_CONFIG_REG,
37 .mask = 0x00000007, 37 .mask = 0x00000007,
38 .val = 0x0, 38 .val = 0x0,
39 }; 39 };
40 40
41 static struct spear_pmx_mode pmx_mode_auto_net_mii = { 41 static struct spear_pmx_mode pmx_mode_auto_net_mii = {
42 .name = "Automation Networking MII mode", 42 .name = "Automation Networking MII mode",
43 .mode = AUTO_NET_MII_MODE, 43 .mode = AUTO_NET_MII_MODE,
44 .reg = MODE_CONFIG_REG, 44 .reg = MODE_CONFIG_REG,
45 .mask = 0x00000007, 45 .mask = 0x00000007,
46 .val = 0x1, 46 .val = 0x1,
47 }; 47 };
48 48
49 static struct spear_pmx_mode pmx_mode_auto_exp = { 49 static struct spear_pmx_mode pmx_mode_auto_exp = {
50 .name = "Automation Expanded mode", 50 .name = "Automation Expanded mode",
51 .mode = AUTO_EXP_MODE, 51 .mode = AUTO_EXP_MODE,
52 .reg = MODE_CONFIG_REG, 52 .reg = MODE_CONFIG_REG,
53 .mask = 0x00000007, 53 .mask = 0x00000007,
54 .val = 0x2, 54 .val = 0x2,
55 }; 55 };
56 56
57 static struct spear_pmx_mode pmx_mode_small_printers = { 57 static struct spear_pmx_mode pmx_mode_small_printers = {
58 .name = "Small Printers mode", 58 .name = "Small Printers mode",
59 .mode = SMALL_PRINTERS_MODE, 59 .mode = SMALL_PRINTERS_MODE,
60 .reg = MODE_CONFIG_REG, 60 .reg = MODE_CONFIG_REG,
61 .mask = 0x00000007, 61 .mask = 0x00000007,
62 .val = 0x3, 62 .val = 0x3,
63 }; 63 };
64 64
65 static struct spear_pmx_mode pmx_mode_extended = { 65 static struct spear_pmx_mode pmx_mode_extended = {
66 .name = "extended mode", 66 .name = "extended mode",
67 .mode = EXTENDED_MODE, 67 .mode = EXTENDED_MODE,
68 .reg = MODE_EXT_CONFIG_REG, 68 .reg = MODE_EXT_CONFIG_REG,
69 .mask = 0x00000001, 69 .mask = 0x00000001,
70 .val = 0x1, 70 .val = 0x1,
71 }; 71 };
72 72
73 static struct spear_pmx_mode *spear320_pmx_modes[] = { 73 static struct spear_pmx_mode *spear320_pmx_modes[] = {
74 &pmx_mode_auto_net_smii, 74 &pmx_mode_auto_net_smii,
75 &pmx_mode_auto_net_mii, 75 &pmx_mode_auto_net_mii,
76 &pmx_mode_auto_exp, 76 &pmx_mode_auto_exp,
77 &pmx_mode_small_printers, 77 &pmx_mode_small_printers,
78 &pmx_mode_extended, 78 &pmx_mode_extended,
79 }; 79 };
80 80
81 /* Extended mode registers and their offsets */ 81 /* Extended mode registers and their offsets */
82 #define EXT_CTRL_REG 0x0018 82 #define EXT_CTRL_REG 0x0018
83 #define MII_MDIO_MASK (1 << 4) 83 #define MII_MDIO_MASK (1 << 4)
84 #define MII_MDIO_10_11_VAL 0 84 #define MII_MDIO_10_11_VAL 0
85 #define MII_MDIO_81_VAL (1 << 4) 85 #define MII_MDIO_81_VAL (1 << 4)
86 #define EMI_FSMC_DYNAMIC_MUX_MASK (1 << 5) 86 #define EMI_FSMC_DYNAMIC_MUX_MASK (1 << 5)
87 #define MAC_MODE_MII 0 87 #define MAC_MODE_MII 0
88 #define MAC_MODE_RMII 1 88 #define MAC_MODE_RMII 1
89 #define MAC_MODE_SMII 2 89 #define MAC_MODE_SMII 2
90 #define MAC_MODE_SS_SMII 3 90 #define MAC_MODE_SS_SMII 3
91 #define MAC_MODE_MASK 0x3 91 #define MAC_MODE_MASK 0x3
92 #define MAC1_MODE_SHIFT 16 92 #define MAC1_MODE_SHIFT 16
93 #define MAC2_MODE_SHIFT 18 93 #define MAC2_MODE_SHIFT 18
94 94
95 #define IP_SEL_PAD_0_9_REG 0x00A4 95 #define IP_SEL_PAD_0_9_REG 0x00A4
96 #define PMX_PL_0_1_MASK (0x3F << 0) 96 #define PMX_PL_0_1_MASK (0x3F << 0)
97 #define PMX_UART2_PL_0_1_VAL 0x0 97 #define PMX_UART2_PL_0_1_VAL 0x0
98 #define PMX_I2C2_PL_0_1_VAL (0x4 | (0x4 << 3)) 98 #define PMX_I2C2_PL_0_1_VAL (0x4 | (0x4 << 3))
99 99
100 #define PMX_PL_2_3_MASK (0x3F << 6) 100 #define PMX_PL_2_3_MASK (0x3F << 6)
101 #define PMX_I2C2_PL_2_3_VAL 0x0 101 #define PMX_I2C2_PL_2_3_VAL 0x0
102 #define PMX_UART6_PL_2_3_VAL ((0x1 << 6) | (0x1 << 9)) 102 #define PMX_UART6_PL_2_3_VAL ((0x1 << 6) | (0x1 << 9))
103 #define PMX_UART1_ENH_PL_2_3_VAL ((0x4 << 6) | (0x4 << 9)) 103 #define PMX_UART1_ENH_PL_2_3_VAL ((0x4 << 6) | (0x4 << 9))
104 104
105 #define PMX_PL_4_5_MASK (0x3F << 12) 105 #define PMX_PL_4_5_MASK (0x3F << 12)
106 #define PMX_UART5_PL_4_5_VAL ((0x1 << 12) | (0x1 << 15)) 106 #define PMX_UART5_PL_4_5_VAL ((0x1 << 12) | (0x1 << 15))
107 #define PMX_UART1_ENH_PL_4_5_VAL ((0x4 << 12) | (0x4 << 15)) 107 #define PMX_UART1_ENH_PL_4_5_VAL ((0x4 << 12) | (0x4 << 15))
108 #define PMX_PL_5_MASK (0x7 << 15) 108 #define PMX_PL_5_MASK (0x7 << 15)
109 #define PMX_TOUCH_Y_PL_5_VAL 0x0 109 #define PMX_TOUCH_Y_PL_5_VAL 0x0
110 110
111 #define PMX_PL_6_7_MASK (0x3F << 18) 111 #define PMX_PL_6_7_MASK (0x3F << 18)
112 #define PMX_PL_6_MASK (0x7 << 18) 112 #define PMX_PL_6_MASK (0x7 << 18)
113 #define PMX_PL_7_MASK (0x7 << 21) 113 #define PMX_PL_7_MASK (0x7 << 21)
114 #define PMX_UART4_PL_6_7_VAL ((0x1 << 18) | (0x1 << 21)) 114 #define PMX_UART4_PL_6_7_VAL ((0x1 << 18) | (0x1 << 21))
115 #define PMX_PWM_3_PL_6_VAL (0x2 << 18) 115 #define PMX_PWM_3_PL_6_VAL (0x2 << 18)
116 #define PMX_PWM_2_PL_7_VAL (0x2 << 21) 116 #define PMX_PWM_2_PL_7_VAL (0x2 << 21)
117 #define PMX_UART1_ENH_PL_6_7_VAL ((0x4 << 18) | (0x4 << 21)) 117 #define PMX_UART1_ENH_PL_6_7_VAL ((0x4 << 18) | (0x4 << 21))
118 118
119 #define PMX_PL_8_9_MASK (0x3F << 24) 119 #define PMX_PL_8_9_MASK (0x3F << 24)
120 #define PMX_UART3_PL_8_9_VAL ((0x1 << 24) | (0x1 << 27)) 120 #define PMX_UART3_PL_8_9_VAL ((0x1 << 24) | (0x1 << 27))
121 #define PMX_PWM_0_1_PL_8_9_VAL ((0x2 << 24) | (0x2 << 27)) 121 #define PMX_PWM_0_1_PL_8_9_VAL ((0x2 << 24) | (0x2 << 27))
122 #define PMX_I2C1_PL_8_9_VAL ((0x4 << 24) | (0x4 << 27)) 122 #define PMX_I2C1_PL_8_9_VAL ((0x4 << 24) | (0x4 << 27))
123 123
124 #define IP_SEL_PAD_10_19_REG 0x00A8 124 #define IP_SEL_PAD_10_19_REG 0x00A8
125 #define PMX_PL_10_11_MASK (0x3F << 0) 125 #define PMX_PL_10_11_MASK (0x3F << 0)
126 #define PMX_SMII_PL_10_11_VAL 0 126 #define PMX_SMII_PL_10_11_VAL 0
127 #define PMX_RMII_PL_10_11_VAL ((0x4 << 0) | (0x4 << 3)) 127 #define PMX_RMII_PL_10_11_VAL ((0x4 << 0) | (0x4 << 3))
128 128
129 #define PMX_PL_12_MASK (0x7 << 6) 129 #define PMX_PL_12_MASK (0x7 << 6)
130 #define PMX_PWM3_PL_12_VAL 0 130 #define PMX_PWM3_PL_12_VAL 0
131 #define PMX_SDHCI_CD_PL_12_VAL (0x4 << 6) 131 #define PMX_SDHCI_CD_PL_12_VAL (0x4 << 6)
132 132
133 #define PMX_PL_13_14_MASK (0x3F << 9) 133 #define PMX_PL_13_14_MASK (0x3F << 9)
134 #define PMX_PL_13_MASK (0x7 << 9) 134 #define PMX_PL_13_MASK (0x7 << 9)
135 #define PMX_PL_14_MASK (0x7 << 12) 135 #define PMX_PL_14_MASK (0x7 << 12)
136 #define PMX_SSP2_PL_13_14_15_16_VAL 0 136 #define PMX_SSP2_PL_13_14_15_16_VAL 0
137 #define PMX_UART4_PL_13_14_VAL ((0x1 << 9) | (0x1 << 12)) 137 #define PMX_UART4_PL_13_14_VAL ((0x1 << 9) | (0x1 << 12))
138 #define PMX_RMII_PL_13_14_VAL ((0x4 << 9) | (0x4 << 12)) 138 #define PMX_RMII_PL_13_14_VAL ((0x4 << 9) | (0x4 << 12))
139 #define PMX_PWM2_PL_13_VAL (0x2 << 9) 139 #define PMX_PWM2_PL_13_VAL (0x2 << 9)
140 #define PMX_PWM1_PL_14_VAL (0x2 << 12) 140 #define PMX_PWM1_PL_14_VAL (0x2 << 12)
141 141
142 #define PMX_PL_15_MASK (0x7 << 15) 142 #define PMX_PL_15_MASK (0x7 << 15)
143 #define PMX_PWM0_PL_15_VAL (0x2 << 15) 143 #define PMX_PWM0_PL_15_VAL (0x2 << 15)
144 #define PMX_PL_15_16_MASK (0x3F << 15) 144 #define PMX_PL_15_16_MASK (0x3F << 15)
145 #define PMX_UART3_PL_15_16_VAL ((0x1 << 15) | (0x1 << 18)) 145 #define PMX_UART3_PL_15_16_VAL ((0x1 << 15) | (0x1 << 18))
146 #define PMX_RMII_PL_15_16_VAL ((0x4 << 15) | (0x4 << 18)) 146 #define PMX_RMII_PL_15_16_VAL ((0x4 << 15) | (0x4 << 18))
147 147
148 #define PMX_PL_17_18_MASK (0x3F << 21) 148 #define PMX_PL_17_18_MASK (0x3F << 21)
149 #define PMX_SSP1_PL_17_18_19_20_VAL 0 149 #define PMX_SSP1_PL_17_18_19_20_VAL 0
150 #define PMX_RMII_PL_17_18_VAL ((0x4 << 21) | (0x4 << 24)) 150 #define PMX_RMII_PL_17_18_VAL ((0x4 << 21) | (0x4 << 24))
151 151
152 #define PMX_PL_19_MASK (0x7 << 27) 152 #define PMX_PL_19_MASK (0x7 << 27)
153 #define PMX_I2C2_PL_19_VAL (0x1 << 27) 153 #define PMX_I2C2_PL_19_VAL (0x1 << 27)
154 #define PMX_RMII_PL_19_VAL (0x4 << 27) 154 #define PMX_RMII_PL_19_VAL (0x4 << 27)
155 155
156 #define IP_SEL_PAD_20_29_REG 0x00AC 156 #define IP_SEL_PAD_20_29_REG 0x00AC
157 #define PMX_PL_20_MASK (0x7 << 0) 157 #define PMX_PL_20_MASK (0x7 << 0)
158 #define PMX_I2C2_PL_20_VAL (0x1 << 0) 158 #define PMX_I2C2_PL_20_VAL (0x1 << 0)
159 #define PMX_RMII_PL_20_VAL (0x4 << 0) 159 #define PMX_RMII_PL_20_VAL (0x4 << 0)
160 160
161 #define PMX_PL_21_TO_27_MASK (0x1FFFFF << 3) 161 #define PMX_PL_21_TO_27_MASK (0x1FFFFF << 3)
162 #define PMX_SMII_PL_21_TO_27_VAL 0 162 #define PMX_SMII_PL_21_TO_27_VAL 0
163 #define PMX_RMII_PL_21_TO_27_VAL ((0x4 << 3) | (0x4 << 6) | (0x4 << 9) | (0x4 << 12) | (0x4 << 15) | (0x4 << 18) | (0x4 << 21)) 163 #define PMX_RMII_PL_21_TO_27_VAL ((0x4 << 3) | (0x4 << 6) | (0x4 << 9) | (0x4 << 12) | (0x4 << 15) | (0x4 << 18) | (0x4 << 21))
164 164
165 #define PMX_PL_28_29_MASK (0x3F << 24) 165 #define PMX_PL_28_29_MASK (0x3F << 24)
166 #define PMX_PL_28_MASK (0x7 << 24) 166 #define PMX_PL_28_MASK (0x7 << 24)
167 #define PMX_PL_29_MASK (0x7 << 27) 167 #define PMX_PL_29_MASK (0x7 << 27)
168 #define PMX_UART1_PL_28_29_VAL 0 168 #define PMX_UART1_PL_28_29_VAL 0
169 #define PMX_PWM_3_PL_28_VAL (0x4 << 24) 169 #define PMX_PWM_3_PL_28_VAL (0x4 << 24)
170 #define PMX_PWM_2_PL_29_VAL (0x4 << 27) 170 #define PMX_PWM_2_PL_29_VAL (0x4 << 27)
171 171
172 #define IP_SEL_PAD_30_39_REG 0x00B0 172 #define IP_SEL_PAD_30_39_REG 0x00B0
173 #define PMX_PL_30_31_MASK (0x3F << 0) 173 #define PMX_PL_30_31_MASK (0x3F << 0)
174 #define PMX_CAN1_PL_30_31_VAL (0) 174 #define PMX_CAN1_PL_30_31_VAL (0)
175 #define PMX_PL_30_MASK (0x7 << 0) 175 #define PMX_PL_30_MASK (0x7 << 0)
176 #define PMX_PL_31_MASK (0x7 << 3) 176 #define PMX_PL_31_MASK (0x7 << 3)
177 #define PMX_PWM1_EXT_PL_30_VAL (0x4 << 0) 177 #define PMX_PWM1_EXT_PL_30_VAL (0x4 << 0)
178 #define PMX_PWM0_EXT_PL_31_VAL (0x4 << 3) 178 #define PMX_PWM0_EXT_PL_31_VAL (0x4 << 3)
179 #define PMX_UART1_ENH_PL_31_VAL (0x3 << 3) 179 #define PMX_UART1_ENH_PL_31_VAL (0x3 << 3)
180 180
181 #define PMX_PL_32_33_MASK (0x3F << 6) 181 #define PMX_PL_32_33_MASK (0x3F << 6)
182 #define PMX_CAN0_PL_32_33_VAL 0 182 #define PMX_CAN0_PL_32_33_VAL 0
183 #define PMX_UART1_ENH_PL_32_33_VAL ((0x3 << 6) | (0x3 << 9)) 183 #define PMX_UART1_ENH_PL_32_33_VAL ((0x3 << 6) | (0x3 << 9))
184 #define PMX_SSP2_PL_32_33_VAL ((0x4 << 6) | (0x4 << 9)) 184 #define PMX_SSP2_PL_32_33_VAL ((0x4 << 6) | (0x4 << 9))
185 185
186 #define PMX_PL_34_MASK (0x7 << 12) 186 #define PMX_PL_34_MASK (0x7 << 12)
187 #define PMX_PWM2_PL_34_VAL 0 187 #define PMX_PWM2_PL_34_VAL 0
188 #define PMX_UART1_ENH_PL_34_VAL (0x2 << 12) 188 #define PMX_UART1_ENH_PL_34_VAL (0x2 << 12)
189 #define PMX_SSP2_PL_34_VAL (0x4 << 12) 189 #define PMX_SSP2_PL_34_VAL (0x4 << 12)
190 190
191 #define PMX_PL_35_MASK (0x7 << 15) 191 #define PMX_PL_35_MASK (0x7 << 15)
192 #define PMX_I2S_REF_CLK_PL_35_VAL 0 192 #define PMX_I2S_REF_CLK_PL_35_VAL 0
193 #define PMX_UART1_ENH_PL_35_VAL (0x2 << 15) 193 #define PMX_UART1_ENH_PL_35_VAL (0x2 << 15)
194 #define PMX_SSP2_PL_35_VAL (0x4 << 15) 194 #define PMX_SSP2_PL_35_VAL (0x4 << 15)
195 195
196 #define PMX_PL_36_MASK (0x7 << 18) 196 #define PMX_PL_36_MASK (0x7 << 18)
197 #define PMX_TOUCH_X_PL_36_VAL 0 197 #define PMX_TOUCH_X_PL_36_VAL 0
198 #define PMX_UART1_ENH_PL_36_VAL (0x2 << 18) 198 #define PMX_UART1_ENH_PL_36_VAL (0x2 << 18)
199 #define PMX_SSP1_PL_36_VAL (0x4 << 18) 199 #define PMX_SSP1_PL_36_VAL (0x4 << 18)
200 200
201 #define PMX_PL_37_38_MASK (0x3F << 21) 201 #define PMX_PL_37_38_MASK (0x3F << 21)
202 #define PMX_PWM0_1_PL_37_38_VAL 0 202 #define PMX_PWM0_1_PL_37_38_VAL 0
203 #define PMX_UART5_PL_37_38_VAL ((0x2 << 21) | (0x2 << 24)) 203 #define PMX_UART5_PL_37_38_VAL ((0x2 << 21) | (0x2 << 24))
204 #define PMX_SSP1_PL_37_38_VAL ((0x4 << 21) | (0x4 << 24)) 204 #define PMX_SSP1_PL_37_38_VAL ((0x4 << 21) | (0x4 << 24))
205 205
206 #define PMX_PL_39_MASK (0x7 << 27) 206 #define PMX_PL_39_MASK (0x7 << 27)
207 #define PMX_I2S_PL_39_VAL 0 207 #define PMX_I2S_PL_39_VAL 0
208 #define PMX_UART4_PL_39_VAL (0x2 << 27) 208 #define PMX_UART4_PL_39_VAL (0x2 << 27)
209 #define PMX_SSP1_PL_39_VAL (0x4 << 27) 209 #define PMX_SSP1_PL_39_VAL (0x4 << 27)
210 210
211 #define IP_SEL_PAD_40_49_REG 0x00B4 211 #define IP_SEL_PAD_40_49_REG 0x00B4
212 #define PMX_PL_40_MASK (0x7 << 0) 212 #define PMX_PL_40_MASK (0x7 << 0)
213 #define PMX_I2S_PL_40_VAL 0 213 #define PMX_I2S_PL_40_VAL 0
214 #define PMX_UART4_PL_40_VAL (0x2 << 0) 214 #define PMX_UART4_PL_40_VAL (0x2 << 0)
215 #define PMX_PWM3_PL_40_VAL (0x4 << 0) 215 #define PMX_PWM3_PL_40_VAL (0x4 << 0)
216 216
217 #define PMX_PL_41_42_MASK (0x3F << 3) 217 #define PMX_PL_41_42_MASK (0x3F << 3)
218 #define PMX_PL_41_MASK (0x7 << 3) 218 #define PMX_PL_41_MASK (0x7 << 3)
219 #define PMX_PL_42_MASK (0x7 << 6) 219 #define PMX_PL_42_MASK (0x7 << 6)
220 #define PMX_I2S_PL_41_42_VAL 0 220 #define PMX_I2S_PL_41_42_VAL 0
221 #define PMX_UART3_PL_41_42_VAL ((0x2 << 3) | (0x2 << 6)) 221 #define PMX_UART3_PL_41_42_VAL ((0x2 << 3) | (0x2 << 6))
222 #define PMX_PWM2_PL_41_VAL (0x4 << 3) 222 #define PMX_PWM2_PL_41_VAL (0x4 << 3)
223 #define PMX_PWM1_PL_42_VAL (0x4 << 6) 223 #define PMX_PWM1_PL_42_VAL (0x4 << 6)
224 224
225 #define PMX_PL_43_MASK (0x7 << 9) 225 #define PMX_PL_43_MASK (0x7 << 9)
226 #define PMX_SDHCI_PL_43_VAL 0 226 #define PMX_SDHCI_PL_43_VAL 0
227 #define PMX_UART1_ENH_PL_43_VAL (0x2 << 9) 227 #define PMX_UART1_ENH_PL_43_VAL (0x2 << 9)
228 #define PMX_PWM0_PL_43_VAL (0x4 << 9) 228 #define PMX_PWM0_PL_43_VAL (0x4 << 9)
229 229
230 #define PMX_PL_44_45_MASK (0x3F << 12) 230 #define PMX_PL_44_45_MASK (0x3F << 12)
231 #define PMX_SDHCI_PL_44_45_VAL 0 231 #define PMX_SDHCI_PL_44_45_VAL 0
232 #define PMX_UART1_ENH_PL_44_45_VAL ((0x2 << 12) | (0x2 << 15)) 232 #define PMX_UART1_ENH_PL_44_45_VAL ((0x2 << 12) | (0x2 << 15))
233 #define PMX_SSP2_PL_44_45_VAL ((0x4 << 12) | (0x4 << 15)) 233 #define PMX_SSP2_PL_44_45_VAL ((0x4 << 12) | (0x4 << 15))
234 234
235 #define PMX_PL_46_47_MASK (0x3F << 18) 235 #define PMX_PL_46_47_MASK (0x3F << 18)
236 #define PMX_SDHCI_PL_46_47_VAL 0 236 #define PMX_SDHCI_PL_46_47_VAL 0
237 #define PMX_FSMC_EMI_PL_46_47_VAL ((0x2 << 18) | (0x2 << 21)) 237 #define PMX_FSMC_EMI_PL_46_47_VAL ((0x2 << 18) | (0x2 << 21))
238 #define PMX_SSP2_PL_46_47_VAL ((0x4 << 18) | (0x4 << 21)) 238 #define PMX_SSP2_PL_46_47_VAL ((0x4 << 18) | (0x4 << 21))
239 239
240 #define PMX_PL_48_49_MASK (0x3F << 24) 240 #define PMX_PL_48_49_MASK (0x3F << 24)
241 #define PMX_SDHCI_PL_48_49_VAL 0 241 #define PMX_SDHCI_PL_48_49_VAL 0
242 #define PMX_FSMC_EMI_PL_48_49_VAL ((0x2 << 24) | (0x2 << 27)) 242 #define PMX_FSMC_EMI_PL_48_49_VAL ((0x2 << 24) | (0x2 << 27))
243 #define PMX_SSP1_PL_48_49_VAL ((0x4 << 24) | (0x4 << 27)) 243 #define PMX_SSP1_PL_48_49_VAL ((0x4 << 24) | (0x4 << 27))
244 244
245 #define IP_SEL_PAD_50_59_REG 0x00B8 245 #define IP_SEL_PAD_50_59_REG 0x00B8
246 #define PMX_PL_50_51_MASK (0x3F << 0) 246 #define PMX_PL_50_51_MASK (0x3F << 0)
247 #define PMX_EMI_PL_50_51_VAL ((0x2 << 0) | (0x2 << 3)) 247 #define PMX_EMI_PL_50_51_VAL ((0x2 << 0) | (0x2 << 3))
248 #define PMX_SSP1_PL_50_51_VAL ((0x4 << 0) | (0x4 << 3)) 248 #define PMX_SSP1_PL_50_51_VAL ((0x4 << 0) | (0x4 << 3))
249 #define PMX_PL_50_MASK (0x7 << 0) 249 #define PMX_PL_50_MASK (0x7 << 0)
250 #define PMX_PL_51_MASK (0x7 << 3) 250 #define PMX_PL_51_MASK (0x7 << 3)
251 #define PMX_SDHCI_PL_50_VAL 0 251 #define PMX_SDHCI_PL_50_VAL 0
252 #define PMX_SDHCI_CD_PL_51_VAL 0 252 #define PMX_SDHCI_CD_PL_51_VAL 0
253 253
254 #define PMX_PL_52_53_MASK (0x3F << 6) 254 #define PMX_PL_52_53_MASK (0x3F << 6)
255 #define PMX_FSMC_PL_52_53_VAL 0 255 #define PMX_FSMC_PL_52_53_VAL 0
256 #define PMX_EMI_PL_52_53_VAL ((0x2 << 6) | (0x2 << 9)) 256 #define PMX_EMI_PL_52_53_VAL ((0x2 << 6) | (0x2 << 9))
257 #define PMX_UART3_PL_52_53_VAL ((0x4 << 6) | (0x4 << 9)) 257 #define PMX_UART3_PL_52_53_VAL ((0x4 << 6) | (0x4 << 9))
258 258
259 #define PMX_PL_54_55_56_MASK (0x1FF << 12) 259 #define PMX_PL_54_55_56_MASK (0x1FF << 12)
260 #define PMX_FSMC_EMI_PL_54_55_56_VAL ((0x2 << 12) | (0x2 << 15) | (0x2 << 18)) 260 #define PMX_FSMC_EMI_PL_54_55_56_VAL ((0x2 << 12) | (0x2 << 15) | (0x2 << 18))
261 261
262 #define PMX_PL_57_MASK (0x7 << 21) 262 #define PMX_PL_57_MASK (0x7 << 21)
263 #define PMX_FSMC_PL_57_VAL 0 263 #define PMX_FSMC_PL_57_VAL 0
264 #define PMX_PWM3_PL_57_VAL (0x4 << 21) 264 #define PMX_PWM3_PL_57_VAL (0x4 << 21)
265 265
266 #define PMX_PL_58_59_MASK (0x3F << 24) 266 #define PMX_PL_58_59_MASK (0x3F << 24)
267 #define PMX_PL_58_MASK (0x7 << 24) 267 #define PMX_PL_58_MASK (0x7 << 24)
268 #define PMX_PL_59_MASK (0x7 << 27) 268 #define PMX_PL_59_MASK (0x7 << 27)
269 #define PMX_FSMC_EMI_PL_58_59_VAL ((0x2 << 24) | (0x2 << 27)) 269 #define PMX_FSMC_EMI_PL_58_59_VAL ((0x2 << 24) | (0x2 << 27))
270 #define PMX_PWM2_PL_58_VAL (0x4 << 24) 270 #define PMX_PWM2_PL_58_VAL (0x4 << 24)
271 #define PMX_PWM1_PL_59_VAL (0x4 << 27) 271 #define PMX_PWM1_PL_59_VAL (0x4 << 27)
272 272
273 #define IP_SEL_PAD_60_69_REG 0x00BC 273 #define IP_SEL_PAD_60_69_REG 0x00BC
274 #define PMX_PL_60_MASK (0x7 << 0) 274 #define PMX_PL_60_MASK (0x7 << 0)
275 #define PMX_FSMC_PL_60_VAL 0 275 #define PMX_FSMC_PL_60_VAL 0
276 #define PMX_PWM0_PL_60_VAL (0x4 << 0) 276 #define PMX_PWM0_PL_60_VAL (0x4 << 0)
277 277
278 #define PMX_PL_61_TO_64_MASK (0xFFF << 3) 278 #define PMX_PL_61_TO_64_MASK (0xFFF << 3)
279 #define PMX_FSMC_PL_61_TO_64_VAL ((0x2 << 3) | (0x2 << 6) | (0x2 << 9) | (0x2 << 12)) 279 #define PMX_FSMC_PL_61_TO_64_VAL ((0x2 << 3) | (0x2 << 6) | (0x2 << 9) | (0x2 << 12))
280 #define PMX_SSP2_PL_61_TO_64_VAL ((0x4 << 3) | (0x4 << 6) | (0x4 << 9) | (0x4 << 12)) 280 #define PMX_SSP2_PL_61_TO_64_VAL ((0x4 << 3) | (0x4 << 6) | (0x4 << 9) | (0x4 << 12))
281 281
282 #define PMX_PL_65_TO_68_MASK (0xFFF << 15) 282 #define PMX_PL_65_TO_68_MASK (0xFFF << 15)
283 #define PMX_FSMC_PL_65_TO_68_VAL ((0x2 << 15) | (0x2 << 18) | (0x2 << 21) | (0x2 << 24)) 283 #define PMX_FSMC_PL_65_TO_68_VAL ((0x2 << 15) | (0x2 << 18) | (0x2 << 21) | (0x2 << 24))
284 #define PMX_SSP1_PL_65_TO_68_VAL ((0x4 << 15) | (0x4 << 18) | (0x4 << 21) | (0x4 << 24)) 284 #define PMX_SSP1_PL_65_TO_68_VAL ((0x4 << 15) | (0x4 << 18) | (0x4 << 21) | (0x4 << 24))
285 285
286 #define PMX_PL_69_MASK (0x7 << 27) 286 #define PMX_PL_69_MASK (0x7 << 27)
287 #define PMX_CLCD_PL_69_VAL (0) 287 #define PMX_CLCD_PL_69_VAL (0)
288 #define PMX_EMI_PL_69_VAL (0x2 << 27) 288 #define PMX_EMI_PL_69_VAL (0x2 << 27)
289 #define PMX_SPP_PL_69_VAL (0x3 << 27) 289 #define PMX_SPP_PL_69_VAL (0x3 << 27)
290 #define PMX_UART5_PL_69_VAL (0x4 << 27) 290 #define PMX_UART5_PL_69_VAL (0x4 << 27)
291 291
292 #define IP_SEL_PAD_70_79_REG 0x00C0 292 #define IP_SEL_PAD_70_79_REG 0x00C0
293 #define PMX_PL_70_MASK (0x7 << 0) 293 #define PMX_PL_70_MASK (0x7 << 0)
294 #define PMX_CLCD_PL_70_VAL (0) 294 #define PMX_CLCD_PL_70_VAL (0)
295 #define PMX_FSMC_EMI_PL_70_VAL (0x2 << 0) 295 #define PMX_FSMC_EMI_PL_70_VAL (0x2 << 0)
296 #define PMX_SPP_PL_70_VAL (0x3 << 0) 296 #define PMX_SPP_PL_70_VAL (0x3 << 0)
297 #define PMX_UART5_PL_70_VAL (0x4 << 0) 297 #define PMX_UART5_PL_70_VAL (0x4 << 0)
298 298
299 #define PMX_PL_71_72_MASK (0x3F << 3) 299 #define PMX_PL_71_72_MASK (0x3F << 3)
300 #define PMX_CLCD_PL_71_72_VAL (0) 300 #define PMX_CLCD_PL_71_72_VAL (0)
301 #define PMX_FSMC_EMI_PL_71_72_VAL ((0x2 << 3) | (0x2 << 6)) 301 #define PMX_FSMC_EMI_PL_71_72_VAL ((0x2 << 3) | (0x2 << 6))
302 #define PMX_SPP_PL_71_72_VAL ((0x3 << 3) | (0x3 << 6)) 302 #define PMX_SPP_PL_71_72_VAL ((0x3 << 3) | (0x3 << 6))
303 #define PMX_UART4_PL_71_72_VAL ((0x4 << 3) | (0x4 << 6)) 303 #define PMX_UART4_PL_71_72_VAL ((0x4 << 3) | (0x4 << 6))
304 304
305 #define PMX_PL_73_MASK (0x7 << 9) 305 #define PMX_PL_73_MASK (0x7 << 9)
306 #define PMX_CLCD_PL_73_VAL (0) 306 #define PMX_CLCD_PL_73_VAL (0)
307 #define PMX_FSMC_EMI_PL_73_VAL (0x2 << 9) 307 #define PMX_FSMC_EMI_PL_73_VAL (0x2 << 9)
308 #define PMX_SPP_PL_73_VAL (0x3 << 9) 308 #define PMX_SPP_PL_73_VAL (0x3 << 9)
309 #define PMX_UART3_PL_73_VAL (0x4 << 9) 309 #define PMX_UART3_PL_73_VAL (0x4 << 9)
310 310
311 #define PMX_PL_74_MASK (0x7 << 12) 311 #define PMX_PL_74_MASK (0x7 << 12)
312 #define PMX_CLCD_PL_74_VAL (0) 312 #define PMX_CLCD_PL_74_VAL (0)
313 #define PMX_EMI_PL_74_VAL (0x2 << 12) 313 #define PMX_EMI_PL_74_VAL (0x2 << 12)
314 #define PMX_SPP_PL_74_VAL (0x3 << 12) 314 #define PMX_SPP_PL_74_VAL (0x3 << 12)
315 #define PMX_UART3_PL_74_VAL (0x4 << 12) 315 #define PMX_UART3_PL_74_VAL (0x4 << 12)
316 316
317 #define PMX_PL_75_76_MASK (0x3F << 15) 317 #define PMX_PL_75_76_MASK (0x3F << 15)
318 #define PMX_CLCD_PL_75_76_VAL (0) 318 #define PMX_CLCD_PL_75_76_VAL (0)
319 #define PMX_EMI_PL_75_76_VAL ((0x2 << 15) | (0x2 << 18)) 319 #define PMX_EMI_PL_75_76_VAL ((0x2 << 15) | (0x2 << 18))
320 #define PMX_SPP_PL_75_76_VAL ((0x3 << 15) | (0x3 << 18)) 320 #define PMX_SPP_PL_75_76_VAL ((0x3 << 15) | (0x3 << 18))
321 #define PMX_I2C2_PL_75_76_VAL ((0x4 << 15) | (0x4 << 18)) 321 #define PMX_I2C2_PL_75_76_VAL ((0x4 << 15) | (0x4 << 18))
322 322
323 #define PMX_PL_77_78_79_MASK (0x1FF << 21) 323 #define PMX_PL_77_78_79_MASK (0x1FF << 21)
324 #define PMX_CLCD_PL_77_78_79_VAL (0) 324 #define PMX_CLCD_PL_77_78_79_VAL (0)
325 #define PMX_EMI_PL_77_78_79_VAL ((0x2 << 21) | (0x2 << 24) | (0x2 << 27)) 325 #define PMX_EMI_PL_77_78_79_VAL ((0x2 << 21) | (0x2 << 24) | (0x2 << 27))
326 #define PMX_SPP_PL_77_78_79_VAL ((0x3 << 21) | (0x3 << 24) | (0x3 << 27)) 326 #define PMX_SPP_PL_77_78_79_VAL ((0x3 << 21) | (0x3 << 24) | (0x3 << 27))
327 #define PMX_RS485_PL_77_78_79_VAL ((0x4 << 21) | (0x4 << 24) | (0x4 << 27)) 327 #define PMX_RS485_PL_77_78_79_VAL ((0x4 << 21) | (0x4 << 24) | (0x4 << 27))
328 328
329 #define IP_SEL_PAD_80_89_REG 0x00C4 329 #define IP_SEL_PAD_80_89_REG 0x00C4
330 #define PMX_PL_80_TO_85_MASK (0x3FFFF << 0) 330 #define PMX_PL_80_TO_85_MASK (0x3FFFF << 0)
331 #define PMX_CLCD_PL_80_TO_85_VAL 0 331 #define PMX_CLCD_PL_80_TO_85_VAL 0
332 #define PMX_MII2_PL_80_TO_85_VAL ((0x1 << 0) | (0x1 << 3) | (0x1 << 6) | (0x1 << 9) | (0x1 << 12) | (0x1 << 15)) 332 #define PMX_MII2_PL_80_TO_85_VAL ((0x1 << 0) | (0x1 << 3) | (0x1 << 6) | (0x1 << 9) | (0x1 << 12) | (0x1 << 15))
333 #define PMX_EMI_PL_80_TO_85_VAL ((0x2 << 0) | (0x2 << 3) | (0x2 << 6) | (0x2 << 9) | (0x2 << 12) | (0x2 << 15)) 333 #define PMX_EMI_PL_80_TO_85_VAL ((0x2 << 0) | (0x2 << 3) | (0x2 << 6) | (0x2 << 9) | (0x2 << 12) | (0x2 << 15))
334 #define PMX_SPP_PL_80_TO_85_VAL ((0x3 << 0) | (0x3 << 3) | (0x3 << 6) | (0x3 << 9) | (0x3 << 12) | (0x3 << 15)) 334 #define PMX_SPP_PL_80_TO_85_VAL ((0x3 << 0) | (0x3 << 3) | (0x3 << 6) | (0x3 << 9) | (0x3 << 12) | (0x3 << 15))
335 #define PMX_UART1_ENH_PL_80_TO_85_VAL ((0x4 << 0) | (0x4 << 3) | (0x4 << 6) | (0x4 << 9) | (0x4 << 12) | (0x4 << 15)) 335 #define PMX_UART1_ENH_PL_80_TO_85_VAL ((0x4 << 0) | (0x4 << 3) | (0x4 << 6) | (0x4 << 9) | (0x4 << 12) | (0x4 << 15))
336 336
337 #define PMX_PL_86_87_MASK (0x3F << 18) 337 #define PMX_PL_86_87_MASK (0x3F << 18)
338 #define PMX_PL_86_MASK (0x7 << 18) 338 #define PMX_PL_86_MASK (0x7 << 18)
339 #define PMX_PL_87_MASK (0x7 << 21) 339 #define PMX_PL_87_MASK (0x7 << 21)
340 #define PMX_CLCD_PL_86_87_VAL 0 340 #define PMX_CLCD_PL_86_87_VAL 0
341 #define PMX_MII2_PL_86_87_VAL ((0x1 << 18) | (0x1 << 21)) 341 #define PMX_MII2_PL_86_87_VAL ((0x1 << 18) | (0x1 << 21))
342 #define PMX_EMI_PL_86_87_VAL ((0x2 << 18) | (0x2 << 21)) 342 #define PMX_EMI_PL_86_87_VAL ((0x2 << 18) | (0x2 << 21))
343 #define PMX_PWM3_PL_86_VAL (0x4 << 18) 343 #define PMX_PWM3_PL_86_VAL (0x4 << 18)
344 #define PMX_PWM2_PL_87_VAL (0x4 << 21) 344 #define PMX_PWM2_PL_87_VAL (0x4 << 21)
345 345
346 #define PMX_PL_88_89_MASK (0x3F << 24) 346 #define PMX_PL_88_89_MASK (0x3F << 24)
347 #define PMX_CLCD_PL_88_89_VAL 0 347 #define PMX_CLCD_PL_88_89_VAL 0
348 #define PMX_MII2_PL_88_89_VAL ((0x1 << 24) | (0x1 << 27)) 348 #define PMX_MII2_PL_88_89_VAL ((0x1 << 24) | (0x1 << 27))
349 #define PMX_EMI_PL_88_89_VAL ((0x2 << 24) | (0x2 << 27)) 349 #define PMX_EMI_PL_88_89_VAL ((0x2 << 24) | (0x2 << 27))
350 #define PMX_UART6_PL_88_89_VAL ((0x3 << 24) | (0x3 << 27)) 350 #define PMX_UART6_PL_88_89_VAL ((0x3 << 24) | (0x3 << 27))
351 #define PMX_PWM0_1_PL_88_89_VAL ((0x4 << 24) | (0x4 << 27)) 351 #define PMX_PWM0_1_PL_88_89_VAL ((0x4 << 24) | (0x4 << 27))
352 352
353 #define IP_SEL_PAD_90_99_REG 0x00C8 353 #define IP_SEL_PAD_90_99_REG 0x00C8
354 #define PMX_PL_90_91_MASK (0x3F << 0) 354 #define PMX_PL_90_91_MASK (0x3F << 0)
355 #define PMX_CLCD_PL_90_91_VAL 0 355 #define PMX_CLCD_PL_90_91_VAL 0
356 #define PMX_MII2_PL_90_91_VAL ((0x1 << 0) | (0x1 << 3)) 356 #define PMX_MII2_PL_90_91_VAL ((0x1 << 0) | (0x1 << 3))
357 #define PMX_EMI1_PL_90_91_VAL ((0x2 << 0) | (0x2 << 3)) 357 #define PMX_EMI1_PL_90_91_VAL ((0x2 << 0) | (0x2 << 3))
358 #define PMX_UART5_PL_90_91_VAL ((0x3 << 0) | (0x3 << 3)) 358 #define PMX_UART5_PL_90_91_VAL ((0x3 << 0) | (0x3 << 3))
359 #define PMX_SSP2_PL_90_91_VAL ((0x4 << 0) | (0x4 << 3)) 359 #define PMX_SSP2_PL_90_91_VAL ((0x4 << 0) | (0x4 << 3))
360 360
361 #define PMX_PL_92_93_MASK (0x3F << 6) 361 #define PMX_PL_92_93_MASK (0x3F << 6)
362 #define PMX_CLCD_PL_92_93_VAL 0 362 #define PMX_CLCD_PL_92_93_VAL 0
363 #define PMX_MII2_PL_92_93_VAL ((0x1 << 6) | (0x1 << 9)) 363 #define PMX_MII2_PL_92_93_VAL ((0x1 << 6) | (0x1 << 9))
364 #define PMX_EMI1_PL_92_93_VAL ((0x2 << 6) | (0x2 << 9)) 364 #define PMX_EMI1_PL_92_93_VAL ((0x2 << 6) | (0x2 << 9))
365 #define PMX_UART4_PL_92_93_VAL ((0x3 << 6) | (0x3 << 9)) 365 #define PMX_UART4_PL_92_93_VAL ((0x3 << 6) | (0x3 << 9))
366 #define PMX_SSP2_PL_92_93_VAL ((0x4 << 6) | (0x4 << 9)) 366 #define PMX_SSP2_PL_92_93_VAL ((0x4 << 6) | (0x4 << 9))
367 367
368 #define PMX_PL_94_95_MASK (0x3F << 12) 368 #define PMX_PL_94_95_MASK (0x3F << 12)
369 #define PMX_CLCD_PL_94_95_VAL 0 369 #define PMX_CLCD_PL_94_95_VAL 0
370 #define PMX_MII2_PL_94_95_VAL ((0x1 << 12) | (0x1 << 15)) 370 #define PMX_MII2_PL_94_95_VAL ((0x1 << 12) | (0x1 << 15))
371 #define PMX_EMI1_PL_94_95_VAL ((0x2 << 12) | (0x2 << 15)) 371 #define PMX_EMI1_PL_94_95_VAL ((0x2 << 12) | (0x2 << 15))
372 #define PMX_UART3_PL_94_95_VAL ((0x3 << 12) | (0x3 << 15)) 372 #define PMX_UART3_PL_94_95_VAL ((0x3 << 12) | (0x3 << 15))
373 #define PMX_SSP1_PL_94_95_VAL ((0x4 << 12) | (0x4 << 15)) 373 #define PMX_SSP1_PL_94_95_VAL ((0x4 << 12) | (0x4 << 15))
374 374
375 #define PMX_PL_96_97_MASK (0x3F << 18) 375 #define PMX_PL_96_97_MASK (0x3F << 18)
376 #define PMX_CLCD_PL_96_97_VAL 0 376 #define PMX_CLCD_PL_96_97_VAL 0
377 #define PMX_MII2_PL_96_97_VAL ((0x1 << 18) | (0x1 << 21)) 377 #define PMX_MII2_PL_96_97_VAL ((0x1 << 18) | (0x1 << 21))
378 #define PMX_EMI1_PL_96_97_VAL ((0x2 << 18) | (0x2 << 21)) 378 #define PMX_EMI1_PL_96_97_VAL ((0x2 << 18) | (0x2 << 21))
379 #define PMX_I2C2_PL_96_97_VAL ((0x3 << 18) | (0x3 << 21)) 379 #define PMX_I2C2_PL_96_97_VAL ((0x3 << 18) | (0x3 << 21))
380 #define PMX_SSP1_PL_96_97_VAL ((0x4 << 18) | (0x4 << 21)) 380 #define PMX_SSP1_PL_96_97_VAL ((0x4 << 18) | (0x4 << 21))
381 381
382 #define PMX_PL_98_MASK (0x7 << 24) 382 #define PMX_PL_98_MASK (0x7 << 24)
383 #define PMX_CLCD_PL_98_VAL 0 383 #define PMX_CLCD_PL_98_VAL 0
384 #define PMX_I2C1_PL_98_VAL (0x2 << 24) 384 #define PMX_I2C1_PL_98_VAL (0x2 << 24)
385 #define PMX_UART3_PL_98_VAL (0x4 << 24) 385 #define PMX_UART3_PL_98_VAL (0x4 << 24)
386 386
387 #define PMX_PL_99_MASK (0x7 << 27) 387 #define PMX_PL_99_MASK (0x7 << 27)
388 #define PMX_SDHCI_PL_99_VAL 0 388 #define PMX_SDHCI_PL_99_VAL 0
389 #define PMX_I2C1_PL_99_VAL (0x2 << 27) 389 #define PMX_I2C1_PL_99_VAL (0x2 << 27)
390 #define PMX_UART3_PL_99_VAL (0x4 << 27) 390 #define PMX_UART3_PL_99_VAL (0x4 << 27)
391 391
392 #define IP_SEL_MIX_PAD_REG 0x00CC 392 #define IP_SEL_MIX_PAD_REG 0x00CC
393 #define PMX_PL_100_101_MASK (0x3F << 0) 393 #define PMX_PL_100_101_MASK (0x3F << 0)
394 #define PMX_SDHCI_PL_100_101_VAL 0 394 #define PMX_SDHCI_PL_100_101_VAL 0
395 #define PMX_UART4_PL_100_101_VAL ((0x4 << 0) | (0x4 << 3)) 395 #define PMX_UART4_PL_100_101_VAL ((0x4 << 0) | (0x4 << 3))
396 396
397 #define PMX_SSP1_PORT_SEL_MASK (0x7 << 8) 397 #define PMX_SSP1_PORT_SEL_MASK (0x7 << 8)
398 #define PMX_SSP1_PORT_94_TO_97_VAL 0 398 #define PMX_SSP1_PORT_94_TO_97_VAL 0
399 #define PMX_SSP1_PORT_65_TO_68_VAL (0x1 << 8) 399 #define PMX_SSP1_PORT_65_TO_68_VAL (0x1 << 8)
400 #define PMX_SSP1_PORT_48_TO_51_VAL (0x2 << 8) 400 #define PMX_SSP1_PORT_48_TO_51_VAL (0x2 << 8)
401 #define PMX_SSP1_PORT_36_TO_39_VAL (0x3 << 8) 401 #define PMX_SSP1_PORT_36_TO_39_VAL (0x3 << 8)
402 #define PMX_SSP1_PORT_17_TO_20_VAL (0x4 << 8) 402 #define PMX_SSP1_PORT_17_TO_20_VAL (0x4 << 8)
403 403
404 #define PMX_SSP2_PORT_SEL_MASK (0x7 << 11) 404 #define PMX_SSP2_PORT_SEL_MASK (0x7 << 11)
405 #define PMX_SSP2_PORT_90_TO_93_VAL 0 405 #define PMX_SSP2_PORT_90_TO_93_VAL 0
406 #define PMX_SSP2_PORT_61_TO_64_VAL (0x1 << 11) 406 #define PMX_SSP2_PORT_61_TO_64_VAL (0x1 << 11)
407 #define PMX_SSP2_PORT_44_TO_47_VAL (0x2 << 11) 407 #define PMX_SSP2_PORT_44_TO_47_VAL (0x2 << 11)
408 #define PMX_SSP2_PORT_32_TO_35_VAL (0x3 << 11) 408 #define PMX_SSP2_PORT_32_TO_35_VAL (0x3 << 11)
409 #define PMX_SSP2_PORT_13_TO_16_VAL (0x4 << 11) 409 #define PMX_SSP2_PORT_13_TO_16_VAL (0x4 << 11)
410 410
411 #define PMX_UART1_ENH_PORT_SEL_MASK (0x3 << 14) 411 #define PMX_UART1_ENH_PORT_SEL_MASK (0x3 << 14)
412 #define PMX_UART1_ENH_PORT_81_TO_85_VAL 0 412 #define PMX_UART1_ENH_PORT_81_TO_85_VAL 0
413 #define PMX_UART1_ENH_PORT_44_45_34_36_VAL (0x1 << 14) 413 #define PMX_UART1_ENH_PORT_44_45_34_36_VAL (0x1 << 14)
414 #define PMX_UART1_ENH_PORT_32_TO_34_36_VAL (0x2 << 14) 414 #define PMX_UART1_ENH_PORT_32_TO_34_36_VAL (0x2 << 14)
415 #define PMX_UART1_ENH_PORT_3_TO_5_7_VAL (0x3 << 14) 415 #define PMX_UART1_ENH_PORT_3_TO_5_7_VAL (0x3 << 14)
416 416
417 #define PMX_UART3_PORT_SEL_MASK (0x7 << 16) 417 #define PMX_UART3_PORT_SEL_MASK (0x7 << 16)
418 #define PMX_UART3_PORT_94_VAL 0 418 #define PMX_UART3_PORT_94_VAL 0
419 #define PMX_UART3_PORT_73_VAL (0x1 << 16) 419 #define PMX_UART3_PORT_73_VAL (0x1 << 16)
420 #define PMX_UART3_PORT_52_VAL (0x2 << 16) 420 #define PMX_UART3_PORT_52_VAL (0x2 << 16)
421 #define PMX_UART3_PORT_41_VAL (0x3 << 16) 421 #define PMX_UART3_PORT_41_VAL (0x3 << 16)
422 #define PMX_UART3_PORT_15_VAL (0x4 << 16) 422 #define PMX_UART3_PORT_15_VAL (0x4 << 16)
423 #define PMX_UART3_PORT_8_VAL (0x5 << 16) 423 #define PMX_UART3_PORT_8_VAL (0x5 << 16)
424 #define PMX_UART3_PORT_99_VAL (0x6 << 16) 424 #define PMX_UART3_PORT_99_VAL (0x6 << 16)
425 425
426 #define PMX_UART4_PORT_SEL_MASK (0x7 << 19) 426 #define PMX_UART4_PORT_SEL_MASK (0x7 << 19)
427 #define PMX_UART4_PORT_92_VAL 0 427 #define PMX_UART4_PORT_92_VAL 0
428 #define PMX_UART4_PORT_71_VAL (0x1 << 19) 428 #define PMX_UART4_PORT_71_VAL (0x1 << 19)
429 #define PMX_UART4_PORT_39_VAL (0x2 << 19) 429 #define PMX_UART4_PORT_39_VAL (0x2 << 19)
430 #define PMX_UART4_PORT_13_VAL (0x3 << 19) 430 #define PMX_UART4_PORT_13_VAL (0x3 << 19)
431 #define PMX_UART4_PORT_6_VAL (0x4 << 19) 431 #define PMX_UART4_PORT_6_VAL (0x4 << 19)
432 #define PMX_UART4_PORT_101_VAL (0x5 << 19) 432 #define PMX_UART4_PORT_101_VAL (0x5 << 19)
433 433
434 #define PMX_UART5_PORT_SEL_MASK (0x3 << 22) 434 #define PMX_UART5_PORT_SEL_MASK (0x3 << 22)
435 #define PMX_UART5_PORT_90_VAL 0 435 #define PMX_UART5_PORT_90_VAL 0
436 #define PMX_UART5_PORT_69_VAL (0x1 << 22) 436 #define PMX_UART5_PORT_69_VAL (0x1 << 22)
437 #define PMX_UART5_PORT_37_VAL (0x2 << 22) 437 #define PMX_UART5_PORT_37_VAL (0x2 << 22)
438 #define PMX_UART5_PORT_4_VAL (0x3 << 22) 438 #define PMX_UART5_PORT_4_VAL (0x3 << 22)
439 439
440 #define PMX_UART6_PORT_SEL_MASK (0x1 << 24) 440 #define PMX_UART6_PORT_SEL_MASK (0x1 << 24)
441 #define PMX_UART6_PORT_88_VAL 0 441 #define PMX_UART6_PORT_88_VAL 0
442 #define PMX_UART6_PORT_2_VAL (0x1 << 24) 442 #define PMX_UART6_PORT_2_VAL (0x1 << 24)
443 443
444 #define PMX_I2C1_PORT_SEL_MASK (0x1 << 25) 444 #define PMX_I2C1_PORT_SEL_MASK (0x1 << 25)
445 #define PMX_I2C1_PORT_8_9_VAL 0 445 #define PMX_I2C1_PORT_8_9_VAL 0
446 #define PMX_I2C1_PORT_98_99_VAL (0x1 << 25) 446 #define PMX_I2C1_PORT_98_99_VAL (0x1 << 25)
447 447
448 #define PMX_I2C2_PORT_SEL_MASK (0x3 << 26) 448 #define PMX_I2C2_PORT_SEL_MASK (0x3 << 26)
449 #define PMX_I2C2_PORT_96_97_VAL 0 449 #define PMX_I2C2_PORT_96_97_VAL 0
450 #define PMX_I2C2_PORT_75_76_VAL (0x1 << 26) 450 #define PMX_I2C2_PORT_75_76_VAL (0x1 << 26)
451 #define PMX_I2C2_PORT_19_20_VAL (0x2 << 26) 451 #define PMX_I2C2_PORT_19_20_VAL (0x2 << 26)
452 #define PMX_I2C2_PORT_2_3_VAL (0x3 << 26) 452 #define PMX_I2C2_PORT_2_3_VAL (0x3 << 26)
453 #define PMX_I2C2_PORT_0_1_VAL (0x4 << 26) 453 #define PMX_I2C2_PORT_0_1_VAL (0x4 << 26)
454 454
455 #define PMX_SDHCI_CD_PORT_SEL_MASK (0x1 << 29) 455 #define PMX_SDHCI_CD_PORT_SEL_MASK (0x1 << 29)
456 #define PMX_SDHCI_CD_PORT_12_VAL 0 456 #define PMX_SDHCI_CD_PORT_12_VAL 0
457 #define PMX_SDHCI_CD_PORT_51_VAL (0x1 << 29) 457 #define PMX_SDHCI_CD_PORT_51_VAL (0x1 << 29)
458 458
459 /* Pad multiplexing for CLCD device */ 459 /* Pad multiplexing for CLCD device */
460 static const unsigned clcd_pins[] = { 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 460 static const unsigned clcd_pins[] = { 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
461 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 461 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
462 97 }; 462 97 };
463 static struct spear_muxreg clcd_muxreg[] = { 463 static struct spear_muxreg clcd_muxreg[] = {
464 { 464 {
465 .reg = IP_SEL_PAD_60_69_REG, 465 .reg = IP_SEL_PAD_60_69_REG,
466 .mask = PMX_PL_69_MASK, 466 .mask = PMX_PL_69_MASK,
467 .val = PMX_CLCD_PL_69_VAL, 467 .val = PMX_CLCD_PL_69_VAL,
468 }, { 468 }, {
469 .reg = IP_SEL_PAD_70_79_REG, 469 .reg = IP_SEL_PAD_70_79_REG,
470 .mask = PMX_PL_70_MASK | PMX_PL_71_72_MASK | PMX_PL_73_MASK | 470 .mask = PMX_PL_70_MASK | PMX_PL_71_72_MASK | PMX_PL_73_MASK |
471 PMX_PL_74_MASK | PMX_PL_75_76_MASK | 471 PMX_PL_74_MASK | PMX_PL_75_76_MASK |
472 PMX_PL_77_78_79_MASK, 472 PMX_PL_77_78_79_MASK,
473 .val = PMX_CLCD_PL_70_VAL | PMX_CLCD_PL_71_72_VAL | 473 .val = PMX_CLCD_PL_70_VAL | PMX_CLCD_PL_71_72_VAL |
474 PMX_CLCD_PL_73_VAL | PMX_CLCD_PL_74_VAL | 474 PMX_CLCD_PL_73_VAL | PMX_CLCD_PL_74_VAL |
475 PMX_CLCD_PL_75_76_VAL | PMX_CLCD_PL_77_78_79_VAL, 475 PMX_CLCD_PL_75_76_VAL | PMX_CLCD_PL_77_78_79_VAL,
476 }, { 476 }, {
477 .reg = IP_SEL_PAD_80_89_REG, 477 .reg = IP_SEL_PAD_80_89_REG,
478 .mask = PMX_PL_80_TO_85_MASK | PMX_PL_86_87_MASK | 478 .mask = PMX_PL_80_TO_85_MASK | PMX_PL_86_87_MASK |
479 PMX_PL_88_89_MASK, 479 PMX_PL_88_89_MASK,
480 .val = PMX_CLCD_PL_80_TO_85_VAL | PMX_CLCD_PL_86_87_VAL | 480 .val = PMX_CLCD_PL_80_TO_85_VAL | PMX_CLCD_PL_86_87_VAL |
481 PMX_CLCD_PL_88_89_VAL, 481 PMX_CLCD_PL_88_89_VAL,
482 }, { 482 }, {
483 .reg = IP_SEL_PAD_90_99_REG, 483 .reg = IP_SEL_PAD_90_99_REG,
484 .mask = PMX_PL_90_91_MASK | PMX_PL_92_93_MASK | 484 .mask = PMX_PL_90_91_MASK | PMX_PL_92_93_MASK |
485 PMX_PL_94_95_MASK | PMX_PL_96_97_MASK | PMX_PL_98_MASK, 485 PMX_PL_94_95_MASK | PMX_PL_96_97_MASK | PMX_PL_98_MASK,
486 .val = PMX_CLCD_PL_90_91_VAL | PMX_CLCD_PL_92_93_VAL | 486 .val = PMX_CLCD_PL_90_91_VAL | PMX_CLCD_PL_92_93_VAL |
487 PMX_CLCD_PL_94_95_VAL | PMX_CLCD_PL_96_97_VAL | 487 PMX_CLCD_PL_94_95_VAL | PMX_CLCD_PL_96_97_VAL |
488 PMX_CLCD_PL_98_VAL, 488 PMX_CLCD_PL_98_VAL,
489 }, 489 },
490 }; 490 };
491 491
492 static struct spear_modemux clcd_modemux[] = { 492 static struct spear_modemux clcd_modemux[] = {
493 { 493 {
494 .modes = EXTENDED_MODE, 494 .modes = EXTENDED_MODE,
495 .muxregs = clcd_muxreg, 495 .muxregs = clcd_muxreg,
496 .nmuxregs = ARRAY_SIZE(clcd_muxreg), 496 .nmuxregs = ARRAY_SIZE(clcd_muxreg),
497 }, 497 },
498 }; 498 };
499 499
500 static struct spear_pingroup clcd_pingroup = { 500 static struct spear_pingroup clcd_pingroup = {
501 .name = "clcd_grp", 501 .name = "clcd_grp",
502 .pins = clcd_pins, 502 .pins = clcd_pins,
503 .npins = ARRAY_SIZE(clcd_pins), 503 .npins = ARRAY_SIZE(clcd_pins),
504 .modemuxs = clcd_modemux, 504 .modemuxs = clcd_modemux,
505 .nmodemuxs = ARRAY_SIZE(clcd_modemux), 505 .nmodemuxs = ARRAY_SIZE(clcd_modemux),
506 }; 506 };
507 507
508 static const char *const clcd_grps[] = { "clcd_grp" }; 508 static const char *const clcd_grps[] = { "clcd_grp" };
509 static struct spear_function clcd_function = { 509 static struct spear_function clcd_function = {
510 .name = "clcd", 510 .name = "clcd",
511 .groups = clcd_grps, 511 .groups = clcd_grps,
512 .ngroups = ARRAY_SIZE(clcd_grps), 512 .ngroups = ARRAY_SIZE(clcd_grps),
513 }; 513 };
514 514
515 /* Pad multiplexing for EMI (Parallel NOR flash) device */ 515 /* Pad multiplexing for EMI (Parallel NOR flash) device */
516 static const unsigned emi_pins[] = { 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 516 static const unsigned emi_pins[] = { 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
517 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 517 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
518 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 518 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
519 93, 94, 95, 96, 97 }; 519 93, 94, 95, 96, 97 };
520 static struct spear_muxreg emi_muxreg[] = { 520 static struct spear_muxreg emi_muxreg[] = {
521 { 521 {
522 .reg = PMX_CONFIG_REG, 522 .reg = PMX_CONFIG_REG,
523 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK, 523 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK,
524 .val = 0, 524 .val = 0,
525 }, 525 },
526 }; 526 };
527 527
528 static struct spear_muxreg emi_ext_muxreg[] = { 528 static struct spear_muxreg emi_ext_muxreg[] = {
529 { 529 {
530 .reg = IP_SEL_PAD_40_49_REG, 530 .reg = IP_SEL_PAD_40_49_REG,
531 .mask = PMX_PL_46_47_MASK | PMX_PL_48_49_MASK, 531 .mask = PMX_PL_46_47_MASK | PMX_PL_48_49_MASK,
532 .val = PMX_FSMC_EMI_PL_46_47_VAL | PMX_FSMC_EMI_PL_48_49_VAL, 532 .val = PMX_FSMC_EMI_PL_46_47_VAL | PMX_FSMC_EMI_PL_48_49_VAL,
533 }, { 533 }, {
534 .reg = IP_SEL_PAD_50_59_REG, 534 .reg = IP_SEL_PAD_50_59_REG,
535 .mask = PMX_PL_50_51_MASK | PMX_PL_52_53_MASK | 535 .mask = PMX_PL_50_51_MASK | PMX_PL_52_53_MASK |
536 PMX_PL_54_55_56_MASK | PMX_PL_58_59_MASK, 536 PMX_PL_54_55_56_MASK | PMX_PL_58_59_MASK,
537 .val = PMX_EMI_PL_50_51_VAL | PMX_EMI_PL_52_53_VAL | 537 .val = PMX_EMI_PL_50_51_VAL | PMX_EMI_PL_52_53_VAL |
538 PMX_FSMC_EMI_PL_54_55_56_VAL | 538 PMX_FSMC_EMI_PL_54_55_56_VAL |
539 PMX_FSMC_EMI_PL_58_59_VAL, 539 PMX_FSMC_EMI_PL_58_59_VAL,
540 }, { 540 }, {
541 .reg = IP_SEL_PAD_60_69_REG, 541 .reg = IP_SEL_PAD_60_69_REG,
542 .mask = PMX_PL_69_MASK, 542 .mask = PMX_PL_69_MASK,
543 .val = PMX_EMI_PL_69_VAL, 543 .val = PMX_EMI_PL_69_VAL,
544 }, { 544 }, {
545 .reg = IP_SEL_PAD_70_79_REG, 545 .reg = IP_SEL_PAD_70_79_REG,
546 .mask = PMX_PL_70_MASK | PMX_PL_71_72_MASK | PMX_PL_73_MASK | 546 .mask = PMX_PL_70_MASK | PMX_PL_71_72_MASK | PMX_PL_73_MASK |
547 PMX_PL_74_MASK | PMX_PL_75_76_MASK | 547 PMX_PL_74_MASK | PMX_PL_75_76_MASK |
548 PMX_PL_77_78_79_MASK, 548 PMX_PL_77_78_79_MASK,
549 .val = PMX_FSMC_EMI_PL_70_VAL | PMX_FSMC_EMI_PL_71_72_VAL | 549 .val = PMX_FSMC_EMI_PL_70_VAL | PMX_FSMC_EMI_PL_71_72_VAL |
550 PMX_FSMC_EMI_PL_73_VAL | PMX_EMI_PL_74_VAL | 550 PMX_FSMC_EMI_PL_73_VAL | PMX_EMI_PL_74_VAL |
551 PMX_EMI_PL_75_76_VAL | PMX_EMI_PL_77_78_79_VAL, 551 PMX_EMI_PL_75_76_VAL | PMX_EMI_PL_77_78_79_VAL,
552 }, { 552 }, {
553 .reg = IP_SEL_PAD_80_89_REG, 553 .reg = IP_SEL_PAD_80_89_REG,
554 .mask = PMX_PL_80_TO_85_MASK | PMX_PL_86_87_MASK | 554 .mask = PMX_PL_80_TO_85_MASK | PMX_PL_86_87_MASK |
555 PMX_PL_88_89_MASK, 555 PMX_PL_88_89_MASK,
556 .val = PMX_EMI_PL_80_TO_85_VAL | PMX_EMI_PL_86_87_VAL | 556 .val = PMX_EMI_PL_80_TO_85_VAL | PMX_EMI_PL_86_87_VAL |
557 PMX_EMI_PL_88_89_VAL, 557 PMX_EMI_PL_88_89_VAL,
558 }, { 558 }, {
559 .reg = IP_SEL_PAD_90_99_REG, 559 .reg = IP_SEL_PAD_90_99_REG,
560 .mask = PMX_PL_90_91_MASK | PMX_PL_92_93_MASK | 560 .mask = PMX_PL_90_91_MASK | PMX_PL_92_93_MASK |
561 PMX_PL_94_95_MASK | PMX_PL_96_97_MASK, 561 PMX_PL_94_95_MASK | PMX_PL_96_97_MASK,
562 .val = PMX_EMI1_PL_90_91_VAL | PMX_EMI1_PL_92_93_VAL | 562 .val = PMX_EMI1_PL_90_91_VAL | PMX_EMI1_PL_92_93_VAL |
563 PMX_EMI1_PL_94_95_VAL | PMX_EMI1_PL_96_97_VAL, 563 PMX_EMI1_PL_94_95_VAL | PMX_EMI1_PL_96_97_VAL,
564 }, { 564 }, {
565 .reg = EXT_CTRL_REG, 565 .reg = EXT_CTRL_REG,
566 .mask = EMI_FSMC_DYNAMIC_MUX_MASK, 566 .mask = EMI_FSMC_DYNAMIC_MUX_MASK,
567 .val = EMI_FSMC_DYNAMIC_MUX_MASK, 567 .val = EMI_FSMC_DYNAMIC_MUX_MASK,
568 }, 568 },
569 }; 569 };
570 570
571 static struct spear_modemux emi_modemux[] = { 571 static struct spear_modemux emi_modemux[] = {
572 { 572 {
573 .modes = AUTO_EXP_MODE | EXTENDED_MODE, 573 .modes = AUTO_EXP_MODE | EXTENDED_MODE,
574 .muxregs = emi_muxreg, 574 .muxregs = emi_muxreg,
575 .nmuxregs = ARRAY_SIZE(emi_muxreg), 575 .nmuxregs = ARRAY_SIZE(emi_muxreg),
576 }, { 576 }, {
577 .modes = EXTENDED_MODE, 577 .modes = EXTENDED_MODE,
578 .muxregs = emi_ext_muxreg, 578 .muxregs = emi_ext_muxreg,
579 .nmuxregs = ARRAY_SIZE(emi_ext_muxreg), 579 .nmuxregs = ARRAY_SIZE(emi_ext_muxreg),
580 }, 580 },
581 }; 581 };
582 582
583 static struct spear_pingroup emi_pingroup = { 583 static struct spear_pingroup emi_pingroup = {
584 .name = "emi_grp", 584 .name = "emi_grp",
585 .pins = emi_pins, 585 .pins = emi_pins,
586 .npins = ARRAY_SIZE(emi_pins), 586 .npins = ARRAY_SIZE(emi_pins),
587 .modemuxs = emi_modemux, 587 .modemuxs = emi_modemux,
588 .nmodemuxs = ARRAY_SIZE(emi_modemux), 588 .nmodemuxs = ARRAY_SIZE(emi_modemux),
589 }; 589 };
590 590
591 static const char *const emi_grps[] = { "emi_grp" }; 591 static const char *const emi_grps[] = { "emi_grp" };
592 static struct spear_function emi_function = { 592 static struct spear_function emi_function = {
593 .name = "emi", 593 .name = "emi",
594 .groups = emi_grps, 594 .groups = emi_grps,
595 .ngroups = ARRAY_SIZE(emi_grps), 595 .ngroups = ARRAY_SIZE(emi_grps),
596 }; 596 };
597 597
598 /* Pad multiplexing for FSMC (NAND flash) device */ 598 /* Pad multiplexing for FSMC (NAND flash) device */
599 static const unsigned fsmc_8bit_pins[] = { 52, 53, 54, 55, 56, 57, 58, 59, 60, 599 static const unsigned fsmc_8bit_pins[] = { 52, 53, 54, 55, 56, 57, 58, 59, 60,
600 61, 62, 63, 64, 65, 66, 67, 68 }; 600 61, 62, 63, 64, 65, 66, 67, 68 };
601 static struct spear_muxreg fsmc_8bit_muxreg[] = { 601 static struct spear_muxreg fsmc_8bit_muxreg[] = {
602 { 602 {
603 .reg = IP_SEL_PAD_50_59_REG, 603 .reg = IP_SEL_PAD_50_59_REG,
604 .mask = PMX_PL_52_53_MASK | PMX_PL_54_55_56_MASK | 604 .mask = PMX_PL_52_53_MASK | PMX_PL_54_55_56_MASK |
605 PMX_PL_57_MASK | PMX_PL_58_59_MASK, 605 PMX_PL_57_MASK | PMX_PL_58_59_MASK,
606 .val = PMX_FSMC_PL_52_53_VAL | PMX_FSMC_EMI_PL_54_55_56_VAL | 606 .val = PMX_FSMC_PL_52_53_VAL | PMX_FSMC_EMI_PL_54_55_56_VAL |
607 PMX_FSMC_PL_57_VAL | PMX_FSMC_EMI_PL_58_59_VAL, 607 PMX_FSMC_PL_57_VAL | PMX_FSMC_EMI_PL_58_59_VAL,
608 }, { 608 }, {
609 .reg = IP_SEL_PAD_60_69_REG, 609 .reg = IP_SEL_PAD_60_69_REG,
610 .mask = PMX_PL_60_MASK | PMX_PL_61_TO_64_MASK | 610 .mask = PMX_PL_60_MASK | PMX_PL_61_TO_64_MASK |
611 PMX_PL_65_TO_68_MASK, 611 PMX_PL_65_TO_68_MASK,
612 .val = PMX_FSMC_PL_60_VAL | PMX_FSMC_PL_61_TO_64_VAL | 612 .val = PMX_FSMC_PL_60_VAL | PMX_FSMC_PL_61_TO_64_VAL |
613 PMX_FSMC_PL_65_TO_68_VAL, 613 PMX_FSMC_PL_65_TO_68_VAL,
614 }, { 614 }, {
615 .reg = EXT_CTRL_REG, 615 .reg = EXT_CTRL_REG,
616 .mask = EMI_FSMC_DYNAMIC_MUX_MASK, 616 .mask = EMI_FSMC_DYNAMIC_MUX_MASK,
617 .val = EMI_FSMC_DYNAMIC_MUX_MASK, 617 .val = EMI_FSMC_DYNAMIC_MUX_MASK,
618 }, 618 },
619 }; 619 };
620 620
621 static struct spear_modemux fsmc_8bit_modemux[] = { 621 static struct spear_modemux fsmc_8bit_modemux[] = {
622 { 622 {
623 .modes = EXTENDED_MODE, 623 .modes = EXTENDED_MODE,
624 .muxregs = fsmc_8bit_muxreg, 624 .muxregs = fsmc_8bit_muxreg,
625 .nmuxregs = ARRAY_SIZE(fsmc_8bit_muxreg), 625 .nmuxregs = ARRAY_SIZE(fsmc_8bit_muxreg),
626 }, 626 },
627 }; 627 };
628 628
629 static struct spear_pingroup fsmc_8bit_pingroup = { 629 static struct spear_pingroup fsmc_8bit_pingroup = {
630 .name = "fsmc_8bit_grp", 630 .name = "fsmc_8bit_grp",
631 .pins = fsmc_8bit_pins, 631 .pins = fsmc_8bit_pins,
632 .npins = ARRAY_SIZE(fsmc_8bit_pins), 632 .npins = ARRAY_SIZE(fsmc_8bit_pins),
633 .modemuxs = fsmc_8bit_modemux, 633 .modemuxs = fsmc_8bit_modemux,
634 .nmodemuxs = ARRAY_SIZE(fsmc_8bit_modemux), 634 .nmodemuxs = ARRAY_SIZE(fsmc_8bit_modemux),
635 }; 635 };
636 636
637 static const unsigned fsmc_16bit_pins[] = { 46, 47, 48, 49, 52, 53, 54, 55, 56, 637 static const unsigned fsmc_16bit_pins[] = { 46, 47, 48, 49, 52, 53, 54, 55, 56,
638 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 71, 72, 73 }; 638 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 71, 72, 73 };
639 static struct spear_muxreg fsmc_16bit_autoexp_muxreg[] = { 639 static struct spear_muxreg fsmc_16bit_autoexp_muxreg[] = {
640 { 640 {
641 .reg = PMX_CONFIG_REG, 641 .reg = PMX_CONFIG_REG,
642 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK, 642 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK,
643 .val = 0, 643 .val = 0,
644 }, 644 },
645 }; 645 };
646 646
647 static struct spear_muxreg fsmc_16bit_muxreg[] = { 647 static struct spear_muxreg fsmc_16bit_muxreg[] = {
648 { 648 {
649 .reg = IP_SEL_PAD_40_49_REG, 649 .reg = IP_SEL_PAD_40_49_REG,
650 .mask = PMX_PL_46_47_MASK | PMX_PL_48_49_MASK, 650 .mask = PMX_PL_46_47_MASK | PMX_PL_48_49_MASK,
651 .val = PMX_FSMC_EMI_PL_46_47_VAL | PMX_FSMC_EMI_PL_48_49_VAL, 651 .val = PMX_FSMC_EMI_PL_46_47_VAL | PMX_FSMC_EMI_PL_48_49_VAL,
652 }, { 652 }, {
653 .reg = IP_SEL_PAD_70_79_REG, 653 .reg = IP_SEL_PAD_70_79_REG,
654 .mask = PMX_PL_70_MASK | PMX_PL_71_72_MASK | PMX_PL_73_MASK, 654 .mask = PMX_PL_70_MASK | PMX_PL_71_72_MASK | PMX_PL_73_MASK,
655 .val = PMX_FSMC_EMI_PL_70_VAL | PMX_FSMC_EMI_PL_71_72_VAL | 655 .val = PMX_FSMC_EMI_PL_70_VAL | PMX_FSMC_EMI_PL_71_72_VAL |
656 PMX_FSMC_EMI_PL_73_VAL, 656 PMX_FSMC_EMI_PL_73_VAL,
657 } 657 }
658 }; 658 };
659 659
660 static struct spear_modemux fsmc_16bit_modemux[] = { 660 static struct spear_modemux fsmc_16bit_modemux[] = {
661 { 661 {
662 .modes = EXTENDED_MODE, 662 .modes = EXTENDED_MODE,
663 .muxregs = fsmc_8bit_muxreg, 663 .muxregs = fsmc_8bit_muxreg,
664 .nmuxregs = ARRAY_SIZE(fsmc_8bit_muxreg), 664 .nmuxregs = ARRAY_SIZE(fsmc_8bit_muxreg),
665 }, { 665 }, {
666 .modes = AUTO_EXP_MODE | EXTENDED_MODE, 666 .modes = AUTO_EXP_MODE | EXTENDED_MODE,
667 .muxregs = fsmc_16bit_autoexp_muxreg, 667 .muxregs = fsmc_16bit_autoexp_muxreg,
668 .nmuxregs = ARRAY_SIZE(fsmc_16bit_autoexp_muxreg), 668 .nmuxregs = ARRAY_SIZE(fsmc_16bit_autoexp_muxreg),
669 }, { 669 }, {
670 .modes = EXTENDED_MODE, 670 .modes = EXTENDED_MODE,
671 .muxregs = fsmc_16bit_muxreg, 671 .muxregs = fsmc_16bit_muxreg,
672 .nmuxregs = ARRAY_SIZE(fsmc_16bit_muxreg), 672 .nmuxregs = ARRAY_SIZE(fsmc_16bit_muxreg),
673 }, 673 },
674 }; 674 };
675 675
676 static struct spear_pingroup fsmc_16bit_pingroup = { 676 static struct spear_pingroup fsmc_16bit_pingroup = {
677 .name = "fsmc_16bit_grp", 677 .name = "fsmc_16bit_grp",
678 .pins = fsmc_16bit_pins, 678 .pins = fsmc_16bit_pins,
679 .npins = ARRAY_SIZE(fsmc_16bit_pins), 679 .npins = ARRAY_SIZE(fsmc_16bit_pins),
680 .modemuxs = fsmc_16bit_modemux, 680 .modemuxs = fsmc_16bit_modemux,
681 .nmodemuxs = ARRAY_SIZE(fsmc_16bit_modemux), 681 .nmodemuxs = ARRAY_SIZE(fsmc_16bit_modemux),
682 }; 682 };
683 683
684 static const char *const fsmc_grps[] = { "fsmc_8bit_grp", "fsmc_16bit_grp" }; 684 static const char *const fsmc_grps[] = { "fsmc_8bit_grp", "fsmc_16bit_grp" };
685 static struct spear_function fsmc_function = { 685 static struct spear_function fsmc_function = {
686 .name = "fsmc", 686 .name = "fsmc",
687 .groups = fsmc_grps, 687 .groups = fsmc_grps,
688 .ngroups = ARRAY_SIZE(fsmc_grps), 688 .ngroups = ARRAY_SIZE(fsmc_grps),
689 }; 689 };
690 690
691 /* Pad multiplexing for SPP device */ 691 /* Pad multiplexing for SPP device */
692 static const unsigned spp_pins[] = { 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 692 static const unsigned spp_pins[] = { 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
693 80, 81, 82, 83, 84, 85 }; 693 80, 81, 82, 83, 84, 85 };
694 static struct spear_muxreg spp_muxreg[] = { 694 static struct spear_muxreg spp_muxreg[] = {
695 { 695 {
696 .reg = IP_SEL_PAD_60_69_REG, 696 .reg = IP_SEL_PAD_60_69_REG,
697 .mask = PMX_PL_69_MASK, 697 .mask = PMX_PL_69_MASK,
698 .val = PMX_SPP_PL_69_VAL, 698 .val = PMX_SPP_PL_69_VAL,
699 }, { 699 }, {
700 .reg = IP_SEL_PAD_70_79_REG, 700 .reg = IP_SEL_PAD_70_79_REG,
701 .mask = PMX_PL_70_MASK | PMX_PL_71_72_MASK | PMX_PL_73_MASK | 701 .mask = PMX_PL_70_MASK | PMX_PL_71_72_MASK | PMX_PL_73_MASK |
702 PMX_PL_74_MASK | PMX_PL_75_76_MASK | 702 PMX_PL_74_MASK | PMX_PL_75_76_MASK |
703 PMX_PL_77_78_79_MASK, 703 PMX_PL_77_78_79_MASK,
704 .val = PMX_SPP_PL_70_VAL | PMX_SPP_PL_71_72_VAL | 704 .val = PMX_SPP_PL_70_VAL | PMX_SPP_PL_71_72_VAL |
705 PMX_SPP_PL_73_VAL | PMX_SPP_PL_74_VAL | 705 PMX_SPP_PL_73_VAL | PMX_SPP_PL_74_VAL |
706 PMX_SPP_PL_75_76_VAL | PMX_SPP_PL_77_78_79_VAL, 706 PMX_SPP_PL_75_76_VAL | PMX_SPP_PL_77_78_79_VAL,
707 }, { 707 }, {
708 .reg = IP_SEL_PAD_80_89_REG, 708 .reg = IP_SEL_PAD_80_89_REG,
709 .mask = PMX_PL_80_TO_85_MASK, 709 .mask = PMX_PL_80_TO_85_MASK,
710 .val = PMX_SPP_PL_80_TO_85_VAL, 710 .val = PMX_SPP_PL_80_TO_85_VAL,
711 }, 711 },
712 }; 712 };
713 713
714 static struct spear_modemux spp_modemux[] = { 714 static struct spear_modemux spp_modemux[] = {
715 { 715 {
716 .modes = EXTENDED_MODE, 716 .modes = EXTENDED_MODE,
717 .muxregs = spp_muxreg, 717 .muxregs = spp_muxreg,
718 .nmuxregs = ARRAY_SIZE(spp_muxreg), 718 .nmuxregs = ARRAY_SIZE(spp_muxreg),
719 }, 719 },
720 }; 720 };
721 721
722 static struct spear_pingroup spp_pingroup = { 722 static struct spear_pingroup spp_pingroup = {
723 .name = "spp_grp", 723 .name = "spp_grp",
724 .pins = spp_pins, 724 .pins = spp_pins,
725 .npins = ARRAY_SIZE(spp_pins), 725 .npins = ARRAY_SIZE(spp_pins),
726 .modemuxs = spp_modemux, 726 .modemuxs = spp_modemux,
727 .nmodemuxs = ARRAY_SIZE(spp_modemux), 727 .nmodemuxs = ARRAY_SIZE(spp_modemux),
728 }; 728 };
729 729
730 static const char *const spp_grps[] = { "spp_grp" }; 730 static const char *const spp_grps[] = { "spp_grp" };
731 static struct spear_function spp_function = { 731 static struct spear_function spp_function = {
732 .name = "spp", 732 .name = "spp",
733 .groups = spp_grps, 733 .groups = spp_grps,
734 .ngroups = ARRAY_SIZE(spp_grps), 734 .ngroups = ARRAY_SIZE(spp_grps),
735 }; 735 };
736 736
737 /* Pad multiplexing for SDHCI device */ 737 /* Pad multiplexing for SDHCI device */
738 static const unsigned sdhci_led_pins[] = { 34 }; 738 static const unsigned sdhci_led_pins[] = { 34 };
739 static struct spear_muxreg sdhci_led_muxreg[] = { 739 static struct spear_muxreg sdhci_led_muxreg[] = {
740 { 740 {
741 .reg = PMX_CONFIG_REG, 741 .reg = PMX_CONFIG_REG,
742 .mask = PMX_SSP_CS_MASK, 742 .mask = PMX_SSP_CS_MASK,
743 .val = 0, 743 .val = 0,
744 }, 744 },
745 }; 745 };
746 746
747 static struct spear_muxreg sdhci_led_ext_muxreg[] = { 747 static struct spear_muxreg sdhci_led_ext_muxreg[] = {
748 { 748 {
749 .reg = IP_SEL_PAD_30_39_REG, 749 .reg = IP_SEL_PAD_30_39_REG,
750 .mask = PMX_PL_34_MASK, 750 .mask = PMX_PL_34_MASK,
751 .val = PMX_PWM2_PL_34_VAL, 751 .val = PMX_PWM2_PL_34_VAL,
752 }, 752 },
753 }; 753 };
754 754
755 static struct spear_modemux sdhci_led_modemux[] = { 755 static struct spear_modemux sdhci_led_modemux[] = {
756 { 756 {
757 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | EXTENDED_MODE, 757 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | EXTENDED_MODE,
758 .muxregs = sdhci_led_muxreg, 758 .muxregs = sdhci_led_muxreg,
759 .nmuxregs = ARRAY_SIZE(sdhci_led_muxreg), 759 .nmuxregs = ARRAY_SIZE(sdhci_led_muxreg),
760 }, { 760 }, {
761 .modes = EXTENDED_MODE, 761 .modes = EXTENDED_MODE,
762 .muxregs = sdhci_led_ext_muxreg, 762 .muxregs = sdhci_led_ext_muxreg,
763 .nmuxregs = ARRAY_SIZE(sdhci_led_ext_muxreg), 763 .nmuxregs = ARRAY_SIZE(sdhci_led_ext_muxreg),
764 }, 764 },
765 }; 765 };
766 766
767 static struct spear_pingroup sdhci_led_pingroup = { 767 static struct spear_pingroup sdhci_led_pingroup = {
768 .name = "sdhci_led_grp", 768 .name = "sdhci_led_grp",
769 .pins = sdhci_led_pins, 769 .pins = sdhci_led_pins,
770 .npins = ARRAY_SIZE(sdhci_led_pins), 770 .npins = ARRAY_SIZE(sdhci_led_pins),
771 .modemuxs = sdhci_led_modemux, 771 .modemuxs = sdhci_led_modemux,
772 .nmodemuxs = ARRAY_SIZE(sdhci_led_modemux), 772 .nmodemuxs = ARRAY_SIZE(sdhci_led_modemux),
773 }; 773 };
774 774
775 static const unsigned sdhci_cd_12_pins[] = { 12, 43, 44, 45, 46, 47, 48, 49, 775 static const unsigned sdhci_cd_12_pins[] = { 12, 43, 44, 45, 46, 47, 48, 49,
776 50}; 776 50};
777 static const unsigned sdhci_cd_51_pins[] = { 43, 44, 45, 46, 47, 48, 49, 50, 51 777 static const unsigned sdhci_cd_51_pins[] = { 43, 44, 45, 46, 47, 48, 49, 50, 51
778 }; 778 };
779 static struct spear_muxreg sdhci_muxreg[] = { 779 static struct spear_muxreg sdhci_muxreg[] = {
780 { 780 {
781 .reg = PMX_CONFIG_REG, 781 .reg = PMX_CONFIG_REG,
782 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK, 782 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK,
783 .val = 0, 783 .val = 0,
784 }, 784 },
785 }; 785 };
786 786
787 static struct spear_muxreg sdhci_ext_muxreg[] = { 787 static struct spear_muxreg sdhci_ext_muxreg[] = {
788 { 788 {
789 .reg = IP_SEL_PAD_40_49_REG, 789 .reg = IP_SEL_PAD_40_49_REG,
790 .mask = PMX_PL_43_MASK | PMX_PL_44_45_MASK | PMX_PL_46_47_MASK | 790 .mask = PMX_PL_43_MASK | PMX_PL_44_45_MASK | PMX_PL_46_47_MASK |
791 PMX_PL_48_49_MASK, 791 PMX_PL_48_49_MASK,
792 .val = PMX_SDHCI_PL_43_VAL | PMX_SDHCI_PL_44_45_VAL | 792 .val = PMX_SDHCI_PL_43_VAL | PMX_SDHCI_PL_44_45_VAL |
793 PMX_SDHCI_PL_46_47_VAL | PMX_SDHCI_PL_48_49_VAL, 793 PMX_SDHCI_PL_46_47_VAL | PMX_SDHCI_PL_48_49_VAL,
794 }, { 794 }, {
795 .reg = IP_SEL_PAD_50_59_REG, 795 .reg = IP_SEL_PAD_50_59_REG,
796 .mask = PMX_PL_50_MASK, 796 .mask = PMX_PL_50_MASK,
797 .val = PMX_SDHCI_PL_50_VAL, 797 .val = PMX_SDHCI_PL_50_VAL,
798 }, { 798 }, {
799 .reg = IP_SEL_PAD_90_99_REG, 799 .reg = IP_SEL_PAD_90_99_REG,
800 .mask = PMX_PL_99_MASK, 800 .mask = PMX_PL_99_MASK,
801 .val = PMX_SDHCI_PL_99_VAL, 801 .val = PMX_SDHCI_PL_99_VAL,
802 }, { 802 }, {
803 .reg = IP_SEL_MIX_PAD_REG, 803 .reg = IP_SEL_MIX_PAD_REG,
804 .mask = PMX_PL_100_101_MASK, 804 .mask = PMX_PL_100_101_MASK,
805 .val = PMX_SDHCI_PL_100_101_VAL, 805 .val = PMX_SDHCI_PL_100_101_VAL,
806 }, 806 },
807 }; 807 };
808 808
809 static struct spear_muxreg sdhci_cd_12_muxreg[] = { 809 static struct spear_muxreg sdhci_cd_12_muxreg[] = {
810 { 810 {
811 .reg = PMX_CONFIG_REG, 811 .reg = PMX_CONFIG_REG,
812 .mask = PMX_MII_MASK, 812 .mask = PMX_MII_MASK,
813 .val = 0, 813 .val = 0,
814 }, { 814 }, {
815 .reg = IP_SEL_PAD_10_19_REG, 815 .reg = IP_SEL_PAD_10_19_REG,
816 .mask = PMX_PL_12_MASK, 816 .mask = PMX_PL_12_MASK,
817 .val = PMX_SDHCI_CD_PL_12_VAL, 817 .val = PMX_SDHCI_CD_PL_12_VAL,
818 }, { 818 }, {
819 .reg = IP_SEL_MIX_PAD_REG, 819 .reg = IP_SEL_MIX_PAD_REG,
820 .mask = PMX_SDHCI_CD_PORT_SEL_MASK, 820 .mask = PMX_SDHCI_CD_PORT_SEL_MASK,
821 .val = PMX_SDHCI_CD_PORT_12_VAL, 821 .val = PMX_SDHCI_CD_PORT_12_VAL,
822 }, 822 },
823 }; 823 };
824 824
825 static struct spear_muxreg sdhci_cd_51_muxreg[] = { 825 static struct spear_muxreg sdhci_cd_51_muxreg[] = {
826 { 826 {
827 .reg = IP_SEL_PAD_50_59_REG, 827 .reg = IP_SEL_PAD_50_59_REG,
828 .mask = PMX_PL_51_MASK, 828 .mask = PMX_PL_51_MASK,
829 .val = PMX_SDHCI_CD_PL_51_VAL, 829 .val = PMX_SDHCI_CD_PL_51_VAL,
830 }, { 830 }, {
831 .reg = IP_SEL_MIX_PAD_REG, 831 .reg = IP_SEL_MIX_PAD_REG,
832 .mask = PMX_SDHCI_CD_PORT_SEL_MASK, 832 .mask = PMX_SDHCI_CD_PORT_SEL_MASK,
833 .val = PMX_SDHCI_CD_PORT_51_VAL, 833 .val = PMX_SDHCI_CD_PORT_51_VAL,
834 }, 834 },
835 }; 835 };
836 836
837 #define pmx_sdhci_common_modemux \ 837 #define pmx_sdhci_common_modemux \
838 { \ 838 { \
839 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | \ 839 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | \
840 SMALL_PRINTERS_MODE | EXTENDED_MODE, \ 840 SMALL_PRINTERS_MODE | EXTENDED_MODE, \
841 .muxregs = sdhci_muxreg, \ 841 .muxregs = sdhci_muxreg, \
842 .nmuxregs = ARRAY_SIZE(sdhci_muxreg), \ 842 .nmuxregs = ARRAY_SIZE(sdhci_muxreg), \
843 }, { \ 843 }, { \
844 .modes = EXTENDED_MODE, \ 844 .modes = EXTENDED_MODE, \
845 .muxregs = sdhci_ext_muxreg, \ 845 .muxregs = sdhci_ext_muxreg, \
846 .nmuxregs = ARRAY_SIZE(sdhci_ext_muxreg), \ 846 .nmuxregs = ARRAY_SIZE(sdhci_ext_muxreg), \
847 } 847 }
848 848
849 static struct spear_modemux sdhci_modemux[][3] = { 849 static struct spear_modemux sdhci_modemux[][3] = {
850 { 850 {
851 /* select pin 12 for cd */ 851 /* select pin 12 for cd */
852 pmx_sdhci_common_modemux, 852 pmx_sdhci_common_modemux,
853 { 853 {
854 .modes = EXTENDED_MODE, 854 .modes = EXTENDED_MODE,
855 .muxregs = sdhci_cd_12_muxreg, 855 .muxregs = sdhci_cd_12_muxreg,
856 .nmuxregs = ARRAY_SIZE(sdhci_cd_12_muxreg), 856 .nmuxregs = ARRAY_SIZE(sdhci_cd_12_muxreg),
857 }, 857 },
858 }, { 858 }, {
859 /* select pin 51 for cd */ 859 /* select pin 51 for cd */
860 pmx_sdhci_common_modemux, 860 pmx_sdhci_common_modemux,
861 { 861 {
862 .modes = EXTENDED_MODE, 862 .modes = EXTENDED_MODE,
863 .muxregs = sdhci_cd_51_muxreg, 863 .muxregs = sdhci_cd_51_muxreg,
864 .nmuxregs = ARRAY_SIZE(sdhci_cd_51_muxreg), 864 .nmuxregs = ARRAY_SIZE(sdhci_cd_51_muxreg),
865 }, 865 },
866 } 866 }
867 }; 867 };
868 868
869 static struct spear_pingroup sdhci_pingroup[] = { 869 static struct spear_pingroup sdhci_pingroup[] = {
870 { 870 {
871 .name = "sdhci_cd_12_grp", 871 .name = "sdhci_cd_12_grp",
872 .pins = sdhci_cd_12_pins, 872 .pins = sdhci_cd_12_pins,
873 .npins = ARRAY_SIZE(sdhci_cd_12_pins), 873 .npins = ARRAY_SIZE(sdhci_cd_12_pins),
874 .modemuxs = sdhci_modemux[0], 874 .modemuxs = sdhci_modemux[0],
875 .nmodemuxs = ARRAY_SIZE(sdhci_modemux[0]), 875 .nmodemuxs = ARRAY_SIZE(sdhci_modemux[0]),
876 }, { 876 }, {
877 .name = "sdhci_cd_51_grp", 877 .name = "sdhci_cd_51_grp",
878 .pins = sdhci_cd_51_pins, 878 .pins = sdhci_cd_51_pins,
879 .npins = ARRAY_SIZE(sdhci_cd_51_pins), 879 .npins = ARRAY_SIZE(sdhci_cd_51_pins),
880 .modemuxs = sdhci_modemux[1], 880 .modemuxs = sdhci_modemux[1],
881 .nmodemuxs = ARRAY_SIZE(sdhci_modemux[1]), 881 .nmodemuxs = ARRAY_SIZE(sdhci_modemux[1]),
882 }, 882 },
883 }; 883 };
884 884
885 static const char *const sdhci_grps[] = { "sdhci_cd_12_grp", "sdhci_cd_51_grp", 885 static const char *const sdhci_grps[] = { "sdhci_cd_12_grp", "sdhci_cd_51_grp",
886 "sdhci_led_grp" }; 886 "sdhci_led_grp" };
887 887
888 static struct spear_function sdhci_function = { 888 static struct spear_function sdhci_function = {
889 .name = "sdhci", 889 .name = "sdhci",
890 .groups = sdhci_grps, 890 .groups = sdhci_grps,
891 .ngroups = ARRAY_SIZE(sdhci_grps), 891 .ngroups = ARRAY_SIZE(sdhci_grps),
892 }; 892 };
893 893
894 /* Pad multiplexing for I2S device */ 894 /* Pad multiplexing for I2S device */
895 static const unsigned i2s_pins[] = { 35, 39, 40, 41, 42 }; 895 static const unsigned i2s_pins[] = { 35, 39, 40, 41, 42 };
896 static struct spear_muxreg i2s_muxreg[] = { 896 static struct spear_muxreg i2s_muxreg[] = {
897 { 897 {
898 .reg = PMX_CONFIG_REG, 898 .reg = PMX_CONFIG_REG,
899 .mask = PMX_SSP_CS_MASK, 899 .mask = PMX_SSP_CS_MASK,
900 .val = 0, 900 .val = 0,
901 }, { 901 }, {
902 .reg = PMX_CONFIG_REG, 902 .reg = PMX_CONFIG_REG,
903 .mask = PMX_UART0_MODEM_MASK, 903 .mask = PMX_UART0_MODEM_MASK,
904 .val = 0, 904 .val = 0,
905 }, 905 },
906 }; 906 };
907 907
908 static struct spear_muxreg i2s_ext_muxreg[] = { 908 static struct spear_muxreg i2s_ext_muxreg[] = {
909 { 909 {
910 .reg = IP_SEL_PAD_30_39_REG, 910 .reg = IP_SEL_PAD_30_39_REG,
911 .mask = PMX_PL_35_MASK | PMX_PL_39_MASK, 911 .mask = PMX_PL_35_MASK | PMX_PL_39_MASK,
912 .val = PMX_I2S_REF_CLK_PL_35_VAL | PMX_I2S_PL_39_VAL, 912 .val = PMX_I2S_REF_CLK_PL_35_VAL | PMX_I2S_PL_39_VAL,
913 }, { 913 }, {
914 .reg = IP_SEL_PAD_40_49_REG, 914 .reg = IP_SEL_PAD_40_49_REG,
915 .mask = PMX_PL_40_MASK | PMX_PL_41_42_MASK, 915 .mask = PMX_PL_40_MASK | PMX_PL_41_42_MASK,
916 .val = PMX_I2S_PL_40_VAL | PMX_I2S_PL_41_42_VAL, 916 .val = PMX_I2S_PL_40_VAL | PMX_I2S_PL_41_42_VAL,
917 }, 917 },
918 }; 918 };
919 919
920 static struct spear_modemux i2s_modemux[] = { 920 static struct spear_modemux i2s_modemux[] = {
921 { 921 {
922 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | EXTENDED_MODE, 922 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | EXTENDED_MODE,
923 .muxregs = i2s_muxreg, 923 .muxregs = i2s_muxreg,
924 .nmuxregs = ARRAY_SIZE(i2s_muxreg), 924 .nmuxregs = ARRAY_SIZE(i2s_muxreg),
925 }, { 925 }, {
926 .modes = EXTENDED_MODE, 926 .modes = EXTENDED_MODE,
927 .muxregs = i2s_ext_muxreg, 927 .muxregs = i2s_ext_muxreg,
928 .nmuxregs = ARRAY_SIZE(i2s_ext_muxreg), 928 .nmuxregs = ARRAY_SIZE(i2s_ext_muxreg),
929 }, 929 },
930 }; 930 };
931 931
932 static struct spear_pingroup i2s_pingroup = { 932 static struct spear_pingroup i2s_pingroup = {
933 .name = "i2s_grp", 933 .name = "i2s_grp",
934 .pins = i2s_pins, 934 .pins = i2s_pins,
935 .npins = ARRAY_SIZE(i2s_pins), 935 .npins = ARRAY_SIZE(i2s_pins),
936 .modemuxs = i2s_modemux, 936 .modemuxs = i2s_modemux,
937 .nmodemuxs = ARRAY_SIZE(i2s_modemux), 937 .nmodemuxs = ARRAY_SIZE(i2s_modemux),
938 }; 938 };
939 939
940 static const char *const i2s_grps[] = { "i2s_grp" }; 940 static const char *const i2s_grps[] = { "i2s_grp" };
941 static struct spear_function i2s_function = { 941 static struct spear_function i2s_function = {
942 .name = "i2s", 942 .name = "i2s",
943 .groups = i2s_grps, 943 .groups = i2s_grps,
944 .ngroups = ARRAY_SIZE(i2s_grps), 944 .ngroups = ARRAY_SIZE(i2s_grps),
945 }; 945 };
946 946
947 /* Pad multiplexing for UART1 device */ 947 /* Pad multiplexing for UART1 device */
948 static const unsigned uart1_pins[] = { 28, 29 }; 948 static const unsigned uart1_pins[] = { 28, 29 };
949 static struct spear_muxreg uart1_muxreg[] = { 949 static struct spear_muxreg uart1_muxreg[] = {
950 { 950 {
951 .reg = PMX_CONFIG_REG, 951 .reg = PMX_CONFIG_REG,
952 .mask = PMX_GPIO_PIN0_MASK | PMX_GPIO_PIN1_MASK, 952 .mask = PMX_GPIO_PIN0_MASK | PMX_GPIO_PIN1_MASK,
953 .val = 0, 953 .val = 0,
954 }, 954 },
955 }; 955 };
956 956
957 static struct spear_muxreg uart1_ext_muxreg[] = { 957 static struct spear_muxreg uart1_ext_muxreg[] = {
958 { 958 {
959 .reg = IP_SEL_PAD_20_29_REG, 959 .reg = IP_SEL_PAD_20_29_REG,
960 .mask = PMX_PL_28_29_MASK, 960 .mask = PMX_PL_28_29_MASK,
961 .val = PMX_UART1_PL_28_29_VAL, 961 .val = PMX_UART1_PL_28_29_VAL,
962 }, 962 },
963 }; 963 };
964 964
965 static struct spear_modemux uart1_modemux[] = { 965 static struct spear_modemux uart1_modemux[] = {
966 { 966 {
967 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | AUTO_EXP_MODE 967 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | AUTO_EXP_MODE
968 | SMALL_PRINTERS_MODE | EXTENDED_MODE, 968 | SMALL_PRINTERS_MODE | EXTENDED_MODE,
969 .muxregs = uart1_muxreg, 969 .muxregs = uart1_muxreg,
970 .nmuxregs = ARRAY_SIZE(uart1_muxreg), 970 .nmuxregs = ARRAY_SIZE(uart1_muxreg),
971 }, { 971 }, {
972 .modes = EXTENDED_MODE, 972 .modes = EXTENDED_MODE,
973 .muxregs = uart1_ext_muxreg, 973 .muxregs = uart1_ext_muxreg,
974 .nmuxregs = ARRAY_SIZE(uart1_ext_muxreg), 974 .nmuxregs = ARRAY_SIZE(uart1_ext_muxreg),
975 }, 975 },
976 }; 976 };
977 977
978 static struct spear_pingroup uart1_pingroup = { 978 static struct spear_pingroup uart1_pingroup = {
979 .name = "uart1_grp", 979 .name = "uart1_grp",
980 .pins = uart1_pins, 980 .pins = uart1_pins,
981 .npins = ARRAY_SIZE(uart1_pins), 981 .npins = ARRAY_SIZE(uart1_pins),
982 .modemuxs = uart1_modemux, 982 .modemuxs = uart1_modemux,
983 .nmodemuxs = ARRAY_SIZE(uart1_modemux), 983 .nmodemuxs = ARRAY_SIZE(uart1_modemux),
984 }; 984 };
985 985
986 static const char *const uart1_grps[] = { "uart1_grp" }; 986 static const char *const uart1_grps[] = { "uart1_grp" };
987 static struct spear_function uart1_function = { 987 static struct spear_function uart1_function = {
988 .name = "uart1", 988 .name = "uart1",
989 .groups = uart1_grps, 989 .groups = uart1_grps,
990 .ngroups = ARRAY_SIZE(uart1_grps), 990 .ngroups = ARRAY_SIZE(uart1_grps),
991 }; 991 };
992 992
993 /* Pad multiplexing for UART1 Modem device */ 993 /* Pad multiplexing for UART1 Modem device */
994 static const unsigned uart1_modem_2_to_7_pins[] = { 2, 3, 4, 5, 6, 7 }; 994 static const unsigned uart1_modem_2_to_7_pins[] = { 2, 3, 4, 5, 6, 7 };
995 static const unsigned uart1_modem_31_to_36_pins[] = { 31, 32, 33, 34, 35, 36 }; 995 static const unsigned uart1_modem_31_to_36_pins[] = { 31, 32, 33, 34, 35, 36 };
996 static const unsigned uart1_modem_34_to_45_pins[] = { 34, 35, 36, 43, 44, 45 }; 996 static const unsigned uart1_modem_34_to_45_pins[] = { 34, 35, 36, 43, 44, 45 };
997 static const unsigned uart1_modem_80_to_85_pins[] = { 80, 81, 82, 83, 84, 85 }; 997 static const unsigned uart1_modem_80_to_85_pins[] = { 80, 81, 82, 83, 84, 85 };
998 998
999 static struct spear_muxreg uart1_modem_ext_2_to_7_muxreg[] = { 999 static struct spear_muxreg uart1_modem_ext_2_to_7_muxreg[] = {
1000 { 1000 {
1001 .reg = PMX_CONFIG_REG, 1001 .reg = PMX_CONFIG_REG,
1002 .mask = PMX_UART0_MASK | PMX_I2C_MASK | PMX_SSP_MASK, 1002 .mask = PMX_UART0_MASK | PMX_I2C_MASK | PMX_SSP_MASK,
1003 .val = 0, 1003 .val = 0,
1004 }, { 1004 }, {
1005 .reg = IP_SEL_PAD_0_9_REG, 1005 .reg = IP_SEL_PAD_0_9_REG,
1006 .mask = PMX_PL_2_3_MASK | PMX_PL_6_7_MASK, 1006 .mask = PMX_PL_2_3_MASK | PMX_PL_6_7_MASK,
1007 .val = PMX_UART1_ENH_PL_2_3_VAL | PMX_UART1_ENH_PL_4_5_VAL | 1007 .val = PMX_UART1_ENH_PL_2_3_VAL | PMX_UART1_ENH_PL_4_5_VAL |
1008 PMX_UART1_ENH_PL_6_7_VAL, 1008 PMX_UART1_ENH_PL_6_7_VAL,
1009 }, { 1009 }, {
1010 .reg = IP_SEL_MIX_PAD_REG, 1010 .reg = IP_SEL_MIX_PAD_REG,
1011 .mask = PMX_UART1_ENH_PORT_SEL_MASK, 1011 .mask = PMX_UART1_ENH_PORT_SEL_MASK,
1012 .val = PMX_UART1_ENH_PORT_3_TO_5_7_VAL, 1012 .val = PMX_UART1_ENH_PORT_3_TO_5_7_VAL,
1013 }, 1013 },
1014 }; 1014 };
1015 1015
1016 static struct spear_muxreg uart1_modem_31_to_36_muxreg[] = { 1016 static struct spear_muxreg uart1_modem_31_to_36_muxreg[] = {
1017 { 1017 {
1018 .reg = PMX_CONFIG_REG, 1018 .reg = PMX_CONFIG_REG,
1019 .mask = PMX_GPIO_PIN3_MASK | PMX_GPIO_PIN4_MASK | 1019 .mask = PMX_GPIO_PIN3_MASK | PMX_GPIO_PIN4_MASK |
1020 PMX_GPIO_PIN5_MASK | PMX_SSP_CS_MASK, 1020 PMX_GPIO_PIN5_MASK | PMX_SSP_CS_MASK,
1021 .val = 0, 1021 .val = 0,
1022 }, 1022 },
1023 }; 1023 };
1024 1024
1025 static struct spear_muxreg uart1_modem_ext_31_to_36_muxreg[] = { 1025 static struct spear_muxreg uart1_modem_ext_31_to_36_muxreg[] = {
1026 { 1026 {
1027 .reg = IP_SEL_PAD_30_39_REG, 1027 .reg = IP_SEL_PAD_30_39_REG,
1028 .mask = PMX_PL_31_MASK | PMX_PL_32_33_MASK | PMX_PL_34_MASK | 1028 .mask = PMX_PL_31_MASK | PMX_PL_32_33_MASK | PMX_PL_34_MASK |
1029 PMX_PL_35_MASK | PMX_PL_36_MASK, 1029 PMX_PL_35_MASK | PMX_PL_36_MASK,
1030 .val = PMX_UART1_ENH_PL_31_VAL | PMX_UART1_ENH_PL_32_33_VAL | 1030 .val = PMX_UART1_ENH_PL_31_VAL | PMX_UART1_ENH_PL_32_33_VAL |
1031 PMX_UART1_ENH_PL_34_VAL | PMX_UART1_ENH_PL_35_VAL | 1031 PMX_UART1_ENH_PL_34_VAL | PMX_UART1_ENH_PL_35_VAL |
1032 PMX_UART1_ENH_PL_36_VAL, 1032 PMX_UART1_ENH_PL_36_VAL,
1033 }, { 1033 }, {
1034 .reg = IP_SEL_MIX_PAD_REG, 1034 .reg = IP_SEL_MIX_PAD_REG,
1035 .mask = PMX_UART1_ENH_PORT_SEL_MASK, 1035 .mask = PMX_UART1_ENH_PORT_SEL_MASK,
1036 .val = PMX_UART1_ENH_PORT_32_TO_34_36_VAL, 1036 .val = PMX_UART1_ENH_PORT_32_TO_34_36_VAL,
1037 }, 1037 },
1038 }; 1038 };
1039 1039
1040 static struct spear_muxreg uart1_modem_34_to_45_muxreg[] = { 1040 static struct spear_muxreg uart1_modem_34_to_45_muxreg[] = {
1041 { 1041 {
1042 .reg = PMX_CONFIG_REG, 1042 .reg = PMX_CONFIG_REG,
1043 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK | 1043 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK |
1044 PMX_SSP_CS_MASK, 1044 PMX_SSP_CS_MASK,
1045 .val = 0, 1045 .val = 0,
1046 }, 1046 },
1047 }; 1047 };
1048 1048
1049 static struct spear_muxreg uart1_modem_ext_34_to_45_muxreg[] = { 1049 static struct spear_muxreg uart1_modem_ext_34_to_45_muxreg[] = {
1050 { 1050 {
1051 .reg = IP_SEL_PAD_30_39_REG, 1051 .reg = IP_SEL_PAD_30_39_REG,
1052 .mask = PMX_PL_34_MASK | PMX_PL_35_MASK | PMX_PL_36_MASK, 1052 .mask = PMX_PL_34_MASK | PMX_PL_35_MASK | PMX_PL_36_MASK,
1053 .val = PMX_UART1_ENH_PL_34_VAL | PMX_UART1_ENH_PL_35_VAL | 1053 .val = PMX_UART1_ENH_PL_34_VAL | PMX_UART1_ENH_PL_35_VAL |
1054 PMX_UART1_ENH_PL_36_VAL, 1054 PMX_UART1_ENH_PL_36_VAL,
1055 }, { 1055 }, {
1056 .reg = IP_SEL_PAD_40_49_REG, 1056 .reg = IP_SEL_PAD_40_49_REG,
1057 .mask = PMX_PL_43_MASK | PMX_PL_44_45_MASK, 1057 .mask = PMX_PL_43_MASK | PMX_PL_44_45_MASK,
1058 .val = PMX_UART1_ENH_PL_43_VAL | PMX_UART1_ENH_PL_44_45_VAL, 1058 .val = PMX_UART1_ENH_PL_43_VAL | PMX_UART1_ENH_PL_44_45_VAL,
1059 }, { 1059 }, {
1060 .reg = IP_SEL_MIX_PAD_REG, 1060 .reg = IP_SEL_MIX_PAD_REG,
1061 .mask = PMX_UART1_ENH_PORT_SEL_MASK, 1061 .mask = PMX_UART1_ENH_PORT_SEL_MASK,
1062 .val = PMX_UART1_ENH_PORT_44_45_34_36_VAL, 1062 .val = PMX_UART1_ENH_PORT_44_45_34_36_VAL,
1063 }, 1063 },
1064 }; 1064 };
1065 1065
1066 static struct spear_muxreg uart1_modem_ext_80_to_85_muxreg[] = { 1066 static struct spear_muxreg uart1_modem_ext_80_to_85_muxreg[] = {
1067 { 1067 {
1068 .reg = IP_SEL_PAD_80_89_REG, 1068 .reg = IP_SEL_PAD_80_89_REG,
1069 .mask = PMX_PL_80_TO_85_MASK, 1069 .mask = PMX_PL_80_TO_85_MASK,
1070 .val = PMX_UART1_ENH_PL_80_TO_85_VAL, 1070 .val = PMX_UART1_ENH_PL_80_TO_85_VAL,
1071 }, { 1071 }, {
1072 .reg = IP_SEL_PAD_40_49_REG, 1072 .reg = IP_SEL_PAD_40_49_REG,
1073 .mask = PMX_PL_43_MASK | PMX_PL_44_45_MASK, 1073 .mask = PMX_PL_43_MASK | PMX_PL_44_45_MASK,
1074 .val = PMX_UART1_ENH_PL_43_VAL | PMX_UART1_ENH_PL_44_45_VAL, 1074 .val = PMX_UART1_ENH_PL_43_VAL | PMX_UART1_ENH_PL_44_45_VAL,
1075 }, { 1075 }, {
1076 .reg = IP_SEL_MIX_PAD_REG, 1076 .reg = IP_SEL_MIX_PAD_REG,
1077 .mask = PMX_UART1_ENH_PORT_SEL_MASK, 1077 .mask = PMX_UART1_ENH_PORT_SEL_MASK,
1078 .val = PMX_UART1_ENH_PORT_81_TO_85_VAL, 1078 .val = PMX_UART1_ENH_PORT_81_TO_85_VAL,
1079 }, 1079 },
1080 }; 1080 };
1081 1081
1082 static struct spear_modemux uart1_modem_2_to_7_modemux[] = { 1082 static struct spear_modemux uart1_modem_2_to_7_modemux[] = {
1083 { 1083 {
1084 .modes = EXTENDED_MODE, 1084 .modes = EXTENDED_MODE,
1085 .muxregs = uart1_modem_ext_2_to_7_muxreg, 1085 .muxregs = uart1_modem_ext_2_to_7_muxreg,
1086 .nmuxregs = ARRAY_SIZE(uart1_modem_ext_2_to_7_muxreg), 1086 .nmuxregs = ARRAY_SIZE(uart1_modem_ext_2_to_7_muxreg),
1087 }, 1087 },
1088 }; 1088 };
1089 1089
1090 static struct spear_modemux uart1_modem_31_to_36_modemux[] = { 1090 static struct spear_modemux uart1_modem_31_to_36_modemux[] = {
1091 { 1091 {
1092 .modes = SMALL_PRINTERS_MODE | EXTENDED_MODE, 1092 .modes = SMALL_PRINTERS_MODE | EXTENDED_MODE,
1093 .muxregs = uart1_modem_31_to_36_muxreg, 1093 .muxregs = uart1_modem_31_to_36_muxreg,
1094 .nmuxregs = ARRAY_SIZE(uart1_modem_31_to_36_muxreg), 1094 .nmuxregs = ARRAY_SIZE(uart1_modem_31_to_36_muxreg),
1095 }, { 1095 }, {
1096 .modes = EXTENDED_MODE, 1096 .modes = EXTENDED_MODE,
1097 .muxregs = uart1_modem_ext_31_to_36_muxreg, 1097 .muxregs = uart1_modem_ext_31_to_36_muxreg,
1098 .nmuxregs = ARRAY_SIZE(uart1_modem_ext_31_to_36_muxreg), 1098 .nmuxregs = ARRAY_SIZE(uart1_modem_ext_31_to_36_muxreg),
1099 }, 1099 },
1100 }; 1100 };
1101 1101
1102 static struct spear_modemux uart1_modem_34_to_45_modemux[] = { 1102 static struct spear_modemux uart1_modem_34_to_45_modemux[] = {
1103 { 1103 {
1104 .modes = AUTO_EXP_MODE | EXTENDED_MODE, 1104 .modes = AUTO_EXP_MODE | EXTENDED_MODE,
1105 .muxregs = uart1_modem_34_to_45_muxreg, 1105 .muxregs = uart1_modem_34_to_45_muxreg,
1106 .nmuxregs = ARRAY_SIZE(uart1_modem_34_to_45_muxreg), 1106 .nmuxregs = ARRAY_SIZE(uart1_modem_34_to_45_muxreg),
1107 }, { 1107 }, {
1108 .modes = EXTENDED_MODE, 1108 .modes = EXTENDED_MODE,
1109 .muxregs = uart1_modem_ext_34_to_45_muxreg, 1109 .muxregs = uart1_modem_ext_34_to_45_muxreg,
1110 .nmuxregs = ARRAY_SIZE(uart1_modem_ext_34_to_45_muxreg), 1110 .nmuxregs = ARRAY_SIZE(uart1_modem_ext_34_to_45_muxreg),
1111 }, 1111 },
1112 }; 1112 };
1113 1113
1114 static struct spear_modemux uart1_modem_80_to_85_modemux[] = { 1114 static struct spear_modemux uart1_modem_80_to_85_modemux[] = {
1115 { 1115 {
1116 .modes = EXTENDED_MODE, 1116 .modes = EXTENDED_MODE,
1117 .muxregs = uart1_modem_ext_80_to_85_muxreg, 1117 .muxregs = uart1_modem_ext_80_to_85_muxreg,
1118 .nmuxregs = ARRAY_SIZE(uart1_modem_ext_80_to_85_muxreg), 1118 .nmuxregs = ARRAY_SIZE(uart1_modem_ext_80_to_85_muxreg),
1119 }, 1119 },
1120 }; 1120 };
1121 1121
1122 static struct spear_pingroup uart1_modem_pingroup[] = { 1122 static struct spear_pingroup uart1_modem_pingroup[] = {
1123 { 1123 {
1124 .name = "uart1_modem_2_to_7_grp", 1124 .name = "uart1_modem_2_to_7_grp",
1125 .pins = uart1_modem_2_to_7_pins, 1125 .pins = uart1_modem_2_to_7_pins,
1126 .npins = ARRAY_SIZE(uart1_modem_2_to_7_pins), 1126 .npins = ARRAY_SIZE(uart1_modem_2_to_7_pins),
1127 .modemuxs = uart1_modem_2_to_7_modemux, 1127 .modemuxs = uart1_modem_2_to_7_modemux,
1128 .nmodemuxs = ARRAY_SIZE(uart1_modem_2_to_7_modemux), 1128 .nmodemuxs = ARRAY_SIZE(uart1_modem_2_to_7_modemux),
1129 }, { 1129 }, {
1130 .name = "uart1_modem_31_to_36_grp", 1130 .name = "uart1_modem_31_to_36_grp",
1131 .pins = uart1_modem_31_to_36_pins, 1131 .pins = uart1_modem_31_to_36_pins,
1132 .npins = ARRAY_SIZE(uart1_modem_31_to_36_pins), 1132 .npins = ARRAY_SIZE(uart1_modem_31_to_36_pins),
1133 .modemuxs = uart1_modem_31_to_36_modemux, 1133 .modemuxs = uart1_modem_31_to_36_modemux,
1134 .nmodemuxs = ARRAY_SIZE(uart1_modem_31_to_36_modemux), 1134 .nmodemuxs = ARRAY_SIZE(uart1_modem_31_to_36_modemux),
1135 }, { 1135 }, {
1136 .name = "uart1_modem_34_to_45_grp", 1136 .name = "uart1_modem_34_to_45_grp",
1137 .pins = uart1_modem_34_to_45_pins, 1137 .pins = uart1_modem_34_to_45_pins,
1138 .npins = ARRAY_SIZE(uart1_modem_34_to_45_pins), 1138 .npins = ARRAY_SIZE(uart1_modem_34_to_45_pins),
1139 .modemuxs = uart1_modem_34_to_45_modemux, 1139 .modemuxs = uart1_modem_34_to_45_modemux,
1140 .nmodemuxs = ARRAY_SIZE(uart1_modem_34_to_45_modemux), 1140 .nmodemuxs = ARRAY_SIZE(uart1_modem_34_to_45_modemux),
1141 }, { 1141 }, {
1142 .name = "uart1_modem_80_to_85_grp", 1142 .name = "uart1_modem_80_to_85_grp",
1143 .pins = uart1_modem_80_to_85_pins, 1143 .pins = uart1_modem_80_to_85_pins,
1144 .npins = ARRAY_SIZE(uart1_modem_80_to_85_pins), 1144 .npins = ARRAY_SIZE(uart1_modem_80_to_85_pins),
1145 .modemuxs = uart1_modem_80_to_85_modemux, 1145 .modemuxs = uart1_modem_80_to_85_modemux,
1146 .nmodemuxs = ARRAY_SIZE(uart1_modem_80_to_85_modemux), 1146 .nmodemuxs = ARRAY_SIZE(uart1_modem_80_to_85_modemux),
1147 }, 1147 },
1148 }; 1148 };
1149 1149
1150 static const char *const uart1_modem_grps[] = { "uart1_modem_2_to_7_grp", 1150 static const char *const uart1_modem_grps[] = { "uart1_modem_2_to_7_grp",
1151 "uart1_modem_31_to_36_grp", "uart1_modem_34_to_45_grp", 1151 "uart1_modem_31_to_36_grp", "uart1_modem_34_to_45_grp",
1152 "uart1_modem_80_to_85_grp" }; 1152 "uart1_modem_80_to_85_grp" };
1153 static struct spear_function uart1_modem_function = { 1153 static struct spear_function uart1_modem_function = {
1154 .name = "uart1_modem", 1154 .name = "uart1_modem",
1155 .groups = uart1_modem_grps, 1155 .groups = uart1_modem_grps,
1156 .ngroups = ARRAY_SIZE(uart1_modem_grps), 1156 .ngroups = ARRAY_SIZE(uart1_modem_grps),
1157 }; 1157 };
1158 1158
1159 /* Pad multiplexing for UART2 device */ 1159 /* Pad multiplexing for UART2 device */
1160 static const unsigned uart2_pins[] = { 0, 1 }; 1160 static const unsigned uart2_pins[] = { 0, 1 };
1161 static struct spear_muxreg uart2_muxreg[] = { 1161 static struct spear_muxreg uart2_muxreg[] = {
1162 { 1162 {
1163 .reg = PMX_CONFIG_REG, 1163 .reg = PMX_CONFIG_REG,
1164 .mask = PMX_FIRDA_MASK, 1164 .mask = PMX_FIRDA_MASK,
1165 .val = 0, 1165 .val = 0,
1166 }, 1166 },
1167 }; 1167 };
1168 1168
1169 static struct spear_muxreg uart2_ext_muxreg[] = { 1169 static struct spear_muxreg uart2_ext_muxreg[] = {
1170 { 1170 {
1171 .reg = IP_SEL_PAD_0_9_REG, 1171 .reg = IP_SEL_PAD_0_9_REG,
1172 .mask = PMX_PL_0_1_MASK, 1172 .mask = PMX_PL_0_1_MASK,
1173 .val = PMX_UART2_PL_0_1_VAL, 1173 .val = PMX_UART2_PL_0_1_VAL,
1174 }, 1174 },
1175 }; 1175 };
1176 1176
1177 static struct spear_modemux uart2_modemux[] = { 1177 static struct spear_modemux uart2_modemux[] = {
1178 { 1178 {
1179 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | AUTO_EXP_MODE 1179 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | AUTO_EXP_MODE
1180 | SMALL_PRINTERS_MODE | EXTENDED_MODE, 1180 | SMALL_PRINTERS_MODE | EXTENDED_MODE,
1181 .muxregs = uart2_muxreg, 1181 .muxregs = uart2_muxreg,
1182 .nmuxregs = ARRAY_SIZE(uart2_muxreg), 1182 .nmuxregs = ARRAY_SIZE(uart2_muxreg),
1183 }, { 1183 }, {
1184 .modes = EXTENDED_MODE, 1184 .modes = EXTENDED_MODE,
1185 .muxregs = uart2_ext_muxreg, 1185 .muxregs = uart2_ext_muxreg,
1186 .nmuxregs = ARRAY_SIZE(uart2_ext_muxreg), 1186 .nmuxregs = ARRAY_SIZE(uart2_ext_muxreg),
1187 }, 1187 },
1188 }; 1188 };
1189 1189
1190 static struct spear_pingroup uart2_pingroup = { 1190 static struct spear_pingroup uart2_pingroup = {
1191 .name = "uart2_grp", 1191 .name = "uart2_grp",
1192 .pins = uart2_pins, 1192 .pins = uart2_pins,
1193 .npins = ARRAY_SIZE(uart2_pins), 1193 .npins = ARRAY_SIZE(uart2_pins),
1194 .modemuxs = uart2_modemux, 1194 .modemuxs = uart2_modemux,
1195 .nmodemuxs = ARRAY_SIZE(uart2_modemux), 1195 .nmodemuxs = ARRAY_SIZE(uart2_modemux),
1196 }; 1196 };
1197 1197
1198 static const char *const uart2_grps[] = { "uart2_grp" }; 1198 static const char *const uart2_grps[] = { "uart2_grp" };
1199 static struct spear_function uart2_function = { 1199 static struct spear_function uart2_function = {
1200 .name = "uart2", 1200 .name = "uart2",
1201 .groups = uart2_grps, 1201 .groups = uart2_grps,
1202 .ngroups = ARRAY_SIZE(uart2_grps), 1202 .ngroups = ARRAY_SIZE(uart2_grps),
1203 }; 1203 };
1204 1204
1205 /* Pad multiplexing for uart3 device */ 1205 /* Pad multiplexing for uart3 device */
1206 static const unsigned uart3_pins[][2] = { { 8, 9 }, { 15, 16 }, { 41, 42 }, 1206 static const unsigned uart3_pins[][2] = { { 8, 9 }, { 15, 16 }, { 41, 42 },
1207 { 52, 53 }, { 73, 74 }, { 94, 95 }, { 98, 99 } }; 1207 { 52, 53 }, { 73, 74 }, { 94, 95 }, { 98, 99 } };
1208 1208
1209 static struct spear_muxreg uart3_ext_8_9_muxreg[] = { 1209 static struct spear_muxreg uart3_ext_8_9_muxreg[] = {
1210 { 1210 {
1211 .reg = PMX_CONFIG_REG, 1211 .reg = PMX_CONFIG_REG,
1212 .mask = PMX_SSP_MASK, 1212 .mask = PMX_SSP_MASK,
1213 .val = 0, 1213 .val = 0,
1214 }, { 1214 }, {
1215 .reg = IP_SEL_PAD_0_9_REG, 1215 .reg = IP_SEL_PAD_0_9_REG,
1216 .mask = PMX_PL_8_9_MASK, 1216 .mask = PMX_PL_8_9_MASK,
1217 .val = PMX_UART3_PL_8_9_VAL, 1217 .val = PMX_UART3_PL_8_9_VAL,
1218 }, { 1218 }, {
1219 .reg = IP_SEL_MIX_PAD_REG, 1219 .reg = IP_SEL_MIX_PAD_REG,
1220 .mask = PMX_UART3_PORT_SEL_MASK, 1220 .mask = PMX_UART3_PORT_SEL_MASK,
1221 .val = PMX_UART3_PORT_8_VAL, 1221 .val = PMX_UART3_PORT_8_VAL,
1222 }, 1222 },
1223 }; 1223 };
1224 1224
1225 static struct spear_muxreg uart3_ext_15_16_muxreg[] = { 1225 static struct spear_muxreg uart3_ext_15_16_muxreg[] = {
1226 { 1226 {
1227 .reg = PMX_CONFIG_REG, 1227 .reg = PMX_CONFIG_REG,
1228 .mask = PMX_MII_MASK, 1228 .mask = PMX_MII_MASK,
1229 .val = 0, 1229 .val = 0,
1230 }, { 1230 }, {
1231 .reg = IP_SEL_PAD_10_19_REG, 1231 .reg = IP_SEL_PAD_10_19_REG,
1232 .mask = PMX_PL_15_16_MASK, 1232 .mask = PMX_PL_15_16_MASK,
1233 .val = PMX_UART3_PL_15_16_VAL, 1233 .val = PMX_UART3_PL_15_16_VAL,
1234 }, { 1234 }, {
1235 .reg = IP_SEL_MIX_PAD_REG, 1235 .reg = IP_SEL_MIX_PAD_REG,
1236 .mask = PMX_UART3_PORT_SEL_MASK, 1236 .mask = PMX_UART3_PORT_SEL_MASK,
1237 .val = PMX_UART3_PORT_15_VAL, 1237 .val = PMX_UART3_PORT_15_VAL,
1238 }, 1238 },
1239 }; 1239 };
1240 1240
1241 static struct spear_muxreg uart3_ext_41_42_muxreg[] = { 1241 static struct spear_muxreg uart3_ext_41_42_muxreg[] = {
1242 { 1242 {
1243 .reg = PMX_CONFIG_REG, 1243 .reg = PMX_CONFIG_REG,
1244 .mask = PMX_UART0_MODEM_MASK, 1244 .mask = PMX_UART0_MODEM_MASK,
1245 .val = 0, 1245 .val = 0,
1246 }, { 1246 }, {
1247 .reg = IP_SEL_PAD_40_49_REG, 1247 .reg = IP_SEL_PAD_40_49_REG,
1248 .mask = PMX_PL_41_42_MASK, 1248 .mask = PMX_PL_41_42_MASK,
1249 .val = PMX_UART3_PL_41_42_VAL, 1249 .val = PMX_UART3_PL_41_42_VAL,
1250 }, { 1250 }, {
1251 .reg = IP_SEL_MIX_PAD_REG, 1251 .reg = IP_SEL_MIX_PAD_REG,
1252 .mask = PMX_UART3_PORT_SEL_MASK, 1252 .mask = PMX_UART3_PORT_SEL_MASK,
1253 .val = PMX_UART3_PORT_41_VAL, 1253 .val = PMX_UART3_PORT_41_VAL,
1254 }, 1254 },
1255 }; 1255 };
1256 1256
1257 static struct spear_muxreg uart3_ext_52_53_muxreg[] = { 1257 static struct spear_muxreg uart3_ext_52_53_muxreg[] = {
1258 { 1258 {
1259 .reg = IP_SEL_PAD_50_59_REG, 1259 .reg = IP_SEL_PAD_50_59_REG,
1260 .mask = PMX_PL_52_53_MASK, 1260 .mask = PMX_PL_52_53_MASK,
1261 .val = PMX_UART3_PL_52_53_VAL, 1261 .val = PMX_UART3_PL_52_53_VAL,
1262 }, { 1262 }, {
1263 .reg = IP_SEL_MIX_PAD_REG, 1263 .reg = IP_SEL_MIX_PAD_REG,
1264 .mask = PMX_UART3_PORT_SEL_MASK, 1264 .mask = PMX_UART3_PORT_SEL_MASK,
1265 .val = PMX_UART3_PORT_52_VAL, 1265 .val = PMX_UART3_PORT_52_VAL,
1266 }, 1266 },
1267 }; 1267 };
1268 1268
1269 static struct spear_muxreg uart3_ext_73_74_muxreg[] = { 1269 static struct spear_muxreg uart3_ext_73_74_muxreg[] = {
1270 { 1270 {
1271 .reg = IP_SEL_PAD_70_79_REG, 1271 .reg = IP_SEL_PAD_70_79_REG,
1272 .mask = PMX_PL_73_MASK | PMX_PL_74_MASK, 1272 .mask = PMX_PL_73_MASK | PMX_PL_74_MASK,
1273 .val = PMX_UART3_PL_73_VAL | PMX_UART3_PL_74_VAL, 1273 .val = PMX_UART3_PL_73_VAL | PMX_UART3_PL_74_VAL,
1274 }, { 1274 }, {
1275 .reg = IP_SEL_MIX_PAD_REG, 1275 .reg = IP_SEL_MIX_PAD_REG,
1276 .mask = PMX_UART3_PORT_SEL_MASK, 1276 .mask = PMX_UART3_PORT_SEL_MASK,
1277 .val = PMX_UART3_PORT_73_VAL, 1277 .val = PMX_UART3_PORT_73_VAL,
1278 }, 1278 },
1279 }; 1279 };
1280 1280
1281 static struct spear_muxreg uart3_ext_94_95_muxreg[] = { 1281 static struct spear_muxreg uart3_ext_94_95_muxreg[] = {
1282 { 1282 {
1283 .reg = IP_SEL_PAD_90_99_REG, 1283 .reg = IP_SEL_PAD_90_99_REG,
1284 .mask = PMX_PL_94_95_MASK, 1284 .mask = PMX_PL_94_95_MASK,
1285 .val = PMX_UART3_PL_94_95_VAL, 1285 .val = PMX_UART3_PL_94_95_VAL,
1286 }, { 1286 }, {
1287 .reg = IP_SEL_MIX_PAD_REG, 1287 .reg = IP_SEL_MIX_PAD_REG,
1288 .mask = PMX_UART3_PORT_SEL_MASK, 1288 .mask = PMX_UART3_PORT_SEL_MASK,
1289 .val = PMX_UART3_PORT_94_VAL, 1289 .val = PMX_UART3_PORT_94_VAL,
1290 }, 1290 },
1291 }; 1291 };
1292 1292
1293 static struct spear_muxreg uart3_ext_98_99_muxreg[] = { 1293 static struct spear_muxreg uart3_ext_98_99_muxreg[] = {
1294 { 1294 {
1295 .reg = IP_SEL_PAD_90_99_REG, 1295 .reg = IP_SEL_PAD_90_99_REG,
1296 .mask = PMX_PL_98_MASK | PMX_PL_99_MASK, 1296 .mask = PMX_PL_98_MASK | PMX_PL_99_MASK,
1297 .val = PMX_UART3_PL_98_VAL | PMX_UART3_PL_99_VAL, 1297 .val = PMX_UART3_PL_98_VAL | PMX_UART3_PL_99_VAL,
1298 }, { 1298 }, {
1299 .reg = IP_SEL_MIX_PAD_REG, 1299 .reg = IP_SEL_MIX_PAD_REG,
1300 .mask = PMX_UART3_PORT_SEL_MASK, 1300 .mask = PMX_UART3_PORT_SEL_MASK,
1301 .val = PMX_UART3_PORT_99_VAL, 1301 .val = PMX_UART3_PORT_99_VAL,
1302 }, 1302 },
1303 }; 1303 };
1304 1304
1305 static struct spear_modemux uart3_modemux[][1] = { 1305 static struct spear_modemux uart3_modemux[][1] = {
1306 { 1306 {
1307 /* Select signals on pins 8_9 */ 1307 /* Select signals on pins 8_9 */
1308 { 1308 {
1309 .modes = EXTENDED_MODE, 1309 .modes = EXTENDED_MODE,
1310 .muxregs = uart3_ext_8_9_muxreg, 1310 .muxregs = uart3_ext_8_9_muxreg,
1311 .nmuxregs = ARRAY_SIZE(uart3_ext_8_9_muxreg), 1311 .nmuxregs = ARRAY_SIZE(uart3_ext_8_9_muxreg),
1312 }, 1312 },
1313 }, { 1313 }, {
1314 /* Select signals on pins 15_16 */ 1314 /* Select signals on pins 15_16 */
1315 { 1315 {
1316 .modes = EXTENDED_MODE, 1316 .modes = EXTENDED_MODE,
1317 .muxregs = uart3_ext_15_16_muxreg, 1317 .muxregs = uart3_ext_15_16_muxreg,
1318 .nmuxregs = ARRAY_SIZE(uart3_ext_15_16_muxreg), 1318 .nmuxregs = ARRAY_SIZE(uart3_ext_15_16_muxreg),
1319 }, 1319 },
1320 }, { 1320 }, {
1321 /* Select signals on pins 41_42 */ 1321 /* Select signals on pins 41_42 */
1322 { 1322 {
1323 .modes = EXTENDED_MODE, 1323 .modes = EXTENDED_MODE,
1324 .muxregs = uart3_ext_41_42_muxreg, 1324 .muxregs = uart3_ext_41_42_muxreg,
1325 .nmuxregs = ARRAY_SIZE(uart3_ext_41_42_muxreg), 1325 .nmuxregs = ARRAY_SIZE(uart3_ext_41_42_muxreg),
1326 }, 1326 },
1327 }, { 1327 }, {
1328 /* Select signals on pins 52_53 */ 1328 /* Select signals on pins 52_53 */
1329 { 1329 {
1330 .modes = EXTENDED_MODE, 1330 .modes = EXTENDED_MODE,
1331 .muxregs = uart3_ext_52_53_muxreg, 1331 .muxregs = uart3_ext_52_53_muxreg,
1332 .nmuxregs = ARRAY_SIZE(uart3_ext_52_53_muxreg), 1332 .nmuxregs = ARRAY_SIZE(uart3_ext_52_53_muxreg),
1333 }, 1333 },
1334 }, { 1334 }, {
1335 /* Select signals on pins 73_74 */ 1335 /* Select signals on pins 73_74 */
1336 { 1336 {
1337 .modes = EXTENDED_MODE, 1337 .modes = EXTENDED_MODE,
1338 .muxregs = uart3_ext_73_74_muxreg, 1338 .muxregs = uart3_ext_73_74_muxreg,
1339 .nmuxregs = ARRAY_SIZE(uart3_ext_73_74_muxreg), 1339 .nmuxregs = ARRAY_SIZE(uart3_ext_73_74_muxreg),
1340 }, 1340 },
1341 }, { 1341 }, {
1342 /* Select signals on pins 94_95 */ 1342 /* Select signals on pins 94_95 */
1343 { 1343 {
1344 .modes = EXTENDED_MODE, 1344 .modes = EXTENDED_MODE,
1345 .muxregs = uart3_ext_94_95_muxreg, 1345 .muxregs = uart3_ext_94_95_muxreg,
1346 .nmuxregs = ARRAY_SIZE(uart3_ext_94_95_muxreg), 1346 .nmuxregs = ARRAY_SIZE(uart3_ext_94_95_muxreg),
1347 }, 1347 },
1348 }, { 1348 }, {
1349 /* Select signals on pins 98_99 */ 1349 /* Select signals on pins 98_99 */
1350 { 1350 {
1351 .modes = EXTENDED_MODE, 1351 .modes = EXTENDED_MODE,
1352 .muxregs = uart3_ext_98_99_muxreg, 1352 .muxregs = uart3_ext_98_99_muxreg,
1353 .nmuxregs = ARRAY_SIZE(uart3_ext_98_99_muxreg), 1353 .nmuxregs = ARRAY_SIZE(uart3_ext_98_99_muxreg),
1354 }, 1354 },
1355 }, 1355 },
1356 }; 1356 };
1357 1357
1358 static struct spear_pingroup uart3_pingroup[] = { 1358 static struct spear_pingroup uart3_pingroup[] = {
1359 { 1359 {
1360 .name = "uart3_8_9_grp", 1360 .name = "uart3_8_9_grp",
1361 .pins = uart3_pins[0], 1361 .pins = uart3_pins[0],
1362 .npins = ARRAY_SIZE(uart3_pins[0]), 1362 .npins = ARRAY_SIZE(uart3_pins[0]),
1363 .modemuxs = uart3_modemux[0], 1363 .modemuxs = uart3_modemux[0],
1364 .nmodemuxs = ARRAY_SIZE(uart3_modemux[0]), 1364 .nmodemuxs = ARRAY_SIZE(uart3_modemux[0]),
1365 }, { 1365 }, {
1366 .name = "uart3_15_16_grp", 1366 .name = "uart3_15_16_grp",
1367 .pins = uart3_pins[1], 1367 .pins = uart3_pins[1],
1368 .npins = ARRAY_SIZE(uart3_pins[1]), 1368 .npins = ARRAY_SIZE(uart3_pins[1]),
1369 .modemuxs = uart3_modemux[1], 1369 .modemuxs = uart3_modemux[1],
1370 .nmodemuxs = ARRAY_SIZE(uart3_modemux[1]), 1370 .nmodemuxs = ARRAY_SIZE(uart3_modemux[1]),
1371 }, { 1371 }, {
1372 .name = "uart3_41_42_grp", 1372 .name = "uart3_41_42_grp",
1373 .pins = uart3_pins[2], 1373 .pins = uart3_pins[2],
1374 .npins = ARRAY_SIZE(uart3_pins[2]), 1374 .npins = ARRAY_SIZE(uart3_pins[2]),
1375 .modemuxs = uart3_modemux[2], 1375 .modemuxs = uart3_modemux[2],
1376 .nmodemuxs = ARRAY_SIZE(uart3_modemux[2]), 1376 .nmodemuxs = ARRAY_SIZE(uart3_modemux[2]),
1377 }, { 1377 }, {
1378 .name = "uart3_52_53_grp", 1378 .name = "uart3_52_53_grp",
1379 .pins = uart3_pins[3], 1379 .pins = uart3_pins[3],
1380 .npins = ARRAY_SIZE(uart3_pins[3]), 1380 .npins = ARRAY_SIZE(uart3_pins[3]),
1381 .modemuxs = uart3_modemux[3], 1381 .modemuxs = uart3_modemux[3],
1382 .nmodemuxs = ARRAY_SIZE(uart3_modemux[3]), 1382 .nmodemuxs = ARRAY_SIZE(uart3_modemux[3]),
1383 }, { 1383 }, {
1384 .name = "uart3_73_74_grp", 1384 .name = "uart3_73_74_grp",
1385 .pins = uart3_pins[4], 1385 .pins = uart3_pins[4],
1386 .npins = ARRAY_SIZE(uart3_pins[4]), 1386 .npins = ARRAY_SIZE(uart3_pins[4]),
1387 .modemuxs = uart3_modemux[4], 1387 .modemuxs = uart3_modemux[4],
1388 .nmodemuxs = ARRAY_SIZE(uart3_modemux[4]), 1388 .nmodemuxs = ARRAY_SIZE(uart3_modemux[4]),
1389 }, { 1389 }, {
1390 .name = "uart3_94_95_grp", 1390 .name = "uart3_94_95_grp",
1391 .pins = uart3_pins[5], 1391 .pins = uart3_pins[5],
1392 .npins = ARRAY_SIZE(uart3_pins[5]), 1392 .npins = ARRAY_SIZE(uart3_pins[5]),
1393 .modemuxs = uart3_modemux[5], 1393 .modemuxs = uart3_modemux[5],
1394 .nmodemuxs = ARRAY_SIZE(uart3_modemux[5]), 1394 .nmodemuxs = ARRAY_SIZE(uart3_modemux[5]),
1395 }, { 1395 }, {
1396 .name = "uart3_98_99_grp", 1396 .name = "uart3_98_99_grp",
1397 .pins = uart3_pins[6], 1397 .pins = uart3_pins[6],
1398 .npins = ARRAY_SIZE(uart3_pins[6]), 1398 .npins = ARRAY_SIZE(uart3_pins[6]),
1399 .modemuxs = uart3_modemux[6], 1399 .modemuxs = uart3_modemux[6],
1400 .nmodemuxs = ARRAY_SIZE(uart3_modemux[6]), 1400 .nmodemuxs = ARRAY_SIZE(uart3_modemux[6]),
1401 }, 1401 },
1402 }; 1402 };
1403 1403
1404 static const char *const uart3_grps[] = { "uart3_8_9_grp", "uart3_15_16_grp", 1404 static const char *const uart3_grps[] = { "uart3_8_9_grp", "uart3_15_16_grp",
1405 "uart3_41_42_grp", "uart3_52_53_grp", "uart3_73_74_grp", 1405 "uart3_41_42_grp", "uart3_52_53_grp", "uart3_73_74_grp",
1406 "uart3_94_95_grp", "uart3_98_99_grp" }; 1406 "uart3_94_95_grp", "uart3_98_99_grp" };
1407 1407
1408 static struct spear_function uart3_function = { 1408 static struct spear_function uart3_function = {
1409 .name = "uart3", 1409 .name = "uart3",
1410 .groups = uart3_grps, 1410 .groups = uart3_grps,
1411 .ngroups = ARRAY_SIZE(uart3_grps), 1411 .ngroups = ARRAY_SIZE(uart3_grps),
1412 }; 1412 };
1413 1413
1414 /* Pad multiplexing for uart4 device */ 1414 /* Pad multiplexing for uart4 device */
1415 static const unsigned uart4_pins[][2] = { { 6, 7 }, { 13, 14 }, { 39, 40 }, 1415 static const unsigned uart4_pins[][2] = { { 6, 7 }, { 13, 14 }, { 39, 40 },
1416 { 71, 72 }, { 92, 93 }, { 100, 101 } }; 1416 { 71, 72 }, { 92, 93 }, { 100, 101 } };
1417 1417
1418 static struct spear_muxreg uart4_ext_6_7_muxreg[] = { 1418 static struct spear_muxreg uart4_ext_6_7_muxreg[] = {
1419 { 1419 {
1420 .reg = PMX_CONFIG_REG, 1420 .reg = PMX_CONFIG_REG,
1421 .mask = PMX_SSP_MASK, 1421 .mask = PMX_SSP_MASK,
1422 .val = 0, 1422 .val = 0,
1423 }, { 1423 }, {
1424 .reg = IP_SEL_PAD_0_9_REG, 1424 .reg = IP_SEL_PAD_0_9_REG,
1425 .mask = PMX_PL_6_7_MASK, 1425 .mask = PMX_PL_6_7_MASK,
1426 .val = PMX_UART4_PL_6_7_VAL, 1426 .val = PMX_UART4_PL_6_7_VAL,
1427 }, { 1427 }, {
1428 .reg = IP_SEL_MIX_PAD_REG, 1428 .reg = IP_SEL_MIX_PAD_REG,
1429 .mask = PMX_UART4_PORT_SEL_MASK, 1429 .mask = PMX_UART4_PORT_SEL_MASK,
1430 .val = PMX_UART4_PORT_6_VAL, 1430 .val = PMX_UART4_PORT_6_VAL,
1431 }, 1431 },
1432 }; 1432 };
1433 1433
1434 static struct spear_muxreg uart4_ext_13_14_muxreg[] = { 1434 static struct spear_muxreg uart4_ext_13_14_muxreg[] = {
1435 { 1435 {
1436 .reg = PMX_CONFIG_REG, 1436 .reg = PMX_CONFIG_REG,
1437 .mask = PMX_MII_MASK, 1437 .mask = PMX_MII_MASK,
1438 .val = 0, 1438 .val = 0,
1439 }, { 1439 }, {
1440 .reg = IP_SEL_PAD_10_19_REG, 1440 .reg = IP_SEL_PAD_10_19_REG,
1441 .mask = PMX_PL_13_14_MASK, 1441 .mask = PMX_PL_13_14_MASK,
1442 .val = PMX_UART4_PL_13_14_VAL, 1442 .val = PMX_UART4_PL_13_14_VAL,
1443 }, { 1443 }, {
1444 .reg = IP_SEL_MIX_PAD_REG, 1444 .reg = IP_SEL_MIX_PAD_REG,
1445 .mask = PMX_UART4_PORT_SEL_MASK, 1445 .mask = PMX_UART4_PORT_SEL_MASK,
1446 .val = PMX_UART4_PORT_13_VAL, 1446 .val = PMX_UART4_PORT_13_VAL,
1447 }, 1447 },
1448 }; 1448 };
1449 1449
1450 static struct spear_muxreg uart4_ext_39_40_muxreg[] = { 1450 static struct spear_muxreg uart4_ext_39_40_muxreg[] = {
1451 { 1451 {
1452 .reg = PMX_CONFIG_REG, 1452 .reg = PMX_CONFIG_REG,
1453 .mask = PMX_UART0_MODEM_MASK, 1453 .mask = PMX_UART0_MODEM_MASK,
1454 .val = 0, 1454 .val = 0,
1455 }, { 1455 }, {
1456 .reg = IP_SEL_PAD_30_39_REG, 1456 .reg = IP_SEL_PAD_30_39_REG,
1457 .mask = PMX_PL_39_MASK, 1457 .mask = PMX_PL_39_MASK,
1458 .val = PMX_UART4_PL_39_VAL, 1458 .val = PMX_UART4_PL_39_VAL,
1459 }, { 1459 }, {
1460 .reg = IP_SEL_PAD_40_49_REG, 1460 .reg = IP_SEL_PAD_40_49_REG,
1461 .mask = PMX_PL_40_MASK, 1461 .mask = PMX_PL_40_MASK,
1462 .val = PMX_UART4_PL_40_VAL, 1462 .val = PMX_UART4_PL_40_VAL,
1463 }, { 1463 }, {
1464 .reg = IP_SEL_MIX_PAD_REG, 1464 .reg = IP_SEL_MIX_PAD_REG,
1465 .mask = PMX_UART4_PORT_SEL_MASK, 1465 .mask = PMX_UART4_PORT_SEL_MASK,
1466 .val = PMX_UART4_PORT_39_VAL, 1466 .val = PMX_UART4_PORT_39_VAL,
1467 }, 1467 },
1468 }; 1468 };
1469 1469
1470 static struct spear_muxreg uart4_ext_71_72_muxreg[] = { 1470 static struct spear_muxreg uart4_ext_71_72_muxreg[] = {
1471 { 1471 {
1472 .reg = IP_SEL_PAD_70_79_REG, 1472 .reg = IP_SEL_PAD_70_79_REG,
1473 .mask = PMX_PL_71_72_MASK, 1473 .mask = PMX_PL_71_72_MASK,
1474 .val = PMX_UART4_PL_71_72_VAL, 1474 .val = PMX_UART4_PL_71_72_VAL,
1475 }, { 1475 }, {
1476 .reg = IP_SEL_MIX_PAD_REG, 1476 .reg = IP_SEL_MIX_PAD_REG,
1477 .mask = PMX_UART4_PORT_SEL_MASK, 1477 .mask = PMX_UART4_PORT_SEL_MASK,
1478 .val = PMX_UART4_PORT_71_VAL, 1478 .val = PMX_UART4_PORT_71_VAL,
1479 }, 1479 },
1480 }; 1480 };
1481 1481
1482 static struct spear_muxreg uart4_ext_92_93_muxreg[] = { 1482 static struct spear_muxreg uart4_ext_92_93_muxreg[] = {
1483 { 1483 {
1484 .reg = IP_SEL_PAD_90_99_REG, 1484 .reg = IP_SEL_PAD_90_99_REG,
1485 .mask = PMX_PL_92_93_MASK, 1485 .mask = PMX_PL_92_93_MASK,
1486 .val = PMX_UART4_PL_92_93_VAL, 1486 .val = PMX_UART4_PL_92_93_VAL,
1487 }, { 1487 }, {
1488 .reg = IP_SEL_MIX_PAD_REG, 1488 .reg = IP_SEL_MIX_PAD_REG,
1489 .mask = PMX_UART4_PORT_SEL_MASK, 1489 .mask = PMX_UART4_PORT_SEL_MASK,
1490 .val = PMX_UART4_PORT_92_VAL, 1490 .val = PMX_UART4_PORT_92_VAL,
1491 }, 1491 },
1492 }; 1492 };
1493 1493
1494 static struct spear_muxreg uart4_ext_100_101_muxreg[] = { 1494 static struct spear_muxreg uart4_ext_100_101_muxreg[] = {
1495 { 1495 {
1496 .reg = IP_SEL_MIX_PAD_REG, 1496 .reg = IP_SEL_MIX_PAD_REG,
1497 .mask = PMX_PL_100_101_MASK | 1497 .mask = PMX_PL_100_101_MASK |
1498 PMX_UART4_PORT_SEL_MASK, 1498 PMX_UART4_PORT_SEL_MASK,
1499 .val = PMX_UART4_PL_100_101_VAL | 1499 .val = PMX_UART4_PL_100_101_VAL |
1500 PMX_UART4_PORT_101_VAL, 1500 PMX_UART4_PORT_101_VAL,
1501 }, 1501 },
1502 }; 1502 };
1503 1503
1504 static struct spear_modemux uart4_modemux[][1] = { 1504 static struct spear_modemux uart4_modemux[][1] = {
1505 { 1505 {
1506 /* Select signals on pins 6_7 */ 1506 /* Select signals on pins 6_7 */
1507 { 1507 {
1508 .modes = EXTENDED_MODE, 1508 .modes = EXTENDED_MODE,
1509 .muxregs = uart4_ext_6_7_muxreg, 1509 .muxregs = uart4_ext_6_7_muxreg,
1510 .nmuxregs = ARRAY_SIZE(uart4_ext_6_7_muxreg), 1510 .nmuxregs = ARRAY_SIZE(uart4_ext_6_7_muxreg),
1511 }, 1511 },
1512 }, { 1512 }, {
1513 /* Select signals on pins 13_14 */ 1513 /* Select signals on pins 13_14 */
1514 { 1514 {
1515 .modes = EXTENDED_MODE, 1515 .modes = EXTENDED_MODE,
1516 .muxregs = uart4_ext_13_14_muxreg, 1516 .muxregs = uart4_ext_13_14_muxreg,
1517 .nmuxregs = ARRAY_SIZE(uart4_ext_13_14_muxreg), 1517 .nmuxregs = ARRAY_SIZE(uart4_ext_13_14_muxreg),
1518 }, 1518 },
1519 }, { 1519 }, {
1520 /* Select signals on pins 39_40 */ 1520 /* Select signals on pins 39_40 */
1521 { 1521 {
1522 .modes = EXTENDED_MODE, 1522 .modes = EXTENDED_MODE,
1523 .muxregs = uart4_ext_39_40_muxreg, 1523 .muxregs = uart4_ext_39_40_muxreg,
1524 .nmuxregs = ARRAY_SIZE(uart4_ext_39_40_muxreg), 1524 .nmuxregs = ARRAY_SIZE(uart4_ext_39_40_muxreg),
1525 }, 1525 },
1526 }, { 1526 }, {
1527 /* Select signals on pins 71_72 */ 1527 /* Select signals on pins 71_72 */
1528 { 1528 {
1529 .modes = EXTENDED_MODE, 1529 .modes = EXTENDED_MODE,
1530 .muxregs = uart4_ext_71_72_muxreg, 1530 .muxregs = uart4_ext_71_72_muxreg,
1531 .nmuxregs = ARRAY_SIZE(uart4_ext_71_72_muxreg), 1531 .nmuxregs = ARRAY_SIZE(uart4_ext_71_72_muxreg),
1532 }, 1532 },
1533 }, { 1533 }, {
1534 /* Select signals on pins 92_93 */ 1534 /* Select signals on pins 92_93 */
1535 { 1535 {
1536 .modes = EXTENDED_MODE, 1536 .modes = EXTENDED_MODE,
1537 .muxregs = uart4_ext_92_93_muxreg, 1537 .muxregs = uart4_ext_92_93_muxreg,
1538 .nmuxregs = ARRAY_SIZE(uart4_ext_92_93_muxreg), 1538 .nmuxregs = ARRAY_SIZE(uart4_ext_92_93_muxreg),
1539 }, 1539 },
1540 }, { 1540 }, {
1541 /* Select signals on pins 100_101_ */ 1541 /* Select signals on pins 100_101_ */
1542 { 1542 {
1543 .modes = EXTENDED_MODE, 1543 .modes = EXTENDED_MODE,
1544 .muxregs = uart4_ext_100_101_muxreg, 1544 .muxregs = uart4_ext_100_101_muxreg,
1545 .nmuxregs = ARRAY_SIZE(uart4_ext_100_101_muxreg), 1545 .nmuxregs = ARRAY_SIZE(uart4_ext_100_101_muxreg),
1546 }, 1546 },
1547 }, 1547 },
1548 }; 1548 };
1549 1549
1550 static struct spear_pingroup uart4_pingroup[] = { 1550 static struct spear_pingroup uart4_pingroup[] = {
1551 { 1551 {
1552 .name = "uart4_6_7_grp", 1552 .name = "uart4_6_7_grp",
1553 .pins = uart4_pins[0], 1553 .pins = uart4_pins[0],
1554 .npins = ARRAY_SIZE(uart4_pins[0]), 1554 .npins = ARRAY_SIZE(uart4_pins[0]),
1555 .modemuxs = uart4_modemux[0], 1555 .modemuxs = uart4_modemux[0],
1556 .nmodemuxs = ARRAY_SIZE(uart4_modemux[0]), 1556 .nmodemuxs = ARRAY_SIZE(uart4_modemux[0]),
1557 }, { 1557 }, {
1558 .name = "uart4_13_14_grp", 1558 .name = "uart4_13_14_grp",
1559 .pins = uart4_pins[1], 1559 .pins = uart4_pins[1],
1560 .npins = ARRAY_SIZE(uart4_pins[1]), 1560 .npins = ARRAY_SIZE(uart4_pins[1]),
1561 .modemuxs = uart4_modemux[1], 1561 .modemuxs = uart4_modemux[1],
1562 .nmodemuxs = ARRAY_SIZE(uart4_modemux[1]), 1562 .nmodemuxs = ARRAY_SIZE(uart4_modemux[1]),
1563 }, { 1563 }, {
1564 .name = "uart4_39_40_grp", 1564 .name = "uart4_39_40_grp",
1565 .pins = uart4_pins[2], 1565 .pins = uart4_pins[2],
1566 .npins = ARRAY_SIZE(uart4_pins[2]), 1566 .npins = ARRAY_SIZE(uart4_pins[2]),
1567 .modemuxs = uart4_modemux[2], 1567 .modemuxs = uart4_modemux[2],
1568 .nmodemuxs = ARRAY_SIZE(uart4_modemux[2]), 1568 .nmodemuxs = ARRAY_SIZE(uart4_modemux[2]),
1569 }, { 1569 }, {
1570 .name = "uart4_71_72_grp", 1570 .name = "uart4_71_72_grp",
1571 .pins = uart4_pins[3], 1571 .pins = uart4_pins[3],
1572 .npins = ARRAY_SIZE(uart4_pins[3]), 1572 .npins = ARRAY_SIZE(uart4_pins[3]),
1573 .modemuxs = uart4_modemux[3], 1573 .modemuxs = uart4_modemux[3],
1574 .nmodemuxs = ARRAY_SIZE(uart4_modemux[3]), 1574 .nmodemuxs = ARRAY_SIZE(uart4_modemux[3]),
1575 }, { 1575 }, {
1576 .name = "uart4_92_93_grp", 1576 .name = "uart4_92_93_grp",
1577 .pins = uart4_pins[4], 1577 .pins = uart4_pins[4],
1578 .npins = ARRAY_SIZE(uart4_pins[4]), 1578 .npins = ARRAY_SIZE(uart4_pins[4]),
1579 .modemuxs = uart4_modemux[4], 1579 .modemuxs = uart4_modemux[4],
1580 .nmodemuxs = ARRAY_SIZE(uart4_modemux[4]), 1580 .nmodemuxs = ARRAY_SIZE(uart4_modemux[4]),
1581 }, { 1581 }, {
1582 .name = "uart4_100_101_grp", 1582 .name = "uart4_100_101_grp",
1583 .pins = uart4_pins[5], 1583 .pins = uart4_pins[5],
1584 .npins = ARRAY_SIZE(uart4_pins[5]), 1584 .npins = ARRAY_SIZE(uart4_pins[5]),
1585 .modemuxs = uart4_modemux[5], 1585 .modemuxs = uart4_modemux[5],
1586 .nmodemuxs = ARRAY_SIZE(uart4_modemux[5]), 1586 .nmodemuxs = ARRAY_SIZE(uart4_modemux[5]),
1587 }, 1587 },
1588 }; 1588 };
1589 1589
1590 static const char *const uart4_grps[] = { "uart4_6_7_grp", "uart4_13_14_grp", 1590 static const char *const uart4_grps[] = { "uart4_6_7_grp", "uart4_13_14_grp",
1591 "uart4_39_40_grp", "uart4_71_72_grp", "uart4_92_93_grp", 1591 "uart4_39_40_grp", "uart4_71_72_grp", "uart4_92_93_grp",
1592 "uart4_100_101_grp" }; 1592 "uart4_100_101_grp" };
1593 1593
1594 static struct spear_function uart4_function = { 1594 static struct spear_function uart4_function = {
1595 .name = "uart4", 1595 .name = "uart4",
1596 .groups = uart4_grps, 1596 .groups = uart4_grps,
1597 .ngroups = ARRAY_SIZE(uart4_grps), 1597 .ngroups = ARRAY_SIZE(uart4_grps),
1598 }; 1598 };
1599 1599
1600 /* Pad multiplexing for uart5 device */ 1600 /* Pad multiplexing for uart5 device */
1601 static const unsigned uart5_pins[][2] = { { 4, 5 }, { 37, 38 }, { 69, 70 }, 1601 static const unsigned uart5_pins[][2] = { { 4, 5 }, { 37, 38 }, { 69, 70 },
1602 { 90, 91 } }; 1602 { 90, 91 } };
1603 1603
1604 static struct spear_muxreg uart5_ext_4_5_muxreg[] = { 1604 static struct spear_muxreg uart5_ext_4_5_muxreg[] = {
1605 { 1605 {
1606 .reg = PMX_CONFIG_REG, 1606 .reg = PMX_CONFIG_REG,
1607 .mask = PMX_I2C_MASK, 1607 .mask = PMX_I2C_MASK,
1608 .val = 0, 1608 .val = 0,
1609 }, { 1609 }, {
1610 .reg = IP_SEL_PAD_0_9_REG, 1610 .reg = IP_SEL_PAD_0_9_REG,
1611 .mask = PMX_PL_4_5_MASK, 1611 .mask = PMX_PL_4_5_MASK,
1612 .val = PMX_UART5_PL_4_5_VAL, 1612 .val = PMX_UART5_PL_4_5_VAL,
1613 }, { 1613 }, {
1614 .reg = IP_SEL_MIX_PAD_REG, 1614 .reg = IP_SEL_MIX_PAD_REG,
1615 .mask = PMX_UART5_PORT_SEL_MASK, 1615 .mask = PMX_UART5_PORT_SEL_MASK,
1616 .val = PMX_UART5_PORT_4_VAL, 1616 .val = PMX_UART5_PORT_4_VAL,
1617 }, 1617 },
1618 }; 1618 };
1619 1619
1620 static struct spear_muxreg uart5_ext_37_38_muxreg[] = { 1620 static struct spear_muxreg uart5_ext_37_38_muxreg[] = {
1621 { 1621 {
1622 .reg = PMX_CONFIG_REG, 1622 .reg = PMX_CONFIG_REG,
1623 .mask = PMX_UART0_MODEM_MASK, 1623 .mask = PMX_UART0_MODEM_MASK,
1624 .val = 0, 1624 .val = 0,
1625 }, { 1625 }, {
1626 .reg = IP_SEL_PAD_30_39_REG, 1626 .reg = IP_SEL_PAD_30_39_REG,
1627 .mask = PMX_PL_37_38_MASK, 1627 .mask = PMX_PL_37_38_MASK,
1628 .val = PMX_UART5_PL_37_38_VAL, 1628 .val = PMX_UART5_PL_37_38_VAL,
1629 }, { 1629 }, {
1630 .reg = IP_SEL_MIX_PAD_REG, 1630 .reg = IP_SEL_MIX_PAD_REG,
1631 .mask = PMX_UART5_PORT_SEL_MASK, 1631 .mask = PMX_UART5_PORT_SEL_MASK,
1632 .val = PMX_UART5_PORT_37_VAL, 1632 .val = PMX_UART5_PORT_37_VAL,
1633 }, 1633 },
1634 }; 1634 };
1635 1635
1636 static struct spear_muxreg uart5_ext_69_70_muxreg[] = { 1636 static struct spear_muxreg uart5_ext_69_70_muxreg[] = {
1637 { 1637 {
1638 .reg = IP_SEL_PAD_60_69_REG, 1638 .reg = IP_SEL_PAD_60_69_REG,
1639 .mask = PMX_PL_69_MASK, 1639 .mask = PMX_PL_69_MASK,
1640 .val = PMX_UART5_PL_69_VAL, 1640 .val = PMX_UART5_PL_69_VAL,
1641 }, { 1641 }, {
1642 .reg = IP_SEL_PAD_70_79_REG, 1642 .reg = IP_SEL_PAD_70_79_REG,
1643 .mask = PMX_PL_70_MASK, 1643 .mask = PMX_PL_70_MASK,
1644 .val = PMX_UART5_PL_70_VAL, 1644 .val = PMX_UART5_PL_70_VAL,
1645 }, { 1645 }, {
1646 .reg = IP_SEL_MIX_PAD_REG, 1646 .reg = IP_SEL_MIX_PAD_REG,
1647 .mask = PMX_UART5_PORT_SEL_MASK, 1647 .mask = PMX_UART5_PORT_SEL_MASK,
1648 .val = PMX_UART5_PORT_69_VAL, 1648 .val = PMX_UART5_PORT_69_VAL,
1649 }, 1649 },
1650 }; 1650 };
1651 1651
1652 static struct spear_muxreg uart5_ext_90_91_muxreg[] = { 1652 static struct spear_muxreg uart5_ext_90_91_muxreg[] = {
1653 { 1653 {
1654 .reg = IP_SEL_PAD_90_99_REG, 1654 .reg = IP_SEL_PAD_90_99_REG,
1655 .mask = PMX_PL_90_91_MASK, 1655 .mask = PMX_PL_90_91_MASK,
1656 .val = PMX_UART5_PL_90_91_VAL, 1656 .val = PMX_UART5_PL_90_91_VAL,
1657 }, { 1657 }, {
1658 .reg = IP_SEL_MIX_PAD_REG, 1658 .reg = IP_SEL_MIX_PAD_REG,
1659 .mask = PMX_UART5_PORT_SEL_MASK, 1659 .mask = PMX_UART5_PORT_SEL_MASK,
1660 .val = PMX_UART5_PORT_90_VAL, 1660 .val = PMX_UART5_PORT_90_VAL,
1661 }, 1661 },
1662 }; 1662 };
1663 1663
1664 static struct spear_modemux uart5_modemux[][1] = { 1664 static struct spear_modemux uart5_modemux[][1] = {
1665 { 1665 {
1666 /* Select signals on pins 4_5 */ 1666 /* Select signals on pins 4_5 */
1667 { 1667 {
1668 .modes = EXTENDED_MODE, 1668 .modes = EXTENDED_MODE,
1669 .muxregs = uart5_ext_4_5_muxreg, 1669 .muxregs = uart5_ext_4_5_muxreg,
1670 .nmuxregs = ARRAY_SIZE(uart5_ext_4_5_muxreg), 1670 .nmuxregs = ARRAY_SIZE(uart5_ext_4_5_muxreg),
1671 }, 1671 },
1672 }, { 1672 }, {
1673 /* Select signals on pins 37_38 */ 1673 /* Select signals on pins 37_38 */
1674 { 1674 {
1675 .modes = EXTENDED_MODE, 1675 .modes = EXTENDED_MODE,
1676 .muxregs = uart5_ext_37_38_muxreg, 1676 .muxregs = uart5_ext_37_38_muxreg,
1677 .nmuxregs = ARRAY_SIZE(uart5_ext_37_38_muxreg), 1677 .nmuxregs = ARRAY_SIZE(uart5_ext_37_38_muxreg),
1678 }, 1678 },
1679 }, { 1679 }, {
1680 /* Select signals on pins 69_70 */ 1680 /* Select signals on pins 69_70 */
1681 { 1681 {
1682 .modes = EXTENDED_MODE, 1682 .modes = EXTENDED_MODE,
1683 .muxregs = uart5_ext_69_70_muxreg, 1683 .muxregs = uart5_ext_69_70_muxreg,
1684 .nmuxregs = ARRAY_SIZE(uart5_ext_69_70_muxreg), 1684 .nmuxregs = ARRAY_SIZE(uart5_ext_69_70_muxreg),
1685 }, 1685 },
1686 }, { 1686 }, {
1687 /* Select signals on pins 90_91 */ 1687 /* Select signals on pins 90_91 */
1688 { 1688 {
1689 .modes = EXTENDED_MODE, 1689 .modes = EXTENDED_MODE,
1690 .muxregs = uart5_ext_90_91_muxreg, 1690 .muxregs = uart5_ext_90_91_muxreg,
1691 .nmuxregs = ARRAY_SIZE(uart5_ext_90_91_muxreg), 1691 .nmuxregs = ARRAY_SIZE(uart5_ext_90_91_muxreg),
1692 }, 1692 },
1693 }, 1693 },
1694 }; 1694 };
1695 1695
1696 static struct spear_pingroup uart5_pingroup[] = { 1696 static struct spear_pingroup uart5_pingroup[] = {
1697 { 1697 {
1698 .name = "uart5_4_5_grp", 1698 .name = "uart5_4_5_grp",
1699 .pins = uart5_pins[0], 1699 .pins = uart5_pins[0],
1700 .npins = ARRAY_SIZE(uart5_pins[0]), 1700 .npins = ARRAY_SIZE(uart5_pins[0]),
1701 .modemuxs = uart5_modemux[0], 1701 .modemuxs = uart5_modemux[0],
1702 .nmodemuxs = ARRAY_SIZE(uart5_modemux[0]), 1702 .nmodemuxs = ARRAY_SIZE(uart5_modemux[0]),
1703 }, { 1703 }, {
1704 .name = "uart5_37_38_grp", 1704 .name = "uart5_37_38_grp",
1705 .pins = uart5_pins[1], 1705 .pins = uart5_pins[1],
1706 .npins = ARRAY_SIZE(uart5_pins[1]), 1706 .npins = ARRAY_SIZE(uart5_pins[1]),
1707 .modemuxs = uart5_modemux[1], 1707 .modemuxs = uart5_modemux[1],
1708 .nmodemuxs = ARRAY_SIZE(uart5_modemux[1]), 1708 .nmodemuxs = ARRAY_SIZE(uart5_modemux[1]),
1709 }, { 1709 }, {
1710 .name = "uart5_69_70_grp", 1710 .name = "uart5_69_70_grp",
1711 .pins = uart5_pins[2], 1711 .pins = uart5_pins[2],
1712 .npins = ARRAY_SIZE(uart5_pins[2]), 1712 .npins = ARRAY_SIZE(uart5_pins[2]),
1713 .modemuxs = uart5_modemux[2], 1713 .modemuxs = uart5_modemux[2],
1714 .nmodemuxs = ARRAY_SIZE(uart5_modemux[2]), 1714 .nmodemuxs = ARRAY_SIZE(uart5_modemux[2]),
1715 }, { 1715 }, {
1716 .name = "uart5_90_91_grp", 1716 .name = "uart5_90_91_grp",
1717 .pins = uart5_pins[3], 1717 .pins = uart5_pins[3],
1718 .npins = ARRAY_SIZE(uart5_pins[3]), 1718 .npins = ARRAY_SIZE(uart5_pins[3]),
1719 .modemuxs = uart5_modemux[3], 1719 .modemuxs = uart5_modemux[3],
1720 .nmodemuxs = ARRAY_SIZE(uart5_modemux[3]), 1720 .nmodemuxs = ARRAY_SIZE(uart5_modemux[3]),
1721 }, 1721 },
1722 }; 1722 };
1723 1723
1724 static const char *const uart5_grps[] = { "uart5_4_5_grp", "uart5_37_38_grp", 1724 static const char *const uart5_grps[] = { "uart5_4_5_grp", "uart5_37_38_grp",
1725 "uart5_69_70_grp", "uart5_90_91_grp" }; 1725 "uart5_69_70_grp", "uart5_90_91_grp" };
1726 static struct spear_function uart5_function = { 1726 static struct spear_function uart5_function = {
1727 .name = "uart5", 1727 .name = "uart5",
1728 .groups = uart5_grps, 1728 .groups = uart5_grps,
1729 .ngroups = ARRAY_SIZE(uart5_grps), 1729 .ngroups = ARRAY_SIZE(uart5_grps),
1730 }; 1730 };
1731 1731
1732 /* Pad multiplexing for uart6 device */ 1732 /* Pad multiplexing for uart6 device */
1733 static const unsigned uart6_pins[][2] = { { 2, 3 }, { 88, 89 } }; 1733 static const unsigned uart6_pins[][2] = { { 2, 3 }, { 88, 89 } };
1734 static struct spear_muxreg uart6_ext_2_3_muxreg[] = { 1734 static struct spear_muxreg uart6_ext_2_3_muxreg[] = {
1735 { 1735 {
1736 .reg = PMX_CONFIG_REG, 1736 .reg = PMX_CONFIG_REG,
1737 .mask = PMX_UART0_MASK, 1737 .mask = PMX_UART0_MASK,
1738 .val = 0, 1738 .val = 0,
1739 }, { 1739 }, {
1740 .reg = IP_SEL_PAD_0_9_REG, 1740 .reg = IP_SEL_PAD_0_9_REG,
1741 .mask = PMX_PL_2_3_MASK, 1741 .mask = PMX_PL_2_3_MASK,
1742 .val = PMX_UART6_PL_2_3_VAL, 1742 .val = PMX_UART6_PL_2_3_VAL,
1743 }, { 1743 }, {
1744 .reg = IP_SEL_MIX_PAD_REG, 1744 .reg = IP_SEL_MIX_PAD_REG,
1745 .mask = PMX_UART6_PORT_SEL_MASK, 1745 .mask = PMX_UART6_PORT_SEL_MASK,
1746 .val = PMX_UART6_PORT_2_VAL, 1746 .val = PMX_UART6_PORT_2_VAL,
1747 }, 1747 },
1748 }; 1748 };
1749 1749
1750 static struct spear_muxreg uart6_ext_88_89_muxreg[] = { 1750 static struct spear_muxreg uart6_ext_88_89_muxreg[] = {
1751 { 1751 {
1752 .reg = IP_SEL_PAD_80_89_REG, 1752 .reg = IP_SEL_PAD_80_89_REG,
1753 .mask = PMX_PL_88_89_MASK, 1753 .mask = PMX_PL_88_89_MASK,
1754 .val = PMX_UART6_PL_88_89_VAL, 1754 .val = PMX_UART6_PL_88_89_VAL,
1755 }, { 1755 }, {
1756 .reg = IP_SEL_MIX_PAD_REG, 1756 .reg = IP_SEL_MIX_PAD_REG,
1757 .mask = PMX_UART6_PORT_SEL_MASK, 1757 .mask = PMX_UART6_PORT_SEL_MASK,
1758 .val = PMX_UART6_PORT_88_VAL, 1758 .val = PMX_UART6_PORT_88_VAL,
1759 }, 1759 },
1760 }; 1760 };
1761 1761
1762 static struct spear_modemux uart6_modemux[][1] = { 1762 static struct spear_modemux uart6_modemux[][1] = {
1763 { 1763 {
1764 /* Select signals on pins 2_3 */ 1764 /* Select signals on pins 2_3 */
1765 { 1765 {
1766 .modes = EXTENDED_MODE, 1766 .modes = EXTENDED_MODE,
1767 .muxregs = uart6_ext_2_3_muxreg, 1767 .muxregs = uart6_ext_2_3_muxreg,
1768 .nmuxregs = ARRAY_SIZE(uart6_ext_2_3_muxreg), 1768 .nmuxregs = ARRAY_SIZE(uart6_ext_2_3_muxreg),
1769 }, 1769 },
1770 }, { 1770 }, {
1771 /* Select signals on pins 88_89 */ 1771 /* Select signals on pins 88_89 */
1772 { 1772 {
1773 .modes = EXTENDED_MODE, 1773 .modes = EXTENDED_MODE,
1774 .muxregs = uart6_ext_88_89_muxreg, 1774 .muxregs = uart6_ext_88_89_muxreg,
1775 .nmuxregs = ARRAY_SIZE(uart6_ext_88_89_muxreg), 1775 .nmuxregs = ARRAY_SIZE(uart6_ext_88_89_muxreg),
1776 }, 1776 },
1777 }, 1777 },
1778 }; 1778 };
1779 1779
1780 static struct spear_pingroup uart6_pingroup[] = { 1780 static struct spear_pingroup uart6_pingroup[] = {
1781 { 1781 {
1782 .name = "uart6_2_3_grp", 1782 .name = "uart6_2_3_grp",
1783 .pins = uart6_pins[0], 1783 .pins = uart6_pins[0],
1784 .npins = ARRAY_SIZE(uart6_pins[0]), 1784 .npins = ARRAY_SIZE(uart6_pins[0]),
1785 .modemuxs = uart6_modemux[0], 1785 .modemuxs = uart6_modemux[0],
1786 .nmodemuxs = ARRAY_SIZE(uart6_modemux[0]), 1786 .nmodemuxs = ARRAY_SIZE(uart6_modemux[0]),
1787 }, { 1787 }, {
1788 .name = "uart6_88_89_grp", 1788 .name = "uart6_88_89_grp",
1789 .pins = uart6_pins[1], 1789 .pins = uart6_pins[1],
1790 .npins = ARRAY_SIZE(uart6_pins[1]), 1790 .npins = ARRAY_SIZE(uart6_pins[1]),
1791 .modemuxs = uart6_modemux[1], 1791 .modemuxs = uart6_modemux[1],
1792 .nmodemuxs = ARRAY_SIZE(uart6_modemux[1]), 1792 .nmodemuxs = ARRAY_SIZE(uart6_modemux[1]),
1793 }, 1793 },
1794 }; 1794 };
1795 1795
1796 static const char *const uart6_grps[] = { "uart6_2_3_grp", "uart6_88_89_grp" }; 1796 static const char *const uart6_grps[] = { "uart6_2_3_grp", "uart6_88_89_grp" };
1797 static struct spear_function uart6_function = { 1797 static struct spear_function uart6_function = {
1798 .name = "uart6", 1798 .name = "uart6",
1799 .groups = uart6_grps, 1799 .groups = uart6_grps,
1800 .ngroups = ARRAY_SIZE(uart6_grps), 1800 .ngroups = ARRAY_SIZE(uart6_grps),
1801 }; 1801 };
1802 1802
1803 /* UART - RS485 pmx */ 1803 /* UART - RS485 pmx */
1804 static const unsigned rs485_pins[] = { 77, 78, 79 }; 1804 static const unsigned rs485_pins[] = { 77, 78, 79 };
1805 static struct spear_muxreg rs485_muxreg[] = { 1805 static struct spear_muxreg rs485_muxreg[] = {
1806 { 1806 {
1807 .reg = IP_SEL_PAD_70_79_REG, 1807 .reg = IP_SEL_PAD_70_79_REG,
1808 .mask = PMX_PL_77_78_79_MASK, 1808 .mask = PMX_PL_77_78_79_MASK,
1809 .val = PMX_RS485_PL_77_78_79_VAL, 1809 .val = PMX_RS485_PL_77_78_79_VAL,
1810 }, 1810 },
1811 }; 1811 };
1812 1812
1813 static struct spear_modemux rs485_modemux[] = { 1813 static struct spear_modemux rs485_modemux[] = {
1814 { 1814 {
1815 .modes = EXTENDED_MODE, 1815 .modes = EXTENDED_MODE,
1816 .muxregs = rs485_muxreg, 1816 .muxregs = rs485_muxreg,
1817 .nmuxregs = ARRAY_SIZE(rs485_muxreg), 1817 .nmuxregs = ARRAY_SIZE(rs485_muxreg),
1818 }, 1818 },
1819 }; 1819 };
1820 1820
1821 static struct spear_pingroup rs485_pingroup = { 1821 static struct spear_pingroup rs485_pingroup = {
1822 .name = "rs485_grp", 1822 .name = "rs485_grp",
1823 .pins = rs485_pins, 1823 .pins = rs485_pins,
1824 .npins = ARRAY_SIZE(rs485_pins), 1824 .npins = ARRAY_SIZE(rs485_pins),
1825 .modemuxs = rs485_modemux, 1825 .modemuxs = rs485_modemux,
1826 .nmodemuxs = ARRAY_SIZE(rs485_modemux), 1826 .nmodemuxs = ARRAY_SIZE(rs485_modemux),
1827 }; 1827 };
1828 1828
1829 static const char *const rs485_grps[] = { "rs485_grp" }; 1829 static const char *const rs485_grps[] = { "rs485_grp" };
1830 static struct spear_function rs485_function = { 1830 static struct spear_function rs485_function = {
1831 .name = "rs485", 1831 .name = "rs485",
1832 .groups = rs485_grps, 1832 .groups = rs485_grps,
1833 .ngroups = ARRAY_SIZE(rs485_grps), 1833 .ngroups = ARRAY_SIZE(rs485_grps),
1834 }; 1834 };
1835 1835
1836 /* Pad multiplexing for Touchscreen device */ 1836 /* Pad multiplexing for Touchscreen device */
1837 static const unsigned touchscreen_pins[] = { 5, 36 }; 1837 static const unsigned touchscreen_pins[] = { 5, 36 };
1838 static struct spear_muxreg touchscreen_muxreg[] = { 1838 static struct spear_muxreg touchscreen_muxreg[] = {
1839 { 1839 {
1840 .reg = PMX_CONFIG_REG, 1840 .reg = PMX_CONFIG_REG,
1841 .mask = PMX_I2C_MASK | PMX_SSP_CS_MASK, 1841 .mask = PMX_I2C_MASK | PMX_SSP_CS_MASK,
1842 .val = 0, 1842 .val = 0,
1843 }, 1843 },
1844 }; 1844 };
1845 1845
1846 static struct spear_muxreg touchscreen_ext_muxreg[] = { 1846 static struct spear_muxreg touchscreen_ext_muxreg[] = {
1847 { 1847 {
1848 .reg = IP_SEL_PAD_0_9_REG, 1848 .reg = IP_SEL_PAD_0_9_REG,
1849 .mask = PMX_PL_5_MASK, 1849 .mask = PMX_PL_5_MASK,
1850 .val = PMX_TOUCH_Y_PL_5_VAL, 1850 .val = PMX_TOUCH_Y_PL_5_VAL,
1851 }, { 1851 }, {
1852 .reg = IP_SEL_PAD_30_39_REG, 1852 .reg = IP_SEL_PAD_30_39_REG,
1853 .mask = PMX_PL_36_MASK, 1853 .mask = PMX_PL_36_MASK,
1854 .val = PMX_TOUCH_X_PL_36_VAL, 1854 .val = PMX_TOUCH_X_PL_36_VAL,
1855 }, 1855 },
1856 }; 1856 };
1857 1857
1858 static struct spear_modemux touchscreen_modemux[] = { 1858 static struct spear_modemux touchscreen_modemux[] = {
1859 { 1859 {
1860 .modes = AUTO_NET_SMII_MODE | EXTENDED_MODE, 1860 .modes = AUTO_NET_SMII_MODE | EXTENDED_MODE,
1861 .muxregs = touchscreen_muxreg, 1861 .muxregs = touchscreen_muxreg,
1862 .nmuxregs = ARRAY_SIZE(touchscreen_muxreg), 1862 .nmuxregs = ARRAY_SIZE(touchscreen_muxreg),
1863 }, { 1863 }, {
1864 .modes = EXTENDED_MODE, 1864 .modes = EXTENDED_MODE,
1865 .muxregs = touchscreen_ext_muxreg, 1865 .muxregs = touchscreen_ext_muxreg,
1866 .nmuxregs = ARRAY_SIZE(touchscreen_ext_muxreg), 1866 .nmuxregs = ARRAY_SIZE(touchscreen_ext_muxreg),
1867 }, 1867 },
1868 }; 1868 };
1869 1869
1870 static struct spear_pingroup touchscreen_pingroup = { 1870 static struct spear_pingroup touchscreen_pingroup = {
1871 .name = "touchscreen_grp", 1871 .name = "touchscreen_grp",
1872 .pins = touchscreen_pins, 1872 .pins = touchscreen_pins,
1873 .npins = ARRAY_SIZE(touchscreen_pins), 1873 .npins = ARRAY_SIZE(touchscreen_pins),
1874 .modemuxs = touchscreen_modemux, 1874 .modemuxs = touchscreen_modemux,
1875 .nmodemuxs = ARRAY_SIZE(touchscreen_modemux), 1875 .nmodemuxs = ARRAY_SIZE(touchscreen_modemux),
1876 }; 1876 };
1877 1877
1878 static const char *const touchscreen_grps[] = { "touchscreen_grp" }; 1878 static const char *const touchscreen_grps[] = { "touchscreen_grp" };
1879 static struct spear_function touchscreen_function = { 1879 static struct spear_function touchscreen_function = {
1880 .name = "touchscreen", 1880 .name = "touchscreen",
1881 .groups = touchscreen_grps, 1881 .groups = touchscreen_grps,
1882 .ngroups = ARRAY_SIZE(touchscreen_grps), 1882 .ngroups = ARRAY_SIZE(touchscreen_grps),
1883 }; 1883 };
1884 1884
1885 /* Pad multiplexing for CAN device */ 1885 /* Pad multiplexing for CAN device */
1886 static const unsigned can0_pins[] = { 32, 33 }; 1886 static const unsigned can0_pins[] = { 32, 33 };
1887 static struct spear_muxreg can0_muxreg[] = { 1887 static struct spear_muxreg can0_muxreg[] = {
1888 { 1888 {
1889 .reg = PMX_CONFIG_REG, 1889 .reg = PMX_CONFIG_REG,
1890 .mask = PMX_GPIO_PIN4_MASK | PMX_GPIO_PIN5_MASK, 1890 .mask = PMX_GPIO_PIN4_MASK | PMX_GPIO_PIN5_MASK,
1891 .val = 0, 1891 .val = 0,
1892 }, 1892 },
1893 }; 1893 };
1894 1894
1895 static struct spear_muxreg can0_ext_muxreg[] = { 1895 static struct spear_muxreg can0_ext_muxreg[] = {
1896 { 1896 {
1897 .reg = IP_SEL_PAD_30_39_REG, 1897 .reg = IP_SEL_PAD_30_39_REG,
1898 .mask = PMX_PL_32_33_MASK, 1898 .mask = PMX_PL_32_33_MASK,
1899 .val = PMX_CAN0_PL_32_33_VAL, 1899 .val = PMX_CAN0_PL_32_33_VAL,
1900 }, 1900 },
1901 }; 1901 };
1902 1902
1903 static struct spear_modemux can0_modemux[] = { 1903 static struct spear_modemux can0_modemux[] = {
1904 { 1904 {
1905 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | AUTO_EXP_MODE 1905 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | AUTO_EXP_MODE
1906 | EXTENDED_MODE, 1906 | EXTENDED_MODE,
1907 .muxregs = can0_muxreg, 1907 .muxregs = can0_muxreg,
1908 .nmuxregs = ARRAY_SIZE(can0_muxreg), 1908 .nmuxregs = ARRAY_SIZE(can0_muxreg),
1909 }, { 1909 }, {
1910 .modes = EXTENDED_MODE, 1910 .modes = EXTENDED_MODE,
1911 .muxregs = can0_ext_muxreg, 1911 .muxregs = can0_ext_muxreg,
1912 .nmuxregs = ARRAY_SIZE(can0_ext_muxreg), 1912 .nmuxregs = ARRAY_SIZE(can0_ext_muxreg),
1913 }, 1913 },
1914 }; 1914 };
1915 1915
1916 static struct spear_pingroup can0_pingroup = { 1916 static struct spear_pingroup can0_pingroup = {
1917 .name = "can0_grp", 1917 .name = "can0_grp",
1918 .pins = can0_pins, 1918 .pins = can0_pins,
1919 .npins = ARRAY_SIZE(can0_pins), 1919 .npins = ARRAY_SIZE(can0_pins),
1920 .modemuxs = can0_modemux, 1920 .modemuxs = can0_modemux,
1921 .nmodemuxs = ARRAY_SIZE(can0_modemux), 1921 .nmodemuxs = ARRAY_SIZE(can0_modemux),
1922 }; 1922 };
1923 1923
1924 static const char *const can0_grps[] = { "can0_grp" }; 1924 static const char *const can0_grps[] = { "can0_grp" };
1925 static struct spear_function can0_function = { 1925 static struct spear_function can0_function = {
1926 .name = "can0", 1926 .name = "can0",
1927 .groups = can0_grps, 1927 .groups = can0_grps,
1928 .ngroups = ARRAY_SIZE(can0_grps), 1928 .ngroups = ARRAY_SIZE(can0_grps),
1929 }; 1929 };
1930 1930
1931 static const unsigned can1_pins[] = { 30, 31 }; 1931 static const unsigned can1_pins[] = { 30, 31 };
1932 static struct spear_muxreg can1_muxreg[] = { 1932 static struct spear_muxreg can1_muxreg[] = {
1933 { 1933 {
1934 .reg = PMX_CONFIG_REG, 1934 .reg = PMX_CONFIG_REG,
1935 .mask = PMX_GPIO_PIN2_MASK | PMX_GPIO_PIN3_MASK, 1935 .mask = PMX_GPIO_PIN2_MASK | PMX_GPIO_PIN3_MASK,
1936 .val = 0, 1936 .val = 0,
1937 }, 1937 },
1938 }; 1938 };
1939 1939
1940 static struct spear_muxreg can1_ext_muxreg[] = { 1940 static struct spear_muxreg can1_ext_muxreg[] = {
1941 { 1941 {
1942 .reg = IP_SEL_PAD_30_39_REG, 1942 .reg = IP_SEL_PAD_30_39_REG,
1943 .mask = PMX_PL_30_31_MASK, 1943 .mask = PMX_PL_30_31_MASK,
1944 .val = PMX_CAN1_PL_30_31_VAL, 1944 .val = PMX_CAN1_PL_30_31_VAL,
1945 }, 1945 },
1946 }; 1946 };
1947 1947
1948 static struct spear_modemux can1_modemux[] = { 1948 static struct spear_modemux can1_modemux[] = {
1949 { 1949 {
1950 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | AUTO_EXP_MODE 1950 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | AUTO_EXP_MODE
1951 | EXTENDED_MODE, 1951 | EXTENDED_MODE,
1952 .muxregs = can1_muxreg, 1952 .muxregs = can1_muxreg,
1953 .nmuxregs = ARRAY_SIZE(can1_muxreg), 1953 .nmuxregs = ARRAY_SIZE(can1_muxreg),
1954 }, { 1954 }, {
1955 .modes = EXTENDED_MODE, 1955 .modes = EXTENDED_MODE,
1956 .muxregs = can1_ext_muxreg, 1956 .muxregs = can1_ext_muxreg,
1957 .nmuxregs = ARRAY_SIZE(can1_ext_muxreg), 1957 .nmuxregs = ARRAY_SIZE(can1_ext_muxreg),
1958 }, 1958 },
1959 }; 1959 };
1960 1960
1961 static struct spear_pingroup can1_pingroup = { 1961 static struct spear_pingroup can1_pingroup = {
1962 .name = "can1_grp", 1962 .name = "can1_grp",
1963 .pins = can1_pins, 1963 .pins = can1_pins,
1964 .npins = ARRAY_SIZE(can1_pins), 1964 .npins = ARRAY_SIZE(can1_pins),
1965 .modemuxs = can1_modemux, 1965 .modemuxs = can1_modemux,
1966 .nmodemuxs = ARRAY_SIZE(can1_modemux), 1966 .nmodemuxs = ARRAY_SIZE(can1_modemux),
1967 }; 1967 };
1968 1968
1969 static const char *const can1_grps[] = { "can1_grp" }; 1969 static const char *const can1_grps[] = { "can1_grp" };
1970 static struct spear_function can1_function = { 1970 static struct spear_function can1_function = {
1971 .name = "can1", 1971 .name = "can1",
1972 .groups = can1_grps, 1972 .groups = can1_grps,
1973 .ngroups = ARRAY_SIZE(can1_grps), 1973 .ngroups = ARRAY_SIZE(can1_grps),
1974 }; 1974 };
1975 1975
1976 /* Pad multiplexing for PWM0_1 device */ 1976 /* Pad multiplexing for PWM0_1 device */
1977 static const unsigned pwm0_1_pins[][2] = { { 37, 38 }, { 14, 15 }, { 8, 9 }, 1977 static const unsigned pwm0_1_pins[][2] = { { 37, 38 }, { 14, 15 }, { 8, 9 },
1978 { 30, 31 }, { 42, 43 }, { 59, 60 }, { 88, 89 } }; 1978 { 30, 31 }, { 42, 43 }, { 59, 60 }, { 88, 89 } };
1979 1979
1980 static struct spear_muxreg pwm0_1_pin_8_9_muxreg[] = { 1980 static struct spear_muxreg pwm0_1_pin_8_9_muxreg[] = {
1981 { 1981 {
1982 .reg = PMX_CONFIG_REG, 1982 .reg = PMX_CONFIG_REG,
1983 .mask = PMX_SSP_MASK, 1983 .mask = PMX_SSP_MASK,
1984 .val = 0, 1984 .val = 0,
1985 }, { 1985 }, {
1986 .reg = IP_SEL_PAD_0_9_REG, 1986 .reg = IP_SEL_PAD_0_9_REG,
1987 .mask = PMX_PL_8_9_MASK, 1987 .mask = PMX_PL_8_9_MASK,
1988 .val = PMX_PWM_0_1_PL_8_9_VAL, 1988 .val = PMX_PWM_0_1_PL_8_9_VAL,
1989 }, 1989 },
1990 }; 1990 };
1991 1991
1992 static struct spear_muxreg pwm0_1_autoexpsmallpri_muxreg[] = { 1992 static struct spear_muxreg pwm0_1_autoexpsmallpri_muxreg[] = {
1993 { 1993 {
1994 .reg = PMX_CONFIG_REG, 1994 .reg = PMX_CONFIG_REG,
1995 .mask = PMX_MII_MASK, 1995 .mask = PMX_MII_MASK,
1996 .val = 0, 1996 .val = 0,
1997 }, 1997 },
1998 }; 1998 };
1999 1999
2000 static struct spear_muxreg pwm0_1_pin_14_15_muxreg[] = { 2000 static struct spear_muxreg pwm0_1_pin_14_15_muxreg[] = {
2001 { 2001 {
2002 .reg = IP_SEL_PAD_10_19_REG, 2002 .reg = IP_SEL_PAD_10_19_REG,
2003 .mask = PMX_PL_14_MASK | PMX_PL_15_MASK, 2003 .mask = PMX_PL_14_MASK | PMX_PL_15_MASK,
2004 .val = PMX_PWM1_PL_14_VAL | PMX_PWM0_PL_15_VAL, 2004 .val = PMX_PWM1_PL_14_VAL | PMX_PWM0_PL_15_VAL,
2005 }, 2005 },
2006 }; 2006 };
2007 2007
2008 static struct spear_muxreg pwm0_1_pin_30_31_muxreg[] = { 2008 static struct spear_muxreg pwm0_1_pin_30_31_muxreg[] = {
2009 { 2009 {
2010 .reg = PMX_CONFIG_REG, 2010 .reg = PMX_CONFIG_REG,
2011 .mask = PMX_GPIO_PIN2_MASK | PMX_GPIO_PIN3_MASK, 2011 .mask = PMX_GPIO_PIN2_MASK | PMX_GPIO_PIN3_MASK,
2012 .val = 0, 2012 .val = 0,
2013 }, { 2013 }, {
2014 .reg = IP_SEL_PAD_30_39_REG, 2014 .reg = IP_SEL_PAD_30_39_REG,
2015 .mask = PMX_PL_30_MASK | PMX_PL_31_MASK, 2015 .mask = PMX_PL_30_MASK | PMX_PL_31_MASK,
2016 .val = PMX_PWM1_EXT_PL_30_VAL | PMX_PWM0_EXT_PL_31_VAL, 2016 .val = PMX_PWM1_EXT_PL_30_VAL | PMX_PWM0_EXT_PL_31_VAL,
2017 }, 2017 },
2018 }; 2018 };
2019 2019
2020 static struct spear_muxreg pwm0_1_net_muxreg[] = { 2020 static struct spear_muxreg pwm0_1_net_muxreg[] = {
2021 { 2021 {
2022 .reg = PMX_CONFIG_REG, 2022 .reg = PMX_CONFIG_REG,
2023 .mask = PMX_UART0_MODEM_MASK, 2023 .mask = PMX_UART0_MODEM_MASK,
2024 .val = 0, 2024 .val = 0,
2025 }, 2025 },
2026 }; 2026 };
2027 2027
2028 static struct spear_muxreg pwm0_1_pin_37_38_muxreg[] = { 2028 static struct spear_muxreg pwm0_1_pin_37_38_muxreg[] = {
2029 { 2029 {
2030 .reg = IP_SEL_PAD_30_39_REG, 2030 .reg = IP_SEL_PAD_30_39_REG,
2031 .mask = PMX_PL_37_38_MASK, 2031 .mask = PMX_PL_37_38_MASK,
2032 .val = PMX_PWM0_1_PL_37_38_VAL, 2032 .val = PMX_PWM0_1_PL_37_38_VAL,
2033 }, 2033 },
2034 }; 2034 };
2035 2035
2036 static struct spear_muxreg pwm0_1_pin_42_43_muxreg[] = { 2036 static struct spear_muxreg pwm0_1_pin_42_43_muxreg[] = {
2037 { 2037 {
2038 .reg = PMX_CONFIG_REG, 2038 .reg = PMX_CONFIG_REG,
2039 .mask = PMX_UART0_MODEM_MASK | PMX_TIMER_0_1_MASK , 2039 .mask = PMX_UART0_MODEM_MASK | PMX_TIMER_0_1_MASK ,
2040 .val = 0, 2040 .val = 0,
2041 }, { 2041 }, {
2042 .reg = IP_SEL_PAD_40_49_REG, 2042 .reg = IP_SEL_PAD_40_49_REG,
2043 .mask = PMX_PL_42_MASK | PMX_PL_43_MASK, 2043 .mask = PMX_PL_42_MASK | PMX_PL_43_MASK,
2044 .val = PMX_PWM1_PL_42_VAL | 2044 .val = PMX_PWM1_PL_42_VAL |
2045 PMX_PWM0_PL_43_VAL, 2045 PMX_PWM0_PL_43_VAL,
2046 }, 2046 },
2047 }; 2047 };
2048 2048
2049 static struct spear_muxreg pwm0_1_pin_59_60_muxreg[] = { 2049 static struct spear_muxreg pwm0_1_pin_59_60_muxreg[] = {
2050 { 2050 {
2051 .reg = IP_SEL_PAD_50_59_REG, 2051 .reg = IP_SEL_PAD_50_59_REG,
2052 .mask = PMX_PL_59_MASK, 2052 .mask = PMX_PL_59_MASK,
2053 .val = PMX_PWM1_PL_59_VAL, 2053 .val = PMX_PWM1_PL_59_VAL,
2054 }, { 2054 }, {
2055 .reg = IP_SEL_PAD_60_69_REG, 2055 .reg = IP_SEL_PAD_60_69_REG,
2056 .mask = PMX_PL_60_MASK, 2056 .mask = PMX_PL_60_MASK,
2057 .val = PMX_PWM0_PL_60_VAL, 2057 .val = PMX_PWM0_PL_60_VAL,
2058 }, 2058 },
2059 }; 2059 };
2060 2060
2061 static struct spear_muxreg pwm0_1_pin_88_89_muxreg[] = { 2061 static struct spear_muxreg pwm0_1_pin_88_89_muxreg[] = {
2062 { 2062 {
2063 .reg = IP_SEL_PAD_80_89_REG, 2063 .reg = IP_SEL_PAD_80_89_REG,
2064 .mask = PMX_PL_88_89_MASK, 2064 .mask = PMX_PL_88_89_MASK,
2065 .val = PMX_PWM0_1_PL_88_89_VAL, 2065 .val = PMX_PWM0_1_PL_88_89_VAL,
2066 }, 2066 },
2067 }; 2067 };
2068 2068
2069 static struct spear_modemux pwm0_1_pin_8_9_modemux[] = { 2069 static struct spear_modemux pwm0_1_pin_8_9_modemux[] = {
2070 { 2070 {
2071 .modes = EXTENDED_MODE, 2071 .modes = EXTENDED_MODE,
2072 .muxregs = pwm0_1_pin_8_9_muxreg, 2072 .muxregs = pwm0_1_pin_8_9_muxreg,
2073 .nmuxregs = ARRAY_SIZE(pwm0_1_pin_8_9_muxreg), 2073 .nmuxregs = ARRAY_SIZE(pwm0_1_pin_8_9_muxreg),
2074 }, 2074 },
2075 }; 2075 };
2076 2076
2077 static struct spear_modemux pwm0_1_pin_14_15_modemux[] = { 2077 static struct spear_modemux pwm0_1_pin_14_15_modemux[] = {
2078 { 2078 {
2079 .modes = AUTO_EXP_MODE | SMALL_PRINTERS_MODE | EXTENDED_MODE, 2079 .modes = AUTO_EXP_MODE | SMALL_PRINTERS_MODE | EXTENDED_MODE,
2080 .muxregs = pwm0_1_autoexpsmallpri_muxreg, 2080 .muxregs = pwm0_1_autoexpsmallpri_muxreg,
2081 .nmuxregs = ARRAY_SIZE(pwm0_1_autoexpsmallpri_muxreg), 2081 .nmuxregs = ARRAY_SIZE(pwm0_1_autoexpsmallpri_muxreg),
2082 }, { 2082 }, {
2083 .modes = EXTENDED_MODE, 2083 .modes = EXTENDED_MODE,
2084 .muxregs = pwm0_1_pin_14_15_muxreg, 2084 .muxregs = pwm0_1_pin_14_15_muxreg,
2085 .nmuxregs = ARRAY_SIZE(pwm0_1_pin_14_15_muxreg), 2085 .nmuxregs = ARRAY_SIZE(pwm0_1_pin_14_15_muxreg),
2086 }, 2086 },
2087 }; 2087 };
2088 2088
2089 static struct spear_modemux pwm0_1_pin_30_31_modemux[] = { 2089 static struct spear_modemux pwm0_1_pin_30_31_modemux[] = {
2090 { 2090 {
2091 .modes = EXTENDED_MODE, 2091 .modes = EXTENDED_MODE,
2092 .muxregs = pwm0_1_pin_30_31_muxreg, 2092 .muxregs = pwm0_1_pin_30_31_muxreg,
2093 .nmuxregs = ARRAY_SIZE(pwm0_1_pin_30_31_muxreg), 2093 .nmuxregs = ARRAY_SIZE(pwm0_1_pin_30_31_muxreg),
2094 }, 2094 },
2095 }; 2095 };
2096 2096
2097 static struct spear_modemux pwm0_1_pin_37_38_modemux[] = { 2097 static struct spear_modemux pwm0_1_pin_37_38_modemux[] = {
2098 { 2098 {
2099 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | EXTENDED_MODE, 2099 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | EXTENDED_MODE,
2100 .muxregs = pwm0_1_net_muxreg, 2100 .muxregs = pwm0_1_net_muxreg,
2101 .nmuxregs = ARRAY_SIZE(pwm0_1_net_muxreg), 2101 .nmuxregs = ARRAY_SIZE(pwm0_1_net_muxreg),
2102 }, { 2102 }, {
2103 .modes = EXTENDED_MODE, 2103 .modes = EXTENDED_MODE,
2104 .muxregs = pwm0_1_pin_37_38_muxreg, 2104 .muxregs = pwm0_1_pin_37_38_muxreg,
2105 .nmuxregs = ARRAY_SIZE(pwm0_1_pin_37_38_muxreg), 2105 .nmuxregs = ARRAY_SIZE(pwm0_1_pin_37_38_muxreg),
2106 }, 2106 },
2107 }; 2107 };
2108 2108
2109 static struct spear_modemux pwm0_1_pin_42_43_modemux[] = { 2109 static struct spear_modemux pwm0_1_pin_42_43_modemux[] = {
2110 { 2110 {
2111 .modes = EXTENDED_MODE, 2111 .modes = EXTENDED_MODE,
2112 .muxregs = pwm0_1_pin_42_43_muxreg, 2112 .muxregs = pwm0_1_pin_42_43_muxreg,
2113 .nmuxregs = ARRAY_SIZE(pwm0_1_pin_42_43_muxreg), 2113 .nmuxregs = ARRAY_SIZE(pwm0_1_pin_42_43_muxreg),
2114 }, 2114 },
2115 }; 2115 };
2116 2116
2117 static struct spear_modemux pwm0_1_pin_59_60_modemux[] = { 2117 static struct spear_modemux pwm0_1_pin_59_60_modemux[] = {
2118 { 2118 {
2119 .modes = EXTENDED_MODE, 2119 .modes = EXTENDED_MODE,
2120 .muxregs = pwm0_1_pin_59_60_muxreg, 2120 .muxregs = pwm0_1_pin_59_60_muxreg,
2121 .nmuxregs = ARRAY_SIZE(pwm0_1_pin_59_60_muxreg), 2121 .nmuxregs = ARRAY_SIZE(pwm0_1_pin_59_60_muxreg),
2122 }, 2122 },
2123 }; 2123 };
2124 2124
2125 static struct spear_modemux pwm0_1_pin_88_89_modemux[] = { 2125 static struct spear_modemux pwm0_1_pin_88_89_modemux[] = {
2126 { 2126 {
2127 .modes = EXTENDED_MODE, 2127 .modes = EXTENDED_MODE,
2128 .muxregs = pwm0_1_pin_88_89_muxreg, 2128 .muxregs = pwm0_1_pin_88_89_muxreg,
2129 .nmuxregs = ARRAY_SIZE(pwm0_1_pin_88_89_muxreg), 2129 .nmuxregs = ARRAY_SIZE(pwm0_1_pin_88_89_muxreg),
2130 }, 2130 },
2131 }; 2131 };
2132 2132
2133 static struct spear_pingroup pwm0_1_pingroup[] = { 2133 static struct spear_pingroup pwm0_1_pingroup[] = {
2134 { 2134 {
2135 .name = "pwm0_1_pin_8_9_grp", 2135 .name = "pwm0_1_pin_8_9_grp",
2136 .pins = pwm0_1_pins[0], 2136 .pins = pwm0_1_pins[0],
2137 .npins = ARRAY_SIZE(pwm0_1_pins[0]), 2137 .npins = ARRAY_SIZE(pwm0_1_pins[0]),
2138 .modemuxs = pwm0_1_pin_8_9_modemux, 2138 .modemuxs = pwm0_1_pin_8_9_modemux,
2139 .nmodemuxs = ARRAY_SIZE(pwm0_1_pin_8_9_modemux), 2139 .nmodemuxs = ARRAY_SIZE(pwm0_1_pin_8_9_modemux),
2140 }, { 2140 }, {
2141 .name = "pwm0_1_pin_14_15_grp", 2141 .name = "pwm0_1_pin_14_15_grp",
2142 .pins = pwm0_1_pins[1], 2142 .pins = pwm0_1_pins[1],
2143 .npins = ARRAY_SIZE(pwm0_1_pins[1]), 2143 .npins = ARRAY_SIZE(pwm0_1_pins[1]),
2144 .modemuxs = pwm0_1_pin_14_15_modemux, 2144 .modemuxs = pwm0_1_pin_14_15_modemux,
2145 .nmodemuxs = ARRAY_SIZE(pwm0_1_pin_14_15_modemux), 2145 .nmodemuxs = ARRAY_SIZE(pwm0_1_pin_14_15_modemux),
2146 }, { 2146 }, {
2147 .name = "pwm0_1_pin_30_31_grp", 2147 .name = "pwm0_1_pin_30_31_grp",
2148 .pins = pwm0_1_pins[2], 2148 .pins = pwm0_1_pins[2],
2149 .npins = ARRAY_SIZE(pwm0_1_pins[2]), 2149 .npins = ARRAY_SIZE(pwm0_1_pins[2]),
2150 .modemuxs = pwm0_1_pin_30_31_modemux, 2150 .modemuxs = pwm0_1_pin_30_31_modemux,
2151 .nmodemuxs = ARRAY_SIZE(pwm0_1_pin_30_31_modemux), 2151 .nmodemuxs = ARRAY_SIZE(pwm0_1_pin_30_31_modemux),
2152 }, { 2152 }, {
2153 .name = "pwm0_1_pin_37_38_grp", 2153 .name = "pwm0_1_pin_37_38_grp",
2154 .pins = pwm0_1_pins[3], 2154 .pins = pwm0_1_pins[3],
2155 .npins = ARRAY_SIZE(pwm0_1_pins[3]), 2155 .npins = ARRAY_SIZE(pwm0_1_pins[3]),
2156 .modemuxs = pwm0_1_pin_37_38_modemux, 2156 .modemuxs = pwm0_1_pin_37_38_modemux,
2157 .nmodemuxs = ARRAY_SIZE(pwm0_1_pin_37_38_modemux), 2157 .nmodemuxs = ARRAY_SIZE(pwm0_1_pin_37_38_modemux),
2158 }, { 2158 }, {
2159 .name = "pwm0_1_pin_42_43_grp", 2159 .name = "pwm0_1_pin_42_43_grp",
2160 .pins = pwm0_1_pins[4], 2160 .pins = pwm0_1_pins[4],
2161 .npins = ARRAY_SIZE(pwm0_1_pins[4]), 2161 .npins = ARRAY_SIZE(pwm0_1_pins[4]),
2162 .modemuxs = pwm0_1_pin_42_43_modemux, 2162 .modemuxs = pwm0_1_pin_42_43_modemux,
2163 .nmodemuxs = ARRAY_SIZE(pwm0_1_pin_42_43_modemux), 2163 .nmodemuxs = ARRAY_SIZE(pwm0_1_pin_42_43_modemux),
2164 }, { 2164 }, {
2165 .name = "pwm0_1_pin_59_60_grp", 2165 .name = "pwm0_1_pin_59_60_grp",
2166 .pins = pwm0_1_pins[5], 2166 .pins = pwm0_1_pins[5],
2167 .npins = ARRAY_SIZE(pwm0_1_pins[5]), 2167 .npins = ARRAY_SIZE(pwm0_1_pins[5]),
2168 .modemuxs = pwm0_1_pin_59_60_modemux, 2168 .modemuxs = pwm0_1_pin_59_60_modemux,
2169 .nmodemuxs = ARRAY_SIZE(pwm0_1_pin_59_60_modemux), 2169 .nmodemuxs = ARRAY_SIZE(pwm0_1_pin_59_60_modemux),
2170 }, { 2170 }, {
2171 .name = "pwm0_1_pin_88_89_grp", 2171 .name = "pwm0_1_pin_88_89_grp",
2172 .pins = pwm0_1_pins[6], 2172 .pins = pwm0_1_pins[6],
2173 .npins = ARRAY_SIZE(pwm0_1_pins[6]), 2173 .npins = ARRAY_SIZE(pwm0_1_pins[6]),
2174 .modemuxs = pwm0_1_pin_88_89_modemux, 2174 .modemuxs = pwm0_1_pin_88_89_modemux,
2175 .nmodemuxs = ARRAY_SIZE(pwm0_1_pin_88_89_modemux), 2175 .nmodemuxs = ARRAY_SIZE(pwm0_1_pin_88_89_modemux),
2176 }, 2176 },
2177 }; 2177 };
2178 2178
2179 static const char *const pwm0_1_grps[] = { "pwm0_1_pin_8_9_grp", 2179 static const char *const pwm0_1_grps[] = { "pwm0_1_pin_8_9_grp",
2180 "pwm0_1_pin_14_15_grp", "pwm0_1_pin_30_31_grp", "pwm0_1_pin_37_38_grp", 2180 "pwm0_1_pin_14_15_grp", "pwm0_1_pin_30_31_grp", "pwm0_1_pin_37_38_grp",
2181 "pwm0_1_pin_42_43_grp", "pwm0_1_pin_59_60_grp", "pwm0_1_pin_88_89_grp" 2181 "pwm0_1_pin_42_43_grp", "pwm0_1_pin_59_60_grp", "pwm0_1_pin_88_89_grp"
2182 }; 2182 };
2183 2183
2184 static struct spear_function pwm0_1_function = { 2184 static struct spear_function pwm0_1_function = {
2185 .name = "pwm0_1", 2185 .name = "pwm0_1",
2186 .groups = pwm0_1_grps, 2186 .groups = pwm0_1_grps,
2187 .ngroups = ARRAY_SIZE(pwm0_1_grps), 2187 .ngroups = ARRAY_SIZE(pwm0_1_grps),
2188 }; 2188 };
2189 2189
2190 /* Pad multiplexing for PWM2 device */ 2190 /* Pad multiplexing for PWM2 device */
2191 static const unsigned pwm2_pins[][1] = { { 7 }, { 13 }, { 29 }, { 34 }, { 41 }, 2191 static const unsigned pwm2_pins[][1] = { { 7 }, { 13 }, { 29 }, { 34 }, { 41 },
2192 { 58 }, { 87 } }; 2192 { 58 }, { 87 } };
2193 static struct spear_muxreg pwm2_net_muxreg[] = { 2193 static struct spear_muxreg pwm2_net_muxreg[] = {
2194 { 2194 {
2195 .reg = PMX_CONFIG_REG, 2195 .reg = PMX_CONFIG_REG,
2196 .mask = PMX_SSP_CS_MASK, 2196 .mask = PMX_SSP_CS_MASK,
2197 .val = 0, 2197 .val = 0,
2198 }, 2198 },
2199 }; 2199 };
2200 2200
2201 static struct spear_muxreg pwm2_pin_7_muxreg[] = { 2201 static struct spear_muxreg pwm2_pin_7_muxreg[] = {
2202 { 2202 {
2203 .reg = IP_SEL_PAD_0_9_REG, 2203 .reg = IP_SEL_PAD_0_9_REG,
2204 .mask = PMX_PL_7_MASK, 2204 .mask = PMX_PL_7_MASK,
2205 .val = PMX_PWM_2_PL_7_VAL, 2205 .val = PMX_PWM_2_PL_7_VAL,
2206 }, 2206 },
2207 }; 2207 };
2208 2208
2209 static struct spear_muxreg pwm2_autoexpsmallpri_muxreg[] = { 2209 static struct spear_muxreg pwm2_autoexpsmallpri_muxreg[] = {
2210 { 2210 {
2211 .reg = PMX_CONFIG_REG, 2211 .reg = PMX_CONFIG_REG,
2212 .mask = PMX_MII_MASK, 2212 .mask = PMX_MII_MASK,
2213 .val = 0, 2213 .val = 0,
2214 }, 2214 },
2215 }; 2215 };
2216 2216
2217 static struct spear_muxreg pwm2_pin_13_muxreg[] = { 2217 static struct spear_muxreg pwm2_pin_13_muxreg[] = {
2218 { 2218 {
2219 .reg = IP_SEL_PAD_10_19_REG, 2219 .reg = IP_SEL_PAD_10_19_REG,
2220 .mask = PMX_PL_13_MASK, 2220 .mask = PMX_PL_13_MASK,
2221 .val = PMX_PWM2_PL_13_VAL, 2221 .val = PMX_PWM2_PL_13_VAL,
2222 }, 2222 },
2223 }; 2223 };
2224 2224
2225 static struct spear_muxreg pwm2_pin_29_muxreg[] = { 2225 static struct spear_muxreg pwm2_pin_29_muxreg[] = {
2226 { 2226 {
2227 .reg = PMX_CONFIG_REG, 2227 .reg = PMX_CONFIG_REG,
2228 .mask = PMX_GPIO_PIN1_MASK, 2228 .mask = PMX_GPIO_PIN1_MASK,
2229 .val = 0, 2229 .val = 0,
2230 }, { 2230 }, {
2231 .reg = IP_SEL_PAD_20_29_REG, 2231 .reg = IP_SEL_PAD_20_29_REG,
2232 .mask = PMX_PL_29_MASK, 2232 .mask = PMX_PL_29_MASK,
2233 .val = PMX_PWM_2_PL_29_VAL, 2233 .val = PMX_PWM_2_PL_29_VAL,
2234 }, 2234 },
2235 }; 2235 };
2236 2236
2237 static struct spear_muxreg pwm2_pin_34_muxreg[] = { 2237 static struct spear_muxreg pwm2_pin_34_muxreg[] = {
2238 { 2238 {
2239 .reg = PMX_CONFIG_REG, 2239 .reg = PMX_CONFIG_REG,
2240 .mask = PMX_SSP_CS_MASK, 2240 .mask = PMX_SSP_CS_MASK,
2241 .val = 0, 2241 .val = 0,
2242 }, { 2242 }, {
2243 .reg = MODE_CONFIG_REG, 2243 .reg = MODE_CONFIG_REG,
2244 .mask = PMX_PWM_MASK, 2244 .mask = PMX_PWM_MASK,
2245 .val = PMX_PWM_MASK, 2245 .val = PMX_PWM_MASK,
2246 }, { 2246 }, {
2247 .reg = IP_SEL_PAD_30_39_REG, 2247 .reg = IP_SEL_PAD_30_39_REG,
2248 .mask = PMX_PL_34_MASK, 2248 .mask = PMX_PL_34_MASK,
2249 .val = PMX_PWM2_PL_34_VAL, 2249 .val = PMX_PWM2_PL_34_VAL,
2250 }, 2250 },
2251 }; 2251 };
2252 2252
2253 static struct spear_muxreg pwm2_pin_41_muxreg[] = { 2253 static struct spear_muxreg pwm2_pin_41_muxreg[] = {
2254 { 2254 {
2255 .reg = PMX_CONFIG_REG, 2255 .reg = PMX_CONFIG_REG,
2256 .mask = PMX_UART0_MODEM_MASK, 2256 .mask = PMX_UART0_MODEM_MASK,
2257 .val = 0, 2257 .val = 0,
2258 }, { 2258 }, {
2259 .reg = IP_SEL_PAD_40_49_REG, 2259 .reg = IP_SEL_PAD_40_49_REG,
2260 .mask = PMX_PL_41_MASK, 2260 .mask = PMX_PL_41_MASK,
2261 .val = PMX_PWM2_PL_41_VAL, 2261 .val = PMX_PWM2_PL_41_VAL,
2262 }, 2262 },
2263 }; 2263 };
2264 2264
2265 static struct spear_muxreg pwm2_pin_58_muxreg[] = { 2265 static struct spear_muxreg pwm2_pin_58_muxreg[] = {
2266 { 2266 {
2267 .reg = IP_SEL_PAD_50_59_REG, 2267 .reg = IP_SEL_PAD_50_59_REG,
2268 .mask = PMX_PL_58_MASK, 2268 .mask = PMX_PL_58_MASK,
2269 .val = PMX_PWM2_PL_58_VAL, 2269 .val = PMX_PWM2_PL_58_VAL,
2270 }, 2270 },
2271 }; 2271 };
2272 2272
2273 static struct spear_muxreg pwm2_pin_87_muxreg[] = { 2273 static struct spear_muxreg pwm2_pin_87_muxreg[] = {
2274 { 2274 {
2275 .reg = IP_SEL_PAD_80_89_REG, 2275 .reg = IP_SEL_PAD_80_89_REG,
2276 .mask = PMX_PL_87_MASK, 2276 .mask = PMX_PL_87_MASK,
2277 .val = PMX_PWM2_PL_87_VAL, 2277 .val = PMX_PWM2_PL_87_VAL,
2278 }, 2278 },
2279 }; 2279 };
2280 2280
2281 static struct spear_modemux pwm2_pin_7_modemux[] = { 2281 static struct spear_modemux pwm2_pin_7_modemux[] = {
2282 { 2282 {
2283 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | EXTENDED_MODE, 2283 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | EXTENDED_MODE,
2284 .muxregs = pwm2_net_muxreg, 2284 .muxregs = pwm2_net_muxreg,
2285 .nmuxregs = ARRAY_SIZE(pwm2_net_muxreg), 2285 .nmuxregs = ARRAY_SIZE(pwm2_net_muxreg),
2286 }, { 2286 }, {
2287 .modes = EXTENDED_MODE, 2287 .modes = EXTENDED_MODE,
2288 .muxregs = pwm2_pin_7_muxreg, 2288 .muxregs = pwm2_pin_7_muxreg,
2289 .nmuxregs = ARRAY_SIZE(pwm2_pin_7_muxreg), 2289 .nmuxregs = ARRAY_SIZE(pwm2_pin_7_muxreg),
2290 }, 2290 },
2291 }; 2291 };
2292 static struct spear_modemux pwm2_pin_13_modemux[] = { 2292 static struct spear_modemux pwm2_pin_13_modemux[] = {
2293 { 2293 {
2294 .modes = AUTO_EXP_MODE | SMALL_PRINTERS_MODE | EXTENDED_MODE, 2294 .modes = AUTO_EXP_MODE | SMALL_PRINTERS_MODE | EXTENDED_MODE,
2295 .muxregs = pwm2_autoexpsmallpri_muxreg, 2295 .muxregs = pwm2_autoexpsmallpri_muxreg,
2296 .nmuxregs = ARRAY_SIZE(pwm2_autoexpsmallpri_muxreg), 2296 .nmuxregs = ARRAY_SIZE(pwm2_autoexpsmallpri_muxreg),
2297 }, { 2297 }, {
2298 .modes = EXTENDED_MODE, 2298 .modes = EXTENDED_MODE,
2299 .muxregs = pwm2_pin_13_muxreg, 2299 .muxregs = pwm2_pin_13_muxreg,
2300 .nmuxregs = ARRAY_SIZE(pwm2_pin_13_muxreg), 2300 .nmuxregs = ARRAY_SIZE(pwm2_pin_13_muxreg),
2301 }, 2301 },
2302 }; 2302 };
2303 static struct spear_modemux pwm2_pin_29_modemux[] = { 2303 static struct spear_modemux pwm2_pin_29_modemux[] = {
2304 { 2304 {
2305 .modes = EXTENDED_MODE, 2305 .modes = EXTENDED_MODE,
2306 .muxregs = pwm2_pin_29_muxreg, 2306 .muxregs = pwm2_pin_29_muxreg,
2307 .nmuxregs = ARRAY_SIZE(pwm2_pin_29_muxreg), 2307 .nmuxregs = ARRAY_SIZE(pwm2_pin_29_muxreg),
2308 }, 2308 },
2309 }; 2309 };
2310 static struct spear_modemux pwm2_pin_34_modemux[] = { 2310 static struct spear_modemux pwm2_pin_34_modemux[] = {
2311 { 2311 {
2312 .modes = EXTENDED_MODE, 2312 .modes = EXTENDED_MODE,
2313 .muxregs = pwm2_pin_34_muxreg, 2313 .muxregs = pwm2_pin_34_muxreg,
2314 .nmuxregs = ARRAY_SIZE(pwm2_pin_34_muxreg), 2314 .nmuxregs = ARRAY_SIZE(pwm2_pin_34_muxreg),
2315 }, 2315 },
2316 }; 2316 };
2317 2317
2318 static struct spear_modemux pwm2_pin_41_modemux[] = { 2318 static struct spear_modemux pwm2_pin_41_modemux[] = {
2319 { 2319 {
2320 .modes = EXTENDED_MODE, 2320 .modes = EXTENDED_MODE,
2321 .muxregs = pwm2_pin_41_muxreg, 2321 .muxregs = pwm2_pin_41_muxreg,
2322 .nmuxregs = ARRAY_SIZE(pwm2_pin_41_muxreg), 2322 .nmuxregs = ARRAY_SIZE(pwm2_pin_41_muxreg),
2323 }, 2323 },
2324 }; 2324 };
2325 2325
2326 static struct spear_modemux pwm2_pin_58_modemux[] = { 2326 static struct spear_modemux pwm2_pin_58_modemux[] = {
2327 { 2327 {
2328 .modes = EXTENDED_MODE, 2328 .modes = EXTENDED_MODE,
2329 .muxregs = pwm2_pin_58_muxreg, 2329 .muxregs = pwm2_pin_58_muxreg,
2330 .nmuxregs = ARRAY_SIZE(pwm2_pin_58_muxreg), 2330 .nmuxregs = ARRAY_SIZE(pwm2_pin_58_muxreg),
2331 }, 2331 },
2332 }; 2332 };
2333 2333
2334 static struct spear_modemux pwm2_pin_87_modemux[] = { 2334 static struct spear_modemux pwm2_pin_87_modemux[] = {
2335 { 2335 {
2336 .modes = EXTENDED_MODE, 2336 .modes = EXTENDED_MODE,
2337 .muxregs = pwm2_pin_87_muxreg, 2337 .muxregs = pwm2_pin_87_muxreg,
2338 .nmuxregs = ARRAY_SIZE(pwm2_pin_87_muxreg), 2338 .nmuxregs = ARRAY_SIZE(pwm2_pin_87_muxreg),
2339 }, 2339 },
2340 }; 2340 };
2341 2341
2342 static struct spear_pingroup pwm2_pingroup[] = { 2342 static struct spear_pingroup pwm2_pingroup[] = {
2343 { 2343 {
2344 .name = "pwm2_pin_7_grp", 2344 .name = "pwm2_pin_7_grp",
2345 .pins = pwm2_pins[0], 2345 .pins = pwm2_pins[0],
2346 .npins = ARRAY_SIZE(pwm2_pins[0]), 2346 .npins = ARRAY_SIZE(pwm2_pins[0]),
2347 .modemuxs = pwm2_pin_7_modemux, 2347 .modemuxs = pwm2_pin_7_modemux,
2348 .nmodemuxs = ARRAY_SIZE(pwm2_pin_7_modemux), 2348 .nmodemuxs = ARRAY_SIZE(pwm2_pin_7_modemux),
2349 }, { 2349 }, {
2350 .name = "pwm2_pin_13_grp", 2350 .name = "pwm2_pin_13_grp",
2351 .pins = pwm2_pins[1], 2351 .pins = pwm2_pins[1],
2352 .npins = ARRAY_SIZE(pwm2_pins[1]), 2352 .npins = ARRAY_SIZE(pwm2_pins[1]),
2353 .modemuxs = pwm2_pin_13_modemux, 2353 .modemuxs = pwm2_pin_13_modemux,
2354 .nmodemuxs = ARRAY_SIZE(pwm2_pin_13_modemux), 2354 .nmodemuxs = ARRAY_SIZE(pwm2_pin_13_modemux),
2355 }, { 2355 }, {
2356 .name = "pwm2_pin_29_grp", 2356 .name = "pwm2_pin_29_grp",
2357 .pins = pwm2_pins[2], 2357 .pins = pwm2_pins[2],
2358 .npins = ARRAY_SIZE(pwm2_pins[2]), 2358 .npins = ARRAY_SIZE(pwm2_pins[2]),
2359 .modemuxs = pwm2_pin_29_modemux, 2359 .modemuxs = pwm2_pin_29_modemux,
2360 .nmodemuxs = ARRAY_SIZE(pwm2_pin_29_modemux), 2360 .nmodemuxs = ARRAY_SIZE(pwm2_pin_29_modemux),
2361 }, { 2361 }, {
2362 .name = "pwm2_pin_34_grp", 2362 .name = "pwm2_pin_34_grp",
2363 .pins = pwm2_pins[3], 2363 .pins = pwm2_pins[3],
2364 .npins = ARRAY_SIZE(pwm2_pins[3]), 2364 .npins = ARRAY_SIZE(pwm2_pins[3]),
2365 .modemuxs = pwm2_pin_34_modemux, 2365 .modemuxs = pwm2_pin_34_modemux,
2366 .nmodemuxs = ARRAY_SIZE(pwm2_pin_34_modemux), 2366 .nmodemuxs = ARRAY_SIZE(pwm2_pin_34_modemux),
2367 }, { 2367 }, {
2368 .name = "pwm2_pin_41_grp", 2368 .name = "pwm2_pin_41_grp",
2369 .pins = pwm2_pins[4], 2369 .pins = pwm2_pins[4],
2370 .npins = ARRAY_SIZE(pwm2_pins[4]), 2370 .npins = ARRAY_SIZE(pwm2_pins[4]),
2371 .modemuxs = pwm2_pin_41_modemux, 2371 .modemuxs = pwm2_pin_41_modemux,
2372 .nmodemuxs = ARRAY_SIZE(pwm2_pin_41_modemux), 2372 .nmodemuxs = ARRAY_SIZE(pwm2_pin_41_modemux),
2373 }, { 2373 }, {
2374 .name = "pwm2_pin_58_grp", 2374 .name = "pwm2_pin_58_grp",
2375 .pins = pwm2_pins[5], 2375 .pins = pwm2_pins[5],
2376 .npins = ARRAY_SIZE(pwm2_pins[5]), 2376 .npins = ARRAY_SIZE(pwm2_pins[5]),
2377 .modemuxs = pwm2_pin_58_modemux, 2377 .modemuxs = pwm2_pin_58_modemux,
2378 .nmodemuxs = ARRAY_SIZE(pwm2_pin_58_modemux), 2378 .nmodemuxs = ARRAY_SIZE(pwm2_pin_58_modemux),
2379 }, { 2379 }, {
2380 .name = "pwm2_pin_87_grp", 2380 .name = "pwm2_pin_87_grp",
2381 .pins = pwm2_pins[6], 2381 .pins = pwm2_pins[6],
2382 .npins = ARRAY_SIZE(pwm2_pins[6]), 2382 .npins = ARRAY_SIZE(pwm2_pins[6]),
2383 .modemuxs = pwm2_pin_87_modemux, 2383 .modemuxs = pwm2_pin_87_modemux,
2384 .nmodemuxs = ARRAY_SIZE(pwm2_pin_87_modemux), 2384 .nmodemuxs = ARRAY_SIZE(pwm2_pin_87_modemux),
2385 }, 2385 },
2386 }; 2386 };
2387 2387
2388 static const char *const pwm2_grps[] = { "pwm2_pin_7_grp", "pwm2_pin_13_grp", 2388 static const char *const pwm2_grps[] = { "pwm2_pin_7_grp", "pwm2_pin_13_grp",
2389 "pwm2_pin_29_grp", "pwm2_pin_34_grp", "pwm2_pin_41_grp", 2389 "pwm2_pin_29_grp", "pwm2_pin_34_grp", "pwm2_pin_41_grp",
2390 "pwm2_pin_58_grp", "pwm2_pin_87_grp" }; 2390 "pwm2_pin_58_grp", "pwm2_pin_87_grp" };
2391 static struct spear_function pwm2_function = { 2391 static struct spear_function pwm2_function = {
2392 .name = "pwm2", 2392 .name = "pwm2",
2393 .groups = pwm2_grps, 2393 .groups = pwm2_grps,
2394 .ngroups = ARRAY_SIZE(pwm2_grps), 2394 .ngroups = ARRAY_SIZE(pwm2_grps),
2395 }; 2395 };
2396 2396
2397 /* Pad multiplexing for PWM3 device */ 2397 /* Pad multiplexing for PWM3 device */
2398 static const unsigned pwm3_pins[][1] = { { 6 }, { 12 }, { 28 }, { 40 }, { 57 }, 2398 static const unsigned pwm3_pins[][1] = { { 6 }, { 12 }, { 28 }, { 40 }, { 57 },
2399 { 86 } }; 2399 { 86 } };
2400 static struct spear_muxreg pwm3_pin_6_muxreg[] = { 2400 static struct spear_muxreg pwm3_pin_6_muxreg[] = {
2401 { 2401 {
2402 .reg = PMX_CONFIG_REG, 2402 .reg = PMX_CONFIG_REG,
2403 .mask = PMX_SSP_MASK, 2403 .mask = PMX_SSP_MASK,
2404 .val = 0, 2404 .val = 0,
2405 }, { 2405 }, {
2406 .reg = IP_SEL_PAD_0_9_REG, 2406 .reg = IP_SEL_PAD_0_9_REG,
2407 .mask = PMX_PL_6_MASK, 2407 .mask = PMX_PL_6_MASK,
2408 .val = PMX_PWM_3_PL_6_VAL, 2408 .val = PMX_PWM_3_PL_6_VAL,
2409 }, 2409 },
2410 }; 2410 };
2411 2411
2412 static struct spear_muxreg pwm3_muxreg[] = { 2412 static struct spear_muxreg pwm3_muxreg[] = {
2413 { 2413 {
2414 .reg = PMX_CONFIG_REG, 2414 .reg = PMX_CONFIG_REG,
2415 .mask = PMX_MII_MASK, 2415 .mask = PMX_MII_MASK,
2416 .val = 0, 2416 .val = 0,
2417 }, 2417 },
2418 }; 2418 };
2419 2419
2420 static struct spear_muxreg pwm3_pin_12_muxreg[] = { 2420 static struct spear_muxreg pwm3_pin_12_muxreg[] = {
2421 { 2421 {
2422 .reg = IP_SEL_PAD_10_19_REG, 2422 .reg = IP_SEL_PAD_10_19_REG,
2423 .mask = PMX_PL_12_MASK, 2423 .mask = PMX_PL_12_MASK,
2424 .val = PMX_PWM3_PL_12_VAL, 2424 .val = PMX_PWM3_PL_12_VAL,
2425 }, 2425 },
2426 }; 2426 };
2427 2427
2428 static struct spear_muxreg pwm3_pin_28_muxreg[] = { 2428 static struct spear_muxreg pwm3_pin_28_muxreg[] = {
2429 { 2429 {
2430 .reg = PMX_CONFIG_REG, 2430 .reg = PMX_CONFIG_REG,
2431 .mask = PMX_GPIO_PIN0_MASK, 2431 .mask = PMX_GPIO_PIN0_MASK,
2432 .val = 0, 2432 .val = 0,
2433 }, { 2433 }, {
2434 .reg = IP_SEL_PAD_20_29_REG, 2434 .reg = IP_SEL_PAD_20_29_REG,
2435 .mask = PMX_PL_28_MASK, 2435 .mask = PMX_PL_28_MASK,
2436 .val = PMX_PWM_3_PL_28_VAL, 2436 .val = PMX_PWM_3_PL_28_VAL,
2437 }, 2437 },
2438 }; 2438 };
2439 2439
2440 static struct spear_muxreg pwm3_pin_40_muxreg[] = { 2440 static struct spear_muxreg pwm3_pin_40_muxreg[] = {
2441 { 2441 {
2442 .reg = PMX_CONFIG_REG, 2442 .reg = PMX_CONFIG_REG,
2443 .mask = PMX_UART0_MODEM_MASK, 2443 .mask = PMX_UART0_MODEM_MASK,
2444 .val = 0, 2444 .val = 0,
2445 }, { 2445 }, {
2446 .reg = IP_SEL_PAD_40_49_REG, 2446 .reg = IP_SEL_PAD_40_49_REG,
2447 .mask = PMX_PL_40_MASK, 2447 .mask = PMX_PL_40_MASK,
2448 .val = PMX_PWM3_PL_40_VAL, 2448 .val = PMX_PWM3_PL_40_VAL,
2449 }, 2449 },
2450 }; 2450 };
2451 2451
2452 static struct spear_muxreg pwm3_pin_57_muxreg[] = { 2452 static struct spear_muxreg pwm3_pin_57_muxreg[] = {
2453 { 2453 {
2454 .reg = IP_SEL_PAD_50_59_REG, 2454 .reg = IP_SEL_PAD_50_59_REG,
2455 .mask = PMX_PL_57_MASK, 2455 .mask = PMX_PL_57_MASK,
2456 .val = PMX_PWM3_PL_57_VAL, 2456 .val = PMX_PWM3_PL_57_VAL,
2457 }, 2457 },
2458 }; 2458 };
2459 2459
2460 static struct spear_muxreg pwm3_pin_86_muxreg[] = { 2460 static struct spear_muxreg pwm3_pin_86_muxreg[] = {
2461 { 2461 {
2462 .reg = IP_SEL_PAD_80_89_REG, 2462 .reg = IP_SEL_PAD_80_89_REG,
2463 .mask = PMX_PL_86_MASK, 2463 .mask = PMX_PL_86_MASK,
2464 .val = PMX_PWM3_PL_86_VAL, 2464 .val = PMX_PWM3_PL_86_VAL,
2465 }, 2465 },
2466 }; 2466 };
2467 2467
2468 static struct spear_modemux pwm3_pin_6_modemux[] = { 2468 static struct spear_modemux pwm3_pin_6_modemux[] = {
2469 { 2469 {
2470 .modes = EXTENDED_MODE, 2470 .modes = EXTENDED_MODE,
2471 .muxregs = pwm3_pin_6_muxreg, 2471 .muxregs = pwm3_pin_6_muxreg,
2472 .nmuxregs = ARRAY_SIZE(pwm3_pin_6_muxreg), 2472 .nmuxregs = ARRAY_SIZE(pwm3_pin_6_muxreg),
2473 }, 2473 },
2474 }; 2474 };
2475 2475
2476 static struct spear_modemux pwm3_pin_12_modemux[] = { 2476 static struct spear_modemux pwm3_pin_12_modemux[] = {
2477 { 2477 {
2478 .modes = AUTO_EXP_MODE | SMALL_PRINTERS_MODE | 2478 .modes = AUTO_EXP_MODE | SMALL_PRINTERS_MODE |
2479 AUTO_NET_SMII_MODE | EXTENDED_MODE, 2479 AUTO_NET_SMII_MODE | EXTENDED_MODE,
2480 .muxregs = pwm3_muxreg, 2480 .muxregs = pwm3_muxreg,
2481 .nmuxregs = ARRAY_SIZE(pwm3_muxreg), 2481 .nmuxregs = ARRAY_SIZE(pwm3_muxreg),
2482 }, { 2482 }, {
2483 .modes = EXTENDED_MODE, 2483 .modes = EXTENDED_MODE,
2484 .muxregs = pwm3_pin_12_muxreg, 2484 .muxregs = pwm3_pin_12_muxreg,
2485 .nmuxregs = ARRAY_SIZE(pwm3_pin_12_muxreg), 2485 .nmuxregs = ARRAY_SIZE(pwm3_pin_12_muxreg),
2486 }, 2486 },
2487 }; 2487 };
2488 2488
2489 static struct spear_modemux pwm3_pin_28_modemux[] = { 2489 static struct spear_modemux pwm3_pin_28_modemux[] = {
2490 { 2490 {
2491 .modes = EXTENDED_MODE, 2491 .modes = EXTENDED_MODE,
2492 .muxregs = pwm3_pin_28_muxreg, 2492 .muxregs = pwm3_pin_28_muxreg,
2493 .nmuxregs = ARRAY_SIZE(pwm3_pin_28_muxreg), 2493 .nmuxregs = ARRAY_SIZE(pwm3_pin_28_muxreg),
2494 }, 2494 },
2495 }; 2495 };
2496 2496
2497 static struct spear_modemux pwm3_pin_40_modemux[] = { 2497 static struct spear_modemux pwm3_pin_40_modemux[] = {
2498 { 2498 {
2499 .modes = EXTENDED_MODE, 2499 .modes = EXTENDED_MODE,
2500 .muxregs = pwm3_pin_40_muxreg, 2500 .muxregs = pwm3_pin_40_muxreg,
2501 .nmuxregs = ARRAY_SIZE(pwm3_pin_40_muxreg), 2501 .nmuxregs = ARRAY_SIZE(pwm3_pin_40_muxreg),
2502 }, 2502 },
2503 }; 2503 };
2504 2504
2505 static struct spear_modemux pwm3_pin_57_modemux[] = { 2505 static struct spear_modemux pwm3_pin_57_modemux[] = {
2506 { 2506 {
2507 .modes = EXTENDED_MODE, 2507 .modes = EXTENDED_MODE,
2508 .muxregs = pwm3_pin_57_muxreg, 2508 .muxregs = pwm3_pin_57_muxreg,
2509 .nmuxregs = ARRAY_SIZE(pwm3_pin_57_muxreg), 2509 .nmuxregs = ARRAY_SIZE(pwm3_pin_57_muxreg),
2510 }, 2510 },
2511 }; 2511 };
2512 2512
2513 static struct spear_modemux pwm3_pin_86_modemux[] = { 2513 static struct spear_modemux pwm3_pin_86_modemux[] = {
2514 { 2514 {
2515 .modes = EXTENDED_MODE, 2515 .modes = EXTENDED_MODE,
2516 .muxregs = pwm3_pin_86_muxreg, 2516 .muxregs = pwm3_pin_86_muxreg,
2517 .nmuxregs = ARRAY_SIZE(pwm3_pin_86_muxreg), 2517 .nmuxregs = ARRAY_SIZE(pwm3_pin_86_muxreg),
2518 }, 2518 },
2519 }; 2519 };
2520 2520
2521 static struct spear_pingroup pwm3_pingroup[] = { 2521 static struct spear_pingroup pwm3_pingroup[] = {
2522 { 2522 {
2523 .name = "pwm3_pin_6_grp", 2523 .name = "pwm3_pin_6_grp",
2524 .pins = pwm3_pins[0], 2524 .pins = pwm3_pins[0],
2525 .npins = ARRAY_SIZE(pwm3_pins[0]), 2525 .npins = ARRAY_SIZE(pwm3_pins[0]),
2526 .modemuxs = pwm3_pin_6_modemux, 2526 .modemuxs = pwm3_pin_6_modemux,
2527 .nmodemuxs = ARRAY_SIZE(pwm3_pin_6_modemux), 2527 .nmodemuxs = ARRAY_SIZE(pwm3_pin_6_modemux),
2528 }, { 2528 }, {
2529 .name = "pwm3_pin_12_grp", 2529 .name = "pwm3_pin_12_grp",
2530 .pins = pwm3_pins[1], 2530 .pins = pwm3_pins[1],
2531 .npins = ARRAY_SIZE(pwm3_pins[1]), 2531 .npins = ARRAY_SIZE(pwm3_pins[1]),
2532 .modemuxs = pwm3_pin_12_modemux, 2532 .modemuxs = pwm3_pin_12_modemux,
2533 .nmodemuxs = ARRAY_SIZE(pwm3_pin_12_modemux), 2533 .nmodemuxs = ARRAY_SIZE(pwm3_pin_12_modemux),
2534 }, { 2534 }, {
2535 .name = "pwm3_pin_28_grp", 2535 .name = "pwm3_pin_28_grp",
2536 .pins = pwm3_pins[2], 2536 .pins = pwm3_pins[2],
2537 .npins = ARRAY_SIZE(pwm3_pins[2]), 2537 .npins = ARRAY_SIZE(pwm3_pins[2]),
2538 .modemuxs = pwm3_pin_28_modemux, 2538 .modemuxs = pwm3_pin_28_modemux,
2539 .nmodemuxs = ARRAY_SIZE(pwm3_pin_28_modemux), 2539 .nmodemuxs = ARRAY_SIZE(pwm3_pin_28_modemux),
2540 }, { 2540 }, {
2541 .name = "pwm3_pin_40_grp", 2541 .name = "pwm3_pin_40_grp",
2542 .pins = pwm3_pins[3], 2542 .pins = pwm3_pins[3],
2543 .npins = ARRAY_SIZE(pwm3_pins[3]), 2543 .npins = ARRAY_SIZE(pwm3_pins[3]),
2544 .modemuxs = pwm3_pin_40_modemux, 2544 .modemuxs = pwm3_pin_40_modemux,
2545 .nmodemuxs = ARRAY_SIZE(pwm3_pin_40_modemux), 2545 .nmodemuxs = ARRAY_SIZE(pwm3_pin_40_modemux),
2546 }, { 2546 }, {
2547 .name = "pwm3_pin_57_grp", 2547 .name = "pwm3_pin_57_grp",
2548 .pins = pwm3_pins[4], 2548 .pins = pwm3_pins[4],
2549 .npins = ARRAY_SIZE(pwm3_pins[4]), 2549 .npins = ARRAY_SIZE(pwm3_pins[4]),
2550 .modemuxs = pwm3_pin_57_modemux, 2550 .modemuxs = pwm3_pin_57_modemux,
2551 .nmodemuxs = ARRAY_SIZE(pwm3_pin_57_modemux), 2551 .nmodemuxs = ARRAY_SIZE(pwm3_pin_57_modemux),
2552 }, { 2552 }, {
2553 .name = "pwm3_pin_86_grp", 2553 .name = "pwm3_pin_86_grp",
2554 .pins = pwm3_pins[5], 2554 .pins = pwm3_pins[5],
2555 .npins = ARRAY_SIZE(pwm3_pins[5]), 2555 .npins = ARRAY_SIZE(pwm3_pins[5]),
2556 .modemuxs = pwm3_pin_86_modemux, 2556 .modemuxs = pwm3_pin_86_modemux,
2557 .nmodemuxs = ARRAY_SIZE(pwm3_pin_86_modemux), 2557 .nmodemuxs = ARRAY_SIZE(pwm3_pin_86_modemux),
2558 }, 2558 },
2559 }; 2559 };
2560 2560
2561 static const char *const pwm3_grps[] = { "pwm3_pin_6_grp", "pwm3_pin_12_grp", 2561 static const char *const pwm3_grps[] = { "pwm3_pin_6_grp", "pwm3_pin_12_grp",
2562 "pwm3_pin_28_grp", "pwm3_pin_40_grp", "pwm3_pin_57_grp", 2562 "pwm3_pin_28_grp", "pwm3_pin_40_grp", "pwm3_pin_57_grp",
2563 "pwm3_pin_86_grp" }; 2563 "pwm3_pin_86_grp" };
2564 static struct spear_function pwm3_function = { 2564 static struct spear_function pwm3_function = {
2565 .name = "pwm3", 2565 .name = "pwm3",
2566 .groups = pwm3_grps, 2566 .groups = pwm3_grps,
2567 .ngroups = ARRAY_SIZE(pwm3_grps), 2567 .ngroups = ARRAY_SIZE(pwm3_grps),
2568 }; 2568 };
2569 2569
2570 /* Pad multiplexing for SSP1 device */ 2570 /* Pad multiplexing for SSP1 device */
2571 static const unsigned ssp1_pins[][2] = { { 17, 20 }, { 36, 39 }, { 48, 51 }, 2571 static const unsigned ssp1_pins[][2] = { { 17, 20 }, { 36, 39 }, { 48, 51 },
2572 { 65, 68 }, { 94, 97 } }; 2572 { 65, 68 }, { 94, 97 } };
2573 static struct spear_muxreg ssp1_muxreg[] = { 2573 static struct spear_muxreg ssp1_muxreg[] = {
2574 { 2574 {
2575 .reg = PMX_CONFIG_REG, 2575 .reg = PMX_CONFIG_REG,
2576 .mask = PMX_MII_MASK, 2576 .mask = PMX_MII_MASK,
2577 .val = 0, 2577 .val = 0,
2578 }, 2578 },
2579 }; 2579 };
2580 2580
2581 static struct spear_muxreg ssp1_ext_17_20_muxreg[] = { 2581 static struct spear_muxreg ssp1_ext_17_20_muxreg[] = {
2582 { 2582 {
2583 .reg = IP_SEL_PAD_10_19_REG, 2583 .reg = IP_SEL_PAD_10_19_REG,
2584 .mask = PMX_PL_17_18_MASK | PMX_PL_19_MASK, 2584 .mask = PMX_PL_17_18_MASK | PMX_PL_19_MASK,
2585 .val = PMX_SSP1_PL_17_18_19_20_VAL, 2585 .val = PMX_SSP1_PL_17_18_19_20_VAL,
2586 }, { 2586 }, {
2587 .reg = IP_SEL_PAD_20_29_REG, 2587 .reg = IP_SEL_PAD_20_29_REG,
2588 .mask = PMX_PL_20_MASK, 2588 .mask = PMX_PL_20_MASK,
2589 .val = PMX_SSP1_PL_17_18_19_20_VAL, 2589 .val = PMX_SSP1_PL_17_18_19_20_VAL,
2590 }, { 2590 }, {
2591 .reg = IP_SEL_MIX_PAD_REG, 2591 .reg = IP_SEL_MIX_PAD_REG,
2592 .mask = PMX_SSP1_PORT_SEL_MASK, 2592 .mask = PMX_SSP1_PORT_SEL_MASK,
2593 .val = PMX_SSP1_PORT_17_TO_20_VAL, 2593 .val = PMX_SSP1_PORT_17_TO_20_VAL,
2594 }, 2594 },
2595 }; 2595 };
2596 2596
2597 static struct spear_muxreg ssp1_ext_36_39_muxreg[] = { 2597 static struct spear_muxreg ssp1_ext_36_39_muxreg[] = {
2598 { 2598 {
2599 .reg = PMX_CONFIG_REG, 2599 .reg = PMX_CONFIG_REG,
2600 .mask = PMX_UART0_MODEM_MASK | PMX_SSP_CS_MASK, 2600 .mask = PMX_UART0_MODEM_MASK | PMX_SSP_CS_MASK,
2601 .val = 0, 2601 .val = 0,
2602 }, { 2602 }, {
2603 .reg = IP_SEL_PAD_30_39_REG, 2603 .reg = IP_SEL_PAD_30_39_REG,
2604 .mask = PMX_PL_36_MASK | PMX_PL_37_38_MASK | PMX_PL_39_MASK, 2604 .mask = PMX_PL_36_MASK | PMX_PL_37_38_MASK | PMX_PL_39_MASK,
2605 .val = PMX_SSP1_PL_36_VAL | PMX_SSP1_PL_37_38_VAL | 2605 .val = PMX_SSP1_PL_36_VAL | PMX_SSP1_PL_37_38_VAL |
2606 PMX_SSP1_PL_39_VAL, 2606 PMX_SSP1_PL_39_VAL,
2607 }, { 2607 }, {
2608 .reg = IP_SEL_MIX_PAD_REG, 2608 .reg = IP_SEL_MIX_PAD_REG,
2609 .mask = PMX_SSP1_PORT_SEL_MASK, 2609 .mask = PMX_SSP1_PORT_SEL_MASK,
2610 .val = PMX_SSP1_PORT_36_TO_39_VAL, 2610 .val = PMX_SSP1_PORT_36_TO_39_VAL,
2611 }, 2611 },
2612 }; 2612 };
2613 2613
2614 static struct spear_muxreg ssp1_ext_48_51_muxreg[] = { 2614 static struct spear_muxreg ssp1_ext_48_51_muxreg[] = {
2615 { 2615 {
2616 .reg = PMX_CONFIG_REG, 2616 .reg = PMX_CONFIG_REG,
2617 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK, 2617 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK,
2618 .val = 0, 2618 .val = 0,
2619 }, { 2619 }, {
2620 .reg = IP_SEL_PAD_40_49_REG, 2620 .reg = IP_SEL_PAD_40_49_REG,
2621 .mask = PMX_PL_48_49_MASK, 2621 .mask = PMX_PL_48_49_MASK,
2622 .val = PMX_SSP1_PL_48_49_VAL, 2622 .val = PMX_SSP1_PL_48_49_VAL,
2623 }, { 2623 }, {
2624 .reg = IP_SEL_PAD_50_59_REG, 2624 .reg = IP_SEL_PAD_50_59_REG,
2625 .mask = PMX_PL_50_51_MASK, 2625 .mask = PMX_PL_50_51_MASK,
2626 .val = PMX_SSP1_PL_50_51_VAL, 2626 .val = PMX_SSP1_PL_50_51_VAL,
2627 }, { 2627 }, {
2628 .reg = IP_SEL_MIX_PAD_REG, 2628 .reg = IP_SEL_MIX_PAD_REG,
2629 .mask = PMX_SSP1_PORT_SEL_MASK, 2629 .mask = PMX_SSP1_PORT_SEL_MASK,
2630 .val = PMX_SSP1_PORT_48_TO_51_VAL, 2630 .val = PMX_SSP1_PORT_48_TO_51_VAL,
2631 }, 2631 },
2632 }; 2632 };
2633 2633
2634 static struct spear_muxreg ssp1_ext_65_68_muxreg[] = { 2634 static struct spear_muxreg ssp1_ext_65_68_muxreg[] = {
2635 { 2635 {
2636 .reg = IP_SEL_PAD_60_69_REG, 2636 .reg = IP_SEL_PAD_60_69_REG,
2637 .mask = PMX_PL_65_TO_68_MASK, 2637 .mask = PMX_PL_65_TO_68_MASK,
2638 .val = PMX_SSP1_PL_65_TO_68_VAL, 2638 .val = PMX_SSP1_PL_65_TO_68_VAL,
2639 }, { 2639 }, {
2640 .reg = IP_SEL_MIX_PAD_REG, 2640 .reg = IP_SEL_MIX_PAD_REG,
2641 .mask = PMX_SSP1_PORT_SEL_MASK, 2641 .mask = PMX_SSP1_PORT_SEL_MASK,
2642 .val = PMX_SSP1_PORT_65_TO_68_VAL, 2642 .val = PMX_SSP1_PORT_65_TO_68_VAL,
2643 }, 2643 },
2644 }; 2644 };
2645 2645
2646 static struct spear_muxreg ssp1_ext_94_97_muxreg[] = { 2646 static struct spear_muxreg ssp1_ext_94_97_muxreg[] = {
2647 { 2647 {
2648 .reg = IP_SEL_PAD_90_99_REG, 2648 .reg = IP_SEL_PAD_90_99_REG,
2649 .mask = PMX_PL_94_95_MASK | PMX_PL_96_97_MASK, 2649 .mask = PMX_PL_94_95_MASK | PMX_PL_96_97_MASK,
2650 .val = PMX_SSP1_PL_94_95_VAL | PMX_SSP1_PL_96_97_VAL, 2650 .val = PMX_SSP1_PL_94_95_VAL | PMX_SSP1_PL_96_97_VAL,
2651 }, { 2651 }, {
2652 .reg = IP_SEL_MIX_PAD_REG, 2652 .reg = IP_SEL_MIX_PAD_REG,
2653 .mask = PMX_SSP1_PORT_SEL_MASK, 2653 .mask = PMX_SSP1_PORT_SEL_MASK,
2654 .val = PMX_SSP1_PORT_94_TO_97_VAL, 2654 .val = PMX_SSP1_PORT_94_TO_97_VAL,
2655 }, 2655 },
2656 }; 2656 };
2657 2657
2658 static struct spear_modemux ssp1_17_20_modemux[] = { 2658 static struct spear_modemux ssp1_17_20_modemux[] = {
2659 { 2659 {
2660 .modes = SMALL_PRINTERS_MODE | AUTO_NET_SMII_MODE | 2660 .modes = SMALL_PRINTERS_MODE | AUTO_NET_SMII_MODE |
2661 EXTENDED_MODE, 2661 EXTENDED_MODE,
2662 .muxregs = ssp1_muxreg, 2662 .muxregs = ssp1_muxreg,
2663 .nmuxregs = ARRAY_SIZE(ssp1_muxreg), 2663 .nmuxregs = ARRAY_SIZE(ssp1_muxreg),
2664 }, { 2664 }, {
2665 .modes = EXTENDED_MODE, 2665 .modes = EXTENDED_MODE,
2666 .muxregs = ssp1_ext_17_20_muxreg, 2666 .muxregs = ssp1_ext_17_20_muxreg,
2667 .nmuxregs = ARRAY_SIZE(ssp1_ext_17_20_muxreg), 2667 .nmuxregs = ARRAY_SIZE(ssp1_ext_17_20_muxreg),
2668 }, 2668 },
2669 }; 2669 };
2670 2670
2671 static struct spear_modemux ssp1_36_39_modemux[] = { 2671 static struct spear_modemux ssp1_36_39_modemux[] = {
2672 { 2672 {
2673 .modes = EXTENDED_MODE, 2673 .modes = EXTENDED_MODE,
2674 .muxregs = ssp1_ext_36_39_muxreg, 2674 .muxregs = ssp1_ext_36_39_muxreg,
2675 .nmuxregs = ARRAY_SIZE(ssp1_ext_36_39_muxreg), 2675 .nmuxregs = ARRAY_SIZE(ssp1_ext_36_39_muxreg),
2676 }, 2676 },
2677 }; 2677 };
2678 2678
2679 static struct spear_modemux ssp1_48_51_modemux[] = { 2679 static struct spear_modemux ssp1_48_51_modemux[] = {
2680 { 2680 {
2681 .modes = EXTENDED_MODE, 2681 .modes = EXTENDED_MODE,
2682 .muxregs = ssp1_ext_48_51_muxreg, 2682 .muxregs = ssp1_ext_48_51_muxreg,
2683 .nmuxregs = ARRAY_SIZE(ssp1_ext_48_51_muxreg), 2683 .nmuxregs = ARRAY_SIZE(ssp1_ext_48_51_muxreg),
2684 }, 2684 },
2685 }; 2685 };
2686 static struct spear_modemux ssp1_65_68_modemux[] = { 2686 static struct spear_modemux ssp1_65_68_modemux[] = {
2687 { 2687 {
2688 .modes = EXTENDED_MODE, 2688 .modes = EXTENDED_MODE,
2689 .muxregs = ssp1_ext_65_68_muxreg, 2689 .muxregs = ssp1_ext_65_68_muxreg,
2690 .nmuxregs = ARRAY_SIZE(ssp1_ext_65_68_muxreg), 2690 .nmuxregs = ARRAY_SIZE(ssp1_ext_65_68_muxreg),
2691 }, 2691 },
2692 }; 2692 };
2693 2693
2694 static struct spear_modemux ssp1_94_97_modemux[] = { 2694 static struct spear_modemux ssp1_94_97_modemux[] = {
2695 { 2695 {
2696 .modes = EXTENDED_MODE, 2696 .modes = EXTENDED_MODE,
2697 .muxregs = ssp1_ext_94_97_muxreg, 2697 .muxregs = ssp1_ext_94_97_muxreg,
2698 .nmuxregs = ARRAY_SIZE(ssp1_ext_94_97_muxreg), 2698 .nmuxregs = ARRAY_SIZE(ssp1_ext_94_97_muxreg),
2699 }, 2699 },
2700 }; 2700 };
2701 2701
2702 static struct spear_pingroup ssp1_pingroup[] = { 2702 static struct spear_pingroup ssp1_pingroup[] = {
2703 { 2703 {
2704 .name = "ssp1_17_20_grp", 2704 .name = "ssp1_17_20_grp",
2705 .pins = ssp1_pins[0], 2705 .pins = ssp1_pins[0],
2706 .npins = ARRAY_SIZE(ssp1_pins[0]), 2706 .npins = ARRAY_SIZE(ssp1_pins[0]),
2707 .modemuxs = ssp1_17_20_modemux, 2707 .modemuxs = ssp1_17_20_modemux,
2708 .nmodemuxs = ARRAY_SIZE(ssp1_17_20_modemux), 2708 .nmodemuxs = ARRAY_SIZE(ssp1_17_20_modemux),
2709 }, { 2709 }, {
2710 .name = "ssp1_36_39_grp", 2710 .name = "ssp1_36_39_grp",
2711 .pins = ssp1_pins[1], 2711 .pins = ssp1_pins[1],
2712 .npins = ARRAY_SIZE(ssp1_pins[1]), 2712 .npins = ARRAY_SIZE(ssp1_pins[1]),
2713 .modemuxs = ssp1_36_39_modemux, 2713 .modemuxs = ssp1_36_39_modemux,
2714 .nmodemuxs = ARRAY_SIZE(ssp1_36_39_modemux), 2714 .nmodemuxs = ARRAY_SIZE(ssp1_36_39_modemux),
2715 }, { 2715 }, {
2716 .name = "ssp1_48_51_grp", 2716 .name = "ssp1_48_51_grp",
2717 .pins = ssp1_pins[2], 2717 .pins = ssp1_pins[2],
2718 .npins = ARRAY_SIZE(ssp1_pins[2]), 2718 .npins = ARRAY_SIZE(ssp1_pins[2]),
2719 .modemuxs = ssp1_48_51_modemux, 2719 .modemuxs = ssp1_48_51_modemux,
2720 .nmodemuxs = ARRAY_SIZE(ssp1_48_51_modemux), 2720 .nmodemuxs = ARRAY_SIZE(ssp1_48_51_modemux),
2721 }, { 2721 }, {
2722 .name = "ssp1_65_68_grp", 2722 .name = "ssp1_65_68_grp",
2723 .pins = ssp1_pins[3], 2723 .pins = ssp1_pins[3],
2724 .npins = ARRAY_SIZE(ssp1_pins[3]), 2724 .npins = ARRAY_SIZE(ssp1_pins[3]),
2725 .modemuxs = ssp1_65_68_modemux, 2725 .modemuxs = ssp1_65_68_modemux,
2726 .nmodemuxs = ARRAY_SIZE(ssp1_65_68_modemux), 2726 .nmodemuxs = ARRAY_SIZE(ssp1_65_68_modemux),
2727 }, { 2727 }, {
2728 .name = "ssp1_94_97_grp", 2728 .name = "ssp1_94_97_grp",
2729 .pins = ssp1_pins[4], 2729 .pins = ssp1_pins[4],
2730 .npins = ARRAY_SIZE(ssp1_pins[4]), 2730 .npins = ARRAY_SIZE(ssp1_pins[4]),
2731 .modemuxs = ssp1_94_97_modemux, 2731 .modemuxs = ssp1_94_97_modemux,
2732 .nmodemuxs = ARRAY_SIZE(ssp1_94_97_modemux), 2732 .nmodemuxs = ARRAY_SIZE(ssp1_94_97_modemux),
2733 }, 2733 },
2734 }; 2734 };
2735 2735
2736 static const char *const ssp1_grps[] = { "ssp1_17_20_grp", "ssp1_36_39_grp", 2736 static const char *const ssp1_grps[] = { "ssp1_17_20_grp", "ssp1_36_39_grp",
2737 "ssp1_48_51_grp", "ssp1_65_68_grp", "ssp1_94_97_grp" 2737 "ssp1_48_51_grp", "ssp1_65_68_grp", "ssp1_94_97_grp"
2738 }; 2738 };
2739 static struct spear_function ssp1_function = { 2739 static struct spear_function ssp1_function = {
2740 .name = "ssp1", 2740 .name = "ssp1",
2741 .groups = ssp1_grps, 2741 .groups = ssp1_grps,
2742 .ngroups = ARRAY_SIZE(ssp1_grps), 2742 .ngroups = ARRAY_SIZE(ssp1_grps),
2743 }; 2743 };
2744 2744
2745 /* Pad multiplexing for SSP2 device */ 2745 /* Pad multiplexing for SSP2 device */
2746 static const unsigned ssp2_pins[][2] = { { 13, 16 }, { 32, 35 }, { 44, 47 }, 2746 static const unsigned ssp2_pins[][2] = { { 13, 16 }, { 32, 35 }, { 44, 47 },
2747 { 61, 64 }, { 90, 93 } }; 2747 { 61, 64 }, { 90, 93 } };
2748 static struct spear_muxreg ssp2_muxreg[] = { 2748 static struct spear_muxreg ssp2_muxreg[] = {
2749 { 2749 {
2750 .reg = PMX_CONFIG_REG, 2750 .reg = PMX_CONFIG_REG,
2751 .mask = PMX_MII_MASK, 2751 .mask = PMX_MII_MASK,
2752 .val = 0, 2752 .val = 0,
2753 }, 2753 },
2754 }; 2754 };
2755 2755
2756 static struct spear_muxreg ssp2_ext_13_16_muxreg[] = { 2756 static struct spear_muxreg ssp2_ext_13_16_muxreg[] = {
2757 { 2757 {
2758 .reg = IP_SEL_PAD_10_19_REG, 2758 .reg = IP_SEL_PAD_10_19_REG,
2759 .mask = PMX_PL_13_14_MASK | PMX_PL_15_16_MASK, 2759 .mask = PMX_PL_13_14_MASK | PMX_PL_15_16_MASK,
2760 .val = PMX_SSP2_PL_13_14_15_16_VAL, 2760 .val = PMX_SSP2_PL_13_14_15_16_VAL,
2761 }, { 2761 }, {
2762 .reg = IP_SEL_MIX_PAD_REG, 2762 .reg = IP_SEL_MIX_PAD_REG,
2763 .mask = PMX_SSP2_PORT_SEL_MASK, 2763 .mask = PMX_SSP2_PORT_SEL_MASK,
2764 .val = PMX_SSP2_PORT_13_TO_16_VAL, 2764 .val = PMX_SSP2_PORT_13_TO_16_VAL,
2765 }, 2765 },
2766 }; 2766 };
2767 2767
2768 static struct spear_muxreg ssp2_ext_32_35_muxreg[] = { 2768 static struct spear_muxreg ssp2_ext_32_35_muxreg[] = {
2769 { 2769 {
2770 .reg = PMX_CONFIG_REG, 2770 .reg = PMX_CONFIG_REG,
2771 .mask = PMX_SSP_CS_MASK | PMX_GPIO_PIN4_MASK | 2771 .mask = PMX_SSP_CS_MASK | PMX_GPIO_PIN4_MASK |
2772 PMX_GPIO_PIN5_MASK, 2772 PMX_GPIO_PIN5_MASK,
2773 .val = 0, 2773 .val = 0,
2774 }, { 2774 }, {
2775 .reg = IP_SEL_PAD_30_39_REG, 2775 .reg = IP_SEL_PAD_30_39_REG,
2776 .mask = PMX_PL_32_33_MASK | PMX_PL_34_MASK | PMX_PL_35_MASK, 2776 .mask = PMX_PL_32_33_MASK | PMX_PL_34_MASK | PMX_PL_35_MASK,
2777 .val = PMX_SSP2_PL_32_33_VAL | PMX_SSP2_PL_34_VAL | 2777 .val = PMX_SSP2_PL_32_33_VAL | PMX_SSP2_PL_34_VAL |
2778 PMX_SSP2_PL_35_VAL, 2778 PMX_SSP2_PL_35_VAL,
2779 }, { 2779 }, {
2780 .reg = IP_SEL_MIX_PAD_REG, 2780 .reg = IP_SEL_MIX_PAD_REG,
2781 .mask = PMX_SSP2_PORT_SEL_MASK, 2781 .mask = PMX_SSP2_PORT_SEL_MASK,
2782 .val = PMX_SSP2_PORT_32_TO_35_VAL, 2782 .val = PMX_SSP2_PORT_32_TO_35_VAL,
2783 }, 2783 },
2784 }; 2784 };
2785 2785
2786 static struct spear_muxreg ssp2_ext_44_47_muxreg[] = { 2786 static struct spear_muxreg ssp2_ext_44_47_muxreg[] = {
2787 { 2787 {
2788 .reg = PMX_CONFIG_REG, 2788 .reg = PMX_CONFIG_REG,
2789 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK, 2789 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK,
2790 .val = 0, 2790 .val = 0,
2791 }, { 2791 }, {
2792 .reg = IP_SEL_PAD_40_49_REG, 2792 .reg = IP_SEL_PAD_40_49_REG,
2793 .mask = PMX_PL_44_45_MASK | PMX_PL_46_47_MASK, 2793 .mask = PMX_PL_44_45_MASK | PMX_PL_46_47_MASK,
2794 .val = PMX_SSP2_PL_44_45_VAL | PMX_SSP2_PL_46_47_VAL, 2794 .val = PMX_SSP2_PL_44_45_VAL | PMX_SSP2_PL_46_47_VAL,
2795 }, { 2795 }, {
2796 .reg = IP_SEL_MIX_PAD_REG, 2796 .reg = IP_SEL_MIX_PAD_REG,
2797 .mask = PMX_SSP2_PORT_SEL_MASK, 2797 .mask = PMX_SSP2_PORT_SEL_MASK,
2798 .val = PMX_SSP2_PORT_44_TO_47_VAL, 2798 .val = PMX_SSP2_PORT_44_TO_47_VAL,
2799 }, 2799 },
2800 }; 2800 };
2801 2801
2802 static struct spear_muxreg ssp2_ext_61_64_muxreg[] = { 2802 static struct spear_muxreg ssp2_ext_61_64_muxreg[] = {
2803 { 2803 {
2804 .reg = IP_SEL_PAD_60_69_REG, 2804 .reg = IP_SEL_PAD_60_69_REG,
2805 .mask = PMX_PL_61_TO_64_MASK, 2805 .mask = PMX_PL_61_TO_64_MASK,
2806 .val = PMX_SSP2_PL_61_TO_64_VAL, 2806 .val = PMX_SSP2_PL_61_TO_64_VAL,
2807 }, { 2807 }, {
2808 .reg = IP_SEL_MIX_PAD_REG, 2808 .reg = IP_SEL_MIX_PAD_REG,
2809 .mask = PMX_SSP2_PORT_SEL_MASK, 2809 .mask = PMX_SSP2_PORT_SEL_MASK,
2810 .val = PMX_SSP2_PORT_61_TO_64_VAL, 2810 .val = PMX_SSP2_PORT_61_TO_64_VAL,
2811 }, 2811 },
2812 }; 2812 };
2813 2813
2814 static struct spear_muxreg ssp2_ext_90_93_muxreg[] = { 2814 static struct spear_muxreg ssp2_ext_90_93_muxreg[] = {
2815 { 2815 {
2816 .reg = IP_SEL_PAD_90_99_REG, 2816 .reg = IP_SEL_PAD_90_99_REG,
2817 .mask = PMX_PL_90_91_MASK | PMX_PL_92_93_MASK, 2817 .mask = PMX_PL_90_91_MASK | PMX_PL_92_93_MASK,
2818 .val = PMX_SSP2_PL_90_91_VAL | PMX_SSP2_PL_92_93_VAL, 2818 .val = PMX_SSP2_PL_90_91_VAL | PMX_SSP2_PL_92_93_VAL,
2819 }, { 2819 }, {
2820 .reg = IP_SEL_MIX_PAD_REG, 2820 .reg = IP_SEL_MIX_PAD_REG,
2821 .mask = PMX_SSP2_PORT_SEL_MASK, 2821 .mask = PMX_SSP2_PORT_SEL_MASK,
2822 .val = PMX_SSP2_PORT_90_TO_93_VAL, 2822 .val = PMX_SSP2_PORT_90_TO_93_VAL,
2823 }, 2823 },
2824 }; 2824 };
2825 2825
2826 static struct spear_modemux ssp2_13_16_modemux[] = { 2826 static struct spear_modemux ssp2_13_16_modemux[] = {
2827 { 2827 {
2828 .modes = AUTO_NET_SMII_MODE | EXTENDED_MODE, 2828 .modes = AUTO_NET_SMII_MODE | EXTENDED_MODE,
2829 .muxregs = ssp2_muxreg, 2829 .muxregs = ssp2_muxreg,
2830 .nmuxregs = ARRAY_SIZE(ssp2_muxreg), 2830 .nmuxregs = ARRAY_SIZE(ssp2_muxreg),
2831 }, { 2831 }, {
2832 .modes = EXTENDED_MODE, 2832 .modes = EXTENDED_MODE,
2833 .muxregs = ssp2_ext_13_16_muxreg, 2833 .muxregs = ssp2_ext_13_16_muxreg,
2834 .nmuxregs = ARRAY_SIZE(ssp2_ext_13_16_muxreg), 2834 .nmuxregs = ARRAY_SIZE(ssp2_ext_13_16_muxreg),
2835 }, 2835 },
2836 }; 2836 };
2837 2837
2838 static struct spear_modemux ssp2_32_35_modemux[] = { 2838 static struct spear_modemux ssp2_32_35_modemux[] = {
2839 { 2839 {
2840 .modes = EXTENDED_MODE, 2840 .modes = EXTENDED_MODE,
2841 .muxregs = ssp2_ext_32_35_muxreg, 2841 .muxregs = ssp2_ext_32_35_muxreg,
2842 .nmuxregs = ARRAY_SIZE(ssp2_ext_32_35_muxreg), 2842 .nmuxregs = ARRAY_SIZE(ssp2_ext_32_35_muxreg),
2843 }, 2843 },
2844 }; 2844 };
2845 2845
2846 static struct spear_modemux ssp2_44_47_modemux[] = { 2846 static struct spear_modemux ssp2_44_47_modemux[] = {
2847 { 2847 {
2848 .modes = EXTENDED_MODE, 2848 .modes = EXTENDED_MODE,
2849 .muxregs = ssp2_ext_44_47_muxreg, 2849 .muxregs = ssp2_ext_44_47_muxreg,
2850 .nmuxregs = ARRAY_SIZE(ssp2_ext_44_47_muxreg), 2850 .nmuxregs = ARRAY_SIZE(ssp2_ext_44_47_muxreg),
2851 }, 2851 },
2852 }; 2852 };
2853 2853
2854 static struct spear_modemux ssp2_61_64_modemux[] = { 2854 static struct spear_modemux ssp2_61_64_modemux[] = {
2855 { 2855 {
2856 .modes = EXTENDED_MODE, 2856 .modes = EXTENDED_MODE,
2857 .muxregs = ssp2_ext_61_64_muxreg, 2857 .muxregs = ssp2_ext_61_64_muxreg,
2858 .nmuxregs = ARRAY_SIZE(ssp2_ext_61_64_muxreg), 2858 .nmuxregs = ARRAY_SIZE(ssp2_ext_61_64_muxreg),
2859 }, 2859 },
2860 }; 2860 };
2861 2861
2862 static struct spear_modemux ssp2_90_93_modemux[] = { 2862 static struct spear_modemux ssp2_90_93_modemux[] = {
2863 { 2863 {
2864 .modes = EXTENDED_MODE, 2864 .modes = EXTENDED_MODE,
2865 .muxregs = ssp2_ext_90_93_muxreg, 2865 .muxregs = ssp2_ext_90_93_muxreg,
2866 .nmuxregs = ARRAY_SIZE(ssp2_ext_90_93_muxreg), 2866 .nmuxregs = ARRAY_SIZE(ssp2_ext_90_93_muxreg),
2867 }, 2867 },
2868 }; 2868 };
2869 2869
2870 static struct spear_pingroup ssp2_pingroup[] = { 2870 static struct spear_pingroup ssp2_pingroup[] = {
2871 { 2871 {
2872 .name = "ssp2_13_16_grp", 2872 .name = "ssp2_13_16_grp",
2873 .pins = ssp2_pins[0], 2873 .pins = ssp2_pins[0],
2874 .npins = ARRAY_SIZE(ssp2_pins[0]), 2874 .npins = ARRAY_SIZE(ssp2_pins[0]),
2875 .modemuxs = ssp2_13_16_modemux, 2875 .modemuxs = ssp2_13_16_modemux,
2876 .nmodemuxs = ARRAY_SIZE(ssp2_13_16_modemux), 2876 .nmodemuxs = ARRAY_SIZE(ssp2_13_16_modemux),
2877 }, { 2877 }, {
2878 .name = "ssp2_32_35_grp", 2878 .name = "ssp2_32_35_grp",
2879 .pins = ssp2_pins[1], 2879 .pins = ssp2_pins[1],
2880 .npins = ARRAY_SIZE(ssp2_pins[1]), 2880 .npins = ARRAY_SIZE(ssp2_pins[1]),
2881 .modemuxs = ssp2_32_35_modemux, 2881 .modemuxs = ssp2_32_35_modemux,
2882 .nmodemuxs = ARRAY_SIZE(ssp2_32_35_modemux), 2882 .nmodemuxs = ARRAY_SIZE(ssp2_32_35_modemux),
2883 }, { 2883 }, {
2884 .name = "ssp2_44_47_grp", 2884 .name = "ssp2_44_47_grp",
2885 .pins = ssp2_pins[2], 2885 .pins = ssp2_pins[2],
2886 .npins = ARRAY_SIZE(ssp2_pins[2]), 2886 .npins = ARRAY_SIZE(ssp2_pins[2]),
2887 .modemuxs = ssp2_44_47_modemux, 2887 .modemuxs = ssp2_44_47_modemux,
2888 .nmodemuxs = ARRAY_SIZE(ssp2_44_47_modemux), 2888 .nmodemuxs = ARRAY_SIZE(ssp2_44_47_modemux),
2889 }, { 2889 }, {
2890 .name = "ssp2_61_64_grp", 2890 .name = "ssp2_61_64_grp",
2891 .pins = ssp2_pins[3], 2891 .pins = ssp2_pins[3],
2892 .npins = ARRAY_SIZE(ssp2_pins[3]), 2892 .npins = ARRAY_SIZE(ssp2_pins[3]),
2893 .modemuxs = ssp2_61_64_modemux, 2893 .modemuxs = ssp2_61_64_modemux,
2894 .nmodemuxs = ARRAY_SIZE(ssp2_61_64_modemux), 2894 .nmodemuxs = ARRAY_SIZE(ssp2_61_64_modemux),
2895 }, { 2895 }, {
2896 .name = "ssp2_90_93_grp", 2896 .name = "ssp2_90_93_grp",
2897 .pins = ssp2_pins[4], 2897 .pins = ssp2_pins[4],
2898 .npins = ARRAY_SIZE(ssp2_pins[4]), 2898 .npins = ARRAY_SIZE(ssp2_pins[4]),
2899 .modemuxs = ssp2_90_93_modemux, 2899 .modemuxs = ssp2_90_93_modemux,
2900 .nmodemuxs = ARRAY_SIZE(ssp2_90_93_modemux), 2900 .nmodemuxs = ARRAY_SIZE(ssp2_90_93_modemux),
2901 }, 2901 },
2902 }; 2902 };
2903 2903
2904 static const char *const ssp2_grps[] = { "ssp2_13_16_grp", "ssp2_32_35_grp", 2904 static const char *const ssp2_grps[] = { "ssp2_13_16_grp", "ssp2_32_35_grp",
2905 "ssp2_44_47_grp", "ssp2_61_64_grp", "ssp2_90_93_grp" }; 2905 "ssp2_44_47_grp", "ssp2_61_64_grp", "ssp2_90_93_grp" };
2906 static struct spear_function ssp2_function = { 2906 static struct spear_function ssp2_function = {
2907 .name = "ssp2", 2907 .name = "ssp2",
2908 .groups = ssp2_grps, 2908 .groups = ssp2_grps,
2909 .ngroups = ARRAY_SIZE(ssp2_grps), 2909 .ngroups = ARRAY_SIZE(ssp2_grps),
2910 }; 2910 };
2911 2911
2912 /* Pad multiplexing for cadence mii2 as mii device */ 2912 /* Pad multiplexing for cadence mii2 as mii device */
2913 static const unsigned mii2_pins[] = { 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 2913 static const unsigned mii2_pins[] = { 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
2914 90, 91, 92, 93, 94, 95, 96, 97 }; 2914 90, 91, 92, 93, 94, 95, 96, 97 };
2915 static struct spear_muxreg mii2_muxreg[] = { 2915 static struct spear_muxreg mii2_muxreg[] = {
2916 { 2916 {
2917 .reg = IP_SEL_PAD_80_89_REG, 2917 .reg = IP_SEL_PAD_80_89_REG,
2918 .mask = PMX_PL_80_TO_85_MASK | PMX_PL_86_87_MASK | 2918 .mask = PMX_PL_80_TO_85_MASK | PMX_PL_86_87_MASK |
2919 PMX_PL_88_89_MASK, 2919 PMX_PL_88_89_MASK,
2920 .val = PMX_MII2_PL_80_TO_85_VAL | PMX_MII2_PL_86_87_VAL | 2920 .val = PMX_MII2_PL_80_TO_85_VAL | PMX_MII2_PL_86_87_VAL |
2921 PMX_MII2_PL_88_89_VAL, 2921 PMX_MII2_PL_88_89_VAL,
2922 }, { 2922 }, {
2923 .reg = IP_SEL_PAD_90_99_REG, 2923 .reg = IP_SEL_PAD_90_99_REG,
2924 .mask = PMX_PL_90_91_MASK | PMX_PL_92_93_MASK | 2924 .mask = PMX_PL_90_91_MASK | PMX_PL_92_93_MASK |
2925 PMX_PL_94_95_MASK | PMX_PL_96_97_MASK, 2925 PMX_PL_94_95_MASK | PMX_PL_96_97_MASK,
2926 .val = PMX_MII2_PL_90_91_VAL | PMX_MII2_PL_92_93_VAL | 2926 .val = PMX_MII2_PL_90_91_VAL | PMX_MII2_PL_92_93_VAL |
2927 PMX_MII2_PL_94_95_VAL | PMX_MII2_PL_96_97_VAL, 2927 PMX_MII2_PL_94_95_VAL | PMX_MII2_PL_96_97_VAL,
2928 }, { 2928 }, {
2929 .reg = EXT_CTRL_REG, 2929 .reg = EXT_CTRL_REG,
2930 .mask = (MAC_MODE_MASK << MAC2_MODE_SHIFT) | 2930 .mask = (MAC_MODE_MASK << MAC2_MODE_SHIFT) |
2931 (MAC_MODE_MASK << MAC1_MODE_SHIFT) | 2931 (MAC_MODE_MASK << MAC1_MODE_SHIFT) |
2932 MII_MDIO_MASK, 2932 MII_MDIO_MASK,
2933 .val = (MAC_MODE_MII << MAC2_MODE_SHIFT) | 2933 .val = (MAC_MODE_MII << MAC2_MODE_SHIFT) |
2934 (MAC_MODE_MII << MAC1_MODE_SHIFT) | 2934 (MAC_MODE_MII << MAC1_MODE_SHIFT) |
2935 MII_MDIO_81_VAL, 2935 MII_MDIO_81_VAL,
2936 }, 2936 },
2937 }; 2937 };
2938 2938
2939 static struct spear_modemux mii2_modemux[] = { 2939 static struct spear_modemux mii2_modemux[] = {
2940 { 2940 {
2941 .modes = EXTENDED_MODE, 2941 .modes = EXTENDED_MODE,
2942 .muxregs = mii2_muxreg, 2942 .muxregs = mii2_muxreg,
2943 .nmuxregs = ARRAY_SIZE(mii2_muxreg), 2943 .nmuxregs = ARRAY_SIZE(mii2_muxreg),
2944 }, 2944 },
2945 }; 2945 };
2946 2946
2947 static struct spear_pingroup mii2_pingroup = { 2947 static struct spear_pingroup mii2_pingroup = {
2948 .name = "mii2_grp", 2948 .name = "mii2_grp",
2949 .pins = mii2_pins, 2949 .pins = mii2_pins,
2950 .npins = ARRAY_SIZE(mii2_pins), 2950 .npins = ARRAY_SIZE(mii2_pins),
2951 .modemuxs = mii2_modemux, 2951 .modemuxs = mii2_modemux,
2952 .nmodemuxs = ARRAY_SIZE(mii2_modemux), 2952 .nmodemuxs = ARRAY_SIZE(mii2_modemux),
2953 }; 2953 };
2954 2954
2955 static const char *const mii2_grps[] = { "mii2_grp" }; 2955 static const char *const mii2_grps[] = { "mii2_grp" };
2956 static struct spear_function mii2_function = { 2956 static struct spear_function mii2_function = {
2957 .name = "mii2", 2957 .name = "mii2",
2958 .groups = mii2_grps, 2958 .groups = mii2_grps,
2959 .ngroups = ARRAY_SIZE(mii2_grps), 2959 .ngroups = ARRAY_SIZE(mii2_grps),
2960 }; 2960 };
2961 2961
2962 /* Pad multiplexing for cadence mii 1_2 as smii or rmii device */ 2962 /* Pad multiplexing for cadence mii 1_2 as smii or rmii device */
2963 static const unsigned rmii0_1_pins[] = { 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 2963 static const unsigned rmii0_1_pins[] = { 10, 11, 13, 14, 15, 16, 17, 18, 19, 20,
2964 21, 22, 23, 24, 25, 26, 27 }; 2964 21, 22, 23, 24, 25, 26, 27 };
2965 static const unsigned smii0_1_pins[] = { 10, 11, 21, 22, 23, 24, 25, 26, 27 }; 2965 static const unsigned smii0_1_pins[] = { 10, 11, 21, 22, 23, 24, 25, 26, 27 };
2966 static struct spear_muxreg mii0_1_muxreg[] = { 2966 static struct spear_muxreg mii0_1_muxreg[] = {
2967 { 2967 {
2968 .reg = PMX_CONFIG_REG, 2968 .reg = PMX_CONFIG_REG,
2969 .mask = PMX_MII_MASK, 2969 .mask = PMX_MII_MASK,
2970 .val = 0, 2970 .val = 0,
2971 }, 2971 },
2972 }; 2972 };
2973 2973
2974 static struct spear_muxreg smii0_1_ext_muxreg[] = { 2974 static struct spear_muxreg smii0_1_ext_muxreg[] = {
2975 { 2975 {
2976 .reg = IP_SEL_PAD_10_19_REG, 2976 .reg = IP_SEL_PAD_10_19_REG,
2977 .mask = PMX_PL_10_11_MASK, 2977 .mask = PMX_PL_10_11_MASK,
2978 .val = PMX_SMII_PL_10_11_VAL, 2978 .val = PMX_SMII_PL_10_11_VAL,
2979 }, { 2979 }, {
2980 .reg = IP_SEL_PAD_20_29_REG, 2980 .reg = IP_SEL_PAD_20_29_REG,
2981 .mask = PMX_PL_21_TO_27_MASK, 2981 .mask = PMX_PL_21_TO_27_MASK,
2982 .val = PMX_SMII_PL_21_TO_27_VAL, 2982 .val = PMX_SMII_PL_21_TO_27_VAL,
2983 }, { 2983 }, {
2984 .reg = EXT_CTRL_REG, 2984 .reg = EXT_CTRL_REG,
2985 .mask = (MAC_MODE_MASK << MAC2_MODE_SHIFT) | 2985 .mask = (MAC_MODE_MASK << MAC2_MODE_SHIFT) |
2986 (MAC_MODE_MASK << MAC1_MODE_SHIFT) | 2986 (MAC_MODE_MASK << MAC1_MODE_SHIFT) |
2987 MII_MDIO_MASK, 2987 MII_MDIO_MASK,
2988 .val = (MAC_MODE_SMII << MAC2_MODE_SHIFT) 2988 .val = (MAC_MODE_SMII << MAC2_MODE_SHIFT)
2989 | (MAC_MODE_SMII << MAC1_MODE_SHIFT) 2989 | (MAC_MODE_SMII << MAC1_MODE_SHIFT)
2990 | MII_MDIO_10_11_VAL, 2990 | MII_MDIO_10_11_VAL,
2991 }, 2991 },
2992 }; 2992 };
2993 2993
2994 static struct spear_muxreg rmii0_1_ext_muxreg[] = { 2994 static struct spear_muxreg rmii0_1_ext_muxreg[] = {
2995 { 2995 {
2996 .reg = IP_SEL_PAD_10_19_REG, 2996 .reg = IP_SEL_PAD_10_19_REG,
2997 .mask = PMX_PL_10_11_MASK | PMX_PL_13_14_MASK | 2997 .mask = PMX_PL_10_11_MASK | PMX_PL_13_14_MASK |
2998 PMX_PL_15_16_MASK | PMX_PL_17_18_MASK | PMX_PL_19_MASK, 2998 PMX_PL_15_16_MASK | PMX_PL_17_18_MASK | PMX_PL_19_MASK,
2999 .val = PMX_RMII_PL_10_11_VAL | PMX_RMII_PL_13_14_VAL | 2999 .val = PMX_RMII_PL_10_11_VAL | PMX_RMII_PL_13_14_VAL |
3000 PMX_RMII_PL_15_16_VAL | PMX_RMII_PL_17_18_VAL | 3000 PMX_RMII_PL_15_16_VAL | PMX_RMII_PL_17_18_VAL |
3001 PMX_RMII_PL_19_VAL, 3001 PMX_RMII_PL_19_VAL,
3002 }, { 3002 }, {
3003 .reg = IP_SEL_PAD_20_29_REG, 3003 .reg = IP_SEL_PAD_20_29_REG,
3004 .mask = PMX_PL_20_MASK | PMX_PL_21_TO_27_MASK, 3004 .mask = PMX_PL_20_MASK | PMX_PL_21_TO_27_MASK,
3005 .val = PMX_RMII_PL_20_VAL | PMX_RMII_PL_21_TO_27_VAL, 3005 .val = PMX_RMII_PL_20_VAL | PMX_RMII_PL_21_TO_27_VAL,
3006 }, { 3006 }, {
3007 .reg = EXT_CTRL_REG, 3007 .reg = EXT_CTRL_REG,
3008 .mask = (MAC_MODE_MASK << MAC2_MODE_SHIFT) | 3008 .mask = (MAC_MODE_MASK << MAC2_MODE_SHIFT) |
3009 (MAC_MODE_MASK << MAC1_MODE_SHIFT) | 3009 (MAC_MODE_MASK << MAC1_MODE_SHIFT) |
3010 MII_MDIO_MASK, 3010 MII_MDIO_MASK,
3011 .val = (MAC_MODE_RMII << MAC2_MODE_SHIFT) 3011 .val = (MAC_MODE_RMII << MAC2_MODE_SHIFT)
3012 | (MAC_MODE_RMII << MAC1_MODE_SHIFT) 3012 | (MAC_MODE_RMII << MAC1_MODE_SHIFT)
3013 | MII_MDIO_10_11_VAL, 3013 | MII_MDIO_10_11_VAL,
3014 }, 3014 },
3015 }; 3015 };
3016 3016
3017 static struct spear_modemux mii0_1_modemux[][2] = { 3017 static struct spear_modemux mii0_1_modemux[][2] = {
3018 { 3018 {
3019 /* configure as smii */ 3019 /* configure as smii */
3020 { 3020 {
3021 .modes = AUTO_NET_SMII_MODE | AUTO_EXP_MODE | 3021 .modes = AUTO_NET_SMII_MODE | AUTO_EXP_MODE |
3022 SMALL_PRINTERS_MODE | EXTENDED_MODE, 3022 SMALL_PRINTERS_MODE | EXTENDED_MODE,
3023 .muxregs = mii0_1_muxreg, 3023 .muxregs = mii0_1_muxreg,
3024 .nmuxregs = ARRAY_SIZE(mii0_1_muxreg), 3024 .nmuxregs = ARRAY_SIZE(mii0_1_muxreg),
3025 }, { 3025 }, {
3026 .modes = EXTENDED_MODE, 3026 .modes = EXTENDED_MODE,
3027 .muxregs = smii0_1_ext_muxreg, 3027 .muxregs = smii0_1_ext_muxreg,
3028 .nmuxregs = ARRAY_SIZE(smii0_1_ext_muxreg), 3028 .nmuxregs = ARRAY_SIZE(smii0_1_ext_muxreg),
3029 }, 3029 },
3030 }, { 3030 }, {
3031 /* configure as rmii */ 3031 /* configure as rmii */
3032 { 3032 {
3033 .modes = AUTO_NET_SMII_MODE | AUTO_EXP_MODE | 3033 .modes = AUTO_NET_SMII_MODE | AUTO_EXP_MODE |
3034 SMALL_PRINTERS_MODE | EXTENDED_MODE, 3034 SMALL_PRINTERS_MODE | EXTENDED_MODE,
3035 .muxregs = mii0_1_muxreg, 3035 .muxregs = mii0_1_muxreg,
3036 .nmuxregs = ARRAY_SIZE(mii0_1_muxreg), 3036 .nmuxregs = ARRAY_SIZE(mii0_1_muxreg),
3037 }, { 3037 }, {
3038 .modes = EXTENDED_MODE, 3038 .modes = EXTENDED_MODE,
3039 .muxregs = rmii0_1_ext_muxreg, 3039 .muxregs = rmii0_1_ext_muxreg,
3040 .nmuxregs = ARRAY_SIZE(rmii0_1_ext_muxreg), 3040 .nmuxregs = ARRAY_SIZE(rmii0_1_ext_muxreg),
3041 }, 3041 },
3042 }, 3042 },
3043 }; 3043 };
3044 3044
3045 static struct spear_pingroup mii0_1_pingroup[] = { 3045 static struct spear_pingroup mii0_1_pingroup[] = {
3046 { 3046 {
3047 .name = "smii0_1_grp", 3047 .name = "smii0_1_grp",
3048 .pins = smii0_1_pins, 3048 .pins = smii0_1_pins,
3049 .npins = ARRAY_SIZE(smii0_1_pins), 3049 .npins = ARRAY_SIZE(smii0_1_pins),
3050 .modemuxs = mii0_1_modemux[0], 3050 .modemuxs = mii0_1_modemux[0],
3051 .nmodemuxs = ARRAY_SIZE(mii0_1_modemux[0]), 3051 .nmodemuxs = ARRAY_SIZE(mii0_1_modemux[0]),
3052 }, { 3052 }, {
3053 .name = "rmii0_1_grp", 3053 .name = "rmii0_1_grp",
3054 .pins = rmii0_1_pins, 3054 .pins = rmii0_1_pins,
3055 .npins = ARRAY_SIZE(rmii0_1_pins), 3055 .npins = ARRAY_SIZE(rmii0_1_pins),
3056 .modemuxs = mii0_1_modemux[1], 3056 .modemuxs = mii0_1_modemux[1],
3057 .nmodemuxs = ARRAY_SIZE(mii0_1_modemux[1]), 3057 .nmodemuxs = ARRAY_SIZE(mii0_1_modemux[1]),
3058 }, 3058 },
3059 }; 3059 };
3060 3060
3061 static const char *const mii0_1_grps[] = { "smii0_1_grp", "rmii0_1_grp" }; 3061 static const char *const mii0_1_grps[] = { "smii0_1_grp", "rmii0_1_grp" };
3062 static struct spear_function mii0_1_function = { 3062 static struct spear_function mii0_1_function = {
3063 .name = "mii0_1", 3063 .name = "mii0_1",
3064 .groups = mii0_1_grps, 3064 .groups = mii0_1_grps,
3065 .ngroups = ARRAY_SIZE(mii0_1_grps), 3065 .ngroups = ARRAY_SIZE(mii0_1_grps),
3066 }; 3066 };
3067 3067
3068 /* Pad multiplexing for i2c1 device */ 3068 /* Pad multiplexing for i2c1 device */
3069 static const unsigned i2c1_pins[][2] = { { 8, 9 }, { 98, 99 } }; 3069 static const unsigned i2c1_pins[][2] = { { 8, 9 }, { 98, 99 } };
3070 static struct spear_muxreg i2c1_ext_8_9_muxreg[] = { 3070 static struct spear_muxreg i2c1_ext_8_9_muxreg[] = {
3071 { 3071 {
3072 .reg = PMX_CONFIG_REG, 3072 .reg = PMX_CONFIG_REG,
3073 .mask = PMX_SSP_CS_MASK, 3073 .mask = PMX_SSP_CS_MASK,
3074 .val = 0, 3074 .val = 0,
3075 }, { 3075 }, {
3076 .reg = IP_SEL_PAD_0_9_REG, 3076 .reg = IP_SEL_PAD_0_9_REG,
3077 .mask = PMX_PL_8_9_MASK, 3077 .mask = PMX_PL_8_9_MASK,
3078 .val = PMX_I2C1_PL_8_9_VAL, 3078 .val = PMX_I2C1_PL_8_9_VAL,
3079 }, { 3079 }, {
3080 .reg = IP_SEL_MIX_PAD_REG, 3080 .reg = IP_SEL_MIX_PAD_REG,
3081 .mask = PMX_I2C1_PORT_SEL_MASK, 3081 .mask = PMX_I2C1_PORT_SEL_MASK,
3082 .val = PMX_I2C1_PORT_8_9_VAL, 3082 .val = PMX_I2C1_PORT_8_9_VAL,
3083 }, 3083 },
3084 }; 3084 };
3085 3085
3086 static struct spear_muxreg i2c1_ext_98_99_muxreg[] = { 3086 static struct spear_muxreg i2c1_ext_98_99_muxreg[] = {
3087 { 3087 {
3088 .reg = IP_SEL_PAD_90_99_REG, 3088 .reg = IP_SEL_PAD_90_99_REG,
3089 .mask = PMX_PL_98_MASK | PMX_PL_99_MASK, 3089 .mask = PMX_PL_98_MASK | PMX_PL_99_MASK,
3090 .val = PMX_I2C1_PL_98_VAL | PMX_I2C1_PL_99_VAL, 3090 .val = PMX_I2C1_PL_98_VAL | PMX_I2C1_PL_99_VAL,
3091 }, { 3091 }, {
3092 .reg = IP_SEL_MIX_PAD_REG, 3092 .reg = IP_SEL_MIX_PAD_REG,
3093 .mask = PMX_I2C1_PORT_SEL_MASK, 3093 .mask = PMX_I2C1_PORT_SEL_MASK,
3094 .val = PMX_I2C1_PORT_98_99_VAL, 3094 .val = PMX_I2C1_PORT_98_99_VAL,
3095 }, 3095 },
3096 }; 3096 };
3097 3097
3098 static struct spear_modemux i2c1_modemux[][1] = { 3098 static struct spear_modemux i2c1_modemux[][1] = {
3099 { 3099 {
3100 /* Select signals on pins 8-9 */ 3100 /* Select signals on pins 8-9 */
3101 { 3101 {
3102 .modes = EXTENDED_MODE, 3102 .modes = EXTENDED_MODE,
3103 .muxregs = i2c1_ext_8_9_muxreg, 3103 .muxregs = i2c1_ext_8_9_muxreg,
3104 .nmuxregs = ARRAY_SIZE(i2c1_ext_8_9_muxreg), 3104 .nmuxregs = ARRAY_SIZE(i2c1_ext_8_9_muxreg),
3105 }, 3105 },
3106 }, { 3106 }, {
3107 /* Select signals on pins 98-99 */ 3107 /* Select signals on pins 98-99 */
3108 { 3108 {
3109 .modes = EXTENDED_MODE, 3109 .modes = EXTENDED_MODE,
3110 .muxregs = i2c1_ext_98_99_muxreg, 3110 .muxregs = i2c1_ext_98_99_muxreg,
3111 .nmuxregs = ARRAY_SIZE(i2c1_ext_98_99_muxreg), 3111 .nmuxregs = ARRAY_SIZE(i2c1_ext_98_99_muxreg),
3112 }, 3112 },
3113 }, 3113 },
3114 }; 3114 };
3115 3115
3116 static struct spear_pingroup i2c1_pingroup[] = { 3116 static struct spear_pingroup i2c1_pingroup[] = {
3117 { 3117 {
3118 .name = "i2c1_8_9_grp", 3118 .name = "i2c1_8_9_grp",
3119 .pins = i2c1_pins[0], 3119 .pins = i2c1_pins[0],
3120 .npins = ARRAY_SIZE(i2c1_pins[0]), 3120 .npins = ARRAY_SIZE(i2c1_pins[0]),
3121 .modemuxs = i2c1_modemux[0], 3121 .modemuxs = i2c1_modemux[0],
3122 .nmodemuxs = ARRAY_SIZE(i2c1_modemux[0]), 3122 .nmodemuxs = ARRAY_SIZE(i2c1_modemux[0]),
3123 }, { 3123 }, {
3124 .name = "i2c1_98_99_grp", 3124 .name = "i2c1_98_99_grp",
3125 .pins = i2c1_pins[1], 3125 .pins = i2c1_pins[1],
3126 .npins = ARRAY_SIZE(i2c1_pins[1]), 3126 .npins = ARRAY_SIZE(i2c1_pins[1]),
3127 .modemuxs = i2c1_modemux[1], 3127 .modemuxs = i2c1_modemux[1],
3128 .nmodemuxs = ARRAY_SIZE(i2c1_modemux[1]), 3128 .nmodemuxs = ARRAY_SIZE(i2c1_modemux[1]),
3129 }, 3129 },
3130 }; 3130 };
3131 3131
3132 static const char *const i2c1_grps[] = { "i2c1_8_9_grp", "i2c1_98_99_grp" }; 3132 static const char *const i2c1_grps[] = { "i2c1_8_9_grp", "i2c1_98_99_grp" };
3133 static struct spear_function i2c1_function = { 3133 static struct spear_function i2c1_function = {
3134 .name = "i2c1", 3134 .name = "i2c1",
3135 .groups = i2c1_grps, 3135 .groups = i2c1_grps,
3136 .ngroups = ARRAY_SIZE(i2c1_grps), 3136 .ngroups = ARRAY_SIZE(i2c1_grps),
3137 }; 3137 };
3138 3138
3139 /* Pad multiplexing for i2c2 device */ 3139 /* Pad multiplexing for i2c2 device */
3140 static const unsigned i2c2_pins[][2] = { { 0, 1 }, { 2, 3 }, { 19, 20 }, 3140 static const unsigned i2c2_pins[][2] = { { 0, 1 }, { 2, 3 }, { 19, 20 },
3141 { 75, 76 }, { 96, 97 } }; 3141 { 75, 76 }, { 96, 97 } };
3142 static struct spear_muxreg i2c2_ext_0_1_muxreg[] = { 3142 static struct spear_muxreg i2c2_ext_0_1_muxreg[] = {
3143 { 3143 {
3144 .reg = PMX_CONFIG_REG, 3144 .reg = PMX_CONFIG_REG,
3145 .mask = PMX_FIRDA_MASK, 3145 .mask = PMX_FIRDA_MASK,
3146 .val = 0, 3146 .val = 0,
3147 }, { 3147 }, {
3148 .reg = IP_SEL_PAD_0_9_REG, 3148 .reg = IP_SEL_PAD_0_9_REG,
3149 .mask = PMX_PL_0_1_MASK, 3149 .mask = PMX_PL_0_1_MASK,
3150 .val = PMX_I2C2_PL_0_1_VAL, 3150 .val = PMX_I2C2_PL_0_1_VAL,
3151 }, { 3151 }, {
3152 .reg = IP_SEL_MIX_PAD_REG, 3152 .reg = IP_SEL_MIX_PAD_REG,
3153 .mask = PMX_I2C2_PORT_SEL_MASK, 3153 .mask = PMX_I2C2_PORT_SEL_MASK,
3154 .val = PMX_I2C2_PORT_0_1_VAL, 3154 .val = PMX_I2C2_PORT_0_1_VAL,
3155 }, 3155 },
3156 }; 3156 };
3157 3157
3158 static struct spear_muxreg i2c2_ext_2_3_muxreg[] = { 3158 static struct spear_muxreg i2c2_ext_2_3_muxreg[] = {
3159 { 3159 {
3160 .reg = PMX_CONFIG_REG, 3160 .reg = PMX_CONFIG_REG,
3161 .mask = PMX_UART0_MASK, 3161 .mask = PMX_UART0_MASK,
3162 .val = 0, 3162 .val = 0,
3163 }, { 3163 }, {
3164 .reg = IP_SEL_PAD_0_9_REG, 3164 .reg = IP_SEL_PAD_0_9_REG,
3165 .mask = PMX_PL_2_3_MASK, 3165 .mask = PMX_PL_2_3_MASK,
3166 .val = PMX_I2C2_PL_2_3_VAL, 3166 .val = PMX_I2C2_PL_2_3_VAL,
3167 }, { 3167 }, {
3168 .reg = IP_SEL_MIX_PAD_REG, 3168 .reg = IP_SEL_MIX_PAD_REG,
3169 .mask = PMX_I2C2_PORT_SEL_MASK, 3169 .mask = PMX_I2C2_PORT_SEL_MASK,
3170 .val = PMX_I2C2_PORT_2_3_VAL, 3170 .val = PMX_I2C2_PORT_2_3_VAL,
3171 }, 3171 },
3172 }; 3172 };
3173 3173
3174 static struct spear_muxreg i2c2_ext_19_20_muxreg[] = { 3174 static struct spear_muxreg i2c2_ext_19_20_muxreg[] = {
3175 { 3175 {
3176 .reg = PMX_CONFIG_REG, 3176 .reg = PMX_CONFIG_REG,
3177 .mask = PMX_MII_MASK, 3177 .mask = PMX_MII_MASK,
3178 .val = 0, 3178 .val = 0,
3179 }, { 3179 }, {
3180 .reg = IP_SEL_PAD_10_19_REG, 3180 .reg = IP_SEL_PAD_10_19_REG,
3181 .mask = PMX_PL_19_MASK, 3181 .mask = PMX_PL_19_MASK,
3182 .val = PMX_I2C2_PL_19_VAL, 3182 .val = PMX_I2C2_PL_19_VAL,
3183 }, { 3183 }, {
3184 .reg = IP_SEL_PAD_20_29_REG, 3184 .reg = IP_SEL_PAD_20_29_REG,
3185 .mask = PMX_PL_20_MASK, 3185 .mask = PMX_PL_20_MASK,
3186 .val = PMX_I2C2_PL_20_VAL, 3186 .val = PMX_I2C2_PL_20_VAL,
3187 }, { 3187 }, {
3188 .reg = IP_SEL_MIX_PAD_REG, 3188 .reg = IP_SEL_MIX_PAD_REG,
3189 .mask = PMX_I2C2_PORT_SEL_MASK, 3189 .mask = PMX_I2C2_PORT_SEL_MASK,
3190 .val = PMX_I2C2_PORT_19_20_VAL, 3190 .val = PMX_I2C2_PORT_19_20_VAL,
3191 }, 3191 },
3192 }; 3192 };
3193 3193
3194 static struct spear_muxreg i2c2_ext_75_76_muxreg[] = { 3194 static struct spear_muxreg i2c2_ext_75_76_muxreg[] = {
3195 { 3195 {
3196 .reg = IP_SEL_PAD_70_79_REG, 3196 .reg = IP_SEL_PAD_70_79_REG,
3197 .mask = PMX_PL_75_76_MASK, 3197 .mask = PMX_PL_75_76_MASK,
3198 .val = PMX_I2C2_PL_75_76_VAL, 3198 .val = PMX_I2C2_PL_75_76_VAL,
3199 }, { 3199 }, {
3200 .reg = IP_SEL_MIX_PAD_REG, 3200 .reg = IP_SEL_MIX_PAD_REG,
3201 .mask = PMX_I2C2_PORT_SEL_MASK, 3201 .mask = PMX_I2C2_PORT_SEL_MASK,
3202 .val = PMX_I2C2_PORT_75_76_VAL, 3202 .val = PMX_I2C2_PORT_75_76_VAL,
3203 }, 3203 },
3204 }; 3204 };
3205 3205
3206 static struct spear_muxreg i2c2_ext_96_97_muxreg[] = { 3206 static struct spear_muxreg i2c2_ext_96_97_muxreg[] = {
3207 { 3207 {
3208 .reg = IP_SEL_PAD_90_99_REG, 3208 .reg = IP_SEL_PAD_90_99_REG,
3209 .mask = PMX_PL_96_97_MASK, 3209 .mask = PMX_PL_96_97_MASK,
3210 .val = PMX_I2C2_PL_96_97_VAL, 3210 .val = PMX_I2C2_PL_96_97_VAL,
3211 }, { 3211 }, {
3212 .reg = IP_SEL_MIX_PAD_REG, 3212 .reg = IP_SEL_MIX_PAD_REG,
3213 .mask = PMX_I2C2_PORT_SEL_MASK, 3213 .mask = PMX_I2C2_PORT_SEL_MASK,
3214 .val = PMX_I2C2_PORT_96_97_VAL, 3214 .val = PMX_I2C2_PORT_96_97_VAL,
3215 }, 3215 },
3216 }; 3216 };
3217 3217
3218 static struct spear_modemux i2c2_modemux[][1] = { 3218 static struct spear_modemux i2c2_modemux[][1] = {
3219 { 3219 {
3220 /* Select signals on pins 0_1 */ 3220 /* Select signals on pins 0_1 */
3221 { 3221 {
3222 .modes = EXTENDED_MODE, 3222 .modes = EXTENDED_MODE,
3223 .muxregs = i2c2_ext_0_1_muxreg, 3223 .muxregs = i2c2_ext_0_1_muxreg,
3224 .nmuxregs = ARRAY_SIZE(i2c2_ext_0_1_muxreg), 3224 .nmuxregs = ARRAY_SIZE(i2c2_ext_0_1_muxreg),
3225 }, 3225 },
3226 }, { 3226 }, {
3227 /* Select signals on pins 2_3 */ 3227 /* Select signals on pins 2_3 */
3228 { 3228 {
3229 .modes = EXTENDED_MODE, 3229 .modes = EXTENDED_MODE,
3230 .muxregs = i2c2_ext_2_3_muxreg, 3230 .muxregs = i2c2_ext_2_3_muxreg,
3231 .nmuxregs = ARRAY_SIZE(i2c2_ext_2_3_muxreg), 3231 .nmuxregs = ARRAY_SIZE(i2c2_ext_2_3_muxreg),
3232 }, 3232 },
3233 }, { 3233 }, {
3234 /* Select signals on pins 19_20 */ 3234 /* Select signals on pins 19_20 */
3235 { 3235 {
3236 .modes = EXTENDED_MODE, 3236 .modes = EXTENDED_MODE,
3237 .muxregs = i2c2_ext_19_20_muxreg, 3237 .muxregs = i2c2_ext_19_20_muxreg,
3238 .nmuxregs = ARRAY_SIZE(i2c2_ext_19_20_muxreg), 3238 .nmuxregs = ARRAY_SIZE(i2c2_ext_19_20_muxreg),
3239 }, 3239 },
3240 }, { 3240 }, {
3241 /* Select signals on pins 75_76 */ 3241 /* Select signals on pins 75_76 */
3242 { 3242 {
3243 .modes = EXTENDED_MODE, 3243 .modes = EXTENDED_MODE,
3244 .muxregs = i2c2_ext_75_76_muxreg, 3244 .muxregs = i2c2_ext_75_76_muxreg,
3245 .nmuxregs = ARRAY_SIZE(i2c2_ext_75_76_muxreg), 3245 .nmuxregs = ARRAY_SIZE(i2c2_ext_75_76_muxreg),
3246 }, 3246 },
3247 }, { 3247 }, {
3248 /* Select signals on pins 96_97 */ 3248 /* Select signals on pins 96_97 */
3249 { 3249 {
3250 .modes = EXTENDED_MODE, 3250 .modes = EXTENDED_MODE,
3251 .muxregs = i2c2_ext_96_97_muxreg, 3251 .muxregs = i2c2_ext_96_97_muxreg,
3252 .nmuxregs = ARRAY_SIZE(i2c2_ext_96_97_muxreg), 3252 .nmuxregs = ARRAY_SIZE(i2c2_ext_96_97_muxreg),
3253 }, 3253 },
3254 }, 3254 },
3255 }; 3255 };
3256 3256
3257 static struct spear_pingroup i2c2_pingroup[] = { 3257 static struct spear_pingroup i2c2_pingroup[] = {
3258 { 3258 {
3259 .name = "i2c2_0_1_grp", 3259 .name = "i2c2_0_1_grp",
3260 .pins = i2c2_pins[0], 3260 .pins = i2c2_pins[0],
3261 .npins = ARRAY_SIZE(i2c2_pins[0]), 3261 .npins = ARRAY_SIZE(i2c2_pins[0]),
3262 .modemuxs = i2c2_modemux[0], 3262 .modemuxs = i2c2_modemux[0],
3263 .nmodemuxs = ARRAY_SIZE(i2c2_modemux[0]), 3263 .nmodemuxs = ARRAY_SIZE(i2c2_modemux[0]),
3264 }, { 3264 }, {
3265 .name = "i2c2_2_3_grp", 3265 .name = "i2c2_2_3_grp",
3266 .pins = i2c2_pins[1], 3266 .pins = i2c2_pins[1],
3267 .npins = ARRAY_SIZE(i2c2_pins[1]), 3267 .npins = ARRAY_SIZE(i2c2_pins[1]),
3268 .modemuxs = i2c2_modemux[1], 3268 .modemuxs = i2c2_modemux[1],
3269 .nmodemuxs = ARRAY_SIZE(i2c2_modemux[1]), 3269 .nmodemuxs = ARRAY_SIZE(i2c2_modemux[1]),
3270 }, { 3270 }, {
3271 .name = "i2c2_19_20_grp", 3271 .name = "i2c2_19_20_grp",
3272 .pins = i2c2_pins[2], 3272 .pins = i2c2_pins[2],
3273 .npins = ARRAY_SIZE(i2c2_pins[2]), 3273 .npins = ARRAY_SIZE(i2c2_pins[2]),
3274 .modemuxs = i2c2_modemux[2], 3274 .modemuxs = i2c2_modemux[2],
3275 .nmodemuxs = ARRAY_SIZE(i2c2_modemux[2]), 3275 .nmodemuxs = ARRAY_SIZE(i2c2_modemux[2]),
3276 }, { 3276 }, {
3277 .name = "i2c2_75_76_grp", 3277 .name = "i2c2_75_76_grp",
3278 .pins = i2c2_pins[3], 3278 .pins = i2c2_pins[3],
3279 .npins = ARRAY_SIZE(i2c2_pins[3]), 3279 .npins = ARRAY_SIZE(i2c2_pins[3]),
3280 .modemuxs = i2c2_modemux[3], 3280 .modemuxs = i2c2_modemux[3],
3281 .nmodemuxs = ARRAY_SIZE(i2c2_modemux[3]), 3281 .nmodemuxs = ARRAY_SIZE(i2c2_modemux[3]),
3282 }, { 3282 }, {
3283 .name = "i2c2_96_97_grp", 3283 .name = "i2c2_96_97_grp",
3284 .pins = i2c2_pins[4], 3284 .pins = i2c2_pins[4],
3285 .npins = ARRAY_SIZE(i2c2_pins[4]), 3285 .npins = ARRAY_SIZE(i2c2_pins[4]),
3286 .modemuxs = i2c2_modemux[4], 3286 .modemuxs = i2c2_modemux[4],
3287 .nmodemuxs = ARRAY_SIZE(i2c2_modemux[4]), 3287 .nmodemuxs = ARRAY_SIZE(i2c2_modemux[4]),
3288 }, 3288 },
3289 }; 3289 };
3290 3290
3291 static const char *const i2c2_grps[] = { "i2c2_0_1_grp", "i2c2_2_3_grp", 3291 static const char *const i2c2_grps[] = { "i2c2_0_1_grp", "i2c2_2_3_grp",
3292 "i2c2_19_20_grp", "i2c2_75_76_grp", "i2c2_96_97_grp" }; 3292 "i2c2_19_20_grp", "i2c2_75_76_grp", "i2c2_96_97_grp" };
3293 static struct spear_function i2c2_function = { 3293 static struct spear_function i2c2_function = {
3294 .name = "i2c2", 3294 .name = "i2c2",
3295 .groups = i2c2_grps, 3295 .groups = i2c2_grps,
3296 .ngroups = ARRAY_SIZE(i2c2_grps), 3296 .ngroups = ARRAY_SIZE(i2c2_grps),
3297 }; 3297 };
3298 3298
3299 /* pingroups */ 3299 /* pingroups */
3300 static struct spear_pingroup *spear320_pingroups[] = { 3300 static struct spear_pingroup *spear320_pingroups[] = {
3301 SPEAR3XX_COMMON_PINGROUPS, 3301 SPEAR3XX_COMMON_PINGROUPS,
3302 &clcd_pingroup, 3302 &clcd_pingroup,
3303 &emi_pingroup, 3303 &emi_pingroup,
3304 &fsmc_8bit_pingroup, 3304 &fsmc_8bit_pingroup,
3305 &fsmc_16bit_pingroup, 3305 &fsmc_16bit_pingroup,
3306 &spp_pingroup, 3306 &spp_pingroup,
3307 &sdhci_led_pingroup, 3307 &sdhci_led_pingroup,
3308 &sdhci_pingroup[0], 3308 &sdhci_pingroup[0],
3309 &sdhci_pingroup[1], 3309 &sdhci_pingroup[1],
3310 &i2s_pingroup, 3310 &i2s_pingroup,
3311 &uart1_pingroup, 3311 &uart1_pingroup,
3312 &uart1_modem_pingroup[0], 3312 &uart1_modem_pingroup[0],
3313 &uart1_modem_pingroup[1], 3313 &uart1_modem_pingroup[1],
3314 &uart1_modem_pingroup[2], 3314 &uart1_modem_pingroup[2],
3315 &uart1_modem_pingroup[3], 3315 &uart1_modem_pingroup[3],
3316 &uart2_pingroup, 3316 &uart2_pingroup,
3317 &uart3_pingroup[0], 3317 &uart3_pingroup[0],
3318 &uart3_pingroup[1], 3318 &uart3_pingroup[1],
3319 &uart3_pingroup[2], 3319 &uart3_pingroup[2],
3320 &uart3_pingroup[3], 3320 &uart3_pingroup[3],
3321 &uart3_pingroup[4], 3321 &uart3_pingroup[4],
3322 &uart3_pingroup[5], 3322 &uart3_pingroup[5],
3323 &uart3_pingroup[6], 3323 &uart3_pingroup[6],
3324 &uart4_pingroup[0], 3324 &uart4_pingroup[0],
3325 &uart4_pingroup[1], 3325 &uart4_pingroup[1],
3326 &uart4_pingroup[2], 3326 &uart4_pingroup[2],
3327 &uart4_pingroup[3], 3327 &uart4_pingroup[3],
3328 &uart4_pingroup[4], 3328 &uart4_pingroup[4],
3329 &uart4_pingroup[5], 3329 &uart4_pingroup[5],
3330 &uart5_pingroup[0], 3330 &uart5_pingroup[0],
3331 &uart5_pingroup[1], 3331 &uart5_pingroup[1],
3332 &uart5_pingroup[2], 3332 &uart5_pingroup[2],
3333 &uart5_pingroup[3], 3333 &uart5_pingroup[3],
3334 &uart6_pingroup[0], 3334 &uart6_pingroup[0],
3335 &uart6_pingroup[1], 3335 &uart6_pingroup[1],
3336 &rs485_pingroup, 3336 &rs485_pingroup,
3337 &touchscreen_pingroup, 3337 &touchscreen_pingroup,
3338 &can0_pingroup, 3338 &can0_pingroup,
3339 &can1_pingroup, 3339 &can1_pingroup,
3340 &pwm0_1_pingroup[0], 3340 &pwm0_1_pingroup[0],
3341 &pwm0_1_pingroup[1], 3341 &pwm0_1_pingroup[1],
3342 &pwm0_1_pingroup[2], 3342 &pwm0_1_pingroup[2],
3343 &pwm0_1_pingroup[3], 3343 &pwm0_1_pingroup[3],
3344 &pwm0_1_pingroup[4], 3344 &pwm0_1_pingroup[4],
3345 &pwm0_1_pingroup[5], 3345 &pwm0_1_pingroup[5],
3346 &pwm0_1_pingroup[6], 3346 &pwm0_1_pingroup[6],
3347 &pwm2_pingroup[0], 3347 &pwm2_pingroup[0],
3348 &pwm2_pingroup[1], 3348 &pwm2_pingroup[1],
3349 &pwm2_pingroup[2], 3349 &pwm2_pingroup[2],
3350 &pwm2_pingroup[3], 3350 &pwm2_pingroup[3],
3351 &pwm2_pingroup[4], 3351 &pwm2_pingroup[4],
3352 &pwm2_pingroup[5], 3352 &pwm2_pingroup[5],
3353 &pwm2_pingroup[6], 3353 &pwm2_pingroup[6],
3354 &pwm3_pingroup[0], 3354 &pwm3_pingroup[0],
3355 &pwm3_pingroup[1], 3355 &pwm3_pingroup[1],
3356 &pwm3_pingroup[2], 3356 &pwm3_pingroup[2],
3357 &pwm3_pingroup[3], 3357 &pwm3_pingroup[3],
3358 &pwm3_pingroup[4], 3358 &pwm3_pingroup[4],
3359 &pwm3_pingroup[5], 3359 &pwm3_pingroup[5],
3360 &ssp1_pingroup[0], 3360 &ssp1_pingroup[0],
3361 &ssp1_pingroup[1], 3361 &ssp1_pingroup[1],
3362 &ssp1_pingroup[2], 3362 &ssp1_pingroup[2],
3363 &ssp1_pingroup[3], 3363 &ssp1_pingroup[3],
3364 &ssp1_pingroup[4], 3364 &ssp1_pingroup[4],
3365 &ssp2_pingroup[0], 3365 &ssp2_pingroup[0],
3366 &ssp2_pingroup[1], 3366 &ssp2_pingroup[1],
3367 &ssp2_pingroup[2], 3367 &ssp2_pingroup[2],
3368 &ssp2_pingroup[3], 3368 &ssp2_pingroup[3],
3369 &ssp2_pingroup[4], 3369 &ssp2_pingroup[4],
3370 &mii2_pingroup, 3370 &mii2_pingroup,
3371 &mii0_1_pingroup[0], 3371 &mii0_1_pingroup[0],
3372 &mii0_1_pingroup[1], 3372 &mii0_1_pingroup[1],
3373 &i2c1_pingroup[0], 3373 &i2c1_pingroup[0],
3374 &i2c1_pingroup[1], 3374 &i2c1_pingroup[1],
3375 &i2c2_pingroup[0], 3375 &i2c2_pingroup[0],
3376 &i2c2_pingroup[1], 3376 &i2c2_pingroup[1],
3377 &i2c2_pingroup[2], 3377 &i2c2_pingroup[2],
3378 &i2c2_pingroup[3], 3378 &i2c2_pingroup[3],
3379 &i2c2_pingroup[4], 3379 &i2c2_pingroup[4],
3380 }; 3380 };
3381 3381
3382 /* functions */ 3382 /* functions */
3383 static struct spear_function *spear320_functions[] = { 3383 static struct spear_function *spear320_functions[] = {
3384 SPEAR3XX_COMMON_FUNCTIONS, 3384 SPEAR3XX_COMMON_FUNCTIONS,
3385 &clcd_function, 3385 &clcd_function,
3386 &emi_function, 3386 &emi_function,
3387 &fsmc_function, 3387 &fsmc_function,
3388 &spp_function, 3388 &spp_function,
3389 &sdhci_function, 3389 &sdhci_function,
3390 &i2s_function, 3390 &i2s_function,
3391 &uart1_function, 3391 &uart1_function,
3392 &uart1_modem_function, 3392 &uart1_modem_function,
3393 &uart2_function, 3393 &uart2_function,
3394 &uart3_function, 3394 &uart3_function,
3395 &uart4_function, 3395 &uart4_function,
3396 &uart5_function, 3396 &uart5_function,
3397 &uart6_function, 3397 &uart6_function,
3398 &rs485_function, 3398 &rs485_function,
3399 &touchscreen_function, 3399 &touchscreen_function,
3400 &can0_function, 3400 &can0_function,
3401 &can1_function, 3401 &can1_function,
3402 &pwm0_1_function, 3402 &pwm0_1_function,
3403 &pwm2_function, 3403 &pwm2_function,
3404 &pwm3_function, 3404 &pwm3_function,
3405 &ssp1_function, 3405 &ssp1_function,
3406 &ssp2_function, 3406 &ssp2_function,
3407 &mii2_function, 3407 &mii2_function,
3408 &mii0_1_function, 3408 &mii0_1_function,
3409 &i2c1_function, 3409 &i2c1_function,
3410 &i2c2_function, 3410 &i2c2_function,
3411 }; 3411 };
3412 3412
3413 static struct of_device_id spear320_pinctrl_of_match[] = { 3413 static struct of_device_id spear320_pinctrl_of_match[] = {
3414 { 3414 {
3415 .compatible = "st,spear320-pinmux", 3415 .compatible = "st,spear320-pinmux",
3416 }, 3416 },
3417 {}, 3417 {},
3418 }; 3418 };
3419 3419
3420 static int __devinit spear320_pinctrl_probe(struct platform_device *pdev) 3420 static int __devinit spear320_pinctrl_probe(struct platform_device *pdev)
3421 { 3421 {
3422 int ret; 3422 int ret;
3423 3423
3424 spear3xx_machdata.groups = spear320_pingroups; 3424 spear3xx_machdata.groups = spear320_pingroups;
3425 spear3xx_machdata.ngroups = ARRAY_SIZE(spear320_pingroups); 3425 spear3xx_machdata.ngroups = ARRAY_SIZE(spear320_pingroups);
3426 spear3xx_machdata.functions = spear320_functions; 3426 spear3xx_machdata.functions = spear320_functions;
3427 spear3xx_machdata.nfunctions = ARRAY_SIZE(spear320_functions); 3427 spear3xx_machdata.nfunctions = ARRAY_SIZE(spear320_functions);
3428 3428
3429 spear3xx_machdata.modes_supported = true; 3429 spear3xx_machdata.modes_supported = true;
3430 spear3xx_machdata.pmx_modes = spear320_pmx_modes; 3430 spear3xx_machdata.pmx_modes = spear320_pmx_modes;
3431 spear3xx_machdata.npmx_modes = ARRAY_SIZE(spear320_pmx_modes); 3431 spear3xx_machdata.npmx_modes = ARRAY_SIZE(spear320_pmx_modes);
3432 3432
3433 pmx_init_addr(&spear3xx_machdata, PMX_CONFIG_REG); 3433 pmx_init_addr(&spear3xx_machdata, PMX_CONFIG_REG);
3434 3434
3435 ret = spear_pinctrl_probe(pdev, &spear3xx_machdata); 3435 ret = spear_pinctrl_probe(pdev, &spear3xx_machdata);
3436 if (ret) 3436 if (ret)
3437 return ret; 3437 return ret;
3438 3438
3439 return 0; 3439 return 0;
3440 } 3440 }
3441 3441
3442 static int __devexit spear320_pinctrl_remove(struct platform_device *pdev) 3442 static int spear320_pinctrl_remove(struct platform_device *pdev)
3443 { 3443 {
3444 return spear_pinctrl_remove(pdev); 3444 return spear_pinctrl_remove(pdev);
3445 } 3445 }
3446 3446
3447 static struct platform_driver spear320_pinctrl_driver = { 3447 static struct platform_driver spear320_pinctrl_driver = {
3448 .driver = { 3448 .driver = {
3449 .name = DRIVER_NAME, 3449 .name = DRIVER_NAME,
3450 .owner = THIS_MODULE, 3450 .owner = THIS_MODULE,
3451 .of_match_table = spear320_pinctrl_of_match, 3451 .of_match_table = spear320_pinctrl_of_match,
3452 }, 3452 },
3453 .probe = spear320_pinctrl_probe, 3453 .probe = spear320_pinctrl_probe,
3454 .remove = spear320_pinctrl_remove, 3454 .remove = spear320_pinctrl_remove,
3455 }; 3455 };
3456 3456
3457 static int __init spear320_pinctrl_init(void) 3457 static int __init spear320_pinctrl_init(void)
3458 { 3458 {
3459 return platform_driver_register(&spear320_pinctrl_driver); 3459 return platform_driver_register(&spear320_pinctrl_driver);
3460 } 3460 }
3461 arch_initcall(spear320_pinctrl_init); 3461 arch_initcall(spear320_pinctrl_init);
3462 3462
3463 static void __exit spear320_pinctrl_exit(void) 3463 static void __exit spear320_pinctrl_exit(void)
3464 { 3464 {
3465 platform_driver_unregister(&spear320_pinctrl_driver); 3465 platform_driver_unregister(&spear320_pinctrl_driver);
3466 } 3466 }
3467 module_exit(spear320_pinctrl_exit); 3467 module_exit(spear320_pinctrl_exit);
3468 3468
3469 MODULE_AUTHOR("Viresh Kumar <viresh.linux@gmail.com>"); 3469 MODULE_AUTHOR("Viresh Kumar <viresh.linux@gmail.com>");
3470 MODULE_DESCRIPTION("ST Microelectronics SPEAr320 pinctrl driver"); 3470 MODULE_DESCRIPTION("ST Microelectronics SPEAr320 pinctrl driver");
3471 MODULE_LICENSE("GPL v2"); 3471 MODULE_LICENSE("GPL v2");
3472 MODULE_DEVICE_TABLE(of, spear320_pinctrl_of_match); 3472 MODULE_DEVICE_TABLE(of, spear320_pinctrl_of_match);
3473 3473