rt2x00: Don't switch to antenna with low rssi
authorIvo van Doorn <ivdoorn@gmail.com>
Mon, 25 Feb 2008 22:15:08 +0000 (23:15 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 28 Feb 2008 14:13:09 +0000 (09:13 -0500)
When rssi_a > rssi_b is true and the current antenna
was already antenna A, then rt2x00 incorrectly jumped
to antenna B.

Also don't configure the antenna when there has been
no change in the antenna setup.

Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/rt2x00/rt2x00config.c
drivers/net/wireless/rt2x00/rt2x00dev.c

index 0d57d7f67837d9ab67c2224f0ab69d8ed514d40d..07adc576db49dc28f92819c6ec46f04e926b4b48 100644 (file)
@@ -97,6 +97,10 @@ void rt2x00lib_config_antenna(struct rt2x00_dev *rt2x00dev,
        libconf.ant.rx = rx;
        libconf.ant.tx = tx;
 
+       if (rx == rt2x00dev->link.ant.active.rx &&
+           tx == rt2x00dev->link.ant.active.tx)
+               return;
+
        /*
         * Antenna setup changes require the RX to be disabled,
         * else the changes will be ignored by the device.
index 00f5f0d49e1d916d0246bf32fc18f2f80a87e6eb..7294c75272d09d3f8c3d4da90e99c26475779190 100644 (file)
@@ -260,19 +260,11 @@ static void rt2x00lib_evaluate_antenna_sample(struct rt2x00_dev *rt2x00dev)
        if (sample_a == sample_b)
                return;
 
-       if (rt2x00dev->link.ant.flags & ANTENNA_RX_DIVERSITY) {
-               if (sample_a > sample_b && rx == ANTENNA_B)
-                       rx = ANTENNA_A;
-               else if (rx == ANTENNA_A)
-                       rx = ANTENNA_B;
-       }
+       if (rt2x00dev->link.ant.flags & ANTENNA_RX_DIVERSITY)
+               rx = (sample_a > sample_b) ? ANTENNA_A : ANTENNA_B;
 
-       if (rt2x00dev->link.ant.flags & ANTENNA_TX_DIVERSITY) {
-               if (sample_a > sample_b && tx == ANTENNA_B)
-                       tx = ANTENNA_A;
-               else if (tx == ANTENNA_A)
-                       tx = ANTENNA_B;
-       }
+       if (rt2x00dev->link.ant.flags & ANTENNA_TX_DIVERSITY)
+               tx = (sample_a > sample_b) ? ANTENNA_A : ANTENNA_B;
 
        rt2x00lib_config_antenna(rt2x00dev, rx, tx);
 }
@@ -327,7 +319,7 @@ static void rt2x00lib_evaluate_antenna(struct rt2x00_dev *rt2x00dev)
 
        if (!(rt2x00dev->link.ant.flags & ANTENNA_RX_DIVERSITY) &&
            !(rt2x00dev->link.ant.flags & ANTENNA_TX_DIVERSITY)) {
-               rt2x00dev->link.ant.flags &= ~ANTENNA_MODE_SAMPLE;
+               rt2x00dev->link.ant.flags = 0;
                return;
        }