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