cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

ezx.c (30120B)


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