[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <0C779191-3BD1-40BF-83E6-733F9C78EA03@holtmann.org>
Date: Mon, 14 Sep 2020 15:25:47 +0200
From: Marcel Holtmann <marcel@...tmann.org>
To: Rocky Liao <rjliao@...eaurora.org>
Cc: Johan Hedberg <johan.hedberg@...il.com>,
open list <linux-kernel@...r.kernel.org>,
linux-bluetooth <linux-bluetooth@...r.kernel.org>,
MSM <linux-arm-msm@...r.kernel.org>,
Balakrishna Godavarthi <bgodavar@...eaurora.org>,
c-hbandi@...eaurora.org, Hemantg <hemantg@...eaurora.org>,
mka@...omium.org, linux-bluetooth-owner@...r.kernel.org
Subject: Re: [PATCH v1] Bluetooth: btusb: Add Qualcomm Bluetooth SoC WCN6855
support
Hi Rocky,
>>> This patch add support for WCN6855 i.e. patch and nvm download
>>> support.
>>> Signed-off-by: Rocky Liao <rjliao@...eaurora.org>
>>> ---
>>> 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
Powered by blists - more mailing lists