2011-06-01 16:12:31 +03:00
|
|
|
--- a/drivers/net/wireless/ath/ath9k/recv.c
|
|
|
|
+++ b/drivers/net/wireless/ath/ath9k/recv.c
|
2011-06-16 00:16:38 +03:00
|
|
|
@@ -1366,6 +1366,89 @@ static void ath_ant_div_conf_fast_divbia
|
2011-06-01 16:12:31 +03:00
|
|
|
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) |
|