qcacmn: Support hal detach
Cleanup paths were missing hal detach hook.
Change-Id: I175a60b52b8d61dacf5f7040c223073bd09d7ba6
CRs-Fixed: 2051903
diff --git a/hif/src/hif_main.c b/hif/src/hif_main.c
index 643a558..f2338c6 100644
--- a/hif/src/hif_main.c
+++ b/hif/src/hif_main.c
@@ -483,11 +483,26 @@
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 @@
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 @@
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 @@
else
hif_stop(hif_ctx);
+ hif_hal_detach(scn);
+
hif_disable_bus(scn);
hif_wlan_disable(scn);