Skip to content

Commit 906d241

Browse files
committed
BACKPORT: bluetooth: btqca: Add WCN6855 firmware priority selection feature
Historically, WCN685x and QCA2066 shared the same firmware files. Now, changes are planned for the firmware that will make it incompatible with QCA2066, so a new firmware name is required for WCN685x. Test Steps: - Boot device - Check the BTFW loading status via dmesg Sanity pass and Test Log: QCA Downloading qca/wcnhpbftfw21.tlv Direct firmware load for qca/wcnhpbftfw21.tlv failed with error -2 QCA Downloading qca/hpbftfw21.tlv Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> Acked-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com> Signed-off-by: Shuai Zhang <shuai.zhang@oss.qualcomm.com> Link: https://lore.kernel.org/all/20260106043503.534557-3-shuai.zhang@oss.qualcomm.com/
1 parent a6ca932 commit 906d241

1 file changed

Lines changed: 18 additions & 3 deletions

File tree

drivers/bluetooth/btqca.c

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -830,8 +830,12 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
830830
"qca/msbtfw%02x.mbn", rom_ver);
831831
break;
832832
case QCA_WCN6855:
833+
/* Due to historical reasons, WCN685x chip has been using firmware
834+
* without the "wcn" prefix. The mapping between the chip and its
835+
* corresponding firmware has now been corrected.
836+
*/
833837
snprintf(config.fwname, sizeof(config.fwname),
834-
"qca/hpbtfw%02x.tlv", rom_ver);
838+
"qca/wcnhpbtfw%02x.tlv", rom_ver);
835839
break;
836840
case QCA_WCN7850:
837841
snprintf(config.fwname, sizeof(config.fwname),
@@ -855,6 +859,10 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
855859
"qca/msbtfw%02x.tlv", rom_ver);
856860
bt_dev_info(hdev, "QCA Downloading %s", config.fwname);
857861
err = qca_download_firmware(hdev, &config, soc_type, rom_ver);
862+
} else if (err < 0 && !rampatch_name && soc_type == QCA_WCN6855) {
863+
snprintf(config.fwname, sizeof(config.fwname),
864+
"qca/hpbtfw%02x.tlv", rom_ver);
865+
err = qca_download_firmware(hdev, &config, soc_type, rom_ver);
858866
}
859867

860868
if (err < 0) {
@@ -920,7 +928,7 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
920928
case QCA_WCN6855:
921929
qca_read_fw_board_id(hdev, &boardid);
922930
qca_get_nvm_name_by_board(config.fwname, sizeof(config.fwname),
923-
"hpnv", soc_type, ver, rom_ver, boardid);
931+
"wcnhpnv", soc_type, ver, rom_ver, boardid);
924932
break;
925933
case QCA_WCN7850:
926934
qca_get_nvm_name_by_board(config.fwname, sizeof(config.fwname),
@@ -933,8 +941,15 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
933941
}
934942

935943
err = qca_download_firmware(hdev, &config, soc_type, rom_ver);
944+
if (err < 0 && !firmware_name && soc_type == QCA_WCN6855) {
945+
qca_get_nvm_name_by_board(config.fwname, sizeof(config.fwname),
946+
"hpnv", soc_type, ver, rom_ver, boardid);
947+
err = qca_download_firmware(hdev, &config, soc_type, rom_ver);
948+
}
949+
936950
if (err < 0) {
937-
bt_dev_err(hdev, "QCA Failed to download NVM (%d)", err);
951+
bt_dev_err(hdev, "QCA Failed to request file: %s (%d)",
952+
config.fwname, err);
938953
return err;
939954
}
940955

0 commit comments

Comments
 (0)