Skip to content

Commit

Permalink
Bluetooth: btqca: Add support to read FW build version for WCN3991 BTSoC
Browse files Browse the repository at this point in the history
Add support to read FW build version for WCN3991 BTSoC

Signed-off-by: Venkata Lakshmi Narayana Gubba <gubbaven@codeaurora.org>
  • Loading branch information
Venkata Lakshmi Narayana Gubba authored and intel-lab-lkp committed Nov 17, 2020
1 parent 22fbcfc commit 773b13e
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 0 deletions.
57 changes: 57 additions & 0 deletions drivers/bluetooth/btqca.c
Expand Up @@ -101,6 +101,56 @@ int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version,
}
EXPORT_SYMBOL_GPL(qca_read_soc_version);

int qca_read_fw_build_info(struct hci_dev *hdev)
{
struct sk_buff *skb;
struct edl_event_hdr *edl;
char cmd;
int err = 0;
char build_label[QCA_FW_BUILD_VER_LEN];
int build_lbl_len;

bt_dev_dbg(hdev, "QCA read fw build info");

cmd = EDL_GET_BUILD_INFO_CMD;
skb = __hci_cmd_sync_ev(hdev, EDL_PATCH_CMD_OPCODE, EDL_PATCH_CMD_LEN,
&cmd, HCI_EV_VENDOR, HCI_INIT_TIMEOUT);
if (IS_ERR(skb)) {
err = PTR_ERR(skb);
bt_dev_err(hdev, "Reading QCA fw build info failed (%d)",
err);
return err;
}

edl = (struct edl_event_hdr *)(skb->data);
if (!edl) {
bt_dev_err(hdev, "QCA read fw build info with no header");
err = -EILSEQ;
goto out;
}

if (edl->cresp != EDL_CMD_REQ_RES_EVT ||
edl->rtype != EDL_GET_BUILD_INFO_CMD) {
bt_dev_err(hdev, "QCA Wrong packet received %d %d", edl->cresp,
edl->rtype);
err = -EIO;
goto out;
}

build_lbl_len = edl->data[0];
memcpy(build_label, &edl->data[1], build_lbl_len);
*(build_label + build_lbl_len) = '\0';

bt_dev_info(hdev, "BT SoC FW Build info: %s", build_label);

out:
kfree_skb(skb);
if (err)
bt_dev_err(hdev, "QCA read fw build info failed (%d)", err);

return err;
}

static int qca_send_reset(struct hci_dev *hdev)
{
struct sk_buff *skb;
Expand Down Expand Up @@ -520,6 +570,13 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
return err;
}

if (soc_type == QCA_WCN3991) {
/* get fw build info */
qca_read_fw_build_info(hdev);
if (err < 0)
return err;
}

bt_dev_info(hdev, "QCA setup on UART is completed");

return 0;
Expand Down
3 changes: 3 additions & 0 deletions drivers/bluetooth/btqca.h
Expand Up @@ -11,6 +11,7 @@
#define EDL_PATCH_CMD_LEN (1)
#define EDL_PATCH_VER_REQ_CMD (0x19)
#define EDL_PATCH_TLV_REQ_CMD (0x1E)
#define EDL_GET_BUILD_INFO_CMD (0x20)
#define EDL_NVM_ACCESS_SET_REQ_CMD (0x01)
#define MAX_SIZE_PER_TLV_SEGMENT (243)
#define QCA_PRE_SHUTDOWN_CMD (0xFC08)
Expand All @@ -34,6 +35,8 @@
#define QCA_HCI_CC_OPCODE 0xFC00
#define QCA_HCI_CC_SUCCESS 0x00

#define QCA_FW_BUILD_VER_LEN 255

enum qca_baudrate {
QCA_BAUDRATE_115200 = 0,
QCA_BAUDRATE_57600,
Expand Down

0 comments on commit 773b13e

Please sign in to comment.