aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-pxa/ezx.c368
1 files changed, 344 insertions, 24 deletions
diff --git a/arch/arm/mach-pxa/ezx.c b/arch/arm/mach-pxa/ezx.c
index d794aba63bb5..44a418ac88a4 100644
--- a/arch/arm/mach-pxa/ezx.c
+++ b/arch/arm/mach-pxa/ezx.c
@@ -101,36 +101,291 @@ static unsigned long ezx_pin_config[] __initdata = {
101 GPIO44_BTUART_CTS, 101 GPIO44_BTUART_CTS,
102 GPIO45_BTUART_RTS, 102 GPIO45_BTUART_RTS,
103 103
104 /* STUART */
105 GPIO46_STUART_RXD,
106 GPIO47_STUART_TXD,
107
108 /* For A780 support (connected with Neptune GSM chip) */
109 GPIO30_USB_P3_2, /* ICL_TXENB */
110 GPIO31_USB_P3_6, /* ICL_VPOUT */
111 GPIO90_USB_P3_5, /* ICL_VPIN */
112 GPIO91_USB_P3_1, /* ICL_XRXD */
113 GPIO56_USB_P3_4, /* ICL_VMOUT */
114 GPIO113_USB_P3_3, /* /ICL_VMIN */
115
116 /* I2C */ 104 /* I2C */
117 GPIO117_I2C_SCL, 105 GPIO117_I2C_SCL,
118 GPIO118_I2C_SDA, 106 GPIO118_I2C_SDA,
107
108 /* PCAP SSP */
109 GPIO29_SSP1_SCLK,
110 GPIO25_SSP1_TXD,
111 GPIO26_SSP1_RXD,
112 GPIO24_GPIO, /* pcap chip select */
113 GPIO1_GPIO, /* pcap interrupt */
114 GPIO4_GPIO, /* WDI_AP */
115 GPIO55_GPIO, /* SYS_RESTART */
116
117 /* MMC */
118 GPIO32_MMC_CLK,
119 GPIO92_MMC_DAT_0,
120 GPIO109_MMC_DAT_1,
121 GPIO110_MMC_DAT_2,
122 GPIO111_MMC_DAT_3,
123 GPIO112_MMC_CMD,
124 GPIO11_GPIO, /* mmc detect */
125
126 /* usb to external transceiver */
127 GPIO34_USB_P2_2,
128 GPIO35_USB_P2_1,
129 GPIO36_USB_P2_4,
130 GPIO39_USB_P2_6,
131 GPIO40_USB_P2_5,
132 GPIO53_USB_P2_3,
133
134 /* usb to Neptune GSM chip */
135 GPIO30_USB_P3_2,
136 GPIO31_USB_P3_6,
137 GPIO90_USB_P3_5,
138 GPIO91_USB_P3_1,
139 GPIO56_USB_P3_4,
140 GPIO113_USB_P3_3,
141};
142
143#if defined(CONFIG_MACH_EZX_A780) || defined(CONFIG_MACH_EZX_E680)
144static unsigned long gen1_pin_config[] __initdata = {
145 /* flip / lockswitch */
146 GPIO12_GPIO,
147
148 /* bluetooth (bcm2035) */
149 GPIO14_GPIO | WAKEUP_ON_LEVEL_HIGH, /* HOSTWAKE */
150 GPIO48_GPIO, /* RESET */
151 GPIO28_GPIO, /* WAKEUP */
152
153 /* Neptune handshake */
154 GPIO0_GPIO | WAKEUP_ON_LEVEL_HIGH, /* BP_RDY */
155 GPIO57_GPIO, /* AP_RDY */
156 GPIO13_GPIO | WAKEUP_ON_LEVEL_HIGH, /* WDI */
157 GPIO3_GPIO | WAKEUP_ON_LEVEL_HIGH, /* WDI2 */
158 GPIO82_GPIO, /* RESET */
159 GPIO99_GPIO, /* TC_MM_EN */
160
161 /* sound */
162 GPIO52_SSP3_SCLK,
163 GPIO83_SSP3_SFRM,
164 GPIO81_SSP3_TXD,
165 GPIO89_SSP3_RXD,
166
167 /* ssp2 pins to in */
168 GPIO22_GPIO, /* SSP2_SCLK */
169 GPIO37_GPIO, /* SSP2_SFRM */
170 GPIO38_GPIO, /* SSP2_TXD */
171 GPIO88_GPIO, /* SSP2_RXD */
172
173 /* camera */
174 GPIO23_CIF_MCLK,
175 GPIO54_CIF_PCLK,
176 GPIO85_CIF_LV,
177 GPIO84_CIF_FV,
178 GPIO27_CIF_DD_0,
179 GPIO114_CIF_DD_1,
180 GPIO51_CIF_DD_2,
181 GPIO115_CIF_DD_3,
182 GPIO95_CIF_DD_4,
183 GPIO94_CIF_DD_5,
184 GPIO17_CIF_DD_6,
185 GPIO108_CIF_DD_7,
186 GPIO50_GPIO, /* CAM_EN */
187 GPIO19_GPIO, /* CAM_RST */
188
189 /* EMU */
190 GPIO120_GPIO, /* EMU_MUX1 */
191 GPIO119_GPIO, /* EMU_MUX2 */
192 GPIO86_GPIO, /* SNP_INT_CTL */
193 GPIO87_GPIO, /* SNP_INT_IN */
119}; 194};
195#endif
196
197#if defined(CONFIG_MACH_EZX_A1200) || defined(CONFIG_MACH_EZX_A910) || \
198 defined(CONFIG_MACH_EZX_E2) || defined(CONFIG_MACH_EZX_E6)
199static unsigned long gen2_pin_config[] __initdata = {
200 /* flip / lockswitch */
201 GPIO15_GPIO,
202
203 /* EOC */
204 GPIO10_GPIO,
205
206 /* bluetooth (bcm2045) */
207 GPIO13_GPIO | WAKEUP_ON_LEVEL_HIGH, /* HOSTWAKE */
208 GPIO37_GPIO, /* RESET */
209 GPIO57_GPIO, /* WAKEUP */
210
211 /* Neptune handshake */
212 GPIO0_GPIO | WAKEUP_ON_LEVEL_HIGH, /* BP_RDY */
213 GPIO96_GPIO, /* AP_RDY */
214 GPIO3_GPIO | WAKEUP_ON_LEVEL_HIGH, /* WDI */
215 GPIO116_GPIO, /* RESET */
216 GPIO41_GPIO, /* BP_FLASH */
217
218 /* sound */
219 GPIO52_SSP3_SCLK,
220 GPIO83_SSP3_SFRM,
221 GPIO81_SSP3_TXD,
222 GPIO82_SSP3_RXD,
223
224 /* ssp2 pins to in */
225 GPIO22_GPIO, /* SSP2_SCLK */
226 GPIO14_GPIO, /* SSP2_SFRM */
227 GPIO38_GPIO, /* SSP2_TXD */
228 GPIO88_GPIO, /* SSP2_RXD */
120 229
121static void __init ezx_init(void) 230 /* camera */
231 GPIO23_CIF_MCLK,
232 GPIO54_CIF_PCLK,
233 GPIO85_CIF_LV,
234 GPIO84_CIF_FV,
235 GPIO27_CIF_DD_0,
236 GPIO114_CIF_DD_1,
237 GPIO51_CIF_DD_2,
238 GPIO115_CIF_DD_3,
239 GPIO95_CIF_DD_4,
240 GPIO48_CIF_DD_5,
241 GPIO93_CIF_DD_6,
242 GPIO12_CIF_DD_7,
243 GPIO50_GPIO, /* CAM_EN */
244 GPIO28_GPIO, /* CAM_RST */
245 GPIO17_GPIO, /* CAM_FLASH */
246};
247#endif
248
249#ifdef CONFIG_MACH_EZX_A780
250static unsigned long a780_pin_config[] __initdata = {
251 /* keypad */
252 GPIO93_KP_DKIN_0 | WAKEUP_ON_LEVEL_HIGH,
253 GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
254 GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
255 GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
256 GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
257 GPIO98_KP_MKIN_4 | WAKEUP_ON_LEVEL_HIGH,
258 GPIO103_KP_MKOUT_0,
259 GPIO104_KP_MKOUT_1,
260 GPIO105_KP_MKOUT_2,
261 GPIO106_KP_MKOUT_3,
262 GPIO107_KP_MKOUT_4,
263
264 /* attenuate sound */
265 GPIO96_GPIO,
266};
267#endif
268
269#ifdef CONFIG_MACH_EZX_E680
270static unsigned long e680_pin_config[] __initdata = {
271 /* keypad */
272 GPIO93_KP_DKIN_0 | WAKEUP_ON_LEVEL_HIGH,
273 GPIO96_KP_DKIN_3 | WAKEUP_ON_LEVEL_HIGH,
274 GPIO97_KP_DKIN_4 | WAKEUP_ON_LEVEL_HIGH,
275 GPIO98_KP_DKIN_5 | WAKEUP_ON_LEVEL_HIGH,
276 GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
277 GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
278 GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
279 GPIO103_KP_MKOUT_0,
280 GPIO104_KP_MKOUT_1,
281 GPIO105_KP_MKOUT_2,
282 GPIO106_KP_MKOUT_3,
283
284 /* MIDI */
285 GPIO79_GPIO, /* VA_SEL_BUL */
286 GPIO80_GPIO, /* FLT_SEL_BUL */
287 GPIO78_GPIO, /* MIDI_RESET */
288 GPIO33_GPIO, /* MIDI_CS */
289 GPIO15_GPIO, /* MIDI_IRQ */
290 GPIO49_GPIO, /* MIDI_NPWE */
291 GPIO18_GPIO, /* MIDI_RDY */
292
293 /* leds */
294 GPIO46_GPIO,
295 GPIO47_GPIO,
296};
297#endif
298
299#ifdef CONFIG_MACH_EZX_A1200
300static unsigned long a1200_pin_config[] __initdata = {
301 /* keypad */
302 GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
303 GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
304 GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
305 GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
306 GPIO98_KP_MKIN_4 | WAKEUP_ON_LEVEL_HIGH,
307 GPIO103_KP_MKOUT_0,
308 GPIO104_KP_MKOUT_1,
309 GPIO105_KP_MKOUT_2,
310 GPIO106_KP_MKOUT_3,
311 GPIO107_KP_MKOUT_4,
312 GPIO108_KP_MKOUT_5,
313};
314#endif
315
316#ifdef CONFIG_MACH_EZX_A910
317static unsigned long a910_pin_config[] __initdata = {
318 /* keypad */
319 GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
320 GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
321 GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
322 GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
323 GPIO98_KP_MKIN_4 | WAKEUP_ON_LEVEL_HIGH,
324 GPIO103_KP_MKOUT_0,
325 GPIO104_KP_MKOUT_1,
326 GPIO105_KP_MKOUT_2,
327 GPIO106_KP_MKOUT_3,
328 GPIO107_KP_MKOUT_4,
329 GPIO108_KP_MKOUT_5,
330
331 /* WLAN */
332 GPIO89_GPIO, /* RESET */
333 GPIO33_GPIO, /* WAKEUP */
334 GPIO94_GPIO | WAKEUP_ON_LEVEL_HIGH, /* HOSTWAKE */
335
336 /* MMC CS */
337 GPIO20_GPIO,
338};
339#endif
340
341#ifdef CONFIG_MACH_EZX_E2
342static unsigned long e2_pin_config[] __initdata = {
343 /* keypad */
344 GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
345 GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
346 GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
347 GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
348 GPIO98_KP_MKIN_4 | WAKEUP_ON_LEVEL_HIGH,
349 GPIO103_KP_MKOUT_0,
350 GPIO104_KP_MKOUT_1,
351 GPIO105_KP_MKOUT_2,
352 GPIO106_KP_MKOUT_3,
353 GPIO107_KP_MKOUT_4,
354 GPIO108_KP_MKOUT_5,
355};
356#endif
357
358#ifdef CONFIG_MACH_EZX_E6
359static unsigned long e6_pin_config[] __initdata = {
360 /* keypad */
361 GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
362 GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
363 GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
364 GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
365 GPIO98_KP_MKIN_4 | WAKEUP_ON_LEVEL_HIGH,
366 GPIO103_KP_MKOUT_0,
367 GPIO104_KP_MKOUT_1,
368 GPIO105_KP_MKOUT_2,
369 GPIO106_KP_MKOUT_3,
370 GPIO107_KP_MKOUT_4,
371 GPIO108_KP_MKOUT_5,
372};
373#endif
374
375#ifdef CONFIG_MACH_EZX_A780
376static void __init a780_init(void)
122{ 377{
123 pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config)); 378 pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
379 pxa2xx_mfp_config(ARRAY_AND_SIZE(gen1_pin_config));
380 pxa2xx_mfp_config(ARRAY_AND_SIZE(a780_pin_config));
381
124 pxa_set_i2c_info(NULL); 382 pxa_set_i2c_info(NULL);
125 if (machine_is_ezx_a780() || machine_is_ezx_e680()) 383
126 set_pxa_fb_info(&ezx_fb_info_1); 384 set_pxa_fb_info(&ezx_fb_info_1);
127 else
128 set_pxa_fb_info(&ezx_fb_info_2);
129 385
130 platform_add_devices(devices, ARRAY_SIZE(devices)); 386 platform_add_devices(devices, ARRAY_SIZE(devices));
131} 387}
132 388
133#ifdef CONFIG_MACH_EZX_A780
134MACHINE_START(EZX_A780, "Motorola EZX A780") 389MACHINE_START(EZX_A780, "Motorola EZX A780")
135 .phys_io = 0x40000000, 390 .phys_io = 0x40000000,
136 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, 391 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
@@ -138,11 +393,24 @@ MACHINE_START(EZX_A780, "Motorola EZX A780")
138 .map_io = pxa_map_io, 393 .map_io = pxa_map_io,
139 .init_irq = pxa27x_init_irq, 394 .init_irq = pxa27x_init_irq,
140 .timer = &pxa_timer, 395 .timer = &pxa_timer,
141 .init_machine = &ezx_init, 396 .init_machine = a780_init,
142MACHINE_END 397MACHINE_END
143#endif 398#endif
144 399
145#ifdef CONFIG_MACH_EZX_E680 400#ifdef CONFIG_MACH_EZX_E680
401static void __init e680_init(void)
402{
403 pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
404 pxa2xx_mfp_config(ARRAY_AND_SIZE(gen1_pin_config));
405 pxa2xx_mfp_config(ARRAY_AND_SIZE(e680_pin_config));
406
407 pxa_set_i2c_info(NULL);
408
409 set_pxa_fb_info(&ezx_fb_info_1);
410
411 platform_add_devices(devices, ARRAY_SIZE(devices));
412}
413
146MACHINE_START(EZX_E680, "Motorola EZX E680") 414MACHINE_START(EZX_E680, "Motorola EZX E680")
147 .phys_io = 0x40000000, 415 .phys_io = 0x40000000,
148 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, 416 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
@@ -150,11 +418,24 @@ MACHINE_START(EZX_E680, "Motorola EZX E680")
150 .map_io = pxa_map_io, 418 .map_io = pxa_map_io,
151 .init_irq = pxa27x_init_irq, 419 .init_irq = pxa27x_init_irq,
152 .timer = &pxa_timer, 420 .timer = &pxa_timer,
153 .init_machine = &ezx_init, 421 .init_machine = e680_init,
154MACHINE_END 422MACHINE_END
155#endif 423#endif
156 424
157#ifdef CONFIG_MACH_EZX_A1200 425#ifdef CONFIG_MACH_EZX_A1200
426static void __init a1200_init(void)
427{
428 pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
429 pxa2xx_mfp_config(ARRAY_AND_SIZE(gen2_pin_config));
430 pxa2xx_mfp_config(ARRAY_AND_SIZE(a1200_pin_config));
431
432 pxa_set_i2c_info(NULL);
433
434 set_pxa_fb_info(&ezx_fb_info_2);
435
436 platform_add_devices(devices, ARRAY_SIZE(devices));
437}
438
158MACHINE_START(EZX_A1200, "Motorola EZX A1200") 439MACHINE_START(EZX_A1200, "Motorola EZX A1200")
159 .phys_io = 0x40000000, 440 .phys_io = 0x40000000,
160 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, 441 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
@@ -162,11 +443,24 @@ MACHINE_START(EZX_A1200, "Motorola EZX A1200")
162 .map_io = pxa_map_io, 443 .map_io = pxa_map_io,
163 .init_irq = pxa27x_init_irq, 444 .init_irq = pxa27x_init_irq,
164 .timer = &pxa_timer, 445 .timer = &pxa_timer,
165 .init_machine = &ezx_init, 446 .init_machine = a1200_init,
166MACHINE_END 447MACHINE_END
167#endif 448#endif
168 449
169#ifdef CONFIG_MACH_EZX_A910 450#ifdef CONFIG_MACH_EZX_A910
451static void __init a910_init(void)
452{
453 pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
454 pxa2xx_mfp_config(ARRAY_AND_SIZE(gen2_pin_config));
455 pxa2xx_mfp_config(ARRAY_AND_SIZE(a910_pin_config));
456
457 pxa_set_i2c_info(NULL);
458
459 set_pxa_fb_info(&ezx_fb_info_2);
460
461 platform_add_devices(devices, ARRAY_SIZE(devices));
462}
463
170MACHINE_START(EZX_A910, "Motorola EZX A910") 464MACHINE_START(EZX_A910, "Motorola EZX A910")
171 .phys_io = 0x40000000, 465 .phys_io = 0x40000000,
172 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, 466 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
@@ -174,11 +468,24 @@ MACHINE_START(EZX_A910, "Motorola EZX A910")
174 .map_io = pxa_map_io, 468 .map_io = pxa_map_io,
175 .init_irq = pxa27x_init_irq, 469 .init_irq = pxa27x_init_irq,
176 .timer = &pxa_timer, 470 .timer = &pxa_timer,
177 .init_machine = &ezx_init, 471 .init_machine = a910_init,
178MACHINE_END 472MACHINE_END
179#endif 473#endif
180 474
181#ifdef CONFIG_MACH_EZX_E6 475#ifdef CONFIG_MACH_EZX_E6
476static void __init e6_init(void)
477{
478 pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
479 pxa2xx_mfp_config(ARRAY_AND_SIZE(gen2_pin_config));
480 pxa2xx_mfp_config(ARRAY_AND_SIZE(e6_pin_config));
481
482 pxa_set_i2c_info(NULL);
483
484 set_pxa_fb_info(&ezx_fb_info_2);
485
486 platform_add_devices(devices, ARRAY_SIZE(devices));
487}
488
182MACHINE_START(EZX_E6, "Motorola EZX E6") 489MACHINE_START(EZX_E6, "Motorola EZX E6")
183 .phys_io = 0x40000000, 490 .phys_io = 0x40000000,
184 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, 491 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
@@ -186,11 +493,24 @@ MACHINE_START(EZX_E6, "Motorola EZX E6")
186 .map_io = pxa_map_io, 493 .map_io = pxa_map_io,
187 .init_irq = pxa27x_init_irq, 494 .init_irq = pxa27x_init_irq,
188 .timer = &pxa_timer, 495 .timer = &pxa_timer,
189 .init_machine = &ezx_init, 496 .init_machine = e6_init,
190MACHINE_END 497MACHINE_END
191#endif 498#endif
192 499
193#ifdef CONFIG_MACH_EZX_E2 500#ifdef CONFIG_MACH_EZX_E2
501static void __init e2_init(void)
502{
503 pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
504 pxa2xx_mfp_config(ARRAY_AND_SIZE(gen2_pin_config));
505 pxa2xx_mfp_config(ARRAY_AND_SIZE(e2_pin_config));
506
507 pxa_set_i2c_info(NULL);
508
509 set_pxa_fb_info(&ezx_fb_info_2);
510
511 platform_add_devices(devices, ARRAY_SIZE(devices));
512}
513
194MACHINE_START(EZX_E2, "Motorola EZX E2") 514MACHINE_START(EZX_E2, "Motorola EZX E2")
195 .phys_io = 0x40000000, 515 .phys_io = 0x40000000,
196 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, 516 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
@@ -198,6 +518,6 @@ MACHINE_START(EZX_E2, "Motorola EZX E2")
198 .map_io = pxa_map_io, 518 .map_io = pxa_map_io,
199 .init_irq = pxa27x_init_irq, 519 .init_irq = pxa27x_init_irq,
200 .timer = &pxa_timer, 520 .timer = &pxa_timer,
201 .init_machine = &ezx_init, 521 .init_machine = e2_init,
202MACHINE_END 522MACHINE_END
203#endif 523#endif