esdhc: Workaround for card can't be detected on T4240QDS
authorHaijun.Zhang <Haijun.Zhang@freescale.com>
Fri, 10 Jan 2014 05:52:17 +0000 (13:52 +0800)
committerYork Sun <yorksun@freescale.com>
Wed, 22 Jan 2014 16:56:15 +0000 (08:56 -0800)
Card detection pin is ineffective on T4240QDS Rev1.0.
There are two cards can be connected to board.
1. eMMC card is built-in board, can not be removed. so
   For eMMC card it is always there.
2. Card detecting pin is functional for SDHC card in Rev2.0.

This workaround force sdhc driver scan and initialize the card
regardless of whether the card is inserted or not in case Rev1.0.

Signed-off-by: Haijun Zhang <Haijun.Zhang@freescale.com>
Acked-by: Pantelis Antoniou <panto@antoniou-consulting.com>
Reviewed-by: York Sun <yorksun@freescale.com>
drivers/mmc/fsl_esdhc.c
include/configs/T4240QDS.h

index e3cd0c777e3e393ffed90b84998b7696399c5d10..f79f167a7ddf9acc1126401467ddccb387c8356a 100644 (file)
@@ -500,6 +500,10 @@ static int esdhc_getcd(struct mmc *mmc)
        struct fsl_esdhc *regs = (struct fsl_esdhc *)cfg->esdhc_base;
        int timeout = 1000;
 
+#ifdef CONFIG_ESDHC_DETECT_QUIRK
+       if (CONFIG_ESDHC_DETECT_QUIRK)
+               return 1;
+#endif
        while (!(esdhc_read32(&regs->prsstat) & PRSSTAT_CINS) && --timeout)
                udelay(1000);
 
index 22019dcd2bb3d5fa603cdcb0619a43e9d1a72f92..5b1ed639778a0dad91e1ade5c4f1fbedca51c2d1 100644 (file)
@@ -165,6 +165,8 @@ unsigned long get_board_ddr_clk(void);
 #define QIXIS_RCFG_CTL_RECONFIG_IDLE   0x20
 #define QIXIS_RCFG_CTL_RECONFIG_START  0x21
 #define QIXIS_RCFG_CTL_WATCHDOG_ENBLE  0x08
+#define QIXIS_BRDCFG5                  0x55
+#define QIXIS_MUX_SDHC                 2
 #define QIXIS_BASE_PHYS                (0xf00000000ull | QIXIS_BASE)
 
 #define CONFIG_SYS_CSPR3_EXT   (0xf)
@@ -466,6 +468,9 @@ unsigned long get_board_ddr_clk(void);
 #define CONFIG_CMD_FAT
 #define CONFIG_DOS_PARTITION
 #define CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33
+#define CONFIG_ESDHC_DETECT_QUIRK \
+       (!(readb(QIXIS_BASE + QIXIS_BRDCFG5) & QIXIS_MUX_SDHC) || \
+       IS_SVR_REV(get_svr(), 1, 0))
 #endif
 
 #define CONFIG_BOOTDELAY       10      /* -1 disables auto-boot */