]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: wilc1000: Do not operate uninitialized hardware during suspend/resume
authorMarek Vasut <marex@denx.de>
Wed, 21 Aug 2024 18:36:03 +0000 (20:36 +0200)
committerKalle Valo <kvalo@kernel.org>
Tue, 3 Sep 2024 18:30:18 +0000 (21:30 +0300)
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
drivers/net/wireless/microchip/wilc1000/sdio.c

index 0043f7a0fdf97b5b6788e478166a18de4c967de2..7999aeb76901f3d20162e76004861d0fef3466df 100644 (file)
@@ -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);