Commit 28fc6259 authored by Siva Rebbagondla's avatar Siva Rebbagondla Committed by Greg Kroah-Hartman

rsi: add hci detach for hibernation and poweroff

[ Upstream commit cbde979b ]

As we missed to detach HCI, while entering power off or hibernation,
an extra hci interface gets created whenever system is woken up, to
avoid this we added hci_detach() in rsi_disconnect(), rsi_freeze(),
and rsi_shutdown() functions which are invoked for these tests.
This patch fixes the issue
Signed-off-by: default avatarSiva Rebbagondla <siva.rebbagondla@redpinesignals.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 47ef5cb8
...@@ -1129,6 +1129,12 @@ static void rsi_disconnect(struct sdio_func *pfunction) ...@@ -1129,6 +1129,12 @@ static void rsi_disconnect(struct sdio_func *pfunction)
rsi_mac80211_detach(adapter); rsi_mac80211_detach(adapter);
mdelay(10); mdelay(10);
if (IS_ENABLED(CONFIG_RSI_COEX) && adapter->priv->coex_mode > 1 &&
adapter->priv->bt_adapter) {
rsi_bt_ops.detach(adapter->priv->bt_adapter);
adapter->priv->bt_adapter = NULL;
}
/* Reset Chip */ /* Reset Chip */
rsi_reset_chip(adapter); rsi_reset_chip(adapter);
...@@ -1305,6 +1311,12 @@ static int rsi_freeze(struct device *dev) ...@@ -1305,6 +1311,12 @@ static int rsi_freeze(struct device *dev)
rsi_dbg(ERR_ZONE, rsi_dbg(ERR_ZONE,
"##### Device can not wake up through WLAN\n"); "##### Device can not wake up through WLAN\n");
if (IS_ENABLED(CONFIG_RSI_COEX) && common->coex_mode > 1 &&
common->bt_adapter) {
rsi_bt_ops.detach(common->bt_adapter);
common->bt_adapter = NULL;
}
ret = rsi_sdio_disable_interrupts(pfunction); ret = rsi_sdio_disable_interrupts(pfunction);
if (sdev->write_fail) if (sdev->write_fail)
...@@ -1352,6 +1364,12 @@ static void rsi_shutdown(struct device *dev) ...@@ -1352,6 +1364,12 @@ static void rsi_shutdown(struct device *dev)
if (rsi_config_wowlan(adapter, wowlan)) if (rsi_config_wowlan(adapter, wowlan))
rsi_dbg(ERR_ZONE, "Failed to configure WoWLAN\n"); rsi_dbg(ERR_ZONE, "Failed to configure WoWLAN\n");
if (IS_ENABLED(CONFIG_RSI_COEX) && adapter->priv->coex_mode > 1 &&
adapter->priv->bt_adapter) {
rsi_bt_ops.detach(adapter->priv->bt_adapter);
adapter->priv->bt_adapter = NULL;
}
rsi_sdio_disable_interrupts(sdev->pfunction); rsi_sdio_disable_interrupts(sdev->pfunction);
if (sdev->write_fail) if (sdev->write_fail)
......
...@@ -818,6 +818,13 @@ static void rsi_disconnect(struct usb_interface *pfunction) ...@@ -818,6 +818,13 @@ static void rsi_disconnect(struct usb_interface *pfunction)
return; return;
rsi_mac80211_detach(adapter); rsi_mac80211_detach(adapter);
if (IS_ENABLED(CONFIG_RSI_COEX) && adapter->priv->coex_mode > 1 &&
adapter->priv->bt_adapter) {
rsi_bt_ops.detach(adapter->priv->bt_adapter);
adapter->priv->bt_adapter = NULL;
}
rsi_reset_card(adapter); rsi_reset_card(adapter);
rsi_deinit_usb_interface(adapter); rsi_deinit_usb_interface(adapter);
rsi_91x_deinit(adapter); rsi_91x_deinit(adapter);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment