BACKPORT: brcmfmac: defer DPC processing during probe
authorArend Van Spriel <arend.vanspriel@broadcom.com>
Fri, 15 Jul 2016 10:39:13 +0000 (12:39 +0200)
committerAmit Pundir <amit.pundir@linaro.org>
Thu, 18 Aug 2016 13:26:03 +0000 (18:56 +0530)
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.

Change-Id: I09c60752374b8145da78000935062be08c5c8a52
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>
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
drivers/net/wireless/brcm80211/brcmfmac/sdio.c

index 7e74ac3ad81519491ac01460cd3b578e6fb3cc80..bcf29bf6f727be6b16a52da24f1213b5e73d2fb4 100644 (file)
@@ -3401,10 +3401,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]);
@@ -4112,6 +4108,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);