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