]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/arm/mach-omap2/board-2430sdp.c
Merge current mainline tree into linux-omap tree
[linux-2.6-omap-h63xx.git] / arch / arm / mach-omap2 / board-2430sdp.c
index 047a4e6a6568d3b7996e162fecff68a837f4e8a5..76bbe06a26fcbf7a0cbb85e6034a25abf7ee8a52 100644 (file)
@@ -24,6 +24,7 @@
 #include <linux/clk.h>
 #include <linux/spi/spi.h>
 #include <linux/spi/ads7846.h>
+#include <linux/i2c/twl4030-rtc.h>
 
 #include <asm/hardware.h>
 #include <asm/mach-types.h>
@@ -38,7 +39,6 @@
 #include <asm/arch/keypad.h>
 #include <asm/arch/gpmc.h>
 #include <asm/arch/mcspi.h>
-#include <asm/arch/twl4030-rtc.h>
 
 #include <asm/io.h>
 
@@ -52,6 +52,7 @@
 #define TS_GPIO                 24
 
 #define TWL4030_MSECURE_GPIO   118
+#define SECONDARY_LCD_GPIO     147
 
 static struct mtd_partition sdp2430_partitions[] = {
        /* bootloader (U-Boot, etc) in first sector */
@@ -116,7 +117,7 @@ static struct resource sdp2430_smc91x_resources[] = {
        [1] = {
                .start  = OMAP_GPIO_IRQ(OMAP24XX_ETHR_GPIO_IRQ),
                .end    = OMAP_GPIO_IRQ(OMAP24XX_ETHR_GPIO_IRQ),
-               .flags  = IORESOURCE_IRQ,
+               .flags  = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL,
        },
 };
 
@@ -284,15 +285,18 @@ static inline void __init sdp2430_init_smc91x(void)
        int eth_cs;
        unsigned long cs_mem_base;
        unsigned int rate;
-       struct clk *l3ck;
+       struct clk *gpmc_fck;
 
        eth_cs = SDP2430_SMC91X_CS;
 
-       l3ck = clk_get(NULL, "core_l3_ck");
-       if (IS_ERR(l3ck))
-               rate = 100000000;
-       else
-               rate = clk_get_rate(l3ck);
+       gpmc_fck = clk_get(NULL, "gpmc_fck");   /* Always on ENABLE_ON_INIT */
+       if (IS_ERR(gpmc_fck)) {
+               WARN_ON(1);
+               return;
+       }
+
+       clk_enable(gpmc_fck);
+       rate = clk_get_rate(gpmc_fck);
 
        /* Make sure CS1 timings are correct, for 2430 always muxed */
        gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG1, 0x00011200);
@@ -319,7 +323,7 @@ static inline void __init sdp2430_init_smc91x(void)
 
        if (gpmc_cs_request(eth_cs, SZ_16M, &cs_mem_base) < 0) {
                printk(KERN_ERR "Failed to request GPMC mem for smc91x\n");
-               return;
+               goto out;
        }
 
        sdp2430_smc91x_resources[0].start = cs_mem_base + 0x300;
@@ -330,10 +334,13 @@ static inline void __init sdp2430_init_smc91x(void)
                printk(KERN_ERR "Failed to request GPIO%d for smc91x IRQ\n",
                        OMAP24XX_ETHR_GPIO_IRQ);
                gpmc_cs_free(eth_cs);
-               return;
+               goto out;
        }
        omap_set_gpio_direction(OMAP24XX_ETHR_GPIO_IRQ, 1);
 
+out:
+       clk_disable(gpmc_fck);
+       clk_put(gpmc_fck);
 }
 
 static void __init omap_2430sdp_init_irq(void)
@@ -348,86 +355,33 @@ static struct omap_uart_config sdp2430_uart_config __initdata = {
        .enabled_uarts = ((1 << 0) | (1 << 1) | (1 << 2)),
 };
 
-static struct omap_board_config_kernel sdp2430_config[] __initdata = {
-       {OMAP_TAG_UART, &sdp2430_uart_config},
-       {OMAP_TAG_LCD, &sdp2430_lcd_config},
-};
-
-#if    defined(CONFIG_I2C_OMAP) || defined(CONFIG_I2C_OMAP_MODULE)
-
-#define OMAP2_I2C_BASE1                0x48070000
-#define OMAP2_I2C_BASE2                0x48072000
-#define OMAP2_I2C_INT1         56
-#define OMAP2_I2C_INT2         57
-
-static u32 omap2_i2c1_clkrate  = 400;
-static u32 omap2_i2c2_clkrate  = 2600;
-
-static struct resource i2c_resources1[] = {
-       {
-               .start  = OMAP2_I2C_BASE1,
-               .end    = OMAP2_I2C_BASE1 + 0x3f,
-               .flags  = IORESOURCE_MEM,
-       },
-       {
-               .start  = OMAP2_I2C_INT1,
-               .flags  = IORESOURCE_IRQ,
-       },
-};
-
-static struct resource i2c_resources2[] = {
-       {
-               .start  = OMAP2_I2C_BASE2,
-               .end    = OMAP2_I2C_BASE2 + 0x3f,
-               .flags  = IORESOURCE_MEM,
-       },
-       {
-               .start  = OMAP2_I2C_INT2,
-               .flags  = IORESOURCE_IRQ,
-       },
+static
+struct omap_serial_console_config sdp2430_serial_console_config __initdata = {
+       .console_uart = 1,
+       .console_speed = 115200,
 };
 
-static struct platform_device omap_i2c_device1 = {
-       .name           = "i2c_omap",
-       .id             = 1,
-       .num_resources  = ARRAY_SIZE(i2c_resources1),
-       .resource       = i2c_resources1,
-       .dev            = {
-               .platform_data  = &omap2_i2c1_clkrate,
+static struct omap_mmc_config sdp2430_mmc_config __initdata = {
+       .mmc [0] = {
+               .enabled        = 1,
+               .wire4          = 1,
        },
 };
 
-static struct platform_device omap_i2c_device2 = {
-       .name           = "i2c_omap",
-       .id             = 2,
-       .num_resources  = ARRAY_SIZE(i2c_resources2),
-       .resource       = i2c_resources2,
-       .dev            = {
-               .platform_data  = &omap2_i2c2_clkrate,
-       },
+static struct omap_board_config_kernel sdp2430_config[] __initdata = {
+       {OMAP_TAG_UART, &sdp2430_uart_config},
+       {OMAP_TAG_LCD, &sdp2430_lcd_config},
+       {OMAP_TAG_SERIAL_CONSOLE, &sdp2430_serial_console_config},
+       {OMAP_TAG_MMC,  &sdp2430_mmc_config},
 };
 
-static void omap_init_i2c(void)
-{
-       (void) platform_device_register(&omap_i2c_device2);
-       (void) platform_device_register(&omap_i2c_device1);
-}
-
-#else
-
-static void omap_init_i2c(void) {}
-
-#endif
-
 static int __init omap2430_i2c_init(void)
 {
-       omap_init_i2c();
+       omap_register_i2c_bus(1, 400, NULL, 0);
+       omap_register_i2c_bus(2, 2600, NULL, 0);
        return 0;
 }
 
-extern void __init sdp2430_flash_init(void);
-extern void __init sdp2430_usb_init(void);
-
 static void __init omap_2430sdp_init(void)
 {
        platform_add_devices(sdp2430_devices, ARRAY_SIZE(sdp2430_devices));
@@ -441,10 +395,16 @@ static void __init omap_2430sdp_init(void)
        spi_register_board_info(sdp2430_spi_board_info,
                                ARRAY_SIZE(sdp2430_spi_board_info));
        ads7846_dev_init();
+       sdp_mmc_init();
+
+       /* turn off secondary LCD backlight */
+       omap_set_gpio_direction(SECONDARY_LCD_GPIO, 0);
+       omap_set_gpio_dataout(SECONDARY_LCD_GPIO, 0);
 }
 
 static void __init omap_2430sdp_map_io(void)
 {
+       omap2_set_globals_243x();
        omap2_map_common_io();
 }