diff --git a/drivers/staging/ks7010/ks7010_sdio.c b/drivers/staging/ks7010/ks7010_sdio.c index b34850dddf30..1db59c6946bc 100644 --- a/drivers/staging/ks7010/ks7010_sdio.c +++ b/drivers/staging/ks7010/ks7010_sdio.c @@ -169,23 +169,23 @@ void ks_wlan_hw_wakeup_request(struct ks_wlan_private *priv) } } -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), @@ -193,40 +193,40 @@ static int _ks_wlan_hw_power_save(struct ks_wlan_private *priv) 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 (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 { - queue_delayed_work(priv->ks_wlan_hw.ks7010sdio_wq, - &priv->ks_wlan_hw.rw_wq, 1); - } - } else { + 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; } - return 0; + 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 : 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, 1); + } + + return; } int ks_wlan_hw_power_save(struct ks_wlan_private *priv)