Set the timeout value as per cfg80211's set_power_mgmt() request. If the
requested value value is left undefined we set it to 2 seconds, the
maximum supported value.

Signed-off-by: Nicolas Saenz Julienne <nsaenzjulie...@suse.de>
---

Note: I got the 2 seconds value from the Raspberry Pi downstream kernel.

 .../wireless/broadcom/brcm80211/brcmfmac/cfg80211.c    | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c 
b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index a757abd7a599..15578c6e87cd 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -84,6 +84,8 @@
 
 #define BRCMF_ND_INFO_TIMEOUT          msecs_to_jiffies(2000)
 
+#define BRCMF_PS_MAX_TIMEOUT_MS                2000
+
 #define BRCMF_ASSOC_PARAMS_FIXED_SIZE \
        (sizeof(struct brcmf_assoc_params_le) - sizeof(u16))
 
@@ -2941,6 +2943,14 @@ brcmf_cfg80211_set_power_mgmt(struct wiphy *wiphy, 
struct net_device *ndev,
                else
                        bphy_err(drvr, "error (%d)\n", err);
        }
+
+       if ((u32)timeout > BRCMF_PS_MAX_TIMEOUT_MS)
+               timeout = BRCMF_PS_MAX_TIMEOUT_MS;
+
+       err = brcmf_fil_iovar_int_set(ifp, "pm2_sleep_ret", timeout);
+       if (err)
+               bphy_err(drvr, "Unable to set pm timeout, (%d)\n", err);
+
 done:
        brcmf_dbg(TRACE, "Exit\n");
        return err;
-- 
2.27.0

Reply via email to