|
@@ -1105,10 +1105,12 @@ static int ath10k_mac_vif_recalc_ps_poll_count(struct ath10k_vif *arvif)
|
|
|
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);
|
|
|
|
|
@@ -1119,8 +1121,15 @@ static int ath10k_mac_vif_setup_ps(struct ath10k_vif *arvif)
|
|
|
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);
|