|
@@ -404,11 +404,12 @@ int mmc_spi_set_crc(struct mmc_host *host, int use_crc)
|
|
|
* @timeout_ms: timeout (ms) for operation performed by register write,
|
|
|
* timeout of zero implies maximum possible timeout
|
|
|
* @use_busy_signal: use the busy signal as response type
|
|
|
+ * @send_status: send status cmd to poll for busy
|
|
|
*
|
|
|
* Modifies the EXT_CSD register for selected card.
|
|
|
*/
|
|
|
int __mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value,
|
|
|
- unsigned int timeout_ms, bool use_busy_signal)
|
|
|
+ unsigned int timeout_ms, bool use_busy_signal, bool send_status)
|
|
|
{
|
|
|
int err;
|
|
|
struct mmc_command cmd = {0};
|
|
@@ -454,14 +455,26 @@ int __mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value,
|
|
|
|
|
|
timeout = jiffies + msecs_to_jiffies(MMC_OPS_TIMEOUT_MS);
|
|
|
do {
|
|
|
- err = __mmc_send_status(card, &status, ignore_crc);
|
|
|
- if (err)
|
|
|
- return err;
|
|
|
+ if (send_status) {
|
|
|
+ err = __mmc_send_status(card, &status, ignore_crc);
|
|
|
+ if (err)
|
|
|
+ return err;
|
|
|
+ }
|
|
|
if (card->host->caps & MMC_CAP_WAIT_WHILE_BUSY)
|
|
|
break;
|
|
|
if (mmc_host_is_spi(card->host))
|
|
|
break;
|
|
|
|
|
|
+ /*
|
|
|
+ * We are not allowed to issue a status command and the host
|
|
|
+ * does'nt support MMC_CAP_WAIT_WHILE_BUSY, then we can only
|
|
|
+ * rely on waiting for the stated timeout to be sufficient.
|
|
|
+ */
|
|
|
+ if (!send_status) {
|
|
|
+ mmc_delay(timeout_ms);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
/* Timeout if the device never leaves the program state. */
|
|
|
if (time_after(jiffies, timeout)) {
|
|
|
pr_err("%s: Card stuck in programming state! %s\n",
|
|
@@ -488,7 +501,7 @@ EXPORT_SYMBOL_GPL(__mmc_switch);
|
|
|
int mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value,
|
|
|
unsigned int timeout_ms)
|
|
|
{
|
|
|
- return __mmc_switch(card, set, index, value, timeout_ms, true);
|
|
|
+ return __mmc_switch(card, set, index, value, timeout_ms, true, true);
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(mmc_switch);
|
|
|
|