OSDN Git Service

staging: wfx: update power-save per interface
authorJérôme Pouiller <jerome.pouiller@silabs.com>
Wed, 15 Jan 2020 13:55:01 +0000 (13:55 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 16 Jan 2020 19:59:50 +0000 (20:59 +0100)
mac80211 and the device are both able to control power-save per vif.
But, the current code retrieve power-save from wfx_config(). So, it does
not allow to setup power-save independently for each vif. Driver just
has to rely on wfx_bss_info_changed() instead of wfx_config().

wfx_config() has nothing to do anymore, but we keep it since it is
mandatory for mac80211.

Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
Link: https://lore.kernel.org/r/20200115135338.14374-41-Jerome.Pouiller@silabs.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/wfx/main.c
drivers/staging/wfx/sta.c

index 1904890..84adad6 100644 (file)
@@ -131,7 +131,7 @@ static const struct ieee80211_ops wfx_ops = {
        .stop                   = wfx_stop,
        .add_interface          = wfx_add_interface,
        .remove_interface       = wfx_remove_interface,
-       .config                 = wfx_config,
+       .config                 = wfx_config,
        .tx                     = wfx_tx,
        .conf_tx                = wfx_conf_tx,
        .hw_scan                = wfx_hw_scan,
index 0c3150a..94683a1 100644 (file)
@@ -826,6 +826,10 @@ void wfx_bss_info_changed(struct ieee80211_hw *hw,
 
        if (changed & BSS_CHANGED_TXPOWER)
                hif_set_output_power(wvif, info->txpower);
+
+       if (changed & BSS_CHANGED_PS)
+               wfx_update_pm(wvif);
+
        mutex_unlock(&wdev->conf_mutex);
 
        if (do_join)
@@ -1058,18 +1062,7 @@ void wfx_unassign_vif_chanctx(struct ieee80211_hw *hw,
 
 int wfx_config(struct ieee80211_hw *hw, u32 changed)
 {
-       int ret = 0;
-       struct wfx_dev *wdev = hw->priv;
-       struct wfx_vif *wvif;
-
-       if (changed & IEEE80211_CONF_CHANGE_PS) {
-               mutex_lock(&wdev->conf_mutex);
-               wvif = NULL;
-               while ((wvif = wvif_iterate(wdev, wvif)) != NULL)
-                       ret = wfx_update_pm(wvif);
-               mutex_unlock(&wdev->conf_mutex);
-       }
-       return ret;
+       return 0;
 }
 
 int wfx_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)