1/* 2 * linux/arch/arm/mach-pxa/z2.c 3 * 4 * Support for the Zipit Z2 Handheld device. 5 * 6 * Copyright (C) 2009-2010 Marek Vasut <marek.vasut@gmail.com> 7 * 8 * Based on research and code by: Ken McGuire 9 * Based on mainstone.c as modified for the Zipit Z2. 10 * 11 * This program is free software; you can redistribute it and/or modify 12 * it under the terms of the GNU General Public License version 2 as 13 * published by the Free Software Foundation. 14 */ 15 16#include <linux/platform_device.h> 17#include <linux/mtd/mtd.h> 18#include <linux/mtd/partitions.h> 19#include <linux/pwm.h> 20#include <linux/pwm_backlight.h> 21#include <linux/z2_battery.h> 22#include <linux/dma-mapping.h> 23#include <linux/spi/spi.h> 24#include <linux/spi/pxa2xx_spi.h> 25#include <linux/spi/libertas_spi.h> 26#include <linux/spi/lms283gf05.h> 27#include <linux/power_supply.h> 28#include <linux/mtd/physmap.h> 29#include <linux/gpio.h> 30#include <linux/gpio_keys.h> 31#include <linux/delay.h> 32#include <linux/regulator/machine.h> 33#include <linux/i2c/pxa-i2c.h> 34 35#include <asm/mach-types.h> 36#include <asm/mach/arch.h> 37 38#include <mach/pxa27x.h> 39#include <mach/mfp-pxa27x.h> 40#include <mach/z2.h> 41#include <linux/platform_data/video-pxafb.h> 42#include <linux/platform_data/mmc-pxamci.h> 43#include <linux/platform_data/keypad-pxa27x.h> 44#include <mach/pm.h> 45 46#include "generic.h" 47#include "devices.h" 48 49/****************************************************************************** 50 * Pin configuration 51 ******************************************************************************/ 52static unsigned long z2_pin_config[] = { 53 54 /* LCD - 16bpp Active TFT */ 55 GPIO58_LCD_LDD_0, 56 GPIO59_LCD_LDD_1, 57 GPIO60_LCD_LDD_2, 58 GPIO61_LCD_LDD_3, 59 GPIO62_LCD_LDD_4, 60 GPIO63_LCD_LDD_5, 61 GPIO64_LCD_LDD_6, 62 GPIO65_LCD_LDD_7, 63 GPIO66_LCD_LDD_8, 64 GPIO67_LCD_LDD_9, 65 GPIO68_LCD_LDD_10, 66 GPIO69_LCD_LDD_11, 67 GPIO70_LCD_LDD_12, 68 GPIO71_LCD_LDD_13, 69 GPIO72_LCD_LDD_14, 70 GPIO73_LCD_LDD_15, 71 GPIO74_LCD_FCLK, 72 GPIO75_LCD_LCLK, 73 GPIO76_LCD_PCLK, 74 GPIO77_LCD_BIAS, 75 GPIO19_GPIO, /* LCD reset */ 76 GPIO88_GPIO, /* LCD chipselect */ 77 78 /* PWM */ 79 GPIO115_PWM1_OUT, /* Keypad Backlight */ 80 GPIO11_PWM2_OUT, /* LCD Backlight */ 81 82 /* MMC */ 83 GPIO32_MMC_CLK, 84 GPIO112_MMC_CMD, 85 GPIO92_MMC_DAT_0, 86 GPIO109_MMC_DAT_1, 87 GPIO110_MMC_DAT_2, 88 GPIO111_MMC_DAT_3, 89 GPIO96_GPIO, /* SD detect */ 90 91 /* STUART */ 92 GPIO46_STUART_RXD, 93 GPIO47_STUART_TXD, 94 95 /* Keypad */ 96 GPIO100_KP_MKIN_0, 97 GPIO101_KP_MKIN_1, 98 GPIO102_KP_MKIN_2, 99 GPIO34_KP_MKIN_3, 100 GPIO38_KP_MKIN_4, 101 GPIO16_KP_MKIN_5, 102 GPIO17_KP_MKIN_6, 103 GPIO103_KP_MKOUT_0, 104 GPIO104_KP_MKOUT_1, 105 GPIO105_KP_MKOUT_2, 106 GPIO106_KP_MKOUT_3, 107 GPIO107_KP_MKOUT_4, 108 GPIO108_KP_MKOUT_5, 109 GPIO35_KP_MKOUT_6, 110 GPIO41_KP_MKOUT_7, 111 112 /* I2C */ 113 GPIO117_I2C_SCL, 114 GPIO118_I2C_SDA, 115 116 /* SSP1 */ 117 GPIO23_SSP1_SCLK, /* SSP1_SCK */ 118 GPIO25_SSP1_TXD, /* SSP1_TXD */ 119 GPIO26_SSP1_RXD, /* SSP1_RXD */ 120 121 /* SSP2 */ 122 GPIO22_SSP2_SCLK, /* SSP2_SCK */ 123 GPIO13_SSP2_TXD, /* SSP2_TXD */ 124 GPIO40_SSP2_RXD, /* SSP2_RXD */ 125 126 /* LEDs */ 127 GPIO10_GPIO, /* WiFi LED */ 128 GPIO83_GPIO, /* Charging LED */ 129 GPIO85_GPIO, /* Charged LED */ 130 131 /* I2S */ 132 GPIO28_I2S_BITCLK_OUT, 133 GPIO29_I2S_SDATA_IN, 134 GPIO30_I2S_SDATA_OUT, 135 GPIO31_I2S_SYNC, 136 GPIO113_I2S_SYSCLK, 137 138 /* MISC */ 139 GPIO0_GPIO, /* AC power detect */ 140 GPIO1_GPIO, /* Power button */ 141 GPIO37_GPIO, /* Headphone detect */ 142 GPIO98_GPIO, /* Lid switch */ 143 GPIO14_GPIO, /* WiFi Power */ 144 GPIO24_GPIO, /* WiFi CS */ 145 GPIO36_GPIO, /* WiFi IRQ */ 146 GPIO88_GPIO, /* LCD CS */ 147}; 148 149/****************************************************************************** 150 * NOR Flash 151 ******************************************************************************/ 152#if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE) 153static struct resource z2_flash_resource = { 154 .start = PXA_CS0_PHYS, 155 .end = PXA_CS0_PHYS + SZ_8M - 1, 156 .flags = IORESOURCE_MEM, 157}; 158 159static struct mtd_partition z2_flash_parts[] = { 160 { 161 .name = "U-Boot Bootloader", 162 .offset = 0x0, 163 .size = 0x40000, 164 }, { 165 .name = "U-Boot Environment", 166 .offset = 0x40000, 167 .size = 0x20000, 168 }, { 169 .name = "Flash", 170 .offset = 0x60000, 171 .size = MTDPART_SIZ_FULL, 172 }, 173}; 174 175static struct physmap_flash_data z2_flash_data = { 176 .width = 2, 177 .parts = z2_flash_parts, 178 .nr_parts = ARRAY_SIZE(z2_flash_parts), 179}; 180 181static struct platform_device z2_flash = { 182 .name = "physmap-flash", 183 .id = -1, 184 .resource = &z2_flash_resource, 185 .num_resources = 1, 186 .dev = { 187 .platform_data = &z2_flash_data, 188 }, 189}; 190 191static void __init z2_nor_init(void) 192{ 193 platform_device_register(&z2_flash); 194} 195#else 196static inline void z2_nor_init(void) {} 197#endif 198 199/****************************************************************************** 200 * Backlight 201 ******************************************************************************/ 202#if defined(CONFIG_BACKLIGHT_PWM) || defined(CONFIG_BACKLIGHT_PWM_MODULE) 203static struct pwm_lookup z2_pwm_lookup[] = { 204 PWM_LOOKUP("pxa27x-pwm.1", 0, "pwm-backlight.0", NULL, 1260320, 205 PWM_POLARITY_NORMAL), 206 PWM_LOOKUP("pxa27x-pwm.0", 1, "pwm-backlight.1", NULL, 1260320, 207 PWM_POLARITY_NORMAL), 208}; 209 210static struct platform_pwm_backlight_data z2_backlight_data[] = { 211 [0] = { 212 /* Keypad Backlight */ 213 .max_brightness = 1023, 214 .dft_brightness = 0, 215 .enable_gpio = -1, 216 }, 217 [1] = { 218 /* LCD Backlight */ 219 .max_brightness = 1023, 220 .dft_brightness = 512, 221 .enable_gpio = -1, 222 }, 223}; 224 225static struct platform_device z2_backlight_devices[2] = { 226 { 227 .name = "pwm-backlight", 228 .id = 0, 229 .dev = { 230 .platform_data = &z2_backlight_data[1], 231 }, 232 }, 233 { 234 .name = "pwm-backlight", 235 .id = 1, 236 .dev = { 237 .platform_data = &z2_backlight_data[0], 238 }, 239 }, 240}; 241static void __init z2_pwm_init(void) 242{ 243 pwm_add_table(z2_pwm_lookup, ARRAY_SIZE(z2_pwm_lookup)); 244 platform_device_register(&z2_backlight_devices[0]); 245 platform_device_register(&z2_backlight_devices[1]); 246} 247#else 248static inline void z2_pwm_init(void) {} 249#endif 250 251/****************************************************************************** 252 * Framebuffer 253 ******************************************************************************/ 254#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE) 255static struct pxafb_mode_info z2_lcd_modes[] = { 256{ 257 .pixclock = 192000, 258 .xres = 240, 259 .yres = 320, 260 .bpp = 16, 261 262 .left_margin = 4, 263 .right_margin = 8, 264 .upper_margin = 4, 265 .lower_margin = 8, 266 267 .hsync_len = 4, 268 .vsync_len = 4, 269}, 270}; 271 272static struct pxafb_mach_info z2_lcd_screen = { 273 .modes = z2_lcd_modes, 274 .num_modes = ARRAY_SIZE(z2_lcd_modes), 275 .lcd_conn = LCD_COLOR_TFT_16BPP | LCD_BIAS_ACTIVE_LOW | 276 LCD_ALTERNATE_MAPPING, 277}; 278 279static void __init z2_lcd_init(void) 280{ 281 pxa_set_fb_info(NULL, &z2_lcd_screen); 282} 283#else 284static inline void z2_lcd_init(void) {} 285#endif 286 287/****************************************************************************** 288 * SD/MMC card controller 289 ******************************************************************************/ 290#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE) 291static struct pxamci_platform_data z2_mci_platform_data = { 292 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, 293 .gpio_card_detect = GPIO96_ZIPITZ2_SD_DETECT, 294 .gpio_power = -1, 295 .gpio_card_ro = -1, 296 .detect_delay_ms = 200, 297}; 298 299static void __init z2_mmc_init(void) 300{ 301 pxa_set_mci_info(&z2_mci_platform_data); 302} 303#else 304static inline void z2_mmc_init(void) {} 305#endif 306 307/****************************************************************************** 308 * LEDs 309 ******************************************************************************/ 310#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE) 311struct gpio_led z2_gpio_leds[] = { 312{ 313 .name = "z2:green:wifi", 314 .default_trigger = "none", 315 .gpio = GPIO10_ZIPITZ2_LED_WIFI, 316 .active_low = 1, 317}, { 318 .name = "z2:green:charged", 319 .default_trigger = "mmc0", 320 .gpio = GPIO85_ZIPITZ2_LED_CHARGED, 321 .active_low = 1, 322}, { 323 .name = "z2:amber:charging", 324 .default_trigger = "Z2-charging-or-full", 325 .gpio = GPIO83_ZIPITZ2_LED_CHARGING, 326 .active_low = 1, 327}, 328}; 329 330static struct gpio_led_platform_data z2_gpio_led_info = { 331 .leds = z2_gpio_leds, 332 .num_leds = ARRAY_SIZE(z2_gpio_leds), 333}; 334 335static struct platform_device z2_leds = { 336 .name = "leds-gpio", 337 .id = -1, 338 .dev = { 339 .platform_data = &z2_gpio_led_info, 340 } 341}; 342 343static void __init z2_leds_init(void) 344{ 345 platform_device_register(&z2_leds); 346} 347#else 348static inline void z2_leds_init(void) {} 349#endif 350 351/****************************************************************************** 352 * GPIO keyboard 353 ******************************************************************************/ 354#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE) 355static const unsigned int z2_matrix_keys[] = { 356 KEY(0, 0, KEY_OPTION), 357 KEY(1, 0, KEY_UP), 358 KEY(2, 0, KEY_DOWN), 359 KEY(3, 0, KEY_LEFT), 360 KEY(4, 0, KEY_RIGHT), 361 KEY(5, 0, KEY_END), 362 KEY(6, 0, KEY_KPPLUS), 363 364 KEY(0, 1, KEY_HOME), 365 KEY(1, 1, KEY_Q), 366 KEY(2, 1, KEY_I), 367 KEY(3, 1, KEY_G), 368 KEY(4, 1, KEY_X), 369 KEY(5, 1, KEY_ENTER), 370 KEY(6, 1, KEY_KPMINUS), 371 372 KEY(0, 2, KEY_PAGEUP), 373 KEY(1, 2, KEY_W), 374 KEY(2, 2, KEY_O), 375 KEY(3, 2, KEY_H), 376 KEY(4, 2, KEY_C), 377 KEY(5, 2, KEY_LEFTALT), 378 379 KEY(0, 3, KEY_PAGEDOWN), 380 KEY(1, 3, KEY_E), 381 KEY(2, 3, KEY_P), 382 KEY(3, 3, KEY_J), 383 KEY(4, 3, KEY_V), 384 KEY(5, 3, KEY_LEFTSHIFT), 385 386 KEY(0, 4, KEY_ESC), 387 KEY(1, 4, KEY_R), 388 KEY(2, 4, KEY_A), 389 KEY(3, 4, KEY_K), 390 KEY(4, 4, KEY_B), 391 KEY(5, 4, KEY_LEFTCTRL), 392 393 KEY(0, 5, KEY_TAB), 394 KEY(1, 5, KEY_T), 395 KEY(2, 5, KEY_S), 396 KEY(3, 5, KEY_L), 397 KEY(4, 5, KEY_N), 398 KEY(5, 5, KEY_SPACE), 399 400 KEY(0, 6, KEY_STOPCD), 401 KEY(1, 6, KEY_Y), 402 KEY(2, 6, KEY_D), 403 KEY(3, 6, KEY_BACKSPACE), 404 KEY(4, 6, KEY_M), 405 KEY(5, 6, KEY_COMMA), 406 407 KEY(0, 7, KEY_PLAYCD), 408 KEY(1, 7, KEY_U), 409 KEY(2, 7, KEY_F), 410 KEY(3, 7, KEY_Z), 411 KEY(4, 7, KEY_SEMICOLON), 412 KEY(5, 7, KEY_DOT), 413}; 414 415static struct matrix_keymap_data z2_matrix_keymap_data = { 416 .keymap = z2_matrix_keys, 417 .keymap_size = ARRAY_SIZE(z2_matrix_keys), 418}; 419 420static struct pxa27x_keypad_platform_data z2_keypad_platform_data = { 421 .matrix_key_rows = 7, 422 .matrix_key_cols = 8, 423 .matrix_keymap_data = &z2_matrix_keymap_data, 424 425 .debounce_interval = 30, 426}; 427 428static void __init z2_mkp_init(void) 429{ 430 pxa_set_keypad_info(&z2_keypad_platform_data); 431} 432#else 433static inline void z2_mkp_init(void) {} 434#endif 435 436/****************************************************************************** 437 * GPIO keys 438 ******************************************************************************/ 439#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) 440static struct gpio_keys_button z2_pxa_buttons[] = { 441 { 442 .code = KEY_POWER, 443 .gpio = GPIO1_ZIPITZ2_POWER_BUTTON, 444 .active_low = 0, 445 .desc = "Power Button", 446 .wakeup = 1, 447 .type = EV_KEY, 448 }, 449 { 450 .code = SW_LID, 451 .gpio = GPIO98_ZIPITZ2_LID_BUTTON, 452 .active_low = 1, 453 .desc = "Lid Switch", 454 .wakeup = 0, 455 .type = EV_SW, 456 }, 457}; 458 459static struct gpio_keys_platform_data z2_pxa_keys_data = { 460 .buttons = z2_pxa_buttons, 461 .nbuttons = ARRAY_SIZE(z2_pxa_buttons), 462}; 463 464static struct platform_device z2_pxa_keys = { 465 .name = "gpio-keys", 466 .id = -1, 467 .dev = { 468 .platform_data = &z2_pxa_keys_data, 469 }, 470}; 471 472static void __init z2_keys_init(void) 473{ 474 platform_device_register(&z2_pxa_keys); 475} 476#else 477static inline void z2_keys_init(void) {} 478#endif 479 480/****************************************************************************** 481 * Battery 482 ******************************************************************************/ 483#if defined(CONFIG_I2C_PXA) || defined(CONFIG_I2C_PXA_MODULE) 484static struct z2_battery_info batt_chip_info = { 485 .batt_I2C_bus = 0, 486 .batt_I2C_addr = 0x55, 487 .batt_I2C_reg = 2, 488 .charge_gpio = GPIO0_ZIPITZ2_AC_DETECT, 489 .min_voltage = 3475000, 490 .max_voltage = 4190000, 491 .batt_div = 59, 492 .batt_mult = 1000000, 493 .batt_tech = POWER_SUPPLY_TECHNOLOGY_LION, 494 .batt_name = "Z2", 495}; 496 497static struct i2c_board_info __initdata z2_i2c_board_info[] = { 498 { 499 I2C_BOARD_INFO("aer915", 0x55), 500 .platform_data = &batt_chip_info, 501 }, { 502 I2C_BOARD_INFO("wm8750", 0x1b), 503 }, 504 505}; 506 507static void __init z2_i2c_init(void) 508{ 509 pxa_set_i2c_info(NULL); 510 i2c_register_board_info(0, ARRAY_AND_SIZE(z2_i2c_board_info)); 511} 512#else 513static inline void z2_i2c_init(void) {} 514#endif 515 516/****************************************************************************** 517 * SSP Devices - WiFi and LCD control 518 ******************************************************************************/ 519#if defined(CONFIG_SPI_PXA2XX) || defined(CONFIG_SPI_PXA2XX_MODULE) 520/* WiFi */ 521static int z2_lbs_spi_setup(struct spi_device *spi) 522{ 523 int ret = 0; 524 525 ret = gpio_request(GPIO14_ZIPITZ2_WIFI_POWER, "WiFi Power"); 526 if (ret) 527 goto err; 528 529 ret = gpio_direction_output(GPIO14_ZIPITZ2_WIFI_POWER, 1); 530 if (ret) 531 goto err2; 532 533 /* Wait until card is powered on */ 534 mdelay(180); 535 536 spi->bits_per_word = 16; 537 spi->mode = SPI_MODE_2, 538 539 spi_setup(spi); 540 541 return 0; 542 543err2: 544 gpio_free(GPIO14_ZIPITZ2_WIFI_POWER); 545err: 546 return ret; 547}; 548 549static int z2_lbs_spi_teardown(struct spi_device *spi) 550{ 551 gpio_set_value(GPIO14_ZIPITZ2_WIFI_POWER, 0); 552 gpio_free(GPIO14_ZIPITZ2_WIFI_POWER); 553 554 return 0; 555}; 556 557static struct pxa2xx_spi_chip z2_lbs_chip_info = { 558 .rx_threshold = 8, 559 .tx_threshold = 8, 560 .timeout = 1000, 561 .gpio_cs = GPIO24_ZIPITZ2_WIFI_CS, 562}; 563 564static struct libertas_spi_platform_data z2_lbs_pdata = { 565 .use_dummy_writes = 1, 566 .setup = z2_lbs_spi_setup, 567 .teardown = z2_lbs_spi_teardown, 568}; 569 570/* LCD */ 571static struct pxa2xx_spi_chip lms283_chip_info = { 572 .rx_threshold = 1, 573 .tx_threshold = 1, 574 .timeout = 64, 575 .gpio_cs = GPIO88_ZIPITZ2_LCD_CS, 576}; 577 578static const struct lms283gf05_pdata lms283_pdata = { 579 .reset_gpio = GPIO19_ZIPITZ2_LCD_RESET, 580}; 581 582static struct spi_board_info spi_board_info[] __initdata = { 583{ 584 .modalias = "libertas_spi", 585 .platform_data = &z2_lbs_pdata, 586 .controller_data = &z2_lbs_chip_info, 587 .irq = PXA_GPIO_TO_IRQ(GPIO36_ZIPITZ2_WIFI_IRQ), 588 .max_speed_hz = 13000000, 589 .bus_num = 1, 590 .chip_select = 0, 591}, 592{ 593 .modalias = "lms283gf05", 594 .controller_data = &lms283_chip_info, 595 .platform_data = &lms283_pdata, 596 .max_speed_hz = 400000, 597 .bus_num = 2, 598 .chip_select = 0, 599}, 600}; 601 602static struct pxa2xx_spi_master pxa_ssp1_master_info = { 603 .num_chipselect = 1, 604 .enable_dma = 1, 605}; 606 607static struct pxa2xx_spi_master pxa_ssp2_master_info = { 608 .num_chipselect = 1, 609}; 610 611static void __init z2_spi_init(void) 612{ 613 pxa2xx_set_spi_info(1, &pxa_ssp1_master_info); 614 pxa2xx_set_spi_info(2, &pxa_ssp2_master_info); 615 spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info)); 616} 617#else 618static inline void z2_spi_init(void) {} 619#endif 620 621/****************************************************************************** 622 * Core power regulator 623 ******************************************************************************/ 624#if defined(CONFIG_REGULATOR_TPS65023) || \ 625 defined(CONFIG_REGULATOR_TPS65023_MODULE) 626static struct regulator_consumer_supply z2_tps65021_consumers[] = { 627 REGULATOR_SUPPLY("vcc_core", NULL), 628}; 629 630static struct regulator_init_data z2_tps65021_info[] = { 631 { 632 .constraints = { 633 .name = "vcc_core range", 634 .min_uV = 800000, 635 .max_uV = 1600000, 636 .always_on = 1, 637 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE, 638 }, 639 .consumer_supplies = z2_tps65021_consumers, 640 .num_consumer_supplies = ARRAY_SIZE(z2_tps65021_consumers), 641 }, { 642 .constraints = { 643 .name = "DCDC2", 644 .min_uV = 3300000, 645 .max_uV = 3300000, 646 .always_on = 1, 647 }, 648 }, { 649 .constraints = { 650 .name = "DCDC3", 651 .min_uV = 1800000, 652 .max_uV = 1800000, 653 .always_on = 1, 654 }, 655 }, { 656 .constraints = { 657 .name = "LDO1", 658 .min_uV = 1000000, 659 .max_uV = 3150000, 660 .always_on = 1, 661 }, 662 }, { 663 .constraints = { 664 .name = "LDO2", 665 .min_uV = 1050000, 666 .max_uV = 3300000, 667 .always_on = 1, 668 }, 669 } 670}; 671 672static struct i2c_board_info __initdata z2_pi2c_board_info[] = { 673 { 674 I2C_BOARD_INFO("tps65021", 0x48), 675 .platform_data = &z2_tps65021_info, 676 }, 677}; 678 679static void __init z2_pmic_init(void) 680{ 681 pxa27x_set_i2c_power_info(NULL); 682 i2c_register_board_info(1, ARRAY_AND_SIZE(z2_pi2c_board_info)); 683} 684#else 685static inline void z2_pmic_init(void) {} 686#endif 687 688#ifdef CONFIG_PM 689static void z2_power_off(void) 690{ 691 /* We're using deep sleep as poweroff, so clear PSPR to ensure that 692 * bootloader will jump to its entry point in resume handler 693 */ 694 PSPR = 0x0; 695 local_irq_disable(); 696 pxa27x_set_pwrmode(PWRMODE_DEEPSLEEP); 697 pxa27x_cpu_pm_enter(PM_SUSPEND_MEM); 698} 699#else 700#define z2_power_off NULL 701#endif 702 703/****************************************************************************** 704 * Machine init 705 ******************************************************************************/ 706static void __init z2_init(void) 707{ 708 pxa2xx_mfp_config(ARRAY_AND_SIZE(z2_pin_config)); 709 710 pxa_set_ffuart_info(NULL); 711 pxa_set_btuart_info(NULL); 712 pxa_set_stuart_info(NULL); 713 714 z2_lcd_init(); 715 z2_mmc_init(); 716 z2_mkp_init(); 717 z2_i2c_init(); 718 z2_spi_init(); 719 z2_nor_init(); 720 z2_pwm_init(); 721 z2_leds_init(); 722 z2_keys_init(); 723 z2_pmic_init(); 724 725 pm_power_off = z2_power_off; 726} 727 728MACHINE_START(ZIPIT2, "Zipit Z2") 729 .atag_offset = 0x100, 730 .map_io = pxa27x_map_io, 731 .nr_irqs = PXA_NR_IRQS, 732 .init_irq = pxa27x_init_irq, 733 .handle_irq = pxa27x_handle_irq, 734 .init_time = pxa_timer_init, 735 .init_machine = z2_init, 736 .restart = pxa_restart, 737MACHINE_END 738