Path: blob/master/arch/arm/mach-omap1/board-palmte.c
10817 views
/*1* linux/arch/arm/mach-omap1/board-palmte.c2*3* Modified from board-generic.c4*5* Support for the Palm Tungsten E PDA.6*7* Original version : Laurent Gonzalez8*9* Maintainers : http://palmtelinux.sf.net10* [email protected]11*12* Copyright (c) 2006 Andrzej Zaborowski <[email protected]>13*14* This program is free software; you can redistribute it and/or modify15* it under the terms of the GNU General Public License version 2 as16* published by the Free Software Foundation.17*/1819#include <linux/kernel.h>20#include <linux/init.h>21#include <linux/input.h>22#include <linux/platform_device.h>23#include <linux/mtd/mtd.h>24#include <linux/mtd/partitions.h>25#include <linux/mtd/physmap.h>26#include <linux/spi/spi.h>27#include <linux/interrupt.h>28#include <linux/apm-emulation.h>2930#include <mach/hardware.h>31#include <asm/mach-types.h>32#include <asm/mach/arch.h>33#include <asm/mach/map.h>3435#include <mach/gpio.h>36#include <plat/flash.h>37#include <plat/mux.h>38#include <plat/usb.h>39#include <plat/tc.h>40#include <plat/dma.h>41#include <plat/board.h>42#include <plat/irda.h>43#include <plat/keypad.h>44#include <plat/common.h>4546#define PALMTE_USBDETECT_GPIO 047#define PALMTE_USB_OR_DC_GPIO 148#define PALMTE_TSC_GPIO 449#define PALMTE_PINTDAV_GPIO 650#define PALMTE_MMC_WP_GPIO 851#define PALMTE_MMC_POWER_GPIO 952#define PALMTE_HDQ_GPIO 1153#define PALMTE_HEADPHONES_GPIO 1454#define PALMTE_SPEAKER_GPIO 1555#define PALMTE_DC_GPIO OMAP_MPUIO(2)56#define PALMTE_MMC_SWITCH_GPIO OMAP_MPUIO(4)57#define PALMTE_MMC1_GPIO OMAP_MPUIO(6)58#define PALMTE_MMC2_GPIO OMAP_MPUIO(7)59#define PALMTE_MMC3_GPIO OMAP_MPUIO(11)6061static void __init omap_palmte_init_irq(void)62{63omap1_init_common_hw();64omap_init_irq();65}6667static const unsigned int palmte_keymap[] = {68KEY(0, 0, KEY_F1), /* Calendar */69KEY(1, 0, KEY_F2), /* Contacts */70KEY(2, 0, KEY_F3), /* Tasks List */71KEY(3, 0, KEY_F4), /* Note Pad */72KEY(4, 0, KEY_POWER),73KEY(0, 1, KEY_LEFT),74KEY(1, 1, KEY_DOWN),75KEY(2, 1, KEY_UP),76KEY(3, 1, KEY_RIGHT),77KEY(4, 1, KEY_ENTER),78};7980static const struct matrix_keymap_data palmte_keymap_data = {81.keymap = palmte_keymap,82.keymap_size = ARRAY_SIZE(palmte_keymap),83};8485static struct omap_kp_platform_data palmte_kp_data = {86.rows = 8,87.cols = 8,88.keymap_data = &palmte_keymap_data,89.rep = true,90.delay = 12,91};9293static struct resource palmte_kp_resources[] = {94[0] = {95.start = INT_KEYBOARD,96.end = INT_KEYBOARD,97.flags = IORESOURCE_IRQ,98},99};100101static struct platform_device palmte_kp_device = {102.name = "omap-keypad",103.id = -1,104.dev = {105.platform_data = &palmte_kp_data,106},107.num_resources = ARRAY_SIZE(palmte_kp_resources),108.resource = palmte_kp_resources,109};110111static struct mtd_partition palmte_rom_partitions[] = {112/* PalmOS "Small ROM", contains the bootloader and the debugger */113{114.name = "smallrom",115.offset = 0,116.size = 0xa000,117.mask_flags = MTD_WRITEABLE,118},119/* PalmOS "Big ROM", a filesystem with all the OS code and data */120{121.name = "bigrom",122.offset = SZ_128K,123/*124* 0x5f0000 bytes big in the multi-language ("EFIGS") version,125* 0x7b0000 bytes in the English-only ("enUS") version.126*/127.size = 0x7b0000,128.mask_flags = MTD_WRITEABLE,129},130};131132static struct physmap_flash_data palmte_rom_data = {133.width = 2,134.set_vpp = omap1_set_vpp,135.parts = palmte_rom_partitions,136.nr_parts = ARRAY_SIZE(palmte_rom_partitions),137};138139static struct resource palmte_rom_resource = {140.start = OMAP_CS0_PHYS,141.end = OMAP_CS0_PHYS + SZ_8M - 1,142.flags = IORESOURCE_MEM,143};144145static struct platform_device palmte_rom_device = {146.name = "physmap-flash",147.id = -1,148.dev = {149.platform_data = &palmte_rom_data,150},151.num_resources = 1,152.resource = &palmte_rom_resource,153};154155static struct platform_device palmte_lcd_device = {156.name = "lcd_palmte",157.id = -1,158};159160static struct omap_backlight_config palmte_backlight_config = {161.default_intensity = 0xa0,162};163164static struct platform_device palmte_backlight_device = {165.name = "omap-bl",166.id = -1,167.dev = {168.platform_data = &palmte_backlight_config,169},170};171172static struct omap_irda_config palmte_irda_config = {173.transceiver_cap = IR_SIRMODE,174.rx_channel = OMAP_DMA_UART3_RX,175.tx_channel = OMAP_DMA_UART3_TX,176.dest_start = UART3_THR,177.src_start = UART3_RHR,178.tx_trigger = 0,179.rx_trigger = 0,180};181182static struct resource palmte_irda_resources[] = {183[0] = {184.start = INT_UART3,185.end = INT_UART3,186.flags = IORESOURCE_IRQ,187},188};189190static struct platform_device palmte_irda_device = {191.name = "omapirda",192.id = -1,193.dev = {194.platform_data = &palmte_irda_config,195},196.num_resources = ARRAY_SIZE(palmte_irda_resources),197.resource = palmte_irda_resources,198};199200static struct platform_device *palmte_devices[] __initdata = {201&palmte_rom_device,202&palmte_kp_device,203&palmte_lcd_device,204&palmte_backlight_device,205&palmte_irda_device,206};207208static struct omap_usb_config palmte_usb_config __initdata = {209.register_dev = 1, /* Mini-B only receptacle */210.hmc_mode = 0,211.pins[0] = 2,212};213214static struct omap_lcd_config palmte_lcd_config __initdata = {215.ctrl_name = "internal",216};217218static struct omap_board_config_kernel palmte_config[] __initdata = {219{ OMAP_TAG_LCD, &palmte_lcd_config },220};221222static struct spi_board_info palmte_spi_info[] __initdata = {223{224.modalias = "tsc2102",225.bus_num = 2, /* uWire (officially) */226.chip_select = 0, /* As opposed to 3 */227.irq = OMAP_GPIO_IRQ(PALMTE_PINTDAV_GPIO),228.max_speed_hz = 8000000,229},230};231232static void __init palmte_misc_gpio_setup(void)233{234/* Set TSC2102 PINTDAV pin as input (used by TSC2102 driver) */235if (gpio_request(PALMTE_PINTDAV_GPIO, "TSC2102 PINTDAV") < 0) {236printk(KERN_ERR "Could not reserve PINTDAV GPIO!\n");237return;238}239gpio_direction_input(PALMTE_PINTDAV_GPIO);240241/* Set USB-or-DC-IN pin as input (unused) */242if (gpio_request(PALMTE_USB_OR_DC_GPIO, "USB/DC-IN") < 0) {243printk(KERN_ERR "Could not reserve cable signal GPIO!\n");244return;245}246gpio_direction_input(PALMTE_USB_OR_DC_GPIO);247}248249static void __init omap_palmte_init(void)250{251/* mux pins for uarts */252omap_cfg_reg(UART1_TX);253omap_cfg_reg(UART1_RTS);254omap_cfg_reg(UART2_TX);255omap_cfg_reg(UART2_RTS);256omap_cfg_reg(UART3_TX);257omap_cfg_reg(UART3_RX);258259omap_board_config = palmte_config;260omap_board_config_size = ARRAY_SIZE(palmte_config);261262platform_add_devices(palmte_devices, ARRAY_SIZE(palmte_devices));263264spi_register_board_info(palmte_spi_info, ARRAY_SIZE(palmte_spi_info));265palmte_misc_gpio_setup();266omap_serial_init();267omap1_usb_init(&palmte_usb_config);268omap_register_i2c_bus(1, 100, NULL, 0);269}270271static void __init omap_palmte_map_io(void)272{273omap1_map_common_io();274}275276MACHINE_START(OMAP_PALMTE, "OMAP310 based Palm Tungsten E")277.boot_params = 0x10000100,278.map_io = omap_palmte_map_io,279.reserve = omap_reserve,280.init_irq = omap_palmte_init_irq,281.init_machine = omap_palmte_init,282.timer = &omap_timer,283MACHINE_END284285286