summarylogtreecommitdiffstats
path: root/0003-Bluetooth-Read-codec-capabilities-only-if-supported.patch
diff options
context:
space:
mode:
Diffstat (limited to '0003-Bluetooth-Read-codec-capabilities-only-if-supported.patch')
-rw-r--r--0003-Bluetooth-Read-codec-capabilities-only-if-supported.patch56
1 files changed, 56 insertions, 0 deletions
diff --git a/0003-Bluetooth-Read-codec-capabilities-only-if-supported.patch b/0003-Bluetooth-Read-codec-capabilities-only-if-supported.patch
new file mode 100644
index 000000000000..9b8e948cb97e
--- /dev/null
+++ b/0003-Bluetooth-Read-codec-capabilities-only-if-supported.patch
@@ -0,0 +1,56 @@
+From db071152c6a3ebcc82426cbd2ce97d74ba3f6513 Mon Sep 17 00:00:00 2001
+From: Kiran K <kiran.k@intel.com>
+Date: Tue, 5 Oct 2021 20:15:56 +0530
+Subject: [PATCH 3/4] Bluetooth: Read codec capabilities only if supported
+
+Read codec capabilities only if HCI_READ_LOCAL_CODEC_CAPABILITIES
+command is supported. If capablities are not supported, then
+cache codec data without caps.
+
+Signed-off-by: Kiran K <kiran.k@intel.com>
+Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
+For: https://bugs.archlinux.org/task/73454
+---
+ net/bluetooth/hci_codec.c | 18 ++++++++++++++++--
+ 1 file changed, 16 insertions(+), 2 deletions(-)
+
+diff --git a/net/bluetooth/hci_codec.c b/net/bluetooth/hci_codec.c
+index f0421d0edaa3..38201532f58e 100644
+--- a/net/bluetooth/hci_codec.c
++++ b/net/bluetooth/hci_codec.c
+@@ -25,9 +25,11 @@ static int hci_codec_list_add(struct list_head *list,
+ }
+ entry->transport = sent->transport;
+ entry->len = len;
+- entry->num_caps = rp->num_caps;
+- if (rp->num_caps)
++ entry->num_caps = 0;
++ if (rp) {
++ entry->num_caps = rp->num_caps;
+ memcpy(entry->caps, caps, len);
++ }
+ list_add(&entry->list, list);
+
+ return 0;
+@@ -58,6 +60,18 @@ static void hci_read_codec_capabilities(struct hci_dev *hdev, __u8 transport,
+ __u32 len;
+
+ cmd->transport = i;
++
++ /* If Read_Codec_Capabilities command is not supported
++ * then just add codec to the list without caps
++ */
++ if (!(hdev->commands[45] & 0x08)) {
++ hci_dev_lock(hdev);
++ hci_codec_list_add(&hdev->local_codecs, cmd,
++ NULL, NULL, 0);
++ hci_dev_unlock(hdev);
++ continue;
++ }
++
+ skb = __hci_cmd_sync(hdev, HCI_OP_READ_LOCAL_CODEC_CAPS,
+ sizeof(*cmd), cmd,
+ HCI_CMD_TIMEOUT);
+--
+2.35.0
+