|
@@ -1344,8 +1344,10 @@ static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
|
|
|
|
|
|
mutex_lock(&wl->mutex);
|
|
|
|
|
|
- if (unlikely(wl->state == WL1271_STATE_OFF))
|
|
|
+ if (unlikely(wl->state == WL1271_STATE_OFF)) {
|
|
|
+ ret = -EAGAIN;
|
|
|
goto out;
|
|
|
+ }
|
|
|
|
|
|
ret = wl1271_ps_elp_wakeup(wl, false);
|
|
|
if (ret < 0)
|
|
@@ -1568,6 +1570,11 @@ static int wl1271_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
|
|
|
|
|
|
mutex_lock(&wl->mutex);
|
|
|
|
|
|
+ if (unlikely(wl->state == WL1271_STATE_OFF)) {
|
|
|
+ ret = -EAGAIN;
|
|
|
+ goto out_unlock;
|
|
|
+ }
|
|
|
+
|
|
|
ret = wl1271_ps_elp_wakeup(wl, false);
|
|
|
if (ret < 0)
|
|
|
goto out_unlock;
|
|
@@ -1708,8 +1715,10 @@ static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
|
|
|
|
|
|
mutex_lock(&wl->mutex);
|
|
|
|
|
|
- if (unlikely(wl->state == WL1271_STATE_OFF))
|
|
|
+ if (unlikely(wl->state == WL1271_STATE_OFF)) {
|
|
|
+ ret = -EAGAIN;
|
|
|
goto out;
|
|
|
+ }
|
|
|
|
|
|
ret = wl1271_ps_elp_wakeup(wl, false);
|
|
|
if (ret < 0)
|
|
@@ -1760,6 +1769,9 @@ static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
|
|
|
|
|
|
mutex_lock(&wl->mutex);
|
|
|
|
|
|
+ if (unlikely(wl->state == WL1271_STATE_OFF))
|
|
|
+ goto out;
|
|
|
+
|
|
|
ret = wl1271_ps_elp_wakeup(wl, false);
|
|
|
if (ret < 0)
|
|
|
goto out;
|
|
@@ -2040,6 +2052,11 @@ static int wl1271_op_conf_tx(struct ieee80211_hw *hw, u16 queue,
|
|
|
|
|
|
wl1271_debug(DEBUG_MAC80211, "mac80211 conf tx %d", queue);
|
|
|
|
|
|
+ if (unlikely(wl->state == WL1271_STATE_OFF)) {
|
|
|
+ ret = -EAGAIN;
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
+
|
|
|
ret = wl1271_ps_elp_wakeup(wl, false);
|
|
|
if (ret < 0)
|
|
|
goto out;
|
|
@@ -2083,6 +2100,9 @@ static u64 wl1271_op_get_tsf(struct ieee80211_hw *hw)
|
|
|
|
|
|
mutex_lock(&wl->mutex);
|
|
|
|
|
|
+ if (unlikely(wl->state == WL1271_STATE_OFF))
|
|
|
+ goto out;
|
|
|
+
|
|
|
ret = wl1271_ps_elp_wakeup(wl, false);
|
|
|
if (ret < 0)
|
|
|
goto out;
|