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