|
@@ -336,6 +336,7 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
|
|
|
{
|
|
|
struct rome_config config;
|
|
|
int err;
|
|
|
+ u8 rom_ver;
|
|
|
|
|
|
bt_dev_dbg(hdev, "QCA setup on UART");
|
|
|
|
|
@@ -343,8 +344,19 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
|
|
|
|
|
|
/* Download rampatch file */
|
|
|
config.type = TLV_TYPE_PATCH;
|
|
|
- snprintf(config.fwname, sizeof(config.fwname), "qca/rampatch_%08x.bin",
|
|
|
- soc_ver);
|
|
|
+ if (soc_type == QCA_WCN3990) {
|
|
|
+ /* Firmware files to download are based on ROM version.
|
|
|
+ * ROM version is derived from last two bytes of soc_ver.
|
|
|
+ */
|
|
|
+ rom_ver = ((soc_ver & 0x00000f00) >> 0x04) |
|
|
|
+ (soc_ver & 0x0000000f);
|
|
|
+ snprintf(config.fwname, sizeof(config.fwname),
|
|
|
+ "qca/crbtfw%02x.tlv", rom_ver);
|
|
|
+ } else {
|
|
|
+ snprintf(config.fwname, sizeof(config.fwname),
|
|
|
+ "qca/rampatch_%08x.bin", soc_ver);
|
|
|
+ }
|
|
|
+
|
|
|
err = qca_download_firmware(hdev, &config);
|
|
|
if (err < 0) {
|
|
|
bt_dev_err(hdev, "QCA Failed to download patch (%d)", err);
|
|
@@ -353,8 +365,13 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
|
|
|
|
|
|
/* Download NVM configuration */
|
|
|
config.type = TLV_TYPE_NVM;
|
|
|
- snprintf(config.fwname, sizeof(config.fwname), "qca/nvm_%08x.bin",
|
|
|
- soc_ver);
|
|
|
+ if (soc_type == QCA_WCN3990)
|
|
|
+ snprintf(config.fwname, sizeof(config.fwname),
|
|
|
+ "qca/crnv%02x.bin", rom_ver);
|
|
|
+ else
|
|
|
+ snprintf(config.fwname, sizeof(config.fwname),
|
|
|
+ "qca/nvm_%08x.bin", soc_ver);
|
|
|
+
|
|
|
err = qca_download_firmware(hdev, &config);
|
|
|
if (err < 0) {
|
|
|
bt_dev_err(hdev, "QCA Failed to download NVM (%d)", err);
|