summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorMarek Vasut <marex@denx.de>2024-08-21 20:36:03 +0200
committerKalle Valo <kvalo@kernel.org>2024-09-03 21:30:18 +0300
commitb0dc7018477e8fbb7e40c908c29cf663d06b17a7 (patch)
treefb8d78a0e2b84b3464067beef9e202885c2d04bb /drivers
parentd38792292be7113e73ba77383ed687ec87e8f7b5 (diff)
wifi: wilc1000: Do not operate uninitialized hardware during suspend/resume
In case the hardware is not initialized, do not operate it during suspend/resume cycle, the hardware is already off so there is no reason to access it. In fact, wilc_sdio_enable_interrupt() in the resume callback does interfere with the same call when initializing the hardware after resume and makes such initialization after resume fail. Fix this by not operating uninitialized hardware during suspend/resume. Signed-off-by: Marek Vasut <marex@denx.de> Reviewed-by: Alexis Lothoré <alexis.lothore@bootlin.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://patch.msgid.link/20240821183639.163187-1-marex@denx.de
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/microchip/wilc1000/sdio.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/net/wireless/microchip/wilc1000/sdio.c b/drivers/net/wireless/microchip/wilc1000/sdio.c
index 0043f7a0fdf9..7999aeb76901 100644
--- a/drivers/net/wireless/microchip/wilc1000/sdio.c
+++ b/drivers/net/wireless/microchip/wilc1000/sdio.c
@@ -977,6 +977,9 @@ static int wilc_sdio_suspend(struct device *dev)
dev_info(dev, "sdio suspend\n");
+ if (!wilc->initialized)
+ return 0;
+
if (!IS_ERR(wilc->rtc_clk))
clk_disable_unprepare(wilc->rtc_clk);
@@ -999,6 +1002,10 @@ static int wilc_sdio_resume(struct device *dev)
struct wilc *wilc = sdio_get_drvdata(func);
dev_info(dev, "sdio resume\n");
+
+ if (!wilc->initialized)
+ return 0;
+
wilc_sdio_init(wilc, true);
wilc_sdio_enable_interrupt(wilc);