Skip to content

Commit 5c0a100

Browse files
bgodavarholtmann
authored andcommitted
Bluetooth: hci_qca: Add helper to set device address
This patch add qca_set_bdaddr() to set the device address for latest Qualcomm Bluetooth chipset wcn3990 and above. Signed-off-by: Balakrishna Godavarthi <[email protected]> Reviewed-by: Matthias Kaehlcke <[email protected]> Tested-by: Matthias Kaehlcke <[email protected]> Signed-off-by: Marcel Holtmann <[email protected]>
1 parent fa7f3a8 commit 5c0a100

File tree

3 files changed

+30
-2
lines changed

3 files changed

+30
-2
lines changed

drivers/bluetooth/btqca.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,25 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
391391
}
392392
EXPORT_SYMBOL_GPL(qca_uart_setup);
393393

394+
int qca_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr)
395+
{
396+
struct sk_buff *skb;
397+
int err;
398+
399+
skb = __hci_cmd_sync_ev(hdev, EDL_WRITE_BD_ADDR_OPCODE, 6, bdaddr,
400+
HCI_EV_VENDOR, HCI_INIT_TIMEOUT);
401+
if (IS_ERR(skb)) {
402+
err = PTR_ERR(skb);
403+
bt_dev_err(hdev, "QCA Change address cmd failed (%d)", err);
404+
return err;
405+
}
406+
407+
kfree_skb(skb);
408+
409+
return 0;
410+
}
411+
EXPORT_SYMBOL_GPL(qca_set_bdaddr);
412+
394413
MODULE_AUTHOR("Ben Young Tae Kim <[email protected]>");
395414
MODULE_DESCRIPTION("Bluetooth support for Qualcomm Atheros family ver " VERSION);
396415
MODULE_VERSION(VERSION);

drivers/bluetooth/btqca.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
#define EDL_PATCH_CMD_OPCODE (0xFC00)
2222
#define EDL_NVM_ACCESS_OPCODE (0xFC0B)
23+
#define EDL_WRITE_BD_ADDR_OPCODE (0xFC14)
2324
#define EDL_PATCH_CMD_LEN (1)
2425
#define EDL_PATCH_VER_REQ_CMD (0x19)
2526
#define EDL_PATCH_TLV_REQ_CMD (0x1E)
@@ -140,7 +141,7 @@ int qca_set_bdaddr_rome(struct hci_dev *hdev, const bdaddr_t *bdaddr);
140141
int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
141142
enum qca_btsoc_type soc_type, u32 soc_ver);
142143
int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version);
143-
144+
int qca_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr);
144145
#else
145146

146147
static inline int qca_set_bdaddr_rome(struct hci_dev *hdev, const bdaddr_t *bdaddr)
@@ -159,4 +160,9 @@ static inline int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version)
159160
return -EOPNOTSUPP;
160161
}
161162

163+
static inline int qca_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr)
164+
{
165+
return -EOPNOTSUPP;
166+
}
167+
162168
#endif

drivers/bluetooth/hci_qca.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1241,7 +1241,10 @@ static int qca_setup(struct hci_uart *hu)
12411241
}
12421242

12431243
/* Setup bdaddr */
1244-
hu->hdev->set_bdaddr = qca_set_bdaddr_rome;
1244+
if (qcadev->btsoc_type == QCA_WCN3990)
1245+
hu->hdev->set_bdaddr = qca_set_bdaddr;
1246+
else
1247+
hu->hdev->set_bdaddr = qca_set_bdaddr_rome;
12451248

12461249
return ret;
12471250
}

0 commit comments

Comments
 (0)