[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20241113-x13s_wcn6855_fix-v1-1-15af0aa2549c@quicinc.com>
Date: Wed, 13 Nov 2024 22:26:56 -0800
From: Zijun Hu <quic_zijuhu@...cinc.com>
To: Marcel Holtmann <marcel@...tmann.org>,
Luiz Augusto von Dentz
<luiz.dentz@...il.com>
CC: Zijun Hu <zijun_hu@...oud.com>, <linux-bluetooth@...r.kernel.org>,
<linux-kernel@...r.kernel.org>, Bjorn Andersson <bjorande@...cinc.com>,
"Aiqun Yu (Maria)" <quic_aiquny@...cinc.com>,
Cheng Jiang
<quic_chejiang@...cinc.com>,
Johan Hovold <johan@...nel.org>,
Jens Glathe
<jens.glathe@...schoolsolutions.biz>,
Steev Klimaszewski <steev@...i.org>,
Zijun Hu <quic_zijuhu@...cinc.com>
Subject: [PATCH] Bluetooth: qca: Support downloading board id specific NVM
for WCN6855
Download board id specific NVM instead of default for WCN6855 if board
id is available, and that is required by Lenovo ThinkPad X13s.
Cc: Bjorn Andersson <bjorande@...cinc.com>
Cc: Aiqun Yu (Maria) <quic_aiquny@...cinc.com>
Cc: Cheng Jiang <quic_chejiang@...cinc.com>
Cc: Johan Hovold <johan@...nel.org>
Cc: Jens Glathe <jens.glathe@...schoolsolutions.biz>
Cc: Steev Klimaszewski <steev@...i.org>
Signed-off-by: Zijun Hu <quic_zijuhu@...cinc.com>
---
drivers/bluetooth/btqca.c | 35 ++++++++++++++++++++++++++++++++---
1 file changed, 32 insertions(+), 3 deletions(-)
diff --git a/drivers/bluetooth/btqca.c b/drivers/bluetooth/btqca.c
index dfbbac92242a..4f8576cbbab9 100644
--- a/drivers/bluetooth/btqca.c
+++ b/drivers/bluetooth/btqca.c
@@ -717,6 +717,29 @@ static void qca_generate_hsp_nvm_name(char *fwname, size_t max_size,
snprintf(fwname, max_size, "qca/hpnv%02x%s.%x", rom_ver, variant, bid);
}
+static void qca_get_hsp_nvm_name_generic(struct qca_fw_config *cfg,
+ struct qca_btsoc_version ver,
+ u8 rom_ver, u16 bid)
+{
+ const char *variant;
+
+ /* hsp gf chip */
+ if ((le32_to_cpu(ver.soc_id) & QCA_HSP_GF_SOC_MASK) == QCA_HSP_GF_SOC_ID)
+ variant = "g";
+ else
+ variant = "";
+
+ if (bid == 0x0)
+ snprintf(cfg->fwname, sizeof(cfg->fwname), "qca/hpnv%02x%s.bin",
+ rom_ver, variant);
+ else if (bid & 0xff00)
+ snprintf(cfg->fwname, sizeof(cfg->fwname), "qca/hpnv%02x%s.b%x",
+ rom_ver, variant, bid);
+ else
+ snprintf(cfg->fwname, sizeof(cfg->fwname), "qca/hpnv%02x%s.b%02x",
+ rom_ver, variant, bid);
+}
+
static inline void qca_get_nvm_name_generic(struct qca_fw_config *cfg,
const char *stem, u8 rom_ver, u16 bid)
{
@@ -810,8 +833,15 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
/* Give the controller some time to get ready to receive the NVM */
msleep(10);
- if (soc_type == QCA_QCA2066 || soc_type == QCA_WCN7850)
+ switch (soc_type) {
+ case QCA_QCA2066:
+ case QCA_WCN6855:
+ case QCA_WCN7850:
qca_read_fw_board_id(hdev, &boardid);
+ break;
+ default:
+ break;
+ }
/* Download NVM configuration */
config.type = TLV_TYPE_NVM;
@@ -848,8 +878,7 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
"qca/msnv%02x.bin", rom_ver);
break;
case QCA_WCN6855:
- snprintf(config.fwname, sizeof(config.fwname),
- "qca/hpnv%02x.bin", rom_ver);
+ qca_get_hsp_nvm_name_generic(&config, ver, rom_ver, boardid);
break;
case QCA_WCN7850:
qca_get_nvm_name_generic(&config, "hmt", rom_ver, boardid);
---
base-commit: e88b020190bf5bc3e7ce5bd8003fc39b23cc95fe
change-id: 20241113-x13s_wcn6855_fix-53c573ff7878
Best regards,
--
Zijun Hu <quic_zijuhu@...cinc.com>
Powered by blists - more mailing lists