GNU Linux-libre 5.10.215-gnu1
[releases.git] / drivers / staging / rtl8723bs / hal / rtl8723b_rf6052.c
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         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
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 */