static int ath10k_mac_vif_setup_ps(struct ath10k_vif *arvif)
 {
        struct ath10k *ar = arvif->ar;
+       struct ieee80211_vif *vif = arvif->vif;
        struct ieee80211_conf *conf = &ar->hw->conf;
        enum wmi_sta_powersave_param param;
        enum wmi_sta_ps_mode psmode;
        int ret;
+       int ps_timeout;
 
        lockdep_assert_held(&arvif->ar->conf_mutex);
 
                psmode = WMI_STA_PS_MODE_ENABLED;
                param = WMI_STA_PS_PARAM_INACTIVITY_TIME;
 
+               ps_timeout = conf->dynamic_ps_timeout;
+               if (ps_timeout == 0) {
+                       /* Firmware doesn't like 0 */
+                       ps_timeout = ieee80211_tu_to_usec(
+                               vif->bss_conf.beacon_int) / 1000;
+               }
+
                ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param,
-                                                 conf->dynamic_ps_timeout);
+                                                 ps_timeout);
                if (ret) {
                        ath10k_warn(ar, "failed to set inactivity time for vdev %d: %i\n",
                                    arvif->vdev_id, ret);