mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-23 20:53:53 +08:00
mmc: sdhci: Deal with failure case in sdhci_suspend_host
If there are errors happened in sdhci_suspend_host, handle it so that when the function returns with an error, the host's behaviour is the same before this function call, e.g. card detection is enabled and tuning timer is active, etc. Signed-off-by: Philip Rakity <prakity@marvell.com> Signed-off-by: Aaron Lu <aaron.lu@amd.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Signed-off-by: Chris Ball <cjb@laptop.org>
This commit is contained in:
parent
3f514291df
commit
38a60ea2e7
@ -2349,19 +2349,30 @@ out:
|
||||
int sdhci_suspend_host(struct sdhci_host *host)
|
||||
{
|
||||
int ret;
|
||||
bool has_tuning_timer;
|
||||
|
||||
sdhci_disable_card_detection(host);
|
||||
|
||||
/* Disable tuning since we are suspending */
|
||||
if (host->version >= SDHCI_SPEC_300 && host->tuning_count &&
|
||||
host->tuning_mode == SDHCI_TUNING_MODE_1) {
|
||||
has_tuning_timer = host->version >= SDHCI_SPEC_300 &&
|
||||
host->tuning_count && host->tuning_mode == SDHCI_TUNING_MODE_1;
|
||||
if (has_tuning_timer) {
|
||||
del_timer_sync(&host->tuning_timer);
|
||||
host->flags &= ~SDHCI_NEEDS_RETUNING;
|
||||
}
|
||||
|
||||
ret = mmc_suspend_host(host->mmc);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
if (has_tuning_timer) {
|
||||
host->flags |= SDHCI_NEEDS_RETUNING;
|
||||
mod_timer(&host->tuning_timer, jiffies +
|
||||
host->tuning_count * HZ);
|
||||
}
|
||||
|
||||
sdhci_enable_card_detection(host);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
free_irq(host->irq, host);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user