wifi: wilc1000: let host->chip suspend/resume notifications manage chip wake/sleep
host_wakeup_notify and host_sleep_notify are surrounded by chip_wakeup and chip_allow_sleep calls, which theorically need to be protected with the hif_cs lock. This lock protection is currently missing. Instead of adding the lock where those two functions are called, move those in host->chip suspend notifications to benefit from the lock already used there (in bus_acquire/bus_release) Signed-off-by: Alexis Lothoré <alexis.lothore@bootlin.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://msgid.link/20240613-wilc_suspend-v1-2-c2f766d0988c@bootlin.com
This commit is contained in:
committed by
Kalle Valo
parent
70ed0bdab1
commit
301e44e973
@@ -256,14 +256,12 @@ static int wilc_sdio_suspend(struct device *dev)
|
||||
int ret;
|
||||
|
||||
dev_info(dev, "sdio suspend\n");
|
||||
chip_wakeup(wilc);
|
||||
|
||||
if (!IS_ERR(wilc->rtc_clk))
|
||||
clk_disable_unprepare(wilc->rtc_clk);
|
||||
|
||||
if (wilc->suspend_event) {
|
||||
host_sleep_notify(wilc);
|
||||
chip_allow_sleep(wilc);
|
||||
}
|
||||
|
||||
ret = wilc_sdio_reset(wilc);
|
||||
@@ -1003,14 +1001,11 @@ static int wilc_sdio_resume(struct device *dev)
|
||||
|
||||
dev_info(dev, "sdio resume\n");
|
||||
sdio_release_host(func);
|
||||
chip_wakeup(wilc);
|
||||
wilc_sdio_init(wilc, true);
|
||||
|
||||
if (wilc->suspend_event)
|
||||
host_wakeup_notify(wilc);
|
||||
|
||||
chip_allow_sleep(wilc);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -678,17 +678,17 @@ EXPORT_SYMBOL_GPL(chip_wakeup);
|
||||
|
||||
void host_wakeup_notify(struct wilc *wilc)
|
||||
{
|
||||
acquire_bus(wilc, WILC_BUS_ACQUIRE_ONLY);
|
||||
acquire_bus(wilc, WILC_BUS_ACQUIRE_AND_WAKEUP);
|
||||
wilc->hif_func->hif_write_reg(wilc, WILC_CORTUS_INTERRUPT_2, 1);
|
||||
release_bus(wilc, WILC_BUS_RELEASE_ONLY);
|
||||
release_bus(wilc, WILC_BUS_RELEASE_ALLOW_SLEEP);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(host_wakeup_notify);
|
||||
|
||||
void host_sleep_notify(struct wilc *wilc)
|
||||
{
|
||||
acquire_bus(wilc, WILC_BUS_ACQUIRE_ONLY);
|
||||
acquire_bus(wilc, WILC_BUS_ACQUIRE_AND_WAKEUP);
|
||||
wilc->hif_func->hif_write_reg(wilc, WILC_CORTUS_INTERRUPT_1, 1);
|
||||
release_bus(wilc, WILC_BUS_RELEASE_ONLY);
|
||||
release_bus(wilc, WILC_BUS_RELEASE_ALLOW_SLEEP);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(host_sleep_notify);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user