--- a/driver/wl_iw.c +++ b/driver/wl_iw.c @@ -314,7 +314,7 @@ wl_iw_get_name( ) { int phytype, err; - uint band[3]; + uint i, band[3], bands; char cap[5]; WL_TRACE(("%s: SIOCGIWNAME\n", dev->name)); @@ -335,16 +335,20 @@ wl_iw_get_name( break; case WLC_PHY_TYPE_LP: case WLC_PHY_TYPE_G: - if (band[0] >= 2) - strcpy(cap, "abg"); - else - strcpy(cap, "bg"); - break; case WLC_PHY_TYPE_N: - if (band[0] >= 2) - strcpy(cap, "abgn"); - else - strcpy(cap, "bgn"); + bands = 0; + for (i = 1; i <= band[0]; i++) { + bands |= dtoh32(band[i]); + } + strcpy(cap, ""); + if (bands & WLC_BAND_5G) + strcat(cap, "a"); + if (bands & WLC_BAND_2G) + strcat(cap, "bg"); + if (phytype == WLC_PHY_TYPE_N) + strcat(cap, "n"); + break; + default: break; } done: