cachepc-linux

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

z2.c (18059B)


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