Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
[pandora-kernel.git] / drivers / net / wireless / ath / ath9k / recv.c
index 07e35e5..70dc8ec 100644 (file)
@@ -14,6 +14,7 @@
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
+#include <linux/dma-mapping.h>
 #include "ath9k.h"
 #include "ar9003_mac.h"
 
@@ -39,6 +40,7 @@ static inline bool ath_ant_div_comb_alt_check(u8 div_group, int alt_ratio,
                        result = true;
                break;
        case 1:
+       case 2:
                if ((((curr_main_set == ATH_ANT_DIV_COMB_LNA2) &&
                        (curr_alt_set == ATH_ANT_DIV_COMB_LNA1) &&
                                (alt_rssi_avg >= (main_rssi_avg - 5))) ||
@@ -1075,39 +1077,39 @@ static void ath_lnaconf_alt_good_scan(struct ath_ant_comb *antcomb,
                antcomb->rssi_lna1 = main_rssi_avg;
 
        switch ((ant_conf.main_lna_conf << 4) | ant_conf.alt_lna_conf) {
-       case (0x10): /* LNA2 A-B */
+       case 0x10: /* LNA2 A-B */
                antcomb->main_conf = ATH_ANT_DIV_COMB_LNA1_MINUS_LNA2;
                antcomb->first_quick_scan_conf =
                        ATH_ANT_DIV_COMB_LNA1_PLUS_LNA2;
                antcomb->second_quick_scan_conf = ATH_ANT_DIV_COMB_LNA1;
                break;
-       case (0x20): /* LNA1 A-B */
+       case 0x20: /* LNA1 A-B */
                antcomb->main_conf = ATH_ANT_DIV_COMB_LNA1_MINUS_LNA2;
                antcomb->first_quick_scan_conf =
                        ATH_ANT_DIV_COMB_LNA1_PLUS_LNA2;
                antcomb->second_quick_scan_conf = ATH_ANT_DIV_COMB_LNA2;
                break;
-       case (0x21): /* LNA1 LNA2 */
+       case 0x21: /* LNA1 LNA2 */
                antcomb->main_conf = ATH_ANT_DIV_COMB_LNA2;
                antcomb->first_quick_scan_conf =
                        ATH_ANT_DIV_COMB_LNA1_MINUS_LNA2;
                antcomb->second_quick_scan_conf =
                        ATH_ANT_DIV_COMB_LNA1_PLUS_LNA2;
                break;
-       case (0x12): /* LNA2 LNA1 */
+       case 0x12: /* LNA2 LNA1 */
                antcomb->main_conf = ATH_ANT_DIV_COMB_LNA1;
                antcomb->first_quick_scan_conf =
                        ATH_ANT_DIV_COMB_LNA1_MINUS_LNA2;
                antcomb->second_quick_scan_conf =
                        ATH_ANT_DIV_COMB_LNA1_PLUS_LNA2;
                break;
-       case (0x13): /* LNA2 A+B */
+       case 0x13: /* LNA2 A+B */
                antcomb->main_conf = ATH_ANT_DIV_COMB_LNA1_PLUS_LNA2;
                antcomb->first_quick_scan_conf =
                        ATH_ANT_DIV_COMB_LNA1_MINUS_LNA2;
                antcomb->second_quick_scan_conf = ATH_ANT_DIV_COMB_LNA1;
                break;
-       case (0x23): /* LNA1 A+B */
+       case 0x23: /* LNA1 A+B */
                antcomb->main_conf = ATH_ANT_DIV_COMB_LNA1_PLUS_LNA2;
                antcomb->first_quick_scan_conf =
                        ATH_ANT_DIV_COMB_LNA1_MINUS_LNA2;
@@ -1324,65 +1326,148 @@ static void ath_ant_div_conf_fast_divbias(struct ath_hw_antcomb_conf *ant_conf,
                /* Adjust the fast_div_bias based on main and alt lna conf */
                switch ((ant_conf->main_lna_conf << 4) |
                                ant_conf->alt_lna_conf) {
-               case (0x01): /* A-B LNA2 */
+               case 0x01: /* A-B LNA2 */
                        ant_conf->fast_div_bias = 0x3b;
                        break;
-               case (0x02): /* A-B LNA1 */
+               case 0x02: /* A-B LNA1 */
                        ant_conf->fast_div_bias = 0x3d;
                        break;
-               case (0x03): /* A-B A+B */
+               case 0x03: /* A-B A+B */
                        ant_conf->fast_div_bias = 0x1;
                        break;
-               case (0x10): /* LNA2 A-B */
+               case 0x10: /* LNA2 A-B */
                        ant_conf->fast_div_bias = 0x7;
                        break;
-               case (0x12): /* LNA2 LNA1 */
+               case 0x12: /* LNA2 LNA1 */
                        ant_conf->fast_div_bias = 0x2;
                        break;
-               case (0x13): /* LNA2 A+B */
+               case 0x13: /* LNA2 A+B */
                        ant_conf->fast_div_bias = 0x7;
                        break;
-               case (0x20): /* LNA1 A-B */
+               case 0x20: /* LNA1 A-B */
                        ant_conf->fast_div_bias = 0x6;
                        break;
-               case (0x21): /* LNA1 LNA2 */
+               case 0x21: /* LNA1 LNA2 */
                        ant_conf->fast_div_bias = 0x0;
                        break;
-               case (0x23): /* LNA1 A+B */
+               case 0x23: /* LNA1 A+B */
                        ant_conf->fast_div_bias = 0x6;
                        break;
-               case (0x30): /* A+B A-B */
+               case 0x30: /* A+B A-B */
                        ant_conf->fast_div_bias = 0x1;
                        break;
-               case (0x31): /* A+B LNA2 */
+               case 0x31: /* A+B LNA2 */
                        ant_conf->fast_div_bias = 0x3b;
                        break;
-               case (0x32): /* A+B LNA1 */
+               case 0x32: /* A+B LNA1 */
                        ant_conf->fast_div_bias = 0x3d;
                        break;
                default:
                        break;
                }
+       } else if (ant_conf->div_group == 1) {
+               /* Adjust the fast_div_bias based on main and alt_lna_conf */
+               switch ((ant_conf->main_lna_conf << 4) |
+                       ant_conf->alt_lna_conf) {
+               case 0x01: /* A-B LNA2 */
+                       ant_conf->fast_div_bias = 0x1;
+                       ant_conf->main_gaintb = 0;
+                       ant_conf->alt_gaintb = 0;
+                       break;
+               case 0x02: /* A-B LNA1 */
+                       ant_conf->fast_div_bias = 0x1;
+                       ant_conf->main_gaintb = 0;
+                       ant_conf->alt_gaintb = 0;
+                       break;
+               case 0x03: /* A-B A+B */
+                       ant_conf->fast_div_bias = 0x1;
+                       ant_conf->main_gaintb = 0;
+                       ant_conf->alt_gaintb = 0;
+                       break;
+               case 0x10: /* LNA2 A-B */
+                       if (!(antcomb->scan) &&
+                           (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO))
+                               ant_conf->fast_div_bias = 0x3f;
+                       else
+                               ant_conf->fast_div_bias = 0x1;
+                       ant_conf->main_gaintb = 0;
+                       ant_conf->alt_gaintb = 0;
+                       break;
+               case 0x12: /* LNA2 LNA1 */
+                       ant_conf->fast_div_bias = 0x1;
+                       ant_conf->main_gaintb = 0;
+                       ant_conf->alt_gaintb = 0;
+                       break;
+               case 0x13: /* LNA2 A+B */
+                       if (!(antcomb->scan) &&
+                           (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO))
+                               ant_conf->fast_div_bias = 0x3f;
+                       else
+                               ant_conf->fast_div_bias = 0x1;
+                       ant_conf->main_gaintb = 0;
+                       ant_conf->alt_gaintb = 0;
+                       break;
+               case 0x20: /* LNA1 A-B */
+                       if (!(antcomb->scan) &&
+                           (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO))
+                               ant_conf->fast_div_bias = 0x3f;
+                       else
+                               ant_conf->fast_div_bias = 0x1;
+                       ant_conf->main_gaintb = 0;
+                       ant_conf->alt_gaintb = 0;
+                       break;
+               case 0x21: /* LNA1 LNA2 */
+                       ant_conf->fast_div_bias = 0x1;
+                       ant_conf->main_gaintb = 0;
+                       ant_conf->alt_gaintb = 0;
+                       break;
+               case 0x23: /* LNA1 A+B */
+                       if (!(antcomb->scan) &&
+                           (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO))
+                               ant_conf->fast_div_bias = 0x3f;
+                       else
+                               ant_conf->fast_div_bias = 0x1;
+                       ant_conf->main_gaintb = 0;
+                       ant_conf->alt_gaintb = 0;
+                       break;
+               case 0x30: /* A+B A-B */
+                       ant_conf->fast_div_bias = 0x1;
+                       ant_conf->main_gaintb = 0;
+                       ant_conf->alt_gaintb = 0;
+                       break;
+               case 0x31: /* A+B LNA2 */
+                       ant_conf->fast_div_bias = 0x1;
+                       ant_conf->main_gaintb = 0;
+                       ant_conf->alt_gaintb = 0;
+                       break;
+               case 0x32: /* A+B LNA1 */
+                       ant_conf->fast_div_bias = 0x1;
+                       ant_conf->main_gaintb = 0;
+                       ant_conf->alt_gaintb = 0;
+                       break;
+               default:
+                       break;
+               }
        } else if (ant_conf->div_group == 2) {
                /* Adjust the fast_div_bias based on main and alt_lna_conf */
                switch ((ant_conf->main_lna_conf << 4) |
                                ant_conf->alt_lna_conf) {
-               case (0x01): /* A-B LNA2 */
+               case 0x01: /* A-B LNA2 */
                        ant_conf->fast_div_bias = 0x1;
                        ant_conf->main_gaintb = 0;
                        ant_conf->alt_gaintb = 0;
                        break;
-               case (0x02): /* A-B LNA1 */
+               case 0x02: /* A-B LNA1 */
                        ant_conf->fast_div_bias = 0x1;
                        ant_conf->main_gaintb = 0;
                        ant_conf->alt_gaintb = 0;
                        break;
-               case (0x03): /* A-B A+B */
+               case 0x03: /* A-B A+B */
                        ant_conf->fast_div_bias = 0x1;
                        ant_conf->main_gaintb = 0;
                        ant_conf->alt_gaintb = 0;
                        break;
-               case (0x10): /* LNA2 A-B */
+               case 0x10: /* LNA2 A-B */
                        if (!(antcomb->scan) &&
                                (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO))
                                ant_conf->fast_div_bias = 0x1;
@@ -1391,12 +1476,12 @@ static void ath_ant_div_conf_fast_divbias(struct ath_hw_antcomb_conf *ant_conf,
                        ant_conf->main_gaintb = 0;
                        ant_conf->alt_gaintb = 0;
                        break;
-               case (0x12): /* LNA2 LNA1 */
+               case 0x12: /* LNA2 LNA1 */
                        ant_conf->fast_div_bias = 0x1;
                        ant_conf->main_gaintb = 0;
                        ant_conf->alt_gaintb = 0;
                        break;
-               case (0x13): /* LNA2 A+B */
+               case 0x13: /* LNA2 A+B */
                        if (!(antcomb->scan) &&
                                (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO))
                                ant_conf->fast_div_bias = 0x1;
@@ -1405,7 +1490,7 @@ static void ath_ant_div_conf_fast_divbias(struct ath_hw_antcomb_conf *ant_conf,
                        ant_conf->main_gaintb = 0;
                        ant_conf->alt_gaintb = 0;
                        break;
-               case (0x20): /* LNA1 A-B */
+               case 0x20: /* LNA1 A-B */
                        if (!(antcomb->scan) &&
                                (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO))
                                ant_conf->fast_div_bias = 0x1;
@@ -1414,12 +1499,12 @@ static void ath_ant_div_conf_fast_divbias(struct ath_hw_antcomb_conf *ant_conf,
                        ant_conf->main_gaintb = 0;
                        ant_conf->alt_gaintb = 0;
                        break;
-               case (0x21): /* LNA1 LNA2 */
+               case 0x21: /* LNA1 LNA2 */
                        ant_conf->fast_div_bias = 0x1;
                        ant_conf->main_gaintb = 0;
                        ant_conf->alt_gaintb = 0;
                        break;
-               case (0x23): /* LNA1 A+B */
+               case 0x23: /* LNA1 A+B */
                        if (!(antcomb->scan) &&
                                (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO))
                                ant_conf->fast_div_bias = 0x1;
@@ -1428,17 +1513,17 @@ static void ath_ant_div_conf_fast_divbias(struct ath_hw_antcomb_conf *ant_conf,
                        ant_conf->main_gaintb = 0;
                        ant_conf->alt_gaintb = 0;
                        break;
-               case (0x30): /* A+B A-B */
+               case 0x30: /* A+B A-B */
                        ant_conf->fast_div_bias = 0x1;
                        ant_conf->main_gaintb = 0;
                        ant_conf->alt_gaintb = 0;
                        break;
-               case (0x31): /* A+B LNA2 */
+               case 0x31: /* A+B LNA2 */
                        ant_conf->fast_div_bias = 0x1;
                        ant_conf->main_gaintb = 0;
                        ant_conf->alt_gaintb = 0;
                        break;
-               case (0x32): /* A+B LNA1 */
+               case 0x32: /* A+B LNA1 */
                        ant_conf->fast_div_bias = 0x1;
                        ant_conf->main_gaintb = 0;
                        ant_conf->alt_gaintb = 0;
@@ -1446,9 +1531,7 @@ static void ath_ant_div_conf_fast_divbias(struct ath_hw_antcomb_conf *ant_conf,
                default:
                        break;
                }
-
        }
-
 }
 
 /* Antenna diversity and combining */