OSDN Git Service

Bluetooth: Allow usb to auto-suspend when SCO use non-HCI transport
authorChethan T N <chethan.tumkur.narayan@intel.com>
Tue, 7 Sep 2021 10:12:48 +0000 (15:42 +0530)
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Tue, 7 Sep 2021 21:09:18 +0000 (14:09 -0700)
Currently usb tranport is not allowed to suspend when SCO over
HCI tranport is active.

This patch shall enable the usb tranport to suspend when SCO
link use non-HCI transport.

Signed-off-by: Chethan T N <chethan.tumkur.narayan@intel.com>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
net/bluetooth/hci_event.c

index b48e246..fdf51f8 100644 (file)
@@ -4444,6 +4444,7 @@ static void hci_sync_conn_complete_evt(struct hci_dev *hdev,
 {
        struct hci_ev_sync_conn_complete *ev = (void *) skb->data;
        struct hci_conn *conn;
+       unsigned int notify_evt;
 
        BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
 
@@ -4518,15 +4519,21 @@ static void hci_sync_conn_complete_evt(struct hci_dev *hdev,
 
        switch (ev->air_mode) {
        case 0x02:
-               if (hdev->notify)
-                       hdev->notify(hdev, HCI_NOTIFY_ENABLE_SCO_CVSD);
+               notify_evt = HCI_NOTIFY_ENABLE_SCO_CVSD;
                break;
        case 0x03:
-               if (hdev->notify)
-                       hdev->notify(hdev, HCI_NOTIFY_ENABLE_SCO_TRANSP);
+               notify_evt = HCI_NOTIFY_ENABLE_SCO_TRANSP;
                break;
        }
 
+       /* Notify only in case of SCO over HCI transport data path which
+        * is zero and non-zero value shall be non-HCI transport data path
+        */
+       if (conn->codec.data_path == 0) {
+               if (hdev->notify)
+                       hdev->notify(hdev, notify_evt);
+       }
+
        hci_connect_cfm(conn, ev->status);
        if (ev->status)
                hci_conn_del(conn);