OSDN Git Service

wcn36xx: Implement Idle Mode Power Save
authorBryan O'Donoghue <bryan.odonoghue@linaro.org>
Thu, 9 Sep 2021 15:33:20 +0000 (16:33 +0100)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 21 Sep 2021 13:34:32 +0000 (16:34 +0300)
commit0e159d2c0834852f4f76a8a7741966dd81744bed
tree4ea122966318bae0ea1f892b0a3a583062f99de3
parentc0c2eb20c79e10e7c828e8a1be1efd346d568d5f
wcn36xx: Implement Idle Mode Power Save

Idle Mode Power Save (IMPS) is a power saving mechanism which when called
by wcn36xx will cause the radio hardware to enter power collapse.

This particular call maps nicely to a simple conjunction/disjunction around
IEEE80211_CONF_CHANGE_IDLE and IEEE80211_CONF_IDLE.

Here we enter idle when we are not associated with an AP. The kernel will
incrementally toggle idle on/off in the process of trying to establish a
connection, thus saving power until we are connected to the AP again, at
which point we give way to BMPS if power_save is on.

We've validated that with IMPS an apq8039 device which has the wcn36xx
module loaded but, has not authenticated with an AP will get to VMIN on
suspend and will not without IMPS.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Tested-by: Benjamin Li <benl@squareup.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20210909153320.2624649-1-bryan.odonoghue@linaro.org
drivers/net/wireless/ath/wcn36xx/hal.h
drivers/net/wireless/ath/wcn36xx/main.c
drivers/net/wireless/ath/wcn36xx/smd.c
drivers/net/wireless/ath/wcn36xx/smd.h