[PATCH] rt2x00: Fix antenna selection.
authorMattias Nissler <mattias.nissler@gmx.de>
Sat, 13 Oct 2007 14:26:57 +0000 (16:26 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 28 Jan 2008 23:02:54 +0000 (15:02 -0800)
In the config() handler, make sure that we do configure an antenna if the
current active antenna is uninitialized. Furthermore, don't overwrite the
active antenna with bogus values if we didn't touch the antenna setup.

Signed-off-by: Mattias Nissler <mattias.nissler@gmx.de>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/wireless/rt2x00/rt2x00config.c

index 2b0edd20eea5d0fdea16001846e7a2b54899b27f..b4fad744503e085f22c8d068710864ca44688922 100644 (file)
@@ -166,6 +166,8 @@ void rt2x00lib_config(struct rt2x00_dev *rt2x00dev,
        else if (conf->antenna_sel_rx &&
                 conf->antenna_sel_rx != active_ant->rx)
                flags |= CONFIG_UPDATE_ANTENNA;
+       else if (active_ant->rx == ANTENNA_SW_DIVERSITY)
+               flags |= CONFIG_UPDATE_ANTENNA;
 
        if (!conf->antenna_sel_tx &&
            default_ant->tx != ANTENNA_SW_DIVERSITY &&
@@ -174,6 +176,8 @@ void rt2x00lib_config(struct rt2x00_dev *rt2x00dev,
        else if (conf->antenna_sel_tx &&
                 conf->antenna_sel_tx != active_ant->tx)
                flags |= CONFIG_UPDATE_ANTENNA;
+       else if (active_ant->tx == ANTENNA_SW_DIVERSITY)
+               flags |= CONFIG_UPDATE_ANTENNA;
 
        /*
         * The following configuration options are never
@@ -262,11 +266,17 @@ config:
        if (flags & (CONFIG_UPDATE_CHANNEL | CONFIG_UPDATE_ANTENNA))
                rt2x00lib_reset_link_tuner(rt2x00dev);
 
-       rt2x00dev->curr_hwmode = libconf.phymode;
-       rt2x00dev->rx_status.phymode = conf->phymode;
+       if (flags & CONFIG_UPDATE_PHYMODE) {
+               rt2x00dev->curr_hwmode = libconf.phymode;
+               rt2x00dev->rx_status.phymode = conf->phymode;
+       }
+
        rt2x00dev->rx_status.freq = conf->freq;
        rt2x00dev->rx_status.channel = conf->channel;
        rt2x00dev->tx_power = conf->power_level;
-       rt2x00dev->link.ant.active.rx = libconf.ant.rx;
-       rt2x00dev->link.ant.active.tx = libconf.ant.tx;
+
+       if (flags & CONFIG_UPDATE_ANTENNA) {
+               rt2x00dev->link.ant.active.rx = libconf.ant.rx;
+               rt2x00dev->link.ant.active.tx = libconf.ant.tx;
+       }
 }