diff options
Diffstat (limited to 'drivers/net/wireless/ath9k/calib.c')
-rw-r--r-- | drivers/net/wireless/ath9k/calib.c | 41 |
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 | ||
729 | s16 ath9k_hw_getchan_noise(struct ath_hal *ah, struct ath9k_channel *chan) | 721 | s16 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 | } |