forked from mirrors/linux
		
	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 <bgodavar@codeaurora.org> Reviewed-by: Matthias Kaehlcke <mka@chromium.org> Tested-by: Matthias Kaehlcke <mka@chromium.org> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
		
							parent
							
								
									fa7f3a8d56
								
							
						
					
					
						commit
						5c0a1001c8
					
				
					 3 changed files with 30 additions and 2 deletions
				
			
		|  | @ -391,6 +391,25 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate, | |||
| } | ||||
| EXPORT_SYMBOL_GPL(qca_uart_setup); | ||||
| 
 | ||||
| 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); | ||||
| 
 | ||||
| MODULE_AUTHOR("Ben Young Tae Kim <ytkim@qca.qualcomm.com>"); | ||||
| MODULE_DESCRIPTION("Bluetooth support for Qualcomm Atheros family ver " VERSION); | ||||
| MODULE_VERSION(VERSION); | ||||
|  |  | |||
|  | @ -20,6 +20,7 @@ | |||
| 
 | ||||
| #define EDL_PATCH_CMD_OPCODE		(0xFC00) | ||||
| #define EDL_NVM_ACCESS_OPCODE		(0xFC0B) | ||||
| #define EDL_WRITE_BD_ADDR_OPCODE	(0xFC14) | ||||
| #define EDL_PATCH_CMD_LEN		(1) | ||||
| #define EDL_PATCH_VER_REQ_CMD		(0x19) | ||||
| #define EDL_PATCH_TLV_REQ_CMD		(0x1E) | ||||
|  | @ -140,7 +141,7 @@ int qca_set_bdaddr_rome(struct hci_dev *hdev, const bdaddr_t *bdaddr); | |||
| int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate, | ||||
| 		   enum qca_btsoc_type soc_type, u32 soc_ver); | ||||
| int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version); | ||||
| 
 | ||||
| int qca_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr); | ||||
| #else | ||||
| 
 | ||||
| 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) | |||
| 	return -EOPNOTSUPP; | ||||
| } | ||||
| 
 | ||||
| static inline int qca_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr) | ||||
| { | ||||
| 	return -EOPNOTSUPP; | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
|  |  | |||
|  | @ -1241,6 +1241,9 @@ static int qca_setup(struct hci_uart *hu) | |||
| 	} | ||||
| 
 | ||||
| 	/* Setup bdaddr */ | ||||
| 	if (qcadev->btsoc_type == QCA_WCN3990) | ||||
| 		hu->hdev->set_bdaddr = qca_set_bdaddr; | ||||
| 	else | ||||
| 		hu->hdev->set_bdaddr = qca_set_bdaddr_rome; | ||||
| 
 | ||||
| 	return ret; | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Balakrishna Godavarthi
						Balakrishna Godavarthi