diff mbox series

[v8,4/9] Bluetooth: btitnel: Add a callback function to retireve data path

Message ID 20210518104232.5431-4-kiran.k@intel.com
State New
Headers show
Series [v8,1/9] Bluetooth: enumerate local supported codec and cache details | expand

Commit Message

K, Kiran May 18, 2021, 10:42 a.m. UTC
There is no standard HCI command to retrieve data path for transport.
Add a new callback function to retrieve data path which is used
in offload usecase.

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>
---

This callback gets called when audio module queries codecs suppoted
on SCO socket. For Intel controllers, data_path is always 1

 drivers/bluetooth/btintel.c      | 8 ++++++++
 drivers/bluetooth/btintel.h      | 6 ++++++
 drivers/bluetooth/btusb.c        | 1 +
 include/net/bluetooth/hci_core.h | 1 +
 4 files changed, 16 insertions(+)

Comments

Marcel Holtmann June 3, 2021, 2:29 p.m. UTC | #1
Hi Kiran,

> There is no standard HCI command to retrieve data path for transport.

> Add a new callback function to retrieve data path which is used

> in offload usecase.

> 

> 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>

> ---

> 

> This callback gets called when audio module queries codecs suppoted

> on SCO socket. For Intel controllers, data_path is always 1

> 

> drivers/bluetooth/btintel.c      | 8 ++++++++

> drivers/bluetooth/btintel.h      | 6 ++++++

> drivers/bluetooth/btusb.c        | 1 +

> include/net/bluetooth/hci_core.h | 1 +

> 4 files changed, 16 insertions(+)

> 

> diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c

> index e3ad19244054..8407e9736c62 100644

> --- a/drivers/bluetooth/btintel.c

> +++ b/drivers/bluetooth/btintel.c

> @@ -1300,6 +1300,14 @@ int btintel_read_offload_usecases(struct hci_dev *hdev)

> }

> EXPORT_SYMBOL_GPL(btintel_read_offload_usecases);

> 

> +int btintel_get_data_path_id(struct hci_dev *hdev)

> +{

> +	if (!test_bit(HCI_QUIRK_HFP_OFFLOAD_CODECS_SUPPORTED, &hdev->quirks))

> +		return -EOPNOTSUPP;

> +	return 1;

> +}

> +EXPORT_SYMBOL_GPL(btintel_get_data_path_id);

> +


actually lets not do it this way. Only set the get_data_path_id callback if offloading is supported and with that we don’t actually need to quirk either. If it is set, we know that we can offload.

Regards

Marcel
K, Kiran June 8, 2021, 11:56 a.m. UTC | #2
Hi Marcel,

> > This callback gets called when audio module queries codecs suppoted on

> > SCO socket. For Intel controllers, data_path is always 1

> >

> > drivers/bluetooth/btintel.c      | 8 ++++++++

> > drivers/bluetooth/btintel.h      | 6 ++++++

> > drivers/bluetooth/btusb.c        | 1 +

> > include/net/bluetooth/hci_core.h | 1 +

> > 4 files changed, 16 insertions(+)

> >

> > diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c

> > index e3ad19244054..8407e9736c62 100644

> > --- a/drivers/bluetooth/btintel.c

> > +++ b/drivers/bluetooth/btintel.c

> > @@ -1300,6 +1300,14 @@ int btintel_read_offload_usecases(struct

> > hci_dev *hdev) } EXPORT_SYMBOL_GPL(btintel_read_offload_usecases);

> >

> > +int btintel_get_data_path_id(struct hci_dev *hdev) {

> > +	if (!test_bit(HCI_QUIRK_HFP_OFFLOAD_CODECS_SUPPORTED,

> &hdev->quirks))

> > +		return -EOPNOTSUPP;

> > +	return 1;

> > +}

> > +EXPORT_SYMBOL_GPL(btintel_get_data_path_id);

> > +

> 

> actually lets not do it this way. Only set the get_data_path_id callback if

> offloading is supported and with that we don’t actually need to quirk either.

> If it is set, we know that we can offload.

> 


Ack.

Thanks,
Kiran
diff mbox series

Patch

diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c
index e3ad19244054..8407e9736c62 100644
--- a/drivers/bluetooth/btintel.c
+++ b/drivers/bluetooth/btintel.c
@@ -1300,6 +1300,14 @@  int btintel_read_offload_usecases(struct hci_dev *hdev)
 }
 EXPORT_SYMBOL_GPL(btintel_read_offload_usecases);
 
+int btintel_get_data_path_id(struct hci_dev *hdev)
+{
+	if (!test_bit(HCI_QUIRK_HFP_OFFLOAD_CODECS_SUPPORTED, &hdev->quirks))
+		return -EOPNOTSUPP;
+	return 1;
+}
+EXPORT_SYMBOL_GPL(btintel_get_data_path_id);
+
 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
 MODULE_DESCRIPTION("Bluetooth support for Intel devices ver " VERSION);
 MODULE_VERSION(VERSION);
diff --git a/drivers/bluetooth/btintel.h b/drivers/bluetooth/btintel.h
index d561d4899b1b..6d4edfd16d44 100644
--- a/drivers/bluetooth/btintel.h
+++ b/drivers/bluetooth/btintel.h
@@ -176,6 +176,7 @@  int btintel_read_debug_features(struct hci_dev *hdev,
 int btintel_set_debug_features(struct hci_dev *hdev,
 			       const struct intel_debug_features *features);
 int btintel_read_offload_usecases(struct hci_dev *hdev);
+int btintel_get_data_path_id(struct hci_dev *hdev);
 #else
 
 static inline int btintel_check_bdaddr(struct hci_dev *hdev)
@@ -312,4 +313,9 @@  static int btintel_read_offload_usecases(struct hci_dev *hdev)
 {
 	return -EOPNOTSUPP;
 }
+
+static int btintel_get_data_path_id(struct hci_dev *hdev)
+{
+	return -EOPNOTSUPP;
+}
 #endif
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index ac245df5fa18..f7b349db392a 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -4631,6 +4631,7 @@  static int btusb_probe(struct usb_interface *intf,
 		hdev->set_diag = btintel_set_diag;
 		hdev->set_bdaddr = btintel_set_bdaddr;
 		hdev->cmd_timeout = btusb_intel_cmd_timeout;
+		hdev->get_data_path_id = btintel_get_data_path_id;
 		set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks);
 		set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks);
 		set_bit(HCI_QUIRK_NON_PERSISTENT_DIAG, &hdev->quirks);
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
index cdc9580ff264..78d1ebab58f6 100644
--- a/include/net/bluetooth/hci_core.h
+++ b/include/net/bluetooth/hci_core.h
@@ -617,6 +617,7 @@  struct hci_dev {
 	int (*set_bdaddr)(struct hci_dev *hdev, const bdaddr_t *bdaddr);
 	void (*cmd_timeout)(struct hci_dev *hdev);
 	bool (*prevent_wake)(struct hci_dev *hdev);
+	int (*get_data_path_id)(struct hci_dev *hdev);
 };
 
 #define HCI_PHY_HANDLE(handle)	(handle & 0xff)