cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

board-palmte.c (6500B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * linux/arch/arm/mach-omap1/board-palmte.c
      4 *
      5 * Modified from board-generic.c
      6 *
      7 * Support for the Palm Tungsten E PDA.
      8 *
      9 * Original version : Laurent Gonzalez
     10 *
     11 * Maintainers : http://palmtelinux.sf.net
     12 *                palmtelinux-developpers@lists.sf.net
     13 *
     14 * Copyright (c) 2006 Andrzej Zaborowski  <balrog@zabor.org>
     15 */
     16#include <linux/gpio.h>
     17#include <linux/kernel.h>
     18#include <linux/init.h>
     19#include <linux/input.h>
     20#include <linux/platform_device.h>
     21#include <linux/mtd/mtd.h>
     22#include <linux/mtd/partitions.h>
     23#include <linux/mtd/physmap.h>
     24#include <linux/spi/spi.h>
     25#include <linux/interrupt.h>
     26#include <linux/apm-emulation.h>
     27#include <linux/omapfb.h>
     28#include <linux/omap-dma.h>
     29#include <linux/platform_data/keypad-omap.h>
     30#include <linux/platform_data/omap1_bl.h>
     31
     32#include <asm/mach-types.h>
     33#include <asm/mach/arch.h>
     34#include <asm/mach/map.h>
     35
     36#include "tc.h"
     37#include "flash.h"
     38#include "mux.h"
     39#include "hardware.h"
     40#include "usb.h"
     41#include "mmc.h"
     42#include "common.h"
     43
     44#define PALMTE_USBDETECT_GPIO	0
     45#define PALMTE_USB_OR_DC_GPIO	1
     46#define PALMTE_TSC_GPIO		4
     47#define PALMTE_PINTDAV_GPIO	6
     48#define PALMTE_MMC_WP_GPIO	8
     49#define PALMTE_MMC_POWER_GPIO	9
     50#define PALMTE_HDQ_GPIO		11
     51#define PALMTE_HEADPHONES_GPIO	14
     52#define PALMTE_SPEAKER_GPIO	15
     53#define PALMTE_DC_GPIO		OMAP_MPUIO(2)
     54#define PALMTE_MMC_SWITCH_GPIO	OMAP_MPUIO(4)
     55#define PALMTE_MMC1_GPIO	OMAP_MPUIO(6)
     56#define PALMTE_MMC2_GPIO	OMAP_MPUIO(7)
     57#define PALMTE_MMC3_GPIO	OMAP_MPUIO(11)
     58
     59static const unsigned int palmte_keymap[] = {
     60	KEY(0, 0, KEY_F1),		/* Calendar */
     61	KEY(1, 0, KEY_F2),		/* Contacts */
     62	KEY(2, 0, KEY_F3),		/* Tasks List */
     63	KEY(3, 0, KEY_F4),		/* Note Pad */
     64	KEY(4, 0, KEY_POWER),
     65	KEY(0, 1, KEY_LEFT),
     66	KEY(1, 1, KEY_DOWN),
     67	KEY(2, 1, KEY_UP),
     68	KEY(3, 1, KEY_RIGHT),
     69	KEY(4, 1, KEY_ENTER),
     70};
     71
     72static const struct matrix_keymap_data palmte_keymap_data = {
     73	.keymap		= palmte_keymap,
     74	.keymap_size	= ARRAY_SIZE(palmte_keymap),
     75};
     76
     77static struct omap_kp_platform_data palmte_kp_data = {
     78	.rows	= 8,
     79	.cols	= 8,
     80	.keymap_data = &palmte_keymap_data,
     81	.rep	= true,
     82	.delay	= 12,
     83};
     84
     85static struct resource palmte_kp_resources[] = {
     86	[0]	= {
     87		.start	= INT_KEYBOARD,
     88		.end	= INT_KEYBOARD,
     89		.flags	= IORESOURCE_IRQ,
     90	},
     91};
     92
     93static struct platform_device palmte_kp_device = {
     94	.name		= "omap-keypad",
     95	.id		= -1,
     96	.dev		= {
     97		.platform_data	= &palmte_kp_data,
     98	},
     99	.num_resources	= ARRAY_SIZE(palmte_kp_resources),
    100	.resource	= palmte_kp_resources,
    101};
    102
    103static struct mtd_partition palmte_rom_partitions[] = {
    104	/* PalmOS "Small ROM", contains the bootloader and the debugger */
    105	{
    106		.name		= "smallrom",
    107		.offset		= 0,
    108		.size		= 0xa000,
    109		.mask_flags	= MTD_WRITEABLE,
    110	},
    111	/* PalmOS "Big ROM", a filesystem with all the OS code and data */
    112	{
    113		.name		= "bigrom",
    114		.offset		= SZ_128K,
    115		/*
    116		 * 0x5f0000 bytes big in the multi-language ("EFIGS") version,
    117		 * 0x7b0000 bytes in the English-only ("enUS") version.
    118		 */
    119		.size		= 0x7b0000,
    120		.mask_flags	= MTD_WRITEABLE,
    121	},
    122};
    123
    124static struct physmap_flash_data palmte_rom_data = {
    125	.width		= 2,
    126	.set_vpp	= omap1_set_vpp,
    127	.parts		= palmte_rom_partitions,
    128	.nr_parts	= ARRAY_SIZE(palmte_rom_partitions),
    129};
    130
    131static struct resource palmte_rom_resource = {
    132	.start		= OMAP_CS0_PHYS,
    133	.end		= OMAP_CS0_PHYS + SZ_8M - 1,
    134	.flags		= IORESOURCE_MEM,
    135};
    136
    137static struct platform_device palmte_rom_device = {
    138	.name		= "physmap-flash",
    139	.id		= -1,
    140	.dev		= {
    141		.platform_data	= &palmte_rom_data,
    142	},
    143	.num_resources	= 1,
    144	.resource	= &palmte_rom_resource,
    145};
    146
    147static struct platform_device palmte_lcd_device = {
    148	.name		= "lcd_palmte",
    149	.id		= -1,
    150};
    151
    152static struct omap_backlight_config palmte_backlight_config = {
    153	.default_intensity	= 0xa0,
    154};
    155
    156static struct platform_device palmte_backlight_device = {
    157	.name		= "omap-bl",
    158	.id		= -1,
    159	.dev		= {
    160		.platform_data	= &palmte_backlight_config,
    161	},
    162};
    163
    164static struct platform_device *palmte_devices[] __initdata = {
    165	&palmte_rom_device,
    166	&palmte_kp_device,
    167	&palmte_lcd_device,
    168	&palmte_backlight_device,
    169};
    170
    171static struct omap_usb_config palmte_usb_config __initdata = {
    172	.register_dev	= 1,	/* Mini-B only receptacle */
    173	.hmc_mode	= 0,
    174	.pins[0]	= 2,
    175};
    176
    177static const struct omap_lcd_config palmte_lcd_config __initconst = {
    178	.ctrl_name	= "internal",
    179};
    180
    181static struct spi_board_info palmte_spi_info[] __initdata = {
    182	{
    183		.modalias	= "tsc2102",
    184		.bus_num	= 2,	/* uWire (officially) */
    185		.chip_select	= 0,	/* As opposed to 3 */
    186		.max_speed_hz	= 8000000,
    187	},
    188};
    189
    190static void __init palmte_misc_gpio_setup(void)
    191{
    192	/* Set TSC2102 PINTDAV pin as input (used by TSC2102 driver) */
    193	if (gpio_request(PALMTE_PINTDAV_GPIO, "TSC2102 PINTDAV") < 0) {
    194		printk(KERN_ERR "Could not reserve PINTDAV GPIO!\n");
    195		return;
    196	}
    197	gpio_direction_input(PALMTE_PINTDAV_GPIO);
    198
    199	/* Set USB-or-DC-IN pin as input (unused) */
    200	if (gpio_request(PALMTE_USB_OR_DC_GPIO, "USB/DC-IN") < 0) {
    201		printk(KERN_ERR "Could not reserve cable signal GPIO!\n");
    202		return;
    203	}
    204	gpio_direction_input(PALMTE_USB_OR_DC_GPIO);
    205}
    206
    207#if IS_ENABLED(CONFIG_MMC_OMAP)
    208
    209static struct omap_mmc_platform_data _palmte_mmc_config = {
    210	.nr_slots			= 1,
    211	.slots[0]			= {
    212		.ocr_mask		= MMC_VDD_32_33|MMC_VDD_33_34,
    213		.name			= "mmcblk",
    214	},
    215};
    216
    217static struct omap_mmc_platform_data *palmte_mmc_config[OMAP15XX_NR_MMC] = {
    218	[0] = &_palmte_mmc_config,
    219};
    220
    221static void palmte_mmc_init(void)
    222{
    223	omap1_init_mmc(palmte_mmc_config, OMAP15XX_NR_MMC);
    224}
    225
    226#else /* CONFIG_MMC_OMAP */
    227
    228static void palmte_mmc_init(void)
    229{
    230}
    231
    232#endif /* CONFIG_MMC_OMAP */
    233
    234static void __init omap_palmte_init(void)
    235{
    236	/* mux pins for uarts */
    237	omap_cfg_reg(UART1_TX);
    238	omap_cfg_reg(UART1_RTS);
    239	omap_cfg_reg(UART2_TX);
    240	omap_cfg_reg(UART2_RTS);
    241	omap_cfg_reg(UART3_TX);
    242	omap_cfg_reg(UART3_RX);
    243
    244	platform_add_devices(palmte_devices, ARRAY_SIZE(palmte_devices));
    245
    246	palmte_spi_info[0].irq = gpio_to_irq(PALMTE_PINTDAV_GPIO);
    247	spi_register_board_info(palmte_spi_info, ARRAY_SIZE(palmte_spi_info));
    248	palmte_misc_gpio_setup();
    249	omap_serial_init();
    250	omap1_usb_init(&palmte_usb_config);
    251	omap_register_i2c_bus(1, 100, NULL, 0);
    252
    253	omapfb_set_lcd_config(&palmte_lcd_config);
    254	palmte_mmc_init();
    255}
    256
    257MACHINE_START(OMAP_PALMTE, "OMAP310 based Palm Tungsten E")
    258	.atag_offset	= 0x100,
    259	.map_io		= omap15xx_map_io,
    260	.init_early     = omap1_init_early,
    261	.init_irq	= omap1_init_irq,
    262	.handle_irq	= omap1_handle_irq,
    263	.init_machine	= omap_palmte_init,
    264	.init_late	= omap1_init_late,
    265	.init_time	= omap1_timer_init,
    266	.restart	= omap1_restart,
    267MACHINE_END