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 
odm_txpowertracking_init(void * dm_void)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 
get_swing_index(void * dm_void)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 
odm_txpowertracking_thermal_meter_init(void * dm_void)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 
odm_txpowertracking_check(void * dm_void)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 
odm_txpowertracking_check_ce(void * dm_void)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 
odm_txpowertracking_check_mp(void * dm_void)631 void odm_txpowertracking_check_mp(void *dm_void) {}
632 
odm_txpowertracking_check_ap(void * dm_void)633 void odm_txpowertracking_check_ap(void *dm_void) {}
634