diff options
Diffstat (limited to 'drivers/mmc/host')
| -rw-r--r-- | drivers/mmc/host/rtsx_pci_sdmmc.c | 18 | 
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/mmc/host/rtsx_pci_sdmmc.c b/drivers/mmc/host/rtsx_pci_sdmmc.c index f74b5adca64..468c9230316 100644 --- a/drivers/mmc/host/rtsx_pci_sdmmc.c +++ b/drivers/mmc/host/rtsx_pci_sdmmc.c @@ -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); @@ -1122,6 +1136,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);  |