drivers/staging/rtl8723bs/hal/HalPhyRf_8723B.c
Source file repositories/reference/linux-study-clean/drivers/staging/rtl8723bs/hal/HalPhyRf_8723B.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/staging/rtl8723bs/hal/HalPhyRf_8723B.c- Extension
.c- Size
- 62179 bytes
- Lines
- 1797
- Domain
- Driver Families
- Bucket
- drivers/staging
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
drv_types.hodm_precomp.h
Detected Declarations
function setIqkMatrix_8723Bfunction setCCKFilterCoefficientfunction ODM_TxPwrTrackSetPwr_8723Bfunction GetDeltaSwingTable_8723Bfunction ConfigureTxpowerTrack_8723Bfunction phy_PathA_IQK_8723Bfunction phy_PathA_RxIQK8723Bfunction phy_PathB_IQK_8723Bfunction phy_PathB_RxIQK8723Bfunction _PHY_PathAFillIQKMatrix8723Bfunction _PHY_PathBFillIQKMatrix8723Bfunction ODM_SetIQCbyRFpathfunction ODM_CheckPowerStatusfunction _PHY_SaveADDARegisters8723Bfunction _PHY_SaveMACRegisters8723Bfunction _PHY_ReloadADDARegisters8723Bfunction _PHY_ReloadMACRegisters8723Bfunction _PHY_PathADDAOn8723Bfunction _PHY_MACSettingCalibration8723Bfunction phy_SimularityCompare_8723Bfunction phy_IQCalibrate_8723Bfunction phy_LCCalibrate_8723Bfunction PHY_IQCalibrate_8723Bfunction PHY_LCCalibrate_8723B
Annotated Snippet
switch (RFPath) {
case RF_PATH_A:
/* write new elements A, C, D to regC80 and regC94,
* element B is always 0
*/
value32 = (ele_D<<22)|((ele_C&0x3F)<<16)|ele_A;
PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_XATxIQImbalance, bMaskDWord, value32);
value32 = (ele_C&0x000003C0)>>6;
PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_XCTxAFE, bMaskH4Bits, value32);
value32 = ((IqkResult_X * ele_D)>>7)&0x01;
PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_ECCAThreshold, BIT24, value32);
break;
case RF_PATH_B:
/* write new elements A, C, D to regC88 and regC9C,
* element B is always 0
*/
value32 = (ele_D<<22)|((ele_C&0x3F)<<16)|ele_A;
PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord, value32);
value32 = (ele_C&0x000003C0)>>6;
PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_XDTxAFE, bMaskH4Bits, value32);
value32 = ((IqkResult_X * ele_D)>>7)&0x01;
PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_ECCAThreshold, BIT28, value32);
break;
default:
break;
}
} else {
switch (RFPath) {
case RF_PATH_A:
PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_XATxIQImbalance, bMaskDWord, OFDMSwingTable_New[OFDM_index]);
PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_XCTxAFE, bMaskH4Bits, 0x00);
PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_ECCAThreshold, BIT24, 0x00);
break;
case RF_PATH_B:
PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord, OFDMSwingTable_New[OFDM_index]);
PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_XDTxAFE, bMaskH4Bits, 0x00);
PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_ECCAThreshold, BIT28, 0x00);
break;
default:
break;
}
}
}
static void setCCKFilterCoefficient(struct dm_odm_t *pDM_Odm, u8 CCKSwingIndex)
{
u8 (*swingtable)[8];
if (!pDM_Odm->RFCalibrateInfo.bCCKinCH14)
swingtable = CCKSwingTable_Ch1_Ch13_New;
else
swingtable = CCKSwingTable_Ch14_New;
for (int i = 0; i < 8; i++)
rtw_write8(pDM_Odm->Adapter, 0xa22 + i, swingtable[CCKSwingIndex][i]);
}
/*-----------------------------------------------------------------------------
* Function: odm_TxPwrTrackSetPwr88E()
*
* Overview: 88E change all channel tx power according to flag.
* OFDM & CCK are all different.
*
* Input: NONE
*
* Output: NONE
*
* Return: NONE
*
* Revised History:
*When Who Remark
*04/23/2012 MHC Create Version 0.
*
*---------------------------------------------------------------------------*/
void ODM_TxPwrTrackSetPwr_8723B(
struct dm_odm_t *pDM_Odm,
enum pwrtrack_method Method,
u8 RFPath,
u8 ChannelMappedIndex
)
{
struct adapter *Adapter = pDM_Odm->Adapter;
Annotation
- Immediate include surface: `drv_types.h`, `odm_precomp.h`.
- Detected declarations: `function setIqkMatrix_8723B`, `function setCCKFilterCoefficient`, `function ODM_TxPwrTrackSetPwr_8723B`, `function GetDeltaSwingTable_8723B`, `function ConfigureTxpowerTrack_8723B`, `function phy_PathA_IQK_8723B`, `function phy_PathA_RxIQK8723B`, `function phy_PathB_IQK_8723B`, `function phy_PathB_RxIQK8723B`, `function _PHY_PathAFillIQKMatrix8723B`.
- Atlas domain: Driver Families / drivers/staging.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.