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> 26c3695015SAndrzej Zaborowski #include <linux/spi/spi.h> 27c3695015SAndrzej Zaborowski #include <linux/interrupt.h> 28d7730cc0SAndrzej Zaborowski #include <linux/apm-emulation.h> 293179a019STony Lindgren 30*a09e64fbSRussell King #include <mach/hardware.h> 313179a019STony Lindgren #include <asm/mach-types.h> 323179a019STony Lindgren #include <asm/mach/arch.h> 333179a019STony Lindgren #include <asm/mach/map.h> 34c3695015SAndrzej Zaborowski #include <asm/mach/flash.h> 353179a019STony Lindgren 36*a09e64fbSRussell King #include <mach/gpio.h> 37*a09e64fbSRussell King #include <mach/mux.h> 38*a09e64fbSRussell King #include <mach/usb.h> 39*a09e64fbSRussell King #include <mach/tc.h> 40*a09e64fbSRussell King #include <mach/dma.h> 41*a09e64fbSRussell King #include <mach/board.h> 42*a09e64fbSRussell King #include <mach/irda.h> 43*a09e64fbSRussell King #include <mach/keypad.h> 44*a09e64fbSRussell King #include <mach/common.h> 45*a09e64fbSRussell King #include <mach/mcbsp.h> 46*a09e64fbSRussell King #include <mach/omap-alsa.h> 473179a019STony Lindgren 48c3695015SAndrzej Zaborowski static void __init omap_palmte_init_irq(void) 493179a019STony Lindgren { 5087bd63f6STony Lindgren omap1_init_common_hw(); 513179a019STony Lindgren omap_init_irq(); 52c3695015SAndrzej Zaborowski omap_gpio_init(); 533179a019STony Lindgren } 543179a019STony Lindgren 55d7730cc0SAndrzej Zaborowski static const int palmte_keymap[] = { 56d7730cc0SAndrzej Zaborowski KEY(0, 0, KEY_F1), /* Calendar */ 57d7730cc0SAndrzej Zaborowski KEY(0, 1, KEY_F2), /* Contacts */ 58d7730cc0SAndrzej Zaborowski KEY(0, 2, KEY_F3), /* Tasks List */ 59d7730cc0SAndrzej Zaborowski KEY(0, 3, KEY_F4), /* Note Pad */ 60c3695015SAndrzej Zaborowski KEY(0, 4, KEY_POWER), 61c3695015SAndrzej Zaborowski KEY(1, 0, KEY_LEFT), 62c3695015SAndrzej Zaborowski KEY(1, 1, KEY_DOWN), 63c3695015SAndrzej Zaborowski KEY(1, 2, KEY_UP), 64c3695015SAndrzej Zaborowski KEY(1, 3, KEY_RIGHT), 65ec44dfa8SEduardo Valentin KEY(1, 4, KEY_ENTER), 66c3695015SAndrzej Zaborowski 0, 67c3695015SAndrzej Zaborowski }; 68c3695015SAndrzej Zaborowski 69c3695015SAndrzej Zaborowski static struct omap_kp_platform_data palmte_kp_data = { 70c3695015SAndrzej Zaborowski .rows = 8, 71c3695015SAndrzej Zaborowski .cols = 8, 72d7730cc0SAndrzej Zaborowski .keymap = (int *) palmte_keymap, 73c3695015SAndrzej Zaborowski .rep = 1, 74c3695015SAndrzej Zaborowski .delay = 12, 75c3695015SAndrzej Zaborowski }; 76c3695015SAndrzej Zaborowski 77c3695015SAndrzej Zaborowski static struct resource palmte_kp_resources[] = { 78c3695015SAndrzej Zaborowski [0] = { 79c3695015SAndrzej Zaborowski .start = INT_KEYBOARD, 80c3695015SAndrzej Zaborowski .end = INT_KEYBOARD, 81c3695015SAndrzej Zaborowski .flags = IORESOURCE_IRQ, 82c3695015SAndrzej Zaborowski }, 83c3695015SAndrzej Zaborowski }; 84c3695015SAndrzej Zaborowski 85c3695015SAndrzej Zaborowski static struct platform_device palmte_kp_device = { 86c3695015SAndrzej Zaborowski .name = "omap-keypad", 87c3695015SAndrzej Zaborowski .id = -1, 88c3695015SAndrzej Zaborowski .dev = { 89c3695015SAndrzej Zaborowski .platform_data = &palmte_kp_data, 90c3695015SAndrzej Zaborowski }, 91c3695015SAndrzej Zaborowski .num_resources = ARRAY_SIZE(palmte_kp_resources), 92c3695015SAndrzej Zaborowski .resource = palmte_kp_resources, 93c3695015SAndrzej Zaborowski }; 94c3695015SAndrzej Zaborowski 95c3695015SAndrzej Zaborowski static struct mtd_partition palmte_rom_partitions[] = { 96c3695015SAndrzej Zaborowski /* PalmOS "Small ROM", contains the bootloader and the debugger */ 97c3695015SAndrzej Zaborowski { 98c3695015SAndrzej Zaborowski .name = "smallrom", 99c3695015SAndrzej Zaborowski .offset = 0, 100c3695015SAndrzej Zaborowski .size = 0xa000, 101c3695015SAndrzej Zaborowski .mask_flags = MTD_WRITEABLE, 102c3695015SAndrzej Zaborowski }, 103c3695015SAndrzej Zaborowski /* PalmOS "Big ROM", a filesystem with all the OS code and data */ 104c3695015SAndrzej Zaborowski { 105c3695015SAndrzej Zaborowski .name = "bigrom", 106c3695015SAndrzej Zaborowski .offset = SZ_128K, 107c3695015SAndrzej Zaborowski /* 108c3695015SAndrzej Zaborowski * 0x5f0000 bytes big in the multi-language ("EFIGS") version, 109c3695015SAndrzej Zaborowski * 0x7b0000 bytes in the English-only ("enUS") version. 110c3695015SAndrzej Zaborowski */ 111c3695015SAndrzej Zaborowski .size = 0x7b0000, 112c3695015SAndrzej Zaborowski .mask_flags = MTD_WRITEABLE, 113c3695015SAndrzej Zaborowski }, 114c3695015SAndrzej Zaborowski }; 115c3695015SAndrzej Zaborowski 116c3695015SAndrzej Zaborowski static struct flash_platform_data palmte_rom_data = { 117c3695015SAndrzej Zaborowski .map_name = "map_rom", 118c3695015SAndrzej Zaborowski .width = 2, 119c3695015SAndrzej Zaborowski .parts = palmte_rom_partitions, 120c3695015SAndrzej Zaborowski .nr_parts = ARRAY_SIZE(palmte_rom_partitions), 121c3695015SAndrzej Zaborowski }; 122c3695015SAndrzej Zaborowski 123c3695015SAndrzej Zaborowski static struct resource palmte_rom_resource = { 124c3695015SAndrzej Zaborowski .start = OMAP_CS0_PHYS, 125c3695015SAndrzej Zaborowski .end = OMAP_CS0_PHYS + SZ_8M - 1, 126c3695015SAndrzej Zaborowski .flags = IORESOURCE_MEM, 127c3695015SAndrzej Zaborowski }; 128c3695015SAndrzej Zaborowski 129c3695015SAndrzej Zaborowski static struct platform_device palmte_rom_device = { 130c3695015SAndrzej Zaborowski .name = "omapflash", 131c3695015SAndrzej Zaborowski .id = -1, 132c3695015SAndrzej Zaborowski .dev = { 133c3695015SAndrzej Zaborowski .platform_data = &palmte_rom_data, 134c3695015SAndrzej Zaborowski }, 135c3695015SAndrzej Zaborowski .num_resources = 1, 136c3695015SAndrzej Zaborowski .resource = &palmte_rom_resource, 137c3695015SAndrzej Zaborowski }; 138c3695015SAndrzej Zaborowski 1399b6553cdSTony Lindgren static struct platform_device palmte_lcd_device = { 1409b6553cdSTony Lindgren .name = "lcd_palmte", 1419b6553cdSTony Lindgren .id = -1, 1429b6553cdSTony Lindgren }; 1439b6553cdSTony Lindgren 144c3695015SAndrzej Zaborowski static struct omap_backlight_config palmte_backlight_config = { 145c3695015SAndrzej Zaborowski .default_intensity = 0xa0, 146c3695015SAndrzej Zaborowski }; 147c3695015SAndrzej Zaborowski 148c3695015SAndrzej Zaborowski static struct platform_device palmte_backlight_device = { 149c3695015SAndrzej Zaborowski .name = "omap-bl", 150c3695015SAndrzej Zaborowski .id = -1, 151c3695015SAndrzej Zaborowski .dev = { 152c3695015SAndrzej Zaborowski .platform_data = &palmte_backlight_config, 153c3695015SAndrzej Zaborowski }, 154c3695015SAndrzej Zaborowski }; 155c3695015SAndrzej Zaborowski 156c3695015SAndrzej Zaborowski static struct omap_irda_config palmte_irda_config = { 157c3695015SAndrzej Zaborowski .transceiver_cap = IR_SIRMODE, 158c3695015SAndrzej Zaborowski .rx_channel = OMAP_DMA_UART3_RX, 159c3695015SAndrzej Zaborowski .tx_channel = OMAP_DMA_UART3_TX, 160c3695015SAndrzej Zaborowski .dest_start = UART3_THR, 161c3695015SAndrzej Zaborowski .src_start = UART3_RHR, 162c3695015SAndrzej Zaborowski .tx_trigger = 0, 163c3695015SAndrzej Zaborowski .rx_trigger = 0, 164c3695015SAndrzej Zaborowski }; 165c3695015SAndrzej Zaborowski 166c3695015SAndrzej Zaborowski static struct resource palmte_irda_resources[] = { 167c3695015SAndrzej Zaborowski [0] = { 168c3695015SAndrzej Zaborowski .start = INT_UART3, 169c3695015SAndrzej Zaborowski .end = INT_UART3, 170c3695015SAndrzej Zaborowski .flags = IORESOURCE_IRQ, 171c3695015SAndrzej Zaborowski }, 172c3695015SAndrzej Zaborowski }; 173c3695015SAndrzej Zaborowski 174c3695015SAndrzej Zaborowski static struct platform_device palmte_irda_device = { 175c3695015SAndrzej Zaborowski .name = "omapirda", 176c3695015SAndrzej Zaborowski .id = -1, 177c3695015SAndrzej Zaborowski .dev = { 178c3695015SAndrzej Zaborowski .platform_data = &palmte_irda_config, 179c3695015SAndrzej Zaborowski }, 180c3695015SAndrzej Zaborowski .num_resources = ARRAY_SIZE(palmte_irda_resources), 181c3695015SAndrzej Zaborowski .resource = palmte_irda_resources, 182c3695015SAndrzej Zaborowski }; 183c3695015SAndrzej Zaborowski 184d7730cc0SAndrzej Zaborowski static struct platform_device *palmte_devices[] __initdata = { 185c3695015SAndrzej Zaborowski &palmte_rom_device, 186c3695015SAndrzej Zaborowski &palmte_kp_device, 1879b6553cdSTony Lindgren &palmte_lcd_device, 188c3695015SAndrzej Zaborowski &palmte_backlight_device, 189c3695015SAndrzej Zaborowski &palmte_irda_device, 1909b6553cdSTony Lindgren }; 1919b6553cdSTony Lindgren 1923179a019STony Lindgren static struct omap_usb_config palmte_usb_config __initdata = { 193c3695015SAndrzej Zaborowski .register_dev = 1, /* Mini-B only receptacle */ 1943179a019STony Lindgren .hmc_mode = 0, 195c3695015SAndrzej Zaborowski .pins[0] = 2, 1963179a019STony Lindgren }; 1973179a019STony Lindgren 1983179a019STony Lindgren static struct omap_mmc_config palmte_mmc_config __initdata = { 1993179a019STony Lindgren .mmc[0] = { 2003179a019STony Lindgren .enabled = 1, 201c3695015SAndrzej Zaborowski .wp_pin = PALMTE_MMC_WP_GPIO, 202c3695015SAndrzej Zaborowski .power_pin = PALMTE_MMC_POWER_GPIO, 203c3695015SAndrzej Zaborowski .switch_pin = PALMTE_MMC_SWITCH_GPIO, 2043179a019STony Lindgren }, 2053179a019STony Lindgren }; 2063179a019STony Lindgren 2073179a019STony Lindgren static struct omap_lcd_config palmte_lcd_config __initdata = { 2083179a019STony Lindgren .ctrl_name = "internal", 2093179a019STony Lindgren }; 2103179a019STony Lindgren 211c3695015SAndrzej Zaborowski static struct omap_uart_config palmte_uart_config __initdata = { 212c3695015SAndrzej Zaborowski .enabled_uarts = (1 << 0) | (1 << 1) | (0 << 2), 213c3695015SAndrzej Zaborowski }; 214c3695015SAndrzej Zaborowski 215c3695015SAndrzej Zaborowski static struct omap_mcbsp_reg_cfg palmte_mcbsp1_regs = { 216c3695015SAndrzej Zaborowski .spcr2 = FRST | GRST | XRST | XINTM(3), 217c3695015SAndrzej Zaborowski .xcr2 = XDATDLY(1) | XFIG, 218c3695015SAndrzej Zaborowski .xcr1 = XWDLEN1(OMAP_MCBSP_WORD_32), 219c3695015SAndrzej Zaborowski .pcr0 = SCLKME | FSXP | CLKXP, 220c3695015SAndrzej Zaborowski }; 221c3695015SAndrzej Zaborowski 222c3695015SAndrzej Zaborowski static struct omap_alsa_codec_config palmte_alsa_config = { 223c3695015SAndrzej Zaborowski .name = "TSC2102 audio", 224c3695015SAndrzej Zaborowski .mcbsp_regs_alsa = &palmte_mcbsp1_regs, 225c3695015SAndrzej Zaborowski .codec_configure_dev = NULL, /* tsc2102_configure, */ 226c3695015SAndrzej Zaborowski .codec_set_samplerate = NULL, /* tsc2102_set_samplerate, */ 227c3695015SAndrzej Zaborowski .codec_clock_setup = NULL, /* tsc2102_clock_setup, */ 228c3695015SAndrzej Zaborowski .codec_clock_on = NULL, /* tsc2102_clock_on, */ 229c3695015SAndrzej Zaborowski .codec_clock_off = NULL, /* tsc2102_clock_off, */ 230c3695015SAndrzej Zaborowski .get_default_samplerate = NULL, /* tsc2102_get_default_samplerate, */ 231c3695015SAndrzej Zaborowski }; 232c3695015SAndrzej Zaborowski 233c3695015SAndrzej Zaborowski #ifdef CONFIG_APM 234c3695015SAndrzej Zaborowski /* 235c3695015SAndrzej Zaborowski * Values measured in 10 minute intervals averaged over 10 samples. 236c3695015SAndrzej Zaborowski * May differ slightly from device to device but should be accurate 237c3695015SAndrzej Zaborowski * enough to give basic idea of battery life left and trigger 238c3695015SAndrzej Zaborowski * potential alerts. 239c3695015SAndrzej Zaborowski */ 240c3695015SAndrzej Zaborowski static const int palmte_battery_sample[] = { 241c3695015SAndrzej Zaborowski 2194, 2157, 2138, 2120, 242c3695015SAndrzej Zaborowski 2104, 2089, 2075, 2061, 243c3695015SAndrzej Zaborowski 2048, 2038, 2026, 2016, 244c3695015SAndrzej Zaborowski 2008, 1998, 1989, 1980, 245c3695015SAndrzej Zaborowski 1970, 1958, 1945, 1928, 246c3695015SAndrzej Zaborowski 1910, 1888, 1860, 1827, 247c3695015SAndrzej Zaborowski 1791, 1751, 1709, 1656, 248c3695015SAndrzej Zaborowski }; 249c3695015SAndrzej Zaborowski 250c3695015SAndrzej Zaborowski #define INTERVAL 10 251c3695015SAndrzej Zaborowski #define BATTERY_HIGH_TRESHOLD 66 252c3695015SAndrzej Zaborowski #define BATTERY_LOW_TRESHOLD 33 253c3695015SAndrzej Zaborowski 254c3695015SAndrzej Zaborowski static void palmte_get_power_status(struct apm_power_info *info, int *battery) 255c3695015SAndrzej Zaborowski { 256c3695015SAndrzej Zaborowski int charging, batt, hi, lo, mid; 257c3695015SAndrzej Zaborowski 258c3695015SAndrzej Zaborowski charging = !omap_get_gpio_datain(PALMTE_DC_GPIO); 259c3695015SAndrzej Zaborowski batt = battery[0]; 260c3695015SAndrzej Zaborowski if (charging) 261c3695015SAndrzej Zaborowski batt -= 60; 262c3695015SAndrzej Zaborowski 263c3695015SAndrzej Zaborowski hi = ARRAY_SIZE(palmte_battery_sample); 264c3695015SAndrzej Zaborowski lo = 0; 265c3695015SAndrzej Zaborowski 266c3695015SAndrzej Zaborowski info->battery_flag = 0; 267c3695015SAndrzej Zaborowski info->units = APM_UNITS_MINS; 268c3695015SAndrzej Zaborowski 269c3695015SAndrzej Zaborowski if (batt > palmte_battery_sample[lo]) { 270c3695015SAndrzej Zaborowski info->battery_life = 100; 271c3695015SAndrzej Zaborowski info->time = INTERVAL * ARRAY_SIZE(palmte_battery_sample); 272c3695015SAndrzej Zaborowski } else if (batt <= palmte_battery_sample[hi - 1]) { 273c3695015SAndrzej Zaborowski info->battery_life = 0; 274c3695015SAndrzej Zaborowski info->time = 0; 275c3695015SAndrzej Zaborowski } else { 276c3695015SAndrzej Zaborowski while (hi > lo + 1) { 277d7730cc0SAndrzej Zaborowski mid = (hi + lo) >> 1; 278c3695015SAndrzej Zaborowski if (batt <= palmte_battery_sample[mid]) 279c3695015SAndrzej Zaborowski lo = mid; 280c3695015SAndrzej Zaborowski else 281c3695015SAndrzej Zaborowski hi = mid; 282c3695015SAndrzej Zaborowski } 283c3695015SAndrzej Zaborowski 284c3695015SAndrzej Zaborowski mid = palmte_battery_sample[lo] - palmte_battery_sample[hi]; 285c3695015SAndrzej Zaborowski hi = palmte_battery_sample[lo] - batt; 286c3695015SAndrzej Zaborowski info->battery_life = 100 - (100 * lo + 100 * hi / mid) / 287c3695015SAndrzej Zaborowski ARRAY_SIZE(palmte_battery_sample); 288c3695015SAndrzej Zaborowski info->time = INTERVAL * (ARRAY_SIZE(palmte_battery_sample) - 289c3695015SAndrzej Zaborowski lo) - INTERVAL * hi / mid; 290c3695015SAndrzej Zaborowski } 291c3695015SAndrzej Zaborowski 292c3695015SAndrzej Zaborowski if (charging) { 293c3695015SAndrzej Zaborowski info->ac_line_status = APM_AC_ONLINE; 294c3695015SAndrzej Zaborowski info->battery_status = APM_BATTERY_STATUS_CHARGING; 295c3695015SAndrzej Zaborowski info->battery_flag |= APM_BATTERY_FLAG_CHARGING; 296c3695015SAndrzej Zaborowski } else { 297c3695015SAndrzej Zaborowski info->ac_line_status = APM_AC_OFFLINE; 298c3695015SAndrzej Zaborowski if (info->battery_life > BATTERY_HIGH_TRESHOLD) 299c3695015SAndrzej Zaborowski info->battery_status = APM_BATTERY_STATUS_HIGH; 300c3695015SAndrzej Zaborowski else if (info->battery_life > BATTERY_LOW_TRESHOLD) 301c3695015SAndrzej Zaborowski info->battery_status = APM_BATTERY_STATUS_LOW; 302c3695015SAndrzej Zaborowski else 303c3695015SAndrzej Zaborowski info->battery_status = APM_BATTERY_STATUS_CRITICAL; 304c3695015SAndrzej Zaborowski } 305c3695015SAndrzej Zaborowski 306c3695015SAndrzej Zaborowski if (info->battery_life > BATTERY_HIGH_TRESHOLD) 307c3695015SAndrzej Zaborowski info->battery_flag |= APM_BATTERY_FLAG_HIGH; 308c3695015SAndrzej Zaborowski else if (info->battery_life > BATTERY_LOW_TRESHOLD) 309c3695015SAndrzej Zaborowski info->battery_flag |= APM_BATTERY_FLAG_LOW; 310c3695015SAndrzej Zaborowski else 311c3695015SAndrzej Zaborowski info->battery_flag |= APM_BATTERY_FLAG_CRITICAL; 312c3695015SAndrzej Zaborowski } 313c3695015SAndrzej Zaborowski #else 314c3695015SAndrzej Zaborowski #define palmte_get_power_status NULL 315c3695015SAndrzej Zaborowski #endif 316c3695015SAndrzej Zaborowski 317d7730cc0SAndrzej Zaborowski static struct omap_board_config_kernel palmte_config[] __initdata = { 3183179a019STony Lindgren { OMAP_TAG_USB, &palmte_usb_config }, 3193179a019STony Lindgren { OMAP_TAG_MMC, &palmte_mmc_config }, 3203179a019STony Lindgren { OMAP_TAG_LCD, &palmte_lcd_config }, 321c3695015SAndrzej Zaborowski { OMAP_TAG_UART, &palmte_uart_config }, 3223179a019STony Lindgren }; 3233179a019STony Lindgren 324c3695015SAndrzej Zaborowski static struct spi_board_info palmte_spi_info[] __initdata = { 325c3695015SAndrzej Zaborowski { 326c3695015SAndrzej Zaborowski .modalias = "tsc2102", 327c3695015SAndrzej Zaborowski .bus_num = 2, /* uWire (officially) */ 328c3695015SAndrzej Zaborowski .chip_select = 0, /* As opposed to 3 */ 329c3695015SAndrzej Zaborowski .irq = OMAP_GPIO_IRQ(PALMTE_PINTDAV_GPIO), 330c3695015SAndrzej Zaborowski .max_speed_hz = 8000000, 331c3695015SAndrzej Zaborowski }, 332c3695015SAndrzej Zaborowski }; 333c3695015SAndrzej Zaborowski 334d7730cc0SAndrzej Zaborowski static void palmte_headphones_detect(void *data, int state) 335d7730cc0SAndrzej Zaborowski { 336d7730cc0SAndrzej Zaborowski if (state) { 337c3695015SAndrzej Zaborowski /* Headphones connected, disable speaker */ 338c3695015SAndrzej Zaborowski omap_set_gpio_dataout(PALMTE_SPEAKER_GPIO, 0); 339c3695015SAndrzej Zaborowski printk(KERN_INFO "PM: speaker off\n"); 340d7730cc0SAndrzej Zaborowski } else { 341c3695015SAndrzej Zaborowski /* Headphones unplugged, re-enable speaker */ 342c3695015SAndrzej Zaborowski omap_set_gpio_dataout(PALMTE_SPEAKER_GPIO, 1); 343c3695015SAndrzej Zaborowski printk(KERN_INFO "PM: speaker on\n"); 344c3695015SAndrzej Zaborowski } 345c3695015SAndrzej Zaborowski } 346c3695015SAndrzej Zaborowski 347d7730cc0SAndrzej Zaborowski static void __init palmte_misc_gpio_setup(void) 348c3695015SAndrzej Zaborowski { 349d7730cc0SAndrzej Zaborowski /* Set TSC2102 PINTDAV pin as input (used by TSC2102 driver) */ 350c3695015SAndrzej Zaborowski if (omap_request_gpio(PALMTE_PINTDAV_GPIO)) { 351c3695015SAndrzej Zaborowski printk(KERN_ERR "Could not reserve PINTDAV GPIO!\n"); 352c3695015SAndrzej Zaborowski return; 353c3695015SAndrzej Zaborowski } 354c3695015SAndrzej Zaborowski omap_set_gpio_direction(PALMTE_PINTDAV_GPIO, 1); 355c3695015SAndrzej Zaborowski 356d7730cc0SAndrzej Zaborowski /* Set USB-or-DC-IN pin as input (unused) */ 357d7730cc0SAndrzej Zaborowski if (omap_request_gpio(PALMTE_USB_OR_DC_GPIO)) { 358c3695015SAndrzej Zaborowski printk(KERN_ERR "Could not reserve cable signal GPIO!\n"); 359c3695015SAndrzej Zaborowski return; 360c3695015SAndrzej Zaborowski } 361c3695015SAndrzej Zaborowski omap_set_gpio_direction(PALMTE_USB_OR_DC_GPIO, 1); 362c3695015SAndrzej Zaborowski } 363c3695015SAndrzej Zaborowski 364c3695015SAndrzej Zaborowski static void __init omap_palmte_init(void) 3653179a019STony Lindgren { 3663179a019STony Lindgren omap_board_config = palmte_config; 3673179a019STony Lindgren omap_board_config_size = ARRAY_SIZE(palmte_config); 3689b6553cdSTony Lindgren 369d7730cc0SAndrzej Zaborowski platform_add_devices(palmte_devices, ARRAY_SIZE(palmte_devices)); 370c3695015SAndrzej Zaborowski 371c3695015SAndrzej Zaborowski spi_register_board_info(palmte_spi_info, ARRAY_SIZE(palmte_spi_info)); 372d7730cc0SAndrzej Zaborowski palmte_misc_gpio_setup(); 373c3695015SAndrzej Zaborowski omap_serial_init(); 3741ed16a86SJarkko Nikula omap_register_i2c_bus(1, 100, NULL, 0); 3753179a019STony Lindgren } 3763179a019STony Lindgren 377c3695015SAndrzej Zaborowski static void __init omap_palmte_map_io(void) 3783179a019STony Lindgren { 37987bd63f6STony Lindgren omap1_map_common_io(); 3803179a019STony Lindgren } 3813179a019STony Lindgren 3823179a019STony Lindgren MACHINE_START(OMAP_PALMTE, "OMAP310 based Palm Tungsten E") 3833179a019STony Lindgren .phys_io = 0xfff00000, 3843179a019STony Lindgren .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc, 3853179a019STony Lindgren .boot_params = 0x10000100, 386c3695015SAndrzej Zaborowski .map_io = omap_palmte_map_io, 387c3695015SAndrzej Zaborowski .init_irq = omap_palmte_init_irq, 388c3695015SAndrzej Zaborowski .init_machine = omap_palmte_init, 3893179a019STony Lindgren .timer = &omap_timer, 3903179a019STony Lindgren MACHINE_END 391