xref: /kernel/linux/linux-5.10/arch/arm/mach-pxa/z2.c (revision 8c2ecf20)
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