[ARM] 3433/1: ARM: OMAP: 8/8 Update board files
Patch from Tony Lindgren This patch syncs OMAP board support with linux-omap tree. The highlights of the patch are: - Add support for Nokia 770 by Juha Yrjola - Add support for Samsung Apollon by Kyungmin Park - Add support for Amstrad E3 videophone by Jonathan McDowell - Remove board-netstar.c board support as requested by Ladislav Michl - Do platform_device registration in board files by Komal Shah et al. Signed-off-by: Tony Lindgren <tony@atomide.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
120db2cba8
commit
9b6553cd01
@ -69,12 +69,6 @@ config MACH_VOICEBLUE
|
||||
Support for Voiceblue GSM/VoIP gateway. Say Y here if you have
|
||||
such a board.
|
||||
|
||||
config MACH_NETSTAR
|
||||
bool "NetStar"
|
||||
depends on ARCH_OMAP1 && ARCH_OMAP15XX
|
||||
help
|
||||
Support for NetStar PBX. Say Y here if you have such a board.
|
||||
|
||||
config MACH_OMAP_PALMTE
|
||||
bool "Palm Tungsten E"
|
||||
depends on ARCH_OMAP1 && ARCH_OMAP15XX
|
||||
@ -85,6 +79,20 @@ config MACH_OMAP_PALMTE
|
||||
informations.
|
||||
Say Y here if you have such a PDA, say NO otherwise.
|
||||
|
||||
config MACH_NOKIA770
|
||||
bool "Nokia 770"
|
||||
depends on ARCH_OMAP1 && ARCH_OMAP16XX
|
||||
help
|
||||
Support for the Nokia 770 Internet Tablet. Say Y here if you
|
||||
have such a device.
|
||||
|
||||
config MACH_AMS_DELTA
|
||||
bool "Amstrad E3 (Delta)"
|
||||
depends on ARCH_OMAP1 && ARCH_OMAP15XX
|
||||
help
|
||||
Support for the Amstrad E3 (codename Delta) videophone. Say Y here
|
||||
if you have such a device.
|
||||
|
||||
config MACH_OMAP_GENERIC
|
||||
bool "Generic OMAP board"
|
||||
depends on ARCH_OMAP1 && (ARCH_OMAP15XX || ARCH_OMAP16XX)
|
||||
|
116
arch/arm/mach-omap1/board-ams-delta.c
Normal file
116
arch/arm/mach-omap1/board-ams-delta.c
Normal file
@ -0,0 +1,116 @@
|
||||
/*
|
||||
* linux/arch/arm/mach-omap1/board-ams-delta.c
|
||||
*
|
||||
* Modified from board-generic.c
|
||||
*
|
||||
* Board specific inits for the Amstrad E3 (codename Delta) videophone
|
||||
*
|
||||
* Copyright (C) 2006 Jonathan McDowell <noodles@earth.li>
|
||||
*
|
||||
* 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/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include <asm/hardware.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include <asm/arch/board-ams-delta.h>
|
||||
#include <asm/arch/gpio.h>
|
||||
#include <asm/arch/mux.h>
|
||||
#include <asm/arch/usb.h>
|
||||
#include <asm/arch/board.h>
|
||||
#include <asm/arch/common.h>
|
||||
|
||||
static u8 ams_delta_latch1_reg;
|
||||
static u16 ams_delta_latch2_reg;
|
||||
|
||||
void ams_delta_latch1_write(u8 mask, u8 value)
|
||||
{
|
||||
ams_delta_latch1_reg &= ~mask;
|
||||
ams_delta_latch1_reg |= value;
|
||||
*(volatile __u8 *) AMS_DELTA_LATCH1_VIRT = ams_delta_latch1_reg;
|
||||
}
|
||||
|
||||
void ams_delta_latch2_write(u16 mask, u16 value)
|
||||
{
|
||||
ams_delta_latch2_reg &= ~mask;
|
||||
ams_delta_latch2_reg |= value;
|
||||
*(volatile __u16 *) AMS_DELTA_LATCH2_VIRT = ams_delta_latch2_reg;
|
||||
}
|
||||
|
||||
static void __init ams_delta_init_irq(void)
|
||||
{
|
||||
omap1_init_common_hw();
|
||||
omap_init_irq();
|
||||
omap_gpio_init();
|
||||
}
|
||||
|
||||
static struct map_desc ams_delta_io_desc[] __initdata = {
|
||||
// AMS_DELTA_LATCH1
|
||||
{
|
||||
.virtual = AMS_DELTA_LATCH1_VIRT,
|
||||
.pfn = __phys_to_pfn(AMS_DELTA_LATCH1_PHYS),
|
||||
.length = 0x01000000,
|
||||
.type = MT_DEVICE
|
||||
},
|
||||
// AMS_DELTA_LATCH2
|
||||
{
|
||||
.virtual = AMS_DELTA_LATCH2_VIRT,
|
||||
.pfn = __phys_to_pfn(AMS_DELTA_LATCH2_PHYS),
|
||||
.length = 0x01000000,
|
||||
.type = MT_DEVICE
|
||||
},
|
||||
// AMS_DELTA_MODEM
|
||||
{
|
||||
.virtual = AMS_DELTA_MODEM_VIRT,
|
||||
.pfn = __phys_to_pfn(AMS_DELTA_MODEM_PHYS),
|
||||
.length = 0x01000000,
|
||||
.type = MT_DEVICE
|
||||
}
|
||||
};
|
||||
|
||||
static struct omap_uart_config ams_delta_uart_config __initdata = {
|
||||
.enabled_uarts = 1,
|
||||
};
|
||||
|
||||
static struct omap_board_config_kernel ams_delta_config[] = {
|
||||
{ OMAP_TAG_UART, &ams_delta_uart_config },
|
||||
};
|
||||
|
||||
static void __init ams_delta_init(void)
|
||||
{
|
||||
iotable_init(ams_delta_io_desc, ARRAY_SIZE(ams_delta_io_desc));
|
||||
|
||||
omap_board_config = ams_delta_config;
|
||||
omap_board_config_size = ARRAY_SIZE(ams_delta_config);
|
||||
omap_serial_init();
|
||||
|
||||
/* Clear latch2 (NAND, LCD, modem enable) */
|
||||
ams_delta_latch2_write(~0, 0);
|
||||
}
|
||||
|
||||
static void __init ams_delta_map_io(void)
|
||||
{
|
||||
omap1_map_common_io();
|
||||
}
|
||||
|
||||
MACHINE_START(AMS_DELTA, "Amstrad E3 (Delta)")
|
||||
/* Maintainer: Jonathan McDowell <noodles@earth.li> */
|
||||
.phys_io = 0xfff00000,
|
||||
.io_pg_offst = ((0xfef00000) >> 18) & 0xfffc,
|
||||
.boot_params = 0x10000100,
|
||||
.map_io = ams_delta_map_io,
|
||||
.init_irq = ams_delta_init_irq,
|
||||
.init_machine = ams_delta_init,
|
||||
.timer = &omap_timer,
|
||||
MACHINE_END
|
||||
|
||||
EXPORT_SYMBOL(ams_delta_latch1_write);
|
||||
EXPORT_SYMBOL(ams_delta_latch2_write);
|
@ -88,7 +88,7 @@ static struct omap_board_config_kernel generic_config[] = {
|
||||
static void __init omap_generic_init(void)
|
||||
{
|
||||
#ifdef CONFIG_ARCH_OMAP15XX
|
||||
if (cpu_is_omap1510()) {
|
||||
if (cpu_is_omap15xx()) {
|
||||
generic_config[0].data = &generic1510_usb_config;
|
||||
}
|
||||
#endif
|
||||
|
@ -24,7 +24,9 @@
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/nand.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/input.h>
|
||||
|
||||
#include <asm/hardware.h>
|
||||
#include <asm/mach-types.h>
|
||||
@ -35,12 +37,55 @@
|
||||
#include <asm/arch/gpio.h>
|
||||
#include <asm/arch/mux.h>
|
||||
#include <asm/arch/tc.h>
|
||||
#include <asm/arch/irda.h>
|
||||
#include <asm/arch/usb.h>
|
||||
#include <asm/arch/keypad.h>
|
||||
#include <asm/arch/common.h>
|
||||
#include <asm/arch/mcbsp.h>
|
||||
#include <asm/arch/omap-alsa.h>
|
||||
|
||||
extern int omap_gpio_init(void);
|
||||
|
||||
static struct mtd_partition h2_partitions[] = {
|
||||
static int h2_keymap[] = {
|
||||
KEY(0, 0, KEY_LEFT),
|
||||
KEY(0, 1, KEY_RIGHT),
|
||||
KEY(0, 2, KEY_3),
|
||||
KEY(0, 3, KEY_F10),
|
||||
KEY(0, 4, KEY_F5),
|
||||
KEY(0, 5, KEY_9),
|
||||
KEY(1, 0, KEY_DOWN),
|
||||
KEY(1, 1, KEY_UP),
|
||||
KEY(1, 2, KEY_2),
|
||||
KEY(1, 3, KEY_F9),
|
||||
KEY(1, 4, KEY_F7),
|
||||
KEY(1, 5, KEY_0),
|
||||
KEY(2, 0, KEY_ENTER),
|
||||
KEY(2, 1, KEY_6),
|
||||
KEY(2, 2, KEY_1),
|
||||
KEY(2, 3, KEY_F2),
|
||||
KEY(2, 4, KEY_F6),
|
||||
KEY(2, 5, KEY_HOME),
|
||||
KEY(3, 0, KEY_8),
|
||||
KEY(3, 1, KEY_5),
|
||||
KEY(3, 2, KEY_F12),
|
||||
KEY(3, 3, KEY_F3),
|
||||
KEY(3, 4, KEY_F8),
|
||||
KEY(3, 5, KEY_END),
|
||||
KEY(4, 0, KEY_7),
|
||||
KEY(4, 1, KEY_4),
|
||||
KEY(4, 2, KEY_F11),
|
||||
KEY(4, 3, KEY_F1),
|
||||
KEY(4, 4, KEY_F4),
|
||||
KEY(4, 5, KEY_ESC),
|
||||
KEY(5, 0, KEY_F13),
|
||||
KEY(5, 1, KEY_F14),
|
||||
KEY(5, 2, KEY_F15),
|
||||
KEY(5, 3, KEY_F16),
|
||||
KEY(5, 4, KEY_SLEEP),
|
||||
0
|
||||
};
|
||||
|
||||
static struct mtd_partition h2_nor_partitions[] = {
|
||||
/* bootloader (U-Boot, etc) in first sector */
|
||||
{
|
||||
.name = "bootloader",
|
||||
@ -71,26 +116,26 @@ static struct mtd_partition h2_partitions[] = {
|
||||
}
|
||||
};
|
||||
|
||||
static struct flash_platform_data h2_flash_data = {
|
||||
static struct flash_platform_data h2_nor_data = {
|
||||
.map_name = "cfi_probe",
|
||||
.width = 2,
|
||||
.parts = h2_partitions,
|
||||
.nr_parts = ARRAY_SIZE(h2_partitions),
|
||||
.parts = h2_nor_partitions,
|
||||
.nr_parts = ARRAY_SIZE(h2_nor_partitions),
|
||||
};
|
||||
|
||||
static struct resource h2_flash_resource = {
|
||||
static struct resource h2_nor_resource = {
|
||||
/* This is on CS3, wherever it's mapped */
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct platform_device h2_flash_device = {
|
||||
static struct platform_device h2_nor_device = {
|
||||
.name = "omapflash",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &h2_flash_data,
|
||||
.platform_data = &h2_nor_data,
|
||||
},
|
||||
.num_resources = 1,
|
||||
.resource = &h2_flash_resource,
|
||||
.resource = &h2_nor_resource,
|
||||
};
|
||||
|
||||
static struct resource h2_smc91x_resources[] = {
|
||||
@ -113,9 +158,119 @@ static struct platform_device h2_smc91x_device = {
|
||||
.resource = h2_smc91x_resources,
|
||||
};
|
||||
|
||||
static struct resource h2_kp_resources[] = {
|
||||
[0] = {
|
||||
.start = INT_KEYBOARD,
|
||||
.end = INT_KEYBOARD,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct omap_kp_platform_data h2_kp_data = {
|
||||
.rows = 8,
|
||||
.cols = 8,
|
||||
.keymap = h2_keymap,
|
||||
.rep = 1,
|
||||
};
|
||||
|
||||
static struct platform_device h2_kp_device = {
|
||||
.name = "omap-keypad",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &h2_kp_data,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(h2_kp_resources),
|
||||
.resource = h2_kp_resources,
|
||||
};
|
||||
|
||||
#define H2_IRDA_FIRSEL_GPIO_PIN 17
|
||||
|
||||
#if defined(CONFIG_OMAP_IR) || defined(CONFIG_OMAP_IR_MODULE)
|
||||
static int h2_transceiver_mode(struct device *dev, int state)
|
||||
{
|
||||
if (state & IR_SIRMODE)
|
||||
omap_set_gpio_dataout(H2_IRDA_FIRSEL_GPIO_PIN, 0);
|
||||
else /* MIR/FIR */
|
||||
omap_set_gpio_dataout(H2_IRDA_FIRSEL_GPIO_PIN, 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static struct omap_irda_config h2_irda_data = {
|
||||
.transceiver_cap = IR_SIRMODE | IR_MIRMODE | IR_FIRMODE,
|
||||
.rx_channel = OMAP_DMA_UART3_RX,
|
||||
.tx_channel = OMAP_DMA_UART3_TX,
|
||||
.dest_start = UART3_THR,
|
||||
.src_start = UART3_RHR,
|
||||
.tx_trigger = 0,
|
||||
.rx_trigger = 0,
|
||||
};
|
||||
|
||||
static struct resource h2_irda_resources[] = {
|
||||
[0] = {
|
||||
.start = INT_UART3,
|
||||
.end = INT_UART3,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
static struct platform_device h2_irda_device = {
|
||||
.name = "omapirda",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &h2_irda_data,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(h2_irda_resources),
|
||||
.resource = h2_irda_resources,
|
||||
};
|
||||
|
||||
static struct platform_device h2_lcd_device = {
|
||||
.name = "lcd_h2",
|
||||
.id = -1,
|
||||
};
|
||||
|
||||
static struct omap_mcbsp_reg_cfg mcbsp_regs = {
|
||||
.spcr2 = FREE | FRST | GRST | XRST | XINTM(3),
|
||||
.spcr1 = RINTM(3) | RRST,
|
||||
.rcr2 = RPHASE | RFRLEN2(OMAP_MCBSP_WORD_8) |
|
||||
RWDLEN2(OMAP_MCBSP_WORD_16) | RDATDLY(1),
|
||||
.rcr1 = RFRLEN1(OMAP_MCBSP_WORD_8) | RWDLEN1(OMAP_MCBSP_WORD_16),
|
||||
.xcr2 = XPHASE | XFRLEN2(OMAP_MCBSP_WORD_8) |
|
||||
XWDLEN2(OMAP_MCBSP_WORD_16) | XDATDLY(1) | XFIG,
|
||||
.xcr1 = XFRLEN1(OMAP_MCBSP_WORD_8) | XWDLEN1(OMAP_MCBSP_WORD_16),
|
||||
.srgr1 = FWID(15),
|
||||
.srgr2 = GSYNC | CLKSP | FSGM | FPER(31),
|
||||
|
||||
.pcr0 = CLKXM | CLKRM | FSXP | FSRP | CLKXP | CLKRP,
|
||||
//.pcr0 = CLKXP | CLKRP, /* mcbsp: slave */
|
||||
};
|
||||
|
||||
static struct omap_alsa_codec_config alsa_config = {
|
||||
.name = "H2 TSC2101",
|
||||
.mcbsp_regs_alsa = &mcbsp_regs,
|
||||
.codec_configure_dev = NULL, // tsc2101_configure,
|
||||
.codec_set_samplerate = NULL, // tsc2101_set_samplerate,
|
||||
.codec_clock_setup = NULL, // tsc2101_clock_setup,
|
||||
.codec_clock_on = NULL, // tsc2101_clock_on,
|
||||
.codec_clock_off = NULL, // tsc2101_clock_off,
|
||||
.get_default_samplerate = NULL, // tsc2101_get_default_samplerate,
|
||||
};
|
||||
|
||||
static struct platform_device h2_mcbsp1_device = {
|
||||
.name = "omap_alsa_mcbsp",
|
||||
.id = 1,
|
||||
.dev = {
|
||||
.platform_data = &alsa_config,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device *h2_devices[] __initdata = {
|
||||
&h2_flash_device,
|
||||
&h2_nor_device,
|
||||
&h2_smc91x_device,
|
||||
&h2_irda_device,
|
||||
&h2_kp_device,
|
||||
&h2_lcd_device,
|
||||
&h2_mcbsp1_device,
|
||||
};
|
||||
|
||||
static void __init h2_init_smc91x(void)
|
||||
@ -164,7 +319,6 @@ static struct omap_uart_config h2_uart_config __initdata = {
|
||||
};
|
||||
|
||||
static struct omap_lcd_config h2_lcd_config __initdata = {
|
||||
.panel_name = "h2",
|
||||
.ctrl_name = "internal",
|
||||
};
|
||||
|
||||
@ -177,16 +331,34 @@ static struct omap_board_config_kernel h2_config[] = {
|
||||
|
||||
static void __init h2_init(void)
|
||||
{
|
||||
/* NOTE: revC boards support NAND-boot, which can put NOR on CS2B
|
||||
* and NAND (either 16bit or 8bit) on CS3.
|
||||
/* Here we assume the NOR boot config: NOR on CS3 (possibly swapped
|
||||
* to address 0 by a dip switch), NAND on CS2B. The NAND driver will
|
||||
* notice whether a NAND chip is enabled at probe time.
|
||||
*
|
||||
* FIXME revC boards (and H3) support NAND-boot, with a dip switch to
|
||||
* put NOR on CS2B and NAND (which on H2 may be 16bit) on CS3. Try
|
||||
* detecting that in code here, to avoid probing every possible flash
|
||||
* configuration...
|
||||
*/
|
||||
h2_flash_resource.end = h2_flash_resource.start = omap_cs3_phys();
|
||||
h2_flash_resource.end += SZ_32M - 1;
|
||||
h2_nor_resource.end = h2_nor_resource.start = omap_cs3_phys();
|
||||
h2_nor_resource.end += SZ_32M - 1;
|
||||
|
||||
omap_cfg_reg(L3_1610_FLASH_CS2B_OE);
|
||||
omap_cfg_reg(M8_1610_FLASH_CS2B_WE);
|
||||
|
||||
/* MMC: card detect and WP */
|
||||
// omap_cfg_reg(U19_ARMIO1); /* CD */
|
||||
omap_cfg_reg(BALLOUT_V8_ARMIO3); /* WP */
|
||||
|
||||
/* Irda */
|
||||
#if defined(CONFIG_OMAP_IR) || defined(CONFIG_OMAP_IR_MODULE)
|
||||
omap_writel(omap_readl(FUNC_MUX_CTRL_A) | 7, FUNC_MUX_CTRL_A);
|
||||
if (!(omap_request_gpio(H2_IRDA_FIRSEL_GPIO_PIN))) {
|
||||
omap_set_gpio_direction(H2_IRDA_FIRSEL_GPIO_PIN, 0);
|
||||
h2_irda_data.transceiver_mode = h2_transceiver_mode;
|
||||
}
|
||||
#endif
|
||||
|
||||
platform_add_devices(h2_devices, ARRAY_SIZE(h2_devices));
|
||||
omap_board_config = h2_config;
|
||||
omap_board_config_size = ARRAY_SIZE(h2_config);
|
||||
|
@ -21,8 +21,11 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/nand.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/input.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/page.h>
|
||||
@ -33,15 +36,59 @@
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include <asm/arch/gpio.h>
|
||||
#include <asm/arch/gpioexpander.h>
|
||||
#include <asm/arch/irqs.h>
|
||||
#include <asm/arch/mux.h>
|
||||
#include <asm/arch/tc.h>
|
||||
#include <asm/arch/irda.h>
|
||||
#include <asm/arch/usb.h>
|
||||
#include <asm/arch/keypad.h>
|
||||
#include <asm/arch/dma.h>
|
||||
#include <asm/arch/common.h>
|
||||
|
||||
extern int omap_gpio_init(void);
|
||||
|
||||
static struct mtd_partition h3_partitions[] = {
|
||||
static int h3_keymap[] = {
|
||||
KEY(0, 0, KEY_LEFT),
|
||||
KEY(0, 1, KEY_RIGHT),
|
||||
KEY(0, 2, KEY_3),
|
||||
KEY(0, 3, KEY_F10),
|
||||
KEY(0, 4, KEY_F5),
|
||||
KEY(0, 5, KEY_9),
|
||||
KEY(1, 0, KEY_DOWN),
|
||||
KEY(1, 1, KEY_UP),
|
||||
KEY(1, 2, KEY_2),
|
||||
KEY(1, 3, KEY_F9),
|
||||
KEY(1, 4, KEY_F7),
|
||||
KEY(1, 5, KEY_0),
|
||||
KEY(2, 0, KEY_ENTER),
|
||||
KEY(2, 1, KEY_6),
|
||||
KEY(2, 2, KEY_1),
|
||||
KEY(2, 3, KEY_F2),
|
||||
KEY(2, 4, KEY_F6),
|
||||
KEY(2, 5, KEY_HOME),
|
||||
KEY(3, 0, KEY_8),
|
||||
KEY(3, 1, KEY_5),
|
||||
KEY(3, 2, KEY_F12),
|
||||
KEY(3, 3, KEY_F3),
|
||||
KEY(3, 4, KEY_F8),
|
||||
KEY(3, 5, KEY_END),
|
||||
KEY(4, 0, KEY_7),
|
||||
KEY(4, 1, KEY_4),
|
||||
KEY(4, 2, KEY_F11),
|
||||
KEY(4, 3, KEY_F1),
|
||||
KEY(4, 4, KEY_F4),
|
||||
KEY(4, 5, KEY_ESC),
|
||||
KEY(5, 0, KEY_F13),
|
||||
KEY(5, 1, KEY_F14),
|
||||
KEY(5, 2, KEY_F15),
|
||||
KEY(5, 3, KEY_F16),
|
||||
KEY(5, 4, KEY_SLEEP),
|
||||
0
|
||||
};
|
||||
|
||||
|
||||
static struct mtd_partition nor_partitions[] = {
|
||||
/* bootloader (U-Boot, etc) in first sector */
|
||||
{
|
||||
.name = "bootloader",
|
||||
@ -72,26 +119,80 @@ static struct mtd_partition h3_partitions[] = {
|
||||
}
|
||||
};
|
||||
|
||||
static struct flash_platform_data h3_flash_data = {
|
||||
static struct flash_platform_data nor_data = {
|
||||
.map_name = "cfi_probe",
|
||||
.width = 2,
|
||||
.parts = h3_partitions,
|
||||
.nr_parts = ARRAY_SIZE(h3_partitions),
|
||||
.parts = nor_partitions,
|
||||
.nr_parts = ARRAY_SIZE(nor_partitions),
|
||||
};
|
||||
|
||||
static struct resource h3_flash_resource = {
|
||||
static struct resource nor_resource = {
|
||||
/* This is on CS3, wherever it's mapped */
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct platform_device flash_device = {
|
||||
static struct platform_device nor_device = {
|
||||
.name = "omapflash",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &h3_flash_data,
|
||||
.platform_data = &nor_data,
|
||||
},
|
||||
.num_resources = 1,
|
||||
.resource = &h3_flash_resource,
|
||||
.resource = &nor_resource,
|
||||
};
|
||||
|
||||
static struct mtd_partition nand_partitions[] = {
|
||||
#if 0
|
||||
/* REVISIT: enable these partitions if you make NAND BOOT work */
|
||||
{
|
||||
.name = "xloader",
|
||||
.offset = 0,
|
||||
.size = 64 * 1024,
|
||||
.mask_flags = MTD_WRITEABLE, /* force read-only */
|
||||
},
|
||||
{
|
||||
.name = "bootloader",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = 256 * 1024,
|
||||
.mask_flags = MTD_WRITEABLE, /* force read-only */
|
||||
},
|
||||
{
|
||||
.name = "params",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = 192 * 1024,
|
||||
},
|
||||
{
|
||||
.name = "kernel",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = 2 * SZ_1M,
|
||||
},
|
||||
#endif
|
||||
{
|
||||
.name = "filesystem",
|
||||
.size = MTDPART_SIZ_FULL,
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
},
|
||||
};
|
||||
|
||||
/* dip switches control NAND chip access: 8 bit, 16 bit, or neither */
|
||||
static struct nand_platform_data nand_data = {
|
||||
.options = NAND_SAMSUNG_LP_OPTIONS,
|
||||
.parts = nand_partitions,
|
||||
.nr_parts = ARRAY_SIZE(nand_partitions),
|
||||
};
|
||||
|
||||
static struct resource nand_resource = {
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct platform_device nand_device = {
|
||||
.name = "omapnand",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &nand_data,
|
||||
},
|
||||
.num_resources = 1,
|
||||
.resource = &nand_resource,
|
||||
};
|
||||
|
||||
static struct resource smc91x_resources[] = {
|
||||
@ -138,10 +239,136 @@ static struct platform_device intlat_device = {
|
||||
.resource = intlat_resources,
|
||||
};
|
||||
|
||||
static struct resource h3_kp_resources[] = {
|
||||
[0] = {
|
||||
.start = INT_KEYBOARD,
|
||||
.end = INT_KEYBOARD,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct omap_kp_platform_data h3_kp_data = {
|
||||
.rows = 8,
|
||||
.cols = 8,
|
||||
.keymap = h3_keymap,
|
||||
.rep = 1,
|
||||
};
|
||||
|
||||
static struct platform_device h3_kp_device = {
|
||||
.name = "omap-keypad",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &h3_kp_data,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(h3_kp_resources),
|
||||
.resource = h3_kp_resources,
|
||||
};
|
||||
|
||||
|
||||
/* Select between the IrDA and aGPS module
|
||||
*/
|
||||
static int h3_select_irda(struct device *dev, int state)
|
||||
{
|
||||
unsigned char expa;
|
||||
int err = 0;
|
||||
|
||||
if ((err = read_gpio_expa(&expa, 0x26))) {
|
||||
printk(KERN_ERR "Error reading from I/O EXPANDER \n");
|
||||
return err;
|
||||
}
|
||||
|
||||
/* 'P6' enable/disable IRDA_TX and IRDA_RX */
|
||||
if (state & IR_SEL) { /* IrDA */
|
||||
if ((err = write_gpio_expa(expa | 0x40, 0x26))) {
|
||||
printk(KERN_ERR "Error writing to I/O EXPANDER \n");
|
||||
return err;
|
||||
}
|
||||
} else {
|
||||
if ((err = write_gpio_expa(expa & ~0x40, 0x26))) {
|
||||
printk(KERN_ERR "Error writing to I/O EXPANDER \n");
|
||||
return err;
|
||||
}
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
static void set_trans_mode(void *data)
|
||||
{
|
||||
int *mode = data;
|
||||
unsigned char expa;
|
||||
int err = 0;
|
||||
|
||||
if ((err = read_gpio_expa(&expa, 0x27)) != 0) {
|
||||
printk(KERN_ERR "Error reading from I/O expander\n");
|
||||
}
|
||||
|
||||
expa &= ~0x03;
|
||||
|
||||
if (*mode & IR_SIRMODE) {
|
||||
expa |= 0x01;
|
||||
} else { /* MIR/FIR */
|
||||
expa |= 0x03;
|
||||
}
|
||||
|
||||
if ((err = write_gpio_expa(expa, 0x27)) != 0) {
|
||||
printk(KERN_ERR "Error writing to I/O expander\n");
|
||||
}
|
||||
}
|
||||
|
||||
static int h3_transceiver_mode(struct device *dev, int mode)
|
||||
{
|
||||
struct omap_irda_config *irda_config = dev->platform_data;
|
||||
|
||||
cancel_delayed_work(&irda_config->gpio_expa);
|
||||
PREPARE_WORK(&irda_config->gpio_expa, set_trans_mode, &mode);
|
||||
schedule_work(&irda_config->gpio_expa);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct omap_irda_config h3_irda_data = {
|
||||
.transceiver_cap = IR_SIRMODE | IR_MIRMODE | IR_FIRMODE,
|
||||
.transceiver_mode = h3_transceiver_mode,
|
||||
.select_irda = h3_select_irda,
|
||||
.rx_channel = OMAP_DMA_UART3_RX,
|
||||
.tx_channel = OMAP_DMA_UART3_TX,
|
||||
.dest_start = UART3_THR,
|
||||
.src_start = UART3_RHR,
|
||||
.tx_trigger = 0,
|
||||
.rx_trigger = 0,
|
||||
};
|
||||
|
||||
static struct resource h3_irda_resources[] = {
|
||||
[0] = {
|
||||
.start = INT_UART3,
|
||||
.end = INT_UART3,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device h3_irda_device = {
|
||||
.name = "omapirda",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &h3_irda_data,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(h3_irda_resources),
|
||||
.resource = h3_irda_resources,
|
||||
};
|
||||
|
||||
static struct platform_device h3_lcd_device = {
|
||||
.name = "lcd_h3",
|
||||
.id = -1,
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&flash_device,
|
||||
&nor_device,
|
||||
&nand_device,
|
||||
&smc91x_device,
|
||||
&intlat_device,
|
||||
&h3_irda_device,
|
||||
&h3_kp_device,
|
||||
&h3_lcd_device,
|
||||
};
|
||||
|
||||
static struct omap_usb_config h3_usb_config __initdata = {
|
||||
@ -171,7 +398,6 @@ static struct omap_uart_config h3_uart_config __initdata = {
|
||||
};
|
||||
|
||||
static struct omap_lcd_config h3_lcd_config __initdata = {
|
||||
.panel_name = "h3",
|
||||
.ctrl_name = "internal",
|
||||
};
|
||||
|
||||
@ -182,11 +408,36 @@ static struct omap_board_config_kernel h3_config[] = {
|
||||
{ OMAP_TAG_LCD, &h3_lcd_config },
|
||||
};
|
||||
|
||||
#define H3_NAND_RB_GPIO_PIN 10
|
||||
|
||||
static int nand_dev_ready(struct nand_platform_data *data)
|
||||
{
|
||||
return omap_get_gpio_datain(H3_NAND_RB_GPIO_PIN);
|
||||
}
|
||||
|
||||
static void __init h3_init(void)
|
||||
{
|
||||
h3_flash_resource.end = h3_flash_resource.start = omap_cs3_phys();
|
||||
h3_flash_resource.end += OMAP_CS3_SIZE - 1;
|
||||
(void) platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
/* Here we assume the NOR boot config: NOR on CS3 (possibly swapped
|
||||
* to address 0 by a dip switch), NAND on CS2B. The NAND driver will
|
||||
* notice whether a NAND chip is enabled at probe time.
|
||||
*
|
||||
* H3 support NAND-boot, with a dip switch to put NOR on CS2B and NAND
|
||||
* (which on H2 may be 16bit) on CS3. Try detecting that in code here,
|
||||
* to avoid probing every possible flash configuration...
|
||||
*/
|
||||
nor_resource.end = nor_resource.start = omap_cs3_phys();
|
||||
nor_resource.end += SZ_32M - 1;
|
||||
|
||||
nand_resource.end = nand_resource.start = OMAP_CS2B_PHYS;
|
||||
nand_resource.end += SZ_4K - 1;
|
||||
if (!(omap_request_gpio(H3_NAND_RB_GPIO_PIN)))
|
||||
nand_data.dev_ready = nand_dev_ready;
|
||||
|
||||
/* GPIO10 Func_MUX_CTRL reg bit 29:27, Configure V2 to mode1 as GPIO */
|
||||
/* GPIO10 pullup/down register, Enable pullup on GPIO10 */
|
||||
omap_cfg_reg(V2_1710_GPIO10);
|
||||
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
omap_board_config = h3_config;
|
||||
omap_board_config_size = ARRAY_SIZE(h3_config);
|
||||
omap_serial_init();
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include <linux/delay.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/input.h>
|
||||
|
||||
#include <asm/hardware.h>
|
||||
#include <asm/mach-types.h>
|
||||
@ -34,8 +35,22 @@
|
||||
#include <asm/arch/gpio.h>
|
||||
#include <asm/arch/tc.h>
|
||||
#include <asm/arch/usb.h>
|
||||
#include <asm/arch/keypad.h>
|
||||
#include <asm/arch/common.h>
|
||||
|
||||
static int innovator_keymap[] = {
|
||||
KEY(0, 0, KEY_F1),
|
||||
KEY(0, 3, KEY_DOWN),
|
||||
KEY(1, 1, KEY_F2),
|
||||
KEY(1, 2, KEY_RIGHT),
|
||||
KEY(2, 0, KEY_F3),
|
||||
KEY(2, 1, KEY_F4),
|
||||
KEY(2, 2, KEY_UP),
|
||||
KEY(3, 2, KEY_ENTER),
|
||||
KEY(3, 3, KEY_LEFT),
|
||||
0
|
||||
};
|
||||
|
||||
static struct mtd_partition innovator_partitions[] = {
|
||||
/* bootloader (U-Boot, etc) in first sector */
|
||||
{
|
||||
@ -97,6 +112,31 @@ static struct platform_device innovator_flash_device = {
|
||||
.resource = &innovator_flash_resource,
|
||||
};
|
||||
|
||||
static struct resource innovator_kp_resources[] = {
|
||||
[0] = {
|
||||
.start = INT_KEYBOARD,
|
||||
.end = INT_KEYBOARD,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct omap_kp_platform_data innovator_kp_data = {
|
||||
.rows = 8,
|
||||
.cols = 8,
|
||||
.keymap = innovator_keymap,
|
||||
};
|
||||
|
||||
static struct platform_device innovator_kp_device = {
|
||||
.name = "omap-keypad",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &innovator_kp_data,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(innovator_kp_resources),
|
||||
.resource = innovator_kp_resources,
|
||||
};
|
||||
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP15XX
|
||||
|
||||
/* Only FPGA needs to be mapped here. All others are done with ioremap */
|
||||
@ -129,9 +169,16 @@ static struct platform_device innovator1510_smc91x_device = {
|
||||
.resource = innovator1510_smc91x_resources,
|
||||
};
|
||||
|
||||
static struct platform_device innovator1510_lcd_device = {
|
||||
.name = "lcd_inn1510",
|
||||
.id = -1,
|
||||
};
|
||||
|
||||
static struct platform_device *innovator1510_devices[] __initdata = {
|
||||
&innovator_flash_device,
|
||||
&innovator1510_smc91x_device,
|
||||
&innovator_kp_device,
|
||||
&innovator1510_lcd_device,
|
||||
};
|
||||
|
||||
#endif /* CONFIG_ARCH_OMAP15XX */
|
||||
@ -158,9 +205,16 @@ static struct platform_device innovator1610_smc91x_device = {
|
||||
.resource = innovator1610_smc91x_resources,
|
||||
};
|
||||
|
||||
static struct platform_device innovator1610_lcd_device = {
|
||||
.name = "inn1610_lcd",
|
||||
.id = -1,
|
||||
};
|
||||
|
||||
static struct platform_device *innovator1610_devices[] __initdata = {
|
||||
&innovator_flash_device,
|
||||
&innovator1610_smc91x_device,
|
||||
&innovator_kp_device,
|
||||
&innovator1610_lcd_device,
|
||||
};
|
||||
|
||||
#endif /* CONFIG_ARCH_OMAP16XX */
|
||||
@ -206,7 +260,6 @@ static struct omap_usb_config innovator1510_usb_config __initdata = {
|
||||
};
|
||||
|
||||
static struct omap_lcd_config innovator1510_lcd_config __initdata = {
|
||||
.panel_name = "inn1510",
|
||||
.ctrl_name = "internal",
|
||||
};
|
||||
#endif
|
||||
@ -228,7 +281,6 @@ static struct omap_usb_config h2_usb_config __initdata = {
|
||||
};
|
||||
|
||||
static struct omap_lcd_config innovator1610_lcd_config __initdata = {
|
||||
.panel_name = "inn1610",
|
||||
.ctrl_name = "internal",
|
||||
};
|
||||
#endif
|
||||
|
@ -1,160 +0,0 @@
|
||||
/*
|
||||
* Modified from board-generic.c
|
||||
*
|
||||
* Copyright (C) 2004 2N Telekomunikace, Ladislav Michl <michl@2n.cz>
|
||||
*
|
||||
* Code for Netstar OMAP board.
|
||||
*
|
||||
* 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>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/notifier.h>
|
||||
#include <linux/reboot.h>
|
||||
|
||||
#include <asm/hardware.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include <asm/arch/gpio.h>
|
||||
#include <asm/arch/mux.h>
|
||||
#include <asm/arch/usb.h>
|
||||
#include <asm/arch/common.h>
|
||||
|
||||
extern void __init omap_init_time(void);
|
||||
extern int omap_gpio_init(void);
|
||||
|
||||
static struct resource netstar_smc91x_resources[] = {
|
||||
[0] = {
|
||||
.start = OMAP_CS1_PHYS + 0x300,
|
||||
.end = OMAP_CS1_PHYS + 0x300 + 16,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = OMAP_GPIO_IRQ(8),
|
||||
.end = OMAP_GPIO_IRQ(8),
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device netstar_smc91x_device = {
|
||||
.name = "smc91x",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(netstar_smc91x_resources),
|
||||
.resource = netstar_smc91x_resources,
|
||||
};
|
||||
|
||||
static struct platform_device *netstar_devices[] __initdata = {
|
||||
&netstar_smc91x_device,
|
||||
};
|
||||
|
||||
static struct omap_uart_config netstar_uart_config __initdata = {
|
||||
.enabled_uarts = ((1 << 0) | (1 << 1) | (1 << 2)),
|
||||
};
|
||||
|
||||
static struct omap_board_config_kernel netstar_config[] = {
|
||||
{ OMAP_TAG_UART, &netstar_uart_config },
|
||||
};
|
||||
|
||||
static void __init netstar_init_irq(void)
|
||||
{
|
||||
omap1_init_common_hw();
|
||||
omap_init_irq();
|
||||
omap_gpio_init();
|
||||
}
|
||||
|
||||
static void __init netstar_init(void)
|
||||
{
|
||||
/* green LED */
|
||||
omap_request_gpio(4);
|
||||
omap_set_gpio_direction(4, 0);
|
||||
/* smc91x reset */
|
||||
omap_request_gpio(7);
|
||||
omap_set_gpio_direction(7, 0);
|
||||
omap_set_gpio_dataout(7, 1);
|
||||
udelay(2); /* wait at least 100ns */
|
||||
omap_set_gpio_dataout(7, 0);
|
||||
mdelay(50); /* 50ms until PHY ready */
|
||||
/* smc91x interrupt pin */
|
||||
omap_request_gpio(8);
|
||||
|
||||
omap_request_gpio(12);
|
||||
omap_request_gpio(13);
|
||||
omap_request_gpio(14);
|
||||
omap_request_gpio(15);
|
||||
set_irq_type(OMAP_GPIO_IRQ(12), IRQT_FALLING);
|
||||
set_irq_type(OMAP_GPIO_IRQ(13), IRQT_FALLING);
|
||||
set_irq_type(OMAP_GPIO_IRQ(14), IRQT_FALLING);
|
||||
set_irq_type(OMAP_GPIO_IRQ(15), IRQT_FALLING);
|
||||
|
||||
platform_add_devices(netstar_devices, ARRAY_SIZE(netstar_devices));
|
||||
|
||||
/* Switch on green LED */
|
||||
omap_set_gpio_dataout(4, 0);
|
||||
/* Switch off red LED */
|
||||
omap_writeb(0x00, OMAP_LPG1_PMR); /* Disable clock */
|
||||
omap_writeb(0x80, OMAP_LPG1_LCR);
|
||||
|
||||
omap_board_config = netstar_config;
|
||||
omap_board_config_size = ARRAY_SIZE(netstar_config);
|
||||
omap_serial_init();
|
||||
}
|
||||
|
||||
static void __init netstar_map_io(void)
|
||||
{
|
||||
omap1_map_common_io();
|
||||
}
|
||||
|
||||
#define MACHINE_PANICED 1
|
||||
#define MACHINE_REBOOTING 2
|
||||
#define MACHINE_REBOOT 4
|
||||
static unsigned long machine_state;
|
||||
|
||||
static int panic_event(struct notifier_block *this, unsigned long event,
|
||||
void *ptr)
|
||||
{
|
||||
if (test_and_set_bit(MACHINE_PANICED, &machine_state))
|
||||
return NOTIFY_DONE;
|
||||
|
||||
/* Switch off green LED */
|
||||
omap_set_gpio_dataout(4, 1);
|
||||
/* Flash red LED */
|
||||
omap_writeb(0x78, OMAP_LPG1_LCR);
|
||||
omap_writeb(0x01, OMAP_LPG1_PMR); /* Enable clock */
|
||||
|
||||
return NOTIFY_DONE;
|
||||
}
|
||||
|
||||
static struct notifier_block panic_block = {
|
||||
.notifier_call = panic_event,
|
||||
};
|
||||
|
||||
static int __init netstar_late_init(void)
|
||||
{
|
||||
/* TODO: Setup front panel switch here */
|
||||
|
||||
/* Setup panic notifier */
|
||||
atomic_notifier_chain_register(&panic_notifier_list, &panic_block);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
postcore_initcall(netstar_late_init);
|
||||
|
||||
MACHINE_START(NETSTAR, "NetStar OMAP5910")
|
||||
/* Maintainer: Ladislav Michl <michl@2n.cz> */
|
||||
.phys_io = 0xfff00000,
|
||||
.io_pg_offst = ((0xfef00000) >> 18) & 0xfffc,
|
||||
.boot_params = 0x10000100,
|
||||
.map_io = netstar_map_io,
|
||||
.init_irq = netstar_init_irq,
|
||||
.init_machine = netstar_init,
|
||||
.timer = &omap_timer,
|
||||
MACHINE_END
|
268
arch/arm/mach-omap1/board-nokia770.c
Normal file
268
arch/arm/mach-omap1/board-nokia770.c
Normal file
@ -0,0 +1,268 @@
|
||||
/*
|
||||
* linux/arch/arm/mach-omap1/board-nokia770.c
|
||||
*
|
||||
* Modified from board-generic.c
|
||||
*
|
||||
* 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/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/clk.h>
|
||||
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/spi/ads7846.h>
|
||||
|
||||
#include <asm/hardware.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include <asm/arch/gpio.h>
|
||||
#include <asm/arch/mux.h>
|
||||
#include <asm/arch/usb.h>
|
||||
#include <asm/arch/board.h>
|
||||
#include <asm/arch/keypad.h>
|
||||
#include <asm/arch/common.h>
|
||||
#include <asm/arch/dsp_common.h>
|
||||
#include <asm/arch/aic23.h>
|
||||
#include <asm/arch/gpio.h>
|
||||
|
||||
static void __init omap_nokia770_init_irq(void)
|
||||
{
|
||||
/* On Nokia 770, the SleepX signal is masked with an
|
||||
* MPUIO line by default. It has to be unmasked for it
|
||||
* to become functional */
|
||||
|
||||
/* SleepX mask direction */
|
||||
omap_writew((omap_readw(0xfffb5008) & ~2), 0xfffb5008);
|
||||
/* Unmask SleepX signal */
|
||||
omap_writew((omap_readw(0xfffb5004) & ~2), 0xfffb5004);
|
||||
|
||||
omap1_init_common_hw();
|
||||
omap_init_irq();
|
||||
}
|
||||
|
||||
static int nokia770_keymap[] = {
|
||||
KEY(0, 1, GROUP_0 | KEY_UP),
|
||||
KEY(0, 2, GROUP_1 | KEY_F5),
|
||||
KEY(1, 0, GROUP_0 | KEY_LEFT),
|
||||
KEY(1, 1, GROUP_0 | KEY_ENTER),
|
||||
KEY(1, 2, GROUP_0 | KEY_RIGHT),
|
||||
KEY(2, 0, GROUP_1 | KEY_ESC),
|
||||
KEY(2, 1, GROUP_0 | KEY_DOWN),
|
||||
KEY(2, 2, GROUP_1 | KEY_F4),
|
||||
KEY(3, 0, GROUP_2 | KEY_F7),
|
||||
KEY(3, 1, GROUP_2 | KEY_F8),
|
||||
KEY(3, 2, GROUP_2 | KEY_F6),
|
||||
0
|
||||
};
|
||||
|
||||
static struct resource nokia770_kp_resources[] = {
|
||||
[0] = {
|
||||
.start = INT_KEYBOARD,
|
||||
.end = INT_KEYBOARD,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct omap_kp_platform_data nokia770_kp_data = {
|
||||
.rows = 8,
|
||||
.cols = 8,
|
||||
.keymap = nokia770_keymap
|
||||
};
|
||||
|
||||
static struct platform_device nokia770_kp_device = {
|
||||
.name = "omap-keypad",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &nokia770_kp_data,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(nokia770_kp_resources),
|
||||
.resource = nokia770_kp_resources,
|
||||
};
|
||||
|
||||
static struct platform_device *nokia770_devices[] __initdata = {
|
||||
&nokia770_kp_device,
|
||||
};
|
||||
|
||||
static struct ads7846_platform_data nokia770_ads7846_platform_data __initdata = {
|
||||
.x_max = 0x0fff,
|
||||
.y_max = 0x0fff,
|
||||
.x_plate_ohms = 180,
|
||||
.pressure_max = 255,
|
||||
.debounce_max = 10,
|
||||
.debounce_tol = 3,
|
||||
};
|
||||
|
||||
static struct spi_board_info nokia770_spi_board_info[] __initdata = {
|
||||
[0] = {
|
||||
.modalias = "lcd_lph8923",
|
||||
.bus_num = 2,
|
||||
.chip_select = 3,
|
||||
.max_speed_hz = 12000000,
|
||||
},
|
||||
[1] = {
|
||||
.modalias = "ads7846",
|
||||
.bus_num = 2,
|
||||
.chip_select = 0,
|
||||
.max_speed_hz = 2500000,
|
||||
.irq = OMAP_GPIO_IRQ(15),
|
||||
.platform_data = &nokia770_ads7846_platform_data,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
/* assume no Mini-AB port */
|
||||
|
||||
static struct omap_usb_config nokia770_usb_config __initdata = {
|
||||
.otg = 1,
|
||||
.register_host = 1,
|
||||
.register_dev = 1,
|
||||
.hmc_mode = 16,
|
||||
.pins[0] = 6,
|
||||
};
|
||||
|
||||
static struct omap_mmc_config nokia770_mmc_config __initdata = {
|
||||
.mmc[0] = {
|
||||
.enabled = 0,
|
||||
.wire4 = 0,
|
||||
.wp_pin = -1,
|
||||
.power_pin = -1,
|
||||
.switch_pin = -1,
|
||||
},
|
||||
.mmc[1] = {
|
||||
.enabled = 0,
|
||||
.wire4 = 0,
|
||||
.wp_pin = -1,
|
||||
.power_pin = -1,
|
||||
.switch_pin = -1,
|
||||
},
|
||||
};
|
||||
|
||||
static struct omap_board_config_kernel nokia770_config[] = {
|
||||
{ OMAP_TAG_USB, NULL },
|
||||
{ OMAP_TAG_MMC, &nokia770_mmc_config },
|
||||
};
|
||||
|
||||
/*
|
||||
* audio power control
|
||||
*/
|
||||
#define HEADPHONE_GPIO 14
|
||||
#define AMPLIFIER_CTRL_GPIO 58
|
||||
|
||||
static struct clk *dspxor_ck;
|
||||
static DECLARE_MUTEX(audio_pwr_sem);
|
||||
/*
|
||||
* audio_pwr_state
|
||||
* +--+-------------------------+---------------------------------------+
|
||||
* |-1|down |power-up request -> 0 |
|
||||
* +--+-------------------------+---------------------------------------+
|
||||
* | 0|up |power-down(1) request -> 1 |
|
||||
* | | |power-down(2) request -> (ignore) |
|
||||
* +--+-------------------------+---------------------------------------+
|
||||
* | 1|up, |power-up request -> 0 |
|
||||
* | |received down(1) request |power-down(2) request -> -1 |
|
||||
* +--+-------------------------+---------------------------------------+
|
||||
*/
|
||||
static int audio_pwr_state = -1;
|
||||
|
||||
/*
|
||||
* audio_pwr_up / down should be called under audio_pwr_sem
|
||||
*/
|
||||
static void nokia770_audio_pwr_up(void)
|
||||
{
|
||||
clk_enable(dspxor_ck);
|
||||
|
||||
/* Turn on codec */
|
||||
tlv320aic23_power_up();
|
||||
|
||||
if (omap_get_gpio_datain(HEADPHONE_GPIO))
|
||||
/* HP not connected, turn on amplifier */
|
||||
omap_set_gpio_dataout(AMPLIFIER_CTRL_GPIO, 1);
|
||||
else
|
||||
/* HP connected, do not turn on amplifier */
|
||||
printk("HP connected\n");
|
||||
}
|
||||
|
||||
static void codec_delayed_power_down(void *arg)
|
||||
{
|
||||
down(&audio_pwr_sem);
|
||||
if (audio_pwr_state == -1)
|
||||
tlv320aic23_power_down();
|
||||
clk_disable(dspxor_ck);
|
||||
up(&audio_pwr_sem);
|
||||
}
|
||||
|
||||
static DECLARE_WORK(codec_power_down_work, codec_delayed_power_down, NULL);
|
||||
|
||||
static void nokia770_audio_pwr_down(void)
|
||||
{
|
||||
/* Turn off amplifier */
|
||||
omap_set_gpio_dataout(AMPLIFIER_CTRL_GPIO, 0);
|
||||
|
||||
/* Turn off codec: schedule delayed work */
|
||||
schedule_delayed_work(&codec_power_down_work, HZ / 20); /* 50ms */
|
||||
}
|
||||
|
||||
void nokia770_audio_pwr_up_request(int stage)
|
||||
{
|
||||
down(&audio_pwr_sem);
|
||||
if (audio_pwr_state == -1)
|
||||
nokia770_audio_pwr_up();
|
||||
/* force audio_pwr_state = 0, even if it was 1. */
|
||||
audio_pwr_state = 0;
|
||||
up(&audio_pwr_sem);
|
||||
}
|
||||
|
||||
void nokia770_audio_pwr_down_request(int stage)
|
||||
{
|
||||
down(&audio_pwr_sem);
|
||||
switch (stage) {
|
||||
case 1:
|
||||
if (audio_pwr_state == 0)
|
||||
audio_pwr_state = 1;
|
||||
break;
|
||||
case 2:
|
||||
if (audio_pwr_state == 1) {
|
||||
nokia770_audio_pwr_down();
|
||||
audio_pwr_state = -1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
up(&audio_pwr_sem);
|
||||
}
|
||||
|
||||
static void __init omap_nokia770_init(void)
|
||||
{
|
||||
nokia770_config[0].data = &nokia770_usb_config;
|
||||
|
||||
platform_add_devices(nokia770_devices, ARRAY_SIZE(nokia770_devices));
|
||||
spi_register_board_info(nokia770_spi_board_info,
|
||||
ARRAY_SIZE(nokia770_spi_board_info));
|
||||
omap_board_config = nokia770_config;
|
||||
omap_board_config_size = ARRAY_SIZE(nokia770_config);
|
||||
omap_serial_init();
|
||||
omap_dsp_audio_pwr_up_request = nokia770_audio_pwr_up_request;
|
||||
omap_dsp_audio_pwr_down_request = nokia770_audio_pwr_down_request;
|
||||
dspxor_ck = clk_get(0, "dspxor_ck");
|
||||
}
|
||||
|
||||
static void __init omap_nokia770_map_io(void)
|
||||
{
|
||||
omap1_map_common_io();
|
||||
}
|
||||
|
||||
MACHINE_START(NOKIA770, "Nokia 770")
|
||||
.phys_io = 0xfff00000,
|
||||
.io_pg_offst = ((0xfef00000) >> 18) & 0xfffc,
|
||||
.boot_params = 0x10000100,
|
||||
.map_io = omap_nokia770_map_io,
|
||||
.init_irq = omap_nokia770_init_irq,
|
||||
.init_machine = omap_nokia770_init,
|
||||
.timer = &omap_timer,
|
||||
MACHINE_END
|
@ -33,6 +33,7 @@
|
||||
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/input.h>
|
||||
|
||||
#include <asm/hardware.h>
|
||||
#include <asm/mach-types.h>
|
||||
@ -44,7 +45,24 @@
|
||||
#include <asm/arch/usb.h>
|
||||
#include <asm/arch/mux.h>
|
||||
#include <asm/arch/tc.h>
|
||||
#include <asm/arch/keypad.h>
|
||||
#include <asm/arch/common.h>
|
||||
#include <asm/arch/mcbsp.h>
|
||||
#include <asm/arch/omap-alsa.h>
|
||||
|
||||
static int osk_keymap[] = {
|
||||
KEY(0, 0, KEY_F1),
|
||||
KEY(0, 3, KEY_UP),
|
||||
KEY(1, 1, KEY_LEFTCTRL),
|
||||
KEY(1, 2, KEY_LEFT),
|
||||
KEY(2, 0, KEY_SPACE),
|
||||
KEY(2, 1, KEY_ESC),
|
||||
KEY(2, 2, KEY_DOWN),
|
||||
KEY(3, 2, KEY_ENTER),
|
||||
KEY(3, 3, KEY_RIGHT),
|
||||
0
|
||||
};
|
||||
|
||||
|
||||
static struct mtd_partition osk_partitions[] = {
|
||||
/* bootloader (U-Boot, etc) in first sector */
|
||||
@ -133,9 +151,69 @@ static struct platform_device osk5912_cf_device = {
|
||||
.resource = osk5912_cf_resources,
|
||||
};
|
||||
|
||||
#define DEFAULT_BITPERSAMPLE 16
|
||||
|
||||
static struct omap_mcbsp_reg_cfg mcbsp_regs = {
|
||||
.spcr2 = FREE | FRST | GRST | XRST | XINTM(3),
|
||||
.spcr1 = RINTM(3) | RRST,
|
||||
.rcr2 = RPHASE | RFRLEN2(OMAP_MCBSP_WORD_8) |
|
||||
RWDLEN2(OMAP_MCBSP_WORD_16) | RDATDLY(0),
|
||||
.rcr1 = RFRLEN1(OMAP_MCBSP_WORD_8) | RWDLEN1(OMAP_MCBSP_WORD_16),
|
||||
.xcr2 = XPHASE | XFRLEN2(OMAP_MCBSP_WORD_8) |
|
||||
XWDLEN2(OMAP_MCBSP_WORD_16) | XDATDLY(0) | XFIG,
|
||||
.xcr1 = XFRLEN1(OMAP_MCBSP_WORD_8) | XWDLEN1(OMAP_MCBSP_WORD_16),
|
||||
.srgr1 = FWID(DEFAULT_BITPERSAMPLE - 1),
|
||||
.srgr2 = GSYNC | CLKSP | FSGM | FPER(DEFAULT_BITPERSAMPLE * 2 - 1),
|
||||
/*.pcr0 = FSXM | FSRM | CLKXM | CLKRM | CLKXP | CLKRP,*/ /* mcbsp: master */
|
||||
.pcr0 = CLKXP | CLKRP, /* mcbsp: slave */
|
||||
};
|
||||
|
||||
static struct omap_alsa_codec_config alsa_config = {
|
||||
.name = "OSK AIC23",
|
||||
.mcbsp_regs_alsa = &mcbsp_regs,
|
||||
.codec_configure_dev = NULL, // aic23_configure,
|
||||
.codec_set_samplerate = NULL, // aic23_set_samplerate,
|
||||
.codec_clock_setup = NULL, // aic23_clock_setup,
|
||||
.codec_clock_on = NULL, // aic23_clock_on,
|
||||
.codec_clock_off = NULL, // aic23_clock_off,
|
||||
.get_default_samplerate = NULL, // aic23_get_default_samplerate,
|
||||
};
|
||||
|
||||
static struct platform_device osk5912_mcbsp1_device = {
|
||||
.name = "omap_mcbsp",
|
||||
.id = 1,
|
||||
.name = "omap_alsa_mcbsp",
|
||||
.id = 1,
|
||||
.dev = {
|
||||
.platform_data = &alsa_config,
|
||||
},
|
||||
};
|
||||
|
||||
static struct resource osk5912_kp_resources[] = {
|
||||
[0] = {
|
||||
.start = INT_KEYBOARD,
|
||||
.end = INT_KEYBOARD,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct omap_kp_platform_data osk_kp_data = {
|
||||
.rows = 8,
|
||||
.cols = 8,
|
||||
.keymap = osk_keymap,
|
||||
};
|
||||
|
||||
static struct platform_device osk5912_kp_device = {
|
||||
.name = "omap-keypad",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &osk_kp_data,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(osk5912_kp_resources),
|
||||
.resource = osk5912_kp_resources,
|
||||
};
|
||||
|
||||
static struct platform_device osk5912_lcd_device = {
|
||||
.name = "lcd_osk",
|
||||
.id = -1,
|
||||
};
|
||||
|
||||
static struct platform_device *osk5912_devices[] __initdata = {
|
||||
@ -143,6 +221,8 @@ static struct platform_device *osk5912_devices[] __initdata = {
|
||||
&osk5912_smc91x_device,
|
||||
&osk5912_cf_device,
|
||||
&osk5912_mcbsp1_device,
|
||||
&osk5912_kp_device,
|
||||
&osk5912_lcd_device,
|
||||
};
|
||||
|
||||
static void __init osk_init_smc91x(void)
|
||||
@ -197,7 +277,6 @@ static struct omap_uart_config osk_uart_config __initdata = {
|
||||
};
|
||||
|
||||
static struct omap_lcd_config osk_lcd_config __initdata = {
|
||||
.panel_name = "osk",
|
||||
.ctrl_name = "internal",
|
||||
};
|
||||
|
||||
@ -255,8 +334,18 @@ static void __init osk_mistral_init(void)
|
||||
static void __init osk_mistral_init(void) { }
|
||||
#endif
|
||||
|
||||
#define EMIFS_CS3_VAL (0x88013141)
|
||||
|
||||
static void __init osk_init(void)
|
||||
{
|
||||
/* Workaround for wrong CS3 (NOR flash) timing
|
||||
* There are some U-Boot versions out there which configure
|
||||
* wrong CS3 memory timings. This mainly leads to CRC
|
||||
* or similiar errors if you use NOR flash (e.g. with JFFS2)
|
||||
*/
|
||||
if (EMIFS_CCS(3) != EMIFS_CS3_VAL)
|
||||
EMIFS_CCS(3) = EMIFS_CS3_VAL;
|
||||
|
||||
osk_flash_resource.end = osk_flash_resource.start = omap_cs3_phys();
|
||||
osk_flash_resource.end += SZ_32M - 1;
|
||||
platform_add_devices(osk5912_devices, ARRAY_SIZE(osk5912_devices));
|
||||
|
@ -38,6 +38,15 @@ static void __init omap_generic_init_irq(void)
|
||||
omap_init_irq();
|
||||
}
|
||||
|
||||
static struct platform_device palmte_lcd_device = {
|
||||
.name = "lcd_palmte",
|
||||
.id = -1,
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&palmte_lcd_device,
|
||||
};
|
||||
|
||||
static struct omap_usb_config palmte_usb_config __initdata = {
|
||||
.register_dev = 1,
|
||||
.hmc_mode = 0,
|
||||
@ -55,7 +64,6 @@ static struct omap_mmc_config palmte_mmc_config __initdata = {
|
||||
};
|
||||
|
||||
static struct omap_lcd_config palmte_lcd_config __initdata = {
|
||||
.panel_name = "palmte",
|
||||
.ctrl_name = "internal",
|
||||
};
|
||||
|
||||
@ -69,6 +77,8 @@ static void __init omap_generic_init(void)
|
||||
{
|
||||
omap_board_config = palmte_config;
|
||||
omap_board_config_size = ARRAY_SIZE(palmte_config);
|
||||
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
}
|
||||
|
||||
static void __init omap_generic_map_io(void)
|
||||
|
@ -16,7 +16,9 @@
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/nand.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/input.h>
|
||||
|
||||
#include <asm/hardware.h>
|
||||
#include <asm/mach-types.h>
|
||||
@ -28,9 +30,44 @@
|
||||
#include <asm/arch/gpio.h>
|
||||
#include <asm/arch/mux.h>
|
||||
#include <asm/arch/fpga.h>
|
||||
#include <asm/arch/keypad.h>
|
||||
#include <asm/arch/common.h>
|
||||
#include <asm/arch/board.h>
|
||||
|
||||
static int p2_keymap[] = {
|
||||
KEY(0,0,KEY_UP),
|
||||
KEY(0,1,KEY_RIGHT),
|
||||
KEY(0,2,KEY_LEFT),
|
||||
KEY(0,3,KEY_DOWN),
|
||||
KEY(0,4,KEY_CENTER),
|
||||
KEY(0,5,KEY_0_5),
|
||||
KEY(1,0,KEY_SOFT2),
|
||||
KEY(1,1,KEY_SEND),
|
||||
KEY(1,2,KEY_END),
|
||||
KEY(1,3,KEY_VOLUMEDOWN),
|
||||
KEY(1,4,KEY_VOLUMEUP),
|
||||
KEY(1,5,KEY_RECORD),
|
||||
KEY(2,0,KEY_SOFT1),
|
||||
KEY(2,1,KEY_3),
|
||||
KEY(2,2,KEY_6),
|
||||
KEY(2,3,KEY_9),
|
||||
KEY(2,4,KEY_SHARP),
|
||||
KEY(2,5,KEY_2_5),
|
||||
KEY(3,0,KEY_BACK),
|
||||
KEY(3,1,KEY_2),
|
||||
KEY(3,2,KEY_5),
|
||||
KEY(3,3,KEY_8),
|
||||
KEY(3,4,KEY_0),
|
||||
KEY(3,5,KEY_HEADSETHOOK),
|
||||
KEY(4,0,KEY_HOME),
|
||||
KEY(4,1,KEY_1),
|
||||
KEY(4,2,KEY_4),
|
||||
KEY(4,3,KEY_7),
|
||||
KEY(4,4,KEY_STAR),
|
||||
KEY(4,5,KEY_POWER),
|
||||
0
|
||||
};
|
||||
|
||||
static struct resource smc91x_resources[] = {
|
||||
[0] = {
|
||||
.start = H2P2_DBG_FPGA_ETHR_START, /* Physical */
|
||||
@ -44,7 +81,7 @@ static struct resource smc91x_resources[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct mtd_partition p2_partitions[] = {
|
||||
static struct mtd_partition nor_partitions[] = {
|
||||
/* bootloader (U-Boot, etc) in first sector */
|
||||
{
|
||||
.name = "bootloader",
|
||||
@ -75,27 +112,47 @@ static struct mtd_partition p2_partitions[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct flash_platform_data p2_flash_data = {
|
||||
static struct flash_platform_data nor_data = {
|
||||
.map_name = "cfi_probe",
|
||||
.width = 2,
|
||||
.parts = p2_partitions,
|
||||
.nr_parts = ARRAY_SIZE(p2_partitions),
|
||||
.parts = nor_partitions,
|
||||
.nr_parts = ARRAY_SIZE(nor_partitions),
|
||||
};
|
||||
|
||||
static struct resource p2_flash_resource = {
|
||||
static struct resource nor_resource = {
|
||||
.start = OMAP_CS0_PHYS,
|
||||
.end = OMAP_CS0_PHYS + SZ_32M - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct platform_device p2_flash_device = {
|
||||
static struct platform_device nor_device = {
|
||||
.name = "omapflash",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &p2_flash_data,
|
||||
.platform_data = &nor_data,
|
||||
},
|
||||
.num_resources = 1,
|
||||
.resource = &p2_flash_resource,
|
||||
.resource = &nor_resource,
|
||||
};
|
||||
|
||||
static struct nand_platform_data nand_data = {
|
||||
.options = NAND_SAMSUNG_LP_OPTIONS,
|
||||
};
|
||||
|
||||
static struct resource nand_resource = {
|
||||
.start = OMAP_CS3_PHYS,
|
||||
.end = OMAP_CS3_PHYS + SZ_4K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct platform_device nand_device = {
|
||||
.name = "omapnand",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &nand_data,
|
||||
},
|
||||
.num_resources = 1,
|
||||
.resource = &nand_resource,
|
||||
};
|
||||
|
||||
static struct platform_device smc91x_device = {
|
||||
@ -105,17 +162,55 @@ static struct platform_device smc91x_device = {
|
||||
.resource = smc91x_resources,
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&p2_flash_device,
|
||||
&smc91x_device,
|
||||
static struct resource kp_resources[] = {
|
||||
[0] = {
|
||||
.start = INT_730_MPUIO_KEYPAD,
|
||||
.end = INT_730_MPUIO_KEYPAD,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct omap_kp_platform_data kp_data = {
|
||||
.rows = 8,
|
||||
.cols = 8,
|
||||
.keymap = p2_keymap,
|
||||
};
|
||||
|
||||
static struct platform_device kp_device = {
|
||||
.name = "omap-keypad",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &kp_data,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(kp_resources),
|
||||
.resource = kp_resources,
|
||||
};
|
||||
|
||||
static struct platform_device lcd_device = {
|
||||
.name = "lcd_p2",
|
||||
.id = -1,
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&nor_device,
|
||||
&nand_device,
|
||||
&smc91x_device,
|
||||
&kp_device,
|
||||
&lcd_device,
|
||||
};
|
||||
|
||||
#define P2_NAND_RB_GPIO_PIN 62
|
||||
|
||||
static int nand_dev_ready(struct nand_platform_data *data)
|
||||
{
|
||||
return omap_get_gpio_datain(P2_NAND_RB_GPIO_PIN);
|
||||
}
|
||||
|
||||
static struct omap_uart_config perseus2_uart_config __initdata = {
|
||||
.enabled_uarts = ((1 << 0) | (1 << 1)),
|
||||
};
|
||||
|
||||
static struct omap_lcd_config perseus2_lcd_config __initdata = {
|
||||
.panel_name = "p2",
|
||||
.ctrl_name = "internal",
|
||||
};
|
||||
|
||||
@ -126,7 +221,13 @@ static struct omap_board_config_kernel perseus2_config[] = {
|
||||
|
||||
static void __init omap_perseus2_init(void)
|
||||
{
|
||||
(void) platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
if (!(omap_request_gpio(P2_NAND_RB_GPIO_PIN)))
|
||||
nand_data.dev_ready = nand_dev_ready;
|
||||
|
||||
omap_cfg_reg(L3_1610_FLASH_CS2B_OE);
|
||||
omap_cfg_reg(M8_1610_FLASH_CS2B_WE);
|
||||
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
|
||||
omap_board_config = perseus2_config;
|
||||
omap_board_config_size = ARRAY_SIZE(perseus2_config);
|
||||
|
@ -155,9 +155,9 @@ static struct omap_uart_config voiceblue_uart_config __initdata = {
|
||||
};
|
||||
|
||||
static struct omap_board_config_kernel voiceblue_config[] = {
|
||||
{ OMAP_TAG_USB, &voiceblue_usb_config },
|
||||
{ OMAP_TAG_MMC, &voiceblue_mmc_config },
|
||||
{ OMAP_TAG_UART, &voiceblue_uart_config },
|
||||
{ OMAP_TAG_USB, &voiceblue_usb_config },
|
||||
{ OMAP_TAG_MMC, &voiceblue_mmc_config },
|
||||
{ OMAP_TAG_UART, &voiceblue_uart_config },
|
||||
};
|
||||
|
||||
static void __init voiceblue_init_irq(void)
|
||||
@ -235,7 +235,7 @@ static struct notifier_block panic_block = {
|
||||
static int __init voiceblue_setup(void)
|
||||
{
|
||||
/* Setup panic notifier */
|
||||
atomic_notifier_chain_register(&panic_notifier_list, &panic_block);
|
||||
notifier_chain_register(&panic_notifier_list, &panic_block);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -99,6 +99,45 @@ static void omap_init_rtc(void)
|
||||
static inline void omap_init_rtc(void) {}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_OMAP_STI)
|
||||
|
||||
#define OMAP1_STI_BASE IO_ADDRESS(0xfffea000)
|
||||
#define OMAP1_STI_CHANNEL_BASE (OMAP1_STI_BASE + 0x400)
|
||||
|
||||
static struct resource sti_resources[] = {
|
||||
{
|
||||
.start = OMAP1_STI_BASE,
|
||||
.end = OMAP1_STI_BASE + SZ_1K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = OMAP1_STI_CHANNEL_BASE,
|
||||
.end = OMAP1_STI_CHANNEL_BASE + SZ_1K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = INT_1610_STI,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
}
|
||||
};
|
||||
|
||||
static struct platform_device sti_device = {
|
||||
.name = "sti",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.release = omap_nop_release,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(sti_resources),
|
||||
.resource = sti_resources,
|
||||
};
|
||||
|
||||
static inline void omap_init_sti(void)
|
||||
{
|
||||
platform_device_register(&sti_device);
|
||||
}
|
||||
#else
|
||||
static inline void omap_init_sti(void) {}
|
||||
#endif
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
@ -129,6 +168,7 @@ static int __init omap1_init_devices(void)
|
||||
*/
|
||||
omap_init_irda();
|
||||
omap_init_rtc();
|
||||
omap_init_sti();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -20,3 +20,6 @@ config MACH_OMAP_H4
|
||||
bool "OMAP 2420 H4 board"
|
||||
depends on ARCH_OMAP2 && ARCH_OMAP24XX
|
||||
|
||||
config MACH_OMAP_APOLLON
|
||||
bool "OMAP 2420 Apollon board"
|
||||
depends on ARCH_OMAP2 && ARCH_OMAP24XX
|
||||
|
285
arch/arm/mach-omap2/board-apollon.c
Normal file
285
arch/arm/mach-omap2/board-apollon.c
Normal file
@ -0,0 +1,285 @@
|
||||
/*
|
||||
* linux/arch/arm/mach-omap/omap2/board-apollon.c
|
||||
*
|
||||
* Copyright (C) 2005,2006 Samsung Electronics
|
||||
* Author: Kyungmin Park <kyungmin.park@samsung.com>
|
||||
*
|
||||
* Modified from mach-omap/omap2/board-h4.c
|
||||
*
|
||||
* Code for apollon OMAP2 board. Should work on many OMAP2 systems where
|
||||
* the bootloader passes the board-specific data to the kernel.
|
||||
* Do not put any board specific code to this file; create a new machine
|
||||
* type if you need custom low-level initializations.
|
||||
*
|
||||
* 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/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/mtd/onenand.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/delay.h>
|
||||
|
||||
#include <asm/hardware.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/flash.h>
|
||||
|
||||
#include <asm/arch/gpio.h>
|
||||
#include <asm/arch/mux.h>
|
||||
#include <asm/arch/usb.h>
|
||||
#include <asm/arch/board.h>
|
||||
#include <asm/arch/common.h>
|
||||
#include "prcm-regs.h"
|
||||
|
||||
/* LED & Switch macros */
|
||||
#define LED0_GPIO13 13
|
||||
#define LED1_GPIO14 14
|
||||
#define LED2_GPIO15 15
|
||||
#define SW_ENTER_GPIO16 16
|
||||
#define SW_UP_GPIO17 17
|
||||
#define SW_DOWN_GPIO58 58
|
||||
|
||||
static struct mtd_partition apollon_partitions[] = {
|
||||
{
|
||||
.name = "X-Loader + U-Boot",
|
||||
.offset = 0,
|
||||
.size = SZ_128K,
|
||||
.mask_flags = MTD_WRITEABLE,
|
||||
},
|
||||
{
|
||||
.name = "params",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = SZ_128K,
|
||||
},
|
||||
{
|
||||
.name = "kernel",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = SZ_2M,
|
||||
},
|
||||
{
|
||||
.name = "rootfs",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = SZ_16M,
|
||||
},
|
||||
{
|
||||
.name = "filesystem00",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = SZ_32M,
|
||||
},
|
||||
{
|
||||
.name = "filesystem01",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = MTDPART_SIZ_FULL,
|
||||
},
|
||||
};
|
||||
|
||||
static struct flash_platform_data apollon_flash_data = {
|
||||
.parts = apollon_partitions,
|
||||
.nr_parts = ARRAY_SIZE(apollon_partitions),
|
||||
};
|
||||
|
||||
static struct resource apollon_flash_resource = {
|
||||
.start = APOLLON_CS0_BASE,
|
||||
.end = APOLLON_CS0_BASE + SZ_128K,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct platform_device apollon_onenand_device = {
|
||||
.name = "onenand",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &apollon_flash_data,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(&apollon_flash_resource),
|
||||
.resource = &apollon_flash_resource,
|
||||
};
|
||||
|
||||
static struct resource apollon_smc91x_resources[] = {
|
||||
[0] = {
|
||||
.start = APOLLON_ETHR_START, /* Physical */
|
||||
.end = APOLLON_ETHR_START + 0xf,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = OMAP_GPIO_IRQ(APOLLON_ETHR_GPIO_IRQ),
|
||||
.end = OMAP_GPIO_IRQ(APOLLON_ETHR_GPIO_IRQ),
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device apollon_smc91x_device = {
|
||||
.name = "smc91x",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(apollon_smc91x_resources),
|
||||
.resource = apollon_smc91x_resources,
|
||||
};
|
||||
|
||||
static struct platform_device apollon_lcd_device = {
|
||||
.name = "apollon_lcd",
|
||||
.id = -1,
|
||||
};
|
||||
|
||||
static struct platform_device *apollon_devices[] __initdata = {
|
||||
&apollon_onenand_device,
|
||||
&apollon_smc91x_device,
|
||||
&apollon_lcd_device,
|
||||
};
|
||||
|
||||
static inline void __init apollon_init_smc91x(void)
|
||||
{
|
||||
/* Make sure CS1 timings are correct */
|
||||
GPMC_CONFIG1_1 = 0x00011203;
|
||||
GPMC_CONFIG2_1 = 0x001f1f01;
|
||||
GPMC_CONFIG3_1 = 0x00080803;
|
||||
GPMC_CONFIG4_1 = 0x1c091c09;
|
||||
GPMC_CONFIG5_1 = 0x041f1f1f;
|
||||
GPMC_CONFIG6_1 = 0x000004c4;
|
||||
GPMC_CONFIG7_1 = 0x00000f40 | (APOLLON_CS1_BASE >> 24);
|
||||
udelay(100);
|
||||
|
||||
omap_cfg_reg(W4__24XX_GPIO74);
|
||||
if (omap_request_gpio(APOLLON_ETHR_GPIO_IRQ) < 0) {
|
||||
printk(KERN_ERR "Failed to request GPIO%d for smc91x IRQ\n",
|
||||
APOLLON_ETHR_GPIO_IRQ);
|
||||
return;
|
||||
}
|
||||
omap_set_gpio_direction(APOLLON_ETHR_GPIO_IRQ, 1);
|
||||
}
|
||||
|
||||
static void __init omap_apollon_init_irq(void)
|
||||
{
|
||||
omap2_init_common_hw();
|
||||
omap_init_irq();
|
||||
omap_gpio_init();
|
||||
apollon_init_smc91x();
|
||||
}
|
||||
|
||||
static struct omap_uart_config apollon_uart_config __initdata = {
|
||||
.enabled_uarts = (1 << 0) | (0 << 1) | (0 << 2),
|
||||
};
|
||||
|
||||
static struct omap_mmc_config apollon_mmc_config __initdata = {
|
||||
.mmc [0] = {
|
||||
.enabled = 0,
|
||||
.wire4 = 0,
|
||||
.wp_pin = -1,
|
||||
.power_pin = -1,
|
||||
.switch_pin = -1,
|
||||
},
|
||||
};
|
||||
|
||||
static struct omap_lcd_config apollon_lcd_config __initdata = {
|
||||
.ctrl_name = "internal",
|
||||
};
|
||||
|
||||
static struct omap_board_config_kernel apollon_config[] = {
|
||||
{ OMAP_TAG_UART, &apollon_uart_config },
|
||||
{ OMAP_TAG_MMC, &apollon_mmc_config },
|
||||
{ OMAP_TAG_LCD, &apollon_lcd_config },
|
||||
};
|
||||
|
||||
static void __init apollon_led_init(void)
|
||||
{
|
||||
/* LED0 - AA10 */
|
||||
omap_cfg_reg(AA10_242X_GPIO13);
|
||||
omap_request_gpio(LED0_GPIO13);
|
||||
omap_set_gpio_direction(LED0_GPIO13, 0);
|
||||
omap_set_gpio_dataout(LED0_GPIO13, 0);
|
||||
/* LED1 - AA6 */
|
||||
omap_cfg_reg(AA6_242X_GPIO14);
|
||||
omap_request_gpio(LED1_GPIO14);
|
||||
omap_set_gpio_direction(LED1_GPIO14, 0);
|
||||
omap_set_gpio_dataout(LED1_GPIO14, 0);
|
||||
/* LED2 - AA4 */
|
||||
omap_cfg_reg(AA4_242X_GPIO15);
|
||||
omap_request_gpio(LED2_GPIO15);
|
||||
omap_set_gpio_direction(LED2_GPIO15, 0);
|
||||
omap_set_gpio_dataout(LED2_GPIO15, 0);
|
||||
}
|
||||
|
||||
static irqreturn_t apollon_sw_interrupt(int irq, void *ignored, struct pt_regs *regs)
|
||||
{
|
||||
static unsigned int led0, led1, led2;
|
||||
|
||||
if (irq == OMAP_GPIO_IRQ(SW_ENTER_GPIO16))
|
||||
omap_set_gpio_dataout(LED0_GPIO13, led0 ^= 1);
|
||||
else if (irq == OMAP_GPIO_IRQ(SW_UP_GPIO17))
|
||||
omap_set_gpio_dataout(LED1_GPIO14, led1 ^= 1);
|
||||
else if (irq == OMAP_GPIO_IRQ(SW_DOWN_GPIO58))
|
||||
omap_set_gpio_dataout(LED2_GPIO15, led2 ^= 1);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static void __init apollon_sw_init(void)
|
||||
{
|
||||
/* Enter SW - Y11 */
|
||||
omap_cfg_reg(Y11_242X_GPIO16);
|
||||
omap_request_gpio(SW_ENTER_GPIO16);
|
||||
omap_set_gpio_direction(SW_ENTER_GPIO16, 1);
|
||||
/* Up SW - AA12 */
|
||||
omap_cfg_reg(AA12_242X_GPIO17);
|
||||
omap_request_gpio(SW_UP_GPIO17);
|
||||
omap_set_gpio_direction(SW_UP_GPIO17, 1);
|
||||
/* Down SW - AA8 */
|
||||
omap_cfg_reg(AA8_242X_GPIO58);
|
||||
omap_request_gpio(SW_DOWN_GPIO58);
|
||||
omap_set_gpio_direction(SW_DOWN_GPIO58, 1);
|
||||
|
||||
set_irq_type(OMAP_GPIO_IRQ(SW_ENTER_GPIO16), IRQT_RISING);
|
||||
if (request_irq(OMAP_GPIO_IRQ(SW_ENTER_GPIO16), &apollon_sw_interrupt,
|
||||
SA_SHIRQ, "enter sw",
|
||||
&apollon_sw_interrupt))
|
||||
return;
|
||||
set_irq_type(OMAP_GPIO_IRQ(SW_UP_GPIO17), IRQT_RISING);
|
||||
if (request_irq(OMAP_GPIO_IRQ(SW_UP_GPIO17), &apollon_sw_interrupt,
|
||||
SA_SHIRQ, "up sw",
|
||||
&apollon_sw_interrupt))
|
||||
return;
|
||||
set_irq_type(OMAP_GPIO_IRQ(SW_DOWN_GPIO58), IRQT_RISING);
|
||||
if (request_irq(OMAP_GPIO_IRQ(SW_DOWN_GPIO58), &apollon_sw_interrupt,
|
||||
SA_SHIRQ, "down sw",
|
||||
&apollon_sw_interrupt))
|
||||
return;
|
||||
}
|
||||
|
||||
static void __init omap_apollon_init(void)
|
||||
{
|
||||
apollon_led_init();
|
||||
apollon_sw_init();
|
||||
|
||||
/* REVISIT: where's the correct place */
|
||||
omap_cfg_reg(W19_24XX_SYS_NIRQ);
|
||||
|
||||
/*
|
||||
* Make sure the serial ports are muxed on at this point.
|
||||
* You have to mux them off in device drivers later on
|
||||
* if not needed.
|
||||
*/
|
||||
platform_add_devices(apollon_devices, ARRAY_SIZE(apollon_devices));
|
||||
omap_board_config = apollon_config;
|
||||
omap_board_config_size = ARRAY_SIZE(apollon_config);
|
||||
omap_serial_init();
|
||||
}
|
||||
|
||||
static void __init omap_apollon_map_io(void)
|
||||
{
|
||||
omap2_map_common_io();
|
||||
}
|
||||
|
||||
MACHINE_START(OMAP_APOLLON, "OMAP24xx Apollon")
|
||||
/* Maintainer: Kyungmin Park <kyungmin.park@samsung.com> */
|
||||
.phys_io = 0x48000000,
|
||||
.io_pg_offst = ((0xd8000000) >> 18) & 0xfffc,
|
||||
.boot_params = 0x80000100,
|
||||
.map_io = omap_apollon_map_io,
|
||||
.init_irq = omap_apollon_init_irq,
|
||||
.init_machine = omap_apollon_init,
|
||||
.timer = &omap_timer,
|
||||
MACHINE_END
|
@ -17,6 +17,8 @@
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/input.h>
|
||||
|
||||
#include <asm/hardware.h>
|
||||
#include <asm/mach-types.h>
|
||||
@ -25,15 +27,57 @@
|
||||
#include <asm/mach/flash.h>
|
||||
|
||||
#include <asm/arch/gpio.h>
|
||||
#include <asm/arch/gpioexpander.h>
|
||||
#include <asm/arch/mux.h>
|
||||
#include <asm/arch/usb.h>
|
||||
#include <asm/arch/irda.h>
|
||||
#include <asm/arch/board.h>
|
||||
#include <asm/arch/common.h>
|
||||
#include <asm/arch/prcm.h>
|
||||
#include <asm/arch/keypad.h>
|
||||
#include <asm/arch/menelaus.h>
|
||||
#include <asm/arch/dma.h>
|
||||
#include "prcm-regs.h"
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/delay.h>
|
||||
|
||||
static unsigned int row_gpios[6] = { 88, 89, 124, 11, 6, 96 };
|
||||
static unsigned int col_gpios[7] = { 90, 91, 100, 36, 12, 97, 98 };
|
||||
|
||||
static int h4_keymap[] = {
|
||||
KEY(0, 0, KEY_LEFT),
|
||||
KEY(0, 1, KEY_RIGHT),
|
||||
KEY(0, 2, KEY_A),
|
||||
KEY(0, 3, KEY_B),
|
||||
KEY(0, 4, KEY_C),
|
||||
KEY(1, 0, KEY_DOWN),
|
||||
KEY(1, 1, KEY_UP),
|
||||
KEY(1, 2, KEY_E),
|
||||
KEY(1, 3, KEY_F),
|
||||
KEY(1, 4, KEY_G),
|
||||
KEY(2, 0, KEY_ENTER),
|
||||
KEY(2, 1, KEY_I),
|
||||
KEY(2, 2, KEY_J),
|
||||
KEY(2, 3, KEY_K),
|
||||
KEY(2, 4, KEY_3),
|
||||
KEY(3, 0, KEY_M),
|
||||
KEY(3, 1, KEY_N),
|
||||
KEY(3, 2, KEY_O),
|
||||
KEY(3, 3, KEY_P),
|
||||
KEY(3, 4, KEY_Q),
|
||||
KEY(4, 0, KEY_R),
|
||||
KEY(4, 1, KEY_4),
|
||||
KEY(4, 2, KEY_T),
|
||||
KEY(4, 3, KEY_U),
|
||||
KEY(4, 4, KEY_ENTER),
|
||||
KEY(5, 0, KEY_V),
|
||||
KEY(5, 1, KEY_W),
|
||||
KEY(5, 2, KEY_L),
|
||||
KEY(5, 3, KEY_S),
|
||||
KEY(5, 4, KEY_ENTER),
|
||||
0
|
||||
};
|
||||
|
||||
static struct mtd_partition h4_partitions[] = {
|
||||
/* bootloader (U-Boot, etc) in first sector */
|
||||
{
|
||||
@ -108,9 +152,123 @@ static struct platform_device h4_smc91x_device = {
|
||||
.resource = h4_smc91x_resources,
|
||||
};
|
||||
|
||||
/* Select between the IrDA and aGPS module
|
||||
*/
|
||||
static int h4_select_irda(struct device *dev, int state)
|
||||
{
|
||||
unsigned char expa;
|
||||
int err = 0;
|
||||
|
||||
if ((err = read_gpio_expa(&expa, 0x21))) {
|
||||
printk(KERN_ERR "Error reading from I/O expander\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
/* 'P6' enable/disable IRDA_TX and IRDA_RX */
|
||||
if (state & IR_SEL) { /* IrDa */
|
||||
if ((err = write_gpio_expa(expa | 0x01, 0x21))) {
|
||||
printk(KERN_ERR "Error writing to I/O expander\n");
|
||||
return err;
|
||||
}
|
||||
} else {
|
||||
if ((err = write_gpio_expa(expa & ~0x01, 0x21))) {
|
||||
printk(KERN_ERR "Error writing to I/O expander\n");
|
||||
return err;
|
||||
}
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
static void set_trans_mode(void *data)
|
||||
{
|
||||
int *mode = data;
|
||||
unsigned char expa;
|
||||
int err = 0;
|
||||
|
||||
if ((err = read_gpio_expa(&expa, 0x20)) != 0) {
|
||||
printk(KERN_ERR "Error reading from I/O expander\n");
|
||||
}
|
||||
|
||||
expa &= ~0x01;
|
||||
|
||||
if (!(*mode & IR_SIRMODE)) { /* MIR/FIR */
|
||||
expa |= 0x01;
|
||||
}
|
||||
|
||||
if ((err = write_gpio_expa(expa, 0x20)) != 0) {
|
||||
printk(KERN_ERR "Error writing to I/O expander\n");
|
||||
}
|
||||
}
|
||||
|
||||
static int h4_transceiver_mode(struct device *dev, int mode)
|
||||
{
|
||||
struct omap_irda_config *irda_config = dev->platform_data;
|
||||
|
||||
cancel_delayed_work(&irda_config->gpio_expa);
|
||||
PREPARE_WORK(&irda_config->gpio_expa, set_trans_mode, &mode);
|
||||
schedule_work(&irda_config->gpio_expa);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct omap_irda_config h4_irda_data = {
|
||||
.transceiver_cap = IR_SIRMODE | IR_MIRMODE | IR_FIRMODE,
|
||||
.transceiver_mode = h4_transceiver_mode,
|
||||
.select_irda = h4_select_irda,
|
||||
.rx_channel = OMAP24XX_DMA_UART3_RX,
|
||||
.tx_channel = OMAP24XX_DMA_UART3_TX,
|
||||
.dest_start = OMAP_UART3_BASE,
|
||||
.src_start = OMAP_UART3_BASE,
|
||||
.tx_trigger = OMAP24XX_DMA_UART3_TX,
|
||||
.rx_trigger = OMAP24XX_DMA_UART3_RX,
|
||||
};
|
||||
|
||||
static struct resource h4_irda_resources[] = {
|
||||
[0] = {
|
||||
.start = INT_24XX_UART3_IRQ,
|
||||
.end = INT_24XX_UART3_IRQ,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device h4_irda_device = {
|
||||
.name = "omapirda",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &h4_irda_data,
|
||||
},
|
||||
.num_resources = 1,
|
||||
.resource = h4_irda_resources,
|
||||
};
|
||||
|
||||
static struct omap_kp_platform_data h4_kp_data = {
|
||||
.rows = 6,
|
||||
.cols = 7,
|
||||
.keymap = h4_keymap,
|
||||
.rep = 1,
|
||||
.row_gpios = row_gpios,
|
||||
.col_gpios = col_gpios,
|
||||
};
|
||||
|
||||
static struct platform_device h4_kp_device = {
|
||||
.name = "omap-keypad",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &h4_kp_data,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device h4_lcd_device = {
|
||||
.name = "lcd_h4",
|
||||
.id = -1,
|
||||
};
|
||||
|
||||
static struct platform_device *h4_devices[] __initdata = {
|
||||
&h4_smc91x_device,
|
||||
&h4_flash_device,
|
||||
&h4_irda_device,
|
||||
&h4_kp_device,
|
||||
&h4_lcd_device,
|
||||
};
|
||||
|
||||
static inline void __init h4_init_smc91x(void)
|
||||
@ -157,7 +315,6 @@ static struct omap_mmc_config h4_mmc_config __initdata = {
|
||||
};
|
||||
|
||||
static struct omap_lcd_config h4_lcd_config __initdata = {
|
||||
.panel_name = "h4",
|
||||
.ctrl_name = "internal",
|
||||
};
|
||||
|
||||
@ -174,6 +331,19 @@ static void __init omap_h4_init(void)
|
||||
* You have to mux them off in device drivers later on
|
||||
* if not needed.
|
||||
*/
|
||||
#if defined(CONFIG_OMAP_IR) || defined(CONFIG_OMAP_IR_MODULE)
|
||||
omap_cfg_reg(K15_24XX_UART3_TX);
|
||||
omap_cfg_reg(K14_24XX_UART3_RX);
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_KEYBOARD_OMAP) || defined(CONFIG_KEYBOARD_OMAP_MODULE)
|
||||
if (omap_has_menelaus()) {
|
||||
row_gpios[5] = 0;
|
||||
col_gpios[2] = 15;
|
||||
col_gpios[6] = 18;
|
||||
}
|
||||
#endif
|
||||
|
||||
platform_add_devices(h4_devices, ARRAY_SIZE(h4_devices));
|
||||
omap_board_config = h4_config;
|
||||
omap_board_config_size = ARRAY_SIZE(h4_config);
|
||||
|
@ -74,6 +74,47 @@ static void omap_init_i2c(void) {}
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_OMAP_STI)
|
||||
|
||||
#define OMAP2_STI_BASE IO_ADDRESS(0x48068000)
|
||||
#define OMAP2_STI_CHANNEL_BASE 0x54000000
|
||||
#define OMAP2_STI_IRQ 4
|
||||
|
||||
static struct resource sti_resources[] = {
|
||||
{
|
||||
.start = OMAP2_STI_BASE,
|
||||
.end = OMAP2_STI_BASE + 0x7ff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = OMAP2_STI_CHANNEL_BASE,
|
||||
.end = OMAP2_STI_CHANNEL_BASE + SZ_64K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = OMAP2_STI_IRQ,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
}
|
||||
};
|
||||
|
||||
static struct platform_device sti_device = {
|
||||
.name = "sti",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.release = omap_nop_release,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(sti_resources),
|
||||
.resource = sti_resources,
|
||||
};
|
||||
|
||||
static inline void omap_init_sti(void)
|
||||
{
|
||||
platform_device_register(&sti_device);
|
||||
}
|
||||
#else
|
||||
static inline void omap_init_sti(void) {}
|
||||
#endif
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
static int __init omap2_init_devices(void)
|
||||
@ -82,6 +123,7 @@ static int __init omap2_init_devices(void)
|
||||
* in alphabetical order so they're easier to sort through.
|
||||
*/
|
||||
omap_init_i2c();
|
||||
omap_init_sti();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include <asm/arch/board.h>
|
||||
#include <asm/arch/mux.h>
|
||||
#include <asm/arch/gpio.h>
|
||||
#include <asm/arch/menelaus.h>
|
||||
|
||||
|
||||
void omap_nop_release(struct device *dev)
|
||||
@ -97,6 +98,62 @@ static void omap_init_i2c(void)
|
||||
static inline void omap_init_i2c(void) {}
|
||||
#endif
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
#if defined(CONFIG_KEYBOARD_OMAP) || defined(CONFIG_KEYBOARD_OMAP_MODULE)
|
||||
|
||||
static void omap_init_kp(void)
|
||||
{
|
||||
if (machine_is_omap_h2() || machine_is_omap_h3()) {
|
||||
omap_cfg_reg(F18_1610_KBC0);
|
||||
omap_cfg_reg(D20_1610_KBC1);
|
||||
omap_cfg_reg(D19_1610_KBC2);
|
||||
omap_cfg_reg(E18_1610_KBC3);
|
||||
omap_cfg_reg(C21_1610_KBC4);
|
||||
|
||||
omap_cfg_reg(G18_1610_KBR0);
|
||||
omap_cfg_reg(F19_1610_KBR1);
|
||||
omap_cfg_reg(H14_1610_KBR2);
|
||||
omap_cfg_reg(E20_1610_KBR3);
|
||||
omap_cfg_reg(E19_1610_KBR4);
|
||||
omap_cfg_reg(N19_1610_KBR5);
|
||||
} else if (machine_is_omap_perseus2()) {
|
||||
omap_cfg_reg(E2_730_KBR0);
|
||||
omap_cfg_reg(J7_730_KBR1);
|
||||
omap_cfg_reg(E1_730_KBR2);
|
||||
omap_cfg_reg(F3_730_KBR3);
|
||||
omap_cfg_reg(D2_730_KBR4);
|
||||
|
||||
omap_cfg_reg(C2_730_KBC0);
|
||||
omap_cfg_reg(D3_730_KBC1);
|
||||
omap_cfg_reg(E4_730_KBC2);
|
||||
omap_cfg_reg(F4_730_KBC3);
|
||||
omap_cfg_reg(E3_730_KBC4);
|
||||
} else if (machine_is_omap_h4()) {
|
||||
omap_cfg_reg(T19_24XX_KBR0);
|
||||
omap_cfg_reg(R19_24XX_KBR1);
|
||||
omap_cfg_reg(V18_24XX_KBR2);
|
||||
omap_cfg_reg(M21_24XX_KBR3);
|
||||
omap_cfg_reg(E5__24XX_KBR4);
|
||||
if (omap_has_menelaus()) {
|
||||
omap_cfg_reg(B3__24XX_KBR5);
|
||||
omap_cfg_reg(AA4_24XX_KBC2);
|
||||
omap_cfg_reg(B13_24XX_KBC6);
|
||||
} else {
|
||||
omap_cfg_reg(M18_24XX_KBR5);
|
||||
omap_cfg_reg(H19_24XX_KBC2);
|
||||
omap_cfg_reg(N19_24XX_KBC6);
|
||||
}
|
||||
omap_cfg_reg(R20_24XX_KBC0);
|
||||
omap_cfg_reg(M14_24XX_KBC1);
|
||||
omap_cfg_reg(V17_24XX_KBC3);
|
||||
omap_cfg_reg(P21_24XX_KBC4);
|
||||
omap_cfg_reg(L14_24XX_KBC5);
|
||||
}
|
||||
}
|
||||
#else
|
||||
static inline void omap_init_kp(void) {}
|
||||
#endif
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
#if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE)
|
||||
@ -240,6 +297,55 @@ static void __init omap_init_mmc(void)
|
||||
static inline void omap_init_mmc(void) {}
|
||||
#endif
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* Numbering for the SPI-capable controllers when used for SPI:
|
||||
* spi = 1
|
||||
* uwire = 2
|
||||
* mmc1..2 = 3..4
|
||||
* mcbsp1..3 = 5..7
|
||||
*/
|
||||
|
||||
#if defined(CONFIG_SPI_OMAP_UWIRE) || defined(CONFIG_SPI_OMAP_UWIRE_MODULE)
|
||||
|
||||
#define OMAP_UWIRE_BASE 0xfffb3000
|
||||
|
||||
static struct resource uwire_resources[] = {
|
||||
{
|
||||
.start = OMAP_UWIRE_BASE,
|
||||
.end = OMAP_UWIRE_BASE + 0x20,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device omap_uwire_device = {
|
||||
.name = "omap_uwire",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.release = omap_nop_release,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(uwire_resources),
|
||||
.resource = uwire_resources,
|
||||
};
|
||||
|
||||
static void omap_init_uwire(void)
|
||||
{
|
||||
/* FIXME define and use a boot tag; not all boards will be hooking
|
||||
* up devices to the microwire controller, and multi-board configs
|
||||
* mean that CONFIG_SPI_OMAP_UWIRE may be configured anyway...
|
||||
*/
|
||||
|
||||
/* board-specific code must configure chipselects (only a few
|
||||
* are normally used) and SCLK/SDI/SDO (each has two choices).
|
||||
*/
|
||||
(void) platform_device_register(&omap_uwire_device);
|
||||
}
|
||||
#else
|
||||
static inline void omap_init_uwire(void) {}
|
||||
#endif
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
#if defined(CONFIG_OMAP_WATCHDOG) || defined(CONFIG_OMAP_WATCHDOG_MODULE)
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP24XX
|
||||
@ -310,40 +416,6 @@ static void omap_init_rng(void)
|
||||
static inline void omap_init_rng(void) {}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_FB_OMAP) || defined(CONFIG_FB_OMAP_MODULE)
|
||||
|
||||
static struct omap_lcd_config omap_fb_conf;
|
||||
|
||||
static u64 omap_fb_dma_mask = ~(u32)0;
|
||||
|
||||
static struct platform_device omap_fb_device = {
|
||||
.name = "omapfb",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.release = omap_nop_release,
|
||||
.dma_mask = &omap_fb_dma_mask,
|
||||
.coherent_dma_mask = ~(u32)0,
|
||||
.platform_data = &omap_fb_conf,
|
||||
},
|
||||
.num_resources = 0,
|
||||
};
|
||||
|
||||
static inline void omap_init_fb(void)
|
||||
{
|
||||
const struct omap_lcd_config *conf;
|
||||
|
||||
conf = omap_get_config(OMAP_TAG_LCD, struct omap_lcd_config);
|
||||
if (conf != NULL)
|
||||
omap_fb_conf = *conf;
|
||||
platform_device_register(&omap_fb_device);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
static inline void omap_init_fb(void) {}
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This gets called after board-specific INIT_MACHINE, and initializes most
|
||||
* on-chip peripherals accessible on this board (except for few like USB):
|
||||
@ -369,9 +441,10 @@ static int __init omap_init_devices(void)
|
||||
/* please keep these calls, and their implementations above,
|
||||
* in alphabetical order so they're easier to sort through.
|
||||
*/
|
||||
omap_init_fb();
|
||||
omap_init_i2c();
|
||||
omap_init_kp();
|
||||
omap_init_mmc();
|
||||
omap_init_uwire();
|
||||
omap_init_wdt();
|
||||
omap_init_rng();
|
||||
|
||||
|
65
include/asm-arm/arch-omap/board-ams-delta.h
Normal file
65
include/asm-arm/arch-omap/board-ams-delta.h
Normal file
@ -0,0 +1,65 @@
|
||||
/*
|
||||
* linux/include/asm-arm/arch-omap/board-ams-delta.h
|
||||
*
|
||||
* Copyright (C) 2006 Jonathan McDowell <noodles@earth.li>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
|
||||
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
#ifndef __ASM_ARCH_OMAP_AMS_DELTA_H
|
||||
#define __ASM_ARCH_OMAP_AMS_DELTA_H
|
||||
|
||||
#if defined (CONFIG_MACH_AMS_DELTA)
|
||||
|
||||
#define AMS_DELTA_LATCH1_PHYS 0x01000000
|
||||
#define AMS_DELTA_LATCH1_VIRT 0xEA000000
|
||||
#define AMS_DELTA_MODEM_PHYS 0x04000000
|
||||
#define AMS_DELTA_MODEM_VIRT 0xEB000000
|
||||
#define AMS_DELTA_LATCH2_PHYS 0x08000000
|
||||
#define AMS_DELTA_LATCH2_VIRT 0xEC000000
|
||||
|
||||
#define AMS_DELTA_LATCH1_LED_CAMERA 0x01
|
||||
#define AMS_DELTA_LATCH1_LED_ADVERT 0x02
|
||||
#define AMS_DELTA_LATCH1_LED_EMAIL 0x04
|
||||
#define AMS_DELTA_LATCH1_LED_HANDSFREE 0x08
|
||||
#define AMS_DELTA_LATCH1_LED_VOICEMAIL 0x10
|
||||
#define AMS_DELTA_LATCH1_LED_VOICE 0x20
|
||||
|
||||
#define AMS_DELTA_LATCH2_LCD_VBLEN 0x0001
|
||||
#define AMS_DELTA_LATCH2_LCD_NDISP 0x0002
|
||||
#define AMS_DELTA_LATCH2_NAND_NCE 0x0004
|
||||
#define AMS_DELTA_LATCH2_NAND_NRE 0x0008
|
||||
#define AMS_DELTA_LATCH2_NAND_NWP 0x0010
|
||||
#define AMS_DELTA_LATCH2_NAND_NWE 0x0020
|
||||
#define AMS_DELTA_LATCH2_NAND_ALE 0x0040
|
||||
#define AMS_DELTA_LATCH2_NAND_CLE 0x0080
|
||||
#define AMS_DELTA_LATCH2_MODEM_NRESET 0x1000
|
||||
#define AMS_DELTA_LATCH2_MODEM_CODEC 0x2000
|
||||
|
||||
#define AMS_DELTA_GPIO_PIN_NAND_RB 12
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
void ams_delta_latch1_write(u8 mask, u8 value);
|
||||
void ams_delta_latch2_write(u16 mask, u16 value);
|
||||
#endif
|
||||
|
||||
#endif /* CONFIG_MACH_AMS_DELTA */
|
||||
|
||||
#endif /* __ASM_ARCH_OMAP_AMS_DELTA_H */
|
45
include/asm-arm/arch-omap/board-apollon.h
Normal file
45
include/asm-arm/arch-omap/board-apollon.h
Normal file
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* linux/include/asm-arm/arch-omap/board-apollon.h
|
||||
*
|
||||
* Hardware definitions for Samsung OMAP24XX Apollon board.
|
||||
*
|
||||
* Initial creation by Kyungmin Park <kyungmin.park@samsung.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
|
||||
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_OMAP_APOLLON_H
|
||||
#define __ASM_ARCH_OMAP_APOLLON_H
|
||||
|
||||
/* Placeholder for APOLLON specific defines */
|
||||
/* GPMC CS0 */
|
||||
#define APOLLON_CS0_BASE 0x00000000
|
||||
/* GPMC CS1 */
|
||||
#define APOLLON_CS1_BASE 0x08000000
|
||||
#define APOLLON_ETHR_START (APOLLON_CS1_BASE + 0x300)
|
||||
#define APOLLON_ETHR_GPIO_IRQ 74
|
||||
/* GPMC CS2 - reserved for OneNAND */
|
||||
#define APOLLON_CS2_BASE 0x10000000
|
||||
/* GPMC CS3 - reserved for NOR or NAND */
|
||||
#define APOLLON_CS3_BASE 0x18000000
|
||||
|
||||
#endif /* __ASM_ARCH_OMAP_APOLLON_H */
|
||||
|
@ -34,9 +34,5 @@
|
||||
/* At OMAP1610 Innovator the Ethernet is directly connected to CS1 */
|
||||
#define OMAP1610_ETHR_START 0x04000300
|
||||
|
||||
/* Samsung NAND flash at CS2B or CS3(NAND Boot) */
|
||||
#define OMAP_NAND_FLASH_START1 0x0A000000 /* CS2B */
|
||||
#define OMAP_NAND_FLASH_START2 0x0C000000 /* CS3 */
|
||||
|
||||
#endif /* __ASM_ARCH_OMAP_H2_H */
|
||||
|
||||
|
@ -30,10 +30,6 @@
|
||||
/* In OMAP1710 H3 the Ethernet is directly connected to CS1 */
|
||||
#define OMAP1710_ETHR_START 0x04000300
|
||||
|
||||
/* Samsung NAND flash at CS2B or CS3(NAND Boot) */
|
||||
#define OMAP_NAND_FLASH_START1 0x0A000000 /* CS2B */
|
||||
#define OMAP_NAND_FLASH_START2 0x0C000000 /* CS3 */
|
||||
|
||||
#define MAXIRQNUM (IH_BOARD_BASE)
|
||||
#define MAXFIQNUM MAXIRQNUM
|
||||
#define MAXSWINUM MAXIRQNUM
|
||||
|
@ -33,12 +33,6 @@
|
||||
/* GPMC CS1 */
|
||||
#define OMAP24XX_ETHR_START 0x08000300
|
||||
#define OMAP24XX_ETHR_GPIO_IRQ 92
|
||||
|
||||
#define H4_CS0_BASE 0x04000000
|
||||
|
||||
#define H4_CS0_BASE 0x04000000
|
||||
|
||||
#define H4_CS0_BASE 0x04000000
|
||||
|
||||
#define H4_CS0_BASE 0x04000000
|
||||
#endif /* __ASM_ARCH_OMAP_H4_H */
|
||||
|
||||
|
@ -1,19 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2004 2N Telekomunikace, Ladislav Michl <michl@2n.cz>
|
||||
*
|
||||
* Hardware definitions for OMAP5910 based NetStar board.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_NETSTAR_H
|
||||
#define __ASM_ARCH_NETSTAR_H
|
||||
|
||||
#include <asm/arch/tc.h>
|
||||
|
||||
#define OMAP_NAND_FLASH_START1 OMAP_CS1_PHYS + (1 << 23)
|
||||
#define OMAP_NAND_FLASH_START2 OMAP_CS1_PHYS + (2 << 23)
|
||||
|
||||
#endif /* __ASM_ARCH_NETSTAR_H */
|
54
include/asm-arm/arch-omap/board-nokia.h
Normal file
54
include/asm-arm/arch-omap/board-nokia.h
Normal file
@ -0,0 +1,54 @@
|
||||
/*
|
||||
* linux/include/asm-arm/arch-omap/board-nokia.h
|
||||
*
|
||||
* Information structures for Nokia-specific board config data
|
||||
*
|
||||
* Copyright (C) 2005 Nokia Corporation
|
||||
*/
|
||||
|
||||
#ifndef _OMAP_BOARD_NOKIA_H
|
||||
#define _OMAP_BOARD_NOKIA_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define OMAP_TAG_NOKIA_BT 0x4e01
|
||||
#define OMAP_TAG_WLAN_CX3110X 0x4e02
|
||||
#define OMAP_TAG_CBUS 0x4e03
|
||||
#define OMAP_TAG_EM_ASIC_BB5 0x4e04
|
||||
|
||||
|
||||
#define BT_CHIP_CSR 1
|
||||
#define BT_CHIP_TI 2
|
||||
|
||||
#define BT_SYSCLK_12 1
|
||||
#define BT_SYSCLK_38_4 2
|
||||
|
||||
struct omap_bluetooth_config {
|
||||
u8 chip_type;
|
||||
u8 bt_wakeup_gpio;
|
||||
u8 host_wakeup_gpio;
|
||||
u8 reset_gpio;
|
||||
u8 bt_uart;
|
||||
u8 bd_addr[6];
|
||||
u8 bt_sysclk;
|
||||
};
|
||||
|
||||
struct omap_wlan_cx3110x_config {
|
||||
u8 chip_type;
|
||||
s16 power_gpio;
|
||||
s16 irq_gpio;
|
||||
s16 spi_cs_gpio;
|
||||
};
|
||||
|
||||
struct omap_cbus_config {
|
||||
s16 clk_gpio;
|
||||
s16 dat_gpio;
|
||||
s16 sel_gpio;
|
||||
};
|
||||
|
||||
struct omap_em_asic_bb5_config {
|
||||
s16 retu_irq_gpio;
|
||||
s16 tahvo_irq_gpio;
|
||||
};
|
||||
|
||||
#endif
|
@ -42,8 +42,4 @@
|
||||
|
||||
#define NR_IRQS (MAXIRQNUM + 1)
|
||||
|
||||
/* Samsung NAND flash at CS2B or CS3(NAND Boot) */
|
||||
#define OMAP_NAND_FLASH_START1 0x0A000000 /* CS2B */
|
||||
#define OMAP_NAND_FLASH_START2 0x0C000000 /* CS3 */
|
||||
|
||||
#endif
|
||||
|
@ -21,9 +21,12 @@
|
||||
#define OMAP_TAG_LCD 0x4f05
|
||||
#define OMAP_TAG_GPIO_SWITCH 0x4f06
|
||||
#define OMAP_TAG_UART 0x4f07
|
||||
#define OMAP_TAG_FBMEM 0x4f08
|
||||
#define OMAP_TAG_STI_CONSOLE 0x4f09
|
||||
|
||||
#define OMAP_TAG_BOOT_REASON 0x4f80
|
||||
#define OMAP_TAG_FLASH_PART 0x4f81
|
||||
#define OMAP_TAG_VERSION_STR 0x4f82
|
||||
|
||||
struct omap_clock_config {
|
||||
/* 0 for 12 MHz, 1 for 13 MHz and 2 for 19.2 MHz */
|
||||
@ -54,6 +57,11 @@ struct omap_serial_console_config {
|
||||
u32 console_speed;
|
||||
};
|
||||
|
||||
struct omap_sti_console_config {
|
||||
unsigned enable:1;
|
||||
u8 channel;
|
||||
};
|
||||
|
||||
struct omap_usb_config {
|
||||
/* Configure drivers according to the connectors on your board:
|
||||
* - "A" connector (rectagular)
|
||||
@ -87,6 +95,13 @@ struct omap_lcd_config {
|
||||
char ctrl_name[16];
|
||||
};
|
||||
|
||||
struct omap_fbmem_config {
|
||||
u32 fb_sram_start;
|
||||
u32 fb_sram_size;
|
||||
u32 fb_sdram_start;
|
||||
u32 fb_sdram_size;
|
||||
};
|
||||
|
||||
/* Cover:
|
||||
* high -> closed
|
||||
* low -> open
|
||||
@ -106,6 +121,12 @@ struct omap_gpio_switch_config {
|
||||
int key_code:24; /* Linux key code */
|
||||
};
|
||||
|
||||
struct omap_uart_config {
|
||||
/* Bit field of UARTs present; bit 0 --> UART1 */
|
||||
unsigned int enabled_uarts;
|
||||
};
|
||||
|
||||
|
||||
struct omap_flash_part_config {
|
||||
char part_table[0];
|
||||
};
|
||||
@ -114,11 +135,14 @@ struct omap_boot_reason_config {
|
||||
char reason_str[12];
|
||||
};
|
||||
|
||||
struct omap_uart_config {
|
||||
/* Bit field of UARTs present; bit 0 --> UART1 */
|
||||
unsigned int enabled_uarts;
|
||||
struct omap_version_config {
|
||||
char component[12];
|
||||
char version[12];
|
||||
};
|
||||
|
||||
|
||||
#include <asm-arm/arch-omap/board-nokia.h>
|
||||
|
||||
struct omap_board_config_entry {
|
||||
u16 tag;
|
||||
u16 len;
|
||||
|
@ -306,6 +306,10 @@
|
||||
#include "board-h4.h"
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MACH_OMAP_APOLLON
|
||||
#include "board-apollon.h"
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MACH_OMAP_OSK
|
||||
#include "board-osk.h"
|
||||
#endif
|
||||
@ -314,10 +318,6 @@
|
||||
#include "board-voiceblue.h"
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MACH_NETSTAR
|
||||
#include "board-netstar.h"
|
||||
#endif
|
||||
|
||||
#endif /* !__ASSEMBLER__ */
|
||||
|
||||
#endif /* __ASM_ARCH_OMAP_HARDWARE_H */
|
||||
|
Loading…
Reference in New Issue
Block a user