Re: [PATCH] Bluetooth: qca: Support downloading board id specific NVM for WCN6855

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 14.11.24 07:26, Zijun Hu wrote:
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@xxxxxxxxxxx>
Cc: Aiqun Yu (Maria) <quic_aiquny@xxxxxxxxxxx>
Cc: Cheng Jiang <quic_chejiang@xxxxxxxxxxx>
Cc: Johan Hovold <johan@xxxxxxxxxx>
Cc: Jens Glathe <jens.glathe@xxxxxxxxxxxxxxxxxxxxxx>
Cc: Steev Klimaszewski <steev@xxxxxxxx>
Signed-off-by: Zijun Hu <quic_zijuhu@xxxxxxxxxxx>
---
  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,

Hi Zijun,

I tested his patch on the HP Omnibook X14 and on the Windows Dev Kit
2023, it works well. Thank you!

Tested-by: Jens Glathe <jens.glathe@xxxxxxxxxxxxxxxxxxxxxx>

with best regards

Jens






[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux