From 3936e240c241d5a59551251fd9d324221f286c2d Mon Sep 17 00:00:00 2001 From: lintao Date: Thu, 4 Sep 2014 16:05:28 +0800 Subject: [PATCH] mmc: Support tSD or SD booting OS. In case of tSD board or SD booting project, BSP engineers could only add "supports-tSD" into emmc_of_node claim. Refer to arch/arm/boot/dts/rk3288-tb.dts --- arch/arm/boot/dts/rk3288-tb.dts | 3 ++- arch/arm/boot/dts/rk3288-tb_8846.dts | 1 + drivers/mmc/core/core.c | 8 ++++---- drivers/mmc/host/rk_sdmmc.c | 4 ++++ include/linux/mmc/host.h | 7 ++++--- 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/arch/arm/boot/dts/rk3288-tb.dts b/arch/arm/boot/dts/rk3288-tb.dts index 097ba0ea1d08..b36765b905e8 100755 --- a/arch/arm/boot/dts/rk3288-tb.dts +++ b/arch/arm/boot/dts/rk3288-tb.dts @@ -226,7 +226,8 @@ supports-highspeed; supports-emmc; bootpart-no-access; - + + //supports-tSD; //supports-DDR_MODE; //you should set the two value in your project. only close in RK3288-SDK board. //caps2-mmc-hs200; diff --git a/arch/arm/boot/dts/rk3288-tb_8846.dts b/arch/arm/boot/dts/rk3288-tb_8846.dts index e7f654c6e61f..874bc791a56f 100644 --- a/arch/arm/boot/dts/rk3288-tb_8846.dts +++ b/arch/arm/boot/dts/rk3288-tb_8846.dts @@ -272,6 +272,7 @@ supports-emmc; bootpart-no-access; + //supports-tSD; //supports-DDR_MODE; //you should set the two value in your project. only close in RK3288-SDK board. //caps2-mmc-hs200; diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index 6c56ec597bc4..efc26a00665c 100755 --- a/drivers/mmc/core/core.c +++ b/drivers/mmc/core/core.c @@ -2395,12 +2395,12 @@ static int mmc_rescan_try_freq(struct mmc_host *host, unsigned freq) if(host->restrict_caps & (RESTRICT_CARD_TYPE_SDIO |RESTRICT_CARD_TYPE_SD)) mmc_send_if_cond(host, host->ocr_avail); - /* Order's important: probe SDIO, then SD, then MMC */ - if ((host->restrict_caps &RESTRICT_CARD_TYPE_SDIO) && !mmc_attach_sdio(host)) + /* Order's important: probe SDIO, then SD, then MMC */ + if ((host->restrict_caps & RESTRICT_CARD_TYPE_SDIO) && !mmc_attach_sdio(host)) return 0; - if ((host->restrict_caps &RESTRICT_CARD_TYPE_SD) && !mmc_attach_sd(host)) + if ((host->restrict_caps & (RESTRICT_CARD_TYPE_SD | RESTRICT_CARD_TYPE_TSD)) && !mmc_attach_sd(host)) return 0; - if ((host->restrict_caps &(RESTRICT_CARD_TYPE_EMMC|RESTRICT_CARD_TYPE_SD)) && !mmc_attach_mmc(host)) + if ((host->restrict_caps & RESTRICT_CARD_TYPE_EMMC) && !mmc_attach_mmc(host)) return 0; #endif diff --git a/drivers/mmc/host/rk_sdmmc.c b/drivers/mmc/host/rk_sdmmc.c index 7e8d03653d22..473eb0ed181d 100755 --- a/drivers/mmc/host/rk_sdmmc.c +++ b/drivers/mmc/host/rk_sdmmc.c @@ -3256,6 +3256,10 @@ static int dw_mci_init_slot(struct dw_mci *host, unsigned int id) mmc->restrict_caps |= RESTRICT_CARD_TYPE_SDIO; if (of_find_property(host->dev->of_node, "supports-emmc", NULL)) mmc->restrict_caps |= RESTRICT_CARD_TYPE_EMMC; + /* Fixup for tSD */ + if (of_find_property(host->dev->of_node, "supports-tSD", NULL)) + mmc->restrict_caps |= RESTRICT_CARD_TYPE_TSD; + /* We assume only low-level chip use gpio_cd */ if (cpu_is_rk312x() && diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h index 7f45c684ec0b..d0410856a8a0 100755 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h @@ -288,9 +288,10 @@ struct mmc_host { mmc_pm_flag_t pm_caps; /* supported pm features */ u32 restrict_caps; /*restrict the SDMMC controller to support card type;1--SD card; 2--sdio; 4--eMMC */ -#define RESTRICT_CARD_TYPE_SD (1 << 0) /*noted by XBW, Rockchip Co.Ld*/ -#define RESTRICT_CARD_TYPE_SDIO (1 << 1) -#define RESTRICT_CARD_TYPE_EMMC (1 << 2) +#define RESTRICT_CARD_TYPE_SD (1 << 0) /*support SD*/ +#define RESTRICT_CARD_TYPE_SDIO (1 << 1) /*support SDIO*/ +#define RESTRICT_CARD_TYPE_EMMC (1 << 2) /*support EMMC*/ +#define RESTRICT_CARD_TYPE_TSD (1 << 3) /*support tSD*/ unsigned int hold_reg_flag;//to fix the hold_reg value -- 2.34.1