staging: wilc1000: don't use wdev while setting tx power
authorAdham Abozaeid <adham.abozaeid@microchip.com>
Fri, 4 Oct 2019 21:40:22 +0000 (21:40 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 7 Oct 2019 10:25:46 +0000 (12:25 +0200)
WILC doesn't support per-vif tx power, and hence, wdev will always be
null in calls to set_tx_power.
Instead, wiphy should be used to execute the operation

Signed-off-by: Adham Abozaeid <adham.abozaeid@microchip.com>
Link: https://lore.kernel.org/r/20191004214011.7623-1-adham.abozaeid@microchip.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/wilc1000/wilc_wfi_cfgoperations.c

index 3882c90..cc56abc 100644 (file)
@@ -1685,9 +1685,22 @@ static int set_tx_power(struct wiphy *wiphy, struct wireless_dev *wdev,
                        enum nl80211_tx_power_setting type, int mbm)
 {
        int ret;
+       int srcu_idx;
        s32 tx_power = MBM_TO_DBM(mbm);
-       struct wilc_vif *vif = netdev_priv(wdev->netdev);
+       struct wilc *wl = wiphy_priv(wiphy);
+       struct wilc_vif *vif;
 
+       if (!wl->initialized)
+               return -EIO;
+
+       srcu_idx = srcu_read_lock(&wl->srcu);
+       vif = wilc_get_wl_to_vif(wl);
+       if (IS_ERR(vif)) {
+               srcu_read_unlock(&wl->srcu, srcu_idx);
+               return -EINVAL;
+       }
+
+       netdev_info(vif->ndev, "Setting tx power %d\n", tx_power);
        if (tx_power < 0)
                tx_power = 0;
        else if (tx_power > 18)
@@ -1695,6 +1708,7 @@ static int set_tx_power(struct wiphy *wiphy, struct wireless_dev *wdev,
        ret = wilc_set_tx_power(vif, tx_power);
        if (ret)
                netdev_err(vif->ndev, "Failed to set tx power\n");
+       srcu_read_unlock(&wl->srcu, srcu_idx);
 
        return ret;
 }