From e9412bfe9331638601b5dc74ac0798e1d49ddcf7 Mon Sep 17 00:00:00 2001 From: JasonHuang Date: Mon, 11 Mar 2024 22:46:21 -0500 Subject: [PATCH 248/296] brcmfmac: Adding set and remove F3 device Need to move F3 seeting from BT related function to the common function to increase compatibility, otherwise we will see hang issue caused by not initializing F3 properly. Signed-off-by: JasonHuang --- drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 8 ++++++++ .../broadcom/brcm80211/brcmfmac/bt_shared_sdio_ifx.c | 3 --- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c index 95696d2a17dd..a9e8c1891c19 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c @@ -1171,6 +1171,10 @@ static int brcmf_ops_sdio_probe(struct sdio_func *func, dev_set_drvdata(&sdiodev->func1->dev, bus_if); sdiodev->dev = &sdiodev->func1->dev; dev_set_drvdata(&sdiodev->func2->dev, bus_if); + if (sdiodev->func3) { + brcmf_dbg(SDIO, "Set F3 dev\n"); + dev_set_drvdata(&sdiodev->func3->dev, bus_if); + } brcmf_sdiod_acpi_save_power_manageable(sdiodev); brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_DOWN); @@ -1219,6 +1223,10 @@ static void brcmf_ops_sdio_remove(struct sdio_func *func) dev_set_drvdata(&sdiodev->func1->dev, NULL); dev_set_drvdata(&sdiodev->func2->dev, NULL); + if (sdiodev->func3) { + brcmf_dbg(SDIO, "Remove F3 dev\n"); + dev_set_drvdata(&sdiodev->func3->dev, NULL); + } kfree(bus_if); kfree(sdiodev); diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bt_shared_sdio_ifx.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bt_shared_sdio_ifx.c index 636c2736ff39..45724f389301 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bt_shared_sdio_ifx.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bt_shared_sdio_ifx.c @@ -978,8 +978,6 @@ void inf_btsdio_init(struct brcmf_bus *bus_if) bt_if->set_bt_reset = true; sdio_claim_host(sdiodev->func1); - /* drvdata used for irqhandler */ - dev_set_drvdata(&sdiodev->func3->dev, bus_if); /* register interrupt */ if (!pdata->oob_irq_supported) { brcmf_dbg(INFO, "register F3 ib irq\n"); @@ -1015,7 +1013,6 @@ void inf_btsdio_deinit(struct brcmf_bus *bus_if) brcmf_dbg(INFO, "release F3 ib irq\n"); sdio_release_irq(sdiodev->func3); } - dev_set_drvdata(&sdiodev->func3->dev, NULL); sdio_release_host(sdiodev->func1); inf_bus_detach(bus_if); -- 2.25.1