ath9k_hw: Add antenna diversity group for AR9565
authorSujith Manoharan <c_manoha@qualcomm.com>
Sun, 16 Sep 2012 02:36:08 +0000 (08:06 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 24 Sep 2012 18:59:11 +0000 (14:59 -0400)
Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/antenna.c
drivers/net/wireless/ath/ath9k/ar9003_phy.c

index eb61c6bc480e617e53dc08c65cefa29739e72d49..8eb274f168610cde81aaba7805590ed246afc866 100644 (file)
@@ -475,6 +475,68 @@ static void ath_ant_div_conf_fast_divbias(struct ath_hw_antcomb_conf *ant_conf,
                default:
                        break;
                }
+       } else if (ant_conf->div_group == 3) {
+               switch ((ant_conf->main_lna_conf << 4) |
+                       ant_conf->alt_lna_conf) {
+               case 0x01: /* A-B LNA2 */
+                       ant_conf->fast_div_bias = 0x1;
+                       break;
+               case 0x02: /* A-B LNA1 */
+                       ant_conf->fast_div_bias = 0x39;
+                       break;
+               case 0x03: /* A-B A+B */
+                       ant_conf->fast_div_bias = 0x1;
+                       break;
+               case 0x10: /* LNA2 A-B */
+                       if ((antcomb->scan == 0) &&
+                           (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO)) {
+                               ant_conf->fast_div_bias = 0x3f;
+                       } else {
+                               ant_conf->fast_div_bias = 0x1;
+                       }
+                       break;
+               case 0x12: /* LNA2 LNA1 */
+                       ant_conf->fast_div_bias = 0x39;
+                       break;
+               case 0x13: /* LNA2 A+B */
+                       if ((antcomb->scan == 0) &&
+                           (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO)) {
+                               ant_conf->fast_div_bias = 0x3f;
+                       } else {
+                               ant_conf->fast_div_bias = 0x1;
+                       }
+                       break;
+               case 0x20: /* LNA1 A-B */
+                       if ((antcomb->scan == 0) &&
+                           (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO)) {
+                               ant_conf->fast_div_bias = 0x3f;
+                       } else {
+                               ant_conf->fast_div_bias = 0x4;
+                       }
+                       break;
+               case 0x21: /* LNA1 LNA2 */
+                       ant_conf->fast_div_bias = 0x6;
+                       break;
+               case 0x23: /* LNA1 A+B */
+                       if ((antcomb->scan == 0) &&
+                           (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO)) {
+                               ant_conf->fast_div_bias = 0x3f;
+                       } else {
+                               ant_conf->fast_div_bias = 0x6;
+                       }
+                       break;
+               case 0x30: /* A+B A-B */
+                       ant_conf->fast_div_bias = 0x1;
+                       break;
+               case 0x31: /* A+B LNA2 */
+                       ant_conf->fast_div_bias = 0x6;
+                       break;
+               case 0x32: /* A+B LNA1 */
+                       ant_conf->fast_div_bias = 0x1;
+                       break;
+               default:
+                       break;
+               }
        }
 }
 
index 158b50d3a853b5c1c010b2c8f1434ffaade8d50c..a8ab81bf74c4dd7be1d6ba63af1d135eece066dd 100644 (file)
@@ -1291,6 +1291,9 @@ static void ar9003_hw_antdiv_comb_conf_get(struct ath_hw *ah,
        } else if (AR_SREV_9485(ah)) {
                antconf->lna1_lna2_delta = -9;
                antconf->div_group = 2;
+       } else if (AR_SREV_9565(ah)) {
+               antconf->lna1_lna2_delta = -3;
+               antconf->div_group = 3;
        } else {
                antconf->lna1_lna2_delta = -3;
                antconf->div_group = 0;