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 89 int rtStatus = _SUCCESS; 90 struct hal_com_data *pHalData = GET_HAL_DATA(Adapter); 91 92 static char sz8723RadioAFile[] = RTL8723B_PHY_RADIO_A; 93 static char sz8723RadioBFile[] = RTL8723B_PHY_RADIO_B; 94 static s8 sz8723BTxPwrTrackFile[] = RTL8723B_TXPWR_TRACK; 95 char *pszRadioAFile, *pszRadioBFile, *pszTxPwrTrackFile; 96 97 pszRadioAFile = sz8723RadioAFile; 98 pszRadioBFile = sz8723RadioBFile; 99 pszTxPwrTrackFile = sz8723BTxPwrTrackFile; 100 101 /* 3----------------------------------------------------------------- */ 102 /* 3 <2> Initialize RF */ 103 /* 3----------------------------------------------------------------- */ 104 /* for (eRFPath = RF_PATH_A; eRFPath <pHalData->NumTotalRFPath; eRFPath++) */ 105 for (eRFPath = 0; eRFPath < pHalData->NumTotalRFPath; eRFPath++) { 106 107 pPhyReg = &pHalData->PHYRegDef[eRFPath]; 108 109 /*----Store original RFENV control type----*/ 110 switch (eRFPath) { 111 case RF_PATH_A: 112 case RF_PATH_C: 113 u4RegValue = PHY_QueryBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV); 114 break; 115 case RF_PATH_B: 116 case RF_PATH_D: 117 u4RegValue = PHY_QueryBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV<<16); 118 break; 119 } 120 121 /*----Set RF_ENV enable----*/ 122 PHY_SetBBReg(Adapter, pPhyReg->rfintfe, bRFSI_RFENV<<16, 0x1); 123 udelay(1);/* PlatformStallExecution(1); */ 124 125 /*----Set RF_ENV output high----*/ 126 PHY_SetBBReg(Adapter, pPhyReg->rfintfo, bRFSI_RFENV, 0x1); 127 udelay(1);/* PlatformStallExecution(1); */ 128 129 /* Set bit number of Address and Data for RF register */ 130 PHY_SetBBReg(Adapter, pPhyReg->rfHSSIPara2, b3WireAddressLength, 0x0); /* Set 1 to 4 bits for 8255 */ 131 udelay(1);/* PlatformStallExecution(1); */ 132 133 PHY_SetBBReg(Adapter, pPhyReg->rfHSSIPara2, b3WireDataLength, 0x0); /* Set 0 to 12 bits for 8255 */ 134 udelay(1);/* PlatformStallExecution(1); */ 135 136 /*----Initialize RF fom connfiguration file----*/ 137 switch (eRFPath) { 138 case RF_PATH_A: 139 if (PHY_ConfigRFWithParaFile(Adapter, pszRadioAFile, 140 eRFPath) == _FAIL) { 141 if (HAL_STATUS_FAILURE == ODM_ConfigRFWithHeaderFile(&pHalData->odmpriv, CONFIG_RF_RADIO, (ODM_RF_RADIO_PATH_E)eRFPath)) 142 rtStatus = _FAIL; 143 } 144 break; 145 case RF_PATH_B: 146 if (PHY_ConfigRFWithParaFile(Adapter, pszRadioBFile, 147 eRFPath) == _FAIL) { 148 if (HAL_STATUS_FAILURE == ODM_ConfigRFWithHeaderFile(&pHalData->odmpriv, CONFIG_RF_RADIO, (ODM_RF_RADIO_PATH_E)eRFPath)) 149 rtStatus = _FAIL; 150 } 151 break; 152 case RF_PATH_C: 153 break; 154 case RF_PATH_D: 155 break; 156 } 157 158 /*----Restore RFENV control type----*/ 159 switch (eRFPath) { 160 case RF_PATH_A: 161 case RF_PATH_C: 162 PHY_SetBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV, u4RegValue); 163 break; 164 case RF_PATH_B: 165 case RF_PATH_D: 166 PHY_SetBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV<<16, u4RegValue); 167 break; 168 } 169 170 if (rtStatus != _SUCCESS) { 171 /* RT_TRACE(COMP_FPGA, DBG_LOUD, ("phy_RF6052_Config_ParaFile():Radio[%d] Fail!!", eRFPath)); */ 172 goto phy_RF6052_Config_ParaFile_Fail; 173 } 174 175 } 176 177 /* 3 ----------------------------------------------------------------- */ 178 /* 3 Configuration of Tx Power Tracking */ 179 /* 3 ----------------------------------------------------------------- */ 180 181 if (PHY_ConfigRFWithTxPwrTrackParaFile(Adapter, pszTxPwrTrackFile) == 182 _FAIL) { 183 ODM_ConfigRFWithTxPwrTrackHeaderFile(&pHalData->odmpriv); 184 } 185 186 /* RT_TRACE(COMP_INIT, DBG_LOUD, ("<---phy_RF6052_Config_ParaFile()\n")); */ 187 return rtStatus; 188 189 phy_RF6052_Config_ParaFile_Fail: 190 return rtStatus; 191 } 192 193 194 int PHY_RF6052_Config8723B(struct adapter *Adapter) 195 { 196 struct hal_com_data *pHalData = GET_HAL_DATA(Adapter); 197 int rtStatus = _SUCCESS; 198 199 /* */ 200 /* Initialize general global value */ 201 /* */ 202 /* TODO: Extend RF_PATH_C and RF_PATH_D in the future */ 203 if (pHalData->rf_type == RF_1T1R) 204 pHalData->NumTotalRFPath = 1; 205 else 206 pHalData->NumTotalRFPath = 2; 207 208 /* */ 209 /* Config BB and RF */ 210 /* */ 211 rtStatus = phy_RF6052_Config_ParaFile(Adapter); 212 return rtStatus; 213 214 } 215 216 /* End of HalRf6052.c */ 217