58 AH9280(ah)->PDADCdelta = 0;
63 const struct ieee80211_channel *chan,
65 uint8_t *calChans, uint16_t availPiers, uint8_t *pwr, uint8_t *pcdacIdx)
68 uint16_t idxL = 0, idxR = 0, numPiers;
74 for (numPiers = 0; numPiers < availPiers; numPiers++)
79 IEEE80211_IS_CHAN_2GHZ(chan)), calChans, numPiers,
82 pcdac = rawDatasetOpLoop[idxL].
pcdac[0][0];
83 *pwr = rawDatasetOpLoop[idxL].
pwrPdg[0][0];
85 pcdac = rawDatasetOpLoop[idxR].
pcdac[0][0];
86 *pwr = (rawDatasetOpLoop[idxL].
pwrPdg[0][0] +
87 rawDatasetOpLoop[idxR].
pwrPdg[0][0])/2;
89 while (pcdac >
AH9280(ah)->originalGain[i] &&
103 uint8_t *pPDADCValues)
116 pPDADCValues[i] = 0x0;
118 pPDADCValues[i] = 0xFF;
134 int delta, currPDADC, regval;
144 "%s: called: initPDADC=%d, currPDADC=%d\n",
145 __func__,
AH5416(ah)->initPDADC, currPDADC);
147 if (
AH5416(ah)->initPDADC == 0 || currPDADC == 0)
153 delta = (currPDADC -
AH5416(ah)->initPDADC + 4) / 8;
155 delta = (currPDADC -
AH5416(ah)->initPDADC + 5) / 10;
158 __func__, delta,
AH9280(ah)->PDADCdelta);
160 if (delta !=
AH9280(ah)->PDADCdelta) {
161 AH9280(ah)->PDADCdelta = delta;
163 regval =
AH9280(ah)->originalGain[i] - delta;
176 uint16_t numXpdGain, uint16_t pdGainOverlap_t2, int8_t pwr_table_offset,
197 for (k = 0; k < numXpdGain; k++)
198 gb[k] = (uint16_t)(gb[k] - *diff);
205 for (k = 0; k < numXpdGain; k++)
206 gb[k] = (uint16_t)min(gb_limit, gb[k]);
214 int16_t diff, uint8_t *pdadcValues)
216#define NUM_PDADC(diff) (AR5416_NUM_PDADC_VALUES - diff)
227 for (k = 0; k < (uint16_t)
NUM_PDADC(diff); k++ ) {
228 pdadcValues[k] = pdadcValues[k + diff];
233 pdadcValues[k] = pdadcValues[
NUM_PDADC(diff)];
245 uint16_t pdGainOverlap_t2, uint16_t gainBoundaries[])
252 (void) pdGainOverlap_t2;
253 (void) gainBoundaries;
268#define EEP_MINOR(_ah) \
269 (AH_PRIVATE(_ah)->ah_eeversion & AR5416_EEP_VER_MINOR_MASK)
270#define IS_EEP_MINOR_V2(_ah) (EEP_MINOR(_ah) >= AR5416_EEP_MINOR_VER_2)
271#define IS_EEP_MINOR_V3(_ah) (EEP_MINOR(_ah) >= AR5416_EEP_MINOR_VER_3)
284 const struct ieee80211_channel *chan, int16_t *pTxPowerIndexOffset)
288 uint16_t pdGainOverlap_t2;
291 uint16_t numPiers, i;
292 int16_t tMinCalPower;
293 uint16_t numXpdGain, xpdMask;
295 uint32_t regChainOffset;
296 int8_t pwr_table_offset;
298 OS_MEMZERO(xpdGainValues,
sizeof(xpdGainValues));
310 if (IEEE80211_IS_CHAN_2GHZ(chan)) {
333 AH5416(ah)->initPDADC = 0;
347 if (IEEE80211_IS_CHAN_2GHZ(chan)) {
361 pCalBChans, numPiers, &txPower, &pcdacIdx);
365 pRawDataset, pCalBChans, numPiers,
366 pdGainOverlap_t2, &tMinCalPower,
367 gainBoundaries, pdadcValues, numXpdGain);
377 gainBoundaries, numXpdGain, pdGainOverlap_t2,
378 pwr_table_offset, &diff);
405 *pTxPowerIndexOffset = 0;
HAL_BOOL ath_ee_getLowerUpperIndex(uint8_t target, uint8_t *pList, uint16_t listSize, uint16_t *indexL, uint16_t *indexR)
@ AR_EEP_PWR_TABLE_OFFSET
#define AR5416_NUM_2G_CAL_PIERS
#define AR5416_NUM_5G_CAL_PIERS
#define AR5416_NUM_PDADC_VALUES
#define AR5416_MAX_RATE_POWER
#define AR5416_NUM_PD_GAINS
#define AR5416_PWR_TABLE_OFFSET_DB
#define AR5416_MAX_CHAINS
#define AR5416_BCHAN_UNUSED
#define AR5416_PD_GAINS_IN_MASK
#define ath_hal_eepromGet(_ah, _param, _val)
#define OS_REG_RMW_FIELD(_a, _r, _f, _v)
#define HALDEBUG(_ah, __m,...)
#define ath_hal_eepromGetFlag(_ah, _param)
#define OS_MEMZERO(_a, _n)
#define OS_REG_WRITE(_ah, _reg, _val)
#define OS_REG_READ(_ah, _reg)
#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_4
#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_2
#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_1
#define AR_PHY_TPCRG5_PD_GAIN_OVERLAP
#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_3
void ar5416SetGainBoundariesClosedLoop(struct ath_hal *ah, int i, uint16_t pdGainOverlap_t2, uint16_t gainBoundaries[])
void ar5416GetChannelCenters(struct ath_hal *, const struct ieee80211_channel *chan, CHAN_CENTERS *centers)
void ar5416WriteDetectorGainBiases(struct ath_hal *ah, uint16_t numXpdGain, uint16_t xpdGainValues[])
void ar5416WritePdadcValues(struct ath_hal *ah, int i, uint8_t pdadcValues[])
uint16_t ar5416GetXpdGainValues(struct ath_hal *ah, uint16_t xpdMask, uint16_t xpdGainValues[])
void ar5416GetGainBoundariesAndPdadcs(struct ath_hal *ah, const struct ieee80211_channel *chan, CAL_DATA_PER_FREQ *pRawDataSet, uint8_t *bChans, uint16_t availPiers, uint16_t tPdGainOverlap, int16_t *pMinCalPower, uint16_t *pPdGainBoundaries, uint8_t *pPDADCValues, uint16_t numXpdGains)
int ar5416GetRegChainOffset(struct ath_hal *ah, int i)
#define AR_SREV_5416_V20_OR_LATER(_ah)
#define AR_SREV_MERLIN_20_OR_LATER(_ah)
#define AR_PHY_TX_PWRCTRL4
#define AR_PHY_TX_PWRCTRL6_1
#define AR_PHY_TX_PWRCTRL7
#define AR_PHY_TX_PWRCTRL_ERR_EST_MODE
#define AR_PHY_TX_PWRCTRL6_0
#define AR_PHY_TX_GAIN_TBL1
#define AR_PHY_TX_PWRCTRL_PD_AVG_OUT
#define AR_PHY_TX_PWRCTRL_INIT_TX_GAIN
#define AR9280_TX_GAIN_TABLE_SIZE
static void ar9280AdjustPDADCValues(struct ath_hal *ah, int8_t pwr_table_offset, int16_t diff, uint8_t *pdadcValues)
static int16_t ar9280ChangeGainBoundarySettings(struct ath_hal *ah, uint16_t *gb, uint16_t numXpdGain, uint16_t pdGainOverlap_t2, int8_t pwr_table_offset, int16_t *diff)
static void ar9280SetGainBoundariesOpenLoop(struct ath_hal *ah, int i, uint16_t pdGainOverlap_t2, uint16_t gainBoundaries[])
HAL_BOOL ar9280SetPowerCalTable(struct ath_hal *ah, struct ar5416eeprom *pEepData, const struct ieee80211_channel *chan, int16_t *pTxPowerIndexOffset)
void ar9280olcTemperatureCompensation(struct ath_hal *ah)
void ar9280olcInit(struct ath_hal *ah)
void ar9280olcGetTxGainIndex(struct ath_hal *ah, const struct ieee80211_channel *chan, struct calDataPerFreqOpLoop *rawDatasetOpLoop, uint8_t *calChans, uint16_t availPiers, uint8_t *pwr, uint8_t *pcdacIdx)
void ar9280olcGetPDADCs(struct ath_hal *ah, uint32_t initTxGain, int txPower, uint8_t *pPDADCValues)
#define IS_EEP_MINOR_V2(_ah)
BASE_EEP_HEADER baseEepHeader
MODAL_EEP_HEADER modalHeader[2]
CAL_DATA_PER_FREQ calPierData2G[AR5416_MAX_CHAINS][AR5416_NUM_2G_CAL_PIERS]
uint8_t calFreqPier2G[AR5416_NUM_2G_CAL_PIERS]
CAL_DATA_PER_FREQ calPierData5G[AR5416_MAX_CHAINS][AR5416_NUM_5G_CAL_PIERS]
uint8_t calFreqPier5G[AR5416_NUM_5G_CAL_PIERS]