brcmfmac: defer DPC processing during probe
authorArend Van Spriel <arend.vanspriel@broadcom.com>
Fri, 15 Jul 2016 10:39:13 +0000 (12:39 +0200)
committerKalle Valo <kvalo@codeaurora.org>
Mon, 18 Jul 2016 19:41:48 +0000 (22:41 +0300)
The sdio dpc starts processing when in SDIOD_STATE_DATA. This state was
entered right after firmware download. This patch moves that transition
just before enabling sdio interrupt handling thus avoiding watchdog
expiry which would put the bus to sleep while probing.

Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c

index 5fb8b91b9326ab9ac2fc7848e7b2c297a2086649..68ab3ac156500864fbe27187311541986334ff3a 100644 (file)
@@ -3305,10 +3305,6 @@ static int brcmf_sdio_download_firmware(struct brcmf_sdio *bus,
                goto err;
        }
 
-       /* Allow full data communication using DPC from now on. */
-       brcmf_sdiod_change_state(bus->sdiodev, BRCMF_SDIOD_DATA);
-       bcmerror = 0;
-
 err:
        brcmf_sdio_clkctl(bus, CLK_SDONLY, false);
        sdio_release_host(bus->sdiodev->func[1]);
@@ -4046,6 +4042,9 @@ static void brcmf_sdio_firmware_callback(struct device *dev,
        }
 
        if (err == 0) {
+               /* Allow full data communication using DPC from now on. */
+               brcmf_sdiod_change_state(bus->sdiodev, BRCMF_SDIOD_DATA);
+
                err = brcmf_sdiod_intr_register(sdiodev);
                if (err != 0)
                        brcmf_err("intr register failed:%d\n", err);