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