mmc: bus: Handle error in case bus_ops suspend fails
bus_ops->suspend may fail due to some reason (for e.g. due to flush timeout). In such cases, if we return error to PM framework from here without calling pm_generic_resume then mmc request may get stuck since PM framework will assume that mmc bus not suspended (because of error) and it won't call resume again. Thus fix this by calling pm_generic_resume in case of error from bus_ops->suspend in mmc_bus_suspend. Change-Id: Iaef485d0b47b005aa88e61cd77a2b7b65931def1 Signed-off-by: Ritesh Harjani <riteshh@codeaurora.org> Signed-off-by: Sayali Lokhande <sayalil@codeaurora.org> Signed-off-by: Siba Prasad <sibap@codeaurora.org>
This commit is contained in:
parent
7246b95041
commit
192cfe16ca
1 changed files with 13 additions and 0 deletions
|
@ -167,6 +167,19 @@ static int mmc_bus_suspend(struct device *dev)
|
|||
if (mmc_bus_needs_resume(host))
|
||||
return 0;
|
||||
ret = host->bus_ops->suspend(host);
|
||||
|
||||
/*
|
||||
* bus_ops->suspend may fail due to some reason
|
||||
* In such cases if we return error to PM framework
|
||||
* from here without calling pm_generic_resume then mmc
|
||||
* request may get stuck since PM framework will assume
|
||||
* that mmc bus is not suspended (because of error) and
|
||||
* it won't call resume again.
|
||||
*
|
||||
* So in case of error call pm_generic_resume().
|
||||
*/
|
||||
if (ret)
|
||||
pm_generic_resume(dev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue