ath11k: enable idle power save mode
Host sends wmi command to allow hardware enter idle power save mode in ath11k_mac_op_start function. hw parameter idle_ps indicates whether idle power save is supported. Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1 Signed-off-by: Carl Huang <cjhuang@codeaurora.org> Signed-off-by: Kalle Valo <kvalo@codeaurora.org> Link: https://lore.kernel.org/r/1601544890-13450-8-git-send-email-kvalo@codeaurora.org
This commit is contained in:
parent
9b309970c4
commit
c83c500b55
3 changed files with 13 additions and 0 deletions
|
@ -64,6 +64,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
|
||||||
BIT(NL80211_IFTYPE_MESH_POINT),
|
BIT(NL80211_IFTYPE_MESH_POINT),
|
||||||
.supports_monitor = true,
|
.supports_monitor = true,
|
||||||
.supports_shadow_regs = false,
|
.supports_shadow_regs = false,
|
||||||
|
.idle_ps = false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.hw_rev = ATH11K_HW_IPQ6018_HW10,
|
.hw_rev = ATH11K_HW_IPQ6018_HW10,
|
||||||
|
@ -100,6 +101,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
|
||||||
BIT(NL80211_IFTYPE_MESH_POINT),
|
BIT(NL80211_IFTYPE_MESH_POINT),
|
||||||
.supports_monitor = true,
|
.supports_monitor = true,
|
||||||
.supports_shadow_regs = false,
|
.supports_shadow_regs = false,
|
||||||
|
.idle_ps = false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "qca6390 hw2.0",
|
.name = "qca6390 hw2.0",
|
||||||
|
@ -135,6 +137,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
|
||||||
BIT(NL80211_IFTYPE_AP),
|
BIT(NL80211_IFTYPE_AP),
|
||||||
.supports_monitor = false,
|
.supports_monitor = false,
|
||||||
.supports_shadow_regs = true,
|
.supports_shadow_regs = true,
|
||||||
|
.idle_ps = true,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -160,6 +160,7 @@ struct ath11k_hw_params {
|
||||||
u16 interface_modes;
|
u16 interface_modes;
|
||||||
bool supports_monitor;
|
bool supports_monitor;
|
||||||
bool supports_shadow_regs;
|
bool supports_shadow_regs;
|
||||||
|
bool idle_ps;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ath11k_hw_ops {
|
struct ath11k_hw_ops {
|
||||||
|
|
|
@ -4208,6 +4208,15 @@ static int ath11k_mac_op_start(struct ieee80211_hw *hw)
|
||||||
rcu_assign_pointer(ab->pdevs_active[ar->pdev_idx],
|
rcu_assign_pointer(ab->pdevs_active[ar->pdev_idx],
|
||||||
&ab->pdevs[ar->pdev_idx]);
|
&ab->pdevs[ar->pdev_idx]);
|
||||||
|
|
||||||
|
/* allow device to enter IMPS */
|
||||||
|
if (ab->hw_params.idle_ps) {
|
||||||
|
ret = ath11k_wmi_pdev_set_param(ar, WMI_PDEV_PARAM_IDLE_PS_CONFIG,
|
||||||
|
1, pdev->pdev_id);
|
||||||
|
if (ret) {
|
||||||
|
ath11k_err(ab, "failed to enable idle ps: %d\n", ret);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
|
|
Loading…
Add table
Reference in a new issue