From ecddea7eab992c6c8223d7c11ea5c47538d20706 Mon Sep 17 00:00:00 2001
From: nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Fri, 8 Apr 2005 12:55:23 +0000
Subject: [PATCH] add SIOCSIWFREQ

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@580 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 openwrt/package/openwrt/wlcompat.c | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/openwrt/package/openwrt/wlcompat.c b/openwrt/package/openwrt/wlcompat.c
index ac85da0cf..e120ee1da 100644
--- a/openwrt/package/openwrt/wlcompat.c
+++ b/openwrt/package/openwrt/wlcompat.c
@@ -104,6 +104,27 @@ static int wlcompat_ioctl(struct net_device *dev,
 			wrqu->freq.e = 0;
 			break;
 		}
+		case SIOCSIWFREQ:
+		{
+			if (wrqu->freq.e == 1) {
+				int channel = 0;
+				int f = wrqu->freq.m / 100000;
+				while ((channel < NUM_CHANNELS + 1) && (f != channel_frequency[channel]))
+					channel++;
+				
+				if (channel == NUM_CHANNELS) { // channel not found
+					err = -EINVAL;
+				} else {
+					wrqu->freq.e = 0;
+					wrqu->freq.m = channel + 1;
+				}
+			}
+			if ((wrqu->freq.e == 0) && (wrqu->freq.m < 1000)) {
+				wl_ioctl(dev, WLC_SET_CHANNEL, &wrqu->freq.m, sizeof(int));
+			} else {
+				err = -EINVAL;
+			}
+		}
 		case SIOCGIWAP:
 		{
 			wrqu->ap_addr.sa_family = ARPHRD_ETHER;
@@ -174,7 +195,7 @@ static const iw_handler	 wlcompat_handler[] = {
 	wlcompat_ioctl,		/* SIOCGIWNAME */
 	NULL,			/* SIOCSIWNWID */
 	NULL,			/* SIOCGIWNWID */
-	NULL,			/* SIOCSIWFREQ */
+	wlcompat_ioctl,		/* SIOCSIWFREQ */
 	wlcompat_ioctl,		/* SIOCGIWFREQ */
 	NULL,			/* SIOCSIWMODE */
 	NULL,			/* SIOCGIWMODE */
-- 
2.20.1