|
@@ -1606,19 +1606,25 @@ out:
|
|
|
int wl12xx_roc(struct wl1271 *wl, struct wl12xx_vif *wlvif, u8 role_id)
|
|
|
{
|
|
|
int ret = 0;
|
|
|
+ bool is_first_roc;
|
|
|
|
|
|
if (WARN_ON(test_bit(role_id, wl->roc_map)))
|
|
|
return 0;
|
|
|
|
|
|
+ is_first_roc = (find_first_bit(wl->roc_map, WL12XX_MAX_ROLES) >=
|
|
|
+ WL12XX_MAX_ROLES);
|
|
|
+
|
|
|
ret = wl12xx_cmd_roc(wl, wlvif, role_id);
|
|
|
if (ret < 0)
|
|
|
goto out;
|
|
|
|
|
|
- ret = wl1271_cmd_wait_for_event(wl,
|
|
|
- REMAIN_ON_CHANNEL_COMPLETE_EVENT_ID);
|
|
|
- if (ret < 0) {
|
|
|
- wl1271_error("cmd roc event completion error");
|
|
|
- goto out;
|
|
|
+ if (is_first_roc) {
|
|
|
+ ret = wl1271_cmd_wait_for_event(wl,
|
|
|
+ REMAIN_ON_CHANNEL_COMPLETE_EVENT_ID);
|
|
|
+ if (ret < 0) {
|
|
|
+ wl1271_error("cmd roc event completion error");
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
__set_bit(role_id, wl->roc_map);
|