2006-12-07 04:14:07 +03:00
/*
* linux / arch / arm / mach - omap1 / board - palmtt . c
*
* Modified from board - palmtt2 . c
*
* Modified and amended for Palm Tungsten | T
* by Marek Vasut < marek . vasut @ gmail . com >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*/
# include <linux/delay.h>
2011-07-26 13:53:52 +04:00
# include <linux/gpio.h>
2006-12-07 04:14:07 +03:00
# include <linux/kernel.h>
# include <linux/init.h>
# include <linux/platform_device.h>
# include <linux/notifier.h>
# include <linux/clk.h>
# include <linux/input.h>
# include <linux/interrupt.h>
# include <linux/mtd/mtd.h>
# include <linux/mtd/partitions.h>
2010-02-15 21:03:32 +03:00
# include <linux/mtd/physmap.h>
2006-12-07 04:14:07 +03:00
# include <linux/leds.h>
2011-09-20 16:23:13 +04:00
# include <linux/omapfb.h>
2012-02-24 22:34:34 +04:00
# include <linux/spi/spi.h>
# include <linux/spi/ads7846.h>
2012-08-29 03:18:54 +04:00
# include <linux/platform_data/omap1_bl.h>
2012-10-03 01:12:31 +04:00
# include <linux/platform_data/leds-omap.h>
2006-12-07 04:14:07 +03:00
# include <asm/mach-types.h>
# include <asm/mach/arch.h>
# include <asm/mach/map.h>
2012-09-20 22:41:37 +04:00
# include <mach/flash.h>
2012-09-19 21:46:56 +04:00
# include <mach/mux.h>
2012-11-30 20:41:50 +04:00
# include <linux/omap-dma.h>
2012-10-03 00:39:28 +04:00
# include <mach/tc.h>
2012-08-24 17:21:06 +04:00
# include <linux/platform_data/keypad-omap.h>
2006-12-07 04:14:07 +03:00
2012-02-24 22:34:34 +04:00
# include <mach/hardware.h>
2012-06-04 11:56:15 +04:00
# include <mach/usb.h>
2012-02-24 22:34:34 +04:00
# include "common.h"
2006-12-07 04:14:07 +03:00
2009-03-24 04:07:35 +03:00
# define PALMTT_USBDETECT_GPIO 0
# define PALMTT_CABLE_GPIO 1
# define PALMTT_LED_GPIO 3
# define PALMTT_PENIRQ_GPIO 6
# define PALMTT_MMC_WP_GPIO 8
# define PALMTT_HDQ_GPIO 11
2010-12-21 00:09:22 +03:00
static const unsigned int palmtt_keymap [ ] = {
2006-12-07 04:14:07 +03:00
KEY ( 0 , 0 , KEY_ESC ) ,
2010-12-21 00:09:22 +03:00
KEY ( 1 , 0 , KEY_SPACE ) ,
KEY ( 2 , 0 , KEY_LEFTCTRL ) ,
KEY ( 3 , 0 , KEY_TAB ) ,
KEY ( 4 , 0 , KEY_ENTER ) ,
KEY ( 0 , 1 , KEY_LEFT ) ,
2006-12-07 04:14:07 +03:00
KEY ( 1 , 1 , KEY_DOWN ) ,
2010-12-21 00:09:22 +03:00
KEY ( 2 , 1 , KEY_UP ) ,
KEY ( 3 , 1 , KEY_RIGHT ) ,
KEY ( 0 , 2 , KEY_SLEEP ) ,
KEY ( 4 , 2 , KEY_Y ) ,
2006-12-07 04:14:07 +03:00
} ;
static struct mtd_partition palmtt_partitions [ ] = {
{
. name = " write8k " ,
. offset = 0 ,
. size = SZ_8K ,
. mask_flags = 0 ,
} ,
{
. name = " PalmOS-BootLoader(ro) " ,
. offset = SZ_8K ,
. size = 7 * SZ_8K ,
. mask_flags = MTD_WRITEABLE ,
} ,
{
. name = " u-boot " ,
. offset = MTDPART_OFS_APPEND ,
. size = 8 * SZ_8K ,
. mask_flags = 0 ,
} ,
{
. name = " PalmOS-FS(ro) " ,
. offset = MTDPART_OFS_APPEND ,
. size = 7 * SZ_1M + 4 * SZ_64K - 16 * SZ_8K ,
. mask_flags = MTD_WRITEABLE ,
} ,
{
. name = " u-boot(rez) " ,
. offset = MTDPART_OFS_APPEND ,
. size = SZ_128K ,
. mask_flags = 0
} ,
{
. name = " empty " ,
. offset = MTDPART_OFS_APPEND ,
. size = MTDPART_SIZ_FULL ,
. mask_flags = 0
}
} ;
2010-02-15 21:03:32 +03:00
static struct physmap_flash_data palmtt_flash_data = {
2006-12-07 04:14:07 +03:00
. width = 2 ,
2010-02-15 21:03:32 +03:00
. set_vpp = omap1_set_vpp ,
2006-12-07 04:14:07 +03:00
. parts = palmtt_partitions ,
. nr_parts = ARRAY_SIZE ( palmtt_partitions ) ,
} ;
static struct resource palmtt_flash_resource = {
. start = OMAP_CS0_PHYS ,
. end = OMAP_CS0_PHYS + SZ_8M - 1 ,
. flags = IORESOURCE_MEM ,
} ;
static struct platform_device palmtt_flash_device = {
2010-02-15 21:03:32 +03:00
. name = " physmap-flash " ,
2006-12-07 04:14:07 +03:00
. id = 0 ,
. dev = {
. platform_data = & palmtt_flash_data ,
} ,
. num_resources = 1 ,
. resource = & palmtt_flash_resource ,
} ;
static struct resource palmtt_kp_resources [ ] = {
[ 0 ] = {
. start = INT_KEYBOARD ,
. end = INT_KEYBOARD ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
2010-12-21 00:09:22 +03:00
static const struct matrix_keymap_data palmtt_keymap_data = {
. keymap = palmtt_keymap ,
. keymap_size = ARRAY_SIZE ( palmtt_keymap ) ,
} ;
2006-12-07 04:14:07 +03:00
static struct omap_kp_platform_data palmtt_kp_data = {
. rows = 6 ,
. cols = 3 ,
2010-12-21 00:09:22 +03:00
. keymap_data = & palmtt_keymap_data ,
2006-12-07 04:14:07 +03:00
} ;
static struct platform_device palmtt_kp_device = {
. name = " omap-keypad " ,
. id = - 1 ,
. dev = {
. platform_data = & palmtt_kp_data ,
} ,
. num_resources = ARRAY_SIZE ( palmtt_kp_resources ) ,
. resource = palmtt_kp_resources ,
} ;
static struct platform_device palmtt_lcd_device = {
. name = " lcd_palmtt " ,
. id = - 1 ,
} ;
static struct platform_device palmtt_spi_device = {
. name = " spi_palmtt " ,
. id = - 1 ,
} ;
static struct omap_backlight_config palmtt_backlight_config = {
. default_intensity = 0xa0 ,
} ;
static struct platform_device palmtt_backlight_device = {
. name = " omap-bl " ,
. id = - 1 ,
. dev = {
. platform_data = & palmtt_backlight_config ,
} ,
} ;
static struct omap_led_config palmtt_led_config [ ] = {
{
. cdev = {
. name = " palmtt:led0 " ,
} ,
. gpio = PALMTT_LED_GPIO ,
} ,
} ;
static struct omap_led_platform_data palmtt_led_data = {
. nr_leds = ARRAY_SIZE ( palmtt_led_config ) ,
. leds = palmtt_led_config ,
} ;
static struct platform_device palmtt_led_device = {
. name = " omap-led " ,
. id = - 1 ,
. dev = {
. platform_data = & palmtt_led_data ,
} ,
} ;
static struct platform_device * palmtt_devices [ ] __initdata = {
& palmtt_flash_device ,
& palmtt_kp_device ,
& palmtt_lcd_device ,
& palmtt_spi_device ,
& palmtt_backlight_device ,
& palmtt_led_device ,
} ;
static int palmtt_get_pendown_state ( void )
{
2008-12-11 04:35:25 +03:00
return ! gpio_get_value ( 6 ) ;
2006-12-07 04:14:07 +03:00
}
static const struct ads7846_platform_data palmtt_ts_info = {
. model = 7846 ,
. vref_delay_usecs = 100 , /* internal, no capacitor */
. x_plate_ohms = 419 ,
. y_plate_ohms = 486 ,
. get_pendown_state = palmtt_get_pendown_state ,
} ;
static struct spi_board_info __initdata palmtt_boardinfo [ ] = {
{
/* MicroWire (bus 2) CS0 has an ads7846e */
. modalias = " ads7846 " ,
. platform_data = & palmtt_ts_info ,
. max_speed_hz = 120000 /* max sample rate at 3V */
* 26 /* command + data + overhead */ ,
. bus_num = 2 ,
. chip_select = 0 ,
}
} ;
static struct omap_usb_config palmtt_usb_config __initdata = {
. register_dev = 1 ,
. hmc_mode = 0 ,
. pins [ 0 ] = 2 ,
} ;
static struct omap_lcd_config palmtt_lcd_config __initdata = {
. ctrl_name = " internal " ,
} ;
static void __init omap_mpu_wdt_mode ( int mode ) {
if ( mode )
omap_writew ( 0x8000 , OMAP_WDT_TIMER_MODE ) ;
else {
omap_writew ( 0x00f5 , OMAP_WDT_TIMER_MODE ) ;
omap_writew ( 0x00a0 , OMAP_WDT_TIMER_MODE ) ;
}
}
static void __init omap_palmtt_init ( void )
{
2009-10-23 01:47:42 +04:00
/* mux pins for uarts */
omap_cfg_reg ( UART1_TX ) ;
omap_cfg_reg ( UART1_RTS ) ;
omap_cfg_reg ( UART2_TX ) ;
omap_cfg_reg ( UART2_RTS ) ;
omap_cfg_reg ( UART3_TX ) ;
omap_cfg_reg ( UART3_RX ) ;
2006-12-07 04:14:07 +03:00
omap_mpu_wdt_mode ( 0 ) ;
platform_add_devices ( palmtt_devices , ARRAY_SIZE ( palmtt_devices ) ) ;
2012-03-29 19:41:01 +04:00
palmtt_boardinfo [ 0 ] . irq = gpio_to_irq ( 6 ) ;
2006-12-07 04:14:07 +03:00
spi_register_board_info ( palmtt_boardinfo , ARRAY_SIZE ( palmtt_boardinfo ) ) ;
omap_serial_init ( ) ;
2010-07-05 17:31:30 +04:00
omap1_usb_init ( & palmtt_usb_config ) ;
2007-11-07 07:54:32 +03:00
omap_register_i2c_bus ( 1 , 100 , NULL , 0 ) ;
2011-09-20 16:23:13 +04:00
omapfb_set_lcd_config ( & palmtt_lcd_config ) ;
2006-12-07 04:14:07 +03:00
}
MACHINE_START ( OMAP_PALMTT , " OMAP1510 based Palm Tungsten|T " )
2011-07-06 06:38:15 +04:00
. atag_offset = 0x100 ,
2011-10-06 02:14:02 +04:00
. map_io = omap15xx_map_io ,
. init_early = omap1_init_early ,
. init_irq = omap1_init_irq ,
2006-12-07 04:14:07 +03:00
. init_machine = omap_palmtt_init ,
2012-04-26 09:49:29 +04:00
. init_late = omap1_init_late ,
2012-11-08 23:40:59 +04:00
. init_time = omap1_timer_init ,
2011-11-05 21:06:28 +04:00
. restart = omap1_restart ,
2006-12-07 04:14:07 +03:00
MACHINE_END