diff options
-rw-r--r-- | drivers/net/wireless/ti/wlcore/cmd.c | 16 |
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: | |||
1606 | int wl12xx_roc(struct wl1271 *wl, struct wl12xx_vif *wlvif, u8 role_id) | 1606 | int 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); |