--- a/driver/wl_iw.c
+++ b/driver/wl_iw.c
@@ -314,7 +314,7 @@
 )
 {
 	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 @@
 			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:
