wl12xx: optimise elp wakeup and sleep calls

The wakeup call was done too deep in code path, it's better to wakeup
chip from higher levels. This will also reduce wakeup calls significantly.

Signed-off-by: Kalle Valo <kalle.valo@nokia.com>
Reviewed-by: Luciano Coelho <luciano.coelho@nokia.com>
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
diff --git a/drivers/net/wireless/wl12xx/main.c b/drivers/net/wireless/wl12xx/main.c
index 7ec1749..894d5cc 100644
--- a/drivers/net/wireless/wl12xx/main.c
+++ b/drivers/net/wireless/wl12xx/main.c
@@ -239,11 +239,14 @@
 	if (wl->state == WL12XX_STATE_OFF)
 		goto out;
 
+	wl12xx_ps_elp_wakeup(wl);
+
 	ret = wl12xx_cmd_join(wl, wl->bss_type, 1, 100, 0);
 	if (ret < 0)
 		goto out;
 
 out:
+	wl12xx_ps_elp_sleep(wl);
 	mutex_unlock(&wl->mutex);
 }
 
@@ -521,6 +524,8 @@
 
 	mutex_lock(&wl->mutex);
 
+	wl12xx_ps_elp_wakeup(wl);
+
 	if (channel != wl->channel) {
 		/* FIXME: use beacon interval provided by mac80211 */
 		ret = wl12xx_cmd_join(wl, wl->bss_type, 1, 100, 0);
@@ -564,6 +569,7 @@
 	}
 
 out:
+	wl12xx_ps_elp_sleep(wl);
 	mutex_unlock(&wl->mutex);
 	return ret;
 }
@@ -702,6 +708,8 @@
 
 	mutex_lock(&wl->mutex);
 
+	wl12xx_ps_elp_wakeup(wl);
+
 	switch (cmd) {
 	case SET_KEY:
 		wl_cmd->key_action = KEY_ADD_OR_REPLACE;
@@ -752,6 +760,7 @@
 	}
 
 out_unlock:
+	wl12xx_ps_elp_sleep(wl);
 	mutex_unlock(&wl->mutex);
 
 out:
@@ -946,7 +955,11 @@
 	}
 
 	mutex_lock(&wl->mutex);
+	wl12xx_ps_elp_wakeup(wl);
+
 	ret = wl12xx_hw_scan(hw->priv, ssid, ssid_len, 1, 0, 13, 3);
+
+	wl12xx_ps_elp_sleep(wl);
 	mutex_unlock(&wl->mutex);
 
 	return ret;
@@ -959,11 +972,15 @@
 
 	mutex_lock(&wl->mutex);
 
+	wl12xx_ps_elp_wakeup(wl);
+
 	ret = wl12xx_acx_rts_threshold(wl, (u16) value);
 
 	if (ret < 0)
 		wl12xx_warning("wl12xx_op_set_rts_threshold failed: %d", ret);
 
+	wl12xx_ps_elp_sleep(wl);
+
 	mutex_unlock(&wl->mutex);
 
 	return ret;
@@ -983,6 +1000,8 @@
 
 	mutex_lock(&wl->mutex);
 
+	wl12xx_ps_elp_wakeup(wl);
+
 	if (changed & BSS_CHANGED_ASSOC) {
 		if (bss_conf->assoc) {
 			wl->aid = bss_conf->aid;
@@ -1072,6 +1091,7 @@
 	}
 
 out:
+	wl12xx_ps_elp_sleep(wl);
 	mutex_unlock(&wl->mutex);
 }