Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 11 Mar 2011 11:35:36 +0000 (UTC)
From:      Adrian Chadd <adrian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r219480 - head/sys/dev/ath/ath_hal/ar5416
Message-ID:  <201103111135.p2BBZa1i076975@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: adrian
Date: Fri Mar 11 11:35:36 2011
New Revision: 219480
URL: http://svn.freebsd.org/changeset/base/219480

Log:
  Introduce methods for the initial calibration and the new PA calibration
  routines.
  
  These are needed for the AR9285/AR2427 and AR9287 calibration routines
  which will be introducecd in a later commit.

Modified:
  head/sys/dev/ath/ath_hal/ar5416/ar5416.h
  head/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c
  head/sys/dev/ath/ath_hal/ar5416/ar5416_cal.c
  head/sys/dev/ath/ath_hal/ar5416/ar5416_cal.h

Modified: head/sys/dev/ath/ath_hal/ar5416/ar5416.h
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5416/ar5416.h	Fri Mar 11 11:07:53 2011	(r219479)
+++ head/sys/dev/ath/ath_hal/ar5416/ar5416.h	Fri Mar 11 11:35:36 2011	(r219480)
@@ -74,6 +74,12 @@ struct ath_hal_5416 {
 	void		(*ah_spurMitigate)(struct ath_hal *,
 			    const struct ieee80211_channel *);
 
+	/* calibration ops */
+	HAL_BOOL	(*ah_cal_initcal)(struct ath_hal *,
+			    const struct ieee80211_channel *);
+	void		(*ah_cal_pacal)(struct ath_hal *,
+			    HAL_BOOL is_reset);
+
 	/* optional open-loop tx power control related methods */
 	void		(*ah_olcInit)(struct ath_hal *);
 	void		(*ah_olcTempCompensation)(struct ath_hal *);

Modified: head/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c	Fri Mar 11 11:07:53 2011	(r219479)
+++ head/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c	Fri Mar 11 11:35:36 2011	(r219480)
@@ -178,6 +178,9 @@ ar5416InitState(struct ath_hal_5416 *ahp
 	AH5416(ah)->ah_writeIni		= ar5416WriteIni;
 	AH5416(ah)->ah_spurMitigate	= ar5416SpurMitigate;
 
+	/* Internal calibration ops */
+	AH5416(ah)->ah_cal_initcal	= ar5416InitCalHardware;
+
 	/* Internal TX power control related operations */
 	AH5416(ah)->ah_olcInit = ar5416olcInit;
 	AH5416(ah)->ah_olcTempCompensation	= ar5416olcTempCompensation;

Modified: head/sys/dev/ath/ath_hal/ar5416/ar5416_cal.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5416/ar5416_cal.c	Fri Mar 11 11:07:53 2011	(r219479)
+++ head/sys/dev/ath/ath_hal/ar5416/ar5416_cal.c	Fri Mar 11 11:35:36 2011	(r219480)
@@ -183,18 +183,9 @@ ar5416RunInitCals(struct ath_hal *ah, in
 }
 #endif
 
-/*
- * Initialize Calibration infrastructure.
- */
 HAL_BOOL
-ar5416InitCal(struct ath_hal *ah, const struct ieee80211_channel *chan)
+ar5416InitCalHardware(struct ath_hal *ah, const struct ieee80211_channel *chan)
 {
-	struct ar5416PerCal *cal = &AH5416(ah)->ah_cal;
-	HAL_CHANNEL_INTERNAL *ichan;
-
-	ichan = ath_hal_checkchannel(ah, chan);
-	HALASSERT(ichan != AH_NULL);
-
 	if (AR_SREV_MERLIN_10_OR_LATER(ah)) {
 		/* Enable Rx Filter Cal */
 		OS_REG_CLR_BIT(ah, AR_PHY_ADC_CTL, AR_PHY_ADC_CTL_OFF_PWDADC);
@@ -235,6 +226,32 @@ ar5416InitCal(struct ath_hal *ah, const 
 		return AH_FALSE;
 	}
 
+	return AH_TRUE;
+}
+
+/*
+ * Initialize Calibration infrastructure.
+ */
+HAL_BOOL
+ar5416InitCal(struct ath_hal *ah, const struct ieee80211_channel *chan)
+{
+	struct ar5416PerCal *cal = &AH5416(ah)->ah_cal;
+	HAL_CHANNEL_INTERNAL *ichan;
+
+	ichan = ath_hal_checkchannel(ah, chan);
+	HALASSERT(ichan != AH_NULL);
+
+	/* Do initial chipset-specific calibration */
+	if (! AH5416(ah)->ah_cal_initcal(ah, chan)) {
+		HALDEBUG(ah, HAL_DEBUG_ANY, "%s: initial chipset calibration did "
+		    "not complete in time; noisy environment?\n", __func__);
+		return AH_FALSE;
+	}
+
+	/* If there's PA Cal, do it */
+	if (AH5416(ah)->ah_cal_pacal)
+		AH5416(ah)->ah_cal_pacal(ah, AH_TRUE);
+
 	/* 
 	 * Do NF calibration after DC offset and other CALs.
 	 * Per system engineers, noise floor value can sometimes be 20 dB
@@ -468,6 +485,10 @@ ar5416PerCalibrationN(struct ath_hal *ah
 
 	/* Do NF cal only at longer intervals */
 	if (longcal) {
+		/* Do PA calibration if the chipset supports */
+		if (AH5416(ah)->ah_cal_pacal)
+			AH5416(ah)->ah_cal_pacal(ah, AH_FALSE);
+
 		/* Do temperature compensation if the chipset needs it */
 		AH5416(ah)->ah_olcTempCompensation(ah);
 

Modified: head/sys/dev/ath/ath_hal/ar5416/ar5416_cal.h
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5416/ar5416_cal.h	Fri Mar 11 11:07:53 2011	(r219479)
+++ head/sys/dev/ath/ath_hal/ar5416/ar5416_cal.h	Fri Mar 11 11:35:36 2011	(r219480)
@@ -102,6 +102,7 @@ struct ar5416PerCal {
 	}								\
 } while (0)
 
+HAL_BOOL	ar5416InitCalHardware(struct ath_hal *ah, const struct ieee80211_channel *chan);
 HAL_BOOL ar5416InitCal(struct ath_hal *, const struct ieee80211_channel *);
 HAL_BOOL ar5416PerCalibration(struct ath_hal *,  struct ieee80211_channel *,
 	    HAL_BOOL *isIQdone);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201103111135.p2BBZa1i076975>