JOIN_EVENT_COMPLETE_ID |
                DISCONNECT_EVENT_COMPLETE_ID |
                RSSI_SNR_TRIGGER_0_EVENT_ID |
-               PSPOLL_DELIVERY_FAILURE_EVENT_ID;
+               PSPOLL_DELIVERY_FAILURE_EVENT_ID |
+               SOFT_GEMINI_SENSE_EVENT_ID;
 
        ret = wl1271_event_unmask(wl);
        if (ret < 0) {
 
                        return ret;
        }
 
+       /* disable dynamic PS when requested by the firmware */
+       if (vector & SOFT_GEMINI_SENSE_EVENT_ID &&
+           wl->bss_type == BSS_TYPE_STA_BSS) {
+               if (mbox->soft_gemini_sense_info)
+                       ieee80211_disable_dyn_ps(wl->vif, true);
+               else
+                       ieee80211_disable_dyn_ps(wl->vif, false);
+       }
+
        /*
         * The BSS_LOSE_EVENT_ID is only needed while psm (and hence beacon
         * filtering) is enabled. Without PSM, the stack will receive all
 
                        [CONF_SG_HV3_MAX_OVERRIDE]                  = 0,
                        [CONF_SG_BT_NFS_SAMPLE_INTERVAL]            = 400,
                        [CONF_SG_BT_LOAD_RATIO]                     = 50,
-                       [CONF_SG_AUTO_PS_MODE]                      = 0,
+                       [CONF_SG_AUTO_PS_MODE]                      = 1,
                        [CONF_SG_AUTO_SCAN_PROBE_REQ]               = 170,
                        [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_HV3]   = 50,
                        [CONF_SG_ANTENNA_CONFIGURATION]             = 0,
 
        WARN_ON(wl->state != WL1271_STATE_ON);
 
+       /* enable dyn ps just in case (if left on due to fw crash etc) */
+       ieee80211_disable_dyn_ps(wl->vif, false);
+
        if (test_and_clear_bit(WL1271_FLAG_SCANNING, &wl->flags)) {
                mutex_unlock(&wl->mutex);
                ieee80211_scan_completed(wl->hw, true);
                        clear_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
                        wl->aid = 0;
 
+                       /* re-enable dynamic ps - just in case */
+                       ieee80211_disable_dyn_ps(wl->vif, false);
+
                        /* revert back to minimum rates for the current band */
                        wl1271_set_band_rate(wl);
                        wl->basic_rate = wl1271_min_rate_get(wl);