From 48f7897661fb92e22369766cdf6729fff74f9139 Mon Sep 17 00:00:00 2001 From: Grazvydas Ignotas Date: Sat, 19 Apr 2014 21:06:09 +0300 Subject: [PATCH 1/1] wl1251: improve PS report handling --- drivers/net/wireless/wl1251/event.c | 15 ++++++++++----- drivers/net/wireless/wl1251/ps.c | 3 ++- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/drivers/net/wireless/wl1251/event.c b/drivers/net/wireless/wl1251/event.c index bd1e90f113fb..8c70b14b9191 100644 --- a/drivers/net/wireless/wl1251/event.c +++ b/drivers/net/wireless/wl1251/event.c @@ -109,12 +109,17 @@ static int wl1251_event_process(struct wl1251 *wl, struct event_mailbox *mbox) if (ret < 0) wl1251_error("beacon filter enable failed"); - } else if (mbox->ps_status == ENTER_POWER_SAVE_FAIL) - wl->station_mode = STATION_ACTIVE_MODE; - else if (mbox->ps_status == EXIT_POWER_SAVE_FAIL) - wl->station_mode = STATION_POWER_SAVE_MODE; + } else if (wl->ps_transitioning) { + if (mbox->ps_status == ENTER_POWER_SAVE_FAIL) + wl->station_mode = STATION_ACTIVE_MODE; + /* always happens on exit from idle - ignore for now + else if (mbox->ps_status == EXIT_POWER_SAVE_FAIL) + wl->station_mode = STATION_POWER_SAVE_MODE; + */ + } - //wl1251_error("ps_status %d", mbox->ps_status); + //wl1251_error("ps_status %d, mode %d", + // mbox->ps_status, wl->station_mode); wl->ps_transitioning = false; } diff --git a/drivers/net/wireless/wl1251/ps.c b/drivers/net/wireless/wl1251/ps.c index c449857b2313..0dbdd24aa01a 100644 --- a/drivers/net/wireless/wl1251/ps.c +++ b/drivers/net/wireless/wl1251/ps.c @@ -177,8 +177,9 @@ int wl1251_ps_set_mode(struct wl1251 *wl, enum wl1251_station_mode mode) break; } + if (mode != wl->station_mode) + wl->ps_transitioning = true; wl->station_mode = mode; - wl->ps_transitioning = true; wl->ps_change_jiffies = jiffies; return ret; -- 2.39.2