[ARM] 3433/1: ARM: OMAP: 8/8 Update board files
authorTony Lindgren <tony@atomide.com>
Sun, 2 Apr 2006 16:46:30 +0000 (17:46 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Sun, 2 Apr 2006 16:46:30 +0000 (17:46 +0100)
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>
28 files changed:
arch/arm/mach-omap1/Kconfig
arch/arm/mach-omap1/board-ams-delta.c [new file with mode: 0644]
arch/arm/mach-omap1/board-generic.c
arch/arm/mach-omap1/board-h2.c
arch/arm/mach-omap1/board-h3.c
arch/arm/mach-omap1/board-innovator.c
arch/arm/mach-omap1/board-netstar.c [deleted file]
arch/arm/mach-omap1/board-nokia770.c [new file with mode: 0644]
arch/arm/mach-omap1/board-osk.c
arch/arm/mach-omap1/board-palmte.c
arch/arm/mach-omap1/board-perseus2.c
arch/arm/mach-omap1/board-voiceblue.c
arch/arm/mach-omap1/devices.c
arch/arm/mach-omap2/Kconfig
arch/arm/mach-omap2/board-apollon.c [new file with mode: 0644]
arch/arm/mach-omap2/board-h4.c
arch/arm/mach-omap2/devices.c
arch/arm/plat-omap/devices.c
include/asm-arm/arch-omap/board-ams-delta.h [new file with mode: 0644]
include/asm-arm/arch-omap/board-apollon.h [new file with mode: 0644]
include/asm-arm/arch-omap/board-h2.h
include/asm-arm/arch-omap/board-h3.h
include/asm-arm/arch-omap/board-h4.h
include/asm-arm/arch-omap/board-netstar.h [deleted file]
include/asm-arm/arch-omap/board-nokia.h [new file with mode: 0644]
include/asm-arm/arch-omap/board-perseus2.h
include/asm-arm/arch-omap/board.h
include/asm-arm/arch-omap/hardware.h

index 86a0f0d..f8d716c 100644 (file)
@@ -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)
diff --git a/arch/arm/mach-omap1/board-ams-delta.c b/arch/arm/mach-omap1/board-ams-delta.c
new file mode 100644 (file)
index 0000000..6178f04
--- /dev/null
@@ -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);
index a177e78..33d01ad 100644 (file)
@@ -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
index 89f0cc7..cd3a06d 100644 (file)
@@ -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>
 #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);
index d9f3862..4b8d0ec 100644 (file)
 #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>
 #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       = &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       = &h3_flash_resource,
+       .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();
index a04e433..e90c137 100644 (file)
@@ -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>
 #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
diff --git a/arch/arm/mach-omap1/board-netstar.c b/arch/arm/mach-omap1/board-netstar.c
deleted file mode 100644 (file)
index 7520e60..0000000
+++ /dev/null
@@ -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
diff --git a/arch/arm/mach-omap1/board-nokia770.c b/arch/arm/mach-omap1/board-nokia770.c
new file mode 100644 (file)
index 0000000..02b980d
--- /dev/null
@@ -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
index 543fa13..1160093 100644 (file)
@@ -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>
 #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));
index e488f72..4bc8a62 100644 (file)
@@ -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)
index 3913a3c..64b45d8 100644 (file)
@@ -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>
 #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       = &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       = &p2_flash_resource,
+       .resource       = &nand_resource,
 };
 
 static struct platform_device smc91x_device = {
@@ -105,17 +162,55 @@ static struct platform_device smc91x_device = {
        .resource       = smc91x_resources,
 };
 
+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 = {
-       &p2_flash_device,
+       &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);
index 52e4a9d..447a586 100644 (file)
@@ -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;
 }
index ecbc475..876c38d 100644 (file)
@@ -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;
 }
index 5788809..537dd2e 100644 (file)
@@ -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
diff --git a/arch/arm/mach-omap2/board-apollon.c b/arch/arm/mach-omap2/board-apollon.c
new file mode 100644 (file)
index 0000000..6c6ba17
--- /dev/null
@@ -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
index a300d63..4933fce 100644 (file)
@@ -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>
 #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);
index 7181edb..def9e53 100644 (file)
@@ -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;
 }
index 9dcce90..079b67d 100644 (file)
@@ -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)
@@ -98,6 +99,62 @@ 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();
 
diff --git a/include/asm-arm/arch-omap/board-ams-delta.h b/include/asm-arm/arch-omap/board-ams-delta.h
new file mode 100644 (file)
index 0000000..0070f6d
--- /dev/null
@@ -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 */
diff --git a/include/asm-arm/arch-omap/board-apollon.h b/include/asm-arm/arch-omap/board-apollon.h
new file mode 100644 (file)
index 0000000..de0c5b7
--- /dev/null
@@ -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 */
+
index 39ca5a3..b2888ef 100644 (file)
@@ -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 */
 
index 1b12c1d..761ea0a 100644 (file)
 /* 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
index 33ea29a..7ef664b 100644 (file)
 /* 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 */
 
diff --git a/include/asm-arm/arch-omap/board-netstar.h b/include/asm-arm/arch-omap/board-netstar.h
deleted file mode 100644 (file)
index 77cc0fb..0000000
+++ /dev/null
@@ -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 */
diff --git a/include/asm-arm/arch-omap/board-nokia.h b/include/asm-arm/arch-omap/board-nokia.h
new file mode 100644 (file)
index 0000000..72deea2
--- /dev/null
@@ -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
index 691e52a..eb74420 100644 (file)
@@ -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
index a0040cd..6d6240a 100644 (file)
 #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;
index 5406b87..7909b72 100644 (file)
 #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
 #include "board-voiceblue.h"
 #endif
 
-#ifdef CONFIG_MACH_NETSTAR
-#include "board-netstar.h"
-#endif
-
 #endif /* !__ASSEMBLER__ */
 
 #endif /* __ASM_ARCH_OMAP_HARDWARE_H */