Skip to content

Commit

Permalink
libertas: add an cfg80211 interface for powersaving
Browse files Browse the repository at this point in the history
This patch adds an interface for handling commands like
iwconfig wlanX power on/off. Such an interface formerly existed
when the driver used wext.

While performance with sdio in polling mode without using
powersave mode is quite bad, powersaving mode is unusable,
so do not enable it under such conditions.

Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  • Loading branch information
Andreas Kemnade authored and Kalle Valo committed Feb 6, 2016
1 parent 0b8802d commit 143e494
Showing 1 changed file with 38 additions and 0 deletions.
38 changes: 38 additions & 0 deletions drivers/net/wireless/marvell/libertas/cfg.c
Original file line number Diff line number Diff line change
Expand Up @@ -2039,6 +2039,43 @@ static int lbs_leave_ibss(struct wiphy *wiphy, struct net_device *dev)



int lbs_set_power_mgmt(struct wiphy *wiphy, struct net_device *dev,
bool enabled, int timeout)
{
struct lbs_private *priv = wiphy_priv(wiphy);

if (!(priv->fwcapinfo & FW_CAPINFO_PS)) {
if (!enabled)
return 0;
else
return -EINVAL;
}
/* firmware does not work well with too long latency with power saving
* enabled, so do not enable it if there is only polling, no
* interrupts (like in some sdio hosts which can only
* poll for sdio irqs)
*/
if (priv->is_polling) {
if (!enabled)
return 0;
else
return -EINVAL;
}
if (!enabled) {
priv->psmode = LBS802_11POWERMODECAM;
if (priv->psstate != PS_STATE_FULL_POWER)
lbs_set_ps_mode(priv,
PS_MODE_ACTION_EXIT_PS,
true);
return 0;
}
if (priv->psmode != LBS802_11POWERMODECAM)
return 0;
priv->psmode = LBS802_11POWERMODEMAX_PSP;
if (priv->connect_status == LBS_CONNECTED)
lbs_set_ps_mode(priv, PS_MODE_ACTION_ENTER_PS, true);
return 0;
}

/*
* Initialization
Expand All @@ -2057,6 +2094,7 @@ static struct cfg80211_ops lbs_cfg80211_ops = {
.change_virtual_intf = lbs_change_intf,
.join_ibss = lbs_join_ibss,
.leave_ibss = lbs_leave_ibss,
.set_power_mgmt = lbs_set_power_mgmt,
};


Expand Down

0 comments on commit 143e494

Please sign in to comment.