Thread (18 messages) flat view 18 messages, 2 authors, 2021-11-24

Re: [PATCH v4 05/14] Bluetooth: btintel: Add support to fetch data path id for a2dp offload

From: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
Date: 2021-11-23 23:49:55

Hi Kiran,

On Fri, Nov 19, 2021 at 12:16 AM Kiran K [off-list ref] wrote:
quoted hunk ↗ jump to hunk
During *setup*, when configuring offload, set get_data_path_id callback
function and support fetching of data path id for a2dp offload use case.

Signed-off-by: Kiran K <redacted>
Reviewed-by: Chethan T N <redacted>
Reviewed-by: Srivatsa Ravishankar <redacted>
---
 drivers/bluetooth/btintel.c | 28 +++++++++++++++++++++++-----
 1 file changed, 23 insertions(+), 5 deletions(-)
diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c
index 4b6d7ea08425..1501376ccf72 100644
--- a/drivers/bluetooth/btintel.c
+++ b/drivers/bluetooth/btintel.c
@@ -2214,16 +2214,30 @@ static int btintel_get_data_path_id(struct hci_dev *hdev, __u8 transport,
 {
        struct btintel_data *intel_data;

-       if (transport != HCI_TRANSPORT_SCO_ESCO)
+       if (transport != HCI_TRANSPORT_SCO_ESCO &&
+           transport != HCI_TRANSPORT_ACL) {
+               bt_dev_err(hdev, "Invalid transport type %u", transport);
                return -EINVAL;
+       }

        intel_data = hci_get_priv((hdev));

-       if (intel_data->use_cases.preset[0] & 0x03) {
-               /* Intel uses 1 as data path id for all the usecases */
-               *data_path_id = 1;
-               return 0;
+       switch (transport) {
+       case HCI_TRANSPORT_SCO_ESCO:
+               if (intel_data->use_cases.preset[0] & 0x03) {
+                       *data_path_id = 1;
+                       return 0;
+               }
+               break;
+       case HCI_TRANSPORT_ACL:
+               if (intel_data->use_cases.preset[0] & 0x08) {
+                       *data_path_id = 1;
+                       return 0;
+               }
I would suggest adding the bits of use_cases as defines using BIT
macro, it may also be a good idea to check if the preset should
actually be a bitmap and then use the likes of test_bit, etc.
quoted hunk ↗ jump to hunk
+               break;
        }
+       bt_dev_err(hdev, "Required preset is not supported 0x%02x",
+                  intel_data->use_cases.preset[0]);
        return  -EOPNOTSUPP;
 }
@@ -2262,6 +2276,10 @@ static int btintel_configure_offload(struct hci_dev *hdev)
                hdev->get_codec_config_data = btintel_get_codec_config_data;
        }

+       /* supports SBC codec for a2dp offload */
+       if (use_cases->preset[0] & 0x08)
+               hdev->get_data_path_id = btintel_get_data_path_id;
This seems to be checking only for one of the use cases. How about
SCO/ESCO, doesn't that use get_data_path_id as well?
 error:
        kfree_skb(skb);
        return err;
--
2.17.1

-- 
Luiz Augusto von Dentz
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help