net: wireless: rockchip: add rtl8822be pcie wifi driver
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8822be / hal / phydm / phydm_dynamicbbpowersaving.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 // include files\r
23 //============================================================\r
24 #include "mp_precomp.h"\r
25 #include "phydm_precomp.h"\r
26 \r
27 VOID \r
28 odm_DynamicBBPowerSavingInit(\r
29         IN              PVOID                                   pDM_VOID\r
30         )\r
31 {\r
32         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
33         pPS_T   pDM_PSTable = &pDM_Odm->DM_PSTable;\r
34 \r
35         pDM_PSTable->PreCCAState = CCA_MAX;\r
36         pDM_PSTable->CurCCAState = CCA_MAX;\r
37         pDM_PSTable->PreRFState = RF_MAX;\r
38         pDM_PSTable->CurRFState = RF_MAX;\r
39         pDM_PSTable->Rssi_val_min = 0;\r
40         pDM_PSTable->initialize = 0;\r
41 }\r
42 \r
43 void\r
44 ODM_RF_Saving(\r
45         IN              PVOID                                   pDM_VOID,\r
46         IN      u1Byte          bForceInNormal \r
47         )\r
48 {\r
49         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
50 #if (DM_ODM_SUPPORT_TYPE != ODM_AP)\r
51         pPS_T   pDM_PSTable = &pDM_Odm->DM_PSTable;\r
52         u1Byte  Rssi_Up_bound = 30 ;\r
53         u1Byte  Rssi_Low_bound = 25;\r
54 #if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
55         if(pDM_Odm->PatchID == 40 ) //RT_CID_819x_FUNAI_TV\r
56         {\r
57                 Rssi_Up_bound = 50 ;\r
58                 Rssi_Low_bound = 45;\r
59         }\r
60 #endif\r
61         if(pDM_PSTable->initialize == 0){\r
62                 \r
63                 pDM_PSTable->Reg874 = (ODM_GetBBReg(pDM_Odm, 0x874, bMaskDWord)&0x1CC000)>>14;\r
64                 pDM_PSTable->RegC70 = (ODM_GetBBReg(pDM_Odm, 0xc70, bMaskDWord)&BIT3)>>3;\r
65                 pDM_PSTable->Reg85C = (ODM_GetBBReg(pDM_Odm, 0x85c, bMaskDWord)&0xFF000000)>>24;\r
66                 pDM_PSTable->RegA74 = (ODM_GetBBReg(pDM_Odm, 0xa74, bMaskDWord)&0xF000)>>12;\r
67                 //Reg818 = PHY_QueryBBReg(pAdapter, 0x818, bMaskDWord);\r
68                 pDM_PSTable->initialize = 1;\r
69         }\r
70 \r
71         if(!bForceInNormal)\r
72         {\r
73                 if(pDM_Odm->RSSI_Min != 0xFF)\r
74                 {                        \r
75                         if(pDM_PSTable->PreRFState == RF_Normal)\r
76                         {\r
77                                 if(pDM_Odm->RSSI_Min >= Rssi_Up_bound)\r
78                                         pDM_PSTable->CurRFState = RF_Save;\r
79                                 else\r
80                                         pDM_PSTable->CurRFState = RF_Normal;\r
81                         }\r
82                         else{\r
83                                 if(pDM_Odm->RSSI_Min <= Rssi_Low_bound)\r
84                                         pDM_PSTable->CurRFState = RF_Normal;\r
85                                 else\r
86                                         pDM_PSTable->CurRFState = RF_Save;\r
87                         }\r
88                 }\r
89                 else\r
90                         pDM_PSTable->CurRFState=RF_MAX;\r
91         }\r
92         else\r
93         {\r
94                 pDM_PSTable->CurRFState = RF_Normal;\r
95         }\r
96         \r
97         if(pDM_PSTable->PreRFState != pDM_PSTable->CurRFState)\r
98         {\r
99                 if(pDM_PSTable->CurRFState == RF_Save)\r
100                 {\r
101                         ODM_SetBBReg(pDM_Odm, 0x874  , 0x1C0000, 0x2); //Reg874[20:18]=3'b010\r
102                         ODM_SetBBReg(pDM_Odm, 0xc70, BIT3, 0); //RegC70[3]=1'b0\r
103                         ODM_SetBBReg(pDM_Odm, 0x85c, 0xFF000000, 0x63); //Reg85C[31:24]=0x63\r
104                         ODM_SetBBReg(pDM_Odm, 0x874, 0xC000, 0x2); //Reg874[15:14]=2'b10\r
105                         ODM_SetBBReg(pDM_Odm, 0xa74, 0xF000, 0x3); //RegA75[7:4]=0x3\r
106                         ODM_SetBBReg(pDM_Odm, 0x818, BIT28, 0x0); //Reg818[28]=1'b0\r
107                         ODM_SetBBReg(pDM_Odm, 0x818, BIT28, 0x1); //Reg818[28]=1'b1\r
108                 }\r
109                 else\r
110                 {\r
111                         ODM_SetBBReg(pDM_Odm, 0x874  , 0x1CC000, pDM_PSTable->Reg874); \r
112                         ODM_SetBBReg(pDM_Odm, 0xc70, BIT3, pDM_PSTable->RegC70); \r
113                         ODM_SetBBReg(pDM_Odm, 0x85c, 0xFF000000, pDM_PSTable->Reg85C);\r
114                         ODM_SetBBReg(pDM_Odm, 0xa74, 0xF000, pDM_PSTable->RegA74); \r
115                         ODM_SetBBReg(pDM_Odm,0x818, BIT28, 0x0);  \r
116                 }\r
117                 pDM_PSTable->PreRFState =pDM_PSTable->CurRFState;\r
118         }\r
119 #endif  \r
120 }\r
121 \r