}
 EXPORT_SYMBOL_GPL(qca_send_pre_shutdown_cmd);
 
-static void qca_tlv_check_data(struct qca_fw_config *config,
+static void qca_tlv_check_data(struct hci_dev *hdev,
+                              struct qca_fw_config *config,
                u8 *fw_data, enum qca_btsoc_type soc_type)
 {
        const u8 *data;
        struct tlv_type_nvm *tlv_nvm;
        uint8_t nvm_baud_rate = config->user_baud_rate;
 
-       tlv = (struct tlv_type_hdr *)fw_data;
-
-       type_len = le32_to_cpu(tlv->type_len);
-       length = (type_len >> 8) & 0x00ffffff;
-
-       BT_DBG("TLV Type\t\t : 0x%x", type_len & 0x000000ff);
-       BT_DBG("Length\t\t : %d bytes", length);
-
        config->dnld_mode = QCA_SKIP_EVT_NONE;
        config->dnld_type = QCA_SKIP_EVT_NONE;
 
        switch (config->type) {
+       case ELF_TYPE_PATCH:
+               config->dnld_mode = QCA_SKIP_EVT_VSE_CC;
+               config->dnld_type = QCA_SKIP_EVT_VSE_CC;
+
+               bt_dev_dbg(hdev, "File Class        : 0x%x", fw_data[4]);
+               bt_dev_dbg(hdev, "Data Encoding     : 0x%x", fw_data[5]);
+               bt_dev_dbg(hdev, "File version      : 0x%x", fw_data[6]);
+               break;
        case TLV_TYPE_PATCH:
+               tlv = (struct tlv_type_hdr *)fw_data;
+               type_len = le32_to_cpu(tlv->type_len);
                tlv_patch = (struct tlv_type_patch *)tlv->data;
 
                /* For Rome version 1.1 to 3.1, all segment commands
                config->dnld_mode = tlv_patch->download_mode;
                config->dnld_type = config->dnld_mode;
 
+               BT_DBG("TLV Type\t\t : 0x%x", type_len & 0x000000ff);
                BT_DBG("Total Length           : %d bytes",
                       le32_to_cpu(tlv_patch->total_size));
                BT_DBG("Patch Data Length      : %d bytes",
                break;
 
        case TLV_TYPE_NVM:
+               tlv = (struct tlv_type_hdr *)fw_data;
+
+               type_len = le32_to_cpu(tlv->type_len);
+               length = (type_len >> 8) & 0x00ffffff;
+
+               BT_DBG("TLV Type\t\t : 0x%x", type_len & 0x000000ff);
+               BT_DBG("Length\t\t : %d bytes", length);
+
                idx = 0;
                data = tlv->data;
                while (idx < length) {
 
 static int qca_download_firmware(struct hci_dev *hdev,
                                 struct qca_fw_config *config,
-                                enum qca_btsoc_type soc_type)
+                                enum qca_btsoc_type soc_type,
+                                u8 rom_ver)
 {
        const struct firmware *fw;
        u8 *data;
 
        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;
+               /* For WCN6750, if mbn file is not present then check for
+                * tlv file.
+                */
+               if (soc_type == QCA_WCN6750 && config->type == ELF_TYPE_PATCH) {
+                       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;
+                       }
+               } else {
+                       bt_dev_err(hdev, "QCA Failed to request file: %s (%d)",
+                                  config->fwname, ret);
+                       return ret;
+               }
        }
 
        size = fw->size;
        memcpy(data, fw->data, size);
        release_firmware(fw);
 
-       qca_tlv_check_data(config, data, soc_type);
+       qca_tlv_check_data(hdev, config, data, soc_type);
 
        segment = data;
        remain = size;
        } else if (soc_type == QCA_WCN6750) {
                rom_ver = ((soc_ver & 0x00000f00) >> 0x04) |
                            (soc_ver & 0x0000000f);
+               /* Choose mbn file by default.If mbn file is not found
+                * then choose tlv file
+                */
+               config.type = ELF_TYPE_PATCH;
                snprintf(config.fwname, sizeof(config.fwname),
-                        "qca/msbtfw%02x.tlv", rom_ver);
+                        "qca/msbtfw%02x.mbn", rom_ver);
        } else {
                snprintf(config.fwname, sizeof(config.fwname),
                         "qca/rampatch_%08x.bin", soc_ver);
        }
 
-       err = qca_download_firmware(hdev, &config, soc_type);
+       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;
                snprintf(config.fwname, sizeof(config.fwname),
                         "qca/nvm_%08x.bin", soc_ver);
 
-       err = qca_download_firmware(hdev, &config, soc_type);
+       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;