davinci: DA830/OMAP-L137 EVM: do not configure NAND on UI card when MMC/SD is selected
authorSekhar Nori <nsekhar@ti.com>
Wed, 21 Oct 2009 15:48:21 +0000 (21:18 +0530)
committerKevin Hilman <khilman@deeprootsystems.com>
Wed, 25 Nov 2009 18:21:35 +0000 (10:21 -0800)
On the DA830, AEMIF and MMC/SD pins are shared. On the EVM, when
the mux_mode signal is low MMC/SD works and when mux_mode signal
is high, NAND works.

When MMC/SD driver is configured in the kernel, do not let NAND
get registered and drive mux_mode high. Instead, print a warning
for user to understand why the platform device for NAND did not
get registered.

Signed-off-by: Sekhar Nori <nsekhar@ti.com>
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
arch/arm/mach-davinci/board-da830-evm.c

index e7e97c9..537a048 100644 (file)
@@ -282,6 +282,12 @@ static const short da830_evm_emif25_pins[] = {
        -1
 };
 
+#if defined(CONFIG_MMC_DAVINCI) || defined(CONFIG_MMC_DAVINCI_MODULE)
+#define HAS_MMC        1
+#else
+#define HAS_MMC        0
+#endif
+
 #ifdef CONFIG_DA830_UI_NAND
 static struct mtd_partition da830_evm_nand_partitions[] = {
        /* bootloader (U-Boot, etc) in first sector */
@@ -377,6 +383,13 @@ static inline void da830_evm_init_nand(int mux_mode)
 {
        int ret;
 
+       if (HAS_MMC) {
+               pr_warning("WARNING: both MMC/SD and NAND are "
+                               "enabled, but they share AEMIF pins.\n"
+                               "\tDisable MMC/SD for NAND support.\n");
+               return;
+       }
+
        ret = da8xx_pinmux_setup(da830_evm_emif25_pins);
        if (ret)
                pr_warning("da830_evm_init: emif25 mux setup failed: %d\n",
@@ -425,6 +438,9 @@ static int da830_evm_ui_expander_setup(struct i2c_client *client, int gpio,
 {
        gpio_request(gpio + 6, "UI MUX_MODE");
 
+       /* Drive mux mode low to match the default without UI card */
+       gpio_direction_output(gpio + 6, 0);
+
        da830_evm_init_lcdc(gpio + 6);
 
        da830_evm_init_nand(gpio + 6);