.fw             = AR6003_HW_2_0_FIRMWARE_FILE,
                        .tcmd           = AR6003_HW_2_0_TCMD_FIRMWARE_FILE,
                        .patch          = AR6003_HW_2_0_PATCH_FILE,
-                       .api2           = ATH6KL_FW_API2_FILE,
                },
 
                .fw_board               = AR6003_HW_2_0_BOARD_DATA_FILE,
                        .fw             = AR6003_HW_2_1_1_FIRMWARE_FILE,
                        .tcmd           = AR6003_HW_2_1_1_TCMD_FIRMWARE_FILE,
                        .patch          = AR6003_HW_2_1_1_PATCH_FILE,
-                       .api2           = ATH6KL_FW_API2_FILE,
                },
 
                .fw_board               = AR6003_HW_2_1_1_BOARD_DATA_FILE,
                .fw = {
                        .dir            = AR6004_HW_1_0_FW_DIR,
                        .fw             = AR6004_HW_1_0_FIRMWARE_FILE,
-                       .api2           = ATH6KL_FW_API2_FILE,
                },
 
                .fw_board               = AR6004_HW_1_0_BOARD_DATA_FILE,
                .fw = {
                        .dir            = AR6004_HW_1_1_FW_DIR,
                        .fw             = AR6004_HW_1_1_FIRMWARE_FILE,
-                       .api2           = ATH6KL_FW_API2_FILE,
                },
 
                .fw_board               = AR6004_HW_1_1_BOARD_DATA_FILE,
        return 0;
 }
 
-static int ath6kl_fetch_fw_api2(struct ath6kl *ar)
+static int ath6kl_fetch_fw_apin(struct ath6kl *ar, const char *name)
 {
        size_t magic_len, len, ie_len;
        const struct firmware *fw;
        int ret, ie_id, i, index, bit;
        __le32 *val;
 
-       if (ar->hw.fw.api2 == NULL)
-               return -EOPNOTSUPP;
-
-       snprintf(filename, sizeof(filename), "%s/%s",
-                ar->hw.fw.dir, ar->hw.fw.api2);
+       snprintf(filename, sizeof(filename), "%s/%s", ar->hw.fw.dir, name);
 
        ret = request_firmware(&fw, filename, ar->dev);
        if (ret)
        if (ret)
                return ret;
 
-       ret = ath6kl_fetch_fw_api2(ar);
+       ret = ath6kl_fetch_fw_apin(ar, ATH6KL_FW_API3_FILE);
        if (ret == 0) {
-               ath6kl_dbg(ATH6KL_DBG_BOOT, "using fw api 2\n");
-               return 0;
+               ar->fw_api = 3;
+               goto out;
+       }
+
+       ret = ath6kl_fetch_fw_apin(ar, ATH6KL_FW_API2_FILE);
+       if (ret == 0) {
+               ar->fw_api = 2;
+               goto out;
        }
 
        ret = ath6kl_fetch_fw_api1(ar);
        if (ret)
                return ret;
 
-       ath6kl_dbg(ATH6KL_DBG_BOOT, "using fw api 1\n");
+       ar->fw_api = 1;
+
+out:
+       ath6kl_dbg(ATH6KL_DBG_BOOT, "using fw api %d\n", ar->fw_api);
 
        return 0;
 }
 
 
        if (test_and_clear_bit(FIRST_BOOT, &ar->flag)) {
-               ath6kl_info("%s %s fw %s%s\n",
+               ath6kl_info("%s %s fw %s api %d%s\n",
                            ar->hw.name,
                            ath6kl_init_get_hif_name(ar->hif_type),
                            ar->wiphy->fw_version,
+                           ar->fw_api,
                            test_bit(TESTMODE, &ar->flag) ? " testmode" : "");
        }