1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#include "odm_precomp.h"
17
18void odm_ConfigRFReg_8723B(
19 PDM_ODM_T pDM_Odm,
20 u32 Addr,
21 u32 Data,
22 ODM_RF_RADIO_PATH_E RF_PATH,
23 u32 RegAddr
24)
25{
26 if (Addr == 0xfe || Addr == 0xffe)
27 msleep(50);
28 else {
29 PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH, RegAddr, bRFRegOffsetMask, Data);
30
31 udelay(1);
32
33
34 if (Addr == 0xb6) {
35 u32 getvalue = 0;
36 u8 count = 0;
37
38 getvalue = PHY_QueryRFReg(
39 pDM_Odm->Adapter, RF_PATH, Addr, bMaskDWord
40 );
41
42 udelay(1);
43
44 while ((getvalue>>8) != (Data>>8)) {
45 count++;
46 PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH, RegAddr, bRFRegOffsetMask, Data);
47 udelay(1);
48 getvalue = PHY_QueryRFReg(pDM_Odm->Adapter, RF_PATH, Addr, bMaskDWord);
49 ODM_RT_TRACE(
50 pDM_Odm,
51 ODM_COMP_INIT,
52 ODM_DBG_TRACE,
53 (
54 "===> ODM_ConfigRFWithHeaderFile: [B6] getvalue 0x%x, Data 0x%x, count %d\n",
55 getvalue,
56 Data,
57 count
58 )
59 );
60 if (count > 5)
61 break;
62 }
63 }
64
65 if (Addr == 0xb2) {
66 u32 getvalue = 0;
67 u8 count = 0;
68
69 getvalue = PHY_QueryRFReg(
70 pDM_Odm->Adapter, RF_PATH, Addr, bMaskDWord
71 );
72
73 udelay(1);
74
75 while (getvalue != Data) {
76 count++;
77 PHY_SetRFReg(
78 pDM_Odm->Adapter,
79 RF_PATH,
80 RegAddr,
81 bRFRegOffsetMask,
82 Data
83 );
84 udelay(1);
85
86 PHY_SetRFReg(
87 pDM_Odm->Adapter,
88 RF_PATH,
89 0x18,
90 bRFRegOffsetMask,
91 0x0fc07
92 );
93 udelay(1);
94 getvalue = PHY_QueryRFReg(
95 pDM_Odm->Adapter, RF_PATH, Addr, bMaskDWord
96 );
97 ODM_RT_TRACE(
98 pDM_Odm,
99 ODM_COMP_INIT,
100 ODM_DBG_TRACE,
101 (
102 "===> ODM_ConfigRFWithHeaderFile: [B2] getvalue 0x%x, Data 0x%x, count %d\n",
103 getvalue,
104 Data,
105 count
106 )
107 );
108
109 if (count > 5)
110 break;
111 }
112 }
113 }
114}
115
116
117void odm_ConfigRF_RadioA_8723B(PDM_ODM_T pDM_Odm, u32 Addr, u32 Data)
118{
119 u32 content = 0x1000;
120 u32 maskforPhySet = (u32)(content&0xE000);
121
122 odm_ConfigRFReg_8723B(
123 pDM_Odm,
124 Addr,
125 Data,
126 ODM_RF_PATH_A,
127 Addr|maskforPhySet
128 );
129
130 ODM_RT_TRACE(
131 pDM_Odm,
132 ODM_COMP_INIT,
133 ODM_DBG_TRACE,
134 (
135 "===> ODM_ConfigRFWithHeaderFile: [RadioA] %08X %08X\n",
136 Addr,
137 Data
138 )
139 );
140}
141
142void odm_ConfigMAC_8723B(PDM_ODM_T pDM_Odm, u32 Addr, u8 Data)
143{
144 rtw_write8(pDM_Odm->Adapter, Addr, Data);
145 ODM_RT_TRACE(
146 pDM_Odm,
147 ODM_COMP_INIT,
148 ODM_DBG_TRACE,
149 (
150 "===> ODM_ConfigMACWithHeaderFile: [MAC_REG] %08X %08X\n",
151 Addr,
152 Data
153 )
154 );
155}
156
157void odm_ConfigBB_AGC_8723B(
158 PDM_ODM_T pDM_Odm,
159 u32 Addr,
160 u32 Bitmask,
161 u32 Data
162)
163{
164 PHY_SetBBReg(pDM_Odm->Adapter, Addr, Bitmask, Data);
165
166 udelay(1);
167
168 ODM_RT_TRACE(
169 pDM_Odm,
170 ODM_COMP_INIT,
171 ODM_DBG_TRACE,
172 (
173 "===> ODM_ConfigBBWithHeaderFile: [AGC_TAB] %08X %08X\n",
174 Addr,
175 Data
176 )
177 );
178}
179
180void odm_ConfigBB_PHY_REG_PG_8723B(
181 PDM_ODM_T pDM_Odm,
182 u32 Band,
183 u32 RfPath,
184 u32 TxNum,
185 u32 Addr,
186 u32 Bitmask,
187 u32 Data
188)
189{
190 if (Addr == 0xfe || Addr == 0xffe)
191 msleep(50);
192 else {
193 PHY_StoreTxPowerByRate(pDM_Odm->Adapter, Band, RfPath, TxNum, Addr, Bitmask, Data);
194 }
195 ODM_RT_TRACE(
196 pDM_Odm,
197 ODM_COMP_INIT,
198 ODM_DBG_LOUD,
199 (
200 "===> ODM_ConfigBBWithHeaderFile: [PHY_REG] %08X %08X %08X\n",
201 Addr,
202 Bitmask,
203 Data
204 )
205 );
206}
207
208void odm_ConfigBB_PHY_8723B(
209 PDM_ODM_T pDM_Odm,
210 u32 Addr,
211 u32 Bitmask,
212 u32 Data
213)
214{
215 if (Addr == 0xfe)
216 msleep(50);
217 else if (Addr == 0xfd)
218 mdelay(5);
219 else if (Addr == 0xfc)
220 mdelay(1);
221 else if (Addr == 0xfb)
222 udelay(50);
223 else if (Addr == 0xfa)
224 udelay(5);
225 else if (Addr == 0xf9)
226 udelay(1);
227 else {
228 PHY_SetBBReg(pDM_Odm->Adapter, Addr, Bitmask, Data);
229 }
230
231
232 udelay(1);
233 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ConfigBBWithHeaderFile: [PHY_REG] %08X %08X\n", Addr, Data));
234}
235
236void odm_ConfigBB_TXPWR_LMT_8723B(
237 PDM_ODM_T pDM_Odm,
238 u8 *Regulation,
239 u8 *Band,
240 u8 *Bandwidth,
241 u8 *RateSection,
242 u8 *RfPath,
243 u8 *Channel,
244 u8 *PowerLimit
245)
246{
247 PHY_SetTxPowerLimit(
248 pDM_Odm->Adapter,
249 Regulation,
250 Band,
251 Bandwidth,
252 RateSection,
253 RfPath,
254 Channel,
255 PowerLimit
256 );
257}
258