Re: [PATCH v2 1/1] Bluetooth: btqca: Add WCN6855 firmware priority selection feature

From: Shuai Zhang

Date: Fri Nov 14 2025 - 05:41:45 EST


Dear Paul,

Thank you for your feedback.

On 11/14/2025 6:04 PM, Paul Menzel wrote:
Dear Shuai,


Thank you for your patch.

Am 14.11.25 um 09:17 schrieb Shuai Zhang:
The prefix "wcn" corresponds to the WCN685x chip, while entries without
the "wcn" prefix correspond to the QCA2066 chip. There are some feature
differences between the two.

However, due to historical reasons, WCN685x chip has been using firmware
without the "wcn" prefix. The mapping between the chip and its
corresponding firmware has now been corrected.

Present tense: … is now corrected.

Maybe give one example of the firmware file.

How did you test this? Maybe paste some log lines before and after?

Should I put the test log results directly in the commit?

Cc: stable@xxxxxxxxxxxxxxx
Fixes: 30209aeff75f ("Bluetooth: qca: Expand firmware-name to load specific rampatch")
Signed-off-by: Shuai Zhang <shuai.zhang@xxxxxxxxxxxxxxxx>
---
  drivers/bluetooth/btqca.c | 22 ++++++++++++++++++++--
  1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/drivers/bluetooth/btqca.c b/drivers/bluetooth/btqca.c
index 7c958d606..8e0004ef7 100644
--- a/drivers/bluetooth/btqca.c
+++ b/drivers/bluetooth/btqca.c
@@ -847,8 +847,12 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
                   "qca/msbtfw%02x.mbn", rom_ver);
              break;
          case QCA_WCN6855:
+            /* Due to historical reasons, WCN685x chip has been using firmware
+             * without the "wcn" prefix. The mapping between the chip and its
+             * corresponding firmware has now been corrected.
+             */
              snprintf(config.fwname, sizeof(config.fwname),
-                 "qca/hpbtfw%02x.tlv", rom_ver);
+                 "qca/wcnhpbtfw%02x.tlv", rom_ver);
              break;
          case QCA_WCN7850:
              snprintf(config.fwname, sizeof(config.fwname),
@@ -861,6 +865,13 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
      }
        err = qca_download_firmware(hdev, &config, soc_type, rom_ver);
+
+    if (!rampatch_name && err < 0 && soc_type == QCA_WCN6855) {
+        snprintf(config.fwname, sizeof(config.fwname),
+             "qca/hpbtfw%02x.tlv", rom_ver);
+        err = qca_download_firmware(hdev, &config, soc_type, rom_ver);
+    }
+
      if (err < 0) {
          bt_dev_err(hdev, "QCA Failed to download patch (%d)", err);
          return err;
@@ -923,7 +934,7 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
          case QCA_WCN6855:
              qca_read_fw_board_id(hdev, &boardid);
              qca_get_nvm_name_by_board(config.fwname, sizeof(config.fwname),
-                          "hpnv", soc_type, ver, rom_ver, boardid);
+                          "wcnhpnv", soc_type, ver, rom_ver, boardid);
              break;
          case QCA_WCN7850:
              qca_get_nvm_name_by_board(config.fwname, sizeof(config.fwname),
@@ -936,6 +947,13 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
      }
        err = qca_download_firmware(hdev, &config, soc_type, rom_ver);
+
+    if (!firmware_name && err < 0 && soc_type == QCA_WCN6855) {
+        qca_get_nvm_name_by_board(config.fwname, sizeof(config.fwname),
+                      "hpnv", soc_type, ver, rom_ver, boardid);
+        err = qca_download_firmware(hdev, &config, soc_type, rom_ver);
+    }
+
      if (err < 0) {
          bt_dev_err(hdev, "QCA Failed to download NVM (%d)", err);
          return err;

The diff logs good.

Reviewed-by: Paul Menzel <pmenzel@xxxxxxxxxxxxx>


Kind regards,

Paul

Kind regards

Shuai