|
@@ -413,14 +413,12 @@ int __mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value,
|
|
|
unsigned int timeout_ms, bool use_busy_signal, bool send_status,
|
|
|
bool ignore_crc)
|
|
|
{
|
|
|
+ struct mmc_host *host = card->host;
|
|
|
int err;
|
|
|
struct mmc_command cmd = {0};
|
|
|
unsigned long timeout;
|
|
|
u32 status = 0;
|
|
|
|
|
|
- BUG_ON(!card);
|
|
|
- BUG_ON(!card->host);
|
|
|
-
|
|
|
cmd.opcode = MMC_SWITCH;
|
|
|
cmd.arg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
|
|
|
(index << 16) |
|
|
@@ -437,7 +435,7 @@ int __mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value,
|
|
|
if (index == EXT_CSD_SANITIZE_START)
|
|
|
cmd.sanitize_busy = true;
|
|
|
|
|
|
- err = mmc_wait_for_cmd(card->host, &cmd, MMC_CMD_RETRIES);
|
|
|
+ err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
|
|
|
if (err)
|
|
|
return err;
|
|
|
|
|
@@ -449,7 +447,7 @@ int __mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value,
|
|
|
* CRC errors shall only be ignored in cases were CMD13 is used to poll
|
|
|
* to detect busy completion.
|
|
|
*/
|
|
|
- if (card->host->caps & MMC_CAP_WAIT_WHILE_BUSY)
|
|
|
+ if (host->caps & MMC_CAP_WAIT_WHILE_BUSY)
|
|
|
ignore_crc = false;
|
|
|
|
|
|
/* Must check status to be sure of no errors. */
|
|
@@ -460,9 +458,9 @@ int __mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value,
|
|
|
if (err)
|
|
|
return err;
|
|
|
}
|
|
|
- if (card->host->caps & MMC_CAP_WAIT_WHILE_BUSY)
|
|
|
+ if (host->caps & MMC_CAP_WAIT_WHILE_BUSY)
|
|
|
break;
|
|
|
- if (mmc_host_is_spi(card->host))
|
|
|
+ if (mmc_host_is_spi(host))
|
|
|
break;
|
|
|
|
|
|
/*
|
|
@@ -478,18 +476,18 @@ int __mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value,
|
|
|
/* Timeout if the device never leaves the program state. */
|
|
|
if (time_after(jiffies, timeout)) {
|
|
|
pr_err("%s: Card stuck in programming state! %s\n",
|
|
|
- mmc_hostname(card->host), __func__);
|
|
|
+ mmc_hostname(host), __func__);
|
|
|
return -ETIMEDOUT;
|
|
|
}
|
|
|
} while (R1_CURRENT_STATE(status) == R1_STATE_PRG);
|
|
|
|
|
|
- if (mmc_host_is_spi(card->host)) {
|
|
|
+ if (mmc_host_is_spi(host)) {
|
|
|
if (status & R1_SPI_ILLEGAL_COMMAND)
|
|
|
return -EBADMSG;
|
|
|
} else {
|
|
|
if (status & 0xFDFFA000)
|
|
|
- pr_warning("%s: unexpected status %#x after "
|
|
|
- "switch", mmc_hostname(card->host), status);
|
|
|
+ pr_warn("%s: unexpected status %#x after switch\n",
|
|
|
+ mmc_hostname(host), status);
|
|
|
if (status & R1_SWITCH_ERROR)
|
|
|
return -EBADMSG;
|
|
|
}
|