1 // SPDX-License-Identifier: GPL-2.0 2 /****************************************************************************** 3 * 4 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. 5 * 6 ******************************************************************************/ 7 /****************************************************************************** 8 * 9 * 10 * Module: rtl8192c_rf6052.c (Source C File) 11 * 12 * Note: Provide RF 6052 series relative API. 13 * 14 * Function: 15 * 16 * Export: 17 * 18 * Abbrev: 19 * 20 * History: 21 * Data Who Remark 22 * 23 * 09/25/2008 MHC Create initial version. 24 * 11/05/2008 MHC Add API for tw power setting. 25 * 26 * 27 ******************************************************************************/ 28 29 #include <rtl8723b_hal.h> 30 31 /*---------------------------Define Local Constant---------------------------*/ 32 /*---------------------------Define Local Constant---------------------------*/ 33 34 35 /*------------------------Define global variable-----------------------------*/ 36 /*------------------------Define global variable-----------------------------*/ 37 38 39 /*------------------------Define local variable------------------------------*/ 40 /* 2008/11/20 MH For Debug only, RF */ 41 /*------------------------Define local variable------------------------------*/ 42 43 /*----------------------------------------------------------------------------- 44 * Function: PHY_RF6052SetBandwidth() 45 * 46 * Overview: This function is called by SetBWModeCallback8190Pci() only 47 * 48 * Input: struct adapter * Adapter 49 * WIRELESS_BANDWIDTH_E Bandwidth 20M or 40M 50 * 51 * Output: NONE 52 * 53 * Return: NONE 54 * 55 * Note: For RF type 0222D 56 *---------------------------------------------------------------------------*/ 57 void PHY_RF6052SetBandwidth8723B( 58 struct adapter *Adapter, enum CHANNEL_WIDTH Bandwidth 59 ) /* 20M or 40M */ 60 { 61 struct hal_com_data *pHalData = GET_HAL_DATA(Adapter); 62 63 switch (Bandwidth) { 64 case CHANNEL_WIDTH_20: 65 pHalData->RfRegChnlVal[0] = ((pHalData->RfRegChnlVal[0] & 0xfffff3ff) | BIT10 | BIT11); 66 PHY_SetRFReg(Adapter, ODM_RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask, pHalData->RfRegChnlVal[0]); 67 PHY_SetRFReg(Adapter, ODM_RF_PATH_B, RF_CHNLBW, bRFRegOffsetMask, pHalData->RfRegChnlVal[0]); 68 break; 69 70 case CHANNEL_WIDTH_40: 71 pHalData->RfRegChnlVal[0] = ((pHalData->RfRegChnlVal[0] & 0xfffff3ff) | BIT10); 72 PHY_SetRFReg(Adapter, ODM_RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask, pHalData->RfRegChnlVal[0]); 73 PHY_SetRFReg(Adapter, ODM_RF_PATH_B, RF_CHNLBW, bRFRegOffsetMask, pHalData->RfRegChnlVal[0]); 74 break; 75 76 default: 77 /* RT_TRACE(COMP_DBG, DBG_LOUD, ("PHY_SetRF8225Bandwidth(): unknown Bandwidth: %#X\n", Bandwidth)); */ 78 break; 79 } 80 81 } 82 83 static int phy_RF6052_Config_ParaFile(struct adapter *Adapter) 84 { 85 u32 u4RegValue = 0; 86 u8 eRFPath; 87 struct bb_register_def *pPhyReg; 88 struct hal_com_data *pHalData = GET_HAL_DATA(Adapter); 89 90 /* 3----------------------------------------------------------------- */ 91 /* 3 <2> Initialize RF */ 92 /* 3----------------------------------------------------------------- */ 93 /* for (eRFPath = RF_PATH_A; eRFPath <pHalData->NumTotalRFPath; eRFPath++) */ 94 for (eRFPath = 0; eRFPath < pHalData->NumTotalRFPath; eRFPath++) { 95 96 pPhyReg = &pHalData->PHYRegDef[eRFPath]; 97 98 /*----Store original RFENV control type----*/ 99 switch (eRFPath) { 100 case RF_PATH_A: 101 case RF_PATH_C: 102 u4RegValue = PHY_QueryBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV); 103 break; 104 case RF_PATH_B: 105 case RF_PATH_D: 106 u4RegValue = PHY_QueryBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV << 16); 107 break; 108 } 109 110 /*----Set RF_ENV enable----*/ 111 PHY_SetBBReg(Adapter, pPhyReg->rfintfe, bRFSI_RFENV << 16, 0x1); 112 udelay(1);/* PlatformStallExecution(1); */ 113 114 /*----Set RF_ENV output high----*/ 115 PHY_SetBBReg(Adapter, pPhyReg->rfintfo, bRFSI_RFENV, 0x1); 116 udelay(1);/* PlatformStallExecution(1); */ 117 118 /* Set bit number of Address and Data for RF register */ 119 PHY_SetBBReg(Adapter, pPhyReg->rfHSSIPara2, b3WireAddressLength, 0x0); /* Set 1 to 4 bits for 8255 */ 120 udelay(1);/* PlatformStallExecution(1); */ 121 122 PHY_SetBBReg(Adapter, pPhyReg->rfHSSIPara2, b3WireDataLength, 0x0); /* Set 0 to 12 bits for 8255 */ 123 udelay(1);/* PlatformStallExecution(1); */ 124 125 /*----Initialize RF fom connfiguration file----*/ 126 switch (eRFPath) { 127 case RF_PATH_A: 128 case RF_PATH_B: 129 ODM_ConfigRFWithHeaderFile(&pHalData->odmpriv, 130 CONFIG_RF_RADIO, eRFPath); 131 break; 132 case RF_PATH_C: 133 case RF_PATH_D: 134 break; 135 } 136 137 /*----Restore RFENV control type----*/ 138 switch (eRFPath) { 139 case RF_PATH_A: 140 case RF_PATH_C: 141 PHY_SetBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV, u4RegValue); 142 break; 143 case RF_PATH_B: 144 case RF_PATH_D: 145 PHY_SetBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV << 16, u4RegValue); 146 break; 147 } 148 } 149 150 /* 3 ----------------------------------------------------------------- */ 151 /* 3 Configuration of Tx Power Tracking */ 152 /* 3 ----------------------------------------------------------------- */ 153 154 ODM_ConfigRFWithTxPwrTrackHeaderFile(&pHalData->odmpriv); 155 156 /* RT_TRACE(COMP_INIT, DBG_LOUD, ("<---phy_RF6052_Config_ParaFile()\n")); */ 157 return _SUCCESS; 158 } 159 160 161 int PHY_RF6052_Config8723B(struct adapter *Adapter) 162 { 163 struct hal_com_data *pHalData = GET_HAL_DATA(Adapter); 164 165 /* */ 166 /* Initialize general global value */ 167 /* */ 168 /* TODO: Extend RF_PATH_C and RF_PATH_D in the future */ 169 if (pHalData->rf_type == RF_1T1R) 170 pHalData->NumTotalRFPath = 1; 171 else 172 pHalData->NumTotalRFPath = 2; 173 174 /* */ 175 /* Config BB and RF */ 176 /* */ 177 return phy_RF6052_Config_ParaFile(Adapter); 178 179 } 180 181 /* End of HalRf6052.c */ 182