* Tony Lindgren [off-list ref] [180515 15:46]:
quoted hunk
We can have pm_runtime_get_sync() return 1, and we can have
pm_runtime_put_sync() return -EBUSY. See rpm_suspend() and
rpm_resume() for more information.
Fix the issue by returning 0 from wl12xx_sdio_power_on() on success.
And use pm_runtime_put() instead of pm_runtime_put_sync() for
wl12xx_sdio_power_off(), then the MMC subsystem will idle the bus
when suitable.
Otherwise wlcore can sometimes get confused and may report bogus
errors and WLAN connection can fail.
@@ -180,7 +180,7 @@ static int wl12xx_sdio_power_off(struct wl12xx_sdio_glue *glue)
sdio_release_host(func);
/* Let runtime PM know the card is powered off */
- return pm_runtime_put_sync(&card->dev);
+ return pm_runtime_put(&card->dev);
}
Looks like we can still get -EBUSY here though. I think we
can just ignore the return value of pm_runtime_put() here.
Regards,
Tony