]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - arch/arm/mach-omap2/board-omap3beagle.c
Merge branch 'devel-map-io' into omap-for-linus
[mv-sheeva.git] / arch / arm / mach-omap2 / board-omap3beagle.c
index 962d377970e9bb198d410abf1ac1b418d0658341..87969c7df652885ff6210519f3043cb7bb4f055e 100644 (file)
@@ -39,6 +39,7 @@
 
 #include <plat/board.h>
 #include <plat/common.h>
+#include <plat/display.h>
 #include <plat/gpmc.h>
 #include <plat/nand.h>
 #include <plat/usb.h>
@@ -47,9 +48,6 @@
 #include "mux.h"
 #include "hsmmc.h"
 
-#define GPMC_CS0_BASE  0x60
-#define GPMC_CS_SIZE   0x30
-
 #define NAND_BLOCK_SIZE                SZ_128K
 
 static struct mtd_partition omap3beagle_nand_partitions[] = {
@@ -92,20 +90,77 @@ static struct omap_nand_platform_data omap3beagle_nand_data = {
        .dev_ready      = NULL,
 };
 
-static struct resource omap3beagle_nand_resource = {
-       .flags          = IORESOURCE_MEM,
+/* DSS */
+
+static int beagle_enable_dvi(struct omap_dss_device *dssdev)
+{
+       if (gpio_is_valid(dssdev->reset_gpio))
+               gpio_set_value(dssdev->reset_gpio, 1);
+
+       return 0;
+}
+
+static void beagle_disable_dvi(struct omap_dss_device *dssdev)
+{
+       if (gpio_is_valid(dssdev->reset_gpio))
+               gpio_set_value(dssdev->reset_gpio, 0);
+}
+
+static struct omap_dss_device beagle_dvi_device = {
+       .type = OMAP_DISPLAY_TYPE_DPI,
+       .name = "dvi",
+       .driver_name = "generic_panel",
+       .phy.dpi.data_lines = 24,
+       .reset_gpio = 170,
+       .platform_enable = beagle_enable_dvi,
+       .platform_disable = beagle_disable_dvi,
 };
 
-static struct platform_device omap3beagle_nand_device = {
-       .name           = "omap2-nand",
-       .id             = -1,
-       .dev            = {
-               .platform_data  = &omap3beagle_nand_data,
+static struct omap_dss_device beagle_tv_device = {
+       .name = "tv",
+       .driver_name = "venc",
+       .type = OMAP_DISPLAY_TYPE_VENC,
+       .phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO,
+};
+
+static struct omap_dss_device *beagle_dss_devices[] = {
+       &beagle_dvi_device,
+       &beagle_tv_device,
+};
+
+static struct omap_dss_board_info beagle_dss_data = {
+       .num_devices = ARRAY_SIZE(beagle_dss_devices),
+       .devices = beagle_dss_devices,
+       .default_device = &beagle_dvi_device,
+};
+
+static struct platform_device beagle_dss_device = {
+       .name          = "omapdss",
+       .id            = -1,
+       .dev            = {
+               .platform_data = &beagle_dss_data,
        },
-       .num_resources  = 1,
-       .resource       = &omap3beagle_nand_resource,
 };
 
+static struct regulator_consumer_supply beagle_vdac_supply =
+       REGULATOR_SUPPLY("vdda_dac", "omapdss");
+
+static struct regulator_consumer_supply beagle_vdvi_supply =
+       REGULATOR_SUPPLY("vdds_dsi", "omapdss");
+
+static void __init beagle_display_init(void)
+{
+       int r;
+
+       r = gpio_request(beagle_dvi_device.reset_gpio, "DVI reset");
+       if (r < 0) {
+               printk(KERN_ERR "Unable to get DVI reset GPIO\n");
+               return;
+       }
+
+       gpio_direction_output(beagle_dvi_device.reset_gpio, 0);
+}
+
 #include "sdram-micron-mt46h32m32lf-6.h"
 
 static struct omap2_hsmmc_info mmc[] = {
@@ -117,15 +172,6 @@ static struct omap2_hsmmc_info mmc[] = {
        {}      /* Terminator */
 };
 
-static struct platform_device omap3_beagle_lcd_device = {
-       .name           = "omap3beagle_lcd",
-       .id             = -1,
-};
-
-static struct omap_lcd_config omap3_beagle_lcd_config __initdata = {
-       .ctrl_name      = "internal",
-};
-
 static struct regulator_consumer_supply beagle_vmmc1_supply = {
        .supply                 = "vmmc",
 };
@@ -181,16 +227,6 @@ static struct twl4030_gpio_platform_data beagle_gpio_data = {
        .setup          = beagle_twl_gpio_setup,
 };
 
-static struct regulator_consumer_supply beagle_vdac_supply = {
-       .supply         = "vdac",
-       .dev            = &omap3_beagle_lcd_device.dev,
-};
-
-static struct regulator_consumer_supply beagle_vdvi_supply = {
-       .supply         = "vdvi",
-       .dev            = &omap3_beagle_lcd_device.dev,
-};
-
 /* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
 static struct regulator_init_data beagle_vmmc1 = {
        .constraints = {
@@ -349,14 +385,8 @@ static struct platform_device keys_gpio = {
        },
 };
 
-static struct omap_board_config_kernel omap3_beagle_config[] __initdata = {
-       { OMAP_TAG_LCD,         &omap3_beagle_lcd_config },
-};
-
 static void __init omap3_beagle_init_irq(void)
 {
-       omap_board_config = omap3_beagle_config;
-       omap_board_config_size = ARRAY_SIZE(omap3_beagle_config);
        omap2_init_common_hw(mt46h32m32lf6_sdrc_params,
                             mt46h32m32lf6_sdrc_params);
        omap_init_irq();
@@ -367,9 +397,9 @@ static void __init omap3_beagle_init_irq(void)
 }
 
 static struct platform_device *omap3_beagle_devices[] __initdata = {
-       &omap3_beagle_lcd_device,
        &leds_gpio,
        &keys_gpio,
+       &beagle_dss_device,
 };
 
 static void __init omap3beagle_flash_init(void)
@@ -377,8 +407,6 @@ static void __init omap3beagle_flash_init(void)
        u8 cs = 0;
        u8 nandcs = GPMC_CS_NUM + 1;
 
-       u32 gpmc_base_add = OMAP34XX_GPMC_VIRT;
-
        /* find out the chip-select on which NAND exists */
        while (cs < GPMC_CS_NUM) {
                u32 ret = 0;
@@ -400,12 +428,9 @@ static void __init omap3beagle_flash_init(void)
 
        if (nandcs < GPMC_CS_NUM) {
                omap3beagle_nand_data.cs = nandcs;
-               omap3beagle_nand_data.gpmc_cs_baseaddr = (void *)
-                       (gpmc_base_add + GPMC_CS0_BASE + nandcs * GPMC_CS_SIZE);
-               omap3beagle_nand_data.gpmc_baseaddr = (void *) (gpmc_base_add);
 
                printk(KERN_INFO "Registering NAND on CS%d\n", nandcs);
-               if (platform_device_register(&omap3beagle_nand_device) < 0)
+               if (gpmc_nand_init(&omap3beagle_nand_data) < 0)
                        printk(KERN_ERR "Unable to register NAND device\n");
        }
 }
@@ -456,12 +481,8 @@ static void __init omap3_beagle_init(void)
        /* Ensure SDRC pins are mux'd for self-refresh */
        omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT);
        omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT);
-}
 
-static void __init omap3_beagle_map_io(void)
-{
-       omap2_set_globals_343x();
-       omap34xx_map_common_io();
+       beagle_display_init();
 }
 
 MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
@@ -469,7 +490,8 @@ MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
        .phys_io        = 0x48000000,
        .io_pg_offst    = ((0xfa000000) >> 18) & 0xfffc,
        .boot_params    = 0x80000100,
-       .map_io         = omap3_beagle_map_io,
+       .map_io         = omap3_map_io,
+       .reserve        = omap_reserve,
        .init_irq       = omap3_beagle_init_irq,
        .init_machine   = omap3_beagle_init,
        .timer          = &omap_timer,