48c1d36479
generally tidy up the TX power programming code. Enforce that the TX power offset for Merlin is -5 dBm, rather than any other value programmable in the EEPROM. This requires some further code to be ported over from ath9k, so until that is done and tested, fail to attach NICs whose TX power offset isn't -5 dBm. This improves both legacy and HT transmission on my merlin board. It allows for stable MCS TX up to MCS15. Specifics: * Refactor out a bunch of the TX power calibration code - setting/obtaining the power detector / gain boundaries, programming the PDADC * Take the -5 dBm TX power offset into account on Merlin - "0" in the per-rate TX power register means -5 dBm, not 0 dBm * When doing OLC * Enforce min (0) and max (AR5416_MAX_RATE_POWER) when fiddling with the TX power, to avoid the TX power values from wrapping when low. * Implement the 1 dBm cck power offset when doing OLC * Implement temperature compensation for 2.4ghz mode when doing OLC * Implement an AR9280 specific TX power calibration routine which includes the OLC twiddles, leaving the earlier chipset path (AR5416, AR9160) alone Whilst here, use these refactored routines for the AR9285 TX power calibration/programming code and enforce correct overflow/underflow handling when fiddling with TX power values. Obtained from: linux ath9k
54 lines
2.4 KiB
C
54 lines
2.4 KiB
C
/*
|
|
* Copyright (c) 2010-2011 Adrian Chadd, Xenion Pty Ltd.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
* SUCH DAMAGE.
|
|
*
|
|
* $FreeBSD$
|
|
*/
|
|
|
|
#ifndef __ATH_AR9280_OLC_H__
|
|
#define __ATH_AR9280_OLC_H__
|
|
|
|
extern void ar9280olcInit(struct ath_hal *ah);
|
|
|
|
/* OLC TX power control */
|
|
extern void ar9280olcGetPDADCs(struct ath_hal *ah, uint32_t initTxGain,
|
|
int txPower, uint8_t *pPDADCValues);
|
|
extern 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);
|
|
extern void ar9280GetGainBoundariesAndPdadcs(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);
|
|
extern HAL_BOOL ar9280SetPowerCalTable(struct ath_hal *ah,
|
|
struct ar5416eeprom *pEepData, const struct ieee80211_channel *chan,
|
|
int16_t *pTxPowerIndexOffset);
|
|
|
|
/* OLC calibration */
|
|
extern void ar9280olcTemperatureCompensation(struct ath_hal *ah);
|
|
|
|
#endif
|