Add bluetooth fixes to the AR5416/AR92xx HAL:
* Call the bluetooth setup function during the reset path, so the bluetooth settings are actually initialised. * Call the AR9285 diversity functions during bluetooth setup; so the AR9285 diversity and antenna configuration registers are correctly programmed * Misc debugging info. Tested: * AR9285+AR3011 bluetooth combo; this code itself doesn't enable bluetooth coexistence but it's part of what I'm currently using.
This commit is contained in:
parent
0a2cc82713
commit
0c20aadbd9
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=251483
@ -1581,7 +1581,7 @@ struct ath_hal {
|
|||||||
uint32_t);
|
uint32_t);
|
||||||
void __ahdecl(*ah_btCoexSetBmissThresh)(struct ath_hal *,
|
void __ahdecl(*ah_btCoexSetBmissThresh)(struct ath_hal *,
|
||||||
uint32_t);
|
uint32_t);
|
||||||
void __ahdecl(*ah_btcoexSetParameter)(struct ath_hal *,
|
void __ahdecl(*ah_btCoexSetParameter)(struct ath_hal *,
|
||||||
uint32_t, uint32_t);
|
uint32_t, uint32_t);
|
||||||
void __ahdecl(*ah_btCoexDisable)(struct ath_hal *);
|
void __ahdecl(*ah_btCoexDisable)(struct ath_hal *);
|
||||||
int __ahdecl(*ah_btCoexEnable)(struct ath_hal *);
|
int __ahdecl(*ah_btCoexEnable)(struct ath_hal *);
|
||||||
|
@ -207,7 +207,7 @@ ar5416InitState(struct ath_hal_5416 *ahp5416, uint16_t devid, HAL_SOFTC sc,
|
|||||||
ah->ah_btCoexSetQcuThresh = ar5416BTCoexSetQcuThresh;
|
ah->ah_btCoexSetQcuThresh = ar5416BTCoexSetQcuThresh;
|
||||||
ah->ah_btCoexSetWeights = ar5416BTCoexSetWeights;
|
ah->ah_btCoexSetWeights = ar5416BTCoexSetWeights;
|
||||||
ah->ah_btCoexSetBmissThresh = ar5416BTCoexSetupBmissThresh;
|
ah->ah_btCoexSetBmissThresh = ar5416BTCoexSetupBmissThresh;
|
||||||
ah->ah_btcoexSetParameter = ar5416BTCoexSetParameter;
|
ah->ah_btCoexSetParameter = ar5416BTCoexSetParameter;
|
||||||
ah->ah_btCoexDisable = ar5416BTCoexDisable;
|
ah->ah_btCoexDisable = ar5416BTCoexDisable;
|
||||||
ah->ah_btCoexEnable = ar5416BTCoexEnable;
|
ah->ah_btCoexEnable = ar5416BTCoexEnable;
|
||||||
AH5416(ah)->ah_btCoexSetDiversity = ar5416BTCoexAntennaDiversity;
|
AH5416(ah)->ah_btCoexSetDiversity = ar5416BTCoexAntennaDiversity;
|
||||||
|
@ -328,6 +328,11 @@ ar5416InitBTCoex(struct ath_hal *ah)
|
|||||||
{
|
{
|
||||||
struct ath_hal_5416 *ahp = AH5416(ah);
|
struct ath_hal_5416 *ahp = AH5416(ah);
|
||||||
|
|
||||||
|
HALDEBUG(ah, HAL_DEBUG_BT_COEX,
|
||||||
|
"%s: called; configType=%d\n",
|
||||||
|
__func__,
|
||||||
|
ahp->ah_btCoexConfigType);
|
||||||
|
|
||||||
if (ahp->ah_btCoexConfigType == HAL_BT_COEX_CFG_3WIRE) {
|
if (ahp->ah_btCoexConfigType == HAL_BT_COEX_CFG_3WIRE) {
|
||||||
OS_REG_SET_BIT(ah, AR_GPIO_INPUT_EN_VAL,
|
OS_REG_SET_BIT(ah, AR_GPIO_INPUT_EN_VAL,
|
||||||
(AR_GPIO_INPUT_EN_VAL_BT_PRIORITY_BB |
|
(AR_GPIO_INPUT_EN_VAL_BT_PRIORITY_BB |
|
||||||
|
@ -289,6 +289,12 @@ ar5416Reset(struct ath_hal *ah, HAL_OPMODE opmode,
|
|||||||
ar5416StartTsf2(ah);
|
ar5416StartTsf2(ah);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Enable Bluetooth Coexistence if it's enabled.
|
||||||
|
*/
|
||||||
|
if (AH5416(ah)->ah_btCoexConfigType != HAL_BT_COEX_CFG_NONE)
|
||||||
|
ar5416InitBTCoex(ah);
|
||||||
|
|
||||||
/* Restore previous antenna */
|
/* Restore previous antenna */
|
||||||
OS_REG_WRITE(ah, AR_DEF_ANTENNA, saveDefAntenna);
|
OS_REG_WRITE(ah, AR_DEF_ANTENNA, saveDefAntenna);
|
||||||
|
|
||||||
|
@ -172,14 +172,14 @@ ar9285Attach(uint16_t devid, HAL_SOFTC sc,
|
|||||||
|
|
||||||
/* override with 9285 specific state */
|
/* override with 9285 specific state */
|
||||||
AH5416(ah)->ah_initPLL = ar9280InitPLL;
|
AH5416(ah)->ah_initPLL = ar9280InitPLL;
|
||||||
AH5416(ah)->ah_btCoexSetDiversity = ar5416BTCoexAntennaDiversity;
|
AH5416(ah)->ah_btCoexSetDiversity = ar9285BTCoexAntennaDiversity;
|
||||||
|
|
||||||
ah->ah_setAntennaSwitch = ar9285SetAntennaSwitch;
|
ah->ah_setAntennaSwitch = ar9285SetAntennaSwitch;
|
||||||
ah->ah_configPCIE = ar9285ConfigPCIE;
|
ah->ah_configPCIE = ar9285ConfigPCIE;
|
||||||
ah->ah_disablePCIE = ar9285DisablePCIE;
|
ah->ah_disablePCIE = ar9285DisablePCIE;
|
||||||
ah->ah_setTxPower = ar9285SetTransmitPower;
|
ah->ah_setTxPower = ar9285SetTransmitPower;
|
||||||
ah->ah_setBoardValues = ar9285SetBoardValues;
|
ah->ah_setBoardValues = ar9285SetBoardValues;
|
||||||
ah->ah_btcoexSetParameter = ar9285BTCoexSetParameter;
|
ah->ah_btCoexSetParameter = ar9285BTCoexSetParameter;
|
||||||
|
|
||||||
AH5416(ah)->ah_cal.iqCalData.calData = &ar9280_iq_cal;
|
AH5416(ah)->ah_cal.iqCalData.calData = &ar9280_iq_cal;
|
||||||
AH5416(ah)->ah_cal.adcGainCalData.calData = &ar9280_adc_gain_cal;
|
AH5416(ah)->ah_cal.adcGainCalData.calData = &ar9280_adc_gain_cal;
|
||||||
@ -543,7 +543,7 @@ ar9285FillCapabilityInfo(struct ath_hal *ah)
|
|||||||
pCap->halRtsAggrLimit = 64*1024; /* 802.11n max */
|
pCap->halRtsAggrLimit = 64*1024; /* 802.11n max */
|
||||||
pCap->halExtChanDfsSupport = AH_TRUE;
|
pCap->halExtChanDfsSupport = AH_TRUE;
|
||||||
pCap->halUseCombinedRadarRssi = AH_TRUE;
|
pCap->halUseCombinedRadarRssi = AH_TRUE;
|
||||||
#if 0
|
#if 1
|
||||||
/* XXX bluetooth */
|
/* XXX bluetooth */
|
||||||
pCap->halBtCoexSupport = AH_TRUE;
|
pCap->halBtCoexSupport = AH_TRUE;
|
||||||
#endif
|
#endif
|
||||||
|
@ -47,6 +47,12 @@ ar9285BTCoexAntennaDiversity(struct ath_hal *ah)
|
|||||||
u_int32_t regVal;
|
u_int32_t regVal;
|
||||||
u_int8_t ant_div_control1, ant_div_control2;
|
u_int8_t ant_div_control1, ant_div_control2;
|
||||||
|
|
||||||
|
HALDEBUG(ah, HAL_DEBUG_BT_COEX,
|
||||||
|
"%s: btCoexFlag: ALLOW=%d, ENABLE=%d\n",
|
||||||
|
__func__,
|
||||||
|
!! (ahp->ah_btCoexFlag & HAL_BT_COEX_FLAG_ANT_DIV_ALLOW),
|
||||||
|
!! (ahp->ah_btCoexFlag & HAL_BT_COEX_FLAG_ANT_DIV_ENABLE));
|
||||||
|
|
||||||
if ((ahp->ah_btCoexFlag & HAL_BT_COEX_FLAG_ANT_DIV_ALLOW) ||
|
if ((ahp->ah_btCoexFlag & HAL_BT_COEX_FLAG_ANT_DIV_ALLOW) ||
|
||||||
(AH5212(ah)->ah_diversity != HAL_ANT_VARIABLE)) {
|
(AH5212(ah)->ah_diversity != HAL_ANT_VARIABLE)) {
|
||||||
if ((ahp->ah_btCoexFlag & HAL_BT_COEX_FLAG_ANT_DIV_ENABLE) &&
|
if ((ahp->ah_btCoexFlag & HAL_BT_COEX_FLAG_ANT_DIV_ENABLE) &&
|
||||||
|
Loading…
Reference in New Issue
Block a user