linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] wilc1000: Allow setting power_save before driver is initialized
@ 2021-12-12  1:18 David Mosberger-Tang
  2021-12-12 21:20 ` David Mosberger-Tang
  0 siblings, 1 reply; 10+ messages in thread
From: David Mosberger-Tang @ 2021-12-12  1:18 UTC (permalink / raw)
  To: Ajay Singh
  Cc: Claudiu Beznea, Kalle Valo, David S. Miller, Jakub Kicinski,
	linux-wireless, netdev, linux-kernel, David Mosberger-Tang

Without this patch, trying to use:

	iw dev wlan0 set power_save on

before the driver is initialized results in an EIO error.  It is more
useful to simply remember the desired setting and establish it when
the driver is initialized.

Signed-off-by: David Mosberger-Tang <davidm@egauge.net>
---
 drivers/net/wireless/microchip/wilc1000/cfg80211.c | 3 ---
 drivers/net/wireless/microchip/wilc1000/hif.c      | 8 ++++++++
 drivers/net/wireless/microchip/wilc1000/netdev.c   | 3 ++-
 3 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/microchip/wilc1000/cfg80211.c b/drivers/net/wireless/microchip/wilc1000/cfg80211.c
index dc4bfe7be378..01d607fa2ded 100644
--- a/drivers/net/wireless/microchip/wilc1000/cfg80211.c
+++ b/drivers/net/wireless/microchip/wilc1000/cfg80211.c
@@ -1280,9 +1280,6 @@ static int set_power_mgmt(struct wiphy *wiphy, struct net_device *dev,
 	struct wilc_vif *vif = netdev_priv(dev);
 	struct wilc_priv *priv = &vif->priv;
 
-	if (!priv->hif_drv)
-		return -EIO;
-
 	wilc_set_power_mgmt(vif, enabled, timeout);
 
 	return 0;
diff --git a/drivers/net/wireless/microchip/wilc1000/hif.c b/drivers/net/wireless/microchip/wilc1000/hif.c
index 29a42bc47017..66fd77c816f7 100644
--- a/drivers/net/wireless/microchip/wilc1000/hif.c
+++ b/drivers/net/wireless/microchip/wilc1000/hif.c
@@ -1934,6 +1934,14 @@ int wilc_set_power_mgmt(struct wilc_vif *vif, bool enabled, u32 timeout)
 	int result;
 	s8 power_mode;
 
+	if (!wilc->initialized) {
+		/* Simply remember the desired setting for now; will be
+		 * established by wilc_init_fw_config().
+		 */
+		wilc->power_save_mode = enabled;
+		return 0;
+	}
+
 	if (enabled)
 		power_mode = WILC_FW_MIN_FAST_PS;
 	else
diff --git a/drivers/net/wireless/microchip/wilc1000/netdev.c b/drivers/net/wireless/microchip/wilc1000/netdev.c
index 4712cd7dff9f..082bed26a981 100644
--- a/drivers/net/wireless/microchip/wilc1000/netdev.c
+++ b/drivers/net/wireless/microchip/wilc1000/netdev.c
@@ -244,6 +244,7 @@ static int wilc1000_firmware_download(struct net_device *dev)
 static int wilc_init_fw_config(struct net_device *dev, struct wilc_vif *vif)
 {
 	struct wilc_priv *priv = &vif->priv;
+	struct wilc *wilc = vif->wilc;
 	struct host_if_drv *hif_drv;
 	u8 b;
 	u16 hw;
@@ -305,7 +306,7 @@ static int wilc_init_fw_config(struct net_device *dev, struct wilc_vif *vif)
 	if (!wilc_wlan_cfg_set(vif, 0, WID_QOS_ENABLE, &b, 1, 0, 0))
 		goto fail;
 
-	b = WILC_FW_NO_POWERSAVE;
+	b = wilc->power_save_mode ? WILC_FW_MIN_FAST_PS : WILC_FW_NO_POWERSAVE;
 	if (!wilc_wlan_cfg_set(vif, 0, WID_POWER_MANAGEMENT, &b, 1, 0, 0))
 		goto fail;
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2022-01-04  6:07 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-12  1:18 [PATCH] wilc1000: Allow setting power_save before driver is initialized David Mosberger-Tang
2021-12-12 21:20 ` David Mosberger-Tang
2021-12-15 13:01   ` Ajay.Kathat
2021-12-16  5:37     ` David Mosberger-Tang
     [not found]       ` <49a5456d-6a63-652e-d356-9678f6a9b266@microchip.com>
2021-12-16 15:30         ` David Mosberger-Tang
2021-12-23 14:02           ` Ajay.Kathat
2021-12-23 17:08             ` David Mosberger-Tang
2021-12-24 16:20               ` Ajay.Kathat
2021-12-24 17:38                 ` David Mosberger-Tang
     [not found]                   ` <f961481a-3f4c-5fd2-c46a-037d923fea4c@microchip.com>
2022-01-04  6:07                     ` David Mosberger-Tang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).