From 14d0041023cb4fabffd31f69519f82acd4764baa Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@openwrt.org>
Date: Thu, 23 Oct 2008 01:07:50 +0000
Subject: [PATCH] implement uci config option for the nanostation
 antenna/polarity control (ns2 and ns5 supported)

SVN-Revision: 13028
---
 package/madwifi/files/lib/wifi/madwifi.sh | 55 +++++++++++++++++++----
 1 file changed, 47 insertions(+), 8 deletions(-)

diff --git a/package/madwifi/files/lib/wifi/madwifi.sh b/package/madwifi/files/lib/wifi/madwifi.sh
index e4e99822bd..1188e4f87d 100755
--- a/package/madwifi/files/lib/wifi/madwifi.sh
+++ b/package/madwifi/files/lib/wifi/madwifi.sh
@@ -174,20 +174,49 @@ enable_atheros() {
 		[ -n "$bgscan" ] && iwpriv "$ifname" bgscan "$bgscan"
 
 		config_get_bool antdiv "$device" diversity
-		[ -n "$antdiv" ] && sysctl -w dev."$device".diversity="$antdiv" >&-
-
 		config_get antrx "$device" rxantenna
-		[ -n "$antrx" ] && sysctl -w dev."$device".rxantenna="$antrx" >&-
-
 		config_get anttx "$device" txantenna
+		config_get_bool softled "$device" softled 1
+
+		devname="$(cat /proc/sys/dev/$device/dev_name)"
+		antgpio=
+		case "$devname" in
+			NanoStation2) antgpio=7;;
+			NanoStation5) antgpio=1;;
+		esac
+		if [ -n "$antgpio" ]; then
+			softled=0
+			config_get polarity "$device" polarity
+			case "$antenna" in
+				horizontal) antdiv=0; antrx=1; anttx=1 ;;
+				vertical) antdiv=0; antrx=2; anttx=2 ;;
+				auto) antdiv=1; antrx=0; anttx=0 ;;
+			esac
+			config_get antenna "$device" antenna
+			[ -x "$(which gpioctl 2>/dev/null)" ] || antenna=
+			case "$antenna" in
+				internal)
+					gpioctl "dirout" "$antgpio" >/dev/null 2>&1
+					gpioctl "set" "$antgpio" >/dev/null 2>&1
+				;;
+				external)
+					gpioctl "dirout" "$antgpio" >/dev/null 2>&1
+					gpioctl "clear" "$antgpio" >/dev/null 2>&1
+					antdiv=0
+					antrx=1
+					anttx=1
+				;;
+			esac
+		fi
+
+		[ -n "$antdiv" ] && sysctl -w dev."$device".diversity="$antdiv" >&-
+		[ -n "$antrx" ] && sysctl -w dev."$device".rxantenna="$antrx" >&-
 		[ -n "$anttx" ] && sysctl -w dev."$device".txantenna="$anttx" >&-
+		[ -n "$softled" ] && sysctl -w dev."$device".softled="$softled" >&-
 
 		config_get distance "$device" distance
 		[ -n "$distance" ] && athctrl -i "$device" -d "$distance" >&-
 
-		config_get_bool softled "$device" softled 1
-		[ -n "$softled" ] && sysctl -w dev."$device".softled="$softled" >&-
-
 		config_get txpwr "$vif" txpower
 		[ -n "$txpwr" ] && iwconfig "$ifname" txpower "${txpwr%%.*}"
 
@@ -300,12 +329,22 @@ detect_atheros() {
 	[ -d ath ] || return
 	for dev in $(ls -d wifi* 2>&-); do
 		config_get type "$dev" type
+		devname="$(cat /proc/sys/dev/$dev/dev_name)"
+		case "$devname" in
+			NanoStation*)
+				EXTRA_DEV="
+# Ubiquiti NanoStation features
+	option antenna	internal
+	option polarity	auto # (auto|horizontal|vertical)
+"
+			;;
+		esac
 		[ "$type" = atheros ] && return
 		cat <<EOF
 config wifi-device  $dev
 	option type     atheros
 	option channel  auto
-
+$EXTRA_DEV
 	# REMOVE THIS LINE TO ENABLE WIFI:
 	option disabled 1
 
-- 
2.30.2