wl12xx: Check for FW quirks as soon as the FW boots
authorIdo Yariv <ido@wizery.com>
Mon, 6 Jun 2011 11:57:04 +0000 (14:57 +0300)
committerLuciano Coelho <coelho@ti.com>
Mon, 27 Jun 2011 12:05:14 +0000 (15:05 +0300)
The FW initialization might depend on the FW revision, so check for any
FW quirks right after booting it.

Signed-off-by: Ido Yariv <ido@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
drivers/net/wireless/wl12xx/boot.c
drivers/net/wireless/wl12xx/main.c

index 9dcfc6d1e865ae80a2d69ca1fa4932cc513967fb..2f0fb6a5bfdb80bb78b2aac6c6643e5c51e1f2d0 100644 (file)
@@ -102,6 +102,24 @@ static void wl1271_boot_set_ecpu_ctrl(struct wl1271 *wl, u32 flag)
        wl1271_write32(wl, ACX_REG_ECPU_CONTROL, cpu_ctrl);
 }
 
+static unsigned int wl12xx_get_fw_ver_quirks(struct wl1271 *wl)
+{
+       unsigned int quirks = 0;
+       unsigned int *fw_ver = wl->chip.fw_ver;
+
+       /* Only for wl127x */
+       if ((fw_ver[FW_VER_CHIP] == FW_VER_CHIP_WL127X) &&
+           /* Check STA version */
+           (((fw_ver[FW_VER_IF_TYPE] == FW_VER_IF_TYPE_STA) &&
+             (fw_ver[FW_VER_MINOR] < FW_VER_MINOR_1_SPARE_STA_MIN)) ||
+            /* Check AP version */
+            ((fw_ver[FW_VER_IF_TYPE] == FW_VER_IF_TYPE_AP) &&
+             (fw_ver[FW_VER_MINOR] < FW_VER_MINOR_1_SPARE_AP_MIN))))
+               quirks |= WL12XX_QUIRK_USE_2_SPARE_BLOCKS;
+
+       return quirks;
+}
+
 static void wl1271_parse_fw_ver(struct wl1271 *wl)
 {
        int ret;
@@ -116,6 +134,9 @@ static void wl1271_parse_fw_ver(struct wl1271 *wl)
                memset(wl->chip.fw_ver, 0, sizeof(wl->chip.fw_ver));
                return;
        }
+
+       /* Check if any quirks are needed with older fw versions */
+       wl->quirks |= wl12xx_get_fw_ver_quirks(wl);
 }
 
 static void wl1271_boot_fw_version(struct wl1271 *wl)
index ab3aa45db07b993f6b49a9b87a68f17e770c3d54..2c03b4716d3f75c1b24deb74ef67af5442493ce0 100644 (file)
@@ -1251,24 +1251,6 @@ out:
        return ret;
 }
 
-static unsigned int wl1271_get_fw_ver_quirks(struct wl1271 *wl)
-{
-       unsigned int quirks = 0;
-       unsigned int *fw_ver = wl->chip.fw_ver;
-
-       /* Only for wl127x */
-       if ((fw_ver[FW_VER_CHIP] == FW_VER_CHIP_WL127X) &&
-           /* Check STA version */
-           (((fw_ver[FW_VER_IF_TYPE] == FW_VER_IF_TYPE_STA) &&
-             (fw_ver[FW_VER_MINOR] < FW_VER_MINOR_1_SPARE_STA_MIN)) ||
-            /* Check AP version */
-            ((fw_ver[FW_VER_IF_TYPE] == FW_VER_IF_TYPE_AP) &&
-             (fw_ver[FW_VER_MINOR] < FW_VER_MINOR_1_SPARE_AP_MIN))))
-               quirks |= WL12XX_QUIRK_USE_2_SPARE_BLOCKS;
-
-       return quirks;
-}
-
 int wl1271_plt_start(struct wl1271 *wl)
 {
        int retries = WL1271_BOOT_RETRIES;
@@ -1305,8 +1287,6 @@ int wl1271_plt_start(struct wl1271 *wl)
                wl1271_notice("firmware booted in PLT mode (%s)",
                              wl->chip.fw_ver_str);
 
-               /* Check if any quirks are needed with older fw versions */
-               wl->quirks |= wl1271_get_fw_ver_quirks(wl);
                goto out;
 
 irq_disable:
@@ -1794,9 +1774,6 @@ power_off:
        strncpy(wiphy->fw_version, wl->chip.fw_ver_str,
                sizeof(wiphy->fw_version));
 
-       /* Check if any quirks are needed with older fw versions */
-       wl->quirks |= wl1271_get_fw_ver_quirks(wl);
-
        /*
         * Now we know if 11a is supported (info from the NVS), so disable
         * 11a channels if not supported