wil6210: restore power save state after internal FW reset
The power save profile is set to default state in case of FW reset, regardless of the state before the reset took place. Fix this by saving the current power save profile and restore it in case of FW reset. Change-Id: I9bcf8c4a60b72851631e25bf33a8335cffb2644f Signed-off-by: Lazar Alexei <qca_ailizaro@qca.qualcomm.com> Signed-off-by: Maya Erez <qca_merez@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com> Git-commit: 8b068c032a5cbe6f80168e0ecf2c9625c8d14d90 Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git [merez@codeaurora.org: fix trivial merge conflicts] Signed-off-by: Maya Erez <merez@codeaurora.org>
This commit is contained in:
parent
60e1252f7d
commit
6cb6d7e6ed
3 changed files with 29 additions and 11 deletions
|
@ -1650,12 +1650,6 @@ static int wil_cfg80211_set_power_mgmt(struct wiphy *wiphy,
|
|||
{
|
||||
struct wil6210_priv *wil = wiphy_to_wil(wiphy);
|
||||
enum wmi_ps_profile_type ps_profile;
|
||||
int rc;
|
||||
|
||||
if (!test_bit(WMI_FW_CAPABILITY_PS_CONFIG, wil->fw_capabilities)) {
|
||||
wil_err(wil, "set_power_mgmt not supported\n");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
wil_dbg_misc(wil, "enabled=%d, timeout=%d\n",
|
||||
enabled, timeout);
|
||||
|
@ -1665,11 +1659,7 @@ static int wil_cfg80211_set_power_mgmt(struct wiphy *wiphy,
|
|||
else
|
||||
ps_profile = WMI_PS_PROFILE_TYPE_PS_DISABLED;
|
||||
|
||||
rc = wmi_ps_dev_profile_cfg(wil, ps_profile);
|
||||
if (rc)
|
||||
wil_err(wil, "wmi_ps_dev_profile_cfg failed (%d)\n", rc);
|
||||
|
||||
return rc;
|
||||
return wil_ps_update(wil, ps_profile);
|
||||
}
|
||||
|
||||
static struct cfg80211_ops wil_cfg80211_ops = {
|
||||
|
|
|
@ -576,6 +576,9 @@ int wil_priv_init(struct wil6210_priv *wil)
|
|||
|
||||
if (rx_ring_overflow_thrsh == WIL6210_RX_HIGH_TRSH_INIT)
|
||||
rx_ring_overflow_thrsh = WIL6210_RX_HIGH_TRSH_DEFAULT;
|
||||
|
||||
wil->ps_profile = WMI_PS_PROFILE_TYPE_DEFAULT;
|
||||
|
||||
return 0;
|
||||
|
||||
out_wmi_wq:
|
||||
|
@ -901,6 +904,24 @@ void wil_abort_scan(struct wil6210_priv *wil, bool sync)
|
|||
}
|
||||
}
|
||||
|
||||
int wil_ps_update(struct wil6210_priv *wil, enum wmi_ps_profile_type ps_profile)
|
||||
{
|
||||
int rc;
|
||||
|
||||
if (!test_bit(WMI_FW_CAPABILITY_PS_CONFIG, wil->fw_capabilities)) {
|
||||
wil_err(wil, "set_power_mgmt not supported\n");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
rc = wmi_ps_dev_profile_cfg(wil, ps_profile);
|
||||
if (rc)
|
||||
wil_err(wil, "wmi_ps_dev_profile_cfg failed (%d)\n", rc);
|
||||
else
|
||||
wil->ps_profile = ps_profile;
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
* We reset all the structures, and we reset the UMAC.
|
||||
* After calling this routine, you're expected to reload
|
||||
|
@ -1035,6 +1056,9 @@ int wil_reset(struct wil6210_priv *wil, bool load_fw)
|
|||
return rc;
|
||||
}
|
||||
|
||||
if (wil->ps_profile != WMI_PS_PROFILE_TYPE_DEFAULT)
|
||||
wil_ps_update(wil, wil->ps_profile);
|
||||
|
||||
if (wil->tt_data_set)
|
||||
wmi_set_tt_cfg(wil, &wil->tt_data);
|
||||
|
||||
|
|
|
@ -705,6 +705,8 @@ struct wil6210_priv {
|
|||
/* High Access Latency Policy voting */
|
||||
struct wil_halp halp;
|
||||
|
||||
enum wmi_ps_profile_type ps_profile;
|
||||
|
||||
struct wil_ftm_priv ftm;
|
||||
bool tt_data_set;
|
||||
struct wmi_tt_data tt_data;
|
||||
|
@ -824,6 +826,8 @@ int wil_if_add(struct wil6210_priv *wil);
|
|||
void wil_if_remove(struct wil6210_priv *wil);
|
||||
int wil_priv_init(struct wil6210_priv *wil);
|
||||
void wil_priv_deinit(struct wil6210_priv *wil);
|
||||
int wil_ps_update(struct wil6210_priv *wil,
|
||||
enum wmi_ps_profile_type ps_profile);
|
||||
int wil_reset(struct wil6210_priv *wil, bool no_fw);
|
||||
void wil_fw_error_recovery(struct wil6210_priv *wil);
|
||||
void wil_set_recovery_state(struct wil6210_priv *wil, int state);
|
||||
|
|
Loading…
Add table
Reference in a new issue