]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/net/wireless/rt2x00/rt73usb.c
rt2x00: Split rt61/rt73 antenna selection into RX and TX antenna
[linux-2.6-omap-h63xx.git] / drivers / net / wireless / rt2x00 / rt73usb.c
index e3d5e78661ea64c3aa670ddacb7ef28766a8964e..b9d5310c386f503a8c8dbf85d0e00f05152d57f1 100644 (file)
@@ -408,6 +408,29 @@ static void rt73usb_config_antenna_5x(struct rt2x00_dev *rt2x00dev,
 
        rt2x00_set_field8(&r3, BBP_R3_SMART_MODE, 0);
 
+       /*
+        * Configure the TX antenna.
+        */
+       switch (ant->tx) {
+       case ANTENNA_A:
+               rt2x00_set_field8(&r77, BBP_R77_TX_ANTENNA, 0);
+               break;
+       case ANTENNA_SW_DIVERSITY:
+       case ANTENNA_HW_DIVERSITY:
+               /*
+                * NOTE: We should never come here because rt2x00lib is
+                * supposed to catch this and send us the correct antenna
+                * explicitely. However we are nog going to bug about this.
+                * Instead, just default to antenna B.
+                */
+       case ANTENNA_B:
+               rt2x00_set_field8(&r77, BBP_R77_TX_ANTENNA, 3);
+               break;
+       }
+
+       /*
+        * Configure the RX antenna.
+        */
        switch (ant->rx) {
        case ANTENNA_HW_DIVERSITY:
                rt2x00_set_field8(&r4, BBP_R4_RX_ANTENNA, 2);
@@ -417,11 +440,6 @@ static void rt73usb_config_antenna_5x(struct rt2x00_dev *rt2x00dev,
        case ANTENNA_A:
                rt2x00_set_field8(&r4, BBP_R4_RX_ANTENNA, 1);
                rt2x00_set_field8(&r4, BBP_R4_RX_FRAME_END, 0);
-
-               if (rt2x00dev->curr_hwmode == HWMODE_A)
-                       rt2x00_set_field8(&r77, BBP_R77_PAIR, 0);
-               else
-                       rt2x00_set_field8(&r77, BBP_R77_PAIR, 3);
                break;
        case ANTENNA_SW_DIVERSITY:
                /*
@@ -433,11 +451,6 @@ static void rt73usb_config_antenna_5x(struct rt2x00_dev *rt2x00dev,
        case ANTENNA_B:
                rt2x00_set_field8(&r4, BBP_R4_RX_ANTENNA, 1);
                rt2x00_set_field8(&r4, BBP_R4_RX_FRAME_END, 0);
-
-               if (rt2x00dev->curr_hwmode == HWMODE_A)
-                       rt2x00_set_field8(&r77, BBP_R77_PAIR, 3);
-               else
-                       rt2x00_set_field8(&r77, BBP_R77_PAIR, 0);
                break;
        }
 
@@ -461,13 +474,35 @@ static void rt73usb_config_antenna_2x(struct rt2x00_dev *rt2x00dev,
        rt2x00_set_field8(&r4, BBP_R4_RX_FRAME_END,
                          !test_bit(CONFIG_FRAME_TYPE, &rt2x00dev->flags));
 
+       /*
+        * Configure the TX antenna.
+        */
+       switch (ant->tx) {
+       case ANTENNA_A:
+               rt2x00_set_field8(&r77, BBP_R77_TX_ANTENNA, 0);
+               break;
+       case ANTENNA_SW_DIVERSITY:
+       case ANTENNA_HW_DIVERSITY:
+               /*
+                * NOTE: We should never come here because rt2x00lib is
+                * supposed to catch this and send us the correct antenna
+                * explicitely. However we are nog going to bug about this.
+                * Instead, just default to antenna B.
+                */
+       case ANTENNA_B:
+               rt2x00_set_field8(&r77, BBP_R77_TX_ANTENNA, 3);
+               break;
+       }
+
+       /*
+        * Configure the RX antenna.
+        */
        switch (ant->rx) {
        case ANTENNA_HW_DIVERSITY:
                rt2x00_set_field8(&r4, BBP_R4_RX_ANTENNA, 2);
                break;
        case ANTENNA_A:
                rt2x00_set_field8(&r4, BBP_R4_RX_ANTENNA, 1);
-               rt2x00_set_field8(&r77, BBP_R77_PAIR, 3);
                break;
        case ANTENNA_SW_DIVERSITY:
                /*
@@ -478,7 +513,6 @@ static void rt73usb_config_antenna_2x(struct rt2x00_dev *rt2x00dev,
                 */
        case ANTENNA_B:
                rt2x00_set_field8(&r4, BBP_R4_RX_ANTENNA, 1);
-               rt2x00_set_field8(&r77, BBP_R77_PAIR, 0);
                break;
        }