summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinmao Li <lilinmao@kylinos.cn>2026-01-09 10:05:38 +0800
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2026-01-29 13:33:15 -0500
commit312b09bbe9832799ff11c051060f78c9667d604a (patch)
treef799241f886f7418f25498f0873b52d445bf4af0
parent97eb023cd1616b06584dac77a16cb9ef3abf4491 (diff)
Bluetooth: btusb: Reject autosuspend if discovery is active
If USB autosuspend occurs while discovery is active, the ongoing HCI operation may not complete successfully. On some devices, this can leave discovery.state stuck in DISCOVERY_FINDING. Signed-off-by: Linmao Li <lilinmao@kylinos.cn> Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
-rw-r--r--drivers/bluetooth/btusb.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index b16eb9d70dcf..1e01f8c855c9 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -4472,10 +4472,11 @@ static int btusb_suspend(struct usb_interface *intf, pm_message_t message)
BT_DBG("intf %p", intf);
- /* Don't auto-suspend if there are connections; external suspend calls
- * shall never fail.
+ /* Don't auto-suspend if there are connections or discovery in
+ * progress; external suspend calls shall never fail.
*/
- if (PMSG_IS_AUTO(message) && hci_conn_count(data->hdev))
+ if (PMSG_IS_AUTO(message) &&
+ (hci_conn_count(data->hdev) || hci_discovery_active(data->hdev)))
return -EBUSY;
if (data->suspend_count++)