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

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

 



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.

Regards

Marcel




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux