rsi: use appropriate interface for power save configuration
authorAmitkumar Karwar <amit.karwar@redpinesignals.com>
Tue, 10 Apr 2018 15:04:13 +0000 (20:34 +0530)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 24 Apr 2018 17:25:02 +0000 (20:25 +0300)
Power save request should be sent on station interface. Virtual
interface which is connected should be preferred. This patch
resolves device not entering power save problem in certain
situations

Signed-off-by: Amitkumar Karwar <amit.karwar@redpinesignals.com>
Signed-off-by: Siva Rebbagondla <siva.rebbagondla@redpinesignals.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/rsi/rsi_91x_mac80211.c

index 5edc3a9d8eebc906d6f624ceb705a1da17c4dd73..77aa3bb357a0a59a9af532ab03dd08e1e715d65d 100644 (file)
@@ -614,7 +614,7 @@ static int rsi_mac80211_config(struct ieee80211_hw *hw,
 
        /* Power save parameters */
        if (changed & IEEE80211_CONF_CHANGE_PS) {
-               struct ieee80211_vif *vif;
+               struct ieee80211_vif *vif, *sta_vif = NULL;
                unsigned long flags;
                int i, set_ps = 1;
 
@@ -628,13 +628,17 @@ static int rsi_mac80211_config(struct ieee80211_hw *hw,
                                set_ps = 0;
                                break;
                        }
+                       if ((vif->type == NL80211_IFTYPE_STATION ||
+                            vif->type == NL80211_IFTYPE_P2P_CLIENT) &&
+                           (!sta_vif || vif->bss_conf.assoc))
+                               sta_vif = vif;
                }
-               if (set_ps) {
+               if (set_ps && sta_vif) {
                        spin_lock_irqsave(&adapter->ps_lock, flags);
                        if (conf->flags & IEEE80211_CONF_PS)
-                               rsi_enable_ps(adapter, vif);
+                               rsi_enable_ps(adapter, sta_vif);
                        else
-                               rsi_disable_ps(adapter, vif);
+                               rsi_disable_ps(adapter, sta_vif);
                        spin_unlock_irqrestore(&adapter->ps_lock, flags);
                }
        }