Commit ecc02441 authored by Ohad Ben-Cohen's avatar Ohad Ben-Cohen Committed by Chris Ball

mmc: fix runtime PM with -ENOSYS suspend case

In the case where a driver returns -ENOSYS from its suspend handler
to indicate that the device should be powered down over suspend, the
remove routine of the driver was not being called, leading to lots of
confusion during resume.

The problem is that runtime PM is disabled during this process,
and when we reach mmc_sdio_remove, calling the runtime PM functions here
(validly) return errors, and this was causing us to skip the remove
function.

Fix this by ignoring the error value of pm_runtime_get_sync(), which
can return valid errors. This also matches the behaviour of
pci_device_remove().
Signed-off-by: default avatarDaniel Drake <dsd@laptop.org>
Signed-off-by: default avatarChris Ball <cjb@laptop.org>
parent b0a68ec9
...@@ -167,11 +167,8 @@ static int sdio_bus_remove(struct device *dev) ...@@ -167,11 +167,8 @@ static int sdio_bus_remove(struct device *dev)
int ret = 0; int ret = 0;
/* Make sure card is powered before invoking ->remove() */ /* Make sure card is powered before invoking ->remove() */
if (func->card->host->caps & MMC_CAP_POWER_OFF_CARD) { if (func->card->host->caps & MMC_CAP_POWER_OFF_CARD)
ret = pm_runtime_get_sync(dev); pm_runtime_get_sync(dev);
if (ret < 0)
goto out;
}
drv->remove(func); drv->remove(func);
...@@ -191,7 +188,6 @@ static int sdio_bus_remove(struct device *dev) ...@@ -191,7 +188,6 @@ static int sdio_bus_remove(struct device *dev)
if (func->card->host->caps & MMC_CAP_POWER_OFF_CARD) if (func->card->host->caps & MMC_CAP_POWER_OFF_CARD)
pm_runtime_put_sync(dev); pm_runtime_put_sync(dev);
out:
return ret; return ret;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment