[SRU OEM-B][PATCH 1/3] UBUNTU: SAUCE: Bluetooth: btrsi: add hci detach for hibernation and poweroff

Shrirang Bagul shrirang.bagul at canonical.com
Tue May 22 10:49:10 UTC 2018


From: Ganapathi Raju <ganapathi.kondraju at redpinesignals.com>

BugLink: http://bugs.launchpad.net/bugs/1772626

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: Ganapathi Raju <ganapathi.kondraju at redpinesignals.com>
Signed-off-by: Shrirang Bagul <shrirang.bagul at canonical.com>
---
 drivers/net/wireless/rsi/rsi_91x_sdio.c | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/rsi/rsi_91x_sdio.c b/drivers/net/wireless/rsi/rsi_91x_sdio.c
index 27e2b07ef9c7..a38580ef3c27 100644
--- a/drivers/net/wireless/rsi/rsi_91x_sdio.c
+++ b/drivers/net/wireless/rsi/rsi_91x_sdio.c
@@ -1142,7 +1142,12 @@ static void rsi_disconnect(struct sdio_func *pfunction)
 
 	rsi_mac80211_detach(adapter);
 	mdelay(10);
-
+#ifdef CONFIG_RSI_COEX
+	if (adapter->priv->coex_mode > 1 && adapter->priv->bt_adapter) {
+		rsi_bt_ops.detach(adapter->priv->bt_adapter);
+		adapter->priv->bt_adapter = NULL;
+	}
+#endif
 	/* Reset Chip */
 	rsi_reset_chip(adapter);
 
@@ -1325,6 +1330,13 @@ static int rsi_freeze(struct device *dev)
 		rsi_dbg(ERR_ZONE,
 			"##### Device can not wake up through WLAN\n");
 
+#ifdef CONFIG_RSI_COEX
+	if (common->coex_mode > 1 && common->bt_adapter) {
+		rsi_bt_ops.detach(common->bt_adapter);
+		common->bt_adapter = NULL;
+	}
+#endif
+
 	ret = rsi_sdio_disable_interrupts(pfunction);
 
 	if (sdev->write_fail)
@@ -1371,7 +1383,12 @@ static void rsi_shutdown(struct device *dev)
 
 	if (rsi_config_wowlan(adapter, wowlan))
 		rsi_dbg(ERR_ZONE, "Failed to configure WoWLAN\n");
-
+#ifdef CONFIG_RSI_COEX
+	if (adapter->priv->coex_mode > 1 && adapter->priv->bt_adapter) {
+		rsi_bt_ops.detach(adapter->priv->bt_adapter);
+		adapter->priv->bt_adapter = NULL;
+	}
+#endif
 	rsi_sdio_disable_interrupts(sdev->pfunction);
 
 	if (sdev->write_fail)
-- 
2.17.0





More information about the kernel-team mailing list