vif->wdev.iftype = type;
 
        vif->pm_block = pm_block;
-       vif->roam_off = -1;
 
        brcmf_init_prof(&vif->profile);
 
        mutex_init(&event->vif_event_lock);
 }
 
-static s32
-brcmf_dongle_roam(struct brcmf_if *ifp, u32 bcn_timeout)
+static s32 brcmf_dongle_roam(struct brcmf_if *ifp)
 {
-       s32 err = 0;
+       s32 err;
+       u32 bcn_timeout;
        __le32 roamtrigger[2];
        __le32 roam_delta[2];
 
-       /*
-        * Setup timeout if Beacons are lost and roam is
-        * off to report link down
-        */
-       if (brcmf_roamoff) {
-               err = brcmf_fil_iovar_int_set(ifp, "bcn_timeout", bcn_timeout);
-               if (err) {
-                       brcmf_err("bcn_timeout error (%d)\n", err);
-                       goto dongle_rom_out;
-               }
+       /* Configure beacon timeout value based upon roaming setting */
+       if (brcmf_roamoff)
+               bcn_timeout = BRCMF_DEFAULT_BCN_TIMEOUT_ROAM_OFF;
+       else
+               bcn_timeout = BRCMF_DEFAULT_BCN_TIMEOUT_ROAM_ON;
+       err = brcmf_fil_iovar_int_set(ifp, "bcn_timeout", bcn_timeout);
+       if (err) {
+               brcmf_err("bcn_timeout error (%d)\n", err);
+               goto roam_setup_done;
        }
 
-       /*
-        * Enable/Disable built-in roaming to allow supplicant
-        * to take care of roaming
+       /* Enable/Disable built-in roaming to allow supplicant to take care of
+        * roaming.
         */
        brcmf_dbg(INFO, "Internal Roaming = %s\n",
                  brcmf_roamoff ? "Off" : "On");
        err = brcmf_fil_iovar_int_set(ifp, "roam_off", !!(brcmf_roamoff));
        if (err) {
                brcmf_err("roam_off error (%d)\n", err);
-               goto dongle_rom_out;
+               goto roam_setup_done;
        }
 
        roamtrigger[0] = cpu_to_le32(WL_ROAM_TRIGGER_LEVEL);
                                     (void *)roamtrigger, sizeof(roamtrigger));
        if (err) {
                brcmf_err("WLC_SET_ROAM_TRIGGER error (%d)\n", err);
-               goto dongle_rom_out;
+               goto roam_setup_done;
        }
 
        roam_delta[0] = cpu_to_le32(WL_ROAM_DELTA);
                                     (void *)roam_delta, sizeof(roam_delta));
        if (err) {
                brcmf_err("WLC_SET_ROAM_DELTA error (%d)\n", err);
-               goto dongle_rom_out;
+               goto roam_setup_done;
        }
 
-dongle_rom_out:
+roam_setup_done:
        return err;
 }
 
        brcmf_dbg(INFO, "power save set to %s\n",
                  (power_mode ? "enabled" : "disabled"));
 
-       err = brcmf_dongle_roam(ifp, WL_BEACON_TIMEOUT);
+       err = brcmf_dongle_roam(ifp);
        if (err)
                goto default_conf_out;
        err = brcmf_cfg80211_change_iface(wdev->wiphy, ndev, wdev->iftype,
 
 #define WL_EXTRA_BUF_MAX               2048
 #define WL_ROAM_TRIGGER_LEVEL          -75
 #define WL_ROAM_DELTA                  20
-#define WL_BEACON_TIMEOUT              3
 
 #define WL_SCAN_CHANNEL_TIME           40
 #define WL_SCAN_UNASSOC_TIME           40
 
 #define BRCMF_MAX_DEFAULT_KEYS         4
 
+/* beacon loss timeout defaults */
+#define BRCMF_DEFAULT_BCN_TIMEOUT_ROAM_ON      2
+#define BRCMF_DEFAULT_BCN_TIMEOUT_ROAM_OFF     4
 
 /**
  * enum brcmf_scan_status - scan engine status
  * @ifp: lower layer interface pointer
  * @wdev: wireless device.
  * @profile: profile information.
- * @roam_off: roaming state.
  * @sme_state: SME state using enum brcmf_vif_status bits.
  * @pm_block: power-management blocked.
  * @list: linked list.
        struct brcmf_if *ifp;
        struct wireless_dev wdev;
        struct brcmf_cfg80211_profile profile;
-       s32 roam_off;
        unsigned long sme_state;
        bool pm_block;
        struct vif_saved_ie saved_ie;
 
 
 const u8 ALLFFMAC[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
 
-#define BRCMF_DEFAULT_BCN_TIMEOUT      3
 #define BRCMF_DEFAULT_SCAN_CHANNEL_TIME        40
 #define BRCMF_DEFAULT_SCAN_UNASSOC_TIME        40
 
                goto done;
        }
 
-       /*
-        * Setup timeout if Beacons are lost and roam is off to report
-        * link down
-        */
-       err = brcmf_fil_iovar_int_set(ifp, "bcn_timeout",
-                                     BRCMF_DEFAULT_BCN_TIMEOUT);
-       if (err) {
-               brcmf_err("bcn_timeout error (%d)\n", err);
-               goto done;
-       }
-
-       /* Enable/Disable build-in roaming to allowed ext supplicant to take
-        * of romaing
-        */
-       err = brcmf_fil_iovar_int_set(ifp, "roam_off", 1);
-       if (err) {
-               brcmf_err("roam_off error (%d)\n", err);
-               goto done;
-       }
-
        /* Setup join_pref to select target by RSSI(with boost on 5GHz) */
        join_pref_params[0].type = BRCMF_JOIN_PREF_RSSI_DELTA;
        join_pref_params[0].len = 2;