Commit f4f8e5635f398645d614dff5a07598651faf3ead

Authored by Viresh Kumar
Committed by Linus Walleij
1 parent 50309a9c2e

pinctrl: SPEAr: Add gpio ranges support

Most of SPEAr SoCs, which support pinctrl, can configure & use pads as gpio.
This patch gpio enable support for SPEAr pinctrl drivers.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>

Showing 8 changed files with 447 additions and 17 deletions Inline Diff

drivers/pinctrl/spear/Kconfig
1 # 1 #
2 # ST Microelectronics SPEAr PINCTRL drivers 2 # ST Microelectronics SPEAr PINCTRL drivers
3 # 3 #
4 4
5 if PLAT_SPEAR 5 if PLAT_SPEAR
6 6
7 config PINCTRL_SPEAR 7 config PINCTRL_SPEAR
8 bool 8 bool
9 depends on OF 9 depends on OF
10 select PINMUX 10 select PINMUX
11 help 11 help
12 This enables pin control drivers for SPEAr Platform 12 This enables pin control drivers for SPEAr Platform
13 13
14 config PINCTRL_SPEAR3XX 14 config PINCTRL_SPEAR3XX
15 bool 15 bool
16 depends on ARCH_SPEAR3XX 16 depends on ARCH_SPEAR3XX
17 select PINCTRL_SPEAR 17 select PINCTRL_SPEAR
18 18
19 config PINCTRL_SPEAR300 19 config PINCTRL_SPEAR300
20 bool "ST Microelectronics SPEAr300 SoC pin controller driver" 20 bool "ST Microelectronics SPEAr300 SoC pin controller driver"
21 depends on MACH_SPEAR300 21 depends on MACH_SPEAR300
22 select PINCTRL_SPEAR3XX 22 select PINCTRL_SPEAR3XX
23 23
24 config PINCTRL_SPEAR310 24 config PINCTRL_SPEAR310
25 bool "ST Microelectronics SPEAr310 SoC pin controller driver" 25 bool "ST Microelectronics SPEAr310 SoC pin controller driver"
26 depends on MACH_SPEAR310 26 depends on MACH_SPEAR310
27 select PINCTRL_SPEAR3XX 27 select PINCTRL_SPEAR3XX
28 select PINCTRL_SPEAR_PLGPIO
28 29
29 config PINCTRL_SPEAR320 30 config PINCTRL_SPEAR320
30 bool "ST Microelectronics SPEAr320 SoC pin controller driver" 31 bool "ST Microelectronics SPEAr320 SoC pin controller driver"
31 depends on MACH_SPEAR320 32 depends on MACH_SPEAR320
32 select PINCTRL_SPEAR3XX 33 select PINCTRL_SPEAR3XX
34 select PINCTRL_SPEAR_PLGPIO
33 35
34 config PINCTRL_SPEAR1310 36 config PINCTRL_SPEAR1310
35 bool "ST Microelectronics SPEAr1310 SoC pin controller driver" 37 bool "ST Microelectronics SPEAr1310 SoC pin controller driver"
36 depends on MACH_SPEAR1310 38 depends on MACH_SPEAR1310
37 select PINCTRL_SPEAR 39 select PINCTRL_SPEAR
40 select PINCTRL_SPEAR_PLGPIO
38 41
39 config PINCTRL_SPEAR1340 42 config PINCTRL_SPEAR1340
40 bool "ST Microelectronics SPEAr1340 SoC pin controller driver" 43 bool "ST Microelectronics SPEAr1340 SoC pin controller driver"
41 depends on MACH_SPEAR1340 44 depends on MACH_SPEAR1340
42 select PINCTRL_SPEAR 45 select PINCTRL_SPEAR
46 select PINCTRL_SPEAR_PLGPIO
43 47
44 config PINCTRL_SPEAR_PLGPIO 48 config PINCTRL_SPEAR_PLGPIO
45 bool "SPEAr SoC PLGPIO Controller" 49 bool "SPEAr SoC PLGPIO Controller"
46 depends on GPIOLIB && PINCTRL_SPEAR 50 depends on GPIOLIB && PINCTRL_SPEAR
47 help 51 help
48 Say yes here to support PLGPIO controller on ST Microelectronics SPEAr 52 Say yes here to support PLGPIO controller on ST Microelectronics SPEAr
49 SoCs. 53 SoCs.
50 54
51 endif 55 endif
52 56
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/of_gpio.h>
21 #include <linux/pinctrl/machine.h> 22 #include <linux/pinctrl/machine.h>
22 #include <linux/pinctrl/pinctrl.h> 23 #include <linux/pinctrl/pinctrl.h>
23 #include <linux/pinctrl/pinmux.h> 24 #include <linux/pinctrl/pinmux.h>
24 #include <linux/platform_device.h> 25 #include <linux/platform_device.h>
25 #include <linux/slab.h> 26 #include <linux/slab.h>
26 27
27 #include "pinctrl-spear.h" 28 #include "pinctrl-spear.h"
28 29
29 #define DRIVER_NAME "spear-pinmux" 30 #define DRIVER_NAME "spear-pinmux"
30 31
31 static inline u32 pmx_readl(struct spear_pmx *pmx, u32 reg) 32 static inline u32 pmx_readl(struct spear_pmx *pmx, u32 reg)
32 { 33 {
33 return readl_relaxed(pmx->vbase + reg); 34 return readl_relaxed(pmx->vbase + reg);
34 } 35 }
35 36
36 static inline void pmx_writel(struct spear_pmx *pmx, u32 val, u32 reg) 37 static inline void pmx_writel(struct spear_pmx *pmx, u32 val, u32 reg)
37 { 38 {
38 writel_relaxed(val, pmx->vbase + reg); 39 writel_relaxed(val, pmx->vbase + reg);
39 } 40 }
40 41
42 static void muxregs_endisable(struct spear_pmx *pmx,
43 struct spear_muxreg *muxregs, u8 count, bool enable)
44 {
45 struct spear_muxreg *muxreg;
46 u32 val, temp, j;
47
48 for (j = 0; j < count; j++) {
49 muxreg = &muxregs[j];
50
51 val = pmx_readl(pmx, muxreg->reg);
52 val &= ~muxreg->mask;
53
54 if (enable)
55 temp = muxreg->val;
56 else
57 temp = ~muxreg->val;
58
59 val |= muxreg->mask & temp;
60 pmx_writel(pmx, val, muxreg->reg);
61 }
62 }
63
41 static int set_mode(struct spear_pmx *pmx, int mode) 64 static int set_mode(struct spear_pmx *pmx, int mode)
42 { 65 {
43 struct spear_pmx_mode *pmx_mode = NULL; 66 struct spear_pmx_mode *pmx_mode = NULL;
44 int i; 67 int i;
45 u32 val; 68 u32 val;
46 69
47 if (!pmx->machdata->pmx_modes || !pmx->machdata->npmx_modes) 70 if (!pmx->machdata->pmx_modes || !pmx->machdata->npmx_modes)
48 return -EINVAL; 71 return -EINVAL;
49 72
50 for (i = 0; i < pmx->machdata->npmx_modes; i++) { 73 for (i = 0; i < pmx->machdata->npmx_modes; i++) {
51 if (pmx->machdata->pmx_modes[i]->mode == (1 << mode)) { 74 if (pmx->machdata->pmx_modes[i]->mode == (1 << mode)) {
52 pmx_mode = pmx->machdata->pmx_modes[i]; 75 pmx_mode = pmx->machdata->pmx_modes[i];
53 break; 76 break;
54 } 77 }
55 } 78 }
56 79
57 if (!pmx_mode) 80 if (!pmx_mode)
58 return -EINVAL; 81 return -EINVAL;
59 82
60 val = pmx_readl(pmx, pmx_mode->reg); 83 val = pmx_readl(pmx, pmx_mode->reg);
61 val &= ~pmx_mode->mask; 84 val &= ~pmx_mode->mask;
62 val |= pmx_mode->val; 85 val |= pmx_mode->val;
63 pmx_writel(pmx, val, pmx_mode->reg); 86 pmx_writel(pmx, val, pmx_mode->reg);
64 87
65 pmx->machdata->mode = pmx_mode->mode; 88 pmx->machdata->mode = pmx_mode->mode;
66 dev_info(pmx->dev, "Configured Mode: %s with id: %x\n\n", 89 dev_info(pmx->dev, "Configured Mode: %s with id: %x\n\n",
67 pmx_mode->name ? pmx_mode->name : "no_name", 90 pmx_mode->name ? pmx_mode->name : "no_name",
68 pmx_mode->reg); 91 pmx_mode->reg);
69 92
70 return 0; 93 return 0;
71 } 94 }
72 95
96 void __devinit
97 pmx_init_gpio_pingroup_addr(struct spear_gpio_pingroup *gpio_pingroup,
98 unsigned count, u16 reg)
99 {
100 int i = 0, j = 0;
101
102 for (; i < count; i++)
103 for (; j < gpio_pingroup[i].nmuxregs; j++)
104 gpio_pingroup[i].muxregs[j].reg = reg;
105 }
106
73 void __devinit pmx_init_addr(struct spear_pinctrl_machdata *machdata, u16 reg) 107 void __devinit pmx_init_addr(struct spear_pinctrl_machdata *machdata, u16 reg)
74 { 108 {
75 struct spear_pingroup *pgroup; 109 struct spear_pingroup *pgroup;
76 struct spear_modemux *modemux; 110 struct spear_modemux *modemux;
77 int i, j, group; 111 int i, j, group;
78 112
79 for (group = 0; group < machdata->ngroups; group++) { 113 for (group = 0; group < machdata->ngroups; group++) {
80 pgroup = machdata->groups[group]; 114 pgroup = machdata->groups[group];
81 115
82 for (i = 0; i < pgroup->nmodemuxs; i++) { 116 for (i = 0; i < pgroup->nmodemuxs; i++) {
83 modemux = &pgroup->modemuxs[i]; 117 modemux = &pgroup->modemuxs[i];
84 118
85 for (j = 0; j < modemux->nmuxregs; j++) 119 for (j = 0; j < modemux->nmuxregs; j++)
86 if (modemux->muxregs[j].reg == 0xFFFF) 120 if (modemux->muxregs[j].reg == 0xFFFF)
87 modemux->muxregs[j].reg = reg; 121 modemux->muxregs[j].reg = reg;
88 } 122 }
89 } 123 }
90 } 124 }
91 125
92 static int spear_pinctrl_get_groups_cnt(struct pinctrl_dev *pctldev) 126 static int spear_pinctrl_get_groups_cnt(struct pinctrl_dev *pctldev)
93 { 127 {
94 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 128 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
95 129
96 return pmx->machdata->ngroups; 130 return pmx->machdata->ngroups;
97 } 131 }
98 132
99 static const char *spear_pinctrl_get_group_name(struct pinctrl_dev *pctldev, 133 static const char *spear_pinctrl_get_group_name(struct pinctrl_dev *pctldev,
100 unsigned group) 134 unsigned group)
101 { 135 {
102 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 136 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
103 137
104 return pmx->machdata->groups[group]->name; 138 return pmx->machdata->groups[group]->name;
105 } 139 }
106 140
107 static int spear_pinctrl_get_group_pins(struct pinctrl_dev *pctldev, 141 static int spear_pinctrl_get_group_pins(struct pinctrl_dev *pctldev,
108 unsigned group, const unsigned **pins, unsigned *num_pins) 142 unsigned group, const unsigned **pins, unsigned *num_pins)
109 { 143 {
110 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 144 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
111 145
112 *pins = pmx->machdata->groups[group]->pins; 146 *pins = pmx->machdata->groups[group]->pins;
113 *num_pins = pmx->machdata->groups[group]->npins; 147 *num_pins = pmx->machdata->groups[group]->npins;
114 148
115 return 0; 149 return 0;
116 } 150 }
117 151
118 static void spear_pinctrl_pin_dbg_show(struct pinctrl_dev *pctldev, 152 static void spear_pinctrl_pin_dbg_show(struct pinctrl_dev *pctldev,
119 struct seq_file *s, unsigned offset) 153 struct seq_file *s, unsigned offset)
120 { 154 {
121 seq_printf(s, " " DRIVER_NAME); 155 seq_printf(s, " " DRIVER_NAME);
122 } 156 }
123 157
124 int spear_pinctrl_dt_node_to_map(struct pinctrl_dev *pctldev, 158 int spear_pinctrl_dt_node_to_map(struct pinctrl_dev *pctldev,
125 struct device_node *np_config, 159 struct device_node *np_config,
126 struct pinctrl_map **map, unsigned *num_maps) 160 struct pinctrl_map **map, unsigned *num_maps)
127 { 161 {
128 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 162 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
129 struct device_node *np; 163 struct device_node *np;
130 struct property *prop; 164 struct property *prop;
131 const char *function, *group; 165 const char *function, *group;
132 int ret, index = 0, count = 0; 166 int ret, index = 0, count = 0;
133 167
134 /* calculate number of maps required */ 168 /* calculate number of maps required */
135 for_each_child_of_node(np_config, np) { 169 for_each_child_of_node(np_config, np) {
136 ret = of_property_read_string(np, "st,function", &function); 170 ret = of_property_read_string(np, "st,function", &function);
137 if (ret < 0) 171 if (ret < 0)
138 return ret; 172 return ret;
139 173
140 ret = of_property_count_strings(np, "st,pins"); 174 ret = of_property_count_strings(np, "st,pins");
141 if (ret < 0) 175 if (ret < 0)
142 return ret; 176 return ret;
143 177
144 count += ret; 178 count += ret;
145 } 179 }
146 180
147 if (!count) { 181 if (!count) {
148 dev_err(pmx->dev, "No child nodes passed via DT\n"); 182 dev_err(pmx->dev, "No child nodes passed via DT\n");
149 return -ENODEV; 183 return -ENODEV;
150 } 184 }
151 185
152 *map = kzalloc(sizeof(**map) * count, GFP_KERNEL); 186 *map = kzalloc(sizeof(**map) * count, GFP_KERNEL);
153 if (!*map) 187 if (!*map)
154 return -ENOMEM; 188 return -ENOMEM;
155 189
156 for_each_child_of_node(np_config, np) { 190 for_each_child_of_node(np_config, np) {
157 of_property_read_string(np, "st,function", &function); 191 of_property_read_string(np, "st,function", &function);
158 of_property_for_each_string(np, "st,pins", prop, group) { 192 of_property_for_each_string(np, "st,pins", prop, group) {
159 (*map)[index].type = PIN_MAP_TYPE_MUX_GROUP; 193 (*map)[index].type = PIN_MAP_TYPE_MUX_GROUP;
160 (*map)[index].data.mux.group = group; 194 (*map)[index].data.mux.group = group;
161 (*map)[index].data.mux.function = function; 195 (*map)[index].data.mux.function = function;
162 index++; 196 index++;
163 } 197 }
164 } 198 }
165 199
166 *num_maps = count; 200 *num_maps = count;
167 201
168 return 0; 202 return 0;
169 } 203 }
170 204
171 void spear_pinctrl_dt_free_map(struct pinctrl_dev *pctldev, 205 void spear_pinctrl_dt_free_map(struct pinctrl_dev *pctldev,
172 struct pinctrl_map *map, unsigned num_maps) 206 struct pinctrl_map *map, unsigned num_maps)
173 { 207 {
174 kfree(map); 208 kfree(map);
175 } 209 }
176 210
177 static struct pinctrl_ops spear_pinctrl_ops = { 211 static struct pinctrl_ops spear_pinctrl_ops = {
178 .get_groups_count = spear_pinctrl_get_groups_cnt, 212 .get_groups_count = spear_pinctrl_get_groups_cnt,
179 .get_group_name = spear_pinctrl_get_group_name, 213 .get_group_name = spear_pinctrl_get_group_name,
180 .get_group_pins = spear_pinctrl_get_group_pins, 214 .get_group_pins = spear_pinctrl_get_group_pins,
181 .pin_dbg_show = spear_pinctrl_pin_dbg_show, 215 .pin_dbg_show = spear_pinctrl_pin_dbg_show,
182 .dt_node_to_map = spear_pinctrl_dt_node_to_map, 216 .dt_node_to_map = spear_pinctrl_dt_node_to_map,
183 .dt_free_map = spear_pinctrl_dt_free_map, 217 .dt_free_map = spear_pinctrl_dt_free_map,
184 }; 218 };
185 219
186 static int spear_pinctrl_get_funcs_count(struct pinctrl_dev *pctldev) 220 static int spear_pinctrl_get_funcs_count(struct pinctrl_dev *pctldev)
187 { 221 {
188 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 222 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
189 223
190 return pmx->machdata->nfunctions; 224 return pmx->machdata->nfunctions;
191 } 225 }
192 226
193 static const char *spear_pinctrl_get_func_name(struct pinctrl_dev *pctldev, 227 static const char *spear_pinctrl_get_func_name(struct pinctrl_dev *pctldev,
194 unsigned function) 228 unsigned function)
195 { 229 {
196 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 230 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
197 231
198 return pmx->machdata->functions[function]->name; 232 return pmx->machdata->functions[function]->name;
199 } 233 }
200 234
201 static int spear_pinctrl_get_func_groups(struct pinctrl_dev *pctldev, 235 static int spear_pinctrl_get_func_groups(struct pinctrl_dev *pctldev,
202 unsigned function, const char *const **groups, 236 unsigned function, const char *const **groups,
203 unsigned * const ngroups) 237 unsigned * const ngroups)
204 { 238 {
205 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 239 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
206 240
207 *groups = pmx->machdata->functions[function]->groups; 241 *groups = pmx->machdata->functions[function]->groups;
208 *ngroups = pmx->machdata->functions[function]->ngroups; 242 *ngroups = pmx->machdata->functions[function]->ngroups;
209 243
210 return 0; 244 return 0;
211 } 245 }
212 246
213 static int spear_pinctrl_endisable(struct pinctrl_dev *pctldev, 247 static int spear_pinctrl_endisable(struct pinctrl_dev *pctldev,
214 unsigned function, unsigned group, bool enable) 248 unsigned function, unsigned group, bool enable)
215 { 249 {
216 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); 250 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
217 const struct spear_pingroup *pgroup; 251 const struct spear_pingroup *pgroup;
218 const struct spear_modemux *modemux; 252 const struct spear_modemux *modemux;
219 struct spear_muxreg *muxreg; 253 int i;
220 u32 val, temp;
221 int i, j;
222 bool found = false; 254 bool found = false;
223 255
224 pgroup = pmx->machdata->groups[group]; 256 pgroup = pmx->machdata->groups[group];
225 257
226 for (i = 0; i < pgroup->nmodemuxs; i++) { 258 for (i = 0; i < pgroup->nmodemuxs; i++) {
227 modemux = &pgroup->modemuxs[i]; 259 modemux = &pgroup->modemuxs[i];
228 260
229 /* SoC have any modes */ 261 /* SoC have any modes */
230 if (pmx->machdata->modes_supported) { 262 if (pmx->machdata->modes_supported) {
231 if (!(pmx->machdata->mode & modemux->modes)) 263 if (!(pmx->machdata->mode & modemux->modes))
232 continue; 264 continue;
233 } 265 }
234 266
235 found = true; 267 found = true;
236 for (j = 0; j < modemux->nmuxregs; j++) { 268 muxregs_endisable(pmx, modemux->muxregs, modemux->nmuxregs,
237 muxreg = &modemux->muxregs[j]; 269 enable);
238
239 val = pmx_readl(pmx, muxreg->reg);
240 val &= ~muxreg->mask;
241
242 if (enable)
243 temp = muxreg->val;
244 else
245 temp = ~muxreg->val;
246
247 val |= muxreg->mask & temp;
248 pmx_writel(pmx, val, muxreg->reg);
249 }
250 } 270 }
251 271
252 if (!found) { 272 if (!found) {
253 dev_err(pmx->dev, "pinmux group: %s not supported\n", 273 dev_err(pmx->dev, "pinmux group: %s not supported\n",
254 pgroup->name); 274 pgroup->name);
255 return -ENODEV; 275 return -ENODEV;
256 } 276 }
257 277
258 return 0; 278 return 0;
259 } 279 }
260 280
261 static int spear_pinctrl_enable(struct pinctrl_dev *pctldev, unsigned function, 281 static int spear_pinctrl_enable(struct pinctrl_dev *pctldev, unsigned function,
262 unsigned group) 282 unsigned group)
263 { 283 {
264 return spear_pinctrl_endisable(pctldev, function, group, true); 284 return spear_pinctrl_endisable(pctldev, function, group, true);
265 } 285 }
266 286
267 static void spear_pinctrl_disable(struct pinctrl_dev *pctldev, 287 static void spear_pinctrl_disable(struct pinctrl_dev *pctldev,
268 unsigned function, unsigned group) 288 unsigned function, unsigned group)
269 { 289 {
270 spear_pinctrl_endisable(pctldev, function, group, false); 290 spear_pinctrl_endisable(pctldev, function, group, false);
271 } 291 }
272 292
293 /* gpio with pinmux */
294 static struct spear_gpio_pingroup *get_gpio_pingroup(struct spear_pmx *pmx,
295 unsigned pin)
296 {
297 struct spear_gpio_pingroup *gpio_pingroup;
298 int i = 0, j;
299
300 if (!pmx->machdata->gpio_pingroups)
301 return NULL;
302
303 for (; i < pmx->machdata->ngpio_pingroups; i++) {
304 gpio_pingroup = &pmx->machdata->gpio_pingroups[i];
305
306 for (j = 0; j < gpio_pingroup->npins; j++) {
307 if (gpio_pingroup->pins[j] == pin)
308 return gpio_pingroup;
309 }
310 }
311
312 return ERR_PTR(-EINVAL);
313 }
314
315 static int gpio_request_endisable(struct pinctrl_dev *pctldev,
316 struct pinctrl_gpio_range *range, unsigned offset, bool enable)
317 {
318 struct spear_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
319 struct spear_gpio_pingroup *gpio_pingroup;
320
321 gpio_pingroup = get_gpio_pingroup(pmx, offset);
322 if (IS_ERR(gpio_pingroup))
323 return PTR_ERR(gpio_pingroup);
324
325 if (gpio_pingroup)
326 muxregs_endisable(pmx, gpio_pingroup->muxregs,
327 gpio_pingroup->nmuxregs, enable);
328
329 return 0;
330 }
331
332 static int gpio_request_enable(struct pinctrl_dev *pctldev,
333 struct pinctrl_gpio_range *range, unsigned offset)
334 {
335 return gpio_request_endisable(pctldev, range, offset, true);
336 }
337
338 static void gpio_disable_free(struct pinctrl_dev *pctldev,
339 struct pinctrl_gpio_range *range, unsigned offset)
340 {
341 gpio_request_endisable(pctldev, range, offset, false);
342 }
343
273 static struct pinmux_ops spear_pinmux_ops = { 344 static struct pinmux_ops spear_pinmux_ops = {
274 .get_functions_count = spear_pinctrl_get_funcs_count, 345 .get_functions_count = spear_pinctrl_get_funcs_count,
275 .get_function_name = spear_pinctrl_get_func_name, 346 .get_function_name = spear_pinctrl_get_func_name,
276 .get_function_groups = spear_pinctrl_get_func_groups, 347 .get_function_groups = spear_pinctrl_get_func_groups,
277 .enable = spear_pinctrl_enable, 348 .enable = spear_pinctrl_enable,
278 .disable = spear_pinctrl_disable, 349 .disable = spear_pinctrl_disable,
350 .gpio_request_enable = gpio_request_enable,
351 .gpio_disable_free = gpio_disable_free,
279 }; 352 };
280 353
281 static struct pinctrl_desc spear_pinctrl_desc = { 354 static struct pinctrl_desc spear_pinctrl_desc = {
282 .name = DRIVER_NAME, 355 .name = DRIVER_NAME,
283 .pctlops = &spear_pinctrl_ops, 356 .pctlops = &spear_pinctrl_ops,
284 .pmxops = &spear_pinmux_ops, 357 .pmxops = &spear_pinmux_ops,
285 .owner = THIS_MODULE, 358 .owner = THIS_MODULE,
286 }; 359 };
287 360
288 int __devinit spear_pinctrl_probe(struct platform_device *pdev, 361 int __devinit spear_pinctrl_probe(struct platform_device *pdev,
289 struct spear_pinctrl_machdata *machdata) 362 struct spear_pinctrl_machdata *machdata)
290 { 363 {
291 struct device_node *np = pdev->dev.of_node; 364 struct device_node *np = pdev->dev.of_node;
292 struct resource *res; 365 struct resource *res;
293 struct spear_pmx *pmx; 366 struct spear_pmx *pmx;
294 367
295 if (!machdata) 368 if (!machdata)
296 return -ENODEV; 369 return -ENODEV;
297 370
298 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 371 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
299 if (!res) 372 if (!res)
300 return -EINVAL; 373 return -EINVAL;
301 374
302 pmx = devm_kzalloc(&pdev->dev, sizeof(*pmx), GFP_KERNEL); 375 pmx = devm_kzalloc(&pdev->dev, sizeof(*pmx), GFP_KERNEL);
303 if (!pmx) { 376 if (!pmx) {
304 dev_err(&pdev->dev, "Can't alloc spear_pmx\n"); 377 dev_err(&pdev->dev, "Can't alloc spear_pmx\n");
305 return -ENOMEM; 378 return -ENOMEM;
306 } 379 }
307 380
308 pmx->vbase = devm_ioremap(&pdev->dev, res->start, resource_size(res)); 381 pmx->vbase = devm_ioremap(&pdev->dev, res->start, resource_size(res));
309 if (!pmx->vbase) { 382 if (!pmx->vbase) {
310 dev_err(&pdev->dev, "Couldn't ioremap at index 0\n"); 383 dev_err(&pdev->dev, "Couldn't ioremap at index 0\n");
311 return -ENODEV; 384 return -ENODEV;
312 } 385 }
313 386
314 pmx->dev = &pdev->dev; 387 pmx->dev = &pdev->dev;
315 pmx->machdata = machdata; 388 pmx->machdata = machdata;
316 389
317 /* configure mode, if supported by SoC */ 390 /* configure mode, if supported by SoC */
318 if (machdata->modes_supported) { 391 if (machdata->modes_supported) {
319 int mode = 0; 392 int mode = 0;
320 393
321 if (of_property_read_u32(np, "st,pinmux-mode", &mode)) { 394 if (of_property_read_u32(np, "st,pinmux-mode", &mode)) {
322 dev_err(&pdev->dev, "OF: pinmux mode not passed\n"); 395 dev_err(&pdev->dev, "OF: pinmux mode not passed\n");
323 return -EINVAL; 396 return -EINVAL;
324 } 397 }
325 398
326 if (set_mode(pmx, mode)) { 399 if (set_mode(pmx, mode)) {
327 dev_err(&pdev->dev, "OF: Couldn't configure mode: %x\n", 400 dev_err(&pdev->dev, "OF: Couldn't configure mode: %x\n",
328 mode); 401 mode);
329 return -EINVAL; 402 return -EINVAL;
330 } 403 }
331 } 404 }
332 405
333 platform_set_drvdata(pdev, pmx); 406 platform_set_drvdata(pdev, pmx);
334 407
335 spear_pinctrl_desc.pins = machdata->pins; 408 spear_pinctrl_desc.pins = machdata->pins;
336 spear_pinctrl_desc.npins = machdata->npins; 409 spear_pinctrl_desc.npins = machdata->npins;
337 410
338 pmx->pctl = pinctrl_register(&spear_pinctrl_desc, &pdev->dev, pmx); 411 pmx->pctl = pinctrl_register(&spear_pinctrl_desc, &pdev->dev, pmx);
339 if (!pmx->pctl) { 412 if (!pmx->pctl) {
340 dev_err(&pdev->dev, "Couldn't register pinctrl driver\n"); 413 dev_err(&pdev->dev, "Couldn't register pinctrl driver\n");
341 return -ENODEV; 414 return -ENODEV;
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/gpio.h>
15 #include <linux/pinctrl/pinctrl.h> 16 #include <linux/pinctrl/pinctrl.h>
16 #include <linux/types.h> 17 #include <linux/types.h>
17 18
18 struct platform_device; 19 struct platform_device;
19 struct device; 20 struct device;
20 21
21 /** 22 /**
22 * struct spear_pmx_mode - SPEAr pmx mode 23 * struct spear_pmx_mode - SPEAr pmx mode
23 * @name: name of pmx mode 24 * @name: name of pmx mode
24 * @mode: mode id 25 * @mode: mode id
25 * @reg: register for configuring this mode 26 * @reg: register for configuring this mode
26 * @mask: mask of this mode in reg 27 * @mask: mask of this mode in reg
27 * @val: val to be configured at reg after doing (val & mask) 28 * @val: val to be configured at reg after doing (val & mask)
28 */ 29 */
29 struct spear_pmx_mode { 30 struct spear_pmx_mode {
30 const char *const name; 31 const char *const name;
31 u16 mode; 32 u16 mode;
32 u16 reg; 33 u16 reg;
33 u16 mask; 34 u16 mask;
34 u32 val; 35 u32 val;
35 }; 36 };
36 37
37 /** 38 /**
38 * struct spear_muxreg - SPEAr mux reg configuration 39 * struct spear_muxreg - SPEAr mux reg configuration
39 * @reg: register offset 40 * @reg: register offset
40 * @mask: mask bits 41 * @mask: mask bits
41 * @val: val to be written on mask bits 42 * @val: val to be written on mask bits
42 */ 43 */
43 struct spear_muxreg { 44 struct spear_muxreg {
44 u16 reg; 45 u16 reg;
45 u32 mask; 46 u32 mask;
46 u32 val; 47 u32 val;
47 }; 48 };
48 49
50 struct spear_gpio_pingroup {
51 const unsigned *pins;
52 unsigned npins;
53 struct spear_muxreg *muxregs;
54 u8 nmuxregs;
55 };
56
57 /* ste: set to enable */
58 #define DEFINE_MUXREG(__pins, __muxreg, __mask, __ste) \
59 static struct spear_muxreg __pins##_muxregs[] = { \
60 { \
61 .reg = __muxreg, \
62 .mask = __mask, \
63 .val = __ste ? __mask : 0, \
64 }, \
65 }
66
67 #define DEFINE_2_MUXREG(__pins, __muxreg1, __muxreg2, __mask, __ste1, __ste2) \
68 static struct spear_muxreg __pins##_muxregs[] = { \
69 { \
70 .reg = __muxreg1, \
71 .mask = __mask, \
72 .val = __ste1 ? __mask : 0, \
73 }, { \
74 .reg = __muxreg2, \
75 .mask = __mask, \
76 .val = __ste2 ? __mask : 0, \
77 }, \
78 }
79
80 #define GPIO_PINGROUP(__pins) \
81 { \
82 .pins = __pins, \
83 .npins = ARRAY_SIZE(__pins), \
84 .muxregs = __pins##_muxregs, \
85 .nmuxregs = ARRAY_SIZE(__pins##_muxregs), \
86 }
87
49 /** 88 /**
50 * struct spear_modemux - SPEAr mode mux configuration 89 * struct spear_modemux - SPEAr mode mux configuration
51 * @modes: mode ids supported by this group of muxregs 90 * @modes: mode ids supported by this group of muxregs
52 * @nmuxregs: number of muxreg configurations to be done for modes 91 * @nmuxregs: number of muxreg configurations to be done for modes
53 * @muxregs: array of muxreg configurations to be done for modes 92 * @muxregs: array of muxreg configurations to be done for modes
54 */ 93 */
55 struct spear_modemux { 94 struct spear_modemux {
56 u16 modes; 95 u16 modes;
57 u8 nmuxregs; 96 u8 nmuxregs;
58 struct spear_muxreg *muxregs; 97 struct spear_muxreg *muxregs;
59 }; 98 };
60 99
61 /** 100 /**
62 * struct spear_pingroup - SPEAr pin group configurations 101 * struct spear_pingroup - SPEAr pin group configurations
63 * @name: name of pin group 102 * @name: name of pin group
64 * @pins: array containing pin numbers 103 * @pins: array containing pin numbers
65 * @npins: size of pins array 104 * @npins: size of pins array
66 * @modemuxs: array of modemux configurations for this pin group 105 * @modemuxs: array of modemux configurations for this pin group
67 * @nmodemuxs: size of array modemuxs 106 * @nmodemuxs: size of array modemuxs
68 * 107 *
69 * A representation of a group of pins in the SPEAr pin controller. Each group 108 * A representation of a group of pins in the SPEAr pin controller. Each group
70 * allows some parameter or parameters to be configured. 109 * allows some parameter or parameters to be configured.
71 */ 110 */
72 struct spear_pingroup { 111 struct spear_pingroup {
73 const char *name; 112 const char *name;
74 const unsigned *pins; 113 const unsigned *pins;
75 unsigned npins; 114 unsigned npins;
76 struct spear_modemux *modemuxs; 115 struct spear_modemux *modemuxs;
77 unsigned nmodemuxs; 116 unsigned nmodemuxs;
78 }; 117 };
79 118
80 /** 119 /**
81 * struct spear_function - SPEAr pinctrl mux function 120 * struct spear_function - SPEAr pinctrl mux function
82 * @name: The name of the function, exported to pinctrl core. 121 * @name: The name of the function, exported to pinctrl core.
83 * @groups: An array of pin groups that may select this function. 122 * @groups: An array of pin groups that may select this function.
84 * @ngroups: The number of entries in @groups. 123 * @ngroups: The number of entries in @groups.
85 */ 124 */
86 struct spear_function { 125 struct spear_function {
87 const char *name; 126 const char *name;
88 const char *const *groups; 127 const char *const *groups;
89 unsigned ngroups; 128 unsigned ngroups;
90 }; 129 };
91 130
92 /** 131 /**
93 * struct spear_pinctrl_machdata - SPEAr pin controller machine driver 132 * struct spear_pinctrl_machdata - SPEAr pin controller machine driver
94 * configuration 133 * configuration
95 * @pins: An array describing all pins the pin controller affects. 134 * @pins: An array describing all pins the pin controller affects.
96 * All pins which are also GPIOs must be listed first within the *array, 135 * All pins which are also GPIOs must be listed first within the *array,
97 * and be numbered identically to the GPIO controller's *numbering. 136 * and be numbered identically to the GPIO controller's *numbering.
98 * @npins: The numbmer of entries in @pins. 137 * @npins: The numbmer of entries in @pins.
99 * @functions: An array describing all mux functions the SoC supports. 138 * @functions: An array describing all mux functions the SoC supports.
100 * @nfunctions: The numbmer of entries in @functions. 139 * @nfunctions: The numbmer of entries in @functions.
101 * @groups: An array describing all pin groups the pin SoC supports. 140 * @groups: An array describing all pin groups the pin SoC supports.
102 * @ngroups: The numbmer of entries in @groups. 141 * @ngroups: The numbmer of entries in @groups.
142 * @gpio_pingroups: gpio pingroups
143 * @ngpio_pingroups: gpio pingroups count
103 * 144 *
104 * @modes_supported: Does SoC support modes 145 * @modes_supported: Does SoC support modes
105 * @mode: mode configured from probe 146 * @mode: mode configured from probe
106 * @pmx_modes: array of modes supported by SoC 147 * @pmx_modes: array of modes supported by SoC
107 * @npmx_modes: number of entries in pmx_modes. 148 * @npmx_modes: number of entries in pmx_modes.
108 */ 149 */
109 struct spear_pinctrl_machdata { 150 struct spear_pinctrl_machdata {
110 const struct pinctrl_pin_desc *pins; 151 const struct pinctrl_pin_desc *pins;
111 unsigned npins; 152 unsigned npins;
112 struct spear_function **functions; 153 struct spear_function **functions;
113 unsigned nfunctions; 154 unsigned nfunctions;
114 struct spear_pingroup **groups; 155 struct spear_pingroup **groups;
115 unsigned ngroups; 156 unsigned ngroups;
157 struct spear_gpio_pingroup *gpio_pingroups;
158 unsigned ngpio_pingroups;
116 159
117 bool modes_supported; 160 bool modes_supported;
118 u16 mode; 161 u16 mode;
119 struct spear_pmx_mode **pmx_modes; 162 struct spear_pmx_mode **pmx_modes;
120 unsigned npmx_modes; 163 unsigned npmx_modes;
121 }; 164 };
122 165
123 /** 166 /**
124 * struct spear_pmx - SPEAr pinctrl mux 167 * struct spear_pmx - SPEAr pinctrl mux
125 * @dev: pointer to struct dev of platform_device registered 168 * @dev: pointer to struct dev of platform_device registered
126 * @pctl: pointer to struct pinctrl_dev 169 * @pctl: pointer to struct pinctrl_dev
127 * @machdata: pointer to SoC or machine specific structure 170 * @machdata: pointer to SoC or machine specific structure
128 * @vbase: virtual base address of pinmux controller 171 * @vbase: virtual base address of pinmux controller
129 */ 172 */
130 struct spear_pmx { 173 struct spear_pmx {
131 struct device *dev; 174 struct device *dev;
132 struct pinctrl_dev *pctl; 175 struct pinctrl_dev *pctl;
133 struct spear_pinctrl_machdata *machdata; 176 struct spear_pinctrl_machdata *machdata;
134 void __iomem *vbase; 177 void __iomem *vbase;
135 }; 178 };
136 179
137 /* exported routines */ 180 /* exported routines */
138 void __devinit pmx_init_addr(struct spear_pinctrl_machdata *machdata, u16 reg); 181 void __devinit pmx_init_addr(struct spear_pinctrl_machdata *machdata, u16 reg);
182 void __devinit
183 pmx_init_gpio_pingroup_addr(struct spear_gpio_pingroup *gpio_pingroup,
184 unsigned count, u16 reg);
139 int __devinit spear_pinctrl_probe(struct platform_device *pdev, 185 int __devinit spear_pinctrl_probe(struct platform_device *pdev,
140 struct spear_pinctrl_machdata *machdata); 186 struct spear_pinctrl_machdata *machdata);
141 int __devexit spear_pinctrl_remove(struct platform_device *pdev); 187 int __devexit spear_pinctrl_remove(struct platform_device *pdev);
142 188
143 #define SPEAR_PIN_0_TO_101 \ 189 #define SPEAR_PIN_0_TO_101 \
144 PINCTRL_PIN(0, "PLGPIO0"), \ 190 PINCTRL_PIN(0, "PLGPIO0"), \
145 PINCTRL_PIN(1, "PLGPIO1"), \ 191 PINCTRL_PIN(1, "PLGPIO1"), \
146 PINCTRL_PIN(2, "PLGPIO2"), \ 192 PINCTRL_PIN(2, "PLGPIO2"), \
147 PINCTRL_PIN(3, "PLGPIO3"), \ 193 PINCTRL_PIN(3, "PLGPIO3"), \
148 PINCTRL_PIN(4, "PLGPIO4"), \ 194 PINCTRL_PIN(4, "PLGPIO4"), \
149 PINCTRL_PIN(5, "PLGPIO5"), \ 195 PINCTRL_PIN(5, "PLGPIO5"), \
150 PINCTRL_PIN(6, "PLGPIO6"), \ 196 PINCTRL_PIN(6, "PLGPIO6"), \
151 PINCTRL_PIN(7, "PLGPIO7"), \ 197 PINCTRL_PIN(7, "PLGPIO7"), \
152 PINCTRL_PIN(8, "PLGPIO8"), \ 198 PINCTRL_PIN(8, "PLGPIO8"), \
153 PINCTRL_PIN(9, "PLGPIO9"), \ 199 PINCTRL_PIN(9, "PLGPIO9"), \
154 PINCTRL_PIN(10, "PLGPIO10"), \ 200 PINCTRL_PIN(10, "PLGPIO10"), \
155 PINCTRL_PIN(11, "PLGPIO11"), \ 201 PINCTRL_PIN(11, "PLGPIO11"), \
156 PINCTRL_PIN(12, "PLGPIO12"), \ 202 PINCTRL_PIN(12, "PLGPIO12"), \
157 PINCTRL_PIN(13, "PLGPIO13"), \ 203 PINCTRL_PIN(13, "PLGPIO13"), \
158 PINCTRL_PIN(14, "PLGPIO14"), \ 204 PINCTRL_PIN(14, "PLGPIO14"), \
159 PINCTRL_PIN(15, "PLGPIO15"), \ 205 PINCTRL_PIN(15, "PLGPIO15"), \
160 PINCTRL_PIN(16, "PLGPIO16"), \ 206 PINCTRL_PIN(16, "PLGPIO16"), \
161 PINCTRL_PIN(17, "PLGPIO17"), \ 207 PINCTRL_PIN(17, "PLGPIO17"), \
162 PINCTRL_PIN(18, "PLGPIO18"), \ 208 PINCTRL_PIN(18, "PLGPIO18"), \
163 PINCTRL_PIN(19, "PLGPIO19"), \ 209 PINCTRL_PIN(19, "PLGPIO19"), \
164 PINCTRL_PIN(20, "PLGPIO20"), \ 210 PINCTRL_PIN(20, "PLGPIO20"), \
165 PINCTRL_PIN(21, "PLGPIO21"), \ 211 PINCTRL_PIN(21, "PLGPIO21"), \
166 PINCTRL_PIN(22, "PLGPIO22"), \ 212 PINCTRL_PIN(22, "PLGPIO22"), \
167 PINCTRL_PIN(23, "PLGPIO23"), \ 213 PINCTRL_PIN(23, "PLGPIO23"), \
168 PINCTRL_PIN(24, "PLGPIO24"), \ 214 PINCTRL_PIN(24, "PLGPIO24"), \
169 PINCTRL_PIN(25, "PLGPIO25"), \ 215 PINCTRL_PIN(25, "PLGPIO25"), \
170 PINCTRL_PIN(26, "PLGPIO26"), \ 216 PINCTRL_PIN(26, "PLGPIO26"), \
171 PINCTRL_PIN(27, "PLGPIO27"), \ 217 PINCTRL_PIN(27, "PLGPIO27"), \
172 PINCTRL_PIN(28, "PLGPIO28"), \ 218 PINCTRL_PIN(28, "PLGPIO28"), \
173 PINCTRL_PIN(29, "PLGPIO29"), \ 219 PINCTRL_PIN(29, "PLGPIO29"), \
174 PINCTRL_PIN(30, "PLGPIO30"), \ 220 PINCTRL_PIN(30, "PLGPIO30"), \
175 PINCTRL_PIN(31, "PLGPIO31"), \ 221 PINCTRL_PIN(31, "PLGPIO31"), \
176 PINCTRL_PIN(32, "PLGPIO32"), \ 222 PINCTRL_PIN(32, "PLGPIO32"), \
177 PINCTRL_PIN(33, "PLGPIO33"), \ 223 PINCTRL_PIN(33, "PLGPIO33"), \
178 PINCTRL_PIN(34, "PLGPIO34"), \ 224 PINCTRL_PIN(34, "PLGPIO34"), \
179 PINCTRL_PIN(35, "PLGPIO35"), \ 225 PINCTRL_PIN(35, "PLGPIO35"), \
180 PINCTRL_PIN(36, "PLGPIO36"), \ 226 PINCTRL_PIN(36, "PLGPIO36"), \
181 PINCTRL_PIN(37, "PLGPIO37"), \ 227 PINCTRL_PIN(37, "PLGPIO37"), \
182 PINCTRL_PIN(38, "PLGPIO38"), \ 228 PINCTRL_PIN(38, "PLGPIO38"), \
183 PINCTRL_PIN(39, "PLGPIO39"), \ 229 PINCTRL_PIN(39, "PLGPIO39"), \
184 PINCTRL_PIN(40, "PLGPIO40"), \ 230 PINCTRL_PIN(40, "PLGPIO40"), \
185 PINCTRL_PIN(41, "PLGPIO41"), \ 231 PINCTRL_PIN(41, "PLGPIO41"), \
186 PINCTRL_PIN(42, "PLGPIO42"), \ 232 PINCTRL_PIN(42, "PLGPIO42"), \
187 PINCTRL_PIN(43, "PLGPIO43"), \ 233 PINCTRL_PIN(43, "PLGPIO43"), \
188 PINCTRL_PIN(44, "PLGPIO44"), \ 234 PINCTRL_PIN(44, "PLGPIO44"), \
189 PINCTRL_PIN(45, "PLGPIO45"), \ 235 PINCTRL_PIN(45, "PLGPIO45"), \
190 PINCTRL_PIN(46, "PLGPIO46"), \ 236 PINCTRL_PIN(46, "PLGPIO46"), \
191 PINCTRL_PIN(47, "PLGPIO47"), \ 237 PINCTRL_PIN(47, "PLGPIO47"), \
192 PINCTRL_PIN(48, "PLGPIO48"), \ 238 PINCTRL_PIN(48, "PLGPIO48"), \
193 PINCTRL_PIN(49, "PLGPIO49"), \ 239 PINCTRL_PIN(49, "PLGPIO49"), \
194 PINCTRL_PIN(50, "PLGPIO50"), \ 240 PINCTRL_PIN(50, "PLGPIO50"), \
195 PINCTRL_PIN(51, "PLGPIO51"), \ 241 PINCTRL_PIN(51, "PLGPIO51"), \
196 PINCTRL_PIN(52, "PLGPIO52"), \ 242 PINCTRL_PIN(52, "PLGPIO52"), \
197 PINCTRL_PIN(53, "PLGPIO53"), \ 243 PINCTRL_PIN(53, "PLGPIO53"), \
198 PINCTRL_PIN(54, "PLGPIO54"), \ 244 PINCTRL_PIN(54, "PLGPIO54"), \
199 PINCTRL_PIN(55, "PLGPIO55"), \ 245 PINCTRL_PIN(55, "PLGPIO55"), \
200 PINCTRL_PIN(56, "PLGPIO56"), \ 246 PINCTRL_PIN(56, "PLGPIO56"), \
201 PINCTRL_PIN(57, "PLGPIO57"), \ 247 PINCTRL_PIN(57, "PLGPIO57"), \
202 PINCTRL_PIN(58, "PLGPIO58"), \ 248 PINCTRL_PIN(58, "PLGPIO58"), \
203 PINCTRL_PIN(59, "PLGPIO59"), \ 249 PINCTRL_PIN(59, "PLGPIO59"), \
204 PINCTRL_PIN(60, "PLGPIO60"), \ 250 PINCTRL_PIN(60, "PLGPIO60"), \
205 PINCTRL_PIN(61, "PLGPIO61"), \ 251 PINCTRL_PIN(61, "PLGPIO61"), \
206 PINCTRL_PIN(62, "PLGPIO62"), \ 252 PINCTRL_PIN(62, "PLGPIO62"), \
207 PINCTRL_PIN(63, "PLGPIO63"), \ 253 PINCTRL_PIN(63, "PLGPIO63"), \
208 PINCTRL_PIN(64, "PLGPIO64"), \ 254 PINCTRL_PIN(64, "PLGPIO64"), \
209 PINCTRL_PIN(65, "PLGPIO65"), \ 255 PINCTRL_PIN(65, "PLGPIO65"), \
210 PINCTRL_PIN(66, "PLGPIO66"), \ 256 PINCTRL_PIN(66, "PLGPIO66"), \
211 PINCTRL_PIN(67, "PLGPIO67"), \ 257 PINCTRL_PIN(67, "PLGPIO67"), \
212 PINCTRL_PIN(68, "PLGPIO68"), \ 258 PINCTRL_PIN(68, "PLGPIO68"), \
213 PINCTRL_PIN(69, "PLGPIO69"), \ 259 PINCTRL_PIN(69, "PLGPIO69"), \
214 PINCTRL_PIN(70, "PLGPIO70"), \ 260 PINCTRL_PIN(70, "PLGPIO70"), \
215 PINCTRL_PIN(71, "PLGPIO71"), \ 261 PINCTRL_PIN(71, "PLGPIO71"), \
216 PINCTRL_PIN(72, "PLGPIO72"), \ 262 PINCTRL_PIN(72, "PLGPIO72"), \
217 PINCTRL_PIN(73, "PLGPIO73"), \ 263 PINCTRL_PIN(73, "PLGPIO73"), \
218 PINCTRL_PIN(74, "PLGPIO74"), \ 264 PINCTRL_PIN(74, "PLGPIO74"), \
219 PINCTRL_PIN(75, "PLGPIO75"), \ 265 PINCTRL_PIN(75, "PLGPIO75"), \
220 PINCTRL_PIN(76, "PLGPIO76"), \ 266 PINCTRL_PIN(76, "PLGPIO76"), \
221 PINCTRL_PIN(77, "PLGPIO77"), \ 267 PINCTRL_PIN(77, "PLGPIO77"), \
222 PINCTRL_PIN(78, "PLGPIO78"), \ 268 PINCTRL_PIN(78, "PLGPIO78"), \
223 PINCTRL_PIN(79, "PLGPIO79"), \ 269 PINCTRL_PIN(79, "PLGPIO79"), \
224 PINCTRL_PIN(80, "PLGPIO80"), \ 270 PINCTRL_PIN(80, "PLGPIO80"), \
225 PINCTRL_PIN(81, "PLGPIO81"), \ 271 PINCTRL_PIN(81, "PLGPIO81"), \
226 PINCTRL_PIN(82, "PLGPIO82"), \ 272 PINCTRL_PIN(82, "PLGPIO82"), \
227 PINCTRL_PIN(83, "PLGPIO83"), \ 273 PINCTRL_PIN(83, "PLGPIO83"), \
228 PINCTRL_PIN(84, "PLGPIO84"), \ 274 PINCTRL_PIN(84, "PLGPIO84"), \
229 PINCTRL_PIN(85, "PLGPIO85"), \ 275 PINCTRL_PIN(85, "PLGPIO85"), \
230 PINCTRL_PIN(86, "PLGPIO86"), \ 276 PINCTRL_PIN(86, "PLGPIO86"), \
231 PINCTRL_PIN(87, "PLGPIO87"), \ 277 PINCTRL_PIN(87, "PLGPIO87"), \
232 PINCTRL_PIN(88, "PLGPIO88"), \ 278 PINCTRL_PIN(88, "PLGPIO88"), \
233 PINCTRL_PIN(89, "PLGPIO89"), \ 279 PINCTRL_PIN(89, "PLGPIO89"), \
234 PINCTRL_PIN(90, "PLGPIO90"), \ 280 PINCTRL_PIN(90, "PLGPIO90"), \
235 PINCTRL_PIN(91, "PLGPIO91"), \ 281 PINCTRL_PIN(91, "PLGPIO91"), \
236 PINCTRL_PIN(92, "PLGPIO92"), \ 282 PINCTRL_PIN(92, "PLGPIO92"), \
237 PINCTRL_PIN(93, "PLGPIO93"), \ 283 PINCTRL_PIN(93, "PLGPIO93"), \
238 PINCTRL_PIN(94, "PLGPIO94"), \ 284 PINCTRL_PIN(94, "PLGPIO94"), \
239 PINCTRL_PIN(95, "PLGPIO95"), \ 285 PINCTRL_PIN(95, "PLGPIO95"), \
240 PINCTRL_PIN(96, "PLGPIO96"), \ 286 PINCTRL_PIN(96, "PLGPIO96"), \
241 PINCTRL_PIN(97, "PLGPIO97"), \ 287 PINCTRL_PIN(97, "PLGPIO97"), \
242 PINCTRL_PIN(98, "PLGPIO98"), \ 288 PINCTRL_PIN(98, "PLGPIO98"), \
243 PINCTRL_PIN(99, "PLGPIO99"), \ 289 PINCTRL_PIN(99, "PLGPIO99"), \
244 PINCTRL_PIN(100, "PLGPIO100"), \ 290 PINCTRL_PIN(100, "PLGPIO100"), \
245 PINCTRL_PIN(101, "PLGPIO101") 291 PINCTRL_PIN(101, "PLGPIO101")
246 292
247 #define SPEAR_PIN_102_TO_245 \ 293 #define SPEAR_PIN_102_TO_245 \
248 PINCTRL_PIN(102, "PLGPIO102"), \ 294 PINCTRL_PIN(102, "PLGPIO102"), \
249 PINCTRL_PIN(103, "PLGPIO103"), \ 295 PINCTRL_PIN(103, "PLGPIO103"), \
250 PINCTRL_PIN(104, "PLGPIO104"), \ 296 PINCTRL_PIN(104, "PLGPIO104"), \
251 PINCTRL_PIN(105, "PLGPIO105"), \ 297 PINCTRL_PIN(105, "PLGPIO105"), \
252 PINCTRL_PIN(106, "PLGPIO106"), \ 298 PINCTRL_PIN(106, "PLGPIO106"), \
253 PINCTRL_PIN(107, "PLGPIO107"), \ 299 PINCTRL_PIN(107, "PLGPIO107"), \
254 PINCTRL_PIN(108, "PLGPIO108"), \ 300 PINCTRL_PIN(108, "PLGPIO108"), \
255 PINCTRL_PIN(109, "PLGPIO109"), \ 301 PINCTRL_PIN(109, "PLGPIO109"), \
256 PINCTRL_PIN(110, "PLGPIO110"), \ 302 PINCTRL_PIN(110, "PLGPIO110"), \
257 PINCTRL_PIN(111, "PLGPIO111"), \ 303 PINCTRL_PIN(111, "PLGPIO111"), \
258 PINCTRL_PIN(112, "PLGPIO112"), \ 304 PINCTRL_PIN(112, "PLGPIO112"), \
259 PINCTRL_PIN(113, "PLGPIO113"), \ 305 PINCTRL_PIN(113, "PLGPIO113"), \
260 PINCTRL_PIN(114, "PLGPIO114"), \ 306 PINCTRL_PIN(114, "PLGPIO114"), \
261 PINCTRL_PIN(115, "PLGPIO115"), \ 307 PINCTRL_PIN(115, "PLGPIO115"), \
262 PINCTRL_PIN(116, "PLGPIO116"), \ 308 PINCTRL_PIN(116, "PLGPIO116"), \
263 PINCTRL_PIN(117, "PLGPIO117"), \ 309 PINCTRL_PIN(117, "PLGPIO117"), \
264 PINCTRL_PIN(118, "PLGPIO118"), \ 310 PINCTRL_PIN(118, "PLGPIO118"), \
265 PINCTRL_PIN(119, "PLGPIO119"), \ 311 PINCTRL_PIN(119, "PLGPIO119"), \
266 PINCTRL_PIN(120, "PLGPIO120"), \ 312 PINCTRL_PIN(120, "PLGPIO120"), \
267 PINCTRL_PIN(121, "PLGPIO121"), \ 313 PINCTRL_PIN(121, "PLGPIO121"), \
268 PINCTRL_PIN(122, "PLGPIO122"), \ 314 PINCTRL_PIN(122, "PLGPIO122"), \
269 PINCTRL_PIN(123, "PLGPIO123"), \ 315 PINCTRL_PIN(123, "PLGPIO123"), \
270 PINCTRL_PIN(124, "PLGPIO124"), \ 316 PINCTRL_PIN(124, "PLGPIO124"), \
271 PINCTRL_PIN(125, "PLGPIO125"), \ 317 PINCTRL_PIN(125, "PLGPIO125"), \
272 PINCTRL_PIN(126, "PLGPIO126"), \ 318 PINCTRL_PIN(126, "PLGPIO126"), \
273 PINCTRL_PIN(127, "PLGPIO127"), \ 319 PINCTRL_PIN(127, "PLGPIO127"), \
274 PINCTRL_PIN(128, "PLGPIO128"), \ 320 PINCTRL_PIN(128, "PLGPIO128"), \
275 PINCTRL_PIN(129, "PLGPIO129"), \ 321 PINCTRL_PIN(129, "PLGPIO129"), \
276 PINCTRL_PIN(130, "PLGPIO130"), \ 322 PINCTRL_PIN(130, "PLGPIO130"), \
277 PINCTRL_PIN(131, "PLGPIO131"), \ 323 PINCTRL_PIN(131, "PLGPIO131"), \
278 PINCTRL_PIN(132, "PLGPIO132"), \ 324 PINCTRL_PIN(132, "PLGPIO132"), \
279 PINCTRL_PIN(133, "PLGPIO133"), \ 325 PINCTRL_PIN(133, "PLGPIO133"), \
280 PINCTRL_PIN(134, "PLGPIO134"), \ 326 PINCTRL_PIN(134, "PLGPIO134"), \
281 PINCTRL_PIN(135, "PLGPIO135"), \ 327 PINCTRL_PIN(135, "PLGPIO135"), \
282 PINCTRL_PIN(136, "PLGPIO136"), \ 328 PINCTRL_PIN(136, "PLGPIO136"), \
283 PINCTRL_PIN(137, "PLGPIO137"), \ 329 PINCTRL_PIN(137, "PLGPIO137"), \
284 PINCTRL_PIN(138, "PLGPIO138"), \ 330 PINCTRL_PIN(138, "PLGPIO138"), \
285 PINCTRL_PIN(139, "PLGPIO139"), \ 331 PINCTRL_PIN(139, "PLGPIO139"), \
286 PINCTRL_PIN(140, "PLGPIO140"), \ 332 PINCTRL_PIN(140, "PLGPIO140"), \
287 PINCTRL_PIN(141, "PLGPIO141"), \ 333 PINCTRL_PIN(141, "PLGPIO141"), \
288 PINCTRL_PIN(142, "PLGPIO142"), \ 334 PINCTRL_PIN(142, "PLGPIO142"), \
289 PINCTRL_PIN(143, "PLGPIO143"), \ 335 PINCTRL_PIN(143, "PLGPIO143"), \
290 PINCTRL_PIN(144, "PLGPIO144"), \ 336 PINCTRL_PIN(144, "PLGPIO144"), \
291 PINCTRL_PIN(145, "PLGPIO145"), \ 337 PINCTRL_PIN(145, "PLGPIO145"), \
292 PINCTRL_PIN(146, "PLGPIO146"), \ 338 PINCTRL_PIN(146, "PLGPIO146"), \
293 PINCTRL_PIN(147, "PLGPIO147"), \ 339 PINCTRL_PIN(147, "PLGPIO147"), \
294 PINCTRL_PIN(148, "PLGPIO148"), \ 340 PINCTRL_PIN(148, "PLGPIO148"), \
295 PINCTRL_PIN(149, "PLGPIO149"), \ 341 PINCTRL_PIN(149, "PLGPIO149"), \
296 PINCTRL_PIN(150, "PLGPIO150"), \ 342 PINCTRL_PIN(150, "PLGPIO150"), \
297 PINCTRL_PIN(151, "PLGPIO151"), \ 343 PINCTRL_PIN(151, "PLGPIO151"), \
298 PINCTRL_PIN(152, "PLGPIO152"), \ 344 PINCTRL_PIN(152, "PLGPIO152"), \
299 PINCTRL_PIN(153, "PLGPIO153"), \ 345 PINCTRL_PIN(153, "PLGPIO153"), \
300 PINCTRL_PIN(154, "PLGPIO154"), \ 346 PINCTRL_PIN(154, "PLGPIO154"), \
301 PINCTRL_PIN(155, "PLGPIO155"), \ 347 PINCTRL_PIN(155, "PLGPIO155"), \
302 PINCTRL_PIN(156, "PLGPIO156"), \ 348 PINCTRL_PIN(156, "PLGPIO156"), \
303 PINCTRL_PIN(157, "PLGPIO157"), \ 349 PINCTRL_PIN(157, "PLGPIO157"), \
304 PINCTRL_PIN(158, "PLGPIO158"), \ 350 PINCTRL_PIN(158, "PLGPIO158"), \
305 PINCTRL_PIN(159, "PLGPIO159"), \ 351 PINCTRL_PIN(159, "PLGPIO159"), \
306 PINCTRL_PIN(160, "PLGPIO160"), \ 352 PINCTRL_PIN(160, "PLGPIO160"), \
307 PINCTRL_PIN(161, "PLGPIO161"), \ 353 PINCTRL_PIN(161, "PLGPIO161"), \
308 PINCTRL_PIN(162, "PLGPIO162"), \ 354 PINCTRL_PIN(162, "PLGPIO162"), \
309 PINCTRL_PIN(163, "PLGPIO163"), \ 355 PINCTRL_PIN(163, "PLGPIO163"), \
310 PINCTRL_PIN(164, "PLGPIO164"), \ 356 PINCTRL_PIN(164, "PLGPIO164"), \
311 PINCTRL_PIN(165, "PLGPIO165"), \ 357 PINCTRL_PIN(165, "PLGPIO165"), \
312 PINCTRL_PIN(166, "PLGPIO166"), \ 358 PINCTRL_PIN(166, "PLGPIO166"), \
313 PINCTRL_PIN(167, "PLGPIO167"), \ 359 PINCTRL_PIN(167, "PLGPIO167"), \
314 PINCTRL_PIN(168, "PLGPIO168"), \ 360 PINCTRL_PIN(168, "PLGPIO168"), \
315 PINCTRL_PIN(169, "PLGPIO169"), \ 361 PINCTRL_PIN(169, "PLGPIO169"), \
316 PINCTRL_PIN(170, "PLGPIO170"), \ 362 PINCTRL_PIN(170, "PLGPIO170"), \
317 PINCTRL_PIN(171, "PLGPIO171"), \ 363 PINCTRL_PIN(171, "PLGPIO171"), \
318 PINCTRL_PIN(172, "PLGPIO172"), \ 364 PINCTRL_PIN(172, "PLGPIO172"), \
319 PINCTRL_PIN(173, "PLGPIO173"), \ 365 PINCTRL_PIN(173, "PLGPIO173"), \
320 PINCTRL_PIN(174, "PLGPIO174"), \ 366 PINCTRL_PIN(174, "PLGPIO174"), \
321 PINCTRL_PIN(175, "PLGPIO175"), \ 367 PINCTRL_PIN(175, "PLGPIO175"), \
322 PINCTRL_PIN(176, "PLGPIO176"), \ 368 PINCTRL_PIN(176, "PLGPIO176"), \
323 PINCTRL_PIN(177, "PLGPIO177"), \ 369 PINCTRL_PIN(177, "PLGPIO177"), \
324 PINCTRL_PIN(178, "PLGPIO178"), \ 370 PINCTRL_PIN(178, "PLGPIO178"), \
325 PINCTRL_PIN(179, "PLGPIO179"), \ 371 PINCTRL_PIN(179, "PLGPIO179"), \
326 PINCTRL_PIN(180, "PLGPIO180"), \ 372 PINCTRL_PIN(180, "PLGPIO180"), \
327 PINCTRL_PIN(181, "PLGPIO181"), \ 373 PINCTRL_PIN(181, "PLGPIO181"), \
328 PINCTRL_PIN(182, "PLGPIO182"), \ 374 PINCTRL_PIN(182, "PLGPIO182"), \
329 PINCTRL_PIN(183, "PLGPIO183"), \ 375 PINCTRL_PIN(183, "PLGPIO183"), \
330 PINCTRL_PIN(184, "PLGPIO184"), \ 376 PINCTRL_PIN(184, "PLGPIO184"), \
331 PINCTRL_PIN(185, "PLGPIO185"), \ 377 PINCTRL_PIN(185, "PLGPIO185"), \
332 PINCTRL_PIN(186, "PLGPIO186"), \ 378 PINCTRL_PIN(186, "PLGPIO186"), \
333 PINCTRL_PIN(187, "PLGPIO187"), \ 379 PINCTRL_PIN(187, "PLGPIO187"), \
334 PINCTRL_PIN(188, "PLGPIO188"), \ 380 PINCTRL_PIN(188, "PLGPIO188"), \
335 PINCTRL_PIN(189, "PLGPIO189"), \ 381 PINCTRL_PIN(189, "PLGPIO189"), \
336 PINCTRL_PIN(190, "PLGPIO190"), \ 382 PINCTRL_PIN(190, "PLGPIO190"), \
337 PINCTRL_PIN(191, "PLGPIO191"), \ 383 PINCTRL_PIN(191, "PLGPIO191"), \
338 PINCTRL_PIN(192, "PLGPIO192"), \ 384 PINCTRL_PIN(192, "PLGPIO192"), \
339 PINCTRL_PIN(193, "PLGPIO193"), \ 385 PINCTRL_PIN(193, "PLGPIO193"), \
340 PINCTRL_PIN(194, "PLGPIO194"), \ 386 PINCTRL_PIN(194, "PLGPIO194"), \
341 PINCTRL_PIN(195, "PLGPIO195"), \ 387 PINCTRL_PIN(195, "PLGPIO195"), \
342 PINCTRL_PIN(196, "PLGPIO196"), \ 388 PINCTRL_PIN(196, "PLGPIO196"), \
343 PINCTRL_PIN(197, "PLGPIO197"), \ 389 PINCTRL_PIN(197, "PLGPIO197"), \
344 PINCTRL_PIN(198, "PLGPIO198"), \ 390 PINCTRL_PIN(198, "PLGPIO198"), \
345 PINCTRL_PIN(199, "PLGPIO199"), \ 391 PINCTRL_PIN(199, "PLGPIO199"), \
346 PINCTRL_PIN(200, "PLGPIO200"), \ 392 PINCTRL_PIN(200, "PLGPIO200"), \
347 PINCTRL_PIN(201, "PLGPIO201"), \ 393 PINCTRL_PIN(201, "PLGPIO201"), \
348 PINCTRL_PIN(202, "PLGPIO202"), \ 394 PINCTRL_PIN(202, "PLGPIO202"), \
349 PINCTRL_PIN(203, "PLGPIO203"), \ 395 PINCTRL_PIN(203, "PLGPIO203"), \
350 PINCTRL_PIN(204, "PLGPIO204"), \ 396 PINCTRL_PIN(204, "PLGPIO204"), \
351 PINCTRL_PIN(205, "PLGPIO205"), \ 397 PINCTRL_PIN(205, "PLGPIO205"), \
352 PINCTRL_PIN(206, "PLGPIO206"), \ 398 PINCTRL_PIN(206, "PLGPIO206"), \
353 PINCTRL_PIN(207, "PLGPIO207"), \ 399 PINCTRL_PIN(207, "PLGPIO207"), \
354 PINCTRL_PIN(208, "PLGPIO208"), \ 400 PINCTRL_PIN(208, "PLGPIO208"), \
355 PINCTRL_PIN(209, "PLGPIO209"), \ 401 PINCTRL_PIN(209, "PLGPIO209"), \
356 PINCTRL_PIN(210, "PLGPIO210"), \ 402 PINCTRL_PIN(210, "PLGPIO210"), \
357 PINCTRL_PIN(211, "PLGPIO211"), \ 403 PINCTRL_PIN(211, "PLGPIO211"), \
358 PINCTRL_PIN(212, "PLGPIO212"), \ 404 PINCTRL_PIN(212, "PLGPIO212"), \
359 PINCTRL_PIN(213, "PLGPIO213"), \ 405 PINCTRL_PIN(213, "PLGPIO213"), \
360 PINCTRL_PIN(214, "PLGPIO214"), \ 406 PINCTRL_PIN(214, "PLGPIO214"), \
361 PINCTRL_PIN(215, "PLGPIO215"), \ 407 PINCTRL_PIN(215, "PLGPIO215"), \
362 PINCTRL_PIN(216, "PLGPIO216"), \ 408 PINCTRL_PIN(216, "PLGPIO216"), \
363 PINCTRL_PIN(217, "PLGPIO217"), \ 409 PINCTRL_PIN(217, "PLGPIO217"), \
364 PINCTRL_PIN(218, "PLGPIO218"), \ 410 PINCTRL_PIN(218, "PLGPIO218"), \
365 PINCTRL_PIN(219, "PLGPIO219"), \ 411 PINCTRL_PIN(219, "PLGPIO219"), \
366 PINCTRL_PIN(220, "PLGPIO220"), \ 412 PINCTRL_PIN(220, "PLGPIO220"), \
367 PINCTRL_PIN(221, "PLGPIO221"), \ 413 PINCTRL_PIN(221, "PLGPIO221"), \
368 PINCTRL_PIN(222, "PLGPIO222"), \ 414 PINCTRL_PIN(222, "PLGPIO222"), \
369 PINCTRL_PIN(223, "PLGPIO223"), \ 415 PINCTRL_PIN(223, "PLGPIO223"), \
370 PINCTRL_PIN(224, "PLGPIO224"), \ 416 PINCTRL_PIN(224, "PLGPIO224"), \
371 PINCTRL_PIN(225, "PLGPIO225"), \ 417 PINCTRL_PIN(225, "PLGPIO225"), \
372 PINCTRL_PIN(226, "PLGPIO226"), \ 418 PINCTRL_PIN(226, "PLGPIO226"), \
373 PINCTRL_PIN(227, "PLGPIO227"), \ 419 PINCTRL_PIN(227, "PLGPIO227"), \
374 PINCTRL_PIN(228, "PLGPIO228"), \ 420 PINCTRL_PIN(228, "PLGPIO228"), \
375 PINCTRL_PIN(229, "PLGPIO229"), \ 421 PINCTRL_PIN(229, "PLGPIO229"), \
376 PINCTRL_PIN(230, "PLGPIO230"), \ 422 PINCTRL_PIN(230, "PLGPIO230"), \
377 PINCTRL_PIN(231, "PLGPIO231"), \ 423 PINCTRL_PIN(231, "PLGPIO231"), \
378 PINCTRL_PIN(232, "PLGPIO232"), \ 424 PINCTRL_PIN(232, "PLGPIO232"), \
379 PINCTRL_PIN(233, "PLGPIO233"), \ 425 PINCTRL_PIN(233, "PLGPIO233"), \
380 PINCTRL_PIN(234, "PLGPIO234"), \ 426 PINCTRL_PIN(234, "PLGPIO234"), \
381 PINCTRL_PIN(235, "PLGPIO235"), \ 427 PINCTRL_PIN(235, "PLGPIO235"), \
382 PINCTRL_PIN(236, "PLGPIO236"), \ 428 PINCTRL_PIN(236, "PLGPIO236"), \
383 PINCTRL_PIN(237, "PLGPIO237"), \ 429 PINCTRL_PIN(237, "PLGPIO237"), \
384 PINCTRL_PIN(238, "PLGPIO238"), \ 430 PINCTRL_PIN(238, "PLGPIO238"), \
385 PINCTRL_PIN(239, "PLGPIO239"), \ 431 PINCTRL_PIN(239, "PLGPIO239"), \
386 PINCTRL_PIN(240, "PLGPIO240"), \ 432 PINCTRL_PIN(240, "PLGPIO240"), \
387 PINCTRL_PIN(241, "PLGPIO241"), \ 433 PINCTRL_PIN(241, "PLGPIO241"), \
388 PINCTRL_PIN(242, "PLGPIO242"), \ 434 PINCTRL_PIN(242, "PLGPIO242"), \
389 PINCTRL_PIN(243, "PLGPIO243"), \ 435 PINCTRL_PIN(243, "PLGPIO243"), \
390 PINCTRL_PIN(244, "PLGPIO244"), \ 436 PINCTRL_PIN(244, "PLGPIO244"), \
391 PINCTRL_PIN(245, "PLGPIO245") 437 PINCTRL_PIN(245, "PLGPIO245")
392 438
393 #endif /* __PINMUX_SPEAR_H__ */ 439 #endif /* __PINMUX_SPEAR_H__ */
394 440
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 const unsigned pin18[] = { 18, };
2422 static const unsigned pin19[] = { 19, };
2423 static const unsigned pin20[] = { 20, };
2424 static const unsigned pin21[] = { 21, };
2425 static const unsigned pin22[] = { 22, };
2426 static const unsigned pin23[] = { 23, };
2427 static const unsigned pin54[] = { 54, };
2428 static const unsigned pin55[] = { 55, };
2429 static const unsigned pin56[] = { 56, };
2430 static const unsigned pin57[] = { 57, };
2431 static const unsigned pin58[] = { 58, };
2432 static const unsigned pin59[] = { 59, };
2433 static const unsigned pin60[] = { 60, };
2434 static const unsigned pin61[] = { 61, };
2435 static const unsigned pin62[] = { 62, };
2436 static const unsigned pin63[] = { 63, };
2437 static const unsigned pin143[] = { 143, };
2438 static const unsigned pin144[] = { 144, };
2439 static const unsigned pin145[] = { 145, };
2440 static const unsigned pin146[] = { 146, };
2441 static const unsigned pin147[] = { 147, };
2442 static const unsigned pin148[] = { 148, };
2443 static const unsigned pin149[] = { 149, };
2444 static const unsigned pin150[] = { 150, };
2445 static const unsigned pin151[] = { 151, };
2446 static const unsigned pin152[] = { 152, };
2447 static const unsigned pin205[] = { 205, };
2448 static const unsigned pin206[] = { 206, };
2449 static const unsigned pin211[] = { 211, };
2450 static const unsigned pin212[] = { 212, };
2451 static const unsigned pin213[] = { 213, };
2452 static const unsigned pin214[] = { 214, };
2453 static const unsigned pin215[] = { 215, };
2454 static const unsigned pin216[] = { 216, };
2455 static const unsigned pin217[] = { 217, };
2456 static const unsigned pin218[] = { 218, };
2457 static const unsigned pin219[] = { 219, };
2458 static const unsigned pin220[] = { 220, };
2459 static const unsigned pin221[] = { 221, };
2460 static const unsigned pin222[] = { 222, };
2461 static const unsigned pin223[] = { 223, };
2462 static const unsigned pin224[] = { 224, };
2463 static const unsigned pin225[] = { 225, };
2464 static const unsigned pin226[] = { 226, };
2465 static const unsigned pin227[] = { 227, };
2466 static const unsigned pin228[] = { 228, };
2467 static const unsigned pin229[] = { 229, };
2468 static const unsigned pin230[] = { 230, };
2469 static const unsigned pin231[] = { 231, };
2470 static const unsigned pin232[] = { 232, };
2471 static const unsigned pin233[] = { 233, };
2472 static const unsigned pin234[] = { 234, };
2473 static const unsigned pin235[] = { 235, };
2474 static const unsigned pin236[] = { 236, };
2475 static const unsigned pin237[] = { 237, };
2476 static const unsigned pin238[] = { 238, };
2477 static const unsigned pin239[] = { 239, };
2478 static const unsigned pin240[] = { 240, };
2479 static const unsigned pin241[] = { 241, };
2480 static const unsigned pin242[] = { 242, };
2481 static const unsigned pin243[] = { 243, };
2482 static const unsigned pin244[] = { 244, };
2483 static const unsigned pin245[] = { 245, };
2484
2485 static const unsigned pin_grp0[] = { 173, 174, };
2486 static const unsigned pin_grp1[] = { 175, 185, 188, 197, 198, };
2487 static const unsigned pin_grp2[] = { 176, 177, 178, 179, 184, 186, 187, 189,
2488 190, 191, 192, };
2489 static const unsigned pin_grp3[] = { 180, 181, 182, 183, 193, 194, 195, 196, };
2490 static const unsigned pin_grp4[] = { 199, 200, };
2491 static const unsigned pin_grp5[] = { 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
2492 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, };
2493 static const unsigned pin_grp6[] = { 86, 87, 88, 89, 90, 91, 92, 93, };
2494 static const unsigned pin_grp7[] = { 98, 99, };
2495 static const unsigned pin_grp8[] = { 158, 159, 160, 161, 162, 163, 164, 165,
2496 166, 167, 168, 169, 170, 171, 172, };
2497
2498 /* Define muxreg arrays */
2499 DEFINE_2_MUXREG(i2c0_pins, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_I2C0_MASK, 0, 1);
2500 DEFINE_2_MUXREG(ssp0_pins, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_SSP0_MASK, 0, 1);
2501 DEFINE_2_MUXREG(ssp0_cs0_pins, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_SSP0_CS0_MASK, 0, 1);
2502 DEFINE_2_MUXREG(ssp0_cs1_2_pins, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_SSP0_CS1_2_MASK, 0, 1);
2503 DEFINE_2_MUXREG(i2s0_pins, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_I2S0_MASK, 0, 1);
2504 DEFINE_2_MUXREG(i2s1_pins, PAD_FUNCTION_EN_1, PAD_DIRECTION_SEL_1, PMX_I2S1_MASK, 0, 1);
2505 DEFINE_2_MUXREG(clcd_pins, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_CLCD1_MASK, 0, 1);
2506 DEFINE_2_MUXREG(clcd_high_res_pins, PAD_FUNCTION_EN_1, PAD_DIRECTION_SEL_1, PMX_CLCD2_MASK, 0, 1);
2507 DEFINE_2_MUXREG(pin18, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_EGPIO15_MASK, 0, 1);
2508 DEFINE_2_MUXREG(pin19, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_EGPIO14_MASK, 0, 1);
2509 DEFINE_2_MUXREG(pin20, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_EGPIO13_MASK, 0, 1);
2510 DEFINE_2_MUXREG(pin21, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_EGPIO12_MASK, 0, 1);
2511 DEFINE_2_MUXREG(pin22, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_EGPIO11_MASK, 0, 1);
2512 DEFINE_2_MUXREG(pin23, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_EGPIO10_MASK, 0, 1);
2513 DEFINE_2_MUXREG(pin143, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_EGPIO00_MASK, 0, 1);
2514 DEFINE_2_MUXREG(pin144, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_EGPIO01_MASK, 0, 1);
2515 DEFINE_2_MUXREG(pin145, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_EGPIO02_MASK, 0, 1);
2516 DEFINE_2_MUXREG(pin146, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_EGPIO03_MASK, 0, 1);
2517 DEFINE_2_MUXREG(pin147, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_EGPIO04_MASK, 0, 1);
2518 DEFINE_2_MUXREG(pin148, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_EGPIO05_MASK, 0, 1);
2519 DEFINE_2_MUXREG(pin149, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_EGPIO06_MASK, 0, 1);
2520 DEFINE_2_MUXREG(pin150, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_EGPIO07_MASK, 0, 1);
2521 DEFINE_2_MUXREG(pin151, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_EGPIO08_MASK, 0, 1);
2522 DEFINE_2_MUXREG(pin152, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_EGPIO09_MASK, 0, 1);
2523 DEFINE_2_MUXREG(smi_2_chips_pins, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_SMI_MASK, 0, 1);
2524 DEFINE_2_MUXREG(pin54, PAD_FUNCTION_EN_1, PAD_DIRECTION_SEL_1, PMX_SMINCS3_MASK, 0, 1);
2525 DEFINE_2_MUXREG(pin55, PAD_FUNCTION_EN_1, PAD_DIRECTION_SEL_1, PMX_SMINCS2_MASK, 0, 1);
2526 DEFINE_2_MUXREG(pin56, PAD_FUNCTION_EN_1, PAD_DIRECTION_SEL_1, PMX_NFRSTPWDWN3_MASK, 0, 1);
2527 DEFINE_2_MUXREG(pin57, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_NFRSTPWDWN2_MASK, 0, 1);
2528 DEFINE_2_MUXREG(pin58, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_NFRSTPWDWN1_MASK, 0, 1);
2529 DEFINE_2_MUXREG(pin59, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_NFRSTPWDWN0_MASK, 0, 1);
2530 DEFINE_2_MUXREG(pin60, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_NFWPRT3_MASK, 0, 1);
2531 DEFINE_2_MUXREG(pin61, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_NFCE3_MASK, 0, 1);
2532 DEFINE_2_MUXREG(pin62, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_NFAD25_MASK, 0, 1);
2533 DEFINE_2_MUXREG(pin63, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_NFAD24_MASK, 0, 1);
2534 DEFINE_2_MUXREG(pin_grp0, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_GMIICLK_MASK, 0, 1);
2535 DEFINE_2_MUXREG(pin_grp1, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_GMIICOL_CRS_XFERER_MIITXCLK_MASK, 0, 1);
2536 DEFINE_2_MUXREG(pin_grp2, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_RXCLK_RDV_TXEN_D03_MASK, 0, 1);
2537 DEFINE_2_MUXREG(pin_grp3, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_GMIID47_MASK, 0, 1);
2538 DEFINE_2_MUXREG(pin_grp4, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_MDC_MDIO_MASK, 0, 1);
2539 DEFINE_2_MUXREG(pin_grp5, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_NFAD23_MASK, 0, 1);
2540 DEFINE_2_MUXREG(pin_grp6, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_MCI_DATA8_15_MASK, 0, 1);
2541 DEFINE_2_MUXREG(pin_grp7, PAD_FUNCTION_EN_1, PAD_DIRECTION_SEL_1, PMX_NFCE2_MASK, 0, 1);
2542 DEFINE_2_MUXREG(pin_grp8, PAD_FUNCTION_EN_1, PAD_DIRECTION_SEL_1, PMX_NAND8_MASK, 0, 1);
2543 DEFINE_2_MUXREG(nand_16bit_pins, PAD_FUNCTION_EN_1, PAD_DIRECTION_SEL_1, PMX_NAND16BIT_1_MASK, 0, 1);
2544 DEFINE_2_MUXREG(pin205, PAD_FUNCTION_EN_1, PAD_DIRECTION_SEL_1, PMX_KBD_COL1_MASK | PMX_NFCE1_MASK, 0, 1);
2545 DEFINE_2_MUXREG(pin206, PAD_FUNCTION_EN_1, PAD_DIRECTION_SEL_1, PMX_KBD_COL0_MASK | PMX_NFCE2_MASK, 0, 1);
2546 DEFINE_2_MUXREG(pin211, PAD_FUNCTION_EN_1, PAD_DIRECTION_SEL_1, PMX_KBD_ROW1_MASK | PMX_NFWPRT1_MASK, 0, 1);
2547 DEFINE_2_MUXREG(pin212, PAD_FUNCTION_EN_1, PAD_DIRECTION_SEL_1, PMX_KBD_ROW0_MASK | PMX_NFWPRT2_MASK, 0, 1);
2548 DEFINE_2_MUXREG(pin213, PAD_FUNCTION_EN_1, PAD_DIRECTION_SEL_1, PMX_MCIDATA0_MASK, 0, 1);
2549 DEFINE_2_MUXREG(pin214, PAD_FUNCTION_EN_1, PAD_DIRECTION_SEL_1, PMX_MCIDATA1_MASK, 0, 1);
2550 DEFINE_2_MUXREG(pin215, PAD_FUNCTION_EN_1, PAD_DIRECTION_SEL_1, PMX_MCIDATA2_MASK, 0, 1);
2551 DEFINE_2_MUXREG(pin216, PAD_FUNCTION_EN_1, PAD_DIRECTION_SEL_1, PMX_MCIDATA3_MASK, 0, 1);
2552 DEFINE_2_MUXREG(pin217, PAD_FUNCTION_EN_1, PAD_DIRECTION_SEL_1, PMX_MCIDATA4_MASK, 0, 1);
2553 DEFINE_2_MUXREG(pin218, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCIDATA5_MASK, 0, 1);
2554 DEFINE_2_MUXREG(pin219, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCIDATA6_MASK, 0, 1);
2555 DEFINE_2_MUXREG(pin220, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCIDATA7_MASK, 0, 1);
2556 DEFINE_2_MUXREG(pin221, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCIDATA1SD_MASK, 0, 1);
2557 DEFINE_2_MUXREG(pin222, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCIDATA2SD_MASK, 0, 1);
2558 DEFINE_2_MUXREG(pin223, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCIDATA3SD_MASK, 0, 1);
2559 DEFINE_2_MUXREG(pin224, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCIADDR0ALE_MASK, 0, 1);
2560 DEFINE_2_MUXREG(pin225, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCIADDR1CLECLK_MASK, 0, 1);
2561 DEFINE_2_MUXREG(pin226, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCIADDR2_MASK, 0, 1);
2562 DEFINE_2_MUXREG(pin227, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCICECF_MASK, 0, 1);
2563 DEFINE_2_MUXREG(pin228, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCICEXD_MASK, 0, 1);
2564 DEFINE_2_MUXREG(pin229, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCICESDMMC_MASK, 0, 1);
2565 DEFINE_2_MUXREG(pin230, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCICDCF1_MASK, 0, 1);
2566 DEFINE_2_MUXREG(pin231, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCICDCF2_MASK, 0, 1);
2567 DEFINE_2_MUXREG(pin232, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCICDXD_MASK, 0, 1);
2568 DEFINE_2_MUXREG(pin233, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCICDSDMMC_MASK, 0, 1);
2569 DEFINE_2_MUXREG(pin234, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCIDATADIR_MASK, 0, 1);
2570 DEFINE_2_MUXREG(pin235, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCIDMARQWP_MASK, 0, 1);
2571 DEFINE_2_MUXREG(pin236, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCIIORDRE_MASK, 0, 1);
2572 DEFINE_2_MUXREG(pin237, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCIIOWRWE_MASK, 0, 1);
2573 DEFINE_2_MUXREG(pin238, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCIRESETCF_MASK, 0, 1);
2574 DEFINE_2_MUXREG(pin239, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCICS0CE_MASK, 0, 1);
2575 DEFINE_2_MUXREG(pin240, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCICFINTR_MASK, 0, 1);
2576 DEFINE_2_MUXREG(pin241, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCIIORDY_MASK, 0, 1);
2577 DEFINE_2_MUXREG(pin242, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCICS1_MASK, 0, 1);
2578 DEFINE_2_MUXREG(pin243, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCIDMAACK_MASK, 0, 1);
2579 DEFINE_2_MUXREG(pin244, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCISDCMD_MASK, 0, 1);
2580 DEFINE_2_MUXREG(pin245, PAD_FUNCTION_EN_2, PAD_DIRECTION_SEL_2, PMX_MCILEDS_MASK, 0, 1);
2581 DEFINE_2_MUXREG(keyboard_rowcol6_8_pins, PAD_FUNCTION_EN_1, PAD_DIRECTION_SEL_1, PMX_KBD_ROWCOL68_MASK, 0, 1);
2582 DEFINE_2_MUXREG(uart0_pins, PAD_FUNCTION_EN_0, PAD_DIRECTION_SEL_0, PMX_UART0_MASK, 0, 1);
2583 DEFINE_2_MUXREG(uart0_modem_pins, PAD_FUNCTION_EN_1, PAD_DIRECTION_SEL_1, PMX_UART0_MODEM_MASK, 0, 1);
2584 DEFINE_2_MUXREG(gpt0_tmr0_pins, PAD_FUNCTION_EN_1, PAD_DIRECTION_SEL_1, PMX_GPT0_TMR0_MASK, 0, 1);
2585 DEFINE_2_MUXREG(gpt0_tmr1_pins, PAD_FUNCTION_EN_1, PAD_DIRECTION_SEL_1, PMX_GPT0_TMR1_MASK, 0, 1);
2586 DEFINE_2_MUXREG(gpt1_tmr0_pins, PAD_FUNCTION_EN_1, PAD_DIRECTION_SEL_1, PMX_GPT1_TMR0_MASK, 0, 1);
2587 DEFINE_2_MUXREG(gpt1_tmr1_pins, PAD_FUNCTION_EN_1, PAD_DIRECTION_SEL_1, PMX_GPT1_TMR1_MASK, 0, 1);
2588 DEFINE_2_MUXREG(touch_xy_pins, PAD_FUNCTION_EN_1, PAD_DIRECTION_SEL_1, PMX_TOUCH_XY_MASK, 0, 1);
2589
2590 static struct spear_gpio_pingroup spear1310_gpio_pingroup[] = {
2591 GPIO_PINGROUP(i2c0_pins),
2592 GPIO_PINGROUP(ssp0_pins),
2593 GPIO_PINGROUP(ssp0_cs0_pins),
2594 GPIO_PINGROUP(ssp0_cs1_2_pins),
2595 GPIO_PINGROUP(i2s0_pins),
2596 GPIO_PINGROUP(i2s1_pins),
2597 GPIO_PINGROUP(clcd_pins),
2598 GPIO_PINGROUP(clcd_high_res_pins),
2599 GPIO_PINGROUP(pin18),
2600 GPIO_PINGROUP(pin19),
2601 GPIO_PINGROUP(pin20),
2602 GPIO_PINGROUP(pin21),
2603 GPIO_PINGROUP(pin22),
2604 GPIO_PINGROUP(pin23),
2605 GPIO_PINGROUP(pin143),
2606 GPIO_PINGROUP(pin144),
2607 GPIO_PINGROUP(pin145),
2608 GPIO_PINGROUP(pin146),
2609 GPIO_PINGROUP(pin147),
2610 GPIO_PINGROUP(pin148),
2611 GPIO_PINGROUP(pin149),
2612 GPIO_PINGROUP(pin150),
2613 GPIO_PINGROUP(pin151),
2614 GPIO_PINGROUP(pin152),
2615 GPIO_PINGROUP(smi_2_chips_pins),
2616 GPIO_PINGROUP(pin54),
2617 GPIO_PINGROUP(pin55),
2618 GPIO_PINGROUP(pin56),
2619 GPIO_PINGROUP(pin57),
2620 GPIO_PINGROUP(pin58),
2621 GPIO_PINGROUP(pin59),
2622 GPIO_PINGROUP(pin60),
2623 GPIO_PINGROUP(pin61),
2624 GPIO_PINGROUP(pin62),
2625 GPIO_PINGROUP(pin63),
2626 GPIO_PINGROUP(pin_grp0),
2627 GPIO_PINGROUP(pin_grp1),
2628 GPIO_PINGROUP(pin_grp2),
2629 GPIO_PINGROUP(pin_grp3),
2630 GPIO_PINGROUP(pin_grp4),
2631 GPIO_PINGROUP(pin_grp5),
2632 GPIO_PINGROUP(pin_grp6),
2633 GPIO_PINGROUP(pin_grp7),
2634 GPIO_PINGROUP(pin_grp8),
2635 GPIO_PINGROUP(nand_16bit_pins),
2636 GPIO_PINGROUP(pin205),
2637 GPIO_PINGROUP(pin206),
2638 GPIO_PINGROUP(pin211),
2639 GPIO_PINGROUP(pin212),
2640 GPIO_PINGROUP(pin213),
2641 GPIO_PINGROUP(pin214),
2642 GPIO_PINGROUP(pin215),
2643 GPIO_PINGROUP(pin216),
2644 GPIO_PINGROUP(pin217),
2645 GPIO_PINGROUP(pin218),
2646 GPIO_PINGROUP(pin219),
2647 GPIO_PINGROUP(pin220),
2648 GPIO_PINGROUP(pin221),
2649 GPIO_PINGROUP(pin222),
2650 GPIO_PINGROUP(pin223),
2651 GPIO_PINGROUP(pin224),
2652 GPIO_PINGROUP(pin225),
2653 GPIO_PINGROUP(pin226),
2654 GPIO_PINGROUP(pin227),
2655 GPIO_PINGROUP(pin228),
2656 GPIO_PINGROUP(pin229),
2657 GPIO_PINGROUP(pin230),
2658 GPIO_PINGROUP(pin231),
2659 GPIO_PINGROUP(pin232),
2660 GPIO_PINGROUP(pin233),
2661 GPIO_PINGROUP(pin234),
2662 GPIO_PINGROUP(pin235),
2663 GPIO_PINGROUP(pin236),
2664 GPIO_PINGROUP(pin237),
2665 GPIO_PINGROUP(pin238),
2666 GPIO_PINGROUP(pin239),
2667 GPIO_PINGROUP(pin240),
2668 GPIO_PINGROUP(pin241),
2669 GPIO_PINGROUP(pin242),
2670 GPIO_PINGROUP(pin243),
2671 GPIO_PINGROUP(pin244),
2672 GPIO_PINGROUP(pin245),
2673 GPIO_PINGROUP(keyboard_rowcol6_8_pins),
2674 GPIO_PINGROUP(uart0_pins),
2675 GPIO_PINGROUP(uart0_modem_pins),
2676 GPIO_PINGROUP(gpt0_tmr0_pins),
2677 GPIO_PINGROUP(gpt0_tmr1_pins),
2678 GPIO_PINGROUP(gpt1_tmr0_pins),
2679 GPIO_PINGROUP(gpt1_tmr1_pins),
2680 GPIO_PINGROUP(touch_xy_pins),
2681 };
2682
2421 static struct spear_pinctrl_machdata spear1310_machdata = { 2683 static struct spear_pinctrl_machdata spear1310_machdata = {
2422 .pins = spear1310_pins, 2684 .pins = spear1310_pins,
2423 .npins = ARRAY_SIZE(spear1310_pins), 2685 .npins = ARRAY_SIZE(spear1310_pins),
2424 .groups = spear1310_pingroups, 2686 .groups = spear1310_pingroups,
2425 .ngroups = ARRAY_SIZE(spear1310_pingroups), 2687 .ngroups = ARRAY_SIZE(spear1310_pingroups),
2426 .functions = spear1310_functions, 2688 .functions = spear1310_functions,
2427 .nfunctions = ARRAY_SIZE(spear1310_functions), 2689 .nfunctions = ARRAY_SIZE(spear1310_functions),
2690 .gpio_pingroups = spear1310_gpio_pingroup,
2691 .ngpio_pingroups = ARRAY_SIZE(spear1310_gpio_pingroup),
2428 .modes_supported = false, 2692 .modes_supported = false,
2429 }; 2693 };
2430 2694
2431 static struct of_device_id spear1310_pinctrl_of_match[] __devinitdata = { 2695 static struct of_device_id spear1310_pinctrl_of_match[] __devinitdata = {
2432 { 2696 {
2433 .compatible = "st,spear1310-pinmux", 2697 .compatible = "st,spear1310-pinmux",
2434 }, 2698 },
2435 {}, 2699 {},
2436 }; 2700 };
2437 2701
2438 static int __devinit spear1310_pinctrl_probe(struct platform_device *pdev) 2702 static int __devinit spear1310_pinctrl_probe(struct platform_device *pdev)
2439 { 2703 {
2440 return spear_pinctrl_probe(pdev, &spear1310_machdata); 2704 return spear_pinctrl_probe(pdev, &spear1310_machdata);
2441 } 2705 }
2442 2706
2443 static int __devexit spear1310_pinctrl_remove(struct platform_device *pdev) 2707 static int __devexit spear1310_pinctrl_remove(struct platform_device *pdev)
2444 { 2708 {
2445 return spear_pinctrl_remove(pdev); 2709 return spear_pinctrl_remove(pdev);
2446 } 2710 }
2447 2711
2448 static struct platform_driver spear1310_pinctrl_driver = { 2712 static struct platform_driver spear1310_pinctrl_driver = {
2449 .driver = { 2713 .driver = {
2450 .name = DRIVER_NAME, 2714 .name = DRIVER_NAME,
2451 .owner = THIS_MODULE, 2715 .owner = THIS_MODULE,
2452 .of_match_table = spear1310_pinctrl_of_match, 2716 .of_match_table = spear1310_pinctrl_of_match,
2453 }, 2717 },
2454 .probe = spear1310_pinctrl_probe, 2718 .probe = spear1310_pinctrl_probe,
2455 .remove = __devexit_p(spear1310_pinctrl_remove), 2719 .remove = __devexit_p(spear1310_pinctrl_remove),
2456 }; 2720 };
2457 2721
2458 static int __init spear1310_pinctrl_init(void) 2722 static int __init spear1310_pinctrl_init(void)
2459 { 2723 {
2460 return platform_driver_register(&spear1310_pinctrl_driver); 2724 return platform_driver_register(&spear1310_pinctrl_driver);
2461 } 2725 }
2462 arch_initcall(spear1310_pinctrl_init); 2726 arch_initcall(spear1310_pinctrl_init);
2463 2727
2464 static void __exit spear1310_pinctrl_exit(void) 2728 static void __exit spear1310_pinctrl_exit(void)
2465 { 2729 {
2466 platform_driver_unregister(&spear1310_pinctrl_driver); 2730 platform_driver_unregister(&spear1310_pinctrl_driver);
2467 } 2731 }
2468 module_exit(spear1310_pinctrl_exit); 2732 module_exit(spear1310_pinctrl_exit);
2469 2733
2470 MODULE_AUTHOR("Viresh Kumar <viresh.linux@gmail.com>"); 2734 MODULE_AUTHOR("Viresh Kumar <viresh.linux@gmail.com>");
2471 MODULE_DESCRIPTION("ST Microelectronics SPEAr1310 pinctrl driver"); 2735 MODULE_DESCRIPTION("ST Microelectronics SPEAr1310 pinctrl driver");
2472 MODULE_LICENSE("GPL v2"); 2736 MODULE_LICENSE("GPL v2");
2473 MODULE_DEVICE_TABLE(of, spear1310_pinctrl_of_match); 2737 MODULE_DEVICE_TABLE(of, spear1310_pinctrl_of_match);
2474 2738
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[] __devinitdata = { 649 static struct of_device_id spear300_pinctrl_of_match[] __devinitdata = {
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 spear3xx_machdata.gpio_pingroups = NULL;
665 spear3xx_machdata.ngpio_pingroups = 0;
664 666
665 spear3xx_machdata.modes_supported = true; 667 spear3xx_machdata.modes_supported = true;
666 spear3xx_machdata.pmx_modes = spear300_pmx_modes; 668 spear3xx_machdata.pmx_modes = spear300_pmx_modes;
667 spear3xx_machdata.npmx_modes = ARRAY_SIZE(spear300_pmx_modes); 669 spear3xx_machdata.npmx_modes = ARRAY_SIZE(spear300_pmx_modes);
668 670
669 pmx_init_addr(&spear3xx_machdata, PMX_CONFIG_REG); 671 pmx_init_addr(&spear3xx_machdata, PMX_CONFIG_REG);
670 672
671 ret = spear_pinctrl_probe(pdev, &spear3xx_machdata); 673 ret = spear_pinctrl_probe(pdev, &spear3xx_machdata);
672 if (ret) 674 if (ret)
673 return ret; 675 return ret;
674 676
675 return 0; 677 return 0;
676 } 678 }
677 679
678 static int __devexit spear300_pinctrl_remove(struct platform_device *pdev) 680 static int __devexit spear300_pinctrl_remove(struct platform_device *pdev)
679 { 681 {
680 return spear_pinctrl_remove(pdev); 682 return spear_pinctrl_remove(pdev);
681 } 683 }
682 684
683 static struct platform_driver spear300_pinctrl_driver = { 685 static struct platform_driver spear300_pinctrl_driver = {
684 .driver = { 686 .driver = {
685 .name = DRIVER_NAME, 687 .name = DRIVER_NAME,
686 .owner = THIS_MODULE, 688 .owner = THIS_MODULE,
687 .of_match_table = spear300_pinctrl_of_match, 689 .of_match_table = spear300_pinctrl_of_match,
688 }, 690 },
689 .probe = spear300_pinctrl_probe, 691 .probe = spear300_pinctrl_probe,
690 .remove = __devexit_p(spear300_pinctrl_remove), 692 .remove = __devexit_p(spear300_pinctrl_remove),
691 }; 693 };
692 694
693 static int __init spear300_pinctrl_init(void) 695 static int __init spear300_pinctrl_init(void)
694 { 696 {
695 return platform_driver_register(&spear300_pinctrl_driver); 697 return platform_driver_register(&spear300_pinctrl_driver);
696 } 698 }
697 arch_initcall(spear300_pinctrl_init); 699 arch_initcall(spear300_pinctrl_init);
698 700
699 static void __exit spear300_pinctrl_exit(void) 701 static void __exit spear300_pinctrl_exit(void)
700 { 702 {
701 platform_driver_unregister(&spear300_pinctrl_driver); 703 platform_driver_unregister(&spear300_pinctrl_driver);
702 } 704 }
703 module_exit(spear300_pinctrl_exit); 705 module_exit(spear300_pinctrl_exit);
704 706
705 MODULE_AUTHOR("Viresh Kumar <viresh.linux@gmail.com>"); 707 MODULE_AUTHOR("Viresh Kumar <viresh.linux@gmail.com>");
706 MODULE_DESCRIPTION("ST Microelectronics SPEAr300 pinctrl driver"); 708 MODULE_DESCRIPTION("ST Microelectronics SPEAr300 pinctrl driver");
707 MODULE_LICENSE("GPL v2"); 709 MODULE_LICENSE("GPL v2");
708 MODULE_DEVICE_TABLE(of, spear300_pinctrl_of_match); 710 MODULE_DEVICE_TABLE(of, spear300_pinctrl_of_match);
709 711
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[] __devinitdata = { 374 static struct of_device_id spear310_pinctrl_of_match[] __devinitdata = {
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 pmx_init_gpio_pingroup_addr(spear3xx_machdata.gpio_pingroups,
392 spear3xx_machdata.ngpio_pingroups, PMX_CONFIG_REG);
391 393
392 spear3xx_machdata.modes_supported = false; 394 spear3xx_machdata.modes_supported = false;
393 395
394 ret = spear_pinctrl_probe(pdev, &spear3xx_machdata); 396 ret = spear_pinctrl_probe(pdev, &spear3xx_machdata);
395 if (ret) 397 if (ret)
396 return ret; 398 return ret;
397 399
398 return 0; 400 return 0;
399 } 401 }
400 402
401 static int __devexit spear310_pinctrl_remove(struct platform_device *pdev) 403 static int __devexit spear310_pinctrl_remove(struct platform_device *pdev)
402 { 404 {
403 return spear_pinctrl_remove(pdev); 405 return spear_pinctrl_remove(pdev);
404 } 406 }
405 407
406 static struct platform_driver spear310_pinctrl_driver = { 408 static struct platform_driver spear310_pinctrl_driver = {
407 .driver = { 409 .driver = {
408 .name = DRIVER_NAME, 410 .name = DRIVER_NAME,
409 .owner = THIS_MODULE, 411 .owner = THIS_MODULE,
410 .of_match_table = spear310_pinctrl_of_match, 412 .of_match_table = spear310_pinctrl_of_match,
411 }, 413 },
412 .probe = spear310_pinctrl_probe, 414 .probe = spear310_pinctrl_probe,
413 .remove = __devexit_p(spear310_pinctrl_remove), 415 .remove = __devexit_p(spear310_pinctrl_remove),
414 }; 416 };
415 417
416 static int __init spear310_pinctrl_init(void) 418 static int __init spear310_pinctrl_init(void)
417 { 419 {
418 return platform_driver_register(&spear310_pinctrl_driver); 420 return platform_driver_register(&spear310_pinctrl_driver);
419 } 421 }
420 arch_initcall(spear310_pinctrl_init); 422 arch_initcall(spear310_pinctrl_init);
421 423
422 static void __exit spear310_pinctrl_exit(void) 424 static void __exit spear310_pinctrl_exit(void)
423 { 425 {
424 platform_driver_unregister(&spear310_pinctrl_driver); 426 platform_driver_unregister(&spear310_pinctrl_driver);
425 } 427 }
426 module_exit(spear310_pinctrl_exit); 428 module_exit(spear310_pinctrl_exit);
427 429
428 MODULE_AUTHOR("Viresh Kumar <viresh.linux@gmail.com>"); 430 MODULE_AUTHOR("Viresh Kumar <viresh.linux@gmail.com>");
429 MODULE_DESCRIPTION("ST Microelectronics SPEAr310 pinctrl driver"); 431 MODULE_DESCRIPTION("ST Microelectronics SPEAr310 pinctrl driver");
430 MODULE_LICENSE("GPL v2"); 432 MODULE_LICENSE("GPL v2");
431 MODULE_DEVICE_TABLE(of, SPEAr310_pinctrl_of_match); 433 MODULE_DEVICE_TABLE(of, SPEAr310_pinctrl_of_match);
432 434
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[] __devinitdata = { 3413 static struct of_device_id spear320_pinctrl_of_match[] __devinitdata = {
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 pmx_init_gpio_pingroup_addr(spear3xx_machdata.gpio_pingroups,
3435 spear3xx_machdata.ngpio_pingroups, PMX_CONFIG_REG);
3434 3436
3435 ret = spear_pinctrl_probe(pdev, &spear3xx_machdata); 3437 ret = spear_pinctrl_probe(pdev, &spear3xx_machdata);
3436 if (ret) 3438 if (ret)
3437 return ret; 3439 return ret;
3438 3440
3439 return 0; 3441 return 0;
3440 } 3442 }
3441 3443
3442 static int __devexit spear320_pinctrl_remove(struct platform_device *pdev) 3444 static int __devexit spear320_pinctrl_remove(struct platform_device *pdev)
3443 { 3445 {
3444 return spear_pinctrl_remove(pdev); 3446 return spear_pinctrl_remove(pdev);
3445 } 3447 }
3446 3448
3447 static struct platform_driver spear320_pinctrl_driver = { 3449 static struct platform_driver spear320_pinctrl_driver = {
3448 .driver = { 3450 .driver = {
3449 .name = DRIVER_NAME, 3451 .name = DRIVER_NAME,
3450 .owner = THIS_MODULE, 3452 .owner = THIS_MODULE,
3451 .of_match_table = spear320_pinctrl_of_match, 3453 .of_match_table = spear320_pinctrl_of_match,
3452 }, 3454 },
3453 .probe = spear320_pinctrl_probe, 3455 .probe = spear320_pinctrl_probe,
3454 .remove = __devexit_p(spear320_pinctrl_remove), 3456 .remove = __devexit_p(spear320_pinctrl_remove),
3455 }; 3457 };
3456 3458
3457 static int __init spear320_pinctrl_init(void) 3459 static int __init spear320_pinctrl_init(void)
3458 { 3460 {
3459 return platform_driver_register(&spear320_pinctrl_driver); 3461 return platform_driver_register(&spear320_pinctrl_driver);
3460 } 3462 }
3461 arch_initcall(spear320_pinctrl_init); 3463 arch_initcall(spear320_pinctrl_init);
3462 3464
3463 static void __exit spear320_pinctrl_exit(void) 3465 static void __exit spear320_pinctrl_exit(void)
3464 { 3466 {
3465 platform_driver_unregister(&spear320_pinctrl_driver); 3467 platform_driver_unregister(&spear320_pinctrl_driver);
3466 } 3468 }
3467 module_exit(spear320_pinctrl_exit); 3469 module_exit(spear320_pinctrl_exit);
3468 3470
3469 MODULE_AUTHOR("Viresh Kumar <viresh.linux@gmail.com>"); 3471 MODULE_AUTHOR("Viresh Kumar <viresh.linux@gmail.com>");
3470 MODULE_DESCRIPTION("ST Microelectronics SPEAr320 pinctrl driver"); 3472 MODULE_DESCRIPTION("ST Microelectronics SPEAr320 pinctrl driver");
3471 MODULE_LICENSE("GPL v2"); 3473 MODULE_LICENSE("GPL v2");
3472 MODULE_DEVICE_TABLE(of, spear320_pinctrl_of_match); 3474 MODULE_DEVICE_TABLE(of, spear320_pinctrl_of_match);
3473 3475
drivers/pinctrl/spear/pinctrl-spear3xx.c
1 /* 1 /*
2 * Driver for the ST Microelectronics SPEAr3xx pinmux 2 * Driver for the ST Microelectronics SPEAr3xx 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/pinctrl/pinctrl.h> 12 #include <linux/pinctrl/pinctrl.h>
13 13
14 #include "pinctrl-spear3xx.h" 14 #include "pinctrl-spear3xx.h"
15 15
16 /* pins */ 16 /* pins */
17 static const struct pinctrl_pin_desc spear3xx_pins[] = { 17 static const struct pinctrl_pin_desc spear3xx_pins[] = {
18 SPEAR_PIN_0_TO_101, 18 SPEAR_PIN_0_TO_101,
19 }; 19 };
20 20
21 /* firda_pins */ 21 /* firda_pins */
22 static const unsigned firda_pins[] = { 0, 1 }; 22 static const unsigned firda_pins[] = { 0, 1 };
23 static struct spear_muxreg firda_muxreg[] = { 23 static struct spear_muxreg firda_muxreg[] = {
24 { 24 {
25 .reg = -1, 25 .reg = -1,
26 .mask = PMX_FIRDA_MASK, 26 .mask = PMX_FIRDA_MASK,
27 .val = PMX_FIRDA_MASK, 27 .val = PMX_FIRDA_MASK,
28 }, 28 },
29 }; 29 };
30 30
31 static struct spear_modemux firda_modemux[] = { 31 static struct spear_modemux firda_modemux[] = {
32 { 32 {
33 .modes = ~0, 33 .modes = ~0,
34 .muxregs = firda_muxreg, 34 .muxregs = firda_muxreg,
35 .nmuxregs = ARRAY_SIZE(firda_muxreg), 35 .nmuxregs = ARRAY_SIZE(firda_muxreg),
36 }, 36 },
37 }; 37 };
38 38
39 struct spear_pingroup spear3xx_firda_pingroup = { 39 struct spear_pingroup spear3xx_firda_pingroup = {
40 .name = "firda_grp", 40 .name = "firda_grp",
41 .pins = firda_pins, 41 .pins = firda_pins,
42 .npins = ARRAY_SIZE(firda_pins), 42 .npins = ARRAY_SIZE(firda_pins),
43 .modemuxs = firda_modemux, 43 .modemuxs = firda_modemux,
44 .nmodemuxs = ARRAY_SIZE(firda_modemux), 44 .nmodemuxs = ARRAY_SIZE(firda_modemux),
45 }; 45 };
46 46
47 static const char *const firda_grps[] = { "firda_grp" }; 47 static const char *const firda_grps[] = { "firda_grp" };
48 struct spear_function spear3xx_firda_function = { 48 struct spear_function spear3xx_firda_function = {
49 .name = "firda", 49 .name = "firda",
50 .groups = firda_grps, 50 .groups = firda_grps,
51 .ngroups = ARRAY_SIZE(firda_grps), 51 .ngroups = ARRAY_SIZE(firda_grps),
52 }; 52 };
53 53
54 /* i2c_pins */ 54 /* i2c_pins */
55 static const unsigned i2c_pins[] = { 4, 5 }; 55 static const unsigned i2c_pins[] = { 4, 5 };
56 static struct spear_muxreg i2c_muxreg[] = { 56 static struct spear_muxreg i2c_muxreg[] = {
57 { 57 {
58 .reg = -1, 58 .reg = -1,
59 .mask = PMX_I2C_MASK, 59 .mask = PMX_I2C_MASK,
60 .val = PMX_I2C_MASK, 60 .val = PMX_I2C_MASK,
61 }, 61 },
62 }; 62 };
63 63
64 static struct spear_modemux i2c_modemux[] = { 64 static struct spear_modemux i2c_modemux[] = {
65 { 65 {
66 .modes = ~0, 66 .modes = ~0,
67 .muxregs = i2c_muxreg, 67 .muxregs = i2c_muxreg,
68 .nmuxregs = ARRAY_SIZE(i2c_muxreg), 68 .nmuxregs = ARRAY_SIZE(i2c_muxreg),
69 }, 69 },
70 }; 70 };
71 71
72 struct spear_pingroup spear3xx_i2c_pingroup = { 72 struct spear_pingroup spear3xx_i2c_pingroup = {
73 .name = "i2c0_grp", 73 .name = "i2c0_grp",
74 .pins = i2c_pins, 74 .pins = i2c_pins,
75 .npins = ARRAY_SIZE(i2c_pins), 75 .npins = ARRAY_SIZE(i2c_pins),
76 .modemuxs = i2c_modemux, 76 .modemuxs = i2c_modemux,
77 .nmodemuxs = ARRAY_SIZE(i2c_modemux), 77 .nmodemuxs = ARRAY_SIZE(i2c_modemux),
78 }; 78 };
79 79
80 static const char *const i2c_grps[] = { "i2c0_grp" }; 80 static const char *const i2c_grps[] = { "i2c0_grp" };
81 struct spear_function spear3xx_i2c_function = { 81 struct spear_function spear3xx_i2c_function = {
82 .name = "i2c0", 82 .name = "i2c0",
83 .groups = i2c_grps, 83 .groups = i2c_grps,
84 .ngroups = ARRAY_SIZE(i2c_grps), 84 .ngroups = ARRAY_SIZE(i2c_grps),
85 }; 85 };
86 86
87 /* ssp_cs_pins */ 87 /* ssp_cs_pins */
88 static const unsigned ssp_cs_pins[] = { 34, 35, 36 }; 88 static const unsigned ssp_cs_pins[] = { 34, 35, 36 };
89 static struct spear_muxreg ssp_cs_muxreg[] = { 89 static struct spear_muxreg ssp_cs_muxreg[] = {
90 { 90 {
91 .reg = -1, 91 .reg = -1,
92 .mask = PMX_SSP_CS_MASK, 92 .mask = PMX_SSP_CS_MASK,
93 .val = PMX_SSP_CS_MASK, 93 .val = PMX_SSP_CS_MASK,
94 }, 94 },
95 }; 95 };
96 96
97 static struct spear_modemux ssp_cs_modemux[] = { 97 static struct spear_modemux ssp_cs_modemux[] = {
98 { 98 {
99 .modes = ~0, 99 .modes = ~0,
100 .muxregs = ssp_cs_muxreg, 100 .muxregs = ssp_cs_muxreg,
101 .nmuxregs = ARRAY_SIZE(ssp_cs_muxreg), 101 .nmuxregs = ARRAY_SIZE(ssp_cs_muxreg),
102 }, 102 },
103 }; 103 };
104 104
105 struct spear_pingroup spear3xx_ssp_cs_pingroup = { 105 struct spear_pingroup spear3xx_ssp_cs_pingroup = {
106 .name = "ssp_cs_grp", 106 .name = "ssp_cs_grp",
107 .pins = ssp_cs_pins, 107 .pins = ssp_cs_pins,
108 .npins = ARRAY_SIZE(ssp_cs_pins), 108 .npins = ARRAY_SIZE(ssp_cs_pins),
109 .modemuxs = ssp_cs_modemux, 109 .modemuxs = ssp_cs_modemux,
110 .nmodemuxs = ARRAY_SIZE(ssp_cs_modemux), 110 .nmodemuxs = ARRAY_SIZE(ssp_cs_modemux),
111 }; 111 };
112 112
113 static const char *const ssp_cs_grps[] = { "ssp_cs_grp" }; 113 static const char *const ssp_cs_grps[] = { "ssp_cs_grp" };
114 struct spear_function spear3xx_ssp_cs_function = { 114 struct spear_function spear3xx_ssp_cs_function = {
115 .name = "ssp_cs", 115 .name = "ssp_cs",
116 .groups = ssp_cs_grps, 116 .groups = ssp_cs_grps,
117 .ngroups = ARRAY_SIZE(ssp_cs_grps), 117 .ngroups = ARRAY_SIZE(ssp_cs_grps),
118 }; 118 };
119 119
120 /* ssp_pins */ 120 /* ssp_pins */
121 static const unsigned ssp_pins[] = { 6, 7, 8, 9 }; 121 static const unsigned ssp_pins[] = { 6, 7, 8, 9 };
122 static struct spear_muxreg ssp_muxreg[] = { 122 static struct spear_muxreg ssp_muxreg[] = {
123 { 123 {
124 .reg = -1, 124 .reg = -1,
125 .mask = PMX_SSP_MASK, 125 .mask = PMX_SSP_MASK,
126 .val = PMX_SSP_MASK, 126 .val = PMX_SSP_MASK,
127 }, 127 },
128 }; 128 };
129 129
130 static struct spear_modemux ssp_modemux[] = { 130 static struct spear_modemux ssp_modemux[] = {
131 { 131 {
132 .modes = ~0, 132 .modes = ~0,
133 .muxregs = ssp_muxreg, 133 .muxregs = ssp_muxreg,
134 .nmuxregs = ARRAY_SIZE(ssp_muxreg), 134 .nmuxregs = ARRAY_SIZE(ssp_muxreg),
135 }, 135 },
136 }; 136 };
137 137
138 struct spear_pingroup spear3xx_ssp_pingroup = { 138 struct spear_pingroup spear3xx_ssp_pingroup = {
139 .name = "ssp0_grp", 139 .name = "ssp0_grp",
140 .pins = ssp_pins, 140 .pins = ssp_pins,
141 .npins = ARRAY_SIZE(ssp_pins), 141 .npins = ARRAY_SIZE(ssp_pins),
142 .modemuxs = ssp_modemux, 142 .modemuxs = ssp_modemux,
143 .nmodemuxs = ARRAY_SIZE(ssp_modemux), 143 .nmodemuxs = ARRAY_SIZE(ssp_modemux),
144 }; 144 };
145 145
146 static const char *const ssp_grps[] = { "ssp0_grp" }; 146 static const char *const ssp_grps[] = { "ssp0_grp" };
147 struct spear_function spear3xx_ssp_function = { 147 struct spear_function spear3xx_ssp_function = {
148 .name = "ssp0", 148 .name = "ssp0",
149 .groups = ssp_grps, 149 .groups = ssp_grps,
150 .ngroups = ARRAY_SIZE(ssp_grps), 150 .ngroups = ARRAY_SIZE(ssp_grps),
151 }; 151 };
152 152
153 /* mii_pins */ 153 /* mii_pins */
154 static const unsigned mii_pins[] = { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 154 static const unsigned mii_pins[] = { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
155 21, 22, 23, 24, 25, 26, 27 }; 155 21, 22, 23, 24, 25, 26, 27 };
156 static struct spear_muxreg mii_muxreg[] = { 156 static struct spear_muxreg mii_muxreg[] = {
157 { 157 {
158 .reg = -1, 158 .reg = -1,
159 .mask = PMX_MII_MASK, 159 .mask = PMX_MII_MASK,
160 .val = PMX_MII_MASK, 160 .val = PMX_MII_MASK,
161 }, 161 },
162 }; 162 };
163 163
164 static struct spear_modemux mii_modemux[] = { 164 static struct spear_modemux mii_modemux[] = {
165 { 165 {
166 .modes = ~0, 166 .modes = ~0,
167 .muxregs = mii_muxreg, 167 .muxregs = mii_muxreg,
168 .nmuxregs = ARRAY_SIZE(mii_muxreg), 168 .nmuxregs = ARRAY_SIZE(mii_muxreg),
169 }, 169 },
170 }; 170 };
171 171
172 struct spear_pingroup spear3xx_mii_pingroup = { 172 struct spear_pingroup spear3xx_mii_pingroup = {
173 .name = "mii0_grp", 173 .name = "mii0_grp",
174 .pins = mii_pins, 174 .pins = mii_pins,
175 .npins = ARRAY_SIZE(mii_pins), 175 .npins = ARRAY_SIZE(mii_pins),
176 .modemuxs = mii_modemux, 176 .modemuxs = mii_modemux,
177 .nmodemuxs = ARRAY_SIZE(mii_modemux), 177 .nmodemuxs = ARRAY_SIZE(mii_modemux),
178 }; 178 };
179 179
180 static const char *const mii_grps[] = { "mii0_grp" }; 180 static const char *const mii_grps[] = { "mii0_grp" };
181 struct spear_function spear3xx_mii_function = { 181 struct spear_function spear3xx_mii_function = {
182 .name = "mii0", 182 .name = "mii0",
183 .groups = mii_grps, 183 .groups = mii_grps,
184 .ngroups = ARRAY_SIZE(mii_grps), 184 .ngroups = ARRAY_SIZE(mii_grps),
185 }; 185 };
186 186
187 /* gpio0_pin0_pins */ 187 /* gpio0_pin0_pins */
188 static const unsigned gpio0_pin0_pins[] = { 28 }; 188 static const unsigned gpio0_pin0_pins[] = { 28 };
189 static struct spear_muxreg gpio0_pin0_muxreg[] = { 189 static struct spear_muxreg gpio0_pin0_muxreg[] = {
190 { 190 {
191 .reg = -1, 191 .reg = -1,
192 .mask = PMX_GPIO_PIN0_MASK, 192 .mask = PMX_GPIO_PIN0_MASK,
193 .val = PMX_GPIO_PIN0_MASK, 193 .val = PMX_GPIO_PIN0_MASK,
194 }, 194 },
195 }; 195 };
196 196
197 static struct spear_modemux gpio0_pin0_modemux[] = { 197 static struct spear_modemux gpio0_pin0_modemux[] = {
198 { 198 {
199 .modes = ~0, 199 .modes = ~0,
200 .muxregs = gpio0_pin0_muxreg, 200 .muxregs = gpio0_pin0_muxreg,
201 .nmuxregs = ARRAY_SIZE(gpio0_pin0_muxreg), 201 .nmuxregs = ARRAY_SIZE(gpio0_pin0_muxreg),
202 }, 202 },
203 }; 203 };
204 204
205 struct spear_pingroup spear3xx_gpio0_pin0_pingroup = { 205 struct spear_pingroup spear3xx_gpio0_pin0_pingroup = {
206 .name = "gpio0_pin0_grp", 206 .name = "gpio0_pin0_grp",
207 .pins = gpio0_pin0_pins, 207 .pins = gpio0_pin0_pins,
208 .npins = ARRAY_SIZE(gpio0_pin0_pins), 208 .npins = ARRAY_SIZE(gpio0_pin0_pins),
209 .modemuxs = gpio0_pin0_modemux, 209 .modemuxs = gpio0_pin0_modemux,
210 .nmodemuxs = ARRAY_SIZE(gpio0_pin0_modemux), 210 .nmodemuxs = ARRAY_SIZE(gpio0_pin0_modemux),
211 }; 211 };
212 212
213 /* gpio0_pin1_pins */ 213 /* gpio0_pin1_pins */
214 static const unsigned gpio0_pin1_pins[] = { 29 }; 214 static const unsigned gpio0_pin1_pins[] = { 29 };
215 static struct spear_muxreg gpio0_pin1_muxreg[] = { 215 static struct spear_muxreg gpio0_pin1_muxreg[] = {
216 { 216 {
217 .reg = -1, 217 .reg = -1,
218 .mask = PMX_GPIO_PIN1_MASK, 218 .mask = PMX_GPIO_PIN1_MASK,
219 .val = PMX_GPIO_PIN1_MASK, 219 .val = PMX_GPIO_PIN1_MASK,
220 }, 220 },
221 }; 221 };
222 222
223 static struct spear_modemux gpio0_pin1_modemux[] = { 223 static struct spear_modemux gpio0_pin1_modemux[] = {
224 { 224 {
225 .modes = ~0, 225 .modes = ~0,
226 .muxregs = gpio0_pin1_muxreg, 226 .muxregs = gpio0_pin1_muxreg,
227 .nmuxregs = ARRAY_SIZE(gpio0_pin1_muxreg), 227 .nmuxregs = ARRAY_SIZE(gpio0_pin1_muxreg),
228 }, 228 },
229 }; 229 };
230 230
231 struct spear_pingroup spear3xx_gpio0_pin1_pingroup = { 231 struct spear_pingroup spear3xx_gpio0_pin1_pingroup = {
232 .name = "gpio0_pin1_grp", 232 .name = "gpio0_pin1_grp",
233 .pins = gpio0_pin1_pins, 233 .pins = gpio0_pin1_pins,
234 .npins = ARRAY_SIZE(gpio0_pin1_pins), 234 .npins = ARRAY_SIZE(gpio0_pin1_pins),
235 .modemuxs = gpio0_pin1_modemux, 235 .modemuxs = gpio0_pin1_modemux,
236 .nmodemuxs = ARRAY_SIZE(gpio0_pin1_modemux), 236 .nmodemuxs = ARRAY_SIZE(gpio0_pin1_modemux),
237 }; 237 };
238 238
239 /* gpio0_pin2_pins */ 239 /* gpio0_pin2_pins */
240 static const unsigned gpio0_pin2_pins[] = { 30 }; 240 static const unsigned gpio0_pin2_pins[] = { 30 };
241 static struct spear_muxreg gpio0_pin2_muxreg[] = { 241 static struct spear_muxreg gpio0_pin2_muxreg[] = {
242 { 242 {
243 .reg = -1, 243 .reg = -1,
244 .mask = PMX_GPIO_PIN2_MASK, 244 .mask = PMX_GPIO_PIN2_MASK,
245 .val = PMX_GPIO_PIN2_MASK, 245 .val = PMX_GPIO_PIN2_MASK,
246 }, 246 },
247 }; 247 };
248 248
249 static struct spear_modemux gpio0_pin2_modemux[] = { 249 static struct spear_modemux gpio0_pin2_modemux[] = {
250 { 250 {
251 .modes = ~0, 251 .modes = ~0,
252 .muxregs = gpio0_pin2_muxreg, 252 .muxregs = gpio0_pin2_muxreg,
253 .nmuxregs = ARRAY_SIZE(gpio0_pin2_muxreg), 253 .nmuxregs = ARRAY_SIZE(gpio0_pin2_muxreg),
254 }, 254 },
255 }; 255 };
256 256
257 struct spear_pingroup spear3xx_gpio0_pin2_pingroup = { 257 struct spear_pingroup spear3xx_gpio0_pin2_pingroup = {
258 .name = "gpio0_pin2_grp", 258 .name = "gpio0_pin2_grp",
259 .pins = gpio0_pin2_pins, 259 .pins = gpio0_pin2_pins,
260 .npins = ARRAY_SIZE(gpio0_pin2_pins), 260 .npins = ARRAY_SIZE(gpio0_pin2_pins),
261 .modemuxs = gpio0_pin2_modemux, 261 .modemuxs = gpio0_pin2_modemux,
262 .nmodemuxs = ARRAY_SIZE(gpio0_pin2_modemux), 262 .nmodemuxs = ARRAY_SIZE(gpio0_pin2_modemux),
263 }; 263 };
264 264
265 /* gpio0_pin3_pins */ 265 /* gpio0_pin3_pins */
266 static const unsigned gpio0_pin3_pins[] = { 31 }; 266 static const unsigned gpio0_pin3_pins[] = { 31 };
267 static struct spear_muxreg gpio0_pin3_muxreg[] = { 267 static struct spear_muxreg gpio0_pin3_muxreg[] = {
268 { 268 {
269 .reg = -1, 269 .reg = -1,
270 .mask = PMX_GPIO_PIN3_MASK, 270 .mask = PMX_GPIO_PIN3_MASK,
271 .val = PMX_GPIO_PIN3_MASK, 271 .val = PMX_GPIO_PIN3_MASK,
272 }, 272 },
273 }; 273 };
274 274
275 static struct spear_modemux gpio0_pin3_modemux[] = { 275 static struct spear_modemux gpio0_pin3_modemux[] = {
276 { 276 {
277 .modes = ~0, 277 .modes = ~0,
278 .muxregs = gpio0_pin3_muxreg, 278 .muxregs = gpio0_pin3_muxreg,
279 .nmuxregs = ARRAY_SIZE(gpio0_pin3_muxreg), 279 .nmuxregs = ARRAY_SIZE(gpio0_pin3_muxreg),
280 }, 280 },
281 }; 281 };
282 282
283 struct spear_pingroup spear3xx_gpio0_pin3_pingroup = { 283 struct spear_pingroup spear3xx_gpio0_pin3_pingroup = {
284 .name = "gpio0_pin3_grp", 284 .name = "gpio0_pin3_grp",
285 .pins = gpio0_pin3_pins, 285 .pins = gpio0_pin3_pins,
286 .npins = ARRAY_SIZE(gpio0_pin3_pins), 286 .npins = ARRAY_SIZE(gpio0_pin3_pins),
287 .modemuxs = gpio0_pin3_modemux, 287 .modemuxs = gpio0_pin3_modemux,
288 .nmodemuxs = ARRAY_SIZE(gpio0_pin3_modemux), 288 .nmodemuxs = ARRAY_SIZE(gpio0_pin3_modemux),
289 }; 289 };
290 290
291 /* gpio0_pin4_pins */ 291 /* gpio0_pin4_pins */
292 static const unsigned gpio0_pin4_pins[] = { 32 }; 292 static const unsigned gpio0_pin4_pins[] = { 32 };
293 static struct spear_muxreg gpio0_pin4_muxreg[] = { 293 static struct spear_muxreg gpio0_pin4_muxreg[] = {
294 { 294 {
295 .reg = -1, 295 .reg = -1,
296 .mask = PMX_GPIO_PIN4_MASK, 296 .mask = PMX_GPIO_PIN4_MASK,
297 .val = PMX_GPIO_PIN4_MASK, 297 .val = PMX_GPIO_PIN4_MASK,
298 }, 298 },
299 }; 299 };
300 300
301 static struct spear_modemux gpio0_pin4_modemux[] = { 301 static struct spear_modemux gpio0_pin4_modemux[] = {
302 { 302 {
303 .modes = ~0, 303 .modes = ~0,
304 .muxregs = gpio0_pin4_muxreg, 304 .muxregs = gpio0_pin4_muxreg,
305 .nmuxregs = ARRAY_SIZE(gpio0_pin4_muxreg), 305 .nmuxregs = ARRAY_SIZE(gpio0_pin4_muxreg),
306 }, 306 },
307 }; 307 };
308 308
309 struct spear_pingroup spear3xx_gpio0_pin4_pingroup = { 309 struct spear_pingroup spear3xx_gpio0_pin4_pingroup = {
310 .name = "gpio0_pin4_grp", 310 .name = "gpio0_pin4_grp",
311 .pins = gpio0_pin4_pins, 311 .pins = gpio0_pin4_pins,
312 .npins = ARRAY_SIZE(gpio0_pin4_pins), 312 .npins = ARRAY_SIZE(gpio0_pin4_pins),
313 .modemuxs = gpio0_pin4_modemux, 313 .modemuxs = gpio0_pin4_modemux,
314 .nmodemuxs = ARRAY_SIZE(gpio0_pin4_modemux), 314 .nmodemuxs = ARRAY_SIZE(gpio0_pin4_modemux),
315 }; 315 };
316 316
317 /* gpio0_pin5_pins */ 317 /* gpio0_pin5_pins */
318 static const unsigned gpio0_pin5_pins[] = { 33 }; 318 static const unsigned gpio0_pin5_pins[] = { 33 };
319 static struct spear_muxreg gpio0_pin5_muxreg[] = { 319 static struct spear_muxreg gpio0_pin5_muxreg[] = {
320 { 320 {
321 .reg = -1, 321 .reg = -1,
322 .mask = PMX_GPIO_PIN5_MASK, 322 .mask = PMX_GPIO_PIN5_MASK,
323 .val = PMX_GPIO_PIN5_MASK, 323 .val = PMX_GPIO_PIN5_MASK,
324 }, 324 },
325 }; 325 };
326 326
327 static struct spear_modemux gpio0_pin5_modemux[] = { 327 static struct spear_modemux gpio0_pin5_modemux[] = {
328 { 328 {
329 .modes = ~0, 329 .modes = ~0,
330 .muxregs = gpio0_pin5_muxreg, 330 .muxregs = gpio0_pin5_muxreg,
331 .nmuxregs = ARRAY_SIZE(gpio0_pin5_muxreg), 331 .nmuxregs = ARRAY_SIZE(gpio0_pin5_muxreg),
332 }, 332 },
333 }; 333 };
334 334
335 struct spear_pingroup spear3xx_gpio0_pin5_pingroup = { 335 struct spear_pingroup spear3xx_gpio0_pin5_pingroup = {
336 .name = "gpio0_pin5_grp", 336 .name = "gpio0_pin5_grp",
337 .pins = gpio0_pin5_pins, 337 .pins = gpio0_pin5_pins,
338 .npins = ARRAY_SIZE(gpio0_pin5_pins), 338 .npins = ARRAY_SIZE(gpio0_pin5_pins),
339 .modemuxs = gpio0_pin5_modemux, 339 .modemuxs = gpio0_pin5_modemux,
340 .nmodemuxs = ARRAY_SIZE(gpio0_pin5_modemux), 340 .nmodemuxs = ARRAY_SIZE(gpio0_pin5_modemux),
341 }; 341 };
342 342
343 static const char *const gpio0_grps[] = { "gpio0_pin0_grp", "gpio0_pin1_grp", 343 static const char *const gpio0_grps[] = { "gpio0_pin0_grp", "gpio0_pin1_grp",
344 "gpio0_pin2_grp", "gpio0_pin3_grp", "gpio0_pin4_grp", "gpio0_pin5_grp", 344 "gpio0_pin2_grp", "gpio0_pin3_grp", "gpio0_pin4_grp", "gpio0_pin5_grp",
345 }; 345 };
346 struct spear_function spear3xx_gpio0_function = { 346 struct spear_function spear3xx_gpio0_function = {
347 .name = "gpio0", 347 .name = "gpio0",
348 .groups = gpio0_grps, 348 .groups = gpio0_grps,
349 .ngroups = ARRAY_SIZE(gpio0_grps), 349 .ngroups = ARRAY_SIZE(gpio0_grps),
350 }; 350 };
351 351
352 /* uart0_ext_pins */ 352 /* uart0_ext_pins */
353 static const unsigned uart0_ext_pins[] = { 37, 38, 39, 40, 41, 42 }; 353 static const unsigned uart0_ext_pins[] = { 37, 38, 39, 40, 41, 42 };
354 static struct spear_muxreg uart0_ext_muxreg[] = { 354 static struct spear_muxreg uart0_ext_muxreg[] = {
355 { 355 {
356 .reg = -1, 356 .reg = -1,
357 .mask = PMX_UART0_MODEM_MASK, 357 .mask = PMX_UART0_MODEM_MASK,
358 .val = PMX_UART0_MODEM_MASK, 358 .val = PMX_UART0_MODEM_MASK,
359 }, 359 },
360 }; 360 };
361 361
362 static struct spear_modemux uart0_ext_modemux[] = { 362 static struct spear_modemux uart0_ext_modemux[] = {
363 { 363 {
364 .modes = ~0, 364 .modes = ~0,
365 .muxregs = uart0_ext_muxreg, 365 .muxregs = uart0_ext_muxreg,
366 .nmuxregs = ARRAY_SIZE(uart0_ext_muxreg), 366 .nmuxregs = ARRAY_SIZE(uart0_ext_muxreg),
367 }, 367 },
368 }; 368 };
369 369
370 struct spear_pingroup spear3xx_uart0_ext_pingroup = { 370 struct spear_pingroup spear3xx_uart0_ext_pingroup = {
371 .name = "uart0_ext_grp", 371 .name = "uart0_ext_grp",
372 .pins = uart0_ext_pins, 372 .pins = uart0_ext_pins,
373 .npins = ARRAY_SIZE(uart0_ext_pins), 373 .npins = ARRAY_SIZE(uart0_ext_pins),
374 .modemuxs = uart0_ext_modemux, 374 .modemuxs = uart0_ext_modemux,
375 .nmodemuxs = ARRAY_SIZE(uart0_ext_modemux), 375 .nmodemuxs = ARRAY_SIZE(uart0_ext_modemux),
376 }; 376 };
377 377
378 static const char *const uart0_ext_grps[] = { "uart0_ext_grp" }; 378 static const char *const uart0_ext_grps[] = { "uart0_ext_grp" };
379 struct spear_function spear3xx_uart0_ext_function = { 379 struct spear_function spear3xx_uart0_ext_function = {
380 .name = "uart0_ext", 380 .name = "uart0_ext",
381 .groups = uart0_ext_grps, 381 .groups = uart0_ext_grps,
382 .ngroups = ARRAY_SIZE(uart0_ext_grps), 382 .ngroups = ARRAY_SIZE(uart0_ext_grps),
383 }; 383 };
384 384
385 /* uart0_pins */ 385 /* uart0_pins */
386 static const unsigned uart0_pins[] = { 2, 3 }; 386 static const unsigned uart0_pins[] = { 2, 3 };
387 static struct spear_muxreg uart0_muxreg[] = { 387 static struct spear_muxreg uart0_muxreg[] = {
388 { 388 {
389 .reg = -1, 389 .reg = -1,
390 .mask = PMX_UART0_MASK, 390 .mask = PMX_UART0_MASK,
391 .val = PMX_UART0_MASK, 391 .val = PMX_UART0_MASK,
392 }, 392 },
393 }; 393 };
394 394
395 static struct spear_modemux uart0_modemux[] = { 395 static struct spear_modemux uart0_modemux[] = {
396 { 396 {
397 .modes = ~0, 397 .modes = ~0,
398 .muxregs = uart0_muxreg, 398 .muxregs = uart0_muxreg,
399 .nmuxregs = ARRAY_SIZE(uart0_muxreg), 399 .nmuxregs = ARRAY_SIZE(uart0_muxreg),
400 }, 400 },
401 }; 401 };
402 402
403 struct spear_pingroup spear3xx_uart0_pingroup = { 403 struct spear_pingroup spear3xx_uart0_pingroup = {
404 .name = "uart0_grp", 404 .name = "uart0_grp",
405 .pins = uart0_pins, 405 .pins = uart0_pins,
406 .npins = ARRAY_SIZE(uart0_pins), 406 .npins = ARRAY_SIZE(uart0_pins),
407 .modemuxs = uart0_modemux, 407 .modemuxs = uart0_modemux,
408 .nmodemuxs = ARRAY_SIZE(uart0_modemux), 408 .nmodemuxs = ARRAY_SIZE(uart0_modemux),
409 }; 409 };
410 410
411 static const char *const uart0_grps[] = { "uart0_grp" }; 411 static const char *const uart0_grps[] = { "uart0_grp" };
412 struct spear_function spear3xx_uart0_function = { 412 struct spear_function spear3xx_uart0_function = {
413 .name = "uart0", 413 .name = "uart0",
414 .groups = uart0_grps, 414 .groups = uart0_grps,
415 .ngroups = ARRAY_SIZE(uart0_grps), 415 .ngroups = ARRAY_SIZE(uart0_grps),
416 }; 416 };
417 417
418 /* timer_0_1_pins */ 418 /* timer_0_1_pins */
419 static const unsigned timer_0_1_pins[] = { 43, 44, 47, 48 }; 419 static const unsigned timer_0_1_pins[] = { 43, 44, 47, 48 };
420 static struct spear_muxreg timer_0_1_muxreg[] = { 420 static struct spear_muxreg timer_0_1_muxreg[] = {
421 { 421 {
422 .reg = -1, 422 .reg = -1,
423 .mask = PMX_TIMER_0_1_MASK, 423 .mask = PMX_TIMER_0_1_MASK,
424 .val = PMX_TIMER_0_1_MASK, 424 .val = PMX_TIMER_0_1_MASK,
425 }, 425 },
426 }; 426 };
427 427
428 static struct spear_modemux timer_0_1_modemux[] = { 428 static struct spear_modemux timer_0_1_modemux[] = {
429 { 429 {
430 .modes = ~0, 430 .modes = ~0,
431 .muxregs = timer_0_1_muxreg, 431 .muxregs = timer_0_1_muxreg,
432 .nmuxregs = ARRAY_SIZE(timer_0_1_muxreg), 432 .nmuxregs = ARRAY_SIZE(timer_0_1_muxreg),
433 }, 433 },
434 }; 434 };
435 435
436 struct spear_pingroup spear3xx_timer_0_1_pingroup = { 436 struct spear_pingroup spear3xx_timer_0_1_pingroup = {
437 .name = "timer_0_1_grp", 437 .name = "timer_0_1_grp",
438 .pins = timer_0_1_pins, 438 .pins = timer_0_1_pins,
439 .npins = ARRAY_SIZE(timer_0_1_pins), 439 .npins = ARRAY_SIZE(timer_0_1_pins),
440 .modemuxs = timer_0_1_modemux, 440 .modemuxs = timer_0_1_modemux,
441 .nmodemuxs = ARRAY_SIZE(timer_0_1_modemux), 441 .nmodemuxs = ARRAY_SIZE(timer_0_1_modemux),
442 }; 442 };
443 443
444 static const char *const timer_0_1_grps[] = { "timer_0_1_grp" }; 444 static const char *const timer_0_1_grps[] = { "timer_0_1_grp" };
445 struct spear_function spear3xx_timer_0_1_function = { 445 struct spear_function spear3xx_timer_0_1_function = {
446 .name = "timer_0_1", 446 .name = "timer_0_1",
447 .groups = timer_0_1_grps, 447 .groups = timer_0_1_grps,
448 .ngroups = ARRAY_SIZE(timer_0_1_grps), 448 .ngroups = ARRAY_SIZE(timer_0_1_grps),
449 }; 449 };
450 450
451 /* timer_2_3_pins */ 451 /* timer_2_3_pins */
452 static const unsigned timer_2_3_pins[] = { 45, 46, 49, 50 }; 452 static const unsigned timer_2_3_pins[] = { 45, 46, 49, 50 };
453 static struct spear_muxreg timer_2_3_muxreg[] = { 453 static struct spear_muxreg timer_2_3_muxreg[] = {
454 { 454 {
455 .reg = -1, 455 .reg = -1,
456 .mask = PMX_TIMER_2_3_MASK, 456 .mask = PMX_TIMER_2_3_MASK,
457 .val = PMX_TIMER_2_3_MASK, 457 .val = PMX_TIMER_2_3_MASK,
458 }, 458 },
459 }; 459 };
460 460
461 static struct spear_modemux timer_2_3_modemux[] = { 461 static struct spear_modemux timer_2_3_modemux[] = {
462 { 462 {
463 .modes = ~0, 463 .modes = ~0,
464 .muxregs = timer_2_3_muxreg, 464 .muxregs = timer_2_3_muxreg,
465 .nmuxregs = ARRAY_SIZE(timer_2_3_muxreg), 465 .nmuxregs = ARRAY_SIZE(timer_2_3_muxreg),
466 }, 466 },
467 }; 467 };
468 468
469 struct spear_pingroup spear3xx_timer_2_3_pingroup = { 469 struct spear_pingroup spear3xx_timer_2_3_pingroup = {
470 .name = "timer_2_3_grp", 470 .name = "timer_2_3_grp",
471 .pins = timer_2_3_pins, 471 .pins = timer_2_3_pins,
472 .npins = ARRAY_SIZE(timer_2_3_pins), 472 .npins = ARRAY_SIZE(timer_2_3_pins),
473 .modemuxs = timer_2_3_modemux, 473 .modemuxs = timer_2_3_modemux,
474 .nmodemuxs = ARRAY_SIZE(timer_2_3_modemux), 474 .nmodemuxs = ARRAY_SIZE(timer_2_3_modemux),
475 }; 475 };
476 476
477 static const char *const timer_2_3_grps[] = { "timer_2_3_grp" }; 477 static const char *const timer_2_3_grps[] = { "timer_2_3_grp" };
478 struct spear_function spear3xx_timer_2_3_function = { 478 struct spear_function spear3xx_timer_2_3_function = {
479 .name = "timer_2_3", 479 .name = "timer_2_3",
480 .groups = timer_2_3_grps, 480 .groups = timer_2_3_grps,
481 .ngroups = ARRAY_SIZE(timer_2_3_grps), 481 .ngroups = ARRAY_SIZE(timer_2_3_grps),
482 }; 482 };
483 483
484 /* Define muxreg arrays */
485 DEFINE_MUXREG(firda_pins, 0, PMX_FIRDA_MASK, 0);
486 DEFINE_MUXREG(i2c_pins, 0, PMX_I2C_MASK, 0);
487 DEFINE_MUXREG(ssp_cs_pins, 0, PMX_SSP_CS_MASK, 0);
488 DEFINE_MUXREG(ssp_pins, 0, PMX_SSP_MASK, 0);
489 DEFINE_MUXREG(mii_pins, 0, PMX_MII_MASK, 0);
490 DEFINE_MUXREG(gpio0_pin0_pins, 0, PMX_GPIO_PIN0_MASK, 0);
491 DEFINE_MUXREG(gpio0_pin1_pins, 0, PMX_GPIO_PIN1_MASK, 0);
492 DEFINE_MUXREG(gpio0_pin2_pins, 0, PMX_GPIO_PIN2_MASK, 0);
493 DEFINE_MUXREG(gpio0_pin3_pins, 0, PMX_GPIO_PIN3_MASK, 0);
494 DEFINE_MUXREG(gpio0_pin4_pins, 0, PMX_GPIO_PIN4_MASK, 0);
495 DEFINE_MUXREG(gpio0_pin5_pins, 0, PMX_GPIO_PIN5_MASK, 0);
496 DEFINE_MUXREG(uart0_ext_pins, 0, PMX_UART0_MODEM_MASK, 0);
497 DEFINE_MUXREG(uart0_pins, 0, PMX_UART0_MASK, 0);
498 DEFINE_MUXREG(timer_0_1_pins, 0, PMX_TIMER_0_1_MASK, 0);
499 DEFINE_MUXREG(timer_2_3_pins, 0, PMX_TIMER_2_3_MASK, 0);
500
501 static struct spear_gpio_pingroup spear3xx_gpio_pingroup[] = {
502 GPIO_PINGROUP(firda_pins),
503 GPIO_PINGROUP(i2c_pins),
504 GPIO_PINGROUP(ssp_cs_pins),
505 GPIO_PINGROUP(ssp_pins),
506 GPIO_PINGROUP(mii_pins),
507 GPIO_PINGROUP(gpio0_pin0_pins),
508 GPIO_PINGROUP(gpio0_pin1_pins),
509 GPIO_PINGROUP(gpio0_pin2_pins),
510 GPIO_PINGROUP(gpio0_pin3_pins),
511 GPIO_PINGROUP(gpio0_pin4_pins),
512 GPIO_PINGROUP(gpio0_pin5_pins),
513 GPIO_PINGROUP(uart0_ext_pins),
514 GPIO_PINGROUP(uart0_pins),
515 GPIO_PINGROUP(timer_0_1_pins),
516 GPIO_PINGROUP(timer_2_3_pins),
517 };
518
484 struct spear_pinctrl_machdata spear3xx_machdata = { 519 struct spear_pinctrl_machdata spear3xx_machdata = {
485 .pins = spear3xx_pins, 520 .pins = spear3xx_pins,
486 .npins = ARRAY_SIZE(spear3xx_pins), 521 .npins = ARRAY_SIZE(spear3xx_pins),
522 .gpio_pingroups = spear3xx_gpio_pingroup,
523 .ngpio_pingroups = ARRAY_SIZE(spear3xx_gpio_pingroup),
487 }; 524 };
488 525