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 break; 78 } 79 80 } 81 82 static int phy_RF6052_Config_ParaFile(struct adapter *Adapter) 83 { 84 u32 u4RegValue = 0; 85 u8 eRFPath; 86 struct bb_register_def *pPhyReg; 87 struct hal_com_data *pHalData = GET_HAL_DATA(Adapter); 88 89 /* 3----------------------------------------------------------------- */ 90 /* 3 <2> Initialize RF */ 91 /* 3----------------------------------------------------------------- */ 92 /* for (eRFPath = RF_PATH_A; eRFPath <pHalData->NumTotalRFPath; eRFPath++) */ 93 for (eRFPath = 0; eRFPath < pHalData->NumTotalRFPath; eRFPath++) { 94 95 pPhyReg = &pHalData->PHYRegDef[eRFPath]; 96 97 /*----Store original RFENV control type----*/ 98 switch (eRFPath) { 99 case RF_PATH_A: 100 case RF_PATH_C: 101 u4RegValue = PHY_QueryBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV); 102 break; 103 case RF_PATH_B: 104 case RF_PATH_D: 105 u4RegValue = PHY_QueryBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV << 16); 106 break; 107 } 108 109 /*----Set RF_ENV enable----*/ 110 PHY_SetBBReg(Adapter, pPhyReg->rfintfe, bRFSI_RFENV << 16, 0x1); 111 udelay(1);/* PlatformStallExecution(1); */ 112 113 /*----Set RF_ENV output high----*/ 114 PHY_SetBBReg(Adapter, pPhyReg->rfintfo, bRFSI_RFENV, 0x1); 115 udelay(1);/* PlatformStallExecution(1); */ 116 117 /* Set bit number of Address and Data for RF register */ 118 PHY_SetBBReg(Adapter, pPhyReg->rfHSSIPara2, b3WireAddressLength, 0x0); /* Set 1 to 4 bits for 8255 */ 119 udelay(1);/* PlatformStallExecution(1); */ 120 121 PHY_SetBBReg(Adapter, pPhyReg->rfHSSIPara2, b3WireDataLength, 0x0); /* Set 0 to 12 bits for 8255 */ 122 udelay(1);/* PlatformStallExecution(1); */ 123 124 /*----Initialize RF fom connfiguration file----*/ 125 switch (eRFPath) { 126 case RF_PATH_A: 127 case RF_PATH_B: 128 ODM_ConfigRFWithHeaderFile(&pHalData->odmpriv, 129 CONFIG_RF_RADIO, eRFPath); 130 break; 131 case RF_PATH_C: 132 case RF_PATH_D: 133 break; 134 } 135 136 /*----Restore RFENV control type----*/ 137 switch (eRFPath) { 138 case RF_PATH_A: 139 case RF_PATH_C: 140 PHY_SetBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV, u4RegValue); 141 break; 142 case RF_PATH_B: 143 case RF_PATH_D: 144 PHY_SetBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV << 16, u4RegValue); 145 break; 146 } 147 } 148 149 /* 3 ----------------------------------------------------------------- */ 150 /* 3 Configuration of Tx Power Tracking */ 151 /* 3 ----------------------------------------------------------------- */ 152 153 ODM_ConfigRFWithTxPwrTrackHeaderFile(&pHalData->odmpriv); 154 155 return _SUCCESS; 156 } 157 158 159 int PHY_RF6052_Config8723B(struct adapter *Adapter) 160 { 161 struct hal_com_data *pHalData = GET_HAL_DATA(Adapter); 162 163 /* */ 164 /* Initialize general global value */ 165 /* */ 166 /* TODO: Extend RF_PATH_C and RF_PATH_D in the future */ 167 if (pHalData->rf_type == RF_1T1R) 168 pHalData->NumTotalRFPath = 1; 169 else 170 pHalData->NumTotalRFPath = 2; 171 172 /* */ 173 /* Config BB and RF */ 174 /* */ 175 return phy_RF6052_Config_ParaFile(Adapter); 176 177 } 178 179 /* End of HalRf6052.c */ 180