From aa6a5baf88a861aef7d3a0ac20a6528180dfd9f3 Mon Sep 17 00:00:00 2001
From: Hauke Mehrtens <hauke@hauke-m.de>
Date: Mon, 11 Nov 2013 22:00:39 +0000
Subject: broadcom-wl: simplify processing of 'hwmode'

Default gmode to "GOnly" unless explicitly overwridden.  This corrects
processing for 11ng to specify "GOnly" for gmode instead of "Auto"
(which translated to "bg").

Signed-off-by: Nathan Hintz <nlhintz@hotmail.com>

SVN-Revision: 38754
---
 .../kernel/broadcom-wl/files/lib/wifi/broadcom.sh  | 42 +++++++++++-----------
 1 file changed, 22 insertions(+), 20 deletions(-)

(limited to 'package/kernel/broadcom-wl')

diff --git a/package/kernel/broadcom-wl/files/lib/wifi/broadcom.sh b/package/kernel/broadcom-wl/files/lib/wifi/broadcom.sh
index 191092af38..7721b87191 100644
--- a/package/kernel/broadcom-wl/files/lib/wifi/broadcom.sh
+++ b/package/kernel/broadcom-wl/files/lib/wifi/broadcom.sh
@@ -165,32 +165,34 @@ enable_broadcom() {
 		;;
 	esac
 
-	[ ${channel:-0} -ge 1 -a ${channel:-0} -le 14 ] && band=2
-	[ ${channel:-0} -ge 36 ] && band=1
+	local gmode=2 nmode=0 nreqd=
+	case "$hwmode" in
+		*a)	gmode=;;
+		*b)	gmode=0;;
+		*bg)	gmode=1;;
+		*g)	gmode=2;;
+		*gst)	gmode=4;;
+		*lrs)	gmode=5;;
+		*)	nmode=1; nreqd=0;;
+	esac
 
 	case "$hwmode" in
-		*na)	nmode=1; nreqd=0;;
-		*a)	nmode=0;;
-		*ng)	gmode=1; nmode=1; nreqd=0;;
-		*n)	nmode=1; nreqd=1;;
-		*b)	gmode=0; nmode=0;;
-		*bg)	gmode=1; nmode=0;;
-		*g)	gmode=2; nmode=0;;
-		*gst)	gmode=4; nmode=0;;
-		*lrs)	gmode=5; nmode=0;;
-		*)      case "$band" in
-				2) gmode=1; nmode=1; nreqd=0;;
-				1) nmode=1; nreqd=0;;
-				*) gmode=1; nmode=1; nreqd=0;;
-			esac
-			;;
+		n|11n)	nmode=1; nreqd=1;;
+		*n*)	nmode=1; nreqd=0;;
 	esac
 
         # Use 'nmode' for N-Phy only
-	[ "$(wlc ifname $device phytype)" = 4 ] || nmode=
+	[ "$(wlc ifname "$device" phytype)" = 4 ] || nmode=
+
+	local band chanspec
+	[ ${channel:-0} -ge 1 -a ${channel:-0} -le 14 ] && band=2
+	[ ${channel:-0} -ge 36 ] && {
+		band=1
+		gmode=
+	}
 
 	# Use 'chanspec' instead of 'channel' for 'N' modes (See bcmwifi.h)
-	[ ${nmode:-0} -ne 0 -a -n "$band" ] && {
+	[ ${nmode:-0} -ne 0 -a -n "$band" -a -n "$channel" ] && {
 		case "$htmode" in
 			HT40-)	chanspec=$(printf 0x%x%x%02x $band 0xe $(($channel - 2))); channel=;;
 			HT40+)	chanspec=$(printf 0x%x%x%02x $band 0xd $(($channel + 2))); channel=;;
@@ -352,7 +354,7 @@ enable_broadcom() {
 	wlc ifname "$device" stdin <<EOF
 $ifdown
 
-${nmode:+band ${band:-0}}
+band ${band:-0}
 ${nmode:+nmode $nmode}
 ${nmode:+${nreqd:+nreqd $nreqd}}
 ${gmode:+gmode $gmode}
-- 
cgit v1.2.3