GNU Linux-libre 4.14.265-gnu1
[releases.git] / drivers / staging / rtlwifi / phydm / phydm_powertracking_ce.c
1 /******************************************************************************
2  *
3  * Copyright(c) 2007 - 2016  Realtek Corporation.
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  * The full GNU General Public License is included in this distribution in the
15  * file called LICENSE.
16  *
17  * Contact Information:
18  * wlanfae <wlanfae@realtek.com>
19  * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
20  * Hsinchu 300, Taiwan.
21  *
22  * Larry Finger <Larry.Finger@lwfinger.net>
23  *
24  *****************************************************************************/
25
26 /*============================================================  */
27 /* include files                                                */
28 /*============================================================  */
29 #include "mp_precomp.h"
30 #include "phydm_precomp.h"
31
32 /* ************************************************************
33  * Global var
34  * *************************************************************/
35
36 u32 ofdm_swing_table[OFDM_TABLE_SIZE] = {
37         0x7f8001fe, /* 0, +6.0dB */
38         0x788001e2, /* 1, +5.5dB */
39         0x71c001c7, /* 2, +5.0dB*/
40         0x6b8001ae, /* 3, +4.5dB*/
41         0x65400195, /* 4, +4.0dB*/
42         0x5fc0017f, /* 5, +3.5dB*/
43         0x5a400169, /* 6, +3.0dB*/
44         0x55400155, /* 7, +2.5dB*/
45         0x50800142, /* 8, +2.0dB*/
46         0x4c000130, /* 9, +1.5dB*/
47         0x47c0011f, /* 10, +1.0dB*/
48         0x43c0010f, /* 11, +0.5dB*/
49         0x40000100, /* 12, +0dB*/
50         0x3c8000f2, /* 13, -0.5dB*/
51         0x390000e4, /* 14, -1.0dB*/
52         0x35c000d7, /* 15, -1.5dB*/
53         0x32c000cb, /* 16, -2.0dB*/
54         0x300000c0, /* 17, -2.5dB*/
55         0x2d4000b5, /* 18, -3.0dB*/
56         0x2ac000ab, /* 19, -3.5dB*/
57         0x288000a2, /* 20, -4.0dB*/
58         0x26000098, /* 21, -4.5dB*/
59         0x24000090, /* 22, -5.0dB*/
60         0x22000088, /* 23, -5.5dB*/
61         0x20000080, /* 24, -6.0dB*/
62         0x1e400079, /* 25, -6.5dB*/
63         0x1c800072, /* 26, -7.0dB*/
64         0x1b00006c, /* 27. -7.5dB*/
65         0x19800066, /* 28, -8.0dB*/
66         0x18000060, /* 29, -8.5dB*/
67         0x16c0005b, /* 30, -9.0dB*/
68         0x15800056, /* 31, -9.5dB*/
69         0x14400051, /* 32, -10.0dB*/
70         0x1300004c, /* 33, -10.5dB*/
71         0x12000048, /* 34, -11.0dB*/
72         0x11000044, /* 35, -11.5dB*/
73         0x10000040, /* 36, -12.0dB*/
74 };
75
76 u8 cck_swing_table_ch1_ch13[CCK_TABLE_SIZE][8] = {
77         {0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04}, /* 0, +0dB */
78         {0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04}, /* 1, -0.5dB */
79         {0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03}, /* 2, -1.0dB*/
80         {0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03}, /* 3, -1.5dB*/
81         {0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03}, /* 4, -2.0dB */
82         {0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03}, /* 5, -2.5dB*/
83         {0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03}, /* 6, -3.0dB*/
84         {0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03}, /* 7, -3.5dB*/
85         {0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02}, /* 8, -4.0dB */
86         {0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02}, /* 9, -4.5dB*/
87         {0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02}, /* 10, -5.0dB */
88         {0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02}, /* 11, -5.5dB*/
89         {0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04,
90          0x02}, /* 12, -6.0dB <== default */
91         {0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02}, /* 13, -6.5dB*/
92         {0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02}, /* 14, -7.0dB */
93         {0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02}, /* 15, -7.5dB*/
94         {0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01}, /* 16, -8.0dB */
95         {0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02}, /* 17, -8.5dB*/
96         {0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01}, /* 18, -9.0dB */
97         {0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, /* 19, -9.5dB*/
98         {0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, /* 20, -10.0dB*/
99         {0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01}, /* 21, -10.5dB*/
100         {0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01}, /* 22, -11.0dB*/
101         {0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01}, /* 23, -11.5dB*/
102         {0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01}, /* 24, -12.0dB*/
103         {0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01}, /* 25, -12.5dB*/
104         {0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01}, /* 26, -13.0dB*/
105         {0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01}, /* 27, -13.5dB*/
106         {0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01}, /* 28, -14.0dB*/
107         {0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01}, /* 29, -14.5dB*/
108         {0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01}, /* 30, -15.0dB*/
109         {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01}, /* 31, -15.5dB*/
110         {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01} /* 32, -16.0dB*/
111 };
112
113 u8 cck_swing_table_ch14[CCK_TABLE_SIZE][8] = {
114         {0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00}, /* 0, +0dB */
115         {0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00}, /* 1, -0.5dB */
116         {0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00}, /* 2, -1.0dB */
117         {0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00}, /* 3, -1.5dB*/
118         {0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00}, /* 4, -2.0dB */
119         {0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00}, /* 5, -2.5dB*/
120         {0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00}, /* 6, -3.0dB */
121         {0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00}, /* 7, -3.5dB */
122         {0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00}, /* 8, -4.0dB */
123         {0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00}, /* 9, -4.5dB*/
124         {0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00}, /* 10, -5.0dB */
125         {0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, /* 11, -5.5dB*/
126         {0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00,
127          0x00}, /* 12, -6.0dB  <== default*/
128         {0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00}, /* 13, -6.5dB */
129         {0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00}, /* 14, -7.0dB */
130         {0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00}, /* 15, -7.5dB*/
131         {0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00}, /* 16, -8.0dB */
132         {0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00}, /* 17, -8.5dB*/
133         {0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00}, /* 18, -9.0dB */
134         {0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, /* 19, -9.5dB*/
135         {0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, /* 20, -10.0dB*/
136         {0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00}, /* 21, -10.5dB*/
137         {0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00}, /* 22, -11.0dB*/
138         {0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, /* 23, -11.5dB*/
139         {0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, /* 24, -12.0dB*/
140         {0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 25, -12.5dB*/
141         {0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 26, -13.0dB*/
142         {0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 27, -13.5dB*/
143         {0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 28, -14.0dB*/
144         {0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 29, -14.5dB*/
145         {0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 30, -15.0dB*/
146         {0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 31, -15.5dB*/
147         {0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00} /* 32, -16.0dB*/
148 };
149
150 u32 ofdm_swing_table_new[OFDM_TABLE_SIZE] = {
151         0x0b40002d, /* 0,  -15.0dB      */
152         0x0c000030, /* 1,  -14.5dB*/
153         0x0cc00033, /* 2,  -14.0dB*/
154         0x0d800036, /* 3,  -13.5dB*/
155         0x0e400039, /* 4,  -13.0dB */
156         0x0f00003c, /* 5,  -12.5dB*/
157         0x10000040, /* 6,  -12.0dB*/
158         0x11000044, /* 7,  -11.5dB*/
159         0x12000048, /* 8,  -11.0dB*/
160         0x1300004c, /* 9,  -10.5dB*/
161         0x14400051, /* 10, -10.0dB*/
162         0x15800056, /* 11, -9.5dB*/
163         0x16c0005b, /* 12, -9.0dB*/
164         0x18000060, /* 13, -8.5dB*/
165         0x19800066, /* 14, -8.0dB*/
166         0x1b00006c, /* 15, -7.5dB*/
167         0x1c800072, /* 16, -7.0dB*/
168         0x1e400079, /* 17, -6.5dB*/
169         0x20000080, /* 18, -6.0dB*/
170         0x22000088, /* 19, -5.5dB*/
171         0x24000090, /* 20, -5.0dB*/
172         0x26000098, /* 21, -4.5dB*/
173         0x288000a2, /* 22, -4.0dB*/
174         0x2ac000ab, /* 23, -3.5dB*/
175         0x2d4000b5, /* 24, -3.0dB*/
176         0x300000c0, /* 25, -2.5dB*/
177         0x32c000cb, /* 26, -2.0dB*/
178         0x35c000d7, /* 27, -1.5dB*/
179         0x390000e4, /* 28, -1.0dB*/
180         0x3c8000f2, /* 29, -0.5dB*/
181         0x40000100, /* 30, +0dB*/
182         0x43c0010f, /* 31, +0.5dB*/
183         0x47c0011f, /* 32, +1.0dB*/
184         0x4c000130, /* 33, +1.5dB*/
185         0x50800142, /* 34, +2.0dB*/
186         0x55400155, /* 35, +2.5dB*/
187         0x5a400169, /* 36, +3.0dB*/
188         0x5fc0017f, /* 37, +3.5dB*/
189         0x65400195, /* 38, +4.0dB*/
190         0x6b8001ae, /* 39, +4.5dB*/
191         0x71c001c7, /* 40, +5.0dB*/
192         0x788001e2, /* 41, +5.5dB*/
193         0x7f8001fe /* 42, +6.0dB*/
194 };
195
196 u8 cck_swing_table_ch1_ch14_88f[CCK_TABLE_SIZE_88F][16] = {
197         {0x44, 0x42, 0x3C, 0x33, 0x28, 0x1C, 0x13, 0x0B, 0x05, 0x02, 0x00, 0x00,
198          0x00, 0x00, 0x00, 0x00}, /*-16dB*/
199         {0x48, 0x46, 0x3F, 0x36, 0x2A, 0x1E, 0x14, 0x0B, 0x05, 0x02, 0x00, 0x00,
200          0x00, 0x00, 0x00, 0x00}, /*-15.5dB*/
201         {0x4D, 0x4A, 0x43, 0x39, 0x2C, 0x20, 0x15, 0x0C, 0x06, 0x02, 0x00, 0x00,
202          0x00, 0x00, 0x00, 0x00}, /*-15dB*/
203         {0x51, 0x4F, 0x47, 0x3C, 0x2F, 0x22, 0x16, 0x0D, 0x06, 0x02, 0x00, 0x00,
204          0x00, 0x00, 0x00, 0x00}, /*-14.5dB*/
205         {0x56, 0x53, 0x4B, 0x40, 0x32, 0x24, 0x17, 0x0E, 0x06, 0x02, 0x00, 0x00,
206          0x00, 0x00, 0x00, 0x00}, /*-14dB*/
207         {0x5B, 0x58, 0x50, 0x43, 0x35, 0x26, 0x19, 0x0E, 0x07, 0x02, 0x00, 0x00,
208          0x00, 0x00, 0x00, 0x00}, /*-13.5dB*/
209         {0x60, 0x5D, 0x54, 0x47, 0x38, 0x28, 0x1A, 0x0F, 0x07, 0x02, 0x00, 0x00,
210          0x00, 0x00, 0x00, 0x00}, /*-13dB*/
211         {0x66, 0x63, 0x59, 0x4C, 0x3B, 0x2B, 0x1C, 0x10, 0x08, 0x02, 0x00, 0x00,
212          0x00, 0x00, 0x00, 0x00}, /*-12.5dB*/
213         {0x6C, 0x69, 0x5F, 0x50, 0x3F, 0x2D, 0x1E, 0x11, 0x08, 0x03, 0x00, 0x00,
214          0x00, 0x00, 0x00, 0x00}, /*-12dB*/
215         {0x73, 0x6F, 0x64, 0x55, 0x42, 0x30, 0x1F, 0x12, 0x08, 0x03, 0x00, 0x00,
216          0x00, 0x00, 0x00, 0x00}, /*-11.5dB*/
217         {0x79, 0x76, 0x6A, 0x5A, 0x46, 0x33, 0x21, 0x13, 0x09, 0x03, 0x00, 0x00,
218          0x00, 0x00, 0x00, 0x00}, /*-11dB*/
219         {0x81, 0x7C, 0x71, 0x5F, 0x4A, 0x36, 0x23, 0x14, 0x0A, 0x03, 0x00, 0x00,
220          0x00, 0x00, 0x00, 0x00}, /*-10.5dB*/
221         {0x88, 0x84, 0x77, 0x65, 0x4F, 0x39, 0x25, 0x15, 0x0A, 0x03, 0x00, 0x00,
222          0x00, 0x00, 0x00, 0x00}, /*-10dB*/
223         {0x90, 0x8C, 0x7E, 0x6B, 0x54, 0x3C, 0x27, 0x17, 0x0B, 0x03, 0x00, 0x00,
224          0x00, 0x00, 0x00, 0x00}, /*-9.5dB*/
225         {0x99, 0x94, 0x86, 0x71, 0x58, 0x40, 0x2A, 0x18, 0x0B, 0x04, 0x00, 0x00,
226          0x00, 0x00, 0x00, 0x00}, /*-9dB*/
227         {0xA2, 0x9D, 0x8E, 0x78, 0x5E, 0x43, 0x2C, 0x19, 0x0C, 0x04, 0x00, 0x00,
228          0x00, 0x00, 0x00, 0x00}, /*-8.5dB*/
229         {0xAC, 0xA6, 0x96, 0x7F, 0x63, 0x47, 0x2F, 0x1B, 0x0D, 0x04, 0x00, 0x00,
230          0x00, 0x00, 0x00, 0x00}, /*-8dB*/
231         {0xB6, 0xB0, 0x9F, 0x87, 0x69, 0x4C, 0x32, 0x1D, 0x0D, 0x04, 0x00, 0x00,
232          0x00, 0x00, 0x00, 0x00}, /*-7.5dB*/
233         {0xC1, 0xBA, 0xA8, 0x8F, 0x6F, 0x50, 0x35, 0x1E, 0x0E, 0x04, 0x00, 0x00,
234          0x00, 0x00, 0x00, 0x00}, /*-7dB*/
235         {0xCC, 0xC5, 0xB2, 0x97, 0x76, 0x55, 0x38, 0x20, 0x0F, 0x05, 0x00, 0x00,
236          0x00, 0x00, 0x00, 0x00}, /*-6.5dB*/
237         {0xD8, 0xD1, 0xBD, 0xA0, 0x7D, 0x5A, 0x3B, 0x22, 0x10, 0x05, 0x00, 0x00,
238          0x00, 0x00, 0x00, 0x00} /*-6dB*/
239 };
240
241 u8 cck_swing_table_ch1_ch13_88f[CCK_TABLE_SIZE_88F][16] = {
242         {0x44, 0x42, 0x3C, 0x33, 0x28, 0x1C, 0x13, 0x0B, 0x05, 0x02, 0x00, 0x00,
243          0x00, 0x00, 0x00, 0x00}, /*-16dB*/
244         {0x48, 0x46, 0x3F, 0x36, 0x2A, 0x1E, 0x14, 0x0B, 0x05, 0x02, 0x00, 0x00,
245          0x00, 0x00, 0x00, 0x00}, /*-15.5dB*/
246         {0x4D, 0x4A, 0x43, 0x39, 0x2C, 0x20, 0x15, 0x0C, 0x06, 0x02, 0x00, 0x00,
247          0x00, 0x00, 0x00, 0x00}, /*-15dB*/
248         {0x51, 0x4F, 0x47, 0x3C, 0x2F, 0x22, 0x16, 0x0D, 0x06, 0x02, 0x00, 0x00,
249          0x00, 0x00, 0x00, 0x00}, /*-14.5dB*/
250         {0x56, 0x53, 0x4B, 0x40, 0x32, 0x24, 0x17, 0x0E, 0x06, 0x02, 0x00, 0x00,
251          0x00, 0x00, 0x00, 0x00}, /*-14dB*/
252         {0x5B, 0x58, 0x50, 0x43, 0x35, 0x26, 0x19, 0x0E, 0x07, 0x02, 0x00, 0x00,
253          0x00, 0x00, 0x00, 0x00}, /*-13.5dB*/
254         {0x60, 0x5D, 0x54, 0x47, 0x38, 0x28, 0x1A, 0x0F, 0x07, 0x02, 0x00, 0x00,
255          0x00, 0x00, 0x00, 0x00}, /*-13dB*/
256         {0x66, 0x63, 0x59, 0x4C, 0x3B, 0x2B, 0x1C, 0x10, 0x08, 0x02, 0x00, 0x00,
257          0x00, 0x00, 0x00, 0x00}, /*-12.5dB*/
258         {0x6C, 0x69, 0x5F, 0x50, 0x3F, 0x2D, 0x1E, 0x11, 0x08, 0x03, 0x00, 0x00,
259          0x00, 0x00, 0x00, 0x00}, /*-12dB*/
260         {0x73, 0x6F, 0x64, 0x55, 0x42, 0x30, 0x1F, 0x12, 0x08, 0x03, 0x00, 0x00,
261          0x00, 0x00, 0x00, 0x00}, /*-11.5dB*/
262         {0x79, 0x76, 0x6A, 0x5A, 0x46, 0x33, 0x21, 0x13, 0x09, 0x03, 0x00, 0x00,
263          0x00, 0x00, 0x00, 0x00}, /*-11dB*/
264         {0x81, 0x7C, 0x71, 0x5F, 0x4A, 0x36, 0x23, 0x14, 0x0A, 0x03, 0x00, 0x00,
265          0x00, 0x00, 0x00, 0x00}, /*-10.5dB*/
266         {0x88, 0x84, 0x77, 0x65, 0x4F, 0x39, 0x25, 0x15, 0x0A, 0x03, 0x00, 0x00,
267          0x00, 0x00, 0x00, 0x00}, /*-10dB*/
268         {0x90, 0x8C, 0x7E, 0x6B, 0x54, 0x3C, 0x27, 0x17, 0x0B, 0x03, 0x00, 0x00,
269          0x00, 0x00, 0x00, 0x00}, /*-9.5dB*/
270         {0x99, 0x94, 0x86, 0x71, 0x58, 0x40, 0x2A, 0x18, 0x0B, 0x04, 0x00, 0x00,
271          0x00, 0x00, 0x00, 0x00}, /*-9dB*/
272         {0xA2, 0x9D, 0x8E, 0x78, 0x5E, 0x43, 0x2C, 0x19, 0x0C, 0x04, 0x00, 0x00,
273          0x00, 0x00, 0x00, 0x00}, /*-8.5dB*/
274         {0xAC, 0xA6, 0x96, 0x7F, 0x63, 0x47, 0x2F, 0x1B, 0x0D, 0x04, 0x00, 0x00,
275          0x00, 0x00, 0x00, 0x00}, /*-8dB*/
276         {0xB6, 0xB0, 0x9F, 0x87, 0x69, 0x4C, 0x32, 0x1D, 0x0D, 0x04, 0x00, 0x00,
277          0x00, 0x00, 0x00, 0x00}, /*-7.5dB*/
278         {0xC1, 0xBA, 0xA8, 0x8F, 0x6F, 0x50, 0x35, 0x1E, 0x0E, 0x04, 0x00, 0x00,
279          0x00, 0x00, 0x00, 0x00}, /*-7dB*/
280         {0xCC, 0xC5, 0xB2, 0x97, 0x76, 0x55, 0x38, 0x20, 0x0F, 0x05, 0x00, 0x00,
281          0x00, 0x00, 0x00, 0x00}, /*-6.5dB*/
282         {0xD8, 0xD1, 0xBD, 0xA0, 0x7D, 0x5A, 0x3B, 0x22, 0x10, 0x05, 0x00, 0x00,
283          0x00, 0x00, 0x00, 0x00} /*-6dB*/
284 };
285
286 u8 cck_swing_table_ch14_88f[CCK_TABLE_SIZE_88F][16] = {
287         {0x44, 0x42, 0x3C, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
288          0x00, 0x00, 0x00, 0x00}, /*-16dB*/
289         {0x48, 0x46, 0x3F, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
290          0x00, 0x00, 0x00, 0x00}, /*-15.5dB*/
291         {0x4D, 0x4A, 0x43, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
292          0x00, 0x00, 0x00, 0x00}, /*-15dB*/
293         {0x51, 0x4F, 0x47, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
294          0x00, 0x00, 0x00, 0x00}, /*-14.5dB*/
295         {0x56, 0x53, 0x4B, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
296          0x00, 0x00, 0x00, 0x00}, /*-14dB*/
297         {0x5B, 0x58, 0x50, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
298          0x00, 0x00, 0x00, 0x00}, /*-13.5dB*/
299         {0x60, 0x5D, 0x54, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
300          0x00, 0x00, 0x00, 0x00}, /*-13dB*/
301         {0x66, 0x63, 0x59, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
302          0x00, 0x00, 0x00, 0x00}, /*-12.5dB*/
303         {0x6C, 0x69, 0x5F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
304          0x00, 0x00, 0x00, 0x00}, /*-12dB*/
305         {0x73, 0x6F, 0x64, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
306          0x00, 0x00, 0x00, 0x00}, /*-11.5dB*/
307         {0x79, 0x76, 0x6A, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
308          0x00, 0x00, 0x00, 0x00}, /*-11dB*/
309         {0x81, 0x7C, 0x71, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
310          0x00, 0x00, 0x00, 0x00}, /*-10.5dB*/
311         {0x88, 0x84, 0x77, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
312          0x00, 0x00, 0x00, 0x00}, /*-10dB*/
313         {0x90, 0x8C, 0x7E, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
314          0x00, 0x00, 0x00, 0x00}, /*-9.5dB*/
315         {0x99, 0x94, 0x86, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
316          0x00, 0x00, 0x00, 0x00}, /*-9dB*/
317         {0xA2, 0x9D, 0x8E, 0x5E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
318          0x00, 0x00, 0x00, 0x00}, /*-8.5dB*/
319         {0xAC, 0xA6, 0x96, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
320          0x00, 0x00, 0x00, 0x00}, /*-8dB*/
321         {0xB6, 0xB0, 0x9F, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
322          0x00, 0x00, 0x00, 0x00}, /*-7.5dB*/
323         {0xC1, 0xBA, 0xA8, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
324          0x00, 0x00, 0x00, 0x00}, /*-7dB*/
325         {0xCC, 0xC5, 0xB2, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
326          0x00, 0x00, 0x00, 0x00}, /*-6.5dB*/
327         {0xD8, 0xD1, 0xBD, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
328          0x00, 0x00, 0x00, 0x00} /*-6dB*/
329 };
330
331 u8 cck_swing_table_ch1_ch13_new[CCK_TABLE_SIZE][8] = {
332         {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01}, /*  0, -16.0dB*/
333         {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01}, /*   1, -15.5dB*/
334         {0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01}, /*  2, -15.0dB*/
335         {0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01}, /*   3, -14.5dB*/
336         {0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01}, /*   4, -14.0dB*/
337         {0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01}, /*   5, -13.5dB*/
338         {0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01}, /*   6, -13.0dB*/
339         {0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01}, /*   7, -12.5dB*/
340         {0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01}, /*  8, -12.0dB*/
341         {0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01}, /*   9, -11.5dB*/
342         {0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01}, /*  10, -11.0dB*/
343         {0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01}, /*  11, -10.5dB*/
344         {0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, /*  12, -10.0dB*/
345         {0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, /*  13, -9.5dB*/
346         {0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01}, /*  14, -9.0dB */
347         {0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02}, /*  15, -8.5dB*/
348         {0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01}, /*  16, -8.0dB */
349         {0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02}, /*  17, -7.5dB*/
350         {0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02}, /*  18, -7.0dB */
351         {0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02}, /*  19, -6.5dB*/
352         {0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02}, /*20, -6.0dB */
353         {0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02}, /*  21, -5.5dB*/
354         {0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02}, /* 22, -5.0dB */
355         {0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02}, /*  23, -4.5dB*/
356         {0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02}, /*  24, -4.0dB */
357         {0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03}, /*  25, -3.5dB*/
358         {0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03}, /*  26, -3.0dB*/
359         {0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03}, /*  27, -2.5dB*/
360         {0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03}, /*  28, -2.0dB */
361         {0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03}, /*  29, -1.5dB*/
362         {0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03}, /*  30, -1.0dB*/
363         {0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04}, /*  31, -0.5dB*/
364         {0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04} /*  32, +0dB*/
365 };
366
367 u8 cck_swing_table_ch14_new[CCK_TABLE_SIZE][8] = {
368         {0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00}, /*  0, -16.0dB*/
369         {0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 1, -15.5dB*/
370         {0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, /*  2, -15.0dB*/
371         {0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 3, -14.5dB*/
372         {0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, /*  4, -14.0dB*/
373         {0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, /*5, -13.5dB*/
374         {0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 6, -13.0dB*/
375         {0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00}, /*  7, -12.5dB*/
376         {0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, /* 8, -12.0dB*/
377         {0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, /* 9, -11.5dB*/
378         {0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00}, /* 10, -11.0dB*/
379         {0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00}, /*11, -10.5dB*/
380         {0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, /* 12, -10.0dB*/
381         {0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, /* 13, -9.5dB*/
382         {0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00}, /*14, -9.0dB */
383         {0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00}, /* 15, -8.5dB*/
384         {0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00}, /* 16, -8.0dB */
385         {0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00}, /* 17, -7.5dB*/
386         {0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00}, /* 18, -7.0dB */
387         {0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00}, /* 19, -6.5dB */
388         {0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00}, /* 20, -6.0dB */
389         {0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, /* 21, -5.5dB*/
390         {0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00}, /* 22, -5.0dB */
391         {0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00}, /*23, -4.5dB*/
392         {0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00}, /* 24, -4.0dB */
393         {0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00}, /* 25, -3.5dB */
394         {0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00}, /* 26, -3.0dB */
395         {0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00}, /*27, -2.5dB*/
396         {0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00}, /* 28, -2.0dB */
397         {0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00}, /*29, -1.5dB*/
398         {0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00}, /* 30, -1.0dB */
399         {0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00}, /* 31, -0.5dB */
400         {0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00} /* 32, +0dB    */
401 };
402
403 u32 cck_swing_table_ch1_ch14_8723d[CCK_TABLE_SIZE_8723D] = {
404         0x0CD, /*0 ,    -20dB*/
405         0x0D9, 0x0E6, 0x0F3, 0x102, 0x111, 0x121, 0x132, 0x144, 0x158, 0x16C,
406         0x182, 0x198, 0x1B1, 0x1CA, 0x1E5, 0x202, 0x221, 0x241, 0x263, 0x287,
407         0x2AE, 0x2D6, 0x301, 0x32F, 0x35F, 0x392, 0x3C9, 0x402, 0x43F, 0x47F,
408         0x4C3, 0x50C, 0x558, 0x5A9, 0x5FF, 0x65A, 0x6BA, 0x720, 0x78C, 0x7FF,
409 };
410
411 /* JJ ADD 20161014 */
412 u32 cck_swing_table_ch1_ch14_8710b[CCK_TABLE_SIZE_8710B] = {
413         0x0CD, /*0 ,    -20dB*/
414         0x0D9, 0x0E6, 0x0F3, 0x102, 0x111, 0x121, 0x132, 0x144, 0x158, 0x16C,
415         0x182, 0x198, 0x1B1, 0x1CA, 0x1E5, 0x202, 0x221, 0x241, 0x263, 0x287,
416         0x2AE, 0x2D6, 0x301, 0x32F, 0x35F, 0x392, 0x3C9, 0x402, 0x43F, 0x47F,
417         0x4C3, 0x50C, 0x558, 0x5A9, 0x5FF, 0x65A, 0x6BA, 0x720, 0x78C, 0x7FF,
418 };
419
420 u32 tx_scaling_table_jaguar[TXSCALE_TABLE_SIZE] = {
421         0x081, /* 0,  -12.0dB*/
422         0x088, /* 1,  -11.5dB*/
423         0x090, /* 2,  -11.0dB*/
424         0x099, /* 3,  -10.5dB*/
425         0x0A2, /* 4,  -10.0dB*/
426         0x0AC, /* 5,  -9.5dB*/
427         0x0B6, /* 6,  -9.0dB*/
428         0x0C0, /*7,  -8.5dB*/
429         0x0CC, /* 8,  -8.0dB*/
430         0x0D8, /* 9,  -7.5dB*/
431         0x0E5, /* 10, -7.0dB*/
432         0x0F2, /* 11, -6.5dB*/
433         0x101, /* 12, -6.0dB*/
434         0x110, /* 13, -5.5dB*/
435         0x120, /* 14, -5.0dB*/
436         0x131, /* 15, -4.5dB*/
437         0x143, /* 16, -4.0dB*/
438         0x156, /* 17, -3.5dB*/
439         0x16A, /* 18, -3.0dB*/
440         0x180, /* 19, -2.5dB*/
441         0x197, /* 20, -2.0dB*/
442         0x1AF, /* 21, -1.5dB*/
443         0x1C8, /* 22, -1.0dB*/
444         0x1E3, /* 23, -0.5dB*/
445         0x200, /* 24, +0  dB*/
446         0x21E, /* 25, +0.5dB*/
447         0x23E, /* 26, +1.0dB*/
448         0x261, /* 27, +1.5dB*/
449         0x285, /* 28, +2.0dB*/
450         0x2AB, /* 29, +2.5dB*/
451         0x2D3, /*30, +3.0dB*/
452         0x2FE, /* 31, +3.5dB*/
453         0x32B, /* 32, +4.0dB*/
454         0x35C, /* 33, +4.5dB*/
455         0x38E, /* 34, +5.0dB*/
456         0x3C4, /* 35, +5.5dB*/
457         0x3FE /* 36, +6.0dB     */
458 };
459
460 void odm_txpowertracking_init(void *dm_void)
461 {
462         struct phy_dm_struct *dm = (struct phy_dm_struct *)dm_void;
463
464         odm_txpowertracking_thermal_meter_init(dm);
465 }
466
467 static u8 get_swing_index(void *dm_void)
468 {
469         struct phy_dm_struct *dm = (struct phy_dm_struct *)dm_void;
470         u8 i = 0;
471         u32 bb_swing;
472         u32 swing_table_size;
473         u32 *swing_table;
474
475         if (dm->support_ic_type == ODM_RTL8188E ||
476             dm->support_ic_type == ODM_RTL8723B ||
477             dm->support_ic_type == ODM_RTL8192E ||
478             dm->support_ic_type == ODM_RTL8188F ||
479             dm->support_ic_type == ODM_RTL8703B) {
480                 bb_swing = odm_get_bb_reg(dm, REG_OFDM_0_XA_TX_IQ_IMBALANCE,
481                                           0xFFC00000);
482
483                 swing_table = ofdm_swing_table_new;
484                 swing_table_size = OFDM_TABLE_SIZE;
485         } else {
486                 {
487                         bb_swing = 0;
488                         swing_table = ofdm_swing_table;
489                         swing_table_size = OFDM_TABLE_SIZE;
490                 }
491         }
492
493         for (i = 0; i < swing_table_size; ++i) {
494                 u32 table_value = swing_table[i];
495
496                 if (table_value >= 0x100000)
497                         table_value >>= 22;
498                 if (bb_swing == table_value)
499                         break;
500         }
501         return i;
502 }
503
504 void odm_txpowertracking_thermal_meter_init(void *dm_void)
505 {
506         struct phy_dm_struct *dm = (struct phy_dm_struct *)dm_void;
507         u8 default_swing_index = get_swing_index(dm);
508         u8 p = 0;
509         struct dm_rf_calibration_struct *cali_info = &dm->rf_calibrate_info;
510         struct rtl_priv *rtlpriv = (struct rtl_priv *)dm->adapter;
511         struct rtl_efuse *rtlefu = rtl_efuse(rtlpriv);
512
513         cali_info->is_txpowertracking = true;
514         cali_info->tx_powercount = 0;
515         cali_info->is_txpowertracking_init = false;
516
517         if (!dm->mp_mode)
518                 cali_info->txpowertrack_control = true;
519         else
520                 cali_info->txpowertrack_control = false;
521
522         if (!dm->mp_mode)
523                 cali_info->txpowertrack_control = true;
524
525         ODM_RT_TRACE(dm, ODM_COMP_CALIBRATION, "dm txpowertrack_control = %d\n",
526                      cali_info->txpowertrack_control);
527
528         /* dm->rf_calibrate_info.txpowertrack_control = true; */
529         cali_info->thermal_value = rtlefu->eeprom_thermalmeter;
530         cali_info->thermal_value_iqk = rtlefu->eeprom_thermalmeter;
531         cali_info->thermal_value_lck = rtlefu->eeprom_thermalmeter;
532
533         if (!cali_info->default_bb_swing_index_flag) {
534                 /*The index of "0 dB" in SwingTable.*/
535                 if (dm->support_ic_type == ODM_RTL8188E ||
536                     dm->support_ic_type == ODM_RTL8723B ||
537                     dm->support_ic_type == ODM_RTL8192E ||
538                     dm->support_ic_type == ODM_RTL8703B) {
539                         cali_info->default_ofdm_index =
540                                 (default_swing_index >= OFDM_TABLE_SIZE) ?
541                                         30 :
542                                         default_swing_index;
543                         cali_info->default_cck_index = 20;
544                 } else if (dm->support_ic_type ==
545                            ODM_RTL8188F) { /*add by Mingzhi.Guo  2015-03-23*/
546                         cali_info->default_ofdm_index = 28; /*OFDM: -1dB*/
547                         cali_info->default_cck_index = 20; /*CCK:-6dB*/
548                 } else if (dm->support_ic_type ==
549                            ODM_RTL8723D) { /*add by zhaohe  2015-10-27*/
550                         cali_info->default_ofdm_index = 28; /*OFDM: -1dB*/
551                         cali_info->default_cck_index = 28; /*CCK:   -6dB*/
552                 } else if (dm->support_ic_type ==
553                            ODM_RTL8710B) { /* JJ ADD 20161014 */
554                         cali_info->default_ofdm_index = 28; /*OFDM: -1dB*/
555                         cali_info->default_cck_index = 28; /*CCK:   -6dB*/
556                 } else {
557                         cali_info->default_ofdm_index =
558                                 (default_swing_index >= TXSCALE_TABLE_SIZE) ?
559                                         24 :
560                                         default_swing_index;
561                         cali_info->default_cck_index = 24;
562                 }
563                 cali_info->default_bb_swing_index_flag = true;
564         }
565
566         cali_info->bb_swing_idx_cck_base = cali_info->default_cck_index;
567         cali_info->CCK_index = cali_info->default_cck_index;
568
569         for (p = ODM_RF_PATH_A; p < MAX_RF_PATH; ++p) {
570                 cali_info->bb_swing_idx_ofdm_base[p] =
571                         cali_info->default_ofdm_index;
572                 cali_info->OFDM_index[p] = cali_info->default_ofdm_index;
573                 cali_info->delta_power_index[p] = 0;
574                 cali_info->delta_power_index_last[p] = 0;
575                 cali_info->power_index_offset[p] = 0;
576         }
577         cali_info->modify_tx_agc_value_ofdm = 0;
578         cali_info->modify_tx_agc_value_cck = 0;
579 }
580
581 void odm_txpowertracking_check(void *dm_void)
582 {
583         /* 2011/09/29 MH In HW integration first stage, we provide 4 different
584          * handle to operate at the same time.
585          * In the stage2/3, we need to prive universal interface and merge all
586          * HW dynamic mechanism.
587          */
588         struct phy_dm_struct *dm = (struct phy_dm_struct *)dm_void;
589
590         switch (dm->support_platform) {
591         case ODM_WIN:
592                 odm_txpowertracking_check_mp(dm);
593                 break;
594
595         case ODM_CE:
596                 odm_txpowertracking_check_ce(dm);
597                 break;
598
599         case ODM_AP:
600                 odm_txpowertracking_check_ap(dm);
601                 break;
602
603         default:
604                 break;
605         }
606 }
607
608 void odm_txpowertracking_check_ce(void *dm_void)
609 {
610         struct phy_dm_struct *dm = (struct phy_dm_struct *)dm_void;
611         void *adapter = dm->adapter;
612
613         if (!(dm->support_ability & ODM_RF_TX_PWR_TRACK))
614                 return;
615
616         if (!dm->rf_calibrate_info.tm_trigger) {
617                 if (IS_HARDWARE_TYPE_8188E(adapter) ||
618                     IS_HARDWARE_TYPE_8188F(adapter) ||
619                     IS_HARDWARE_TYPE_8192E(adapter) ||
620                     IS_HARDWARE_TYPE_8723B(adapter) ||
621                     IS_HARDWARE_TYPE_JAGUAR(adapter) ||
622                     IS_HARDWARE_TYPE_8814A(adapter) ||
623                     IS_HARDWARE_TYPE_8703B(adapter) ||
624                     IS_HARDWARE_TYPE_8723D(adapter) ||
625                     IS_HARDWARE_TYPE_8822B(adapter) ||
626                     IS_HARDWARE_TYPE_8821C(adapter) ||
627                     (dm->support_ic_type == ODM_RTL8710B)) /* JJ ADD 20161014 */
628                         odm_set_rf_reg(dm, ODM_RF_PATH_A, RF_T_METER_NEW,
629                                        (BIT(17) | BIT(16)), 0x03);
630                 else
631                         odm_set_rf_reg(dm, ODM_RF_PATH_A, RF_T_METER_OLD,
632                                        RFREGOFFSETMASK, 0x60);
633
634                 dm->rf_calibrate_info.tm_trigger = 1;
635                 return;
636         }
637
638         odm_txpowertracking_callback_thermal_meter(dm);
639         dm->rf_calibrate_info.tm_trigger = 0;
640 }
641
642 void odm_txpowertracking_check_mp(void *dm_void) {}
643
644 void odm_txpowertracking_check_ap(void *dm_void) {}