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 *---------------------------------------------------------------------------*/
PHY_RF6052SetBandwidth8723B(struct adapter * Adapter,enum CHANNEL_WIDTH Bandwidth)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
phy_RF6052_Config_ParaFile(struct adapter * Adapter)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
PHY_RF6052_Config8723B(struct adapter * Adapter)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