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