64c67c98345c8498057e32a40530b3662d9a98eb
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723bs / hal / rtl8723b / rtl8723b_rf6052.c
1 /******************************************************************************\r
2  *\r
3  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
4  *\r
5  * This program is free software; you can redistribute it and/or modify it\r
6  * under the terms of version 2 of the GNU General Public License as\r
7  * published by the Free Software Foundation.\r
8  *\r
9  * This program is distributed in the hope that it will be useful, but WITHOUT\r
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
11  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
12  * more details.\r
13  *\r
14  * You should have received a copy of the GNU General Public License along with\r
15  * this program; if not, write to the Free Software Foundation, Inc.,\r
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
17  *\r
18  *\r
19  ******************************************************************************/\r
20 /******************************************************************************\r
21  *\r
22  *\r
23  * Module:      rtl8192c_rf6052.c       ( Source C File)\r
24  *\r
25  * Note:        Provide RF 6052 series relative API.\r
26  *\r
27  * Function:\r
28  *\r
29  * Export:\r
30  *\r
31  * Abbrev:\r
32  *\r
33  * History:\r
34  * Data                 Who             Remark\r
35  *\r
36  * 09/25/2008   MHC             Create initial version.\r
37  * 11/05/2008   MHC             Add API for tw power setting.\r
38  *\r
39  *\r
40 ******************************************************************************/\r
41 \r
42 #include <rtl8723b_hal.h>\r
43 \r
44 /*---------------------------Define Local Constant---------------------------*/\r
45 /*---------------------------Define Local Constant---------------------------*/\r
46 \r
47 \r
48 /*------------------------Define global variable-----------------------------*/\r
49 /*------------------------Define global variable-----------------------------*/\r
50 \r
51 \r
52 /*------------------------Define local variable------------------------------*/\r
53 // 2008/11/20 MH For Debug only, RF\r
54 //static        RF_SHADOW_T     RF_Shadow[RF6052_MAX_PATH][RF6052_MAX_REG] = {0};\r
55 static  RF_SHADOW_T     RF_Shadow[RF6052_MAX_PATH][RF6052_MAX_REG];\r
56 /*------------------------Define local variable------------------------------*/\r
57 \r
58 /*-----------------------------------------------------------------------------\r
59  * Function:    PHY_RF6052SetBandwidth()\r
60  *\r
61  * Overview:    This function is called by SetBWModeCallback8190Pci() only\r
62  *\r
63  * Input:       PADAPTER                                Adapter\r
64  *                      WIRELESS_BANDWIDTH_E    Bandwidth       //20M or 40M\r
65  *\r
66  * Output:      NONE\r
67  *\r
68  * Return:      NONE\r
69  *\r
70  * Note:                For RF type 0222D\r
71  *---------------------------------------------------------------------------*/\r
72 VOID\r
73 PHY_RF6052SetBandwidth8723B(\r
74         IN      PADAPTER                                Adapter,\r
75         IN      CHANNEL_WIDTH           Bandwidth)      //20M or 40M\r
76 {\r
77         HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);\r
78 \r
79         switch(Bandwidth)\r
80         {\r
81                 case CHANNEL_WIDTH_20:\r
82                         pHalData->RfRegChnlVal[0] = ((pHalData->RfRegChnlVal[0] & 0xfffff3ff) | BIT10 | BIT11 );\r
83                         PHY_SetRFReg(Adapter, ODM_RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask, pHalData->RfRegChnlVal[0]);\r
84                         PHY_SetRFReg(Adapter, ODM_RF_PATH_B, RF_CHNLBW, bRFRegOffsetMask, pHalData->RfRegChnlVal[0]);\r
85                         break;\r
86 \r
87                 case CHANNEL_WIDTH_40:\r
88                         pHalData->RfRegChnlVal[0] = ((pHalData->RfRegChnlVal[0] & 0xfffff3ff) | BIT10 );\r
89                         PHY_SetRFReg(Adapter, ODM_RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask, pHalData->RfRegChnlVal[0]);\r
90                         PHY_SetRFReg(Adapter, ODM_RF_PATH_B, RF_CHNLBW, bRFRegOffsetMask, pHalData->RfRegChnlVal[0]);\r
91                         break;\r
92 \r
93                 default:\r
94                         //RT_TRACE(COMP_DBG, DBG_LOUD, ("PHY_SetRF8225Bandwidth(): unknown Bandwidth: %#X\n",Bandwidth ));\r
95                         break;\r
96         }\r
97 \r
98 }\r
99 \r
100 static VOID\r
101 phy_RF6052_Config_HardCode(\r
102         IN      PADAPTER                Adapter\r
103         )\r
104 {\r
105 \r
106         // Set Default Bandwidth to 20M\r
107         //Adapter->HalFunc      .SetBWModeHandler(Adapter, CHANNEL_WIDTH_20);\r
108 \r
109         // TODO: Set Default Channel to channel one for RTL8225\r
110 \r
111 }\r
112 \r
113 static int\r
114 phy_RF6052_Config_ParaFile(\r
115         IN      PADAPTER                Adapter\r
116         )\r
117 {\r
118         u32                                     u4RegValue=0;\r
119         u8                                      eRFPath;\r
120         BB_REGISTER_DEFINITION_T        *pPhyReg;\r
121 \r
122         int                                     rtStatus = _SUCCESS;\r
123         HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(Adapter);\r
124 \r
125         static char                     sz8723RadioAFile[] = RTL8723B_PHY_RADIO_A;\r
126         static char                     sz8723RadioBFile[] = RTL8723B_PHY_RADIO_B;\r
127         static s1Byte                   sz8723BTxPwrTrackFile[] = RTL8723B_TXPWR_TRACK; \r
128         char                                    *pszRadioAFile, *pszRadioBFile, *pszTxPwrTrackFile;\r
129 \r
130         pszRadioAFile = sz8723RadioAFile;\r
131         pszRadioBFile = sz8723RadioBFile;\r
132         pszTxPwrTrackFile = sz8723BTxPwrTrackFile;\r
133 \r
134         //3//-----------------------------------------------------------------\r
135         //3// <2> Initialize RF\r
136         //3//-----------------------------------------------------------------\r
137         //for(eRFPath = RF_PATH_A; eRFPath <pHalData->NumTotalRFPath; eRFPath++)\r
138         for(eRFPath = 0; eRFPath <pHalData->NumTotalRFPath; eRFPath++)\r
139         {\r
140 \r
141                 pPhyReg = &pHalData->PHYRegDef[eRFPath];\r
142 \r
143                 /*----Store original RFENV control type----*/\r
144                 switch(eRFPath)\r
145                 {\r
146                 case RF_PATH_A:\r
147                 case RF_PATH_C:\r
148                         u4RegValue = PHY_QueryBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV);\r
149                         break;\r
150                 case RF_PATH_B :\r
151                 case RF_PATH_D:\r
152                         u4RegValue = PHY_QueryBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV<<16);\r
153                         break;\r
154                 }\r
155 \r
156                 /*----Set RF_ENV enable----*/\r
157                 PHY_SetBBReg(Adapter, pPhyReg->rfintfe, bRFSI_RFENV<<16, 0x1);\r
158                 rtw_udelay_os(1);//PlatformStallExecution(1);\r
159 \r
160                 /*----Set RF_ENV output high----*/\r
161                 PHY_SetBBReg(Adapter, pPhyReg->rfintfo, bRFSI_RFENV, 0x1);\r
162                 rtw_udelay_os(1);//PlatformStallExecution(1);\r
163 \r
164                 /* Set bit number of Address and Data for RF register */\r
165                 PHY_SetBBReg(Adapter, pPhyReg->rfHSSIPara2, b3WireAddressLength, 0x0);  // Set 1 to 4 bits for 8255\r
166                 rtw_udelay_os(1);//PlatformStallExecution(1);\r
167 \r
168                 PHY_SetBBReg(Adapter, pPhyReg->rfHSSIPara2, b3WireDataLength, 0x0);     // Set 0 to 12  bits for 8255\r
169                 rtw_udelay_os(1);//PlatformStallExecution(1);\r
170 \r
171                 /*----Initialize RF fom connfiguration file----*/\r
172                 switch(eRFPath)\r
173                 {\r
174                 case RF_PATH_A:\r
175 #ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE\r
176                         if (PHY_ConfigRFWithParaFile(Adapter, pszRadioAFile, eRFPath) == _FAIL)\r
177 #endif\r
178                         {\r
179 #ifdef CONFIG_EMBEDDED_FWIMG\r
180                                 if(HAL_STATUS_FAILURE ==ODM_ConfigRFWithHeaderFile(&pHalData->odmpriv,CONFIG_RF_RADIO, (ODM_RF_RADIO_PATH_E)eRFPath))\r
181                                         rtStatus = _FAIL;\r
182 #endif\r
183                         }\r
184                         break;\r
185                 case RF_PATH_B:\r
186 #ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE\r
187                         if (PHY_ConfigRFWithParaFile(Adapter, pszRadioBFile, eRFPath) == _FAIL)\r
188 #endif\r
189                         {\r
190 #ifdef CONFIG_EMBEDDED_FWIMG\r
191                                 if(HAL_STATUS_FAILURE ==ODM_ConfigRFWithHeaderFile(&pHalData->odmpriv,CONFIG_RF_RADIO, (ODM_RF_RADIO_PATH_E)eRFPath))\r
192                                         rtStatus = _FAIL;\r
193 #endif\r
194                         }\r
195                         break;\r
196                 case RF_PATH_C:\r
197                         break;\r
198                 case RF_PATH_D:\r
199                         break;\r
200                 }\r
201 \r
202                 /*----Restore RFENV control type----*/;\r
203                 switch(eRFPath)\r
204                 {\r
205                 case RF_PATH_A:\r
206                 case RF_PATH_C:\r
207                         PHY_SetBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV, u4RegValue);\r
208                         break;\r
209                 case RF_PATH_B :\r
210                 case RF_PATH_D:\r
211                         PHY_SetBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV<<16, u4RegValue);\r
212                         break;\r
213                 }\r
214 \r
215                 if(rtStatus != _SUCCESS){\r
216                         //RT_TRACE(COMP_FPGA, DBG_LOUD, ("phy_RF6052_Config_ParaFile():Radio[%d] Fail!!", eRFPath));\r
217                         goto phy_RF6052_Config_ParaFile_Fail;\r
218                 }\r
219 \r
220         }\r
221 \r
222         //3 -----------------------------------------------------------------\r
223         //3 Configuration of Tx Power Tracking \r
224         //3 -----------------------------------------------------------------\r
225         \r
226 #ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE\r
227         if (PHY_ConfigRFWithTxPwrTrackParaFile(Adapter, pszTxPwrTrackFile) == _FAIL)\r
228 #endif\r
229         {\r
230 #ifdef CONFIG_EMBEDDED_FWIMG\r
231                 ODM_ConfigRFWithTxPwrTrackHeaderFile(&pHalData->odmpriv);\r
232 #endif\r
233         }\r
234         \r
235         //RT_TRACE(COMP_INIT, DBG_LOUD, ("<---phy_RF6052_Config_ParaFile()\n"));\r
236         return rtStatus;\r
237 \r
238 phy_RF6052_Config_ParaFile_Fail:\r
239         return rtStatus;\r
240 }\r
241 \r
242 \r
243 int\r
244 PHY_RF6052_Config8723B(\r
245         IN      PADAPTER                Adapter)\r
246 {\r
247         HAL_DATA_TYPE                           *pHalData = GET_HAL_DATA(Adapter);\r
248         int                                     rtStatus = _SUCCESS;\r
249 \r
250         //\r
251         // Initialize general global value\r
252         //\r
253         // TODO: Extend RF_PATH_C and RF_PATH_D in the future\r
254         if(pHalData->rf_type == RF_1T1R)\r
255                 pHalData->NumTotalRFPath = 1;\r
256         else\r
257                 pHalData->NumTotalRFPath = 2;\r
258 \r
259         //\r
260         // Config BB and RF\r
261         //\r
262         rtStatus = phy_RF6052_Config_ParaFile(Adapter);\r
263         return rtStatus;\r
264 \r
265 }\r
266 \r
267 /* End of HalRf6052.c */\r
268 \r