eMMC chips do not use CMD11 when changing voltage.  Add extra
argument to call to indicate if CMD11 needs to be sent.

Signed-off-by: Philip Rakity <[email protected]>
---
 drivers/mmc/core/sd.c     |    4 ++--
 drivers/mmc/core/sd_ops.c |    4 ++--
 drivers/mmc/core/sd_ops.h |    3 ++-
 3 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
index ed6b11b..362716c 100644
--- a/drivers/mmc/core/sd.c
+++ b/drivers/mmc/core/sd.c
@@ -734,7 +734,7 @@ try_again:
         */
        if (!mmc_host_is_spi(host) && rocr &&
           ((*rocr & 0x41000000) == 0x41000000)) {
-               err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180);
+               err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180, 1);
                if (err) {
                        ocr &= ~(1 << 24);
                        goto try_again;
@@ -1115,7 +1115,7 @@ int mmc_attach_sd(struct mmc_host *host)
                host->ocr_avail = host->ocr_avail_sd;
 
        /* Make sure we are at 3.3V signalling voltage */
-       err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_330);
+       err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_330, 0);
        if (err)
                return err;
 
diff --git a/drivers/mmc/core/sd_ops.c b/drivers/mmc/core/sd_ops.c
index fc7edc4..6fd35f6 100644
--- a/drivers/mmc/core/sd_ops.c
+++ b/drivers/mmc/core/sd_ops.c
@@ -149,7 +149,7 @@ int mmc_app_set_bus_width(struct mmc_card *card, int width)
        return 0;
 }
 
-int mmc_set_signal_voltage(struct mmc_host *host, int signal_voltage)
+int mmc_set_signal_voltage(struct mmc_host *host, int signal_voltage, int 
cmd11)
 {
        struct mmc_command cmd;
        int err = 0;
@@ -160,7 +160,7 @@ int mmc_set_signal_voltage(struct mmc_host *host, int 
signal_voltage)
         * Send CMD11 only if the request is to switch the card to
         * 1.8V signalling.
         */
-       if (signal_voltage == MMC_SIGNAL_VOLTAGE_180) {
+       if (signal_voltage != MMC_SIGNAL_VOLTAGE_330 && cmd11) {
                memset(&cmd, 0, sizeof(struct mmc_command));
 
                cmd.opcode = SD_SWITCH_VOLTAGE;
diff --git a/drivers/mmc/core/sd_ops.h b/drivers/mmc/core/sd_ops.h
index d5bdda5..2670e71 100644
--- a/drivers/mmc/core/sd_ops.h
+++ b/drivers/mmc/core/sd_ops.h
@@ -20,7 +20,8 @@ int mmc_app_send_scr(struct mmc_card *card, u32 *scr);
 int mmc_sd_switch(struct mmc_card *card, int mode, int group,
        u8 value, u8 *resp);
 int mmc_app_sd_status(struct mmc_card *card, void *ssr);
-int mmc_set_signal_voltage(struct mmc_host *host, int signal_voltage);
+int mmc_set_signal_voltage(struct mmc_host *host, int signal_voltage,
+       int cmd11);
 
 #endif
 
-- 
1.7.0.4


--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to