[PATCH 3/3] Use SMSM bus to send data frames
dreamfly281 at gmail.com
dreamfly281 at gmail.com
Tue Jul 9 04:30:53 EDT 2013
From: Yanbo Li <yanbol at qti.qualcomm.com>
In connected state driver will enter BMPS mode and chip
can go to suspend. When driver will try to send a frame
chip can sleep at that time so wake it up through SMSM
bus.
Reset the power state when return from the suspend mode
Signed-off-by: Yanbo Li <yanbol at qti.qualcomm.com>
Signed-off-by: Eugene Krasnikov <k.eugene.e at gmail.com>
---
dxe.c | 20 +++++++++++++++++---
main.c | 4 ++--
2 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/dxe.c b/dxe.c
index 5e0dd89..0d9e26b 100644
--- a/dxe.c
+++ b/dxe.c
@@ -590,9 +590,23 @@ int wcn36xx_dxe_tx_frame(struct wcn36xx *wcn,
/* Move the head of the ring to the next empty descriptor */
ch->head_blk_ctl = ctl->next;
- /* indicate End Of Packet and generate interrupt on descriptor done */
- wcn36xx_dxe_write_register(wcn,
- ch->reg_ctrl, ch->def_ctrl);
+ /*
+ * When connected and trying to send data frame chip can be in sleep
+ * mode and writing to the register will not wake up the chip. Instead
+ * notify chip about new frame through SMSM bus.
+ */
+ if (wcn->pw_state == WCN36XX_BMPS) {
+ smsm_change_state(SMSM_APPS_STATE,
+ 0,
+ WCN36XX_SMSM_WLAN_TX_RINGS_EMPTY |
+ WCN36XX_SMSM_WLAN_TX_ENABLE);
+ } else {
+ /* indicate End Of Packet and generate interrupt on descriptor
+ * done.
+ */
+ wcn36xx_dxe_write_register(wcn,
+ ch->reg_ctrl, ch->def_ctrl);
+ }
return 0;
}
int wcn36xx_dxe_init(struct wcn36xx *wcn)
diff --git a/main.c b/main.c
index b59a885..4457979 100644
--- a/main.c
+++ b/main.c
@@ -741,8 +741,8 @@ static int wcn36xx_resume(struct ieee80211_hw *hw)
wcn36xx_dbg(WCN36XX_DBG_MAC, "mac resume");
wcn->is_suspended = false;
- if (wcn->aid > 0)
- wcn36xx_smd_exit_bmps(wcn);
+ if (wcn->pw_state == WCN36XX_BMPS)
+ wcn36xx_pmc_exit_bmps_state(wcn);
if (wcn->is_con_lost_pending) {
wcn36xx_dbg(WCN36XX_DBG_MAC, "report connection lost");
--
1.7.9.5
More information about the wcn36xx
mailing list