Re: [PATCH v5 1/2] Bluetooth: btqca: move WCN7850 workaround to the caller

From: Shuai Zhang

Date: Sun Jan 04 2026 - 22:02:12 EST


Hi Paul

On 12/31/2025 4:38 PM, Paul Menzel wrote:
Dear Shuai,


Thank you for the patch.

Am 31.12.25 um 13:58 schrieb Shuai Zhang:
To code uniformity, move WCN7850 workaround to the caller.

Please elaborate, and detail what WCN7850 workaround.


I will update.


Signed-off-by: Shuai Zhang <shuai.zhang@xxxxxxxxxxxxxxxx>
---
  drivers/bluetooth/btqca.c | 41 +++++++++++++++++++--------------------
  1 file changed, 20 insertions(+), 21 deletions(-)

diff --git a/drivers/bluetooth/btqca.c b/drivers/bluetooth/btqca.c
index 7c958d606..b4c0a018d 100644
--- a/drivers/bluetooth/btqca.c
+++ b/drivers/bluetooth/btqca.c
@@ -581,28 +581,11 @@ static int qca_download_firmware(struct hci_dev *hdev,
        ret = request_firmware(&fw, config->fwname, &hdev->dev);
      if (ret) {
-        /* For WCN6750, if mbn file is not present then check for
-         * tlv file.
-         */
-        if (soc_type == QCA_WCN6750 && config->type == ELF_TYPE_PATCH) {

The `config->type == ELF_TYPE_PATCH` wasn’t moved, and it’s not visible from the diff, why. Please explain in the commit message.


If it is WCN7850, config.type is already set to ELF_TYPE_PATCH when downloading the rampatch file.

Therefore, if (config.type == ELF_TYPE_PATCH) will always evaluate to true.



-            bt_dev_dbg(hdev, "QCA Failed to request file: %s (%d)",
-                   config->fwname, ret);
-            config->type = TLV_TYPE_PATCH;
-            snprintf(config->fwname, sizeof(config->fwname),
-                 "qca/msbtfw%02x.tlv", rom_ver);
-            bt_dev_info(hdev, "QCA Downloading %s", config->fwname);
-            ret = request_firmware(&fw, config->fwname, &hdev->dev);
-            if (ret) {
-                bt_dev_err(hdev, "QCA Failed to request file: %s (%d)",
-                       config->fwname, ret);
-                return ret;
-            }
-        }
          /* If the board-specific file is missing, try loading the default
           * one, unless that was attempted already.
           */
-        else if (config->type == TLV_TYPE_NVM &&
-             qca_get_alt_nvm_file(config->fwname, sizeof(config->fwname))) {
+        if (config->type == TLV_TYPE_NVM &&
+            qca_get_alt_nvm_file(config->fwname, sizeof(config->fwname))) {
              bt_dev_info(hdev, "QCA Downloading %s", config->fwname);
              ret = request_firmware(&fw, config->fwname, &hdev->dev);
              if (ret) {
@@ -862,8 +845,24 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
        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;
+        /* For WCN6750, if mbn file is not present then check for
+         * tlv file.
+         */
+        if (soc_type == QCA_WCN6750) {
+            bt_dev_dbg(hdev, "QCA Failed to request file: %s (%d)",
+                   config.fwname, err);
+            config.type = TLV_TYPE_PATCH;
+            snprintf(config.fwname, sizeof(config.fwname),
+                 "qca/msbtfw%02x.tlv", rom_ver);
+            bt_dev_info(hdev, "QCA Downloading %s", config.fwname);
+            err = qca_download_firmware(hdev, &config, soc_type, rom_ver);
+        }
+
+        if (err) {
+            bt_dev_err(hdev, "QCA Failed to request file: %s (%d)",
+                   config.fwname, err);
+            return err;
+        }
      }
        /* Give the controller some time to get ready to receive the NVM */


Kind regards,

Paul

Kind regards,

Shuai