aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/generic/backport-5.15/821-v5.16-Bluetooth-btusb-Support-public-address-configuration.patch
diff options
context:
space:
mode:
authorDaniel Golle <daniel@makrotopia.org>2022-09-09 20:46:33 +0100
committerDaniel Golle <daniel@makrotopia.org>2022-09-09 21:08:37 +0100
commitf755c4103814cc99fd2c9701ba05aaff1884fc89 (patch)
tree05386dd4f50e972bcdbcc681665ef66779f11304 /target/linux/generic/backport-5.15/821-v5.16-Bluetooth-btusb-Support-public-address-configuration.patch
parentf97fbd8a9adb481d195cecbcf0b1b19322dc9709 (diff)
downloadupstream-f755c4103814cc99fd2c9701ba05aaff1884fc89.tar.gz
upstream-f755c4103814cc99fd2c9701ba05aaff1884fc89.tar.bz2
upstream-f755c4103814cc99fd2c9701ba05aaff1884fc89.zip
kernel: backport MediaTek USB Bluetooth additions
Backport commits from linux.git adding support for various MT7921 Bluetooth USB IDs. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Diffstat (limited to 'target/linux/generic/backport-5.15/821-v5.16-Bluetooth-btusb-Support-public-address-configuration.patch')
-rw-r--r--target/linux/generic/backport-5.15/821-v5.16-Bluetooth-btusb-Support-public-address-configuration.patch51
1 files changed, 51 insertions, 0 deletions
diff --git a/target/linux/generic/backport-5.15/821-v5.16-Bluetooth-btusb-Support-public-address-configuration.patch b/target/linux/generic/backport-5.15/821-v5.16-Bluetooth-btusb-Support-public-address-configuration.patch
new file mode 100644
index 0000000000..feaabc9d11
--- /dev/null
+++ b/target/linux/generic/backport-5.15/821-v5.16-Bluetooth-btusb-Support-public-address-configuration.patch
@@ -0,0 +1,51 @@
+From 5cb03751455c299b1bf10cb48631bf359cfb11b5 Mon Sep 17 00:00:00 2001
+From: "mark-yw.chen" <mark-yw.chen@mediatek.com>
+Date: Wed, 1 Sep 2021 11:32:25 +0800
+Subject: [PATCH 1/5] Bluetooth: btusb: Support public address configuration
+ for MediaTek Chip.
+
+The MediaTek chip support vendor specific HCI command(0xfc1a) to
+change the public address. Add hdev->set_bdaddr handler for MediaTek
+Chip. After doing a power cycle or MediaTek Bluetooth reset, BD_ADDR
+will bring back the original one.
+
+Signed-off-by: mark-yw.chen <mark-yw.chen@mediatek.com>
+Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
+---
+ drivers/bluetooth/btusb.c | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+--- a/drivers/bluetooth/btusb.c
++++ b/drivers/bluetooth/btusb.c
+@@ -2263,6 +2263,23 @@ struct btmtk_section_map {
+ };
+ } __packed;
+
++static int btusb_set_bdaddr_mtk(struct hci_dev *hdev, const bdaddr_t *bdaddr)
++{
++ struct sk_buff *skb;
++ long ret;
++
++ skb = __hci_cmd_sync(hdev, 0xfc1a, sizeof(bdaddr), bdaddr, HCI_INIT_TIMEOUT);
++ if (IS_ERR(skb)) {
++ ret = PTR_ERR(skb);
++ bt_dev_err(hdev, "changing Mediatek device address failed (%ld)",
++ ret);
++ return ret;
++ }
++ kfree_skb(skb);
++
++ return 0;
++}
++
+ static void btusb_mtk_wmt_recv(struct urb *urb)
+ {
+ struct hci_dev *hdev = urb->context;
+@@ -3900,6 +3917,7 @@ static int btusb_probe(struct usb_interf
+ hdev->shutdown = btusb_mtk_shutdown;
+ hdev->manufacturer = 70;
+ hdev->cmd_timeout = btusb_mtk_cmd_timeout;
++ hdev->set_bdaddr = btusb_set_bdaddr_mtk;
+ set_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks);
+ data->recv_acl = btusb_recv_acl_mtk;
+ }