Merge git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable
[pandora-kernel.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_keys.h>
21
22 #include <asm/setup.h>
23 #include <asm/mach-types.h>
24 #include <asm/mach/arch.h>
25
26 #include <mach/pxa27x.h>
27 #include <mach/pxafb.h>
28 #include <mach/ohci.h>
29 #include <plat/i2c.h>
30 #include <mach/hardware.h>
31 #include <mach/pxa27x_keypad.h>
32
33 #include "devices.h"
34 #include "generic.h"
35
36 #define GPIO12_A780_FLIP_LID            12
37 #define GPIO15_A1200_FLIP_LID           15
38 #define GPIO15_A910_FLIP_LID            15
39 #define GPIO12_E680_LOCK_SWITCH         12
40 #define GPIO15_E6_LOCK_SWITCH           15
41
42 static struct platform_pwm_backlight_data ezx_backlight_data = {
43         .pwm_id         = 0,
44         .max_brightness = 1023,
45         .dft_brightness = 1023,
46         .pwm_period_ns  = 78770,
47 };
48
49 static struct platform_device ezx_backlight_device = {
50         .name           = "pwm-backlight",
51         .dev            = {
52                 .parent = &pxa27x_device_pwm0.dev,
53                 .platform_data = &ezx_backlight_data,
54         },
55 };
56
57 static struct pxafb_mode_info mode_ezx_old = {
58         .pixclock               = 150000,
59         .xres                   = 240,
60         .yres                   = 320,
61         .bpp                    = 16,
62         .hsync_len              = 10,
63         .left_margin            = 20,
64         .right_margin           = 10,
65         .vsync_len              = 2,
66         .upper_margin           = 3,
67         .lower_margin           = 2,
68         .sync                   = 0,
69 };
70
71 static struct pxafb_mach_info ezx_fb_info_1 = {
72         .modes          = &mode_ezx_old,
73         .num_modes      = 1,
74         .lcd_conn       = LCD_COLOR_TFT_16BPP,
75 };
76
77 static struct pxafb_mode_info mode_72r89803y01 = {
78         .pixclock               = 192308,
79         .xres                   = 240,
80         .yres                   = 320,
81         .bpp                    = 32,
82         .depth                  = 18,
83         .hsync_len              = 10,
84         .left_margin            = 20,
85         .right_margin           = 10,
86         .vsync_len              = 2,
87         .upper_margin           = 3,
88         .lower_margin           = 2,
89         .sync                   = 0,
90 };
91
92 static struct pxafb_mach_info ezx_fb_info_2 = {
93         .modes          = &mode_72r89803y01,
94         .num_modes      = 1,
95         .lcd_conn       = LCD_COLOR_TFT_18BPP,
96 };
97
98 static struct platform_device *ezx_devices[] __initdata = {
99         &ezx_backlight_device,
100 };
101
102 static unsigned long ezx_pin_config[] __initdata = {
103         /* PWM backlight */
104         GPIO16_PWM0_OUT,
105
106         /* BTUART */
107         GPIO42_BTUART_RXD,
108         GPIO43_BTUART_TXD,
109         GPIO44_BTUART_CTS,
110         GPIO45_BTUART_RTS,
111
112         /* I2C */
113         GPIO117_I2C_SCL,
114         GPIO118_I2C_SDA,
115
116         /* PCAP SSP */
117         GPIO29_SSP1_SCLK,
118         GPIO25_SSP1_TXD,
119         GPIO26_SSP1_RXD,
120         GPIO24_GPIO,                            /* pcap chip select */
121         GPIO1_GPIO | WAKEUP_ON_EDGE_RISE,       /* pcap interrupt */
122         GPIO4_GPIO | MFP_LPM_DRIVE_HIGH,        /* WDI_AP */
123         GPIO55_GPIO | MFP_LPM_DRIVE_HIGH,       /* SYS_RESTART */
124
125         /* MMC */
126         GPIO32_MMC_CLK,
127         GPIO92_MMC_DAT_0,
128         GPIO109_MMC_DAT_1,
129         GPIO110_MMC_DAT_2,
130         GPIO111_MMC_DAT_3,
131         GPIO112_MMC_CMD,
132         GPIO11_GPIO,                            /* mmc detect */
133
134         /* usb to external transceiver */
135         GPIO34_USB_P2_2,
136         GPIO35_USB_P2_1,
137         GPIO36_USB_P2_4,
138         GPIO39_USB_P2_6,
139         GPIO40_USB_P2_5,
140         GPIO53_USB_P2_3,
141
142         /* usb to Neptune GSM chip */
143         GPIO30_USB_P3_2,
144         GPIO31_USB_P3_6,
145         GPIO90_USB_P3_5,
146         GPIO91_USB_P3_1,
147         GPIO56_USB_P3_4,
148         GPIO113_USB_P3_3,
149 };
150
151 #if defined(CONFIG_MACH_EZX_A780) || defined(CONFIG_MACH_EZX_E680)
152 static unsigned long gen1_pin_config[] __initdata = {
153         /* flip / lockswitch */
154         GPIO12_GPIO | WAKEUP_ON_EDGE_BOTH,
155
156         /* bluetooth (bcm2035) */
157         GPIO14_GPIO | WAKEUP_ON_EDGE_RISE,      /* HOSTWAKE */
158         GPIO48_GPIO,                            /* RESET */
159         GPIO28_GPIO,                            /* WAKEUP */
160
161         /* Neptune handshake */
162         GPIO0_GPIO | WAKEUP_ON_EDGE_FALL,       /* BP_RDY */
163         GPIO57_GPIO | MFP_LPM_DRIVE_HIGH,       /* AP_RDY */
164         GPIO13_GPIO | WAKEUP_ON_EDGE_BOTH,      /* WDI */
165         GPIO3_GPIO | WAKEUP_ON_EDGE_BOTH,       /* WDI2 */
166         GPIO82_GPIO | MFP_LPM_DRIVE_HIGH,       /* RESET */
167         GPIO99_GPIO | MFP_LPM_DRIVE_HIGH,       /* TC_MM_EN */
168
169         /* sound */
170         GPIO52_SSP3_SCLK,
171         GPIO83_SSP3_SFRM,
172         GPIO81_SSP3_TXD,
173         GPIO89_SSP3_RXD,
174
175         /* ssp2 pins to in */
176         GPIO22_GPIO,                            /* SSP2_SCLK */
177         GPIO37_GPIO,                            /* SSP2_SFRM */
178         GPIO38_GPIO,                            /* SSP2_TXD */
179         GPIO88_GPIO,                            /* SSP2_RXD */
180
181         /* camera */
182         GPIO23_CIF_MCLK,
183         GPIO54_CIF_PCLK,
184         GPIO85_CIF_LV,
185         GPIO84_CIF_FV,
186         GPIO27_CIF_DD_0,
187         GPIO114_CIF_DD_1,
188         GPIO51_CIF_DD_2,
189         GPIO115_CIF_DD_3,
190         GPIO95_CIF_DD_4,
191         GPIO94_CIF_DD_5,
192         GPIO17_CIF_DD_6,
193         GPIO108_CIF_DD_7,
194         GPIO50_GPIO,                            /* CAM_EN */
195         GPIO19_GPIO,                            /* CAM_RST */
196
197         /* EMU */
198         GPIO120_GPIO,                           /* EMU_MUX1 */
199         GPIO119_GPIO,                           /* EMU_MUX2 */
200         GPIO86_GPIO,                            /* SNP_INT_CTL */
201         GPIO87_GPIO,                            /* SNP_INT_IN */
202 };
203 #endif
204
205 #if defined(CONFIG_MACH_EZX_A1200) || defined(CONFIG_MACH_EZX_A910) || \
206         defined(CONFIG_MACH_EZX_E2) || defined(CONFIG_MACH_EZX_E6)
207 static unsigned long gen2_pin_config[] __initdata = {
208         /* flip / lockswitch */
209         GPIO15_GPIO | WAKEUP_ON_EDGE_BOTH,
210
211         /* EOC */
212         GPIO10_GPIO | WAKEUP_ON_EDGE_RISE,
213
214         /* bluetooth (bcm2045) */
215         GPIO13_GPIO | WAKEUP_ON_EDGE_RISE,      /* HOSTWAKE */
216         GPIO37_GPIO,                            /* RESET */
217         GPIO57_GPIO,                            /* WAKEUP */
218
219         /* Neptune handshake */
220         GPIO0_GPIO | WAKEUP_ON_EDGE_FALL,       /* BP_RDY */
221         GPIO96_GPIO | MFP_LPM_DRIVE_HIGH,       /* AP_RDY */
222         GPIO3_GPIO | WAKEUP_ON_EDGE_FALL,       /* WDI */
223         GPIO116_GPIO | MFP_LPM_DRIVE_HIGH,      /* RESET */
224         GPIO41_GPIO,                            /* BP_FLASH */
225
226         /* sound */
227         GPIO52_SSP3_SCLK,
228         GPIO83_SSP3_SFRM,
229         GPIO81_SSP3_TXD,
230         GPIO82_SSP3_RXD,
231
232         /* ssp2 pins to in */
233         GPIO22_GPIO,                            /* SSP2_SCLK */
234         GPIO14_GPIO,                            /* SSP2_SFRM */
235         GPIO38_GPIO,                            /* SSP2_TXD */
236         GPIO88_GPIO,                            /* SSP2_RXD */
237
238         /* camera */
239         GPIO23_CIF_MCLK,
240         GPIO54_CIF_PCLK,
241         GPIO85_CIF_LV,
242         GPIO84_CIF_FV,
243         GPIO27_CIF_DD_0,
244         GPIO114_CIF_DD_1,
245         GPIO51_CIF_DD_2,
246         GPIO115_CIF_DD_3,
247         GPIO95_CIF_DD_4,
248         GPIO48_CIF_DD_5,
249         GPIO93_CIF_DD_6,
250         GPIO12_CIF_DD_7,
251         GPIO50_GPIO,                            /* CAM_EN */
252         GPIO28_GPIO,                            /* CAM_RST */
253         GPIO17_GPIO,                            /* CAM_FLASH */
254 };
255 #endif
256
257 #ifdef CONFIG_MACH_EZX_A780
258 static unsigned long a780_pin_config[] __initdata = {
259         /* keypad */
260         GPIO93_KP_DKIN_0 | WAKEUP_ON_LEVEL_HIGH,
261         GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
262         GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
263         GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
264         GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
265         GPIO98_KP_MKIN_4 | WAKEUP_ON_LEVEL_HIGH,
266         GPIO103_KP_MKOUT_0,
267         GPIO104_KP_MKOUT_1,
268         GPIO105_KP_MKOUT_2,
269         GPIO106_KP_MKOUT_3,
270         GPIO107_KP_MKOUT_4,
271
272         /* attenuate sound */
273         GPIO96_GPIO,
274 };
275 #endif
276
277 #ifdef CONFIG_MACH_EZX_E680
278 static unsigned long e680_pin_config[] __initdata = {
279         /* keypad */
280         GPIO93_KP_DKIN_0 | WAKEUP_ON_LEVEL_HIGH,
281         GPIO96_KP_DKIN_3 | WAKEUP_ON_LEVEL_HIGH,
282         GPIO97_KP_DKIN_4 | WAKEUP_ON_LEVEL_HIGH,
283         GPIO98_KP_DKIN_5 | WAKEUP_ON_LEVEL_HIGH,
284         GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
285         GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
286         GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
287         GPIO103_KP_MKOUT_0,
288         GPIO104_KP_MKOUT_1,
289         GPIO105_KP_MKOUT_2,
290         GPIO106_KP_MKOUT_3,
291
292         /* MIDI */
293         GPIO79_GPIO,                            /* VA_SEL_BUL */
294         GPIO80_GPIO,                            /* FLT_SEL_BUL */
295         GPIO78_GPIO,                            /* MIDI_RESET */
296         GPIO33_GPIO,                            /* MIDI_CS */
297         GPIO15_GPIO,                            /* MIDI_IRQ */
298         GPIO49_GPIO,                            /* MIDI_NPWE */
299         GPIO18_GPIO,                            /* MIDI_RDY */
300
301         /* leds */
302         GPIO46_GPIO,
303         GPIO47_GPIO,
304 };
305 #endif
306
307 #ifdef CONFIG_MACH_EZX_A1200
308 static unsigned long a1200_pin_config[] __initdata = {
309         /* keypad */
310         GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
311         GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
312         GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
313         GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
314         GPIO98_KP_MKIN_4 | WAKEUP_ON_LEVEL_HIGH,
315         GPIO103_KP_MKOUT_0,
316         GPIO104_KP_MKOUT_1,
317         GPIO105_KP_MKOUT_2,
318         GPIO106_KP_MKOUT_3,
319         GPIO107_KP_MKOUT_4,
320         GPIO108_KP_MKOUT_5,
321 };
322 #endif
323
324 #ifdef CONFIG_MACH_EZX_A910
325 static unsigned long a910_pin_config[] __initdata = {
326         /* keypad */
327         GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
328         GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
329         GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
330         GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
331         GPIO98_KP_MKIN_4 | WAKEUP_ON_LEVEL_HIGH,
332         GPIO103_KP_MKOUT_0,
333         GPIO104_KP_MKOUT_1,
334         GPIO105_KP_MKOUT_2,
335         GPIO106_KP_MKOUT_3,
336         GPIO107_KP_MKOUT_4,
337         GPIO108_KP_MKOUT_5,
338
339         /* WLAN */
340         GPIO89_GPIO,                            /* RESET */
341         GPIO33_GPIO,                            /* WAKEUP */
342         GPIO94_GPIO | WAKEUP_ON_LEVEL_HIGH,     /* HOSTWAKE */
343
344         /* MMC CS */
345         GPIO20_GPIO,
346 };
347 #endif
348
349 #ifdef CONFIG_MACH_EZX_E2
350 static unsigned long e2_pin_config[] __initdata = {
351         /* keypad */
352         GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
353         GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
354         GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
355         GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
356         GPIO98_KP_MKIN_4 | WAKEUP_ON_LEVEL_HIGH,
357         GPIO103_KP_MKOUT_0,
358         GPIO104_KP_MKOUT_1,
359         GPIO105_KP_MKOUT_2,
360         GPIO106_KP_MKOUT_3,
361         GPIO107_KP_MKOUT_4,
362         GPIO108_KP_MKOUT_5,
363 };
364 #endif
365
366 #ifdef CONFIG_MACH_EZX_E6
367 static unsigned long e6_pin_config[] __initdata = {
368         /* keypad */
369         GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
370         GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
371         GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
372         GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
373         GPIO98_KP_MKIN_4 | WAKEUP_ON_LEVEL_HIGH,
374         GPIO103_KP_MKOUT_0,
375         GPIO104_KP_MKOUT_1,
376         GPIO105_KP_MKOUT_2,
377         GPIO106_KP_MKOUT_3,
378         GPIO107_KP_MKOUT_4,
379         GPIO108_KP_MKOUT_5,
380 };
381 #endif
382
383 /* KEYPAD */
384 #ifdef CONFIG_MACH_EZX_A780
385 static unsigned int a780_key_map[] = {
386         KEY(0, 0, KEY_SEND),
387         KEY(0, 1, KEY_BACK),
388         KEY(0, 2, KEY_END),
389         KEY(0, 3, KEY_PAGEUP),
390         KEY(0, 4, KEY_UP),
391
392         KEY(1, 0, KEY_NUMERIC_1),
393         KEY(1, 1, KEY_NUMERIC_2),
394         KEY(1, 2, KEY_NUMERIC_3),
395         KEY(1, 3, KEY_SELECT),
396         KEY(1, 4, KEY_KPENTER),
397
398         KEY(2, 0, KEY_NUMERIC_4),
399         KEY(2, 1, KEY_NUMERIC_5),
400         KEY(2, 2, KEY_NUMERIC_6),
401         KEY(2, 3, KEY_RECORD),
402         KEY(2, 4, KEY_LEFT),
403
404         KEY(3, 0, KEY_NUMERIC_7),
405         KEY(3, 1, KEY_NUMERIC_8),
406         KEY(3, 2, KEY_NUMERIC_9),
407         KEY(3, 3, KEY_HOME),
408         KEY(3, 4, KEY_RIGHT),
409
410         KEY(4, 0, KEY_NUMERIC_STAR),
411         KEY(4, 1, KEY_NUMERIC_0),
412         KEY(4, 2, KEY_NUMERIC_POUND),
413         KEY(4, 3, KEY_PAGEDOWN),
414         KEY(4, 4, KEY_DOWN),
415 };
416
417 static struct pxa27x_keypad_platform_data a780_keypad_platform_data = {
418         .matrix_key_rows = 5,
419         .matrix_key_cols = 5,
420         .matrix_key_map = a780_key_map,
421         .matrix_key_map_size = ARRAY_SIZE(a780_key_map),
422
423         .direct_key_map = { KEY_CAMERA },
424         .direct_key_num = 1,
425
426         .debounce_interval = 30,
427 };
428 #endif /* CONFIG_MACH_EZX_A780 */
429
430 #ifdef CONFIG_MACH_EZX_E680
431 static unsigned int e680_key_map[] = {
432         KEY(0, 0, KEY_UP),
433         KEY(0, 1, KEY_RIGHT),
434         KEY(0, 2, KEY_RESERVED),
435         KEY(0, 3, KEY_SEND),
436
437         KEY(1, 0, KEY_DOWN),
438         KEY(1, 1, KEY_LEFT),
439         KEY(1, 2, KEY_PAGEUP),
440         KEY(1, 3, KEY_PAGEDOWN),
441
442         KEY(2, 0, KEY_RESERVED),
443         KEY(2, 1, KEY_RESERVED),
444         KEY(2, 2, KEY_RESERVED),
445         KEY(2, 3, KEY_KPENTER),
446 };
447
448 static struct pxa27x_keypad_platform_data e680_keypad_platform_data = {
449         .matrix_key_rows = 3,
450         .matrix_key_cols = 4,
451         .matrix_key_map = e680_key_map,
452         .matrix_key_map_size = ARRAY_SIZE(e680_key_map),
453
454         .direct_key_map = {
455                 KEY_CAMERA,
456                 KEY_RESERVED,
457                 KEY_RESERVED,
458                 KEY_F1,
459                 KEY_CANCEL,
460                 KEY_F2,
461         },
462         .direct_key_num = 6,
463
464         .debounce_interval = 30,
465 };
466 #endif /* CONFIG_MACH_EZX_E680 */
467
468 #ifdef CONFIG_MACH_EZX_A1200
469 static unsigned int a1200_key_map[] = {
470         KEY(0, 0, KEY_RESERVED),
471         KEY(0, 1, KEY_RIGHT),
472         KEY(0, 2, KEY_PAGEDOWN),
473         KEY(0, 3, KEY_RESERVED),
474         KEY(0, 4, KEY_RESERVED),
475         KEY(0, 5, KEY_RESERVED),
476
477         KEY(1, 0, KEY_RESERVED),
478         KEY(1, 1, KEY_DOWN),
479         KEY(1, 2, KEY_CAMERA),
480         KEY(1, 3, KEY_RESERVED),
481         KEY(1, 4, KEY_RESERVED),
482         KEY(1, 5, KEY_RESERVED),
483
484         KEY(2, 0, KEY_RESERVED),
485         KEY(2, 1, KEY_KPENTER),
486         KEY(2, 2, KEY_RECORD),
487         KEY(2, 3, KEY_RESERVED),
488         KEY(2, 4, KEY_RESERVED),
489         KEY(2, 5, KEY_SELECT),
490
491         KEY(3, 0, KEY_RESERVED),
492         KEY(3, 1, KEY_UP),
493         KEY(3, 2, KEY_SEND),
494         KEY(3, 3, KEY_RESERVED),
495         KEY(3, 4, KEY_RESERVED),
496         KEY(3, 5, KEY_RESERVED),
497
498         KEY(4, 0, KEY_RESERVED),
499         KEY(4, 1, KEY_LEFT),
500         KEY(4, 2, KEY_PAGEUP),
501         KEY(4, 3, KEY_RESERVED),
502         KEY(4, 4, KEY_RESERVED),
503         KEY(4, 5, KEY_RESERVED),
504 };
505
506 static struct pxa27x_keypad_platform_data a1200_keypad_platform_data = {
507         .matrix_key_rows = 5,
508         .matrix_key_cols = 6,
509         .matrix_key_map = a1200_key_map,
510         .matrix_key_map_size = ARRAY_SIZE(a1200_key_map),
511
512         .debounce_interval = 30,
513 };
514 #endif /* CONFIG_MACH_EZX_A1200 */
515
516 #ifdef CONFIG_MACH_EZX_E6
517 static unsigned int e6_key_map[] = {
518         KEY(0, 0, KEY_RESERVED),
519         KEY(0, 1, KEY_RIGHT),
520         KEY(0, 2, KEY_PAGEDOWN),
521         KEY(0, 3, KEY_RESERVED),
522         KEY(0, 4, KEY_RESERVED),
523         KEY(0, 5, KEY_NEXTSONG),
524
525         KEY(1, 0, KEY_RESERVED),
526         KEY(1, 1, KEY_DOWN),
527         KEY(1, 2, KEY_PROG1),
528         KEY(1, 3, KEY_RESERVED),
529         KEY(1, 4, KEY_RESERVED),
530         KEY(1, 5, KEY_RESERVED),
531
532         KEY(2, 0, KEY_RESERVED),
533         KEY(2, 1, KEY_ENTER),
534         KEY(2, 2, KEY_CAMERA),
535         KEY(2, 3, KEY_RESERVED),
536         KEY(2, 4, KEY_RESERVED),
537         KEY(2, 5, KEY_WWW),
538
539         KEY(3, 0, KEY_RESERVED),
540         KEY(3, 1, KEY_UP),
541         KEY(3, 2, KEY_SEND),
542         KEY(3, 3, KEY_RESERVED),
543         KEY(3, 4, KEY_RESERVED),
544         KEY(3, 5, KEY_PLAYPAUSE),
545
546         KEY(4, 0, KEY_RESERVED),
547         KEY(4, 1, KEY_LEFT),
548         KEY(4, 2, KEY_PAGEUP),
549         KEY(4, 3, KEY_RESERVED),
550         KEY(4, 4, KEY_RESERVED),
551         KEY(4, 5, KEY_PREVIOUSSONG),
552 };
553
554 static struct pxa27x_keypad_platform_data e6_keypad_platform_data = {
555         .matrix_key_rows = 5,
556         .matrix_key_cols = 6,
557         .matrix_key_map = e6_key_map,
558         .matrix_key_map_size = ARRAY_SIZE(e6_key_map),
559
560         .debounce_interval = 30,
561 };
562 #endif /* CONFIG_MACH_EZX_E6 */
563
564 #ifdef CONFIG_MACH_EZX_A910
565 static unsigned int a910_key_map[] = {
566         KEY(0, 0, KEY_NUMERIC_6),
567         KEY(0, 1, KEY_RIGHT),
568         KEY(0, 2, KEY_PAGEDOWN),
569         KEY(0, 3, KEY_KPENTER),
570         KEY(0, 4, KEY_NUMERIC_5),
571         KEY(0, 5, KEY_CAMERA),
572
573         KEY(1, 0, KEY_NUMERIC_8),
574         KEY(1, 1, KEY_DOWN),
575         KEY(1, 2, KEY_RESERVED),
576         KEY(1, 3, KEY_F1), /* Left SoftKey */
577         KEY(1, 4, KEY_NUMERIC_STAR),
578         KEY(1, 5, KEY_RESERVED),
579
580         KEY(2, 0, KEY_NUMERIC_7),
581         KEY(2, 1, KEY_NUMERIC_9),
582         KEY(2, 2, KEY_RECORD),
583         KEY(2, 3, KEY_F2), /* Right SoftKey */
584         KEY(2, 4, KEY_BACK),
585         KEY(2, 5, KEY_SELECT),
586
587         KEY(3, 0, KEY_NUMERIC_2),
588         KEY(3, 1, KEY_UP),
589         KEY(3, 2, KEY_SEND),
590         KEY(3, 3, KEY_NUMERIC_0),
591         KEY(3, 4, KEY_NUMERIC_1),
592         KEY(3, 5, KEY_RECORD),
593
594         KEY(4, 0, KEY_NUMERIC_4),
595         KEY(4, 1, KEY_LEFT),
596         KEY(4, 2, KEY_PAGEUP),
597         KEY(4, 3, KEY_NUMERIC_POUND),
598         KEY(4, 4, KEY_NUMERIC_3),
599         KEY(4, 5, KEY_RESERVED),
600 };
601
602 static struct pxa27x_keypad_platform_data a910_keypad_platform_data = {
603         .matrix_key_rows = 5,
604         .matrix_key_cols = 6,
605         .matrix_key_map = a910_key_map,
606         .matrix_key_map_size = ARRAY_SIZE(a910_key_map),
607
608         .debounce_interval = 30,
609 };
610 #endif /* CONFIG_MACH_EZX_A910 */
611
612 #ifdef CONFIG_MACH_EZX_E2
613 static unsigned int e2_key_map[] = {
614         KEY(0, 0, KEY_NUMERIC_6),
615         KEY(0, 1, KEY_RIGHT),
616         KEY(0, 2, KEY_NUMERIC_9),
617         KEY(0, 3, KEY_NEXTSONG),
618         KEY(0, 4, KEY_NUMERIC_5),
619         KEY(0, 5, KEY_F1), /* Left SoftKey */
620
621         KEY(1, 0, KEY_NUMERIC_8),
622         KEY(1, 1, KEY_DOWN),
623         KEY(1, 2, KEY_RESERVED),
624         KEY(1, 3, KEY_PAGEUP),
625         KEY(1, 4, KEY_NUMERIC_STAR),
626         KEY(1, 5, KEY_F2), /* Right SoftKey */
627
628         KEY(2, 0, KEY_NUMERIC_7),
629         KEY(2, 1, KEY_KPENTER),
630         KEY(2, 2, KEY_RECORD),
631         KEY(2, 3, KEY_PAGEDOWN),
632         KEY(2, 4, KEY_BACK),
633         KEY(2, 5, KEY_NUMERIC_0),
634
635         KEY(3, 0, KEY_NUMERIC_2),
636         KEY(3, 1, KEY_UP),
637         KEY(3, 2, KEY_SEND),
638         KEY(3, 3, KEY_PLAYPAUSE),
639         KEY(3, 4, KEY_NUMERIC_1),
640         KEY(3, 5, KEY_SOUND), /* Music SoftKey */
641
642         KEY(4, 0, KEY_NUMERIC_4),
643         KEY(4, 1, KEY_LEFT),
644         KEY(4, 2, KEY_NUMERIC_POUND),
645         KEY(4, 3, KEY_PREVIOUSSONG),
646         KEY(4, 4, KEY_NUMERIC_3),
647         KEY(4, 5, KEY_RESERVED),
648 };
649
650 static struct pxa27x_keypad_platform_data e2_keypad_platform_data = {
651         .matrix_key_rows = 5,
652         .matrix_key_cols = 6,
653         .matrix_key_map = e2_key_map,
654         .matrix_key_map_size = ARRAY_SIZE(e2_key_map),
655
656         .debounce_interval = 30,
657 };
658 #endif /* CONFIG_MACH_EZX_E2 */
659
660 #ifdef CONFIG_MACH_EZX_A780
661 /* gpio_keys */
662 static struct gpio_keys_button a780_buttons[] = {
663         [0] = {
664                 .code       = SW_LID,
665                 .gpio       = GPIO12_A780_FLIP_LID,
666                 .active_low = 0,
667                 .desc       = "A780 flip lid",
668                 .type       = EV_SW,
669                 .wakeup     = 1,
670         },
671 };
672
673 static struct gpio_keys_platform_data a780_gpio_keys_platform_data = {
674         .buttons  = a780_buttons,
675         .nbuttons = ARRAY_SIZE(a780_buttons),
676 };
677
678 static struct platform_device a780_gpio_keys = {
679         .name = "gpio-keys",
680         .id   = -1,
681         .dev  = {
682                 .platform_data = &a780_gpio_keys_platform_data,
683         },
684 };
685
686 static struct platform_device *a780_devices[] __initdata = {
687         &a780_gpio_keys,
688 };
689
690 static void __init a780_init(void)
691 {
692         pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
693         pxa2xx_mfp_config(ARRAY_AND_SIZE(gen1_pin_config));
694         pxa2xx_mfp_config(ARRAY_AND_SIZE(a780_pin_config));
695
696         pxa_set_i2c_info(NULL);
697
698         set_pxa_fb_info(&ezx_fb_info_1);
699
700         pxa_set_keypad_info(&a780_keypad_platform_data);
701
702         platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
703         platform_add_devices(ARRAY_AND_SIZE(a780_devices));
704 }
705
706 MACHINE_START(EZX_A780, "Motorola EZX A780")
707         .phys_io        = 0x40000000,
708         .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
709         .boot_params    = 0xa0000100,
710         .map_io         = pxa_map_io,
711         .init_irq       = pxa27x_init_irq,
712         .timer          = &pxa_timer,
713         .init_machine   = a780_init,
714 MACHINE_END
715 #endif
716
717 #ifdef CONFIG_MACH_EZX_E680
718 /* gpio_keys */
719 static struct gpio_keys_button e680_buttons[] = {
720         [0] = {
721                 .code       = KEY_SCREENLOCK,
722                 .gpio       = GPIO12_E680_LOCK_SWITCH,
723                 .active_low = 0,
724                 .desc       = "E680 lock switch",
725                 .type       = EV_KEY,
726                 .wakeup     = 1,
727         },
728 };
729
730 static struct gpio_keys_platform_data e680_gpio_keys_platform_data = {
731         .buttons  = e680_buttons,
732         .nbuttons = ARRAY_SIZE(e680_buttons),
733 };
734
735 static struct platform_device e680_gpio_keys = {
736         .name = "gpio-keys",
737         .id   = -1,
738         .dev  = {
739                 .platform_data = &e680_gpio_keys_platform_data,
740         },
741 };
742
743 static struct i2c_board_info __initdata e680_i2c_board_info[] = {
744         { I2C_BOARD_INFO("tea5767", 0x81) },
745 };
746
747 static struct platform_device *e680_devices[] __initdata = {
748         &e680_gpio_keys,
749 };
750
751 static void __init e680_init(void)
752 {
753         pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
754         pxa2xx_mfp_config(ARRAY_AND_SIZE(gen1_pin_config));
755         pxa2xx_mfp_config(ARRAY_AND_SIZE(e680_pin_config));
756
757         pxa_set_i2c_info(NULL);
758         i2c_register_board_info(0, ARRAY_AND_SIZE(e680_i2c_board_info));
759
760         set_pxa_fb_info(&ezx_fb_info_1);
761
762         pxa_set_keypad_info(&e680_keypad_platform_data);
763
764         platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
765         platform_add_devices(ARRAY_AND_SIZE(e680_devices));
766 }
767
768 MACHINE_START(EZX_E680, "Motorola EZX E680")
769         .phys_io        = 0x40000000,
770         .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
771         .boot_params    = 0xa0000100,
772         .map_io         = pxa_map_io,
773         .init_irq       = pxa27x_init_irq,
774         .timer          = &pxa_timer,
775         .init_machine   = e680_init,
776 MACHINE_END
777 #endif
778
779 #ifdef CONFIG_MACH_EZX_A1200
780 /* gpio_keys */
781 static struct gpio_keys_button a1200_buttons[] = {
782         [0] = {
783                 .code       = SW_LID,
784                 .gpio       = GPIO15_A1200_FLIP_LID,
785                 .active_low = 0,
786                 .desc       = "A1200 flip lid",
787                 .type       = EV_SW,
788                 .wakeup     = 1,
789         },
790 };
791
792 static struct gpio_keys_platform_data a1200_gpio_keys_platform_data = {
793         .buttons  = a1200_buttons,
794         .nbuttons = ARRAY_SIZE(a1200_buttons),
795 };
796
797 static struct platform_device a1200_gpio_keys = {
798         .name = "gpio-keys",
799         .id   = -1,
800         .dev  = {
801                 .platform_data = &a1200_gpio_keys_platform_data,
802         },
803 };
804
805 static struct i2c_board_info __initdata a1200_i2c_board_info[] = {
806         { I2C_BOARD_INFO("tea5767", 0x81) },
807 };
808
809 static struct platform_device *a1200_devices[] __initdata = {
810         &a1200_gpio_keys,
811 };
812
813 static void __init a1200_init(void)
814 {
815         pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
816         pxa2xx_mfp_config(ARRAY_AND_SIZE(gen2_pin_config));
817         pxa2xx_mfp_config(ARRAY_AND_SIZE(a1200_pin_config));
818
819         pxa_set_i2c_info(NULL);
820         i2c_register_board_info(0, ARRAY_AND_SIZE(a1200_i2c_board_info));
821
822         set_pxa_fb_info(&ezx_fb_info_2);
823
824         pxa_set_keypad_info(&a1200_keypad_platform_data);
825
826         platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
827         platform_add_devices(ARRAY_AND_SIZE(a1200_devices));
828 }
829
830 MACHINE_START(EZX_A1200, "Motorola EZX A1200")
831         .phys_io        = 0x40000000,
832         .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
833         .boot_params    = 0xa0000100,
834         .map_io         = pxa_map_io,
835         .init_irq       = pxa27x_init_irq,
836         .timer          = &pxa_timer,
837         .init_machine   = a1200_init,
838 MACHINE_END
839 #endif
840
841 #ifdef CONFIG_MACH_EZX_A910
842 /* gpio_keys */
843 static struct gpio_keys_button a910_buttons[] = {
844         [0] = {
845                 .code       = SW_LID,
846                 .gpio       = GPIO15_A910_FLIP_LID,
847                 .active_low = 0,
848                 .desc       = "A910 flip lid",
849                 .type       = EV_SW,
850                 .wakeup     = 1,
851         },
852 };
853
854 static struct gpio_keys_platform_data a910_gpio_keys_platform_data = {
855         .buttons  = a910_buttons,
856         .nbuttons = ARRAY_SIZE(a910_buttons),
857 };
858
859 static struct platform_device a910_gpio_keys = {
860         .name = "gpio-keys",
861         .id   = -1,
862         .dev  = {
863                 .platform_data = &a910_gpio_keys_platform_data,
864         },
865 };
866
867 static struct platform_device *a910_devices[] __initdata = {
868         &a910_gpio_keys,
869 };
870
871 static void __init a910_init(void)
872 {
873         pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
874         pxa2xx_mfp_config(ARRAY_AND_SIZE(gen2_pin_config));
875         pxa2xx_mfp_config(ARRAY_AND_SIZE(a910_pin_config));
876
877         pxa_set_i2c_info(NULL);
878
879         set_pxa_fb_info(&ezx_fb_info_2);
880
881         pxa_set_keypad_info(&a910_keypad_platform_data);
882
883         platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
884         platform_add_devices(ARRAY_AND_SIZE(a910_devices));
885 }
886
887 MACHINE_START(EZX_A910, "Motorola EZX A910")
888         .phys_io        = 0x40000000,
889         .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
890         .boot_params    = 0xa0000100,
891         .map_io         = pxa_map_io,
892         .init_irq       = pxa27x_init_irq,
893         .timer          = &pxa_timer,
894         .init_machine   = a910_init,
895 MACHINE_END
896 #endif
897
898 #ifdef CONFIG_MACH_EZX_E6
899 /* gpio_keys */
900 static struct gpio_keys_button e6_buttons[] = {
901         [0] = {
902                 .code       = KEY_SCREENLOCK,
903                 .gpio       = GPIO15_E6_LOCK_SWITCH,
904                 .active_low = 0,
905                 .desc       = "E6 lock switch",
906                 .type       = EV_KEY,
907                 .wakeup     = 1,
908         },
909 };
910
911 static struct gpio_keys_platform_data e6_gpio_keys_platform_data = {
912         .buttons  = e6_buttons,
913         .nbuttons = ARRAY_SIZE(e6_buttons),
914 };
915
916 static struct platform_device e6_gpio_keys = {
917         .name = "gpio-keys",
918         .id   = -1,
919         .dev  = {
920                 .platform_data = &e6_gpio_keys_platform_data,
921         },
922 };
923
924 static struct i2c_board_info __initdata e6_i2c_board_info[] = {
925         { I2C_BOARD_INFO("tea5767", 0x81) },
926 };
927
928 static struct platform_device *e6_devices[] __initdata = {
929         &e6_gpio_keys,
930 };
931
932 static void __init e6_init(void)
933 {
934         pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
935         pxa2xx_mfp_config(ARRAY_AND_SIZE(gen2_pin_config));
936         pxa2xx_mfp_config(ARRAY_AND_SIZE(e6_pin_config));
937
938         pxa_set_i2c_info(NULL);
939         i2c_register_board_info(0, ARRAY_AND_SIZE(e6_i2c_board_info));
940
941         set_pxa_fb_info(&ezx_fb_info_2);
942
943         pxa_set_keypad_info(&e6_keypad_platform_data);
944
945         platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
946         platform_add_devices(ARRAY_AND_SIZE(e6_devices));
947 }
948
949 MACHINE_START(EZX_E6, "Motorola EZX E6")
950         .phys_io        = 0x40000000,
951         .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
952         .boot_params    = 0xa0000100,
953         .map_io         = pxa_map_io,
954         .init_irq       = pxa27x_init_irq,
955         .timer          = &pxa_timer,
956         .init_machine   = e6_init,
957 MACHINE_END
958 #endif
959
960 #ifdef CONFIG_MACH_EZX_E2
961 static struct i2c_board_info __initdata e2_i2c_board_info[] = {
962         { I2C_BOARD_INFO("tea5767", 0x81) },
963 };
964
965 static struct platform_device *e2_devices[] __initdata = {
966 };
967
968 static void __init e2_init(void)
969 {
970         pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
971         pxa2xx_mfp_config(ARRAY_AND_SIZE(gen2_pin_config));
972         pxa2xx_mfp_config(ARRAY_AND_SIZE(e2_pin_config));
973
974         pxa_set_i2c_info(NULL);
975         i2c_register_board_info(0, ARRAY_AND_SIZE(e2_i2c_board_info));
976
977         set_pxa_fb_info(&ezx_fb_info_2);
978
979         pxa_set_keypad_info(&e2_keypad_platform_data);
980
981         platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
982         platform_add_devices(ARRAY_AND_SIZE(e2_devices));
983 }
984
985 MACHINE_START(EZX_E2, "Motorola EZX E2")
986         .phys_io        = 0x40000000,
987         .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
988         .boot_params    = 0xa0000100,
989         .map_io         = pxa_map_io,
990         .init_irq       = pxa27x_init_irq,
991         .timer          = &pxa_timer,
992         .init_machine   = e2_init,
993 MACHINE_END
994 #endif