Re: [PATCH v1] Bluetooth: btusb: Add Qualcomm Bluetooth SoC WCN6855 support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Marcel,

在 2020-09-14 21:25,Marcel Holtmann 写道:
Hi Rocky,

This patch add support for WCN6855 i.e. patch and nvm download
support.
Signed-off-by: Rocky Liao <rjliao@xxxxxxxxxxxxxx>
---
drivers/bluetooth/btusb.c | 42 +++++++++++++++++++++++++++++++++++----
1 file changed, 38 insertions(+), 4 deletions(-)
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index fe80588c7bd3..e51e754ca9b8 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -59,6 +59,7 @@ static struct usb_driver btusb_driver;
#define BTUSB_MEDIATEK		0x200000
#define BTUSB_WIDEBAND_SPEECH	0x400000
#define BTUSB_VALID_LE_STATES   0x800000
+#define BTUSB_QCA_WCN6855	0x1000000
static const struct usb_device_id btusb_table[] = {
	/* Generic Bluetooth USB device */
@@ -273,6 +274,10 @@ static const struct usb_device_id blacklist_table[] = {
	{ USB_DEVICE(0x13d3, 0x3496), .driver_info = BTUSB_QCA_ROME },
	{ USB_DEVICE(0x13d3, 0x3501), .driver_info = BTUSB_QCA_ROME },
+	/* QCA WCN6855 chipset */
+	{ USB_DEVICE(0x0cf3, 0xe600), .driver_info = BTUSB_QCA_WCN6855 |
+						     BTUSB_WIDEBAND_SPEECH },
+
	/* Broadcom BCM2035 */
	{ USB_DEVICE(0x0a5c, 0x2009), .driver_info = BTUSB_BCM92035 },
	{ USB_DEVICE(0x0a5c, 0x200a), .driver_info = BTUSB_WRONG_SCO_MTU },
@@ -3391,6 +3396,26 @@ static int btusb_set_bdaddr_ath3012(struct hci_dev *hdev,
	return 0;
}
+static int btusb_set_bdaddr_wcn6855(struct hci_dev *hdev,
+				const bdaddr_t *bdaddr)
+{
+	struct sk_buff *skb;
+	u8 buf[6];
+	long ret;
+
+	memcpy(buf, bdaddr, sizeof(bdaddr_t));
+
+ skb = __hci_cmd_sync(hdev, 0xfc14, sizeof(buf), buf, HCI_INIT_TIMEOUT);
+	if (IS_ERR(skb)) {
+		ret = PTR_ERR(skb);
+		bt_dev_err(hdev, "Change address command failed (%ld)", ret);
+		return ret;
+	}
+	kfree_skb(skb);
+
+	return 0;
+}
What is wrong with using qca_set_bdaddr() function.
WCN6855 is using different VSC to set the bt addr

int qca_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr)

{

        struct sk_buff *skb;

        int err;



        skb = __hci_cmd_sync_ev(hdev, EDL_WRITE_BD_ADDR_OPCODE, 6,
bdaddr,
                                HCI_EV_VENDOR, HCI_INIT_TIMEOUT);

        if (IS_ERR(skb)) {

                err = PTR_ERR(skb);

                bt_dev_err(hdev, "QCA Change address cmd failed (%d)",
err);
                return err;

        }



        kfree_skb(skb);



        return 0;

}

EXPORT_SYMBOL_GPL(qca_set_bdaddr);

I see that the other command is using HCI_EV_VENDOR, but is that on
purpose or an accident? Might want to confirm with the btmon trace.


You are right this is an accident, this command for WCN6855 have command complete event return. I will modify this in next patch update. Below is the btmon log:

Bluetooth monitor ver 5.48
= Note: Linux version 5.8.0-rc6-hsp-upstream+ (x86_64) 0.729933 = Note: Bluetooth subsystem version 2.22 0.729934 = New Index: 00:00:00:00:5A:AD (Primary,USB,hci1) [hci1] 0.729935 = Open Index: 00:00:00:00:5A:AD [hci1] 0.729935 = Index Info: 00:00:00:00:5A:AD (Qualcomm) [hci1] 0.729935 = New Index: 00:00:00:00:00:00 (Primary,UART,hci0) [hci0] 0.729936 @ MGMT Open: bluetoothd (privileged) version 1.18 {0x0002} 0.729936 @ MGMT Open: bluetoothd (privileged) version 1.18 {0x0001} 0.729936 @ MGMT Open: btmon (privileged) version 1.18 {0x0003} 0.729945 @ RAW Open: hcitool (privileged) version 2.22 {0x0004} 122.556176 @ RAW Close: hcitool {0x0004} 122.556200 @ RAW Open: hcitool (privileged) version 2.22 {0x0004} 122.556219 @ RAW Close: hcitool {0x0004} 122.556223 @ RAW Open: hcitool (privileged) version 2.22 {0x0004} [hci1] 122.556242 < HCI Command: Vendor (0x3f|0x0014) plen 6 #1 [hci1] 122.556643
        01 02 03 04 05 06                                ......
HCI Event: Command Complete (0x0e) plen 4 #2 [hci1] 122.675312
      Vendor (0x3f|0x0014) ncmd 1
        Status: Success (0x00)
@ RAW Close: hcitool {0x0004} [hci1] 122.675545 @ RAW Open: hcitool (privileged) version 2.22 {0x0004} 124.528658 @ RAW Close: hcitool {0x0004} 124.528683 @ RAW Open: hcitool (privileged) version 2.22 {0x0004} 124.528703 @ RAW Close: hcitool {0x0004} 124.528708 @ RAW Open: hcitool (privileged) version 2.22 {0x0004} [hci1] 124.528760 < HCI Command: Read BD ADDR (0x04|0x0009) plen 0 #3 [hci1] 124.529024
HCI Event: Command Complete (0x0e) plen 10 #4 [hci1] 124.530311
      Read BD ADDR (0x04|0x0009) ncmd 1
        Status: Success (0x00)
        Address: 01:02:03:04:05:06 (OUI 01-02-03)
@ RAW Close: hcitool {0x0004} [hci1] 124.530509



Regards

Marcel



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [Linux for Sparc]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux