diff options
author | Dmitry Shmidt <dimitrysh@google.com> | 2011-10-25 11:41:34 +0800 |
---|---|---|
committer | Andy Green <andy.green@linaro.org> | 2011-10-25 11:41:34 +0800 |
commit | c3f1321ac6d7283f9e3e7b7a9edb7a6da309b7ab (patch) | |
tree | 1ccf3dc8a2a4a099220fea6584f4f70d98644b43 | |
parent | f393bcffdd47eb4678f6e3aa48b71fc7c13ace93 (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.c | 18 |
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); |