wlcore: consider single fw case
authorEliad Peller <eliad@wizery.com>
Wed, 25 Jul 2012 11:22:21 +0000 (14:22 +0300)
committerLuciano Coelho <luca@coelho.fi>
Thu, 27 Sep 2012 09:13:50 +0000 (12:13 +0300)
When a single fw is being used for both single-role
and multi-role cases (e.g. 18xx), wl->mr_fw_name is
NULL, which results in NULL dereference while trying
to load the multi-role fw.

In this case, always use the single-role fw, and avoid
redundant fw switch by checking for this case in
wl12xx_need_fw_change() as well.

Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: Luciano Coelho <luca@coelho.fi>
drivers/net/wireless/ti/wlcore/main.c

index 600af8e..f421c42 100644 (file)
@@ -696,7 +696,7 @@ static int wl12xx_fetch_firmware(struct wl1271 *wl, bool plt)
                 * we can't call wl12xx_get_vif_count() here because
                 * wl->mutex is taken, so use the cached last_vif_count value
                 */
-               if (wl->last_vif_count > 1) {
+               if (wl->last_vif_count > 1 && wl->mr_fw_name) {
                        fw_type = WL12XX_FW_TYPE_MULTI;
                        fw_name = wl->mr_fw_name;
                } else {
@@ -2170,6 +2170,10 @@ static bool wl12xx_need_fw_change(struct wl1271 *wl,
        if (wl->state == WL1271_STATE_OFF)
                return false;
 
+       /* no need for fw change if a single fw is used */
+       if (!wl->mr_fw_name)
+               return false;
+
        if (vif_count > 1 && current_fw == WL12XX_FW_TYPE_NORMAL)
                return true;
        if (vif_count <= 1 && current_fw == WL12XX_FW_TYPE_MULTI)