rt2x00: rt2800lib: turn on tertiary PAs/LNAs for 3T/3R devices
authorGabor Juhos <juhosg@openwrt.org>
Mon, 24 Jun 2013 21:03:24 +0000 (23:03 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 27 Jun 2013 17:42:13 +0000 (13:42 -0400)
The 3T/3R devices are using the tertiary PAs/LNAs
however those are never turned on. Fix the code to
turn on those on for such devices.

Also modify the code to use switch statements to
improve readability.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/rt2x00/rt2800lib.c

index b7119e31e03ea221781737dde788493d4ce6bdf6..25f7dbee2811e1ac2f0de6be9b44d5741741852b 100644 (file)
@@ -2678,30 +2678,53 @@ static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,
 
        tx_pin = 0;
 
-       if (rt2x00dev->default_ant.tx_chain_num > 1) {
-               /* Turn on secondary PAs for 2T and for 3T devices*/
+       switch (rt2x00dev->default_ant.tx_chain_num) {
+       case 3:
+               /* Turn on tertiary PAs */
+               rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_A2_EN,
+                                  rf->channel > 14);
+               rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_G2_EN,
+                                  rf->channel <= 14);
+               /* fall-through */
+       case 2:
+               /* Turn on secondary PAs */
                rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_A1_EN,
                                   rf->channel > 14);
                rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_G1_EN,
                                   rf->channel <= 14);
+               /* fall-through */
+       case 1:
+               /* Turn on primary PAs */
+               rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_A0_EN,
+                                  rf->channel > 14);
+               if (test_bit(CAPABILITY_BT_COEXIST, &rt2x00dev->cap_flags))
+                       rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_G0_EN, 1);
+               else
+                       rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_G0_EN,
+                                          rf->channel <= 14);
+               break;
        }
 
-       if (rt2x00dev->default_ant.rx_chain_num > 1) {
-               /* Turn on secondary LNAs for 2R and for 3R devices */
+       switch (rt2x00dev->default_ant.rx_chain_num) {
+       case 3:
+               /* Turn on tertiary LNAs */
+               rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_A2_EN, 1);
+               rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_G2_EN, 1);
+               /* fall-through */
+       case 2:
+               /* Turn on secondary LNAs */
                rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_A1_EN, 1);
                rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_G1_EN, 1);
+               /* fall-through */
+       case 1:
+               /* Turn on primary LNAs */
+               rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_A0_EN, 1);
+               rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_G0_EN, 1);
+               break;
        }
 
-       rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_A0_EN, 1);
-       rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_G0_EN, 1);
        rt2x00_set_field32(&tx_pin, TX_PIN_CFG_RFTR_EN, 1);
        rt2x00_set_field32(&tx_pin, TX_PIN_CFG_TRSW_EN, 1);
-       if (test_bit(CAPABILITY_BT_COEXIST, &rt2x00dev->cap_flags))
-               rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_G0_EN, 1);
-       else
-               rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_G0_EN,
-                                  rf->channel <= 14);
-       rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_A0_EN, rf->channel > 14);
 
        rt2800_register_write(rt2x00dev, TX_PIN_CFG, tx_pin);