mmc: rtsx: Clear SD_CLK toggle enable bit if switching voltage fail
authorWei WANG <wei_wang@realsil.com.cn>
Wed, 21 Aug 2013 01:46:26 +0000 (09:46 +0800)
committerSamuel Ortiz <sameo@linux.intel.com>
Fri, 30 Aug 2013 12:25:00 +0000 (14:25 +0200)
If switching voltage fails, SD_CLK toggle enable bit should been cleared
so that SD host can control SD clock automatically.

Signed-off-by: Wei WANG <wei_wang@realsil.com.cn>
Acked-by: Chris Ball <cjb@laptop.org>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
drivers/mmc/host/rtsx_pci_sdmmc.c

index fcb368ef432386c30ca3f4c13553f74c56a7b7b1..0fefe4e84f4aa31a2089d48477d646a3f55f0f9e 100644 (file)
@@ -227,6 +227,7 @@ static void sd_send_cmd_get_rsp(struct realtek_pci_sdmmc *host,
        int stat_idx = 0;
        u8 rsp_type;
        int rsp_len = 5;
+       bool clock_toggled = false;
 
        dev_dbg(sdmmc_dev(host), "%s: SD/MMC CMD %d, arg = 0x%08x\n",
                        __func__, cmd_idx, arg);
@@ -270,6 +271,8 @@ static void sd_send_cmd_get_rsp(struct realtek_pci_sdmmc *host,
                                0xFF, SD_CLK_TOGGLE_EN);
                if (err < 0)
                        goto out;
+
+               clock_toggled = true;
        }
 
        rtsx_pci_init_cmd(pcr);
@@ -350,6 +353,10 @@ static void sd_send_cmd_get_rsp(struct realtek_pci_sdmmc *host,
 
 out:
        cmd->error = err;
+
+       if (err && clock_toggled)
+               rtsx_pci_write_register(pcr, SD_BUS_STAT,
+                               SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP, 0);
 }
 
 static int sd_rw_multi(struct realtek_pci_sdmmc *host, struct mmc_request *mrq)
@@ -1121,11 +1128,11 @@ static int sdmmc_switch_voltage(struct mmc_host *mmc, struct mmc_ios *ios)
                        goto out;
        }
 
+out:
        /* Stop toggle SD clock in idle */
        err = rtsx_pci_write_register(pcr, SD_BUS_STAT,
                        SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP, 0);
 
-out:
        mutex_unlock(&pcr->pcr_mutex);
 
        return err;
This page took 0.046931 seconds and 5 git commands to generate.