xref: /openbmc/linux/arch/arm/mach-omap1/board-palmte.c (revision 561b036ad9d0b4f0cd311d2e38025919c2cb437f)
13179a019STony Lindgren /*
23179a019STony Lindgren  * linux/arch/arm/mach-omap1/board-palmte.c
33179a019STony Lindgren  *
43179a019STony Lindgren  * Modified from board-generic.c
53179a019STony Lindgren  *
63179a019STony Lindgren  * Support for the Palm Tungsten E PDA.
73179a019STony Lindgren  *
83179a019STony Lindgren  * Original version : Laurent Gonzalez
93179a019STony Lindgren  *
106cbdc8c5SSimon Arlott  * Maintainers : http://palmtelinux.sf.net
113179a019STony Lindgren  *                palmtelinux-developpers@lists.sf.net
123179a019STony Lindgren  *
13d7730cc0SAndrzej Zaborowski  * Copyright (c) 2006 Andrzej Zaborowski  <balrog@zabor.org>
14d7730cc0SAndrzej Zaborowski  *
153179a019STony Lindgren  * This program is free software; you can redistribute it and/or modify
163179a019STony Lindgren  * it under the terms of the GNU General Public License version 2 as
173179a019STony Lindgren  * published by the Free Software Foundation.
183179a019STony Lindgren  */
193179a019STony Lindgren 
203179a019STony Lindgren #include <linux/kernel.h>
213179a019STony Lindgren #include <linux/init.h>
22c3695015SAndrzej Zaborowski #include <linux/input.h>
233179a019STony Lindgren #include <linux/platform_device.h>
24c3695015SAndrzej Zaborowski #include <linux/mtd/mtd.h>
25c3695015SAndrzej Zaborowski #include <linux/mtd/partitions.h>
26*561b036aSLadislav Michl #include <linux/mtd/physmap.h>
27c3695015SAndrzej Zaborowski #include <linux/spi/spi.h>
28c3695015SAndrzej Zaborowski #include <linux/interrupt.h>
29d7730cc0SAndrzej Zaborowski #include <linux/apm-emulation.h>
303179a019STony Lindgren 
31a09e64fbSRussell King #include <mach/hardware.h>
323179a019STony Lindgren #include <asm/mach-types.h>
333179a019STony Lindgren #include <asm/mach/arch.h>
343179a019STony Lindgren #include <asm/mach/map.h>
353179a019STony Lindgren 
36a09e64fbSRussell King #include <mach/gpio.h>
37*561b036aSLadislav Michl #include <plat/flash.h>
38ce491cf8STony Lindgren #include <plat/mux.h>
39ce491cf8STony Lindgren #include <plat/usb.h>
40ce491cf8STony Lindgren #include <plat/tc.h>
41ce491cf8STony Lindgren #include <plat/dma.h>
42ce491cf8STony Lindgren #include <plat/board.h>
43ce491cf8STony Lindgren #include <plat/irda.h>
44ce491cf8STony Lindgren #include <plat/keypad.h>
45ce491cf8STony Lindgren #include <plat/common.h>
463179a019STony Lindgren 
47b2830810STony Lindgren #define PALMTE_USBDETECT_GPIO	0
48b2830810STony Lindgren #define PALMTE_USB_OR_DC_GPIO	1
49b2830810STony Lindgren #define PALMTE_TSC_GPIO		4
50b2830810STony Lindgren #define PALMTE_PINTDAV_GPIO	6
51b2830810STony Lindgren #define PALMTE_MMC_WP_GPIO	8
52b2830810STony Lindgren #define PALMTE_MMC_POWER_GPIO	9
53b2830810STony Lindgren #define PALMTE_HDQ_GPIO		11
54b2830810STony Lindgren #define PALMTE_HEADPHONES_GPIO	14
55b2830810STony Lindgren #define PALMTE_SPEAKER_GPIO	15
56b2830810STony Lindgren #define PALMTE_DC_GPIO		OMAP_MPUIO(2)
57b2830810STony Lindgren #define PALMTE_MMC_SWITCH_GPIO	OMAP_MPUIO(4)
58b2830810STony Lindgren #define PALMTE_MMC1_GPIO	OMAP_MPUIO(6)
59b2830810STony Lindgren #define PALMTE_MMC2_GPIO	OMAP_MPUIO(7)
60b2830810STony Lindgren #define PALMTE_MMC3_GPIO	OMAP_MPUIO(11)
61b2830810STony Lindgren 
62c3695015SAndrzej Zaborowski static void __init omap_palmte_init_irq(void)
633179a019STony Lindgren {
6487bd63f6STony Lindgren 	omap1_init_common_hw();
653179a019STony Lindgren 	omap_init_irq();
66c3695015SAndrzej Zaborowski 	omap_gpio_init();
673179a019STony Lindgren }
683179a019STony Lindgren 
69d7730cc0SAndrzej Zaborowski static const int palmte_keymap[] = {
70d7730cc0SAndrzej Zaborowski 	KEY(0, 0, KEY_F1),		/* Calendar */
71d7730cc0SAndrzej Zaborowski 	KEY(0, 1, KEY_F2),		/* Contacts */
72d7730cc0SAndrzej Zaborowski 	KEY(0, 2, KEY_F3),		/* Tasks List */
73d7730cc0SAndrzej Zaborowski 	KEY(0, 3, KEY_F4),		/* Note Pad */
74c3695015SAndrzej Zaborowski 	KEY(0, 4, KEY_POWER),
75c3695015SAndrzej Zaborowski 	KEY(1, 0, KEY_LEFT),
76c3695015SAndrzej Zaborowski 	KEY(1, 1, KEY_DOWN),
77c3695015SAndrzej Zaborowski 	KEY(1, 2, KEY_UP),
78c3695015SAndrzej Zaborowski 	KEY(1, 3, KEY_RIGHT),
79ec44dfa8SEduardo Valentin 	KEY(1, 4, KEY_ENTER),
80c3695015SAndrzej Zaborowski 	0,
81c3695015SAndrzej Zaborowski };
82c3695015SAndrzej Zaborowski 
83c3695015SAndrzej Zaborowski static struct omap_kp_platform_data palmte_kp_data = {
84c3695015SAndrzej Zaborowski 	.rows	= 8,
85c3695015SAndrzej Zaborowski 	.cols	= 8,
86d7730cc0SAndrzej Zaborowski 	.keymap = (int *) palmte_keymap,
87c3695015SAndrzej Zaborowski 	.rep	= 1,
88c3695015SAndrzej Zaborowski 	.delay	= 12,
89c3695015SAndrzej Zaborowski };
90c3695015SAndrzej Zaborowski 
91c3695015SAndrzej Zaborowski static struct resource palmte_kp_resources[] = {
92c3695015SAndrzej Zaborowski 	[0]	= {
93c3695015SAndrzej Zaborowski 		.start	= INT_KEYBOARD,
94c3695015SAndrzej Zaborowski 		.end	= INT_KEYBOARD,
95c3695015SAndrzej Zaborowski 		.flags	= IORESOURCE_IRQ,
96c3695015SAndrzej Zaborowski 	},
97c3695015SAndrzej Zaborowski };
98c3695015SAndrzej Zaborowski 
99c3695015SAndrzej Zaborowski static struct platform_device palmte_kp_device = {
100c3695015SAndrzej Zaborowski 	.name		= "omap-keypad",
101c3695015SAndrzej Zaborowski 	.id		= -1,
102c3695015SAndrzej Zaborowski 	.dev		= {
103c3695015SAndrzej Zaborowski 		.platform_data	= &palmte_kp_data,
104c3695015SAndrzej Zaborowski 	},
105c3695015SAndrzej Zaborowski 	.num_resources	= ARRAY_SIZE(palmte_kp_resources),
106c3695015SAndrzej Zaborowski 	.resource	= palmte_kp_resources,
107c3695015SAndrzej Zaborowski };
108c3695015SAndrzej Zaborowski 
109c3695015SAndrzej Zaborowski static struct mtd_partition palmte_rom_partitions[] = {
110c3695015SAndrzej Zaborowski 	/* PalmOS "Small ROM", contains the bootloader and the debugger */
111c3695015SAndrzej Zaborowski 	{
112c3695015SAndrzej Zaborowski 		.name		= "smallrom",
113c3695015SAndrzej Zaborowski 		.offset		= 0,
114c3695015SAndrzej Zaborowski 		.size		= 0xa000,
115c3695015SAndrzej Zaborowski 		.mask_flags	= MTD_WRITEABLE,
116c3695015SAndrzej Zaborowski 	},
117c3695015SAndrzej Zaborowski 	/* PalmOS "Big ROM", a filesystem with all the OS code and data */
118c3695015SAndrzej Zaborowski 	{
119c3695015SAndrzej Zaborowski 		.name		= "bigrom",
120c3695015SAndrzej Zaborowski 		.offset		= SZ_128K,
121c3695015SAndrzej Zaborowski 		/*
122c3695015SAndrzej Zaborowski 		 * 0x5f0000 bytes big in the multi-language ("EFIGS") version,
123c3695015SAndrzej Zaborowski 		 * 0x7b0000 bytes in the English-only ("enUS") version.
124c3695015SAndrzej Zaborowski 		 */
125c3695015SAndrzej Zaborowski 		.size		= 0x7b0000,
126c3695015SAndrzej Zaborowski 		.mask_flags	= MTD_WRITEABLE,
127c3695015SAndrzej Zaborowski 	},
128c3695015SAndrzej Zaborowski };
129c3695015SAndrzej Zaborowski 
130*561b036aSLadislav Michl static struct physmap_flash_data palmte_rom_data = {
131c3695015SAndrzej Zaborowski 	.width		= 2,
132*561b036aSLadislav Michl 	.set_vpp	= omap1_set_vpp,
133c3695015SAndrzej Zaborowski 	.parts		= palmte_rom_partitions,
134c3695015SAndrzej Zaborowski 	.nr_parts	= ARRAY_SIZE(palmte_rom_partitions),
135c3695015SAndrzej Zaborowski };
136c3695015SAndrzej Zaborowski 
137c3695015SAndrzej Zaborowski static struct resource palmte_rom_resource = {
138c3695015SAndrzej Zaborowski 	.start		= OMAP_CS0_PHYS,
139c3695015SAndrzej Zaborowski 	.end		= OMAP_CS0_PHYS + SZ_8M - 1,
140c3695015SAndrzej Zaborowski 	.flags		= IORESOURCE_MEM,
141c3695015SAndrzej Zaborowski };
142c3695015SAndrzej Zaborowski 
143c3695015SAndrzej Zaborowski static struct platform_device palmte_rom_device = {
144*561b036aSLadislav Michl 	.name		= "physmap-flash",
145c3695015SAndrzej Zaborowski 	.id		= -1,
146c3695015SAndrzej Zaborowski 	.dev		= {
147c3695015SAndrzej Zaborowski 		.platform_data	= &palmte_rom_data,
148c3695015SAndrzej Zaborowski 	},
149c3695015SAndrzej Zaborowski 	.num_resources	= 1,
150c3695015SAndrzej Zaborowski 	.resource	= &palmte_rom_resource,
151c3695015SAndrzej Zaborowski };
152c3695015SAndrzej Zaborowski 
1539b6553cdSTony Lindgren static struct platform_device palmte_lcd_device = {
1549b6553cdSTony Lindgren 	.name		= "lcd_palmte",
1559b6553cdSTony Lindgren 	.id		= -1,
1569b6553cdSTony Lindgren };
1579b6553cdSTony Lindgren 
158c3695015SAndrzej Zaborowski static struct omap_backlight_config palmte_backlight_config = {
159c3695015SAndrzej Zaborowski 	.default_intensity	= 0xa0,
160c3695015SAndrzej Zaborowski };
161c3695015SAndrzej Zaborowski 
162c3695015SAndrzej Zaborowski static struct platform_device palmte_backlight_device = {
163c3695015SAndrzej Zaborowski 	.name		= "omap-bl",
164c3695015SAndrzej Zaborowski 	.id		= -1,
165c3695015SAndrzej Zaborowski 	.dev		= {
166c3695015SAndrzej Zaborowski 		.platform_data	= &palmte_backlight_config,
167c3695015SAndrzej Zaborowski 	},
168c3695015SAndrzej Zaborowski };
169c3695015SAndrzej Zaborowski 
170c3695015SAndrzej Zaborowski static struct omap_irda_config palmte_irda_config = {
171c3695015SAndrzej Zaborowski 	.transceiver_cap	= IR_SIRMODE,
172c3695015SAndrzej Zaborowski 	.rx_channel		= OMAP_DMA_UART3_RX,
173c3695015SAndrzej Zaborowski 	.tx_channel		= OMAP_DMA_UART3_TX,
174c3695015SAndrzej Zaborowski 	.dest_start		= UART3_THR,
175c3695015SAndrzej Zaborowski 	.src_start		= UART3_RHR,
176c3695015SAndrzej Zaborowski 	.tx_trigger		= 0,
177c3695015SAndrzej Zaborowski 	.rx_trigger		= 0,
178c3695015SAndrzej Zaborowski };
179c3695015SAndrzej Zaborowski 
180c3695015SAndrzej Zaborowski static struct resource palmte_irda_resources[] = {
181c3695015SAndrzej Zaborowski 	[0]	= {
182c3695015SAndrzej Zaborowski 		.start	= INT_UART3,
183c3695015SAndrzej Zaborowski 		.end	= INT_UART3,
184c3695015SAndrzej Zaborowski 		.flags	= IORESOURCE_IRQ,
185c3695015SAndrzej Zaborowski 	},
186c3695015SAndrzej Zaborowski };
187c3695015SAndrzej Zaborowski 
188c3695015SAndrzej Zaborowski static struct platform_device palmte_irda_device = {
189c3695015SAndrzej Zaborowski 	.name		= "omapirda",
190c3695015SAndrzej Zaborowski 	.id		= -1,
191c3695015SAndrzej Zaborowski 	.dev		= {
192c3695015SAndrzej Zaborowski 		.platform_data	= &palmte_irda_config,
193c3695015SAndrzej Zaborowski 	},
194c3695015SAndrzej Zaborowski 	.num_resources	= ARRAY_SIZE(palmte_irda_resources),
195c3695015SAndrzej Zaborowski 	.resource	= palmte_irda_resources,
196c3695015SAndrzej Zaborowski };
197c3695015SAndrzej Zaborowski 
198d7730cc0SAndrzej Zaborowski static struct platform_device *palmte_devices[] __initdata = {
199c3695015SAndrzej Zaborowski 	&palmte_rom_device,
200c3695015SAndrzej Zaborowski 	&palmte_kp_device,
2019b6553cdSTony Lindgren 	&palmte_lcd_device,
202c3695015SAndrzej Zaborowski 	&palmte_backlight_device,
203c3695015SAndrzej Zaborowski 	&palmte_irda_device,
2049b6553cdSTony Lindgren };
2059b6553cdSTony Lindgren 
2063179a019STony Lindgren static struct omap_usb_config palmte_usb_config __initdata = {
207c3695015SAndrzej Zaborowski 	.register_dev	= 1,	/* Mini-B only receptacle */
2083179a019STony Lindgren 	.hmc_mode	= 0,
209c3695015SAndrzej Zaborowski 	.pins[0]	= 2,
2103179a019STony Lindgren };
2113179a019STony Lindgren 
2123179a019STony Lindgren static struct omap_lcd_config palmte_lcd_config __initdata = {
2133179a019STony Lindgren 	.ctrl_name	= "internal",
2143179a019STony Lindgren };
2153179a019STony Lindgren 
216c3695015SAndrzej Zaborowski #ifdef CONFIG_APM
217c3695015SAndrzej Zaborowski /*
218c3695015SAndrzej Zaborowski  * Values measured in 10 minute intervals averaged over 10 samples.
219c3695015SAndrzej Zaborowski  * May differ slightly from device to device but should be accurate
220c3695015SAndrzej Zaborowski  * enough to give basic idea of battery life left and trigger
221c3695015SAndrzej Zaborowski  * potential alerts.
222c3695015SAndrzej Zaborowski  */
223c3695015SAndrzej Zaborowski static const int palmte_battery_sample[] = {
224c3695015SAndrzej Zaborowski 	2194, 2157, 2138, 2120,
225c3695015SAndrzej Zaborowski 	2104, 2089, 2075, 2061,
226c3695015SAndrzej Zaborowski 	2048, 2038, 2026, 2016,
227c3695015SAndrzej Zaborowski 	2008, 1998, 1989, 1980,
228c3695015SAndrzej Zaborowski 	1970, 1958, 1945, 1928,
229c3695015SAndrzej Zaborowski 	1910, 1888, 1860, 1827,
230c3695015SAndrzej Zaborowski 	1791, 1751, 1709, 1656,
231c3695015SAndrzej Zaborowski };
232c3695015SAndrzej Zaborowski 
233c3695015SAndrzej Zaborowski #define INTERVAL		10
234c3695015SAndrzej Zaborowski #define BATTERY_HIGH_TRESHOLD	66
235c3695015SAndrzej Zaborowski #define BATTERY_LOW_TRESHOLD	33
236c3695015SAndrzej Zaborowski 
237c3695015SAndrzej Zaborowski static void palmte_get_power_status(struct apm_power_info *info, int *battery)
238c3695015SAndrzej Zaborowski {
239c3695015SAndrzej Zaborowski 	int charging, batt, hi, lo, mid;
240c3695015SAndrzej Zaborowski 
2410b84b5caSDavid Brownell 	charging = !gpio_get_value(PALMTE_DC_GPIO);
242c3695015SAndrzej Zaborowski 	batt = battery[0];
243c3695015SAndrzej Zaborowski 	if (charging)
244c3695015SAndrzej Zaborowski 		batt -= 60;
245c3695015SAndrzej Zaborowski 
246c3695015SAndrzej Zaborowski 	hi = ARRAY_SIZE(palmte_battery_sample);
247c3695015SAndrzej Zaborowski 	lo = 0;
248c3695015SAndrzej Zaborowski 
249c3695015SAndrzej Zaborowski 	info->battery_flag = 0;
250c3695015SAndrzej Zaborowski 	info->units = APM_UNITS_MINS;
251c3695015SAndrzej Zaborowski 
252c3695015SAndrzej Zaborowski 	if (batt > palmte_battery_sample[lo]) {
253c3695015SAndrzej Zaborowski 		info->battery_life = 100;
254c3695015SAndrzej Zaborowski 		info->time = INTERVAL * ARRAY_SIZE(palmte_battery_sample);
255c3695015SAndrzej Zaborowski 	} else if (batt <= palmte_battery_sample[hi - 1]) {
256c3695015SAndrzej Zaborowski 		info->battery_life = 0;
257c3695015SAndrzej Zaborowski 		info->time = 0;
258c3695015SAndrzej Zaborowski 	} else {
259c3695015SAndrzej Zaborowski 		while (hi > lo + 1) {
260d7730cc0SAndrzej Zaborowski 			mid = (hi + lo) >> 1;
261c3695015SAndrzej Zaborowski 			if (batt <= palmte_battery_sample[mid])
262c3695015SAndrzej Zaborowski 				lo = mid;
263c3695015SAndrzej Zaborowski 			else
264c3695015SAndrzej Zaborowski 				hi = mid;
265c3695015SAndrzej Zaborowski 		}
266c3695015SAndrzej Zaborowski 
267c3695015SAndrzej Zaborowski 		mid = palmte_battery_sample[lo] - palmte_battery_sample[hi];
268c3695015SAndrzej Zaborowski 		hi = palmte_battery_sample[lo] - batt;
269c3695015SAndrzej Zaborowski 		info->battery_life = 100 - (100 * lo + 100 * hi / mid) /
270c3695015SAndrzej Zaborowski 			ARRAY_SIZE(palmte_battery_sample);
271c3695015SAndrzej Zaborowski 		info->time = INTERVAL * (ARRAY_SIZE(palmte_battery_sample) -
272c3695015SAndrzej Zaborowski 				lo) - INTERVAL * hi / mid;
273c3695015SAndrzej Zaborowski 	}
274c3695015SAndrzej Zaborowski 
275c3695015SAndrzej Zaborowski 	if (charging) {
276c3695015SAndrzej Zaborowski 		info->ac_line_status = APM_AC_ONLINE;
277c3695015SAndrzej Zaborowski 		info->battery_status = APM_BATTERY_STATUS_CHARGING;
278c3695015SAndrzej Zaborowski 		info->battery_flag |= APM_BATTERY_FLAG_CHARGING;
279c3695015SAndrzej Zaborowski 	} else {
280c3695015SAndrzej Zaborowski 		info->ac_line_status = APM_AC_OFFLINE;
281c3695015SAndrzej Zaborowski 		if (info->battery_life > BATTERY_HIGH_TRESHOLD)
282c3695015SAndrzej Zaborowski 			info->battery_status = APM_BATTERY_STATUS_HIGH;
283c3695015SAndrzej Zaborowski 		else if (info->battery_life > BATTERY_LOW_TRESHOLD)
284c3695015SAndrzej Zaborowski 			info->battery_status = APM_BATTERY_STATUS_LOW;
285c3695015SAndrzej Zaborowski 		else
286c3695015SAndrzej Zaborowski 			info->battery_status = APM_BATTERY_STATUS_CRITICAL;
287c3695015SAndrzej Zaborowski 	}
288c3695015SAndrzej Zaborowski 
289c3695015SAndrzej Zaborowski 	if (info->battery_life > BATTERY_HIGH_TRESHOLD)
290c3695015SAndrzej Zaborowski 		info->battery_flag |= APM_BATTERY_FLAG_HIGH;
291c3695015SAndrzej Zaborowski 	else if (info->battery_life > BATTERY_LOW_TRESHOLD)
292c3695015SAndrzej Zaborowski 		info->battery_flag |= APM_BATTERY_FLAG_LOW;
293c3695015SAndrzej Zaborowski 	else
294c3695015SAndrzej Zaborowski 		info->battery_flag |= APM_BATTERY_FLAG_CRITICAL;
295c3695015SAndrzej Zaborowski }
296c3695015SAndrzej Zaborowski #else
297c3695015SAndrzej Zaborowski #define palmte_get_power_status	NULL
298c3695015SAndrzej Zaborowski #endif
299c3695015SAndrzej Zaborowski 
300d7730cc0SAndrzej Zaborowski static struct omap_board_config_kernel palmte_config[] __initdata = {
3013179a019STony Lindgren 	{ OMAP_TAG_LCD,		&palmte_lcd_config },
3023179a019STony Lindgren };
3033179a019STony Lindgren 
304c3695015SAndrzej Zaborowski static struct spi_board_info palmte_spi_info[] __initdata = {
305c3695015SAndrzej Zaborowski 	{
306c3695015SAndrzej Zaborowski 		.modalias	= "tsc2102",
307c3695015SAndrzej Zaborowski 		.bus_num	= 2,	/* uWire (officially) */
308c3695015SAndrzej Zaborowski 		.chip_select	= 0,	/* As opposed to 3 */
309c3695015SAndrzej Zaborowski 		.irq		= OMAP_GPIO_IRQ(PALMTE_PINTDAV_GPIO),
310c3695015SAndrzej Zaborowski 		.max_speed_hz	= 8000000,
311c3695015SAndrzej Zaborowski 	},
312c3695015SAndrzej Zaborowski };
313c3695015SAndrzej Zaborowski 
314d7730cc0SAndrzej Zaborowski static void palmte_headphones_detect(void *data, int state)
315d7730cc0SAndrzej Zaborowski {
316d7730cc0SAndrzej Zaborowski 	if (state) {
317c3695015SAndrzej Zaborowski 		/* Headphones connected, disable speaker */
3180b84b5caSDavid Brownell 		gpio_set_value(PALMTE_SPEAKER_GPIO, 0);
319c3695015SAndrzej Zaborowski 		printk(KERN_INFO "PM: speaker off\n");
320d7730cc0SAndrzej Zaborowski 	} else {
321c3695015SAndrzej Zaborowski 		/* Headphones unplugged, re-enable speaker */
3220b84b5caSDavid Brownell 		gpio_set_value(PALMTE_SPEAKER_GPIO, 1);
323c3695015SAndrzej Zaborowski 		printk(KERN_INFO "PM: speaker on\n");
324c3695015SAndrzej Zaborowski 	}
325c3695015SAndrzej Zaborowski }
326c3695015SAndrzej Zaborowski 
327d7730cc0SAndrzej Zaborowski static void __init palmte_misc_gpio_setup(void)
328c3695015SAndrzej Zaborowski {
329d7730cc0SAndrzej Zaborowski 	/* Set TSC2102 PINTDAV pin as input (used by TSC2102 driver) */
330f2d18feaSJarkko Nikula 	if (gpio_request(PALMTE_PINTDAV_GPIO, "TSC2102 PINTDAV") < 0) {
331c3695015SAndrzej Zaborowski 		printk(KERN_ERR "Could not reserve PINTDAV GPIO!\n");
332c3695015SAndrzej Zaborowski 		return;
333c3695015SAndrzej Zaborowski 	}
33440e3925bSDavid Brownell 	gpio_direction_input(PALMTE_PINTDAV_GPIO);
335c3695015SAndrzej Zaborowski 
336d7730cc0SAndrzej Zaborowski 	/* Set USB-or-DC-IN pin as input (unused) */
337f2d18feaSJarkko Nikula 	if (gpio_request(PALMTE_USB_OR_DC_GPIO, "USB/DC-IN") < 0) {
338c3695015SAndrzej Zaborowski 		printk(KERN_ERR "Could not reserve cable signal GPIO!\n");
339c3695015SAndrzej Zaborowski 		return;
340c3695015SAndrzej Zaborowski 	}
34140e3925bSDavid Brownell 	gpio_direction_input(PALMTE_USB_OR_DC_GPIO);
342c3695015SAndrzej Zaborowski }
343c3695015SAndrzej Zaborowski 
344c3695015SAndrzej Zaborowski static void __init omap_palmte_init(void)
3453179a019STony Lindgren {
346c33da3a8SJanusz Krzysztofik 	/* mux pins for uarts */
347c33da3a8SJanusz Krzysztofik 	omap_cfg_reg(UART1_TX);
348c33da3a8SJanusz Krzysztofik 	omap_cfg_reg(UART1_RTS);
349c33da3a8SJanusz Krzysztofik 	omap_cfg_reg(UART2_TX);
350c33da3a8SJanusz Krzysztofik 	omap_cfg_reg(UART2_RTS);
351c33da3a8SJanusz Krzysztofik 	omap_cfg_reg(UART3_TX);
352c33da3a8SJanusz Krzysztofik 	omap_cfg_reg(UART3_RX);
353c33da3a8SJanusz Krzysztofik 
3543179a019STony Lindgren 	omap_board_config = palmte_config;
3553179a019STony Lindgren 	omap_board_config_size = ARRAY_SIZE(palmte_config);
3569b6553cdSTony Lindgren 
357d7730cc0SAndrzej Zaborowski 	platform_add_devices(palmte_devices, ARRAY_SIZE(palmte_devices));
358c3695015SAndrzej Zaborowski 
359c3695015SAndrzej Zaborowski 	spi_register_board_info(palmte_spi_info, ARRAY_SIZE(palmte_spi_info));
360d7730cc0SAndrzej Zaborowski 	palmte_misc_gpio_setup();
361c3695015SAndrzej Zaborowski 	omap_serial_init();
362b0b5aa3fSFelipe Balbi 	omap_usb_init(&palmte_usb_config);
3631ed16a86SJarkko Nikula 	omap_register_i2c_bus(1, 100, NULL, 0);
3643179a019STony Lindgren }
3653179a019STony Lindgren 
366c3695015SAndrzej Zaborowski static void __init omap_palmte_map_io(void)
3673179a019STony Lindgren {
36887bd63f6STony Lindgren 	omap1_map_common_io();
3693179a019STony Lindgren }
3703179a019STony Lindgren 
3713179a019STony Lindgren MACHINE_START(OMAP_PALMTE, "OMAP310 based Palm Tungsten E")
3723179a019STony Lindgren 	.phys_io	= 0xfff00000,
3733179a019STony Lindgren 	.io_pg_offst	= ((0xfef00000) >> 18) & 0xfffc,
3743179a019STony Lindgren 	.boot_params	= 0x10000100,
375c3695015SAndrzej Zaborowski 	.map_io		= omap_palmte_map_io,
376c3695015SAndrzej Zaborowski 	.init_irq	= omap_palmte_init_irq,
377c3695015SAndrzej Zaborowski 	.init_machine	= omap_palmte_init,
3783179a019STony Lindgren 	.timer		= &omap_timer,
3793179a019STony Lindgren MACHINE_END
380