aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/ti/wlcore/cmd.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/drivers/net/wireless/ti/wlcore/cmd.c b/drivers/net/wireless/ti/wlcore/cmd.c
index e8c650dec18c..df8d672b1f06 100644
--- a/drivers/net/wireless/ti/wlcore/cmd.c
+++ b/drivers/net/wireless/ti/wlcore/cmd.c
@@ -1606,19 +1606,25 @@ out:
1606int wl12xx_roc(struct wl1271 *wl, struct wl12xx_vif *wlvif, u8 role_id) 1606int wl12xx_roc(struct wl1271 *wl, struct wl12xx_vif *wlvif, u8 role_id)
1607{ 1607{
1608 int ret = 0; 1608 int ret = 0;
1609 bool is_first_roc;
1609 1610
1610 if (WARN_ON(test_bit(role_id, wl->roc_map))) 1611 if (WARN_ON(test_bit(role_id, wl->roc_map)))
1611 return 0; 1612 return 0;
1612 1613
1614 is_first_roc = (find_first_bit(wl->roc_map, WL12XX_MAX_ROLES) >=
1615 WL12XX_MAX_ROLES);
1616
1613 ret = wl12xx_cmd_roc(wl, wlvif, role_id); 1617 ret = wl12xx_cmd_roc(wl, wlvif, role_id);
1614 if (ret < 0) 1618 if (ret < 0)
1615 goto out; 1619 goto out;
1616 1620
1617 ret = wl1271_cmd_wait_for_event(wl, 1621 if (is_first_roc) {
1618 REMAIN_ON_CHANNEL_COMPLETE_EVENT_ID); 1622 ret = wl1271_cmd_wait_for_event(wl,
1619 if (ret < 0) { 1623 REMAIN_ON_CHANNEL_COMPLETE_EVENT_ID);
1620 wl1271_error("cmd roc event completion error"); 1624 if (ret < 0) {
1621 goto out; 1625 wl1271_error("cmd roc event completion error");
1626 goto out;
1627 }
1622 } 1628 }
1623 1629
1624 __set_bit(role_id, wl->roc_map); 1630 __set_bit(role_id, wl->roc_map);