]> git.sur5r.net Git - u-boot/commitdiff
mmc: SEND_OP_COND considers card capabilities (voltage)
authorRaffaele Recalcati <raffaele.recalcati@bticino.it>
Fri, 11 Mar 2011 02:01:13 +0000 (02:01 +0000)
committerAndy Fleming <afleming@freescale.com>
Wed, 13 Apr 2011 12:09:04 +0000 (07:09 -0500)
The first SEND_OP_COND (CMD1) command added is used to ask card capabilities.
After it an AND operation is done between card capabilities and host
capabilities (at the moment only for the voltage field).
Finally the correct value is sent to the MMC, waiting that the card
exits from busy state.

Signed-off-by: Raffaele Recalcati <raffaele.recalcati@bticino.it>
Signed-off-by: Andy Fleming <afleming@freescale.com>
drivers/mmc/mmc.c
include/mmc.h

index 3d445c0e2695598cccf0c6a9a8db8270a3e55bfc..64c8d567de1004e4c3158f2728faf5f5d3ee04b7 100644 (file)
@@ -367,18 +367,33 @@ sd_send_op_cond(struct mmc *mmc)
 
 int mmc_send_op_cond(struct mmc *mmc)
 {
-       int timeout = 1000;
+       int timeout = 10000;
        struct mmc_cmd cmd;
        int err;
 
        /* Some cards seem to need this */
        mmc_go_idle(mmc);
 
+       /* Asking to the card its capabilities */
+       cmd.cmdidx = MMC_CMD_SEND_OP_COND;
+       cmd.resp_type = MMC_RSP_R3;
+       cmd.cmdarg = 0;
+       cmd.flags = 0;
+       err = mmc_send_cmd(mmc, &cmd, NULL);
+       if (err)
+               return err;
+       udelay(1000);
        do {
                cmd.cmdidx = MMC_CMD_SEND_OP_COND;
                cmd.resp_type = MMC_RSP_R3;
-               cmd.cmdarg = OCR_HCS | (mmc_host_is_spi(mmc) ? 0 :
-                                       mmc->voltages);
+               cmd.cmdarg = (mmc_host_is_spi(mmc) ? 0 :
+                               (mmc->voltages &
+                               (cmd.response[0] & OCR_VOLTAGE_MASK)) |
+                               (cmd.response[0] & OCR_ACCESS_MODE));
                cmd.flags = 0;
 
                err = mmc_send_cmd(mmc, &cmd, NULL);
index ed084c8147bd9918ca14d27e81867b9670151d75..e0a56d9d23b76501f1d378ce79ec9f2702762cfa 100644 (file)
@@ -96,6 +96,8 @@
 
 #define OCR_BUSY       0x80000000
 #define OCR_HCS                0x40000000
+#define OCR_VOLTAGE_MASK       0x007FFF80
+#define OCR_ACCESS_MODE                0x60000000
 
 #define MMC_STATUS_MASK                (~0x0206BF7F)
 #define MMC_STATUS_RDY_FOR_DATA (1<<8)