Merge tag 'mmc-updates-for-3.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel...
[~shefty/rdma-dev.git] / drivers / mmc / host / rtsx_pci_sdmmc.c
index f93f100..f981f7d 100644 (file)
@@ -678,12 +678,19 @@ static void sdmmc_request(struct mmc_host *mmc, struct mmc_request *mrq)
        struct mmc_command *cmd = mrq->cmd;
        struct mmc_data *data = mrq->data;
        unsigned int data_size = 0;
+       int err;
 
        if (host->eject) {
                cmd->error = -ENOMEDIUM;
                goto finish;
        }
 
+       err = rtsx_pci_card_exclusive_check(host->pcr, RTSX_SD_CARD);
+       if (err) {
+               cmd->error = err;
+               goto finish;
+       }
+
        mutex_lock(&pcr->pcr_mutex);
 
        rtsx_pci_start_run(pcr);
@@ -901,6 +908,9 @@ static void sdmmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
        if (host->eject)
                return;
 
+       if (rtsx_pci_card_exclusive_check(host->pcr, RTSX_SD_CARD))
+               return;
+
        mutex_lock(&pcr->pcr_mutex);
 
        rtsx_pci_start_run(pcr);
@@ -1073,6 +1083,10 @@ static int sdmmc_switch_voltage(struct mmc_host *mmc, struct mmc_ios *ios)
        if (host->eject)
                return -ENOMEDIUM;
 
+       err = rtsx_pci_card_exclusive_check(host->pcr, RTSX_SD_CARD);
+       if (err)
+               return err;
+
        mutex_lock(&pcr->pcr_mutex);
 
        rtsx_pci_start_run(pcr);
@@ -1117,6 +1131,10 @@ static int sdmmc_execute_tuning(struct mmc_host *mmc, u32 opcode)
        if (host->eject)
                return -ENOMEDIUM;
 
+       err = rtsx_pci_card_exclusive_check(host->pcr, RTSX_SD_CARD);
+       if (err)
+               return err;
+
        mutex_lock(&pcr->pcr_mutex);
 
        rtsx_pci_start_run(pcr);