|
|
@@ -669,6 +669,10 @@ brcmf_sdio_kso_control(struct brcmf_sdio *bus, bool on)
|
|
|
|
|
|
sdio_retune_crc_disable(bus->sdiodev->func1);
|
|
|
|
|
|
+ /* Cannot re-tune if device is asleep; defer till we're awake */
|
|
|
+ if (on)
|
|
|
+ sdio_retune_hold_now(bus->sdiodev->func1);
|
|
|
+
|
|
|
wr_val = (on << SBSDIO_FUNC1_SLEEPCSR_KSO_SHIFT);
|
|
|
/* 1st KSO write goes to AOS wake up core if device is asleep */
|
|
|
brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR, wr_val, &err);
|
|
|
@@ -721,6 +725,9 @@ brcmf_sdio_kso_control(struct brcmf_sdio *bus, bool on)
|
|
|
if (try_cnt > MAX_KSO_ATTEMPTS)
|
|
|
brcmf_err("max tries: rd_val=0x%x err=%d\n", rd_val, err);
|
|
|
|
|
|
+ if (on)
|
|
|
+ sdio_retune_release(bus->sdiodev->func1);
|
|
|
+
|
|
|
sdio_retune_crc_enable(bus->sdiodev->func1);
|
|
|
|
|
|
return err;
|