summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Shmidt <dimitrysh@google.com>2011-10-09 02:33:05 +0100
committerAndy Green <andy.green@linaro.org>2011-10-09 02:33:05 +0100
commit57dfe636caf846442c78963155e3883e76ce5763 (patch)
tree37f02e72073c1aea238dda170193b49ef9ab52a0
parent782bd122ee6f8e66de614f54c010979745992ea9 (diff)
net: wireless: bcmdhd: Skip disassoc if country is not changed in country set
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
-rw-r--r--drivers/net/wireless/bcmdhd/wldev_common.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/drivers/net/wireless/bcmdhd/wldev_common.c b/drivers/net/wireless/bcmdhd/wldev_common.c
index b01e4a2b8c9..e69561e1bf3 100644
--- a/drivers/net/wireless/bcmdhd/wldev_common.c
+++ b/drivers/net/wireless/bcmdhd/wldev_common.c
@@ -309,11 +309,19 @@ int wldev_set_country(
if (!country_code)
return error;
- bzero(&scbval, sizeof(scb_val_t));
- error = wldev_ioctl(dev, WLC_DISASSOC, &scbval, sizeof(scb_val_t), 1);
- if (error < 0) {
- DHD_ERROR(("%s: set country failed due to Disassoc error\n", __FUNCTION__));
- return error;
+ error = wldev_iovar_getbuf(dev, "country", &cspec, sizeof(cspec),
+ smbuf, sizeof(smbuf));
+ if (error < 0)
+ DHD_ERROR(("%s: get country failed = %d\n", __FUNCTION__, error));
+
+ if ((error < 0) ||
+ (strncmp(country_code, smbuf, WLC_CNTRY_BUF_SZ) != 0)) {
+ bzero(&scbval, sizeof(scb_val_t));
+ error = wldev_ioctl(dev, WLC_DISASSOC, &scbval, sizeof(scb_val_t), 1);
+ if (error < 0) {
+ DHD_ERROR(("%s: set country failed due to Disassoc error\n", __FUNCTION__));
+ return error;
+ }
}
cspec.rev = -1;
memcpy(cspec.country_abbrev, country_code, WLC_CNTRY_BUF_SZ);