summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/realtek/rtw88/ps.c
diff options
context:
space:
mode:
authorBrian Norris <briannorris@chromium.org>2019-10-11 18:27:20 -0700
committerKalle Valo <kvalo@codeaurora.org>2019-10-14 12:11:33 +0300
commit4ee2f342669991b733cceec53300407da555924d (patch)
tree9540132efd42d774d76ce20be1e9e3e9dd662306 /drivers/net/wireless/realtek/rtw88/ps.c
parent12078aae453556a88fb46777b7cc5fc97f867b7c (diff)
downloadlinux-4ee2f342669991b733cceec53300407da555924d.tar.gz
linux-4ee2f342669991b733cceec53300407da555924d.tar.bz2
linux-4ee2f342669991b733cceec53300407da555924d.zip
rtw88: use a for loop in rtw_power_mode_change(), not goto
No change in logic. Signed-off-by: Brian Norris <briannorris@chromium.org> Acked-by: Yan-Hsuan Chuang <yhchuang@realtek.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers/net/wireless/realtek/rtw88/ps.c')
-rw-r--r--drivers/net/wireless/realtek/rtw88/ps.c61
1 files changed, 29 insertions, 32 deletions
diff --git a/drivers/net/wireless/realtek/rtw88/ps.c b/drivers/net/wireless/realtek/rtw88/ps.c
index e81de3ddc8c5..820e0a3a141c 100644
--- a/drivers/net/wireless/realtek/rtw88/ps.c
+++ b/drivers/net/wireless/realtek/rtw88/ps.c
@@ -69,24 +69,26 @@ void rtw_power_mode_change(struct rtw_dev *rtwdev, bool enter)
u8 polling_cnt;
u8 retry_cnt = 0;
-retry:
- request = rtw_read8(rtwdev, rtwdev->hci.rpwm_addr);
- confirm = rtw_read8(rtwdev, rtwdev->hci.cpwm_addr);
-
- /* toggle to request power mode, others remain 0 */
- request ^= request | BIT_RPWM_TOGGLE;
- if (!enter) {
- request |= POWER_MODE_ACK;
- } else {
- request |= POWER_MODE_LCLK;
- if (rtw_fw_lps_deep_mode == LPS_DEEP_MODE_PG)
- request |= POWER_MODE_PG;
- }
+ for (retry_cnt = 0; retry_cnt < 3; retry_cnt++) {
+ request = rtw_read8(rtwdev, rtwdev->hci.rpwm_addr);
+ confirm = rtw_read8(rtwdev, rtwdev->hci.cpwm_addr);
+
+ /* toggle to request power mode, others remain 0 */
+ request ^= request | BIT_RPWM_TOGGLE;
+ if (!enter) {
+ request |= POWER_MODE_ACK;
+ } else {
+ request |= POWER_MODE_LCLK;
+ if (rtw_fw_lps_deep_mode == LPS_DEEP_MODE_PG)
+ request |= POWER_MODE_PG;
+ }
- rtw_write8(rtwdev, rtwdev->hci.rpwm_addr, request);
+ rtw_write8(rtwdev, rtwdev->hci.rpwm_addr, request);
+
+ if (enter)
+ return;
- /* check confirm power mode has left power save state */
- if (!enter) {
+ /* check confirm power mode has left power save state */
for (polling_cnt = 0; polling_cnt < 3; polling_cnt++) {
polling = rtw_read8(rtwdev, rtwdev->hci.cpwm_addr);
if ((polling ^ confirm) & BIT_RPWM_TOGGLE)
@@ -94,23 +96,18 @@ retry:
mdelay(20);
}
- /* in case of fw/hw missed the request, retry 3 times */
- if (retry_cnt < 3) {
- rtw_warn(rtwdev, "failed to leave deep PS, retry=%d\n",
- retry_cnt);
- retry_cnt++;
- goto retry;
- }
-
- /* Hit here means that driver failed to change hardware
- * power mode to active state after retry 3 times.
- * If the power state is locked at Deep sleep, most of
- * the hardware circuits is not working, even register
- * read/write. It should be treated as fatal error and
- * requires an entire analysis about the firmware/hardware
- */
- WARN(1, "Hardware power state locked\n");
+ /* in case of fw/hw missed the request, retry */
+ rtw_warn(rtwdev, "failed to leave deep PS, retry=%d\n",
+ retry_cnt);
}
+
+ /* Hit here means that driver failed to change hardware power mode to
+ * active state after retry 3 times. If the power state is locked at
+ * Deep sleep, most of the hardware circuits is not working, even
+ * register read/write. It should be treated as fatal error and
+ * requires an entire analysis about the firmware/hardware
+ */
+ WARN(1, "Hardware power state locked\n");
}
EXPORT_SYMBOL(rtw_power_mode_change);