Files
Linux_Drivers/osdrv/extdrv/wireless/mediatek/mt7603/hw_ctrl/greenap.c
forum_service 213c880673 add driver of tp、wiegand-gpio and wireless
Change-Id: Ie3c11d9d85cf1a05042f5690ac711856fe8b1ad7
2023-12-22 09:56:05 +08:00

176 lines
4.6 KiB
C

/*
***************************************************************************
* Ralink Tech Inc.
* 4F, No. 2 Technology 5th Rd.
* Science-based Industrial Park
* Hsin-chu, Taiwan, R.O.C.
*
* (c) Copyright 2002-2004, Ralink Technology, Inc.
*
* All rights reserved. Ralink's source code is an unpublished work and the
* use of a copyright notice does not imply otherwise. This source code
* contains confidential trade secret material of Ralink Tech. Any attemp
* or participation in deciphering, decoding, reverse engineering or in any
* way altering the source code is stricitly prohibited, unless the prior
* written consent of Ralink Technology, Inc. is obtained.
***************************************************************************
Module Name:
greenap.c
Abstract:
Ralink Wireless driver green ap related functions
Revision History:
Who When What
-------- ---------- ----------------------------------------------
*/
#include "rt_config.h"
#ifdef GREENAP_SUPPORT
VOID EnableAPMIMOPSv2(RTMP_ADAPTER *pAd, BOOLEAN ReduceCorePower)
{
bbp_set_mmps(pAd, ReduceCorePower);
rtmp_mac_set_mmps(pAd, ReduceCorePower);
pAd->ApCfg.bGreenAPActive=TRUE;
DBGPRINT(RT_DEBUG_INFO, ("EnableAPMIMOPSNew, 30xx changes the # of antenna to 1\n"));
}
VOID DisableAPMIMOPSv2(RTMP_ADAPTER *pAd)
{
bbp_set_mmps(pAd, FALSE);
rtmp_mac_set_mmps(pAd, FALSE);
pAd->ApCfg.bGreenAPActive=FALSE;
DBGPRINT(RT_DEBUG_INFO, ("DisableAPMIMOPSNew, 30xx reserve only one antenna\n"));
}
VOID EnableAPMIMOPSv1(
IN RTMP_ADAPTER *pAd,
IN BOOLEAN ReduceCorePower)
{
UCHAR BBPR3 = 0,BBPR1 = 0;
ULONG TxPinCfg = 0x00050F0A;/*Gary 2007/08/09 0x050A0A*/
UCHAR BBPR4=0;
UCHAR CentralChannel;
#ifdef RT305x
UCHAR RFValue=0;
RT30xxReadRFRegister(pAd, RF_R01, &RFValue);
RFValue &= 0x03; //clear bit[7~2]
RFValue |= 0x3C; // default 2Tx 2Rx
// turn off tx1
RFValue &= ~(0x1 << 5);
// turn off rx1
RFValue &= ~(0x1 << 4);
// Turn off unused PA or LNA when only 1T or 1R
#endif /* RT305x */
if(pAd->CommonCfg.Channel>14)
TxPinCfg=0x00050F05;
TxPinCfg &= 0xFFFFFFF3;
TxPinCfg &= 0xFFFFF3FF;
pAd->ApCfg.bGreenAPActive=TRUE;
CentralChannel = pAd->CommonCfg.CentralChannel;
DBGPRINT(RT_DEBUG_INFO, ("Run with BW_20\n"));
pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel;
CentralChannel = pAd->CommonCfg.Channel;
/* Set BBP registers to BW20 */
bbp_set_bw(pAd, BW_20);
/* RF Bandwidth related registers would be set in AsicSwitchChannel() */
if (pAd->Antenna.field.RxPath>1||pAd->Antenna.field.TxPath>1)
{
/*Tx/Rx Stream*/
bbp_set_txdac(pAd, 0);
bbp_set_rxpath(pAd, 1);
RTMP_IO_WRITE32(pAd, TX_PIN_CFG, TxPinCfg);
#ifdef RT305x
RT30xxWriteRFRegister(pAd, RF_R01, RFValue);
#endif /* RT305x */
}
AsicSwitchChannel(pAd, CentralChannel, FALSE);
DBGPRINT(RT_DEBUG_INFO, ("EnableAPMIMOPS, 305x/28xx changes the # of antenna to 1\n"));
}
VOID DisableAPMIMOPSv1(
IN PRTMP_ADAPTER pAd)
{
UCHAR BBPR3=0,BBPR1=0;
ULONG TxPinCfg = 0x00050F0A; /* Gary 2007/08/09 0x050A0A */
UCHAR CentralChannel;
UINT32 Value=0;
#ifdef RT305x
UCHAR RFValue=0;
RT30xxReadRFRegister(pAd, RF_R01, &RFValue);
RFValue &= 0x03; //clear bit[7~2]
RFValue |= 0x3C; // default 2Tx 2Rx
#endif /* RT305x */
if(pAd->CommonCfg.Channel>14)
TxPinCfg=0x00050F05;
/* Turn off unused PA or LNA when only 1T or 1R*/
if (pAd->Antenna.field.TxPath == 1)
TxPinCfg &= 0xFFFFFFF3;
if (pAd->Antenna.field.RxPath == 1)
TxPinCfg &= 0xFFFFF3FF;
pAd->ApCfg.bGreenAPActive=FALSE;
if ((pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth == BW_40) && (pAd->CommonCfg.Channel != 14))
{
UINT8 ext_ch = EXTCHA_NONE;
DBGPRINT(RT_DEBUG_INFO, ("Run with BW_40\n"));
/* Set CentralChannel to work for BW40 */
if (pAd->CommonCfg.RegTransmitSetting.field.EXTCHA == EXTCHA_ABOVE)
{
pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel + 2;
ext_ch = EXTCHA_ABOVE;
}
else if ((pAd->CommonCfg.Channel > 2) && (pAd->CommonCfg.RegTransmitSetting.field.EXTCHA == EXTCHA_BELOW))
{
pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel - 2;
ext_ch = EXTCHA_BELOW;
}
CentralChannel = pAd->CommonCfg.CentralChannel;
AsicSetChannel(pAd, CentralChannel, BW_40, ext_ch, FALSE);
}
/*Tx Stream*/
if (WMODE_CAP_N(pAd->CommonCfg.PhyMode) && (pAd->Antenna.field.TxPath == 2))
bbp_set_txdac(pAd, 2);
else
bbp_set_txdac(pAd, 0);
/*Rx Stream*/
bbp_set_rxpath(pAd, pAd->Antenna.field.RxPath);
RTMP_IO_WRITE32(pAd, TX_PIN_CFG, TxPinCfg);
#ifdef RT305x
RT30xxWriteRFRegister(pAd, RF_R01, RFValue);
#endif /* RT305x */
DBGPRINT(RT_DEBUG_INFO, ("DisableAPMIMOPS, 305x/28xx reserve only one antenna\n"));
}
#endif /* GREENAP_SUPPORT */