Merge remote-tracking branches 'asoc/fix/atmel', 'asoc/fix/fsl', 'asoc/fix/tegra...
[linux-drm-fsl-dcu.git] / arch / arm / mach-pxa / ezx.c
1 /*
2  *  ezx.c - Common code for the EZX platform.
3  *
4  *  Copyright (C) 2005-2006 Harald Welte <laforge@openezx.org>,
5  *                2007-2008 Daniel Ribeiro <drwyrm@gmail.com>,
6  *                2007-2008 Stefan Schmidt <stefan@datenfreihafen.org>
7  *
8  *  This program is free software; you can redistribute it and/or modify
9  *  it under the terms of the GNU General Public License version 2 as
10  *  published by the Free Software Foundation.
11  *
12  */
13
14 #include <linux/kernel.h>
15 #include <linux/init.h>
16 #include <linux/platform_device.h>
17 #include <linux/delay.h>
18 #include <linux/pwm_backlight.h>
19 #include <linux/input.h>
20 #include <linux/gpio.h>
21 #include <linux/gpio_keys.h>
22 #include <linux/leds-lp3944.h>
23 #include <linux/i2c/pxa-i2c.h>
24
25 #include <media/soc_camera.h>
26
27 #include <asm/setup.h>
28 #include <asm/mach-types.h>
29 #include <asm/mach/arch.h>
30
31 #include <mach/pxa27x.h>
32 #include <linux/platform_data/video-pxafb.h>
33 #include <linux/platform_data/usb-ohci-pxa27x.h>
34 #include <mach/hardware.h>
35 #include <linux/platform_data/keypad-pxa27x.h>
36 #include <linux/platform_data/camera-pxa.h>
37
38 #include "devices.h"
39 #include "generic.h"
40
41 #define EZX_NR_IRQS                     (IRQ_BOARD_START + 24)
42
43 #define GPIO12_A780_FLIP_LID            12
44 #define GPIO15_A1200_FLIP_LID           15
45 #define GPIO15_A910_FLIP_LID            15
46 #define GPIO12_E680_LOCK_SWITCH         12
47 #define GPIO15_E6_LOCK_SWITCH           15
48 #define GPIO50_nCAM_EN                  50
49 #define GPIO19_GEN1_CAM_RST             19
50 #define GPIO28_GEN2_CAM_RST             28
51
52 static struct platform_pwm_backlight_data ezx_backlight_data = {
53         .pwm_id         = 0,
54         .max_brightness = 1023,
55         .dft_brightness = 1023,
56         .pwm_period_ns  = 78770,
57         .enable_gpio    = -1,
58 };
59
60 static struct platform_device ezx_backlight_device = {
61         .name           = "pwm-backlight",
62         .dev            = {
63                 .parent = &pxa27x_device_pwm0.dev,
64                 .platform_data = &ezx_backlight_data,
65         },
66 };
67
68 static struct pxafb_mode_info mode_ezx_old = {
69         .pixclock               = 150000,
70         .xres                   = 240,
71         .yres                   = 320,
72         .bpp                    = 16,
73         .hsync_len              = 10,
74         .left_margin            = 20,
75         .right_margin           = 10,
76         .vsync_len              = 2,
77         .upper_margin           = 3,
78         .lower_margin           = 2,
79         .sync                   = 0,
80 };
81
82 static struct pxafb_mach_info ezx_fb_info_1 = {
83         .modes          = &mode_ezx_old,
84         .num_modes      = 1,
85         .lcd_conn       = LCD_COLOR_TFT_16BPP,
86 };
87
88 static struct pxafb_mode_info mode_72r89803y01 = {
89         .pixclock               = 192308,
90         .xres                   = 240,
91         .yres                   = 320,
92         .bpp                    = 32,
93         .depth                  = 18,
94         .hsync_len              = 10,
95         .left_margin            = 20,
96         .right_margin           = 10,
97         .vsync_len              = 2,
98         .upper_margin           = 3,
99         .lower_margin           = 2,
100         .sync                   = 0,
101 };
102
103 static struct pxafb_mach_info ezx_fb_info_2 = {
104         .modes          = &mode_72r89803y01,
105         .num_modes      = 1,
106         .lcd_conn       = LCD_COLOR_TFT_18BPP,
107 };
108
109 static struct platform_device *ezx_devices[] __initdata = {
110         &ezx_backlight_device,
111 };
112
113 static unsigned long ezx_pin_config[] __initdata = {
114         /* PWM backlight */
115         GPIO16_PWM0_OUT,
116
117         /* BTUART */
118         GPIO42_BTUART_RXD,
119         GPIO43_BTUART_TXD,
120         GPIO44_BTUART_CTS,
121         GPIO45_BTUART_RTS,
122
123         /* I2C */
124         GPIO117_I2C_SCL,
125         GPIO118_I2C_SDA,
126
127         /* PCAP SSP */
128         GPIO29_SSP1_SCLK,
129         GPIO25_SSP1_TXD,
130         GPIO26_SSP1_RXD,
131         GPIO24_GPIO,                            /* pcap chip select */
132         GPIO1_GPIO | WAKEUP_ON_EDGE_RISE,       /* pcap interrupt */
133         GPIO4_GPIO | MFP_LPM_DRIVE_HIGH,        /* WDI_AP */
134         GPIO55_GPIO | MFP_LPM_DRIVE_HIGH,       /* SYS_RESTART */
135
136         /* MMC */
137         GPIO32_MMC_CLK,
138         GPIO92_MMC_DAT_0,
139         GPIO109_MMC_DAT_1,
140         GPIO110_MMC_DAT_2,
141         GPIO111_MMC_DAT_3,
142         GPIO112_MMC_CMD,
143         GPIO11_GPIO,                            /* mmc detect */
144
145         /* usb to external transceiver */
146         GPIO34_USB_P2_2,
147         GPIO35_USB_P2_1,
148         GPIO36_USB_P2_4,
149         GPIO39_USB_P2_6,
150         GPIO40_USB_P2_5,
151         GPIO53_USB_P2_3,
152
153         /* usb to Neptune GSM chip */
154         GPIO30_USB_P3_2,
155         GPIO31_USB_P3_6,
156         GPIO90_USB_P3_5,
157         GPIO91_USB_P3_1,
158         GPIO56_USB_P3_4,
159         GPIO113_USB_P3_3,
160 };
161
162 #if defined(CONFIG_MACH_EZX_A780) || defined(CONFIG_MACH_EZX_E680)
163 static unsigned long gen1_pin_config[] __initdata = {
164         /* flip / lockswitch */
165         GPIO12_GPIO | WAKEUP_ON_EDGE_BOTH,
166
167         /* bluetooth (bcm2035) */
168         GPIO14_GPIO | WAKEUP_ON_EDGE_RISE,      /* HOSTWAKE */
169         GPIO48_GPIO,                            /* RESET */
170         GPIO28_GPIO,                            /* WAKEUP */
171
172         /* Neptune handshake */
173         GPIO0_GPIO | WAKEUP_ON_EDGE_FALL,       /* BP_RDY */
174         GPIO57_GPIO | MFP_LPM_DRIVE_HIGH,       /* AP_RDY */
175         GPIO13_GPIO | WAKEUP_ON_EDGE_BOTH,      /* WDI */
176         GPIO3_GPIO | WAKEUP_ON_EDGE_BOTH,       /* WDI2 */
177         GPIO82_GPIO | MFP_LPM_DRIVE_HIGH,       /* RESET */
178         GPIO99_GPIO | MFP_LPM_DRIVE_HIGH,       /* TC_MM_EN */
179
180         /* sound */
181         GPIO52_SSP3_SCLK,
182         GPIO83_SSP3_SFRM,
183         GPIO81_SSP3_TXD,
184         GPIO89_SSP3_RXD,
185
186         /* ssp2 pins to in */
187         GPIO22_GPIO,                            /* SSP2_SCLK */
188         GPIO37_GPIO,                            /* SSP2_SFRM */
189         GPIO38_GPIO,                            /* SSP2_TXD */
190         GPIO88_GPIO,                            /* SSP2_RXD */
191
192         /* camera */
193         GPIO23_CIF_MCLK,
194         GPIO54_CIF_PCLK,
195         GPIO85_CIF_LV,
196         GPIO84_CIF_FV,
197         GPIO27_CIF_DD_0,
198         GPIO114_CIF_DD_1,
199         GPIO51_CIF_DD_2,
200         GPIO115_CIF_DD_3,
201         GPIO95_CIF_DD_4,
202         GPIO94_CIF_DD_5,
203         GPIO17_CIF_DD_6,
204         GPIO108_CIF_DD_7,
205         GPIO50_GPIO | MFP_LPM_DRIVE_HIGH,       /* CAM_EN */
206         GPIO19_GPIO | MFP_LPM_DRIVE_HIGH,       /* CAM_RST */
207
208         /* EMU */
209         GPIO120_GPIO,                           /* EMU_MUX1 */
210         GPIO119_GPIO,                           /* EMU_MUX2 */
211         GPIO86_GPIO,                            /* SNP_INT_CTL */
212         GPIO87_GPIO,                            /* SNP_INT_IN */
213 };
214 #endif
215
216 #if defined(CONFIG_MACH_EZX_A1200) || defined(CONFIG_MACH_EZX_A910) || \
217         defined(CONFIG_MACH_EZX_E2) || defined(CONFIG_MACH_EZX_E6)
218 static unsigned long gen2_pin_config[] __initdata = {
219         /* flip / lockswitch */
220         GPIO15_GPIO | WAKEUP_ON_EDGE_BOTH,
221
222         /* EOC */
223         GPIO10_GPIO | WAKEUP_ON_EDGE_RISE,
224
225         /* bluetooth (bcm2045) */
226         GPIO13_GPIO | WAKEUP_ON_EDGE_RISE,      /* HOSTWAKE */
227         GPIO37_GPIO,                            /* RESET */
228         GPIO57_GPIO,                            /* WAKEUP */
229
230         /* Neptune handshake */
231         GPIO0_GPIO | WAKEUP_ON_EDGE_FALL,       /* BP_RDY */
232         GPIO96_GPIO | MFP_LPM_DRIVE_HIGH,       /* AP_RDY */
233         GPIO3_GPIO | WAKEUP_ON_EDGE_FALL,       /* WDI */
234         GPIO116_GPIO | MFP_LPM_DRIVE_HIGH,      /* RESET */
235         GPIO41_GPIO,                            /* BP_FLASH */
236
237         /* sound */
238         GPIO52_SSP3_SCLK,
239         GPIO83_SSP3_SFRM,
240         GPIO81_SSP3_TXD,
241         GPIO82_SSP3_RXD,
242
243         /* ssp2 pins to in */
244         GPIO22_GPIO,                            /* SSP2_SCLK */
245         GPIO14_GPIO,                            /* SSP2_SFRM */
246         GPIO38_GPIO,                            /* SSP2_TXD */
247         GPIO88_GPIO,                            /* SSP2_RXD */
248
249         /* camera */
250         GPIO23_CIF_MCLK,
251         GPIO54_CIF_PCLK,
252         GPIO85_CIF_LV,
253         GPIO84_CIF_FV,
254         GPIO27_CIF_DD_0,
255         GPIO114_CIF_DD_1,
256         GPIO51_CIF_DD_2,
257         GPIO115_CIF_DD_3,
258         GPIO95_CIF_DD_4,
259         GPIO48_CIF_DD_5,
260         GPIO93_CIF_DD_6,
261         GPIO12_CIF_DD_7,
262         GPIO50_GPIO | MFP_LPM_DRIVE_HIGH,       /* CAM_EN */
263         GPIO28_GPIO | MFP_LPM_DRIVE_HIGH,       /* CAM_RST */
264         GPIO17_GPIO,                            /* CAM_FLASH */
265 };
266 #endif
267
268 #ifdef CONFIG_MACH_EZX_A780
269 static unsigned long a780_pin_config[] __initdata = {
270         /* keypad */
271         GPIO93_KP_DKIN_0 | WAKEUP_ON_LEVEL_HIGH,
272         GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
273         GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
274         GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
275         GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
276         GPIO98_KP_MKIN_4 | WAKEUP_ON_LEVEL_HIGH,
277         GPIO103_KP_MKOUT_0,
278         GPIO104_KP_MKOUT_1,
279         GPIO105_KP_MKOUT_2,
280         GPIO106_KP_MKOUT_3,
281         GPIO107_KP_MKOUT_4,
282
283         /* attenuate sound */
284         GPIO96_GPIO,
285 };
286 #endif
287
288 #ifdef CONFIG_MACH_EZX_E680
289 static unsigned long e680_pin_config[] __initdata = {
290         /* keypad */
291         GPIO93_KP_DKIN_0 | WAKEUP_ON_LEVEL_HIGH,
292         GPIO96_KP_DKIN_3 | WAKEUP_ON_LEVEL_HIGH,
293         GPIO97_KP_DKIN_4 | WAKEUP_ON_LEVEL_HIGH,
294         GPIO98_KP_DKIN_5 | WAKEUP_ON_LEVEL_HIGH,
295         GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
296         GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
297         GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
298         GPIO103_KP_MKOUT_0,
299         GPIO104_KP_MKOUT_1,
300         GPIO105_KP_MKOUT_2,
301         GPIO106_KP_MKOUT_3,
302
303         /* MIDI */
304         GPIO79_GPIO,                            /* VA_SEL_BUL */
305         GPIO80_GPIO,                            /* FLT_SEL_BUL */
306         GPIO78_GPIO,                            /* MIDI_RESET */
307         GPIO33_GPIO,                            /* MIDI_CS */
308         GPIO15_GPIO,                            /* MIDI_IRQ */
309         GPIO49_GPIO,                            /* MIDI_NPWE */
310         GPIO18_GPIO,                            /* MIDI_RDY */
311
312         /* leds */
313         GPIO46_GPIO,
314         GPIO47_GPIO,
315 };
316 #endif
317
318 #ifdef CONFIG_MACH_EZX_A1200
319 static unsigned long a1200_pin_config[] __initdata = {
320         /* keypad */
321         GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
322         GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
323         GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
324         GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
325         GPIO98_KP_MKIN_4 | WAKEUP_ON_LEVEL_HIGH,
326         GPIO103_KP_MKOUT_0,
327         GPIO104_KP_MKOUT_1,
328         GPIO105_KP_MKOUT_2,
329         GPIO106_KP_MKOUT_3,
330         GPIO107_KP_MKOUT_4,
331         GPIO108_KP_MKOUT_5,
332 };
333 #endif
334
335 #ifdef CONFIG_MACH_EZX_A910
336 static unsigned long a910_pin_config[] __initdata = {
337         /* keypad */
338         GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
339         GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
340         GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
341         GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
342         GPIO98_KP_MKIN_4 | WAKEUP_ON_LEVEL_HIGH,
343         GPIO103_KP_MKOUT_0,
344         GPIO104_KP_MKOUT_1,
345         GPIO105_KP_MKOUT_2,
346         GPIO106_KP_MKOUT_3,
347         GPIO107_KP_MKOUT_4,
348         GPIO108_KP_MKOUT_5,
349
350         /* WLAN */
351         GPIO89_GPIO,                            /* RESET */
352         GPIO33_GPIO,                            /* WAKEUP */
353         GPIO94_GPIO | WAKEUP_ON_LEVEL_HIGH,     /* HOSTWAKE */
354
355         /* MMC CS */
356         GPIO20_GPIO,
357 };
358 #endif
359
360 #ifdef CONFIG_MACH_EZX_E2
361 static unsigned long e2_pin_config[] __initdata = {
362         /* keypad */
363         GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
364         GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
365         GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
366         GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
367         GPIO98_KP_MKIN_4 | WAKEUP_ON_LEVEL_HIGH,
368         GPIO103_KP_MKOUT_0,
369         GPIO104_KP_MKOUT_1,
370         GPIO105_KP_MKOUT_2,
371         GPIO106_KP_MKOUT_3,
372         GPIO107_KP_MKOUT_4,
373         GPIO108_KP_MKOUT_5,
374 };
375 #endif
376
377 #ifdef CONFIG_MACH_EZX_E6
378 static unsigned long e6_pin_config[] __initdata = {
379         /* keypad */
380         GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
381         GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
382         GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
383         GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
384         GPIO98_KP_MKIN_4 | WAKEUP_ON_LEVEL_HIGH,
385         GPIO103_KP_MKOUT_0,
386         GPIO104_KP_MKOUT_1,
387         GPIO105_KP_MKOUT_2,
388         GPIO106_KP_MKOUT_3,
389         GPIO107_KP_MKOUT_4,
390         GPIO108_KP_MKOUT_5,
391 };
392 #endif
393
394 /* KEYPAD */
395 #ifdef CONFIG_MACH_EZX_A780
396 static const unsigned int a780_key_map[] = {
397         KEY(0, 0, KEY_SEND),
398         KEY(0, 1, KEY_BACK),
399         KEY(0, 2, KEY_END),
400         KEY(0, 3, KEY_PAGEUP),
401         KEY(0, 4, KEY_UP),
402
403         KEY(1, 0, KEY_NUMERIC_1),
404         KEY(1, 1, KEY_NUMERIC_2),
405         KEY(1, 2, KEY_NUMERIC_3),
406         KEY(1, 3, KEY_SELECT),
407         KEY(1, 4, KEY_KPENTER),
408
409         KEY(2, 0, KEY_NUMERIC_4),
410         KEY(2, 1, KEY_NUMERIC_5),
411         KEY(2, 2, KEY_NUMERIC_6),
412         KEY(2, 3, KEY_RECORD),
413         KEY(2, 4, KEY_LEFT),
414
415         KEY(3, 0, KEY_NUMERIC_7),
416         KEY(3, 1, KEY_NUMERIC_8),
417         KEY(3, 2, KEY_NUMERIC_9),
418         KEY(3, 3, KEY_HOME),
419         KEY(3, 4, KEY_RIGHT),
420
421         KEY(4, 0, KEY_NUMERIC_STAR),
422         KEY(4, 1, KEY_NUMERIC_0),
423         KEY(4, 2, KEY_NUMERIC_POUND),
424         KEY(4, 3, KEY_PAGEDOWN),
425         KEY(4, 4, KEY_DOWN),
426 };
427
428 static struct matrix_keymap_data a780_matrix_keymap_data = {
429         .keymap                 = a780_key_map,
430         .keymap_size            = ARRAY_SIZE(a780_key_map),
431 };
432
433 static struct pxa27x_keypad_platform_data a780_keypad_platform_data = {
434         .matrix_key_rows = 5,
435         .matrix_key_cols = 5,
436         .matrix_keymap_data = &a780_matrix_keymap_data,
437
438         .direct_key_map = { KEY_CAMERA },
439         .direct_key_num = 1,
440
441         .debounce_interval = 30,
442 };
443 #endif /* CONFIG_MACH_EZX_A780 */
444
445 #ifdef CONFIG_MACH_EZX_E680
446 static const unsigned int e680_key_map[] = {
447         KEY(0, 0, KEY_UP),
448         KEY(0, 1, KEY_RIGHT),
449         KEY(0, 2, KEY_RESERVED),
450         KEY(0, 3, KEY_SEND),
451
452         KEY(1, 0, KEY_DOWN),
453         KEY(1, 1, KEY_LEFT),
454         KEY(1, 2, KEY_PAGEUP),
455         KEY(1, 3, KEY_PAGEDOWN),
456
457         KEY(2, 0, KEY_RESERVED),
458         KEY(2, 1, KEY_RESERVED),
459         KEY(2, 2, KEY_RESERVED),
460         KEY(2, 3, KEY_KPENTER),
461 };
462
463 static struct matrix_keymap_data e680_matrix_keymap_data = {
464         .keymap                 = e680_key_map,
465         .keymap_size            = ARRAY_SIZE(e680_key_map),
466 };
467
468 static struct pxa27x_keypad_platform_data e680_keypad_platform_data = {
469         .matrix_key_rows = 3,
470         .matrix_key_cols = 4,
471         .matrix_keymap_data = &e680_matrix_keymap_data,
472
473         .direct_key_map = {
474                 KEY_CAMERA,
475                 KEY_RESERVED,
476                 KEY_RESERVED,
477                 KEY_F1,
478                 KEY_CANCEL,
479                 KEY_F2,
480         },
481         .direct_key_num = 6,
482
483         .debounce_interval = 30,
484 };
485 #endif /* CONFIG_MACH_EZX_E680 */
486
487 #ifdef CONFIG_MACH_EZX_A1200
488 static const unsigned int a1200_key_map[] = {
489         KEY(0, 0, KEY_RESERVED),
490         KEY(0, 1, KEY_RIGHT),
491         KEY(0, 2, KEY_PAGEDOWN),
492         KEY(0, 3, KEY_RESERVED),
493         KEY(0, 4, KEY_RESERVED),
494         KEY(0, 5, KEY_RESERVED),
495
496         KEY(1, 0, KEY_RESERVED),
497         KEY(1, 1, KEY_DOWN),
498         KEY(1, 2, KEY_CAMERA),
499         KEY(1, 3, KEY_RESERVED),
500         KEY(1, 4, KEY_RESERVED),
501         KEY(1, 5, KEY_RESERVED),
502
503         KEY(2, 0, KEY_RESERVED),
504         KEY(2, 1, KEY_KPENTER),
505         KEY(2, 2, KEY_RECORD),
506         KEY(2, 3, KEY_RESERVED),
507         KEY(2, 4, KEY_RESERVED),
508         KEY(2, 5, KEY_SELECT),
509
510         KEY(3, 0, KEY_RESERVED),
511         KEY(3, 1, KEY_UP),
512         KEY(3, 2, KEY_SEND),
513         KEY(3, 3, KEY_RESERVED),
514         KEY(3, 4, KEY_RESERVED),
515         KEY(3, 5, KEY_RESERVED),
516
517         KEY(4, 0, KEY_RESERVED),
518         KEY(4, 1, KEY_LEFT),
519         KEY(4, 2, KEY_PAGEUP),
520         KEY(4, 3, KEY_RESERVED),
521         KEY(4, 4, KEY_RESERVED),
522         KEY(4, 5, KEY_RESERVED),
523 };
524
525 static struct matrix_keymap_data a1200_matrix_keymap_data = {
526         .keymap                 = a1200_key_map,
527         .keymap_size            = ARRAY_SIZE(a1200_key_map),
528 };
529
530 static struct pxa27x_keypad_platform_data a1200_keypad_platform_data = {
531         .matrix_key_rows = 5,
532         .matrix_key_cols = 6,
533         .matrix_keymap_data = &a1200_matrix_keymap_data,
534
535         .debounce_interval = 30,
536 };
537 #endif /* CONFIG_MACH_EZX_A1200 */
538
539 #ifdef CONFIG_MACH_EZX_E6
540 static const unsigned int e6_key_map[] = {
541         KEY(0, 0, KEY_RESERVED),
542         KEY(0, 1, KEY_RIGHT),
543         KEY(0, 2, KEY_PAGEDOWN),
544         KEY(0, 3, KEY_RESERVED),
545         KEY(0, 4, KEY_RESERVED),
546         KEY(0, 5, KEY_NEXTSONG),
547
548         KEY(1, 0, KEY_RESERVED),
549         KEY(1, 1, KEY_DOWN),
550         KEY(1, 2, KEY_PROG1),
551         KEY(1, 3, KEY_RESERVED),
552         KEY(1, 4, KEY_RESERVED),
553         KEY(1, 5, KEY_RESERVED),
554
555         KEY(2, 0, KEY_RESERVED),
556         KEY(2, 1, KEY_ENTER),
557         KEY(2, 2, KEY_CAMERA),
558         KEY(2, 3, KEY_RESERVED),
559         KEY(2, 4, KEY_RESERVED),
560         KEY(2, 5, KEY_WWW),
561
562         KEY(3, 0, KEY_RESERVED),
563         KEY(3, 1, KEY_UP),
564         KEY(3, 2, KEY_SEND),
565         KEY(3, 3, KEY_RESERVED),
566         KEY(3, 4, KEY_RESERVED),
567         KEY(3, 5, KEY_PLAYPAUSE),
568
569         KEY(4, 0, KEY_RESERVED),
570         KEY(4, 1, KEY_LEFT),
571         KEY(4, 2, KEY_PAGEUP),
572         KEY(4, 3, KEY_RESERVED),
573         KEY(4, 4, KEY_RESERVED),
574         KEY(4, 5, KEY_PREVIOUSSONG),
575 };
576
577 static struct matrix_keymap_data e6_keymap_data = {
578         .keymap                 = e6_key_map,
579         .keymap_size            = ARRAY_SIZE(e6_key_map),
580 };
581
582 static struct pxa27x_keypad_platform_data e6_keypad_platform_data = {
583         .matrix_key_rows = 5,
584         .matrix_key_cols = 6,
585         .matrix_keymap_data = &e6_keymap_data,
586
587         .debounce_interval = 30,
588 };
589 #endif /* CONFIG_MACH_EZX_E6 */
590
591 #ifdef CONFIG_MACH_EZX_A910
592 static const unsigned int a910_key_map[] = {
593         KEY(0, 0, KEY_NUMERIC_6),
594         KEY(0, 1, KEY_RIGHT),
595         KEY(0, 2, KEY_PAGEDOWN),
596         KEY(0, 3, KEY_KPENTER),
597         KEY(0, 4, KEY_NUMERIC_5),
598         KEY(0, 5, KEY_CAMERA),
599
600         KEY(1, 0, KEY_NUMERIC_8),
601         KEY(1, 1, KEY_DOWN),
602         KEY(1, 2, KEY_RESERVED),
603         KEY(1, 3, KEY_F1), /* Left SoftKey */
604         KEY(1, 4, KEY_NUMERIC_STAR),
605         KEY(1, 5, KEY_RESERVED),
606
607         KEY(2, 0, KEY_NUMERIC_7),
608         KEY(2, 1, KEY_NUMERIC_9),
609         KEY(2, 2, KEY_RECORD),
610         KEY(2, 3, KEY_F2), /* Right SoftKey */
611         KEY(2, 4, KEY_BACK),
612         KEY(2, 5, KEY_SELECT),
613
614         KEY(3, 0, KEY_NUMERIC_2),
615         KEY(3, 1, KEY_UP),
616         KEY(3, 2, KEY_SEND),
617         KEY(3, 3, KEY_NUMERIC_0),
618         KEY(3, 4, KEY_NUMERIC_1),
619         KEY(3, 5, KEY_RECORD),
620
621         KEY(4, 0, KEY_NUMERIC_4),
622         KEY(4, 1, KEY_LEFT),
623         KEY(4, 2, KEY_PAGEUP),
624         KEY(4, 3, KEY_NUMERIC_POUND),
625         KEY(4, 4, KEY_NUMERIC_3),
626         KEY(4, 5, KEY_RESERVED),
627 };
628
629 static struct matrix_keymap_data a910_matrix_keymap_data = {
630         .keymap                 = a910_key_map,
631         .keymap_size            = ARRAY_SIZE(a910_key_map),
632 };
633
634 static struct pxa27x_keypad_platform_data a910_keypad_platform_data = {
635         .matrix_key_rows = 5,
636         .matrix_key_cols = 6,
637         .matrix_keymap_data = &a910_matrix_keymap_data,
638
639         .debounce_interval = 30,
640 };
641 #endif /* CONFIG_MACH_EZX_A910 */
642
643 #ifdef CONFIG_MACH_EZX_E2
644 static const unsigned int e2_key_map[] = {
645         KEY(0, 0, KEY_NUMERIC_6),
646         KEY(0, 1, KEY_RIGHT),
647         KEY(0, 2, KEY_NUMERIC_9),
648         KEY(0, 3, KEY_NEXTSONG),
649         KEY(0, 4, KEY_NUMERIC_5),
650         KEY(0, 5, KEY_F1), /* Left SoftKey */
651
652         KEY(1, 0, KEY_NUMERIC_8),
653         KEY(1, 1, KEY_DOWN),
654         KEY(1, 2, KEY_RESERVED),
655         KEY(1, 3, KEY_PAGEUP),
656         KEY(1, 4, KEY_NUMERIC_STAR),
657         KEY(1, 5, KEY_F2), /* Right SoftKey */
658
659         KEY(2, 0, KEY_NUMERIC_7),
660         KEY(2, 1, KEY_KPENTER),
661         KEY(2, 2, KEY_RECORD),
662         KEY(2, 3, KEY_PAGEDOWN),
663         KEY(2, 4, KEY_BACK),
664         KEY(2, 5, KEY_NUMERIC_0),
665
666         KEY(3, 0, KEY_NUMERIC_2),
667         KEY(3, 1, KEY_UP),
668         KEY(3, 2, KEY_SEND),
669         KEY(3, 3, KEY_PLAYPAUSE),
670         KEY(3, 4, KEY_NUMERIC_1),
671         KEY(3, 5, KEY_SOUND), /* Music SoftKey */
672
673         KEY(4, 0, KEY_NUMERIC_4),
674         KEY(4, 1, KEY_LEFT),
675         KEY(4, 2, KEY_NUMERIC_POUND),
676         KEY(4, 3, KEY_PREVIOUSSONG),
677         KEY(4, 4, KEY_NUMERIC_3),
678         KEY(4, 5, KEY_RESERVED),
679 };
680
681 static struct matrix_keymap_data e2_matrix_keymap_data = {
682         .keymap                 = e2_key_map,
683         .keymap_size            = ARRAY_SIZE(e2_key_map),
684 };
685
686 static struct pxa27x_keypad_platform_data e2_keypad_platform_data = {
687         .matrix_key_rows = 5,
688         .matrix_key_cols = 6,
689         .matrix_keymap_data = &e2_matrix_keymap_data,
690
691         .debounce_interval = 30,
692 };
693 #endif /* CONFIG_MACH_EZX_E2 */
694
695 #ifdef CONFIG_MACH_EZX_A780
696 /* gpio_keys */
697 static struct gpio_keys_button a780_buttons[] = {
698         [0] = {
699                 .code       = SW_LID,
700                 .gpio       = GPIO12_A780_FLIP_LID,
701                 .active_low = 0,
702                 .desc       = "A780 flip lid",
703                 .type       = EV_SW,
704                 .wakeup     = 1,
705         },
706 };
707
708 static struct gpio_keys_platform_data a780_gpio_keys_platform_data = {
709         .buttons  = a780_buttons,
710         .nbuttons = ARRAY_SIZE(a780_buttons),
711 };
712
713 static struct platform_device a780_gpio_keys = {
714         .name = "gpio-keys",
715         .id   = -1,
716         .dev  = {
717                 .platform_data = &a780_gpio_keys_platform_data,
718         },
719 };
720
721 /* camera */
722 static int a780_camera_init(void)
723 {
724         int err;
725
726         /*
727          * GPIO50_nCAM_EN is active low
728          * GPIO19_GEN1_CAM_RST is active on rising edge
729          */
730         err = gpio_request(GPIO50_nCAM_EN, "nCAM_EN");
731         if (err) {
732                 pr_err("%s: Failed to request nCAM_EN\n", __func__);
733                 goto fail;
734         }
735
736         err = gpio_request(GPIO19_GEN1_CAM_RST, "CAM_RST");
737         if (err) {
738                 pr_err("%s: Failed to request CAM_RST\n", __func__);
739                 goto fail_gpio_cam_rst;
740         }
741
742         gpio_direction_output(GPIO50_nCAM_EN, 1);
743         gpio_direction_output(GPIO19_GEN1_CAM_RST, 0);
744
745         return 0;
746
747 fail_gpio_cam_rst:
748         gpio_free(GPIO50_nCAM_EN);
749 fail:
750         return err;
751 }
752
753 static int a780_camera_power(struct device *dev, int on)
754 {
755         gpio_set_value(GPIO50_nCAM_EN, !on);
756         return 0;
757 }
758
759 static int a780_camera_reset(struct device *dev)
760 {
761         gpio_set_value(GPIO19_GEN1_CAM_RST, 0);
762         msleep(10);
763         gpio_set_value(GPIO19_GEN1_CAM_RST, 1);
764
765         return 0;
766 }
767
768 struct pxacamera_platform_data a780_pxacamera_platform_data = {
769         .flags  = PXA_CAMERA_MASTER | PXA_CAMERA_DATAWIDTH_8 |
770                 PXA_CAMERA_PCLK_EN | PXA_CAMERA_MCLK_EN,
771         .mclk_10khz = 5000,
772 };
773
774 static struct i2c_board_info a780_camera_i2c_board_info = {
775         I2C_BOARD_INFO("mt9m111", 0x5d),
776 };
777
778 static struct soc_camera_link a780_iclink = {
779         .bus_id         = 0,
780         .flags          = SOCAM_SENSOR_INVERT_PCLK,
781         .i2c_adapter_id = 0,
782         .board_info     = &a780_camera_i2c_board_info,
783         .power          = a780_camera_power,
784         .reset          = a780_camera_reset,
785 };
786
787 static struct platform_device a780_camera = {
788         .name   = "soc-camera-pdrv",
789         .id     = 0,
790         .dev    = {
791                 .platform_data = &a780_iclink,
792         },
793 };
794
795 static struct platform_device *a780_devices[] __initdata = {
796         &a780_gpio_keys,
797 };
798
799 static void __init a780_init(void)
800 {
801         pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
802         pxa2xx_mfp_config(ARRAY_AND_SIZE(gen1_pin_config));
803         pxa2xx_mfp_config(ARRAY_AND_SIZE(a780_pin_config));
804
805         pxa_set_ffuart_info(NULL);
806         pxa_set_btuart_info(NULL);
807         pxa_set_stuart_info(NULL);
808
809         pxa_set_i2c_info(NULL);
810
811         pxa_set_fb_info(NULL, &ezx_fb_info_1);
812
813         pxa_set_keypad_info(&a780_keypad_platform_data);
814
815         if (a780_camera_init() == 0) {
816                 pxa_set_camera_info(&a780_pxacamera_platform_data);
817                 platform_device_register(&a780_camera);
818         }
819
820         platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
821         platform_add_devices(ARRAY_AND_SIZE(a780_devices));
822 }
823
824 MACHINE_START(EZX_A780, "Motorola EZX A780")
825         .atag_offset    = 0x100,
826         .map_io         = pxa27x_map_io,
827         .nr_irqs        = EZX_NR_IRQS,
828         .init_irq       = pxa27x_init_irq,
829         .handle_irq       = pxa27x_handle_irq,
830         .init_time      = pxa_timer_init,
831         .init_machine   = a780_init,
832         .restart        = pxa_restart,
833 MACHINE_END
834 #endif
835
836 #ifdef CONFIG_MACH_EZX_E680
837 /* gpio_keys */
838 static struct gpio_keys_button e680_buttons[] = {
839         [0] = {
840                 .code       = KEY_SCREENLOCK,
841                 .gpio       = GPIO12_E680_LOCK_SWITCH,
842                 .active_low = 0,
843                 .desc       = "E680 lock switch",
844                 .type       = EV_KEY,
845                 .wakeup     = 1,
846         },
847 };
848
849 static struct gpio_keys_platform_data e680_gpio_keys_platform_data = {
850         .buttons  = e680_buttons,
851         .nbuttons = ARRAY_SIZE(e680_buttons),
852 };
853
854 static struct platform_device e680_gpio_keys = {
855         .name = "gpio-keys",
856         .id   = -1,
857         .dev  = {
858                 .platform_data = &e680_gpio_keys_platform_data,
859         },
860 };
861
862 static struct i2c_board_info __initdata e680_i2c_board_info[] = {
863         { I2C_BOARD_INFO("tea5767", 0x81) },
864 };
865
866 static struct platform_device *e680_devices[] __initdata = {
867         &e680_gpio_keys,
868 };
869
870 static void __init e680_init(void)
871 {
872         pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
873         pxa2xx_mfp_config(ARRAY_AND_SIZE(gen1_pin_config));
874         pxa2xx_mfp_config(ARRAY_AND_SIZE(e680_pin_config));
875
876         pxa_set_ffuart_info(NULL);
877         pxa_set_btuart_info(NULL);
878         pxa_set_stuart_info(NULL);
879
880         pxa_set_i2c_info(NULL);
881         i2c_register_board_info(0, ARRAY_AND_SIZE(e680_i2c_board_info));
882
883         pxa_set_fb_info(NULL, &ezx_fb_info_1);
884
885         pxa_set_keypad_info(&e680_keypad_platform_data);
886
887         platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
888         platform_add_devices(ARRAY_AND_SIZE(e680_devices));
889 }
890
891 MACHINE_START(EZX_E680, "Motorola EZX E680")
892         .atag_offset    = 0x100,
893         .map_io         = pxa27x_map_io,
894         .nr_irqs        = EZX_NR_IRQS,
895         .init_irq       = pxa27x_init_irq,
896         .handle_irq       = pxa27x_handle_irq,
897         .init_time      = pxa_timer_init,
898         .init_machine   = e680_init,
899         .restart        = pxa_restart,
900 MACHINE_END
901 #endif
902
903 #ifdef CONFIG_MACH_EZX_A1200
904 /* gpio_keys */
905 static struct gpio_keys_button a1200_buttons[] = {
906         [0] = {
907                 .code       = SW_LID,
908                 .gpio       = GPIO15_A1200_FLIP_LID,
909                 .active_low = 0,
910                 .desc       = "A1200 flip lid",
911                 .type       = EV_SW,
912                 .wakeup     = 1,
913         },
914 };
915
916 static struct gpio_keys_platform_data a1200_gpio_keys_platform_data = {
917         .buttons  = a1200_buttons,
918         .nbuttons = ARRAY_SIZE(a1200_buttons),
919 };
920
921 static struct platform_device a1200_gpio_keys = {
922         .name = "gpio-keys",
923         .id   = -1,
924         .dev  = {
925                 .platform_data = &a1200_gpio_keys_platform_data,
926         },
927 };
928
929 static struct i2c_board_info __initdata a1200_i2c_board_info[] = {
930         { I2C_BOARD_INFO("tea5767", 0x81) },
931 };
932
933 static struct platform_device *a1200_devices[] __initdata = {
934         &a1200_gpio_keys,
935 };
936
937 static void __init a1200_init(void)
938 {
939         pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
940         pxa2xx_mfp_config(ARRAY_AND_SIZE(gen2_pin_config));
941         pxa2xx_mfp_config(ARRAY_AND_SIZE(a1200_pin_config));
942
943         pxa_set_ffuart_info(NULL);
944         pxa_set_btuart_info(NULL);
945         pxa_set_stuart_info(NULL);
946
947         pxa_set_i2c_info(NULL);
948         i2c_register_board_info(0, ARRAY_AND_SIZE(a1200_i2c_board_info));
949
950         pxa_set_fb_info(NULL, &ezx_fb_info_2);
951
952         pxa_set_keypad_info(&a1200_keypad_platform_data);
953
954         platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
955         platform_add_devices(ARRAY_AND_SIZE(a1200_devices));
956 }
957
958 MACHINE_START(EZX_A1200, "Motorola EZX A1200")
959         .atag_offset    = 0x100,
960         .map_io         = pxa27x_map_io,
961         .nr_irqs        = EZX_NR_IRQS,
962         .init_irq       = pxa27x_init_irq,
963         .handle_irq       = pxa27x_handle_irq,
964         .init_time      = pxa_timer_init,
965         .init_machine   = a1200_init,
966         .restart        = pxa_restart,
967 MACHINE_END
968 #endif
969
970 #ifdef CONFIG_MACH_EZX_A910
971 /* gpio_keys */
972 static struct gpio_keys_button a910_buttons[] = {
973         [0] = {
974                 .code       = SW_LID,
975                 .gpio       = GPIO15_A910_FLIP_LID,
976                 .active_low = 0,
977                 .desc       = "A910 flip lid",
978                 .type       = EV_SW,
979                 .wakeup     = 1,
980         },
981 };
982
983 static struct gpio_keys_platform_data a910_gpio_keys_platform_data = {
984         .buttons  = a910_buttons,
985         .nbuttons = ARRAY_SIZE(a910_buttons),
986 };
987
988 static struct platform_device a910_gpio_keys = {
989         .name = "gpio-keys",
990         .id   = -1,
991         .dev  = {
992                 .platform_data = &a910_gpio_keys_platform_data,
993         },
994 };
995
996 /* camera */
997 static int a910_camera_init(void)
998 {
999         int err;
1000
1001         /*
1002          * GPIO50_nCAM_EN is active low
1003          * GPIO28_GEN2_CAM_RST is active on rising edge
1004          */
1005         err = gpio_request(GPIO50_nCAM_EN, "nCAM_EN");
1006         if (err) {
1007                 pr_err("%s: Failed to request nCAM_EN\n", __func__);
1008                 goto fail;
1009         }
1010
1011         err = gpio_request(GPIO28_GEN2_CAM_RST, "CAM_RST");
1012         if (err) {
1013                 pr_err("%s: Failed to request CAM_RST\n", __func__);
1014                 goto fail_gpio_cam_rst;
1015         }
1016
1017         gpio_direction_output(GPIO50_nCAM_EN, 1);
1018         gpio_direction_output(GPIO28_GEN2_CAM_RST, 0);
1019
1020         return 0;
1021
1022 fail_gpio_cam_rst:
1023         gpio_free(GPIO50_nCAM_EN);
1024 fail:
1025         return err;
1026 }
1027
1028 static int a910_camera_power(struct device *dev, int on)
1029 {
1030         gpio_set_value(GPIO50_nCAM_EN, !on);
1031         return 0;
1032 }
1033
1034 static int a910_camera_reset(struct device *dev)
1035 {
1036         gpio_set_value(GPIO28_GEN2_CAM_RST, 0);
1037         msleep(10);
1038         gpio_set_value(GPIO28_GEN2_CAM_RST, 1);
1039
1040         return 0;
1041 }
1042
1043 struct pxacamera_platform_data a910_pxacamera_platform_data = {
1044         .flags  = PXA_CAMERA_MASTER | PXA_CAMERA_DATAWIDTH_8 |
1045                 PXA_CAMERA_PCLK_EN | PXA_CAMERA_MCLK_EN,
1046         .mclk_10khz = 5000,
1047 };
1048
1049 static struct i2c_board_info a910_camera_i2c_board_info = {
1050         I2C_BOARD_INFO("mt9m111", 0x5d),
1051 };
1052
1053 static struct soc_camera_link a910_iclink = {
1054         .bus_id         = 0,
1055         .i2c_adapter_id = 0,
1056         .board_info     = &a910_camera_i2c_board_info,
1057         .power          = a910_camera_power,
1058         .reset          = a910_camera_reset,
1059 };
1060
1061 static struct platform_device a910_camera = {
1062         .name   = "soc-camera-pdrv",
1063         .id     = 0,
1064         .dev    = {
1065                 .platform_data = &a910_iclink,
1066         },
1067 };
1068
1069 /* leds-lp3944 */
1070 static struct lp3944_platform_data a910_lp3944_leds = {
1071         .leds_size = LP3944_LEDS_MAX,
1072         .leds = {
1073                 [0] = {
1074                         .name = "a910:red:",
1075                         .status = LP3944_LED_STATUS_OFF,
1076                         .type = LP3944_LED_TYPE_LED,
1077                 },
1078                 [1] = {
1079                         .name = "a910:green:",
1080                         .status = LP3944_LED_STATUS_OFF,
1081                         .type = LP3944_LED_TYPE_LED,
1082                 },
1083                 [2] {
1084                         .name = "a910:blue:",
1085                         .status = LP3944_LED_STATUS_OFF,
1086                         .type = LP3944_LED_TYPE_LED,
1087                 },
1088                 /* Leds 3 and 4 are used as display power switches */
1089                 [3] = {
1090                         .name = "a910::cli_display",
1091                         .status = LP3944_LED_STATUS_OFF,
1092                         .type = LP3944_LED_TYPE_LED_INVERTED
1093                 },
1094                 [4] = {
1095                         .name = "a910::main_display",
1096                         .status = LP3944_LED_STATUS_ON,
1097                         .type = LP3944_LED_TYPE_LED_INVERTED
1098                 },
1099                 [5] = { .type = LP3944_LED_TYPE_NONE },
1100                 [6] = {
1101                         .name = "a910::torch",
1102                         .status = LP3944_LED_STATUS_OFF,
1103                         .type = LP3944_LED_TYPE_LED,
1104                 },
1105                 [7] = {
1106                         .name = "a910::flash",
1107                         .status = LP3944_LED_STATUS_OFF,
1108                         .type = LP3944_LED_TYPE_LED_INVERTED,
1109                 },
1110         },
1111 };
1112
1113 static struct i2c_board_info __initdata a910_i2c_board_info[] = {
1114         {
1115                 I2C_BOARD_INFO("lp3944", 0x60),
1116                 .platform_data = &a910_lp3944_leds,
1117         },
1118 };
1119
1120 static struct platform_device *a910_devices[] __initdata = {
1121         &a910_gpio_keys,
1122 };
1123
1124 static void __init a910_init(void)
1125 {
1126         pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
1127         pxa2xx_mfp_config(ARRAY_AND_SIZE(gen2_pin_config));
1128         pxa2xx_mfp_config(ARRAY_AND_SIZE(a910_pin_config));
1129
1130         pxa_set_ffuart_info(NULL);
1131         pxa_set_btuart_info(NULL);
1132         pxa_set_stuart_info(NULL);
1133
1134         pxa_set_i2c_info(NULL);
1135         i2c_register_board_info(0, ARRAY_AND_SIZE(a910_i2c_board_info));
1136
1137         pxa_set_fb_info(NULL, &ezx_fb_info_2);
1138
1139         pxa_set_keypad_info(&a910_keypad_platform_data);
1140
1141         if (a910_camera_init() == 0) {
1142                 pxa_set_camera_info(&a910_pxacamera_platform_data);
1143                 platform_device_register(&a910_camera);
1144         }
1145
1146         platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
1147         platform_add_devices(ARRAY_AND_SIZE(a910_devices));
1148 }
1149
1150 MACHINE_START(EZX_A910, "Motorola EZX A910")
1151         .atag_offset    = 0x100,
1152         .map_io         = pxa27x_map_io,
1153         .nr_irqs        = EZX_NR_IRQS,
1154         .init_irq       = pxa27x_init_irq,
1155         .handle_irq       = pxa27x_handle_irq,
1156         .init_time      = pxa_timer_init,
1157         .init_machine   = a910_init,
1158         .restart        = pxa_restart,
1159 MACHINE_END
1160 #endif
1161
1162 #ifdef CONFIG_MACH_EZX_E6
1163 /* gpio_keys */
1164 static struct gpio_keys_button e6_buttons[] = {
1165         [0] = {
1166                 .code       = KEY_SCREENLOCK,
1167                 .gpio       = GPIO15_E6_LOCK_SWITCH,
1168                 .active_low = 0,
1169                 .desc       = "E6 lock switch",
1170                 .type       = EV_KEY,
1171                 .wakeup     = 1,
1172         },
1173 };
1174
1175 static struct gpio_keys_platform_data e6_gpio_keys_platform_data = {
1176         .buttons  = e6_buttons,
1177         .nbuttons = ARRAY_SIZE(e6_buttons),
1178 };
1179
1180 static struct platform_device e6_gpio_keys = {
1181         .name = "gpio-keys",
1182         .id   = -1,
1183         .dev  = {
1184                 .platform_data = &e6_gpio_keys_platform_data,
1185         },
1186 };
1187
1188 static struct i2c_board_info __initdata e6_i2c_board_info[] = {
1189         { I2C_BOARD_INFO("tea5767", 0x81) },
1190 };
1191
1192 static struct platform_device *e6_devices[] __initdata = {
1193         &e6_gpio_keys,
1194 };
1195
1196 static void __init e6_init(void)
1197 {
1198         pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
1199         pxa2xx_mfp_config(ARRAY_AND_SIZE(gen2_pin_config));
1200         pxa2xx_mfp_config(ARRAY_AND_SIZE(e6_pin_config));
1201
1202         pxa_set_ffuart_info(NULL);
1203         pxa_set_btuart_info(NULL);
1204         pxa_set_stuart_info(NULL);
1205
1206         pxa_set_i2c_info(NULL);
1207         i2c_register_board_info(0, ARRAY_AND_SIZE(e6_i2c_board_info));
1208
1209         pxa_set_fb_info(NULL, &ezx_fb_info_2);
1210
1211         pxa_set_keypad_info(&e6_keypad_platform_data);
1212
1213         platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
1214         platform_add_devices(ARRAY_AND_SIZE(e6_devices));
1215 }
1216
1217 MACHINE_START(EZX_E6, "Motorola EZX E6")
1218         .atag_offset    = 0x100,
1219         .map_io         = pxa27x_map_io,
1220         .nr_irqs        = EZX_NR_IRQS,
1221         .init_irq       = pxa27x_init_irq,
1222         .handle_irq       = pxa27x_handle_irq,
1223         .init_time      = pxa_timer_init,
1224         .init_machine   = e6_init,
1225         .restart        = pxa_restart,
1226 MACHINE_END
1227 #endif
1228
1229 #ifdef CONFIG_MACH_EZX_E2
1230 static struct i2c_board_info __initdata e2_i2c_board_info[] = {
1231         { I2C_BOARD_INFO("tea5767", 0x81) },
1232 };
1233
1234 static struct platform_device *e2_devices[] __initdata = {
1235 };
1236
1237 static void __init e2_init(void)
1238 {
1239         pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
1240         pxa2xx_mfp_config(ARRAY_AND_SIZE(gen2_pin_config));
1241         pxa2xx_mfp_config(ARRAY_AND_SIZE(e2_pin_config));
1242
1243         pxa_set_ffuart_info(NULL);
1244         pxa_set_btuart_info(NULL);
1245         pxa_set_stuart_info(NULL);
1246
1247         pxa_set_i2c_info(NULL);
1248         i2c_register_board_info(0, ARRAY_AND_SIZE(e2_i2c_board_info));
1249
1250         pxa_set_fb_info(NULL, &ezx_fb_info_2);
1251
1252         pxa_set_keypad_info(&e2_keypad_platform_data);
1253
1254         platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
1255         platform_add_devices(ARRAY_AND_SIZE(e2_devices));
1256 }
1257
1258 MACHINE_START(EZX_E2, "Motorola EZX E2")
1259         .atag_offset    = 0x100,
1260         .map_io         = pxa27x_map_io,
1261         .nr_irqs        = EZX_NR_IRQS,
1262         .init_irq       = pxa27x_init_irq,
1263         .handle_irq       = pxa27x_handle_irq,
1264         .init_time      = pxa_timer_init,
1265         .init_machine   = e2_init,
1266         .restart        = pxa_restart,
1267 MACHINE_END
1268 #endif