f1305a45d2ac65f448f958099428b08f4d663a71
[openwrt.git] / package / kernel / broadcom-wl / patches / 014-fix-band-reporting.patch
1 --- a/driver/wl_iw.c
2 +++ b/driver/wl_iw.c
3 @@ -314,7 +314,7 @@
4  )
5  {
6         int phytype, err;
7 -       uint band[3];
8 +       uint i, band[3], bands;
9         char cap[5];
10  
11         WL_TRACE(("%s: SIOCGIWNAME\n", dev->name));
12 @@ -335,16 +335,20 @@
13                         break;
14                 case WLC_PHY_TYPE_LP:
15                 case WLC_PHY_TYPE_G:
16 -                       if (band[0] >= 2)
17 -                               strcpy(cap, "abg");
18 -                       else
19 -                               strcpy(cap, "bg");
20 -                       break;
21                 case WLC_PHY_TYPE_N:
22 -                       if (band[0] >= 2)
23 -                               strcpy(cap, "abgn");
24 -                       else
25 -                               strcpy(cap, "bgn");
26 +                       bands = 0;
27 +                       for (i = 1; i <= band[0]; i++) {
28 +                               bands |= dtoh32(band[i]);
29 +                       }
30 +                       strcpy(cap, "");
31 +                       if (bands & WLC_BAND_5G)
32 +                               strcat(cap, "a");
33 +                       if (bands & WLC_BAND_2G)
34 +                               strcat(cap, "bg");
35 +                       if (phytype == WLC_PHY_TYPE_N)
36 +                               strcat(cap, "n");
37 +                       break;
38 +               default:
39                         break;
40         }
41  done: