@@ -336,15 +336,27 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
336
336
{
337
337
struct rome_config config ;
338
338
int err ;
339
+ u8 rom_ver ;
339
340
340
341
bt_dev_dbg (hdev , "QCA setup on UART" );
341
342
342
343
config .user_baud_rate = baudrate ;
343
344
344
345
/* Download rampatch file */
345
346
config .type = TLV_TYPE_PATCH ;
346
- snprintf (config .fwname , sizeof (config .fwname ), "qca/rampatch_%08x.bin" ,
347
- soc_ver );
347
+ if (soc_type == QCA_WCN3990 ) {
348
+ /* Firmware files to download are based on ROM version.
349
+ * ROM version is derived from last two bytes of soc_ver.
350
+ */
351
+ rom_ver = ((soc_ver & 0x00000f00 ) >> 0x04 ) |
352
+ (soc_ver & 0x0000000f );
353
+ snprintf (config .fwname , sizeof (config .fwname ),
354
+ "qca/crbtfw%02x.tlv" , rom_ver );
355
+ } else {
356
+ snprintf (config .fwname , sizeof (config .fwname ),
357
+ "qca/rampatch_%08x.bin" , soc_ver );
358
+ }
359
+
348
360
err = qca_download_firmware (hdev , & config );
349
361
if (err < 0 ) {
350
362
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,
353
365
354
366
/* Download NVM configuration */
355
367
config .type = TLV_TYPE_NVM ;
356
- snprintf (config .fwname , sizeof (config .fwname ), "qca/nvm_%08x.bin" ,
357
- soc_ver );
368
+ if (soc_type == QCA_WCN3990 )
369
+ snprintf (config .fwname , sizeof (config .fwname ),
370
+ "qca/crnv%02x.bin" , rom_ver );
371
+ else
372
+ snprintf (config .fwname , sizeof (config .fwname ),
373
+ "qca/nvm_%08x.bin" , soc_ver );
374
+
358
375
err = qca_download_firmware (hdev , & config );
359
376
if (err < 0 ) {
360
377
bt_dev_err (hdev , "QCA Failed to download NVM (%d)" , err );
0 commit comments