
On Thu, Mar 10, 2011 at 5:29 PM, Lei Wen adrian.wenl@gmail.com wrote:
Hi Raffaele,
On Thu, Mar 10, 2011 at 11:43 PM, Raffaele Recalcati lamiaposta71@gmail.com wrote:
From: Raffaele Recalcati raffaele.recalcati@bticino.it
The first SEND_OP_COND (CMD1) is used only to ask card capabilities, waiting that the card is not busy. 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.
Signed-off-by: Raffaele Recalcati raffaele.recalcati@bticino.it
drivers/mmc/mmc.c | 21 +++++++++++++++++++-- include/mmc.h | 2 ++ 2 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 042653f..ded630b 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -347,17 +347,34 @@ 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 */
- do {
- 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);
- } while (!(cmd.response[0] & OCR_BUSY) && timeout--);
I think you should not put the first probe a multi-time. In linux framework, it would skip the first probing.
I test with this patch and fail to detect my emmc card... While just let the first probe once, it works fine.
Best regards, Lei
Look at JEDEC Standard No. 84-A441 document at page 190. It is normal to ask the card capabilities before setting. But I understand also that in your case there is some issue. I'm sorry, what does "multi-time" mean?
Thx, Raffaele