if (!info->ibss_joined) {
                wvif->state = WFX_STATE_STA;
-               hif_keep_alive_period(wvif, 30 /* sec */);
+               hif_keep_alive_period(wvif, 0);
                hif_set_bss_params(wvif, &wvif->bss_params);
                hif_set_beacon_wakeup_period(wvif, info->dtim_period,
                                             info->dtim_period);
                                 __func__);
        }
 
+       if (changed & BSS_CHANGED_KEEP_ALIVE)
+               hif_keep_alive_period(wvif, info->max_idle_period *
+                                           USEC_PER_TU / USEC_PER_MSEC);
+
        if (changed & BSS_CHANGED_ASSOC ||
            changed & BSS_CHANGED_ERP_CTS_PROT ||
            changed & BSS_CHANGED_ERP_PREAMBLE) {