mmc: sh_mmcif: Use response type to know when to enable busy detection
The sh_mmcif explicity checks for certain commands to decide when to enable HW busy detection. Instead, it should only check the response type as it tells if busy detection is needed. In this way, the mmc core also gets full control whether it thinks busy detection should be done or not. In some specific scenarios, like for ERASE and STOP commands it may decide to fall back to use a CMD13 to poll the card status instead. Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
parent
dab3a28b40
commit
5b1c29bcee
|
@ -819,10 +819,12 @@ static u32 sh_mmcif_set_cmd(struct sh_mmcif_host *host,
|
||||||
tmp |= CMD_SET_RTYP_NO;
|
tmp |= CMD_SET_RTYP_NO;
|
||||||
break;
|
break;
|
||||||
case MMC_RSP_R1:
|
case MMC_RSP_R1:
|
||||||
case MMC_RSP_R1B:
|
|
||||||
case MMC_RSP_R3:
|
case MMC_RSP_R3:
|
||||||
tmp |= CMD_SET_RTYP_6B;
|
tmp |= CMD_SET_RTYP_6B;
|
||||||
break;
|
break;
|
||||||
|
case MMC_RSP_R1B:
|
||||||
|
tmp |= CMD_SET_RBSY | CMD_SET_RTYP_6B;
|
||||||
|
break;
|
||||||
case MMC_RSP_R2:
|
case MMC_RSP_R2:
|
||||||
tmp |= CMD_SET_RTYP_17B;
|
tmp |= CMD_SET_RTYP_17B;
|
||||||
break;
|
break;
|
||||||
|
@ -830,17 +832,7 @@ static u32 sh_mmcif_set_cmd(struct sh_mmcif_host *host,
|
||||||
dev_err(dev, "Unsupported response type.\n");
|
dev_err(dev, "Unsupported response type.\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
switch (opc) {
|
|
||||||
/* RBSY */
|
|
||||||
case MMC_SLEEP_AWAKE:
|
|
||||||
case MMC_SWITCH:
|
|
||||||
case MMC_STOP_TRANSMISSION:
|
|
||||||
case MMC_SET_WRITE_PROT:
|
|
||||||
case MMC_CLR_WRITE_PROT:
|
|
||||||
case MMC_ERASE:
|
|
||||||
tmp |= CMD_SET_RBSY;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
/* WDAT / DATW */
|
/* WDAT / DATW */
|
||||||
if (data) {
|
if (data) {
|
||||||
tmp |= CMD_SET_WDAT;
|
tmp |= CMD_SET_WDAT;
|
||||||
|
@ -925,23 +917,13 @@ static void sh_mmcif_start_cmd(struct sh_mmcif_host *host,
|
||||||
{
|
{
|
||||||
struct mmc_command *cmd = mrq->cmd;
|
struct mmc_command *cmd = mrq->cmd;
|
||||||
u32 opc = cmd->opcode;
|
u32 opc = cmd->opcode;
|
||||||
u32 mask;
|
u32 mask = 0;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
switch (opc) {
|
if (cmd->flags & MMC_RSP_BUSY)
|
||||||
/* response busy check */
|
|
||||||
case MMC_SLEEP_AWAKE:
|
|
||||||
case MMC_SWITCH:
|
|
||||||
case MMC_STOP_TRANSMISSION:
|
|
||||||
case MMC_SET_WRITE_PROT:
|
|
||||||
case MMC_CLR_WRITE_PROT:
|
|
||||||
case MMC_ERASE:
|
|
||||||
mask = MASK_START_CMD | MASK_MRBSYE;
|
mask = MASK_START_CMD | MASK_MRBSYE;
|
||||||
break;
|
else
|
||||||
default:
|
|
||||||
mask = MASK_START_CMD | MASK_MCRSPE;
|
mask = MASK_START_CMD | MASK_MCRSPE;
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (host->ccs_enable)
|
if (host->ccs_enable)
|
||||||
mask |= MASK_MCCSTO;
|
mask |= MASK_MCCSTO;
|
||||||
|
|
Loading…
Reference in New Issue