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