2019-06-04 10:11:33 +02:00
// SPDX-License-Identifier: GPL-2.0-only
2005-11-10 14:26:48 +00:00
/*
* linux / arch / arm / mach - omap1 / board - palmte . c
*
* Modified from board - generic . c
*
* Support for the Palm Tungsten E PDA .
*
* Original version : Laurent Gonzalez
*
2007-05-11 20:40:30 +01:00
* Maintainers : http : //palmtelinux.sf.net
2005-11-10 14:26:48 +00:00
* palmtelinux - developpers @ lists . sf . net
*
2006-12-07 17:13:51 -08:00
* Copyright ( c ) 2006 Andrzej Zaborowski < balrog @ zabor . org >
2005-11-10 14:26:48 +00:00
*/
2023-04-30 11:56:23 +02:00
# include <linux/gpio/machine.h>
# include <linux/gpio/consumer.h>
2005-11-10 14:26:48 +00:00
# include <linux/kernel.h>
# include <linux/init.h>
2006-12-06 17:13:51 -08:00
# include <linux/input.h>
2005-11-10 14:26:48 +00:00
# include <linux/platform_device.h>
2006-12-06 17:13:51 -08:00
# include <linux/mtd/mtd.h>
# include <linux/mtd/partitions.h>
2010-02-15 10:03:32 -08:00
# include <linux/mtd/physmap.h>
2006-12-06 17:13:51 -08:00
# include <linux/spi/spi.h>
# include <linux/interrupt.h>
2006-12-07 17:13:51 -08:00
# include <linux/apm-emulation.h>
2011-09-20 15:23:13 +03:00
# include <linux/omapfb.h>
2019-08-06 16:16:03 +02:00
# include <linux/omap-dma.h>
# include <linux/platform_data/keypad-omap.h>
2012-08-29 02:18:54 +03:00
# include <linux/platform_data/omap1_bl.h>
2005-11-10 14:26:48 +00:00
# include <asm/mach-types.h>
# include <asm/mach/arch.h>
# include <asm/mach/map.h>
2019-08-06 16:16:03 +02:00
# include "tc.h"
2015-01-30 10:45:33 +01:00
# include "flash.h"
2019-08-06 16:16:03 +02:00
# include "mux.h"
# include "hardware.h"
2019-08-06 14:34:31 +02:00
# include "usb.h"
2018-12-04 19:58:12 +02:00
# include "mmc.h"
2011-11-10 22:45:17 +01:00
# include "common.h"
2005-11-10 14:26:48 +00:00
2009-03-23 18:07:35 -07:00
# define PALMTE_USBDETECT_GPIO 0
# define PALMTE_USB_OR_DC_GPIO 1
# define PALMTE_TSC_GPIO 4
# define PALMTE_PINTDAV_GPIO 6
# define PALMTE_MMC_WP_GPIO 8
# define PALMTE_MMC_POWER_GPIO 9
# define PALMTE_HDQ_GPIO 11
# define PALMTE_HEADPHONES_GPIO 14
# define PALMTE_SPEAKER_GPIO 15
# define PALMTE_DC_GPIO OMAP_MPUIO(2)
# define PALMTE_MMC_SWITCH_GPIO OMAP_MPUIO(4)
# define PALMTE_MMC1_GPIO OMAP_MPUIO(6)
# define PALMTE_MMC2_GPIO OMAP_MPUIO(7)
# define PALMTE_MMC3_GPIO OMAP_MPUIO(11)
2010-12-20 21:09:22 +00:00
static const unsigned int palmte_keymap [ ] = {
2006-12-07 17:13:51 -08:00
KEY ( 0 , 0 , KEY_F1 ) , /* Calendar */
2010-12-20 21:09:22 +00:00
KEY ( 1 , 0 , KEY_F2 ) , /* Contacts */
KEY ( 2 , 0 , KEY_F3 ) , /* Tasks List */
KEY ( 3 , 0 , KEY_F4 ) , /* Note Pad */
KEY ( 4 , 0 , KEY_POWER ) ,
KEY ( 0 , 1 , KEY_LEFT ) ,
2006-12-06 17:13:51 -08:00
KEY ( 1 , 1 , KEY_DOWN ) ,
2010-12-20 21:09:22 +00:00
KEY ( 2 , 1 , KEY_UP ) ,
KEY ( 3 , 1 , KEY_RIGHT ) ,
KEY ( 4 , 1 , KEY_ENTER ) ,
} ;
static const struct matrix_keymap_data palmte_keymap_data = {
. keymap = palmte_keymap ,
. keymap_size = ARRAY_SIZE ( palmte_keymap ) ,
2006-12-06 17:13:51 -08:00
} ;
static struct omap_kp_platform_data palmte_kp_data = {
. rows = 8 ,
. cols = 8 ,
2010-12-20 21:09:22 +00:00
. keymap_data = & palmte_keymap_data ,
. rep = true ,
2006-12-06 17:13:51 -08:00
. delay = 12 ,
} ;
static struct resource palmte_kp_resources [ ] = {
[ 0 ] = {
. start = INT_KEYBOARD ,
. end = INT_KEYBOARD ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct platform_device palmte_kp_device = {
. name = " omap-keypad " ,
. id = - 1 ,
. dev = {
. platform_data = & palmte_kp_data ,
} ,
. num_resources = ARRAY_SIZE ( palmte_kp_resources ) ,
. resource = palmte_kp_resources ,
} ;
static struct mtd_partition palmte_rom_partitions [ ] = {
/* PalmOS "Small ROM", contains the bootloader and the debugger */
{
. name = " smallrom " ,
. offset = 0 ,
. size = 0xa000 ,
. mask_flags = MTD_WRITEABLE ,
} ,
/* PalmOS "Big ROM", a filesystem with all the OS code and data */
{
. name = " bigrom " ,
. offset = SZ_128K ,
/*
* 0x5f0000 bytes big in the multi - language ( " EFIGS " ) version ,
* 0x7b0000 bytes in the English - only ( " enUS " ) version .
*/
. size = 0x7b0000 ,
. mask_flags = MTD_WRITEABLE ,
} ,
} ;
2010-02-15 10:03:32 -08:00
static struct physmap_flash_data palmte_rom_data = {
2006-12-06 17:13:51 -08:00
. width = 2 ,
2010-02-15 10:03:32 -08:00
. set_vpp = omap1_set_vpp ,
2006-12-06 17:13:51 -08:00
. parts = palmte_rom_partitions ,
. nr_parts = ARRAY_SIZE ( palmte_rom_partitions ) ,
} ;
static struct resource palmte_rom_resource = {
. start = OMAP_CS0_PHYS ,
. end = OMAP_CS0_PHYS + SZ_8M - 1 ,
. flags = IORESOURCE_MEM ,
} ;
static struct platform_device palmte_rom_device = {
2010-02-15 10:03:32 -08:00
. name = " physmap-flash " ,
2006-12-06 17:13:51 -08:00
. id = - 1 ,
. dev = {
. platform_data = & palmte_rom_data ,
} ,
. num_resources = 1 ,
. resource = & palmte_rom_resource ,
} ;
2006-04-02 17:46:30 +01:00
static struct platform_device palmte_lcd_device = {
. name = " lcd_palmte " ,
. id = - 1 ,
} ;
2006-12-06 17:13:51 -08:00
static struct omap_backlight_config palmte_backlight_config = {
. default_intensity = 0xa0 ,
} ;
static struct platform_device palmte_backlight_device = {
. name = " omap-bl " ,
. id = - 1 ,
. dev = {
. platform_data = & palmte_backlight_config ,
} ,
} ;
2006-12-07 17:13:51 -08:00
static struct platform_device * palmte_devices [ ] __initdata = {
2006-12-06 17:13:51 -08:00
& palmte_rom_device ,
& palmte_kp_device ,
2006-04-02 17:46:30 +01:00
& palmte_lcd_device ,
2006-12-06 17:13:51 -08:00
& palmte_backlight_device ,
2006-04-02 17:46:30 +01:00
} ;
2005-11-10 14:26:48 +00:00
static struct omap_usb_config palmte_usb_config __initdata = {
2006-12-06 17:13:51 -08:00
. register_dev = 1 , /* Mini-B only receptacle */
2005-11-10 14:26:48 +00:00
. hmc_mode = 0 ,
2006-12-06 17:13:51 -08:00
. pins [ 0 ] = 2 ,
2005-11-10 14:26:48 +00:00
} ;
2017-08-22 11:55:50 +05:30
static const struct omap_lcd_config palmte_lcd_config __initconst = {
2005-11-10 14:26:48 +00:00
. ctrl_name = " internal " ,
} ;
2006-12-06 17:13:51 -08:00
static struct spi_board_info palmte_spi_info [ ] __initdata = {
{
. modalias = " tsc2102 " ,
. bus_num = 2 , /* uWire (officially) */
. chip_select = 0 , /* As opposed to 3 */
. max_speed_hz = 8000000 ,
} ,
} ;
2018-12-04 19:58:12 +02:00
# if IS_ENABLED(CONFIG_MMC_OMAP)
static struct omap_mmc_platform_data _palmte_mmc_config = {
. nr_slots = 1 ,
. slots [ 0 ] = {
. ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34 ,
. name = " mmcblk " ,
} ,
} ;
static struct omap_mmc_platform_data * palmte_mmc_config [ OMAP15XX_NR_MMC ] = {
[ 0 ] = & _palmte_mmc_config ,
} ;
static void palmte_mmc_init ( void )
{
omap1_init_mmc ( palmte_mmc_config , OMAP15XX_NR_MMC ) ;
}
# else /* CONFIG_MMC_OMAP */
static void palmte_mmc_init ( void )
{
}
# endif /* CONFIG_MMC_OMAP */
2023-04-30 11:56:23 +02:00
static struct gpiod_lookup_table palmte_irq_gpio_table = {
. dev_id = NULL ,
. table = {
/* GPIO used for TSC2102 PINTDAV IRQ */
GPIO_LOOKUP ( " gpio-0-15 " , PALMTE_PINTDAV_GPIO , " tsc2102_irq " ,
GPIO_ACTIVE_HIGH ) ,
/* GPIO used for USB or DC input detection */
GPIO_LOOKUP ( " gpio-0-15 " , PALMTE_USB_OR_DC_GPIO , " usb_dc_irq " ,
GPIO_ACTIVE_HIGH ) ,
{ }
} ,
} ;
2006-12-06 17:13:51 -08:00
static void __init omap_palmte_init ( void )
2005-11-10 14:26:48 +00:00
{
2023-04-30 11:56:23 +02:00
struct gpio_desc * d ;
2009-10-22 14:47:42 -07: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 17:13:51 -08:00
platform_add_devices ( palmte_devices , ARRAY_SIZE ( palmte_devices ) ) ;
2006-12-06 17:13:51 -08:00
2023-04-30 11:56:23 +02:00
gpiod_add_lookup_table ( & palmte_irq_gpio_table ) ;
d = gpiod_get ( NULL , " tsc2102_irq " , GPIOD_IN ) ;
if ( IS_ERR ( d ) )
pr_err ( " Unable to get TSC2102 IRQ GPIO descriptor \n " ) ;
else
palmte_spi_info [ 0 ] . irq = gpiod_to_irq ( d ) ;
2006-12-06 17:13:51 -08:00
spi_register_board_info ( palmte_spi_info , ARRAY_SIZE ( palmte_spi_info ) ) ;
2023-04-30 11:56:23 +02:00
/* We are getting this just to set it up as input */
d = gpiod_get ( NULL , " usb_dc_irq " , GPIOD_IN ) ;
if ( IS_ERR ( d ) )
pr_err ( " Unable to get USB/DC IRQ GPIO descriptor \n " ) ;
else
gpiod_put ( d ) ;
2006-12-06 17:13:51 -08:00
omap_serial_init ( ) ;
2010-07-05 16:31:30 +03:00
omap1_usb_init ( & palmte_usb_config ) ;
2007-11-07 06:54:32 +02:00
omap_register_i2c_bus ( 1 , 100 , NULL , 0 ) ;
2011-09-20 15:23:13 +03:00
omapfb_set_lcd_config ( & palmte_lcd_config ) ;
2018-12-04 19:58:12 +02:00
palmte_mmc_init ( ) ;
2005-11-10 14:26:48 +00:00
}
MACHINE_START ( OMAP_PALMTE , " OMAP310 based Palm Tungsten E " )
2011-07-05 22:38:15 -04:00
. atag_offset = 0x100 ,
2023-01-04 13:55:37 +01:00
. map_io = omap1_map_io ,
2011-10-05 15:14:02 -07:00
. init_early = omap1_init_early ,
. init_irq = omap1_init_irq ,
2006-12-06 17:13:51 -08:00
. init_machine = omap_palmte_init ,
2012-04-26 13:49:29 +08:00
. init_late = omap1_init_late ,
2012-11-08 12:40:59 -07:00
. init_time = omap1_timer_init ,
2011-11-05 17:06:28 +00:00
. restart = omap1_restart ,
2005-11-10 14:26:48 +00:00
MACHINE_END