]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/staging/rtl8188eu/hal/odm_RegConfig8188E.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi...
[karo-tx-linux.git] / drivers / staging / rtl8188eu / hal / odm_RegConfig8188E.c
1 /******************************************************************************
2  *
3  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of version 2 of the GNU General Public License as
7  * published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12  * more details.
13  *
14  * You should have received a copy of the GNU General Public License along with
15  * this program; if not, write to the Free Software Foundation, Inc.,
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17  *
18  *
19  ******************************************************************************/
20
21 #include "odm_precomp.h"
22
23 void odm_ConfigRFReg_8188E(struct odm_dm_struct *pDM_Odm, u32 Addr,
24                            u32 Data, enum ODM_RF_RADIO_PATH RF_PATH,
25                            u32 RegAddr)
26 {
27     if (Addr == 0xffe) {
28                 ODM_sleep_ms(50);
29         } else if (Addr == 0xfd) {
30                 ODM_delay_ms(5);
31         } else if (Addr == 0xfc) {
32                 ODM_delay_ms(1);
33         } else if (Addr == 0xfb) {
34                 ODM_delay_us(50);
35         } else if (Addr == 0xfa) {
36                 ODM_delay_us(5);
37         } else if (Addr == 0xf9) {
38                 ODM_delay_us(1);
39         } else {
40                 ODM_SetRFReg(pDM_Odm, RF_PATH, RegAddr, bRFRegOffsetMask, Data);
41                 /*  Add 1us delay between BB/RF register setting. */
42                 ODM_delay_us(1);
43         }
44 }
45
46 void odm_ConfigRF_RadioA_8188E(struct odm_dm_struct *pDM_Odm, u32 Addr, u32 Data)
47 {
48         u32  content = 0x1000; /*  RF_Content: radioa_txt */
49         u32 maskforPhySet = (u32)(content&0xE000);
50
51         odm_ConfigRFReg_8188E(pDM_Odm, Addr, Data, ODM_RF_PATH_A, Addr|maskforPhySet);
52         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ConfigRFWithHeaderFile: [RadioA] %08X %08X\n", Addr, Data));
53 }
54
55 void odm_ConfigRF_RadioB_8188E(struct odm_dm_struct *pDM_Odm, u32 Addr, u32 Data)
56 {
57         u32  content = 0x1001; /*  RF_Content: radiob_txt */
58         u32 maskforPhySet = (u32)(content&0xE000);
59
60         odm_ConfigRFReg_8188E(pDM_Odm, Addr, Data, ODM_RF_PATH_B, Addr|maskforPhySet);
61
62         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ConfigRFWithHeaderFile: [RadioB] %08X %08X\n", Addr, Data));
63 }
64
65 void odm_ConfigMAC_8188E(struct odm_dm_struct *pDM_Odm, u32 Addr, u8 Data)
66 {
67         ODM_Write1Byte(pDM_Odm, Addr, Data);
68         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ConfigMACWithHeaderFile: [MAC_REG] %08X %08X\n", Addr, Data));
69 }
70
71 void odm_ConfigBB_AGC_8188E(struct odm_dm_struct *pDM_Odm, u32 Addr, u32 Bitmask, u32 Data)
72 {
73         ODM_SetBBReg(pDM_Odm, Addr, Bitmask, Data);
74         /*  Add 1us delay between BB/RF register setting. */
75         ODM_delay_us(1);
76
77         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE,
78                      ("===> ODM_ConfigBBWithHeaderFile: [AGC_TAB] %08X %08X\n",
79                      Addr, Data));
80 }
81
82 void odm_ConfigBB_PHY_REG_PG_8188E(struct odm_dm_struct *pDM_Odm, u32 Addr,
83                                    u32 Bitmask, u32 Data)
84 {
85         if (Addr == 0xfe) {
86                 ODM_sleep_ms(50);
87         } else if (Addr == 0xfd) {
88                 ODM_delay_ms(5);
89         } else if (Addr == 0xfc) {
90                 ODM_delay_ms(1);
91         } else if (Addr == 0xfb) {
92                 ODM_delay_us(50);
93         } else if (Addr == 0xfa) {
94                 ODM_delay_us(5);
95         } else if (Addr == 0xf9) {
96                 ODM_delay_us(1);
97         } else{
98                 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD,
99                              ("===> @@@@@@@ ODM_ConfigBBWithHeaderFile: [PHY_REG] %08X %08X %08X\n",
100                              Addr, Bitmask, Data));
101                 storePwrIndexDiffRateOffset(pDM_Odm->Adapter, Addr, Bitmask, Data);
102         }
103 }
104
105 void odm_ConfigBB_PHY_8188E(struct odm_dm_struct *pDM_Odm, u32 Addr, u32 Bitmask, u32 Data)
106 {
107         if (Addr == 0xfe) {
108                 ODM_sleep_ms(50);
109         } else if (Addr == 0xfd) {
110                 ODM_delay_ms(5);
111         } else if (Addr == 0xfc) {
112                 ODM_delay_ms(1);
113         } else if (Addr == 0xfb) {
114                 ODM_delay_us(50);
115         } else if (Addr == 0xfa) {
116                 ODM_delay_us(5);
117         } else if (Addr == 0xf9) {
118                 ODM_delay_us(1);
119         } else {
120                 if (Addr == 0xa24)
121                         pDM_Odm->RFCalibrateInfo.RegA24 = Data;
122                 ODM_SetBBReg(pDM_Odm, Addr, Bitmask, Data);
123
124                 /*  Add 1us delay between BB/RF register setting. */
125                 ODM_delay_us(1);
126                 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE,
127                              ("===> ODM_ConfigBBWithHeaderFile: [PHY_REG] %08X %08X\n",
128                              Addr, Data));
129         }
130 }