From 4e2df402476d6330f803176ab7bab323dc820f50 Mon Sep 17 00:00:00 2001 From: Houston Hoffman Date: Sun, 21 May 2017 19:36:56 -0700 Subject: [PATCH] qcacmn: Support hal detach Cleanup paths were missing hal detach hook. Change-Id: I175a60b52b8d61dacf5f7040c223073bd09d7ba6 CRs-Fixed: 2051903 --- hif/src/hif_main.c | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/hif/src/hif_main.c b/hif/src/hif_main.c index 643a558218d5..f2338c6f7221 100644 --- a/hif/src/hif_main.c +++ b/hif/src/hif_main.c @@ -483,11 +483,26 @@ static QDF_STATUS hif_hal_attach(struct hif_softc *scn) return QDF_STATUS_SUCCESS; } + +static QDF_STATUS hif_hal_detach(struct hif_softc *scn) +{ + if (ce_srng_based(scn)) { + hal_detach(scn->hal_soc); + scn->hal_soc = NULL; + } + + return QDF_STATUS_SUCCESS; +} #else static QDF_STATUS hif_hal_attach(struct hif_softc *scn) { return QDF_STATUS_SUCCESS; } + +static QDF_STATUS hif_hal_detach(struct hif_softc *scn) +{ + return QDF_STATUS_SUCCESS; +} #endif /** @@ -525,14 +540,13 @@ QDF_STATUS hif_enable(struct hif_opaque_softc *hif_ctx, struct device *dev, status = hif_hal_attach(scn); if (status != QDF_STATUS_SUCCESS) { HIF_ERROR("%s: hal attach failed", __func__); - return status; + goto disable_bus; } if (hif_bus_configure(scn)) { HIF_ERROR("%s: Target probe failed.", __func__); - hif_disable_bus(scn); status = QDF_STATUS_E_FAILURE; - return status; + goto hal_detach; } hif_ut_suspend_init(scn); @@ -550,6 +564,12 @@ QDF_STATUS hif_enable(struct hif_opaque_softc *hif_ctx, struct device *dev, HIF_DBG("%s: OK", __func__); return QDF_STATUS_SUCCESS; + +hal_detach: + hif_hal_detach(scn); +disable_bus: + hif_disable_bus(scn); + return status; } void hif_disable(struct hif_opaque_softc *hif_ctx, enum hif_disable_type type) @@ -565,6 +585,8 @@ void hif_disable(struct hif_opaque_softc *hif_ctx, enum hif_disable_type type) else hif_stop(hif_ctx); + hif_hal_detach(scn); + hif_disable_bus(scn); hif_wlan_disable(scn);