diff mbox series

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

Message ID 20211119082027.12809-5-kiran.k@intel.com (mailing list archive)
State Changes Requested
Headers show
Series [v4,01/14] Bluetooth: Refactor code to read supported codecs in getsockopt | expand

Checks

Context Check Description
tedd_an/checkpatch success Checkpatch PASS
tedd_an/gitlint fail [v4,05/14] Bluetooth: btintel: Add support to fetch data path id for a2dp offload 1: T1 Title exceeds max length (81>80): "[v4,05/14] Bluetooth: btintel: Add support to fetch data path id for a2dp offload"

Commit Message

K, Kiran Nov. 19, 2021, 8:20 a.m. UTC
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 <kiran.k@intel.com>
Reviewed-by: Chethan T N <chethan.tumkur.narayan@intel.com>
Reviewed-by: Srivatsa Ravishankar <ravishankar.srivatsa@intel.com>
---
 drivers/bluetooth/btintel.c | 28 +++++++++++++++++++++++-----
 1 file changed, 23 insertions(+), 5 deletions(-)

Comments

Luiz Augusto von Dentz Nov. 23, 2021, 11:49 p.m. UTC | #1
Hi Kiran,

On Fri, Nov 19, 2021 at 12:16 AM Kiran K <kiran.k@intel.com> wrote:
>
> 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 <kiran.k@intel.com>
> Reviewed-by: Chethan T N <chethan.tumkur.narayan@intel.com>
> Reviewed-by: Srivatsa Ravishankar <ravishankar.srivatsa@intel.com>
> ---
>  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.

> +               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
>
diff mbox series

Patch

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;
+		}
+		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;
+
 error:
 	kfree_skb(skb);
 	return err;