}
}
-static int _ks_wlan_hw_power_save(struct ks_wlan_private *priv)
+static void _ks_wlan_hw_power_save(struct ks_wlan_private *priv)
{
unsigned char rw_data;
int ret;
if (priv->reg.powermgt == POWMGT_ACTIVE_MODE)
- return 0;
+ return;
if (priv->reg.operation_mode != MODE_INFRASTRUCTURE ||
(priv->connect_status & CONNECT_STATUS_MASK) != CONNECT_STATUS)
- return 0;
+ return;
if (priv->dev_state != DEVICE_STATE_SLEEP)
- return 0;
+ return;
if (atomic_read(&priv->psstatus.status) == PS_SNOOZE)
- return 0;
+ return;
DPRINTK(5, "\npsstatus.status=%d\npsstatus.confirm_wait=%d\npsstatus.snooze_guard=%d\ncnt_txqbody=%d\n",
atomic_read(&priv->psstatus.status),
atomic_read(&priv->psstatus.snooze_guard),
cnt_txqbody(priv));
- if (!atomic_read(&priv->psstatus.confirm_wait) &&
- !atomic_read(&priv->psstatus.snooze_guard) &&
- !cnt_txqbody(priv)) {
- ret = ks7010_sdio_read(priv, INT_PENDING, &rw_data,
- sizeof(rw_data));
+ if (atomic_read(&priv->psstatus.confirm_wait) ||
+ atomic_read(&priv->psstatus.snooze_guard) ||
+ cnt_txqbody(priv)) {
+ queue_delayed_work(priv->ks_wlan_hw.ks7010sdio_wq,
+ &priv->ks_wlan_hw.rw_wq, 0);
+ return;
+ }
+
+ ret = ks7010_sdio_read(priv, INT_PENDING, &rw_data, sizeof(rw_data));
+ if (ret) {
+ DPRINTK(1, " error : INT_PENDING=%02X\n", rw_data);
+ queue_delayed_work(priv->ks_wlan_hw.ks7010sdio_wq,
+ &priv->ks_wlan_hw.rw_wq, 1);
+ return;
+ }
+
+ if (!rw_data) {
+ rw_data = GCR_B_DOZE;
+ ret = ks7010_sdio_write(priv, GCR_B, &rw_data, sizeof(rw_data));
if (ret) {
- DPRINTK(1, " error : INT_PENDING=%02X\n", rw_data);
- queue_delayed_work(priv->ks_wlan_hw.ks7010sdio_wq,
- &priv->ks_wlan_hw.rw_wq, 1);
- return 0;
- }
- if (!rw_data) {
- rw_data = GCR_B_DOZE;
- ret = ks7010_sdio_write(priv, GCR_B, &rw_data,
- sizeof(rw_data));
- if (ret) {
- DPRINTK(1, " error : GCR_B=%02X\n", rw_data);
- queue_delayed_work(priv->ks_wlan_hw.ks7010sdio_wq,
- &priv->ks_wlan_hw.rw_wq, 1);
- return 0;
- }
- DPRINTK(4, "PMG SET!! : GCR_B=%02X\n", rw_data);
- atomic_set(&priv->psstatus.status, PS_SNOOZE);
- DPRINTK(3, "psstatus.status=PS_SNOOZE\n");
- } else {
+ DPRINTK(1, " error : GCR_B=%02X\n", rw_data);
queue_delayed_work(priv->ks_wlan_hw.ks7010sdio_wq,
&priv->ks_wlan_hw.rw_wq, 1);
+ return;
}
+ DPRINTK(4, "PMG SET!! : GCR_B=%02X\n", rw_data);
+ atomic_set(&priv->psstatus.status, PS_SNOOZE);
+ DPRINTK(3, "psstatus.status=PS_SNOOZE\n");
} else {
queue_delayed_work(priv->ks_wlan_hw.ks7010sdio_wq,
- &priv->ks_wlan_hw.rw_wq, 0);
+ &priv->ks_wlan_hw.rw_wq, 1);
}
- return 0;
+ return;
}
int ks_wlan_hw_power_save(struct ks_wlan_private *priv)