aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath9k/calib.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/ath9k/calib.c')
-rw-r--r--drivers/net/wireless/ath9k/calib.c41
1 files changed, 7 insertions, 34 deletions
diff --git a/drivers/net/wireless/ath9k/calib.c b/drivers/net/wireless/ath9k/calib.c
index 8e073d6513d..d16f9fe48a9 100644
--- a/drivers/net/wireless/ath9k/calib.c
+++ b/drivers/net/wireless/ath9k/calib.c
@@ -625,11 +625,7 @@ void ath9k_hw_loadnf(struct ath_hal *ah, struct ath9k_channel *chan)
625 else 625 else
626 chainmask = 0x3F; 626 chainmask = 0x3F;
627 627
628#ifdef ATH_NF_PER_CHAN
629 h = chan->nfCalHist;
630#else
631 h = ah->nfCalHist; 628 h = ah->nfCalHist;
632#endif
633 629
634 for (i = 0; i < NUM_NF_READINGS; i++) { 630 for (i = 0; i < NUM_NF_READINGS; i++) {
635 if (chainmask & (1 << i)) { 631 if (chainmask & (1 << i)) {
@@ -697,11 +693,7 @@ int16_t ath9k_hw_getnf(struct ath_hal *ah,
697 } 693 }
698 } 694 }
699 695
700#ifdef ATH_NF_PER_CHAN
701 h = chan->nfCalHist;
702#else
703 h = ah->nfCalHist; 696 h = ah->nfCalHist;
704#endif
705 697
706 ath9k_hw_update_nfcal_hist_buffer(h, nfarray); 698 ath9k_hw_update_nfcal_hist_buffer(h, nfarray);
707 chan->rawNoiseFloor = h[0].privNF; 699 chan->rawNoiseFloor = h[0].privNF;
@@ -728,20 +720,12 @@ void ath9k_init_nfcal_hist_buffer(struct ath_hal *ah)
728 720
729s16 ath9k_hw_getchan_noise(struct ath_hal *ah, struct ath9k_channel *chan) 721s16 ath9k_hw_getchan_noise(struct ath_hal *ah, struct ath9k_channel *chan)
730{ 722{
731 struct ath9k_channel *ichan;
732 s16 nf; 723 s16 nf;
733 724
734 ichan = ath9k_regd_check_channel(ah, chan); 725 if (chan->rawNoiseFloor == 0)
735 if (ichan == NULL) {
736 DPRINTF(ah->ah_sc, ATH_DBG_CALIBRATE,
737 "invalid channel %u/0x%x; no mapping\n",
738 chan->channel, chan->channelFlags);
739 return ATH_DEFAULT_NOISE_FLOOR;
740 }
741 if (ichan->rawNoiseFloor == 0)
742 nf = -96; 726 nf = -96;
743 else 727 else
744 nf = ichan->rawNoiseFloor; 728 nf = chan->rawNoiseFloor;
745 729
746 if (!ath9k_hw_nf_in_range(ah, nf)) 730 if (!ath9k_hw_nf_in_range(ah, nf))
747 nf = ATH_DEFAULT_NOISE_FLOOR; 731 nf = ATH_DEFAULT_NOISE_FLOOR;
@@ -755,21 +739,13 @@ bool ath9k_hw_calibrate(struct ath_hal *ah, struct ath9k_channel *chan,
755{ 739{
756 struct ath_hal_5416 *ahp = AH5416(ah); 740 struct ath_hal_5416 *ahp = AH5416(ah);
757 struct hal_cal_list *currCal = ahp->ah_cal_list_curr; 741 struct hal_cal_list *currCal = ahp->ah_cal_list_curr;
758 struct ath9k_channel *ichan = ath9k_regd_check_channel(ah, chan);
759 742
760 *isCalDone = true; 743 *isCalDone = true;
761 744
762 if (ichan == NULL) {
763 DPRINTF(ah->ah_sc, ATH_DBG_CHANNEL,
764 "invalid channel %u/0x%x; no mapping\n",
765 chan->channel, chan->channelFlags);
766 return false;
767 }
768
769 if (currCal && 745 if (currCal &&
770 (currCal->calState == CAL_RUNNING || 746 (currCal->calState == CAL_RUNNING ||
771 currCal->calState == CAL_WAITING)) { 747 currCal->calState == CAL_WAITING)) {
772 ath9k_hw_per_calibration(ah, ichan, rxchainmask, currCal, 748 ath9k_hw_per_calibration(ah, chan, rxchainmask, currCal,
773 isCalDone); 749 isCalDone);
774 if (*isCalDone) { 750 if (*isCalDone) {
775 ahp->ah_cal_list_curr = currCal = currCal->calNext; 751 ahp->ah_cal_list_curr = currCal = currCal->calNext;
@@ -782,14 +758,12 @@ bool ath9k_hw_calibrate(struct ath_hal *ah, struct ath9k_channel *chan,
782 } 758 }
783 759
784 if (longcal) { 760 if (longcal) {
785 ath9k_hw_getnf(ah, ichan); 761 ath9k_hw_getnf(ah, chan);
786 ath9k_hw_loadnf(ah, ah->ah_curchan); 762 ath9k_hw_loadnf(ah, ah->ah_curchan);
787 ath9k_hw_start_nfcal(ah); 763 ath9k_hw_start_nfcal(ah);
788 764
789 if ((ichan->channelFlags & CHANNEL_CW_INT) != 0) { 765 if (chan->channelFlags & CHANNEL_CW_INT)
790 chan->channelFlags |= CHANNEL_CW_INT; 766 chan->channelFlags &= ~CHANNEL_CW_INT;
791 ichan->channelFlags &= ~CHANNEL_CW_INT;
792 }
793 } 767 }
794 768
795 return true; 769 return true;
@@ -894,7 +868,6 @@ bool ath9k_hw_init_cal(struct ath_hal *ah,
894 struct ath9k_channel *chan) 868 struct ath9k_channel *chan)
895{ 869{
896 struct ath_hal_5416 *ahp = AH5416(ah); 870 struct ath_hal_5416 *ahp = AH5416(ah);
897 struct ath9k_channel *ichan = ath9k_regd_check_channel(ah, chan);
898 871
899 REG_WRITE(ah, AR_PHY_AGC_CONTROL, 872 REG_WRITE(ah, AR_PHY_AGC_CONTROL,
900 REG_READ(ah, AR_PHY_AGC_CONTROL) | 873 REG_READ(ah, AR_PHY_AGC_CONTROL) |
@@ -942,7 +915,7 @@ bool ath9k_hw_init_cal(struct ath_hal *ah,
942 ath9k_hw_reset_calibration(ah, ahp->ah_cal_list_curr); 915 ath9k_hw_reset_calibration(ah, ahp->ah_cal_list_curr);
943 } 916 }
944 917
945 ichan->CalValid = 0; 918 chan->CalValid = 0;
946 919
947 return true; 920 return true;
948} 921}