Re: [U-Boot] [PATCH v4 2/4] mmc: Implement card detection.

2012-01-03 Thread Jason Liu
2012/1/2 Thierry Reding thierry.red...@avionic-design.de:
 Check for card detect each time an MMC/SD device is initialized. If card
 detection is not implemented, this code behaves as before and continues
 assuming a card is present. If no card is detected, has_init is reset
 for the MMC/SD device (to force initialization next time) and an error
 is returned.

 Signed-off-by: Thierry Reding thierry.red...@avionic-design.de
 ---
  drivers/mmc/arm_pl180_mmci.c |    1 +
  drivers/mmc/bfin_sdh.c       |    1 +
  drivers/mmc/davinci_mmc.c    |    1 +
  drivers/mmc/ftsdc010_esdhc.c |    1 +
  drivers/mmc/gen_atmel_mci.c  |    1 +
  drivers/mmc/mmc.c            |   18 ++
  drivers/mmc/mmc_spi.c        |    1 +
  drivers/mmc/mxcmmc.c         |    1 +
  drivers/mmc/mxsmmc.c         |    1 +
  drivers/mmc/omap_hsmmc.c     |    1 +
  drivers/mmc/pxa_mmc_gen.c    |    1 +
  drivers/mmc/s5p_mmc.c        |    1 +
  drivers/mmc/sdhci.c          |    1 +
  drivers/mmc/sh_mmcif.c       |    1 +
  include/mmc.h                |    2 ++
  15 files changed, 33 insertions(+), 0 deletions(-)

Tested ok on i.mx51evk board,

Tested-by: Jason Liu jason@linaro.org


[...]
 --
 1.7.8.1

 ___
 U-Boot mailing list
 U-Boot@lists.denx.de
 http://lists.denx.de/mailman/listinfo/u-boot
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH v4 2/4] mmc: Implement card detection.

2012-01-02 Thread Thierry Reding
Check for card detect each time an MMC/SD device is initialized. If card
detection is not implemented, this code behaves as before and continues
assuming a card is present. If no card is detected, has_init is reset
for the MMC/SD device (to force initialization next time) and an error
is returned.

Signed-off-by: Thierry Reding thierry.red...@avionic-design.de
---
 drivers/mmc/arm_pl180_mmci.c |1 +
 drivers/mmc/bfin_sdh.c   |1 +
 drivers/mmc/davinci_mmc.c|1 +
 drivers/mmc/ftsdc010_esdhc.c |1 +
 drivers/mmc/gen_atmel_mci.c  |1 +
 drivers/mmc/mmc.c|   18 ++
 drivers/mmc/mmc_spi.c|1 +
 drivers/mmc/mxcmmc.c |1 +
 drivers/mmc/mxsmmc.c |1 +
 drivers/mmc/omap_hsmmc.c |1 +
 drivers/mmc/pxa_mmc_gen.c|1 +
 drivers/mmc/s5p_mmc.c|1 +
 drivers/mmc/sdhci.c  |1 +
 drivers/mmc/sh_mmcif.c   |1 +
 include/mmc.h|2 ++
 15 files changed, 33 insertions(+), 0 deletions(-)

diff --git a/drivers/mmc/arm_pl180_mmci.c b/drivers/mmc/arm_pl180_mmci.c
index e6467a2..09d443e 100644
--- a/drivers/mmc/arm_pl180_mmci.c
+++ b/drivers/mmc/arm_pl180_mmci.c
@@ -385,6 +385,7 @@ static int arm_pl180_mmci_host_init(struct mmc *dev)
dev-send_cmd = host_request;
dev-set_ios = host_set_ios;
dev-init = mmc_host_reset;
+   dev-getcd = NULL;
dev-host_caps = 0;
dev-voltages = VOLTAGE_WINDOW_MMC;
dev-f_min = dev-clock;
diff --git a/drivers/mmc/bfin_sdh.c b/drivers/mmc/bfin_sdh.c
index bc9057f..08fc5c1 100644
--- a/drivers/mmc/bfin_sdh.c
+++ b/drivers/mmc/bfin_sdh.c
@@ -250,6 +250,7 @@ int bfin_mmc_init(bd_t *bis)
mmc-send_cmd = bfin_sdh_request;
mmc-set_ios = bfin_sdh_set_ios;
mmc-init = bfin_sdh_init;
+   mmc-getcd = NULL;
mmc-host_caps = MMC_MODE_4BIT;
 
mmc-voltages = MMC_VDD_32_33 | MMC_VDD_33_34;
diff --git a/drivers/mmc/davinci_mmc.c b/drivers/mmc/davinci_mmc.c
index ce96736..ee8f261 100644
--- a/drivers/mmc/davinci_mmc.c
+++ b/drivers/mmc/davinci_mmc.c
@@ -387,6 +387,7 @@ int davinci_mmc_init(bd_t *bis, struct davinci_mmc *host)
mmc-send_cmd = dmmc_send_cmd;
mmc-set_ios = dmmc_set_ios;
mmc-init = dmmc_init;
+   mmc-getcd = NULL;
 
mmc-f_min = 20;
mmc-f_max = 2500;
diff --git a/drivers/mmc/ftsdc010_esdhc.c b/drivers/mmc/ftsdc010_esdhc.c
index 33cb5d6..f1702fe 100644
--- a/drivers/mmc/ftsdc010_esdhc.c
+++ b/drivers/mmc/ftsdc010_esdhc.c
@@ -665,6 +665,7 @@ int ftsdc010_mmc_init(int dev_index)
mmc-send_cmd = ftsdc010_request;
mmc-set_ios = ftsdc010_set_ios;
mmc-init = ftsdc010_core_init;
+   mmc-getcd = NULL;
 
mmc-voltages = MMC_VDD_32_33 | MMC_VDD_33_34;
 
diff --git a/drivers/mmc/gen_atmel_mci.c b/drivers/mmc/gen_atmel_mci.c
index f346b24..4968c5e 100644
--- a/drivers/mmc/gen_atmel_mci.c
+++ b/drivers/mmc/gen_atmel_mci.c
@@ -337,6 +337,7 @@ int atmel_mci_init(void *regs)
mmc-send_cmd = mci_send_cmd;
mmc-set_ios = mci_set_ios;
mmc-init = mci_init;
+   mmc-getcd = NULL;
 
/* need to be able to pass these in on a board by board basis */
mmc-voltages = MMC_VDD_32_33 | MMC_VDD_33_34;
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index 11c6aa6..6db37b1 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -674,6 +674,18 @@ int mmc_switch_part(int dev_num, unsigned int part_num)
  | (part_num  PART_ACCESS_MASK));
 }
 
+int mmc_getcd(struct mmc *mmc)
+{
+   int cd;
+
+   cd = board_mmc_getcd(mmc);
+
+   if ((cd  0)  mmc-getcd)
+   cd = mmc-getcd(mmc);
+
+   return cd;
+}
+
 int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp)
 {
struct mmc_cmd cmd;
@@ -1202,6 +1214,12 @@ int mmc_init(struct mmc *mmc)
 {
int err;
 
+   if (mmc_getcd(mmc) == 0) {
+   mmc-has_init = 0;
+   printf(MMC: no card present\n);
+   return NO_CARD_ERR;
+   }
+
if (mmc-has_init)
return 0;
 
diff --git a/drivers/mmc/mmc_spi.c b/drivers/mmc/mmc_spi.c
index 49fb9e0..de43a85 100644
--- a/drivers/mmc/mmc_spi.c
+++ b/drivers/mmc/mmc_spi.c
@@ -272,6 +272,7 @@ struct mmc *mmc_spi_init(uint bus, uint cs, uint speed, 
uint mode)
mmc-send_cmd = mmc_spi_request;
mmc-set_ios = mmc_spi_set_ios;
mmc-init = mmc_spi_init_p;
+   mmc-getcd = NULL;
mmc-host_caps = MMC_MODE_SPI;
 
mmc-voltages = MMC_SPI_VOLTAGE;
diff --git a/drivers/mmc/mxcmmc.c b/drivers/mmc/mxcmmc.c
index ab1fc82..8afb221 100644
--- a/drivers/mmc/mxcmmc.c
+++ b/drivers/mmc/mxcmmc.c
@@ -500,6 +500,7 @@ static int mxcmci_initialize(bd_t *bis)
mmc-send_cmd = mxcmci_request;
mmc-set_ios = mxcmci_set_ios;
mmc-init = mxcmci_init;
+   mmc-getcd = NULL;
mmc-host_caps = MMC_MODE_4BIT;
 
host-base = (struct