Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v2.6.30 2683 lines 100 kB view raw
1#include "sysdef.h" 2#include "wbhal_f.h" 3 4/////////////////////////////////////////////////////////////////////////////////////////////////// 5// Original Phy.h 6//***************************************************************************** 7 8/***************************************************************************** 9; For MAXIM2825/6/7 Ver. 331 or more 10; Edited by Tiger, Sep-17-2003 11; revised by Ben, Sep-18-2003 12 130x00 0x000a2 140x01 0x21cc0 15;0x02 0x13802 160x02 0x1383a 17 18;channe1 01 ; 0x03 0x30142 ; 0x04 0x0b333; 19;channe1 02 ;0x03 0x32141 ;0x04 0x08444; 20;channe1 03 ;0x03 0x32143 ;0x04 0x0aeee; 21;channe1 04 ;0x03 0x32142 ;0x04 0x0b333; 22;channe1 05 ;0x03 0x31141 ;0x04 0x08444; 23;channe1 06 ; 240x03 0x31143; 250x04 0x0aeee; 26;channe1 07 ;0x03 0x31142 ;0x04 0x0b333; 27;channe1 08 ;0x03 0x33141 ;0x04 0x08444; 28;channe1 09 ;0x03 0x33143 ;0x04 0x0aeee; 29;channe1 10 ;0x03 0x33142 ;0x04 0x0b333; 30;channe1 11 ;0x03 0x30941 ;0x04 0x08444; 31;channe1 12 ;0x03 0x30943 ;0x04 0x0aeee; 32;channe1 13 ;0x03 0x30942 ;0x04 0x0b333; 33 340x05 0x28986 350x06 0x18008 360x07 0x38400 370x08 0x05100; 100 Hz DC 38;0x08 0x05900; 30 KHz DC 390x09 0x24f08 400x0a 0x17e00, 0x17ea0 410x0b 0x37d80 420x0c 0x0c900 // 0x0ca00 (lager power 9db than 0x0c000), 0x0c000 43*****************************************************************************/ 44// MAX2825 (pure b/g) 45u32 max2825_rf_data[] = 46{ 47 (0x00<<18)|0x000a2, 48 (0x01<<18)|0x21cc0, 49 (0x02<<18)|0x13806, 50 (0x03<<18)|0x30142, 51 (0x04<<18)|0x0b333, 52 (0x05<<18)|0x289A6, 53 (0x06<<18)|0x18008, 54 (0x07<<18)|0x38000, 55 (0x08<<18)|0x05100, 56 (0x09<<18)|0x24f08, 57 (0x0A<<18)|0x14000, 58 (0x0B<<18)|0x37d80, 59 (0x0C<<18)|0x0c100 // 11a: 0x0c300, 11g: 0x0c100 60}; 61 62u32 max2825_channel_data_24[][3] = 63{ 64 {(0x03<<18)|0x30142, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 01 65 {(0x03<<18)|0x32141, (0x04<<18)|0x08444, (0x05<<18)|0x289A6}, // channe1 02 66 {(0x03<<18)|0x32143, (0x04<<18)|0x0aeee, (0x05<<18)|0x289A6}, // channe1 03 67 {(0x03<<18)|0x32142, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 04 68 {(0x03<<18)|0x31141, (0x04<<18)|0x08444, (0x05<<18)|0x289A6}, // channe1 05 69 {(0x03<<18)|0x31143, (0x04<<18)|0x0aeee, (0x05<<18)|0x289A6}, // channe1 06 70 {(0x03<<18)|0x31142, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 07 71 {(0x03<<18)|0x33141, (0x04<<18)|0x08444, (0x05<<18)|0x289A6}, // channe1 08 72 {(0x03<<18)|0x33143, (0x04<<18)|0x0aeee, (0x05<<18)|0x289A6}, // channe1 09 73 {(0x03<<18)|0x33142, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 10 74 {(0x03<<18)|0x30941, (0x04<<18)|0x08444, (0x05<<18)|0x289A6}, // channe1 11 75 {(0x03<<18)|0x30943, (0x04<<18)|0x0aeee, (0x05<<18)|0x289A6}, // channe1 12 76 {(0x03<<18)|0x30942, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 13 77 {(0x03<<18)|0x32941, (0x04<<18)|0x09999, (0x05<<18)|0x289A6} // 14 (2484MHz) hhmodify 78}; 79 80u32 max2825_power_data_24[] = {(0x0C<<18)|0x0c000, (0x0C<<18)|0x0c100}; 81 82/****************************************************************************/ 83// MAX2827 (a/b/g) 84u32 max2827_rf_data[] = 85{ 86 (0x00<<18)|0x000a2, 87 (0x01<<18)|0x21cc0, 88 (0x02<<18)|0x13806, 89 (0x03<<18)|0x30142, 90 (0x04<<18)|0x0b333, 91 (0x05<<18)|0x289A6, 92 (0x06<<18)|0x18008, 93 (0x07<<18)|0x38000, 94 (0x08<<18)|0x05100, 95 (0x09<<18)|0x24f08, 96 (0x0A<<18)|0x14000, 97 (0x0B<<18)|0x37d80, 98 (0x0C<<18)|0x0c100 // 11a: 0x0c300, 11g: 0x0c100 99}; 100 101u32 max2827_channel_data_24[][3] = 102{ 103 {(0x03<<18)|0x30142, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 01 104 {(0x03<<18)|0x32141, (0x04<<18)|0x08444, (0x05<<18)|0x289A6}, // channe1 02 105 {(0x03<<18)|0x32143, (0x04<<18)|0x0aeee, (0x05<<18)|0x289A6}, // channe1 03 106 {(0x03<<18)|0x32142, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 04 107 {(0x03<<18)|0x31141, (0x04<<18)|0x08444, (0x05<<18)|0x289A6}, // channe1 05 108 {(0x03<<18)|0x31143, (0x04<<18)|0x0aeee, (0x05<<18)|0x289A6}, // channe1 06 109 {(0x03<<18)|0x31142, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 07 110 {(0x03<<18)|0x33141, (0x04<<18)|0x08444, (0x05<<18)|0x289A6}, // channe1 08 111 {(0x03<<18)|0x33143, (0x04<<18)|0x0aeee, (0x05<<18)|0x289A6}, // channe1 09 112 {(0x03<<18)|0x33142, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 10 113 {(0x03<<18)|0x30941, (0x04<<18)|0x08444, (0x05<<18)|0x289A6}, // channe1 11 114 {(0x03<<18)|0x30943, (0x04<<18)|0x0aeee, (0x05<<18)|0x289A6}, // channe1 12 115 {(0x03<<18)|0x30942, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 13 116 {(0x03<<18)|0x32941, (0x04<<18)|0x09999, (0x05<<18)|0x289A6} // 14 (2484MHz) hhmodify 117}; 118 119u32 max2827_channel_data_50[][3] = 120{ 121 {(0x03<<18)|0x33cc3, (0x04<<18)|0x08ccc, (0x05<<18)|0x2A9A6}, // channel 36 122 {(0x03<<18)|0x302c0, (0x04<<18)|0x08000, (0x05<<18)|0x2A9A6}, // channel 40 123 {(0x03<<18)|0x302c2, (0x04<<18)|0x0b333, (0x05<<18)|0x2A9A6}, // channel 44 124 {(0x03<<18)|0x322c1, (0x04<<18)|0x09999, (0x05<<18)|0x2A9A6}, // channel 48 125 {(0x03<<18)|0x312c1, (0x04<<18)|0x0a666, (0x05<<18)|0x2A9A6}, // channel 52 126 {(0x03<<18)|0x332c3, (0x04<<18)|0x08ccc, (0x05<<18)|0x2A9A6}, // channel 56 127 {(0x03<<18)|0x30ac0, (0x04<<18)|0x08000, (0x05<<18)|0x2A9A6}, // channel 60 128 {(0x03<<18)|0x30ac2, (0x04<<18)|0x0b333, (0x05<<18)|0x2A9A6} // channel 64 129}; 130 131u32 max2827_power_data_24[] = {(0x0C<<18)|0x0C000, (0x0C<<18)|0x0D600, (0x0C<<18)|0x0C100}; 132u32 max2827_power_data_50[] = {(0x0C<<18)|0x0C400, (0x0C<<18)|0x0D500, (0x0C<<18)|0x0C300}; 133 134/****************************************************************************/ 135// MAX2828 (a/b/g) 136u32 max2828_rf_data[] = 137{ 138 (0x00<<18)|0x000a2, 139 (0x01<<18)|0x21cc0, 140 (0x02<<18)|0x13806, 141 (0x03<<18)|0x30142, 142 (0x04<<18)|0x0b333, 143 (0x05<<18)|0x289A6, 144 (0x06<<18)|0x18008, 145 (0x07<<18)|0x38000, 146 (0x08<<18)|0x05100, 147 (0x09<<18)|0x24f08, 148 (0x0A<<18)|0x14000, 149 (0x0B<<18)|0x37d80, 150 (0x0C<<18)|0x0c100 // 11a: 0x0c300, 11g: 0x0c100 151}; 152 153u32 max2828_channel_data_24[][3] = 154{ 155 {(0x03<<18)|0x30142, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 01 156 {(0x03<<18)|0x32141, (0x04<<18)|0x08444, (0x05<<18)|0x289A6}, // channe1 02 157 {(0x03<<18)|0x32143, (0x04<<18)|0x0aeee, (0x05<<18)|0x289A6}, // channe1 03 158 {(0x03<<18)|0x32142, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 04 159 {(0x03<<18)|0x31141, (0x04<<18)|0x08444, (0x05<<18)|0x289A6}, // channe1 05 160 {(0x03<<18)|0x31143, (0x04<<18)|0x0aeee, (0x05<<18)|0x289A6}, // channe1 06 161 {(0x03<<18)|0x31142, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 07 162 {(0x03<<18)|0x33141, (0x04<<18)|0x08444, (0x05<<18)|0x289A6}, // channe1 08 163 {(0x03<<18)|0x33143, (0x04<<18)|0x0aeee, (0x05<<18)|0x289A6}, // channe1 09 164 {(0x03<<18)|0x33142, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 10 165 {(0x03<<18)|0x30941, (0x04<<18)|0x08444, (0x05<<18)|0x289A6}, // channe1 11 166 {(0x03<<18)|0x30943, (0x04<<18)|0x0aeee, (0x05<<18)|0x289A6}, // channe1 12 167 {(0x03<<18)|0x30942, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 13 168 {(0x03<<18)|0x32941, (0x04<<18)|0x09999, (0x05<<18)|0x289A6} // 14 (2484MHz) hhmodify 169}; 170 171u32 max2828_channel_data_50[][3] = 172{ 173 {(0x03<<18)|0x33cc3, (0x04<<18)|0x08ccc, (0x05<<18)|0x289A6}, // channel 36 174 {(0x03<<18)|0x302c0, (0x04<<18)|0x08000, (0x05<<18)|0x289A6}, // channel 40 175 {(0x03<<18)|0x302c2, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channel 44 176 {(0x03<<18)|0x322c1, (0x04<<18)|0x09999, (0x05<<18)|0x289A6}, // channel 48 177 {(0x03<<18)|0x312c1, (0x04<<18)|0x0a666, (0x05<<18)|0x289A6}, // channel 52 178 {(0x03<<18)|0x332c3, (0x04<<18)|0x08ccc, (0x05<<18)|0x289A6}, // channel 56 179 {(0x03<<18)|0x30ac0, (0x04<<18)|0x08000, (0x05<<18)|0x289A6}, // channel 60 180 {(0x03<<18)|0x30ac2, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6} // channel 64 181}; 182 183u32 max2828_power_data_24[] = {(0x0C<<18)|0x0c000, (0x0C<<18)|0x0c100}; 184u32 max2828_power_data_50[] = {(0x0C<<18)|0x0c000, (0x0C<<18)|0x0c100}; 185 186/****************************************************************************/ 187// LA20040728 kevin 188// MAX2829 (a/b/g) 189u32 max2829_rf_data[] = 190{ 191 (0x00<<18)|0x000a2, 192 (0x01<<18)|0x23520, 193 (0x02<<18)|0x13802, 194 (0x03<<18)|0x30142, 195 (0x04<<18)|0x0b333, 196 (0x05<<18)|0x28906, 197 (0x06<<18)|0x18008, 198 (0x07<<18)|0x3B500, 199 (0x08<<18)|0x05100, 200 (0x09<<18)|0x24f08, 201 (0x0A<<18)|0x14000, 202 (0x0B<<18)|0x37d80, 203 (0x0C<<18)|0x0F300 //TXVGA=51, (MAX-6 dB) 204}; 205 206u32 max2829_channel_data_24[][3] = 207{ 208 {(3<<18)|0x30142, (4<<18)|0x0b333, (5<<18)|0x289C6}, // 01 (2412MHz) 209 {(3<<18)|0x32141, (4<<18)|0x08444, (5<<18)|0x289C6}, // 02 (2417MHz) 210 {(3<<18)|0x32143, (4<<18)|0x0aeee, (5<<18)|0x289C6}, // 03 (2422MHz) 211 {(3<<18)|0x32142, (4<<18)|0x0b333, (5<<18)|0x289C6}, // 04 (2427MHz) 212 {(3<<18)|0x31141, (4<<18)|0x08444, (5<<18)|0x289C6}, // 05 (2432MHz) 213 {(3<<18)|0x31143, (4<<18)|0x0aeee, (5<<18)|0x289C6}, // 06 (2437MHz) 214 {(3<<18)|0x31142, (4<<18)|0x0b333, (5<<18)|0x289C6}, // 07 (2442MHz) 215 {(3<<18)|0x33141, (4<<18)|0x08444, (5<<18)|0x289C6}, // 08 (2447MHz) 216 {(3<<18)|0x33143, (4<<18)|0x0aeee, (5<<18)|0x289C6}, // 09 (2452MHz) 217 {(3<<18)|0x33142, (4<<18)|0x0b333, (5<<18)|0x289C6}, // 10 (2457MHz) 218 {(3<<18)|0x30941, (4<<18)|0x08444, (5<<18)|0x289C6}, // 11 (2462MHz) 219 {(3<<18)|0x30943, (4<<18)|0x0aeee, (5<<18)|0x289C6}, // 12 (2467MHz) 220 {(3<<18)|0x30942, (4<<18)|0x0b333, (5<<18)|0x289C6}, // 13 (2472MHz) 221 {(3<<18)|0x32941, (4<<18)|0x09999, (5<<18)|0x289C6}, // 14 (2484MHz) hh-modify 222}; 223 224u32 max2829_channel_data_50[][4] = 225{ 226 {36, (3<<18)|0x33cc3, (4<<18)|0x08ccc, (5<<18)|0x2A946}, // 36 (5.180GHz) 227 {40, (3<<18)|0x302c0, (4<<18)|0x08000, (5<<18)|0x2A946}, // 40 (5.200GHz) 228 {44, (3<<18)|0x302c2, (4<<18)|0x0b333, (5<<18)|0x2A946}, // 44 (5.220GHz) 229 {48, (3<<18)|0x322c1, (4<<18)|0x09999, (5<<18)|0x2A946}, // 48 (5.240GHz) 230 {52, (3<<18)|0x312c1, (4<<18)|0x0a666, (5<<18)|0x2A946}, // 52 (5.260GHz) 231 {56, (3<<18)|0x332c3, (4<<18)|0x08ccc, (5<<18)|0x2A946}, // 56 (5.280GHz) 232 {60, (3<<18)|0x30ac0, (4<<18)|0x08000, (5<<18)|0x2A946}, // 60 (5.300GHz) 233 {64, (3<<18)|0x30ac2, (4<<18)|0x0b333, (5<<18)|0x2A946}, // 64 (5.320GHz) 234 235 {100, (3<<18)|0x30ec0, (4<<18)|0x08000, (5<<18)|0x2A9C6}, // 100 (5.500GHz) 236 {104, (3<<18)|0x30ec2, (4<<18)|0x0b333, (5<<18)|0x2A9C6}, // 104 (5.520GHz) 237 {108, (3<<18)|0x32ec1, (4<<18)|0x09999, (5<<18)|0x2A9C6}, // 108 (5.540GHz) 238 {112, (3<<18)|0x31ec1, (4<<18)|0x0a666, (5<<18)|0x2A9C6}, // 112 (5.560GHz) 239 {116, (3<<18)|0x33ec3, (4<<18)|0x08ccc, (5<<18)|0x2A9C6}, // 116 (5.580GHz) 240 {120, (3<<18)|0x301c0, (4<<18)|0x08000, (5<<18)|0x2A9C6}, // 120 (5.600GHz) 241 {124, (3<<18)|0x301c2, (4<<18)|0x0b333, (5<<18)|0x2A9C6}, // 124 (5.620GHz) 242 {128, (3<<18)|0x321c1, (4<<18)|0x09999, (5<<18)|0x2A9C6}, // 128 (5.640GHz) 243 {132, (3<<18)|0x311c1, (4<<18)|0x0a666, (5<<18)|0x2A9C6}, // 132 (5.660GHz) 244 {136, (3<<18)|0x331c3, (4<<18)|0x08ccc, (5<<18)|0x2A9C6}, // 136 (5.680GHz) 245 {140, (3<<18)|0x309c0, (4<<18)|0x08000, (5<<18)|0x2A9C6}, // 140 (5.700GHz) 246 247 {149, (3<<18)|0x329c2, (4<<18)|0x0b333, (5<<18)|0x2A9C6}, // 149 (5.745GHz) 248 {153, (3<<18)|0x319c1, (4<<18)|0x09999, (5<<18)|0x2A9C6}, // 153 (5.765GHz) 249 {157, (3<<18)|0x339c1, (4<<18)|0x0a666, (5<<18)|0x2A9C6}, // 157 (5.785GHz) 250 {161, (3<<18)|0x305c3, (4<<18)|0x08ccc, (5<<18)|0x2A9C6}, // 161 (5.805GHz) 251 252 // Japan 253 { 184, (3<<18)|0x308c2, (4<<18)|0x0b333, (5<<18)|0x2A946}, // 184 (4.920GHz) 254 { 188, (3<<18)|0x328c1, (4<<18)|0x09999, (5<<18)|0x2A946}, // 188 (4.940GHz) 255 { 192, (3<<18)|0x318c1, (4<<18)|0x0a666, (5<<18)|0x2A946}, // 192 (4.960GHz) 256 { 196, (3<<18)|0x338c3, (4<<18)|0x08ccc, (5<<18)|0x2A946}, // 196 (4.980GHz) 257 { 8, (3<<18)|0x324c1, (4<<18)|0x09999, (5<<18)|0x2A946}, // 8 (5.040GHz) 258 { 12, (3<<18)|0x314c1, (4<<18)|0x0a666, (5<<18)|0x2A946}, // 12 (5.060GHz) 259 { 16, (3<<18)|0x334c3, (4<<18)|0x08ccc, (5<<18)|0x2A946}, // 16 (5.080GHz) 260 { 34, (3<<18)|0x31cc2, (4<<18)|0x0b333, (5<<18)|0x2A946}, // 34 (5.170GHz) 261 { 38, (3<<18)|0x33cc1, (4<<18)|0x09999, (5<<18)|0x2A946}, // 38 (5.190GHz) 262 { 42, (3<<18)|0x302c1, (4<<18)|0x0a666, (5<<18)|0x2A946}, // 42 (5.210GHz) 263 { 46, (3<<18)|0x322c3, (4<<18)|0x08ccc, (5<<18)|0x2A946}, // 46 (5.230GHz) 264}; 265 266/***************************************************************************** 267; For MAXIM2825/6/7 Ver. 317 or less 268; Edited by Tiger, Sep-17-2003 for 2.4Ghz channels 269; Updated by Tiger, Sep-22-2003 for 5.0Ghz channels 270; Corrected by Tiger, Sep-23-2003, for 0x03 and 0x04 of 5.0Ghz channels 271 2720x00 0x00080 2730x01 0x214c0 2740x02 0x13802 275 276;2.4GHz Channels 277;channe1 01 (2.412GHz); 0x03 0x30143 ;0x04 0x0accc 278;channe1 02 (2.417GHz); 0x03 0x32140 ;0x04 0x09111 279;channe1 03 (2.422GHz); 0x03 0x32142 ;0x04 0x0bbbb 280;channe1 04 (2.427GHz); 0x03 0x32143 ;0x04 0x0accc 281;channe1 05 (2.432GHz); 0x03 0x31140 ;0x04 0x09111 282;channe1 06 (2.437GHz); 0x03 0x31142 ;0x04 0x0bbbb 283;channe1 07 (2.442GHz); 0x03 0x31143 ;0x04 0x0accc 284;channe1 08 (2.447GHz); 0x03 0x33140 ;0x04 0x09111 285;channe1 09 (2.452GHz); 0x03 0x33142 ;0x04 0x0bbbb 286;channe1 10 (2.457GHz); 0x03 0x33143 ;0x04 0x0accc 287;channe1 11 (2.462GHz); 0x03 0x30940 ;0x04 0x09111 288;channe1 12 (2.467GHz); 0x03 0x30942 ;0x04 0x0bbbb 289;channe1 13 (2.472GHz); 0x03 0x30943 ;0x04 0x0accc 290 291;5.0Ghz Channels 292;channel 36 (5.180GHz); 0x03 0x33cc0 ;0x04 0x0b333 293;channel 40 (5.200GHz); 0x03 0x302c0 ;0x04 0x08000 294;channel 44 (5.220GHz); 0x03 0x302c2 ;0x04 0x0b333 295;channel 48 (5.240GHz); 0x03 0x322c1 ;0x04 0x09999 296;channel 52 (5.260GHz); 0x03 0x312c1 ;0x04 0x0a666 297;channel 56 (5.280GHz); 0x03 0x332c3 ;0x04 0x08ccc 298;channel 60 (5.300GHz); 0x03 0x30ac0 ;0x04 0x08000 299;channel 64 (5.320GHz); 0x03 0x30ac2 ;0x04 0x08333 300 301;2.4GHz band ;0x05 0x28986; 302;5.0GHz band 3030x05 0x2a986 304 3050x06 0x18008 3060x07 0x38400 3070x08 0x05108 3080x09 0x27ff8 3090x0a 0x14000 3100x0b 0x37f99 3110x0c 0x0c000 312*****************************************************************************/ 313u32 maxim_317_rf_data[] = 314{ 315 (0x00<<18)|0x000a2, 316 (0x01<<18)|0x214c0, 317 (0x02<<18)|0x13802, 318 (0x03<<18)|0x30143, 319 (0x04<<18)|0x0accc, 320 (0x05<<18)|0x28986, 321 (0x06<<18)|0x18008, 322 (0x07<<18)|0x38400, 323 (0x08<<18)|0x05108, 324 (0x09<<18)|0x27ff8, 325 (0x0A<<18)|0x14000, 326 (0x0B<<18)|0x37f99, 327 (0x0C<<18)|0x0c000 328}; 329 330u32 maxim_317_channel_data_24[][3] = 331{ 332 {(0x03<<18)|0x30143, (0x04<<18)|0x0accc, (0x05<<18)|0x28986}, // channe1 01 333 {(0x03<<18)|0x32140, (0x04<<18)|0x09111, (0x05<<18)|0x28986}, // channe1 02 334 {(0x03<<18)|0x32142, (0x04<<18)|0x0bbbb, (0x05<<18)|0x28986}, // channe1 03 335 {(0x03<<18)|0x32143, (0x04<<18)|0x0accc, (0x05<<18)|0x28986}, // channe1 04 336 {(0x03<<18)|0x31140, (0x04<<18)|0x09111, (0x05<<18)|0x28986}, // channe1 05 337 {(0x03<<18)|0x31142, (0x04<<18)|0x0bbbb, (0x05<<18)|0x28986}, // channe1 06 338 {(0x03<<18)|0x31143, (0x04<<18)|0x0accc, (0x05<<18)|0x28986}, // channe1 07 339 {(0x03<<18)|0x33140, (0x04<<18)|0x09111, (0x05<<18)|0x28986}, // channe1 08 340 {(0x03<<18)|0x33142, (0x04<<18)|0x0bbbb, (0x05<<18)|0x28986}, // channe1 09 341 {(0x03<<18)|0x33143, (0x04<<18)|0x0accc, (0x05<<18)|0x28986}, // channe1 10 342 {(0x03<<18)|0x30940, (0x04<<18)|0x09111, (0x05<<18)|0x28986}, // channe1 11 343 {(0x03<<18)|0x30942, (0x04<<18)|0x0bbbb, (0x05<<18)|0x28986}, // channe1 12 344 {(0x03<<18)|0x30943, (0x04<<18)|0x0accc, (0x05<<18)|0x28986} // channe1 13 345}; 346 347u32 maxim_317_channel_data_50[][3] = 348{ 349 {(0x03<<18)|0x33cc0, (0x04<<18)|0x0b333, (0x05<<18)|0x2a986}, // channel 36 350 {(0x03<<18)|0x302c0, (0x04<<18)|0x08000, (0x05<<18)|0x2a986}, // channel 40 351 {(0x03<<18)|0x302c3, (0x04<<18)|0x0accc, (0x05<<18)|0x2a986}, // channel 44 352 {(0x03<<18)|0x322c1, (0x04<<18)|0x09666, (0x05<<18)|0x2a986}, // channel 48 353 {(0x03<<18)|0x312c2, (0x04<<18)|0x09999, (0x05<<18)|0x2a986}, // channel 52 354 {(0x03<<18)|0x332c0, (0x04<<18)|0x0b333, (0x05<<18)|0x2a99e}, // channel 56 355 {(0x03<<18)|0x30ac0, (0x04<<18)|0x08000, (0x05<<18)|0x2a99e}, // channel 60 356 {(0x03<<18)|0x30ac3, (0x04<<18)|0x0accc, (0x05<<18)|0x2a99e} // channel 64 357}; 358 359u32 maxim_317_power_data_24[] = {(0x0C<<18)|0x0c000, (0x0C<<18)|0x0c100}; 360u32 maxim_317_power_data_50[] = {(0x0C<<18)|0x0c000, (0x0C<<18)|0x0c100}; 361 362/***************************************************************************** 363;;AL2230 MP (Mass Production Version) 364;;RF Registers Setting for Airoha AL2230 silicon after June 1st, 2004 365;;Updated by Tiger Huang (June 1st, 2004) 366;;20-bit length and LSB first 367 368;;Ch01 (2412MHz) ;0x00 0x09EFC ;0x01 0x8CCCC; 369;;Ch02 (2417MHz) ;0x00 0x09EFC ;0x01 0x8CCCD; 370;;Ch03 (2422MHz) ;0x00 0x09E7C ;0x01 0x8CCCC; 371;;Ch04 (2427MHz) ;0x00 0x09E7C ;0x01 0x8CCCD; 372;;Ch05 (2432MHz) ;0x00 0x05EFC ;0x01 0x8CCCC; 373;;Ch06 (2437MHz) ;0x00 0x05EFC ;0x01 0x8CCCD; 374;;Ch07 (2442MHz) ;0x00 0x05E7C ;0x01 0x8CCCC; 375;;Ch08 (2447MHz) ;0x00 0x05E7C ;0x01 0x8CCCD; 376;;Ch09 (2452MHz) ;0x00 0x0DEFC ;0x01 0x8CCCC; 377;;Ch10 (2457MHz) ;0x00 0x0DEFC ;0x01 0x8CCCD; 378;;Ch11 (2462MHz) ;0x00 0x0DE7C ;0x01 0x8CCCC; 379;;Ch12 (2467MHz) ;0x00 0x0DE7C ;0x01 0x8CCCD; 380;;Ch13 (2472MHz) ;0x00 0x03EFC ;0x01 0x8CCCC; 381;;Ch14 (2484Mhz) ;0x00 0x03E7C ;0x01 0x86666; 382 3830x02 0x401D8; RXDCOC BW 100Hz for RXHP low 384;;0x02 0x481DC; RXDCOC BW 30Khz for RXHP low 385 3860x03 0xCFFF0 3870x04 0x23800 3880x05 0xA3B72 3890x06 0x6DA01 3900x07 0xE1688 3910x08 0x11600 3920x09 0x99E02 3930x0A 0x5DDB0 3940x0B 0xD9900 3950x0C 0x3FFBD 3960x0D 0xB0000 3970x0F 0xF00A0 398 399;RF Calibration for Airoha AL2230 400;Edit by Ben Chang (01/30/04) 401;Updated by Tiger Huang (03/03/04) 4020x0f 0xf00a0 ; Initial Setting 4030x0f 0xf00b0 ; Activate TX DCC 4040x0f 0xf02a0 ; Activate Phase Calibration 4050x0f 0xf00e0 ; Activate Filter RC Calibration 4060x0f 0xf00a0 ; Restore Initial Setting 407*****************************************************************************/ 408 409u32 al2230_rf_data[] = 410{ 411 (0x00<<20)|0x09EFC, 412 (0x01<<20)|0x8CCCC, 413 (0x02<<20)|0x40058,// 20060627 Anson 0x401D8, 414 (0x03<<20)|0xCFFF0, 415 (0x04<<20)|0x24100,// 20060627 Anson 0x23800, 416 (0x05<<20)|0xA3B2F,// 20060627 Anson 0xA3B72 417 (0x06<<20)|0x6DA01, 418 (0x07<<20)|0xE3628,// 20060627 Anson 0xE1688, 419 (0x08<<20)|0x11600, 420 (0x09<<20)|0x9DC02,// 20060627 Anosn 0x97602,//0x99E02, //0x9AE02 421 (0x0A<<20)|0x5ddb0, // 941206 For QCOM interference 0x588b0,//0x5DDB0, 940601 adj 0x5aa30 for bluetooth 422 (0x0B<<20)|0xD9900, 423 (0x0C<<20)|0x3FFBD, 424 (0x0D<<20)|0xB0000, 425 (0x0F<<20)|0xF01A0 // 20060627 Anson 0xF00A0 426}; 427 428u32 al2230s_rf_data[] = 429{ 430 (0x00<<20)|0x09EFC, 431 (0x01<<20)|0x8CCCC, 432 (0x02<<20)|0x40058,// 20060419 0x401D8, 433 (0x03<<20)|0xCFFF0, 434 (0x04<<20)|0x24100,// 20060419 0x23800, 435 (0x05<<20)|0xA3B2F,// 20060419 0xA3B72, 436 (0x06<<20)|0x6DA01, 437 (0x07<<20)|0xE3628,// 20060419 0xE1688, 438 (0x08<<20)|0x11600, 439 (0x09<<20)|0x9DC02,// 20060419 0x97602,//0x99E02, //0x9AE02 440 (0x0A<<20)|0x5DDB0,// 941206 For QCOM interference 0x588b0,//0x5DDB0, 940601 adj 0x5aa30 for bluetooth 441 (0x0B<<20)|0xD9900, 442 (0x0C<<20)|0x3FFBD, 443 (0x0D<<20)|0xB0000, 444 (0x0F<<20)|0xF01A0 // 20060419 0xF00A0 445}; 446 447u32 al2230_channel_data_24[][2] = 448{ 449 {(0x00<<20)|0x09EFC, (0x01<<20)|0x8CCCC}, // channe1 01 450 {(0x00<<20)|0x09EFC, (0x01<<20)|0x8CCCD}, // channe1 02 451 {(0x00<<20)|0x09E7C, (0x01<<20)|0x8CCCC}, // channe1 03 452 {(0x00<<20)|0x09E7C, (0x01<<20)|0x8CCCD}, // channe1 04 453 {(0x00<<20)|0x05EFC, (0x01<<20)|0x8CCCC}, // channe1 05 454 {(0x00<<20)|0x05EFC, (0x01<<20)|0x8CCCD}, // channe1 06 455 {(0x00<<20)|0x05E7C, (0x01<<20)|0x8CCCC}, // channe1 07 456 {(0x00<<20)|0x05E7C, (0x01<<20)|0x8CCCD}, // channe1 08 457 {(0x00<<20)|0x0DEFC, (0x01<<20)|0x8CCCC}, // channe1 09 458 {(0x00<<20)|0x0DEFC, (0x01<<20)|0x8CCCD}, // channe1 10 459 {(0x00<<20)|0x0DE7C, (0x01<<20)|0x8CCCC}, // channe1 11 460 {(0x00<<20)|0x0DE7C, (0x01<<20)|0x8CCCD}, // channe1 12 461 {(0x00<<20)|0x03EFC, (0x01<<20)|0x8CCCC}, // channe1 13 462 {(0x00<<20)|0x03E7C, (0x01<<20)|0x86666} // channe1 14 463}; 464 465// Current setting. u32 airoha_power_data_24[] = {(0x09<<20)|0x90202, (0x09<<20)|0x96602, (0x09<<20)|0x97602}; 466#define AIROHA_TXVGA_LOW_INDEX 31 // Index for 0x90202 467#define AIROHA_TXVGA_MIDDLE_INDEX 12 // Index for 0x96602 468#define AIROHA_TXVGA_HIGH_INDEX 8 // Index for 0x97602 1.0.24.0 1.0.28.0 469/* 470u32 airoha_power_data_24[] = 471{ 472 0x9FE02, // Max - 0 dB 473 0x9BE02, // Max - 1 dB 474 0x9DE02, // Max - 2 dB 475 0x99E02, // Max - 3 dB 476 0x9EE02, // Max - 4 dB 477 0x9AE02, // Max - 5 dB 478 0x9CE02, // Max - 6 dB 479 0x98E02, // Max - 7 dB 480 0x97602, // Max - 8 dB 481 0x93602, // Max - 9 dB 482 0x95602, // Max - 10 dB 483 0x91602, // Max - 11 dB 484 0x96602, // Max - 12 dB 485 0x92602, // Max - 13 dB 486 0x94602, // Max - 14 dB 487 0x90602, // Max - 15 dB 488 0x97A02, // Max - 16 dB 489 0x93A02, // Max - 17 dB 490 0x95A02, // Max - 18 dB 491 0x91A02, // Max - 19 dB 492 0x96A02, // Max - 20 dB 493 0x92A02, // Max - 21 dB 494 0x94A02, // Max - 22 dB 495 0x90A02, // Max - 23 dB 496 0x97202, // Max - 24 dB 497 0x93202, // Max - 25 dB 498 0x95202, // Max - 26 dB 499 0x91202, // Max - 27 dB 500 0x96202, // Max - 28 dB 501 0x92202, // Max - 29 dB 502 0x94202, // Max - 30 dB 503 0x90202 // Max - 31 dB 504}; 505*/ 506 507// 20040927 1.1.69.1000 ybjiang 508// from John 509u32 al2230_txvga_data[][2] = 510{ 511 //value , index 512 {0x090202, 0}, 513 {0x094202, 2}, 514 {0x092202, 4}, 515 {0x096202, 6}, 516 {0x091202, 8}, 517 {0x095202, 10}, 518 {0x093202, 12}, 519 {0x097202, 14}, 520 {0x090A02, 16}, 521 {0x094A02, 18}, 522 {0x092A02, 20}, 523 {0x096A02, 22}, 524 {0x091A02, 24}, 525 {0x095A02, 26}, 526 {0x093A02, 28}, 527 {0x097A02, 30}, 528 {0x090602, 32}, 529 {0x094602, 34}, 530 {0x092602, 36}, 531 {0x096602, 38}, 532 {0x091602, 40}, 533 {0x095602, 42}, 534 {0x093602, 44}, 535 {0x097602, 46}, 536 {0x090E02, 48}, 537 {0x098E02, 49}, 538 {0x094E02, 50}, 539 {0x09CE02, 51}, 540 {0x092E02, 52}, 541 {0x09AE02, 53}, 542 {0x096E02, 54}, 543 {0x09EE02, 55}, 544 {0x091E02, 56}, 545 {0x099E02, 57}, 546 {0x095E02, 58}, 547 {0x09DE02, 59}, 548 {0x093E02, 60}, 549 {0x09BE02, 61}, 550 {0x097E02, 62}, 551 {0x09FE02, 63} 552}; 553 554//-------------------------------- 555// For Airoha AL7230, 2.4Ghz band 556// Edit by Tiger, (March, 9, 2005) 557// 24bit, MSB first 558 559//channel independent registers: 560u32 al7230_rf_data_24[] = 561{ 562 (0x00<<24)|0x003790, 563 (0x01<<24)|0x133331, 564 (0x02<<24)|0x841FF2, 565 (0x03<<24)|0x3FDFA3, 566 (0x04<<24)|0x7FD784, 567 (0x05<<24)|0x802B55, 568 (0x06<<24)|0x56AF36, 569 (0x07<<24)|0xCE0207, 570 (0x08<<24)|0x6EBC08, 571 (0x09<<24)|0x221BB9, 572 (0x0A<<24)|0xE0000A, 573 (0x0B<<24)|0x08071B, 574 (0x0C<<24)|0x000A3C, 575 (0x0D<<24)|0xFFFFFD, 576 (0x0E<<24)|0x00000E, 577 (0x0F<<24)|0x1ABA8F 578}; 579 580u32 al7230_channel_data_24[][2] = 581{ 582 {(0x00<<24)|0x003790, (0x01<<24)|0x133331}, // channe1 01 583 {(0x00<<24)|0x003790, (0x01<<24)|0x1B3331}, // channe1 02 584 {(0x00<<24)|0x003790, (0x01<<24)|0x033331}, // channe1 03 585 {(0x00<<24)|0x003790, (0x01<<24)|0x0B3331}, // channe1 04 586 {(0x00<<24)|0x0037A0, (0x01<<24)|0x133331}, // channe1 05 587 {(0x00<<24)|0x0037A0, (0x01<<24)|0x1B3331}, // channe1 06 588 {(0x00<<24)|0x0037A0, (0x01<<24)|0x033331}, // channe1 07 589 {(0x00<<24)|0x0037A0, (0x01<<24)|0x0B3331}, // channe1 08 590 {(0x00<<24)|0x0037B0, (0x01<<24)|0x133331}, // channe1 09 591 {(0x00<<24)|0x0037B0, (0x01<<24)|0x1B3331}, // channe1 10 592 {(0x00<<24)|0x0037B0, (0x01<<24)|0x033331}, // channe1 11 593 {(0x00<<24)|0x0037B0, (0x01<<24)|0x0B3331}, // channe1 12 594 {(0x00<<24)|0x0037C0, (0x01<<24)|0x133331}, // channe1 13 595 {(0x00<<24)|0x0037C0, (0x01<<24)|0x066661} // channel 14 596}; 597 598//channel independent registers: 599u32 al7230_rf_data_50[] = 600{ 601 (0x00<<24)|0x0FF520, 602 (0x01<<24)|0x000001, 603 (0x02<<24)|0x451FE2, 604 (0x03<<24)|0x5FDFA3, 605 (0x04<<24)|0x6FD784, 606 (0x05<<24)|0x853F55, 607 (0x06<<24)|0x56AF36, 608 (0x07<<24)|0xCE0207, 609 (0x08<<24)|0x6EBC08, 610 (0x09<<24)|0x221BB9, 611 (0x0A<<24)|0xE0600A, 612 (0x0B<<24)|0x08044B, 613 (0x0C<<24)|0x00143C, 614 (0x0D<<24)|0xFFFFFD, 615 (0x0E<<24)|0x00000E, 616 (0x0F<<24)|0x12BACF //5Ghz default state 617}; 618 619u32 al7230_channel_data_5[][4] = 620{ 621 //channel dependent registers: 0x00, 0x01 and 0x04 622 //11J =========== 623 {184, (0x00<<24)|0x0FF520, (0x01<<24)|0x000001, (0x04<<24)|0x67F784}, // channel 184 624 {188, (0x00<<24)|0x0FF520, (0x01<<24)|0x0AAAA1, (0x04<<24)|0x77F784}, // channel 188 625 {192, (0x00<<24)|0x0FF530, (0x01<<24)|0x155551, (0x04<<24)|0x77F784}, // channel 192 626 {196, (0x00<<24)|0x0FF530, (0x01<<24)|0x000001, (0x04<<24)|0x67F784}, // channel 196 627 {8, (0x00<<24)|0x0FF540, (0x01<<24)|0x000001, (0x04<<24)|0x67F784}, // channel 008 628 {12, (0x00<<24)|0x0FF540, (0x01<<24)|0x0AAAA1, (0x04<<24)|0x77F784}, // channel 012 629 {16, (0x00<<24)|0x0FF550, (0x01<<24)|0x155551, (0x04<<24)|0x77F784}, // channel 016 630 {34, (0x00<<24)|0x0FF560, (0x01<<24)|0x055551, (0x04<<24)|0x77F784}, // channel 034 631 {38, (0x00<<24)|0x0FF570, (0x01<<24)|0x100001, (0x04<<24)|0x77F784}, // channel 038 632 {42, (0x00<<24)|0x0FF570, (0x01<<24)|0x1AAAA1, (0x04<<24)|0x77F784}, // channel 042 633 {46, (0x00<<24)|0x0FF570, (0x01<<24)|0x055551, (0x04<<24)|0x77F784}, // channel 046 634 //11 A/H ========= 635 {36, (0x00<<24)|0x0FF560, (0x01<<24)|0x0AAAA1, (0x04<<24)|0x77F784}, // channel 036 636 {40, (0x00<<24)|0x0FF570, (0x01<<24)|0x155551, (0x04<<24)|0x77F784}, // channel 040 637 {44, (0x00<<24)|0x0FF570, (0x01<<24)|0x000001, (0x04<<24)|0x67F784}, // channel 044 638 {48, (0x00<<24)|0x0FF570, (0x01<<24)|0x0AAAA1, (0x04<<24)|0x77F784}, // channel 048 639 {52, (0x00<<24)|0x0FF580, (0x01<<24)|0x155551, (0x04<<24)|0x77F784}, // channel 052 640 {56, (0x00<<24)|0x0FF580, (0x01<<24)|0x000001, (0x04<<24)|0x67F784}, // channel 056 641 {60, (0x00<<24)|0x0FF580, (0x01<<24)|0x0AAAA1, (0x04<<24)|0x77F784}, // channel 060 642 {64, (0x00<<24)|0x0FF590, (0x01<<24)|0x155551, (0x04<<24)|0x77F784}, // channel 064 643 {100, (0x00<<24)|0x0FF5C0, (0x01<<24)|0x155551, (0x04<<24)|0x77F784}, // channel 100 644 {104, (0x00<<24)|0x0FF5C0, (0x01<<24)|0x000001, (0x04<<24)|0x67F784}, // channel 104 645 {108, (0x00<<24)|0x0FF5C0, (0x01<<24)|0x0AAAA1, (0x04<<24)|0x77F784}, // channel 108 646 {112, (0x00<<24)|0x0FF5D0, (0x01<<24)|0x155551, (0x04<<24)|0x77F784}, // channel 112 647 {116, (0x00<<24)|0x0FF5D0, (0x01<<24)|0x000001, (0x04<<24)|0x67F784}, // channel 116 648 {120, (0x00<<24)|0x0FF5D0, (0x01<<24)|0x0AAAA1, (0x04<<24)|0x77F784}, // channel 120 649 {124, (0x00<<24)|0x0FF5E0, (0x01<<24)|0x155551, (0x04<<24)|0x77F784}, // channel 124 650 {128, (0x00<<24)|0x0FF5E0, (0x01<<24)|0x000001, (0x04<<24)|0x67F784}, // channel 128 651 {132, (0x00<<24)|0x0FF5E0, (0x01<<24)|0x0AAAA1, (0x04<<24)|0x77F784}, // channel 132 652 {136, (0x00<<24)|0x0FF5F0, (0x01<<24)|0x155551, (0x04<<24)|0x77F784}, // channel 136 653 {140, (0x00<<24)|0x0FF5F0, (0x01<<24)|0x000001, (0x04<<24)|0x67F784}, // channel 140 654 {149, (0x00<<24)|0x0FF600, (0x01<<24)|0x180001, (0x04<<24)|0x77F784}, // channel 149 655 {153, (0x00<<24)|0x0FF600, (0x01<<24)|0x02AAA1, (0x04<<24)|0x77F784}, // channel 153 656 {157, (0x00<<24)|0x0FF600, (0x01<<24)|0x0D5551, (0x04<<24)|0x77F784}, // channel 157 657 {161, (0x00<<24)|0x0FF610, (0x01<<24)|0x180001, (0x04<<24)|0x77F784}, // channel 161 658 {165, (0x00<<24)|0x0FF610, (0x01<<24)|0x02AAA1, (0x04<<24)|0x77F784} // channel 165 659}; 660 661//; RF Calibration <=== Register 0x0F 662//0x0F 0x1ABA8F; start from 2.4Ghz default state 663//0x0F 0x9ABA8F; TXDC compensation 664//0x0F 0x3ABA8F; RXFIL adjustment 665//0x0F 0x1ABA8F; restore 2.4Ghz default state 666 667//;TXVGA Mapping Table <=== Register 0x0B 668u32 al7230_txvga_data[][2] = 669{ 670 {0x08040B, 0}, //TXVGA=0; 671 {0x08041B, 1}, //TXVGA=1; 672 {0x08042B, 2}, //TXVGA=2; 673 {0x08043B, 3}, //TXVGA=3; 674 {0x08044B, 4}, //TXVGA=4; 675 {0x08045B, 5}, //TXVGA=5; 676 {0x08046B, 6}, //TXVGA=6; 677 {0x08047B, 7}, //TXVGA=7; 678 {0x08048B, 8}, //TXVGA=8; 679 {0x08049B, 9}, //TXVGA=9; 680 {0x0804AB, 10}, //TXVGA=10; 681 {0x0804BB, 11}, //TXVGA=11; 682 {0x0804CB, 12}, //TXVGA=12; 683 {0x0804DB, 13}, //TXVGA=13; 684 {0x0804EB, 14}, //TXVGA=14; 685 {0x0804FB, 15}, //TXVGA=15; 686 {0x08050B, 16}, //TXVGA=16; 687 {0x08051B, 17}, //TXVGA=17; 688 {0x08052B, 18}, //TXVGA=18; 689 {0x08053B, 19}, //TXVGA=19; 690 {0x08054B, 20}, //TXVGA=20; 691 {0x08055B, 21}, //TXVGA=21; 692 {0x08056B, 22}, //TXVGA=22; 693 {0x08057B, 23}, //TXVGA=23; 694 {0x08058B, 24}, //TXVGA=24; 695 {0x08059B, 25}, //TXVGA=25; 696 {0x0805AB, 26}, //TXVGA=26; 697 {0x0805BB, 27}, //TXVGA=27; 698 {0x0805CB, 28}, //TXVGA=28; 699 {0x0805DB, 29}, //TXVGA=29; 700 {0x0805EB, 30}, //TXVGA=30; 701 {0x0805FB, 31}, //TXVGA=31; 702 {0x08060B, 32}, //TXVGA=32; 703 {0x08061B, 33}, //TXVGA=33; 704 {0x08062B, 34}, //TXVGA=34; 705 {0x08063B, 35}, //TXVGA=35; 706 {0x08064B, 36}, //TXVGA=36; 707 {0x08065B, 37}, //TXVGA=37; 708 {0x08066B, 38}, //TXVGA=38; 709 {0x08067B, 39}, //TXVGA=39; 710 {0x08068B, 40}, //TXVGA=40; 711 {0x08069B, 41}, //TXVGA=41; 712 {0x0806AB, 42}, //TXVGA=42; 713 {0x0806BB, 43}, //TXVGA=43; 714 {0x0806CB, 44}, //TXVGA=44; 715 {0x0806DB, 45}, //TXVGA=45; 716 {0x0806EB, 46}, //TXVGA=46; 717 {0x0806FB, 47}, //TXVGA=47; 718 {0x08070B, 48}, //TXVGA=48; 719 {0x08071B, 49}, //TXVGA=49; 720 {0x08072B, 50}, //TXVGA=50; 721 {0x08073B, 51}, //TXVGA=51; 722 {0x08074B, 52}, //TXVGA=52; 723 {0x08075B, 53}, //TXVGA=53; 724 {0x08076B, 54}, //TXVGA=54; 725 {0x08077B, 55}, //TXVGA=55; 726 {0x08078B, 56}, //TXVGA=56; 727 {0x08079B, 57}, //TXVGA=57; 728 {0x0807AB, 58}, //TXVGA=58; 729 {0x0807BB, 59}, //TXVGA=59; 730 {0x0807CB, 60}, //TXVGA=60; 731 {0x0807DB, 61}, //TXVGA=61; 732 {0x0807EB, 62}, //TXVGA=62; 733 {0x0807FB, 63}, //TXVGA=63; 734}; 735//-------------------------------- 736 737 738//; W89RF242 RFIC SPI programming initial data 739//; Winbond WLAN 11g RFIC BB-SPI register -- version FA5976A rev 1.3b 740//; Update Date: Ocotber 3, 2005 by PP10 Hsiang-Te Ho 741//; 742//; Version 1.3b revision items: (Oct. 1, 2005 by HTHo) for FA5976A 743u32 w89rf242_rf_data[] = 744{ 745 (0x00<<24)|0xF86100, // 20060721 0xF86100, //; 3E184; MODA (0x00) -- Normal mode ; calibration off 746 (0x01<<24)|0xEFFFC2, //; 3BFFF; MODB (0x01) -- turn off RSSI, and other circuits are turned on 747 (0x02<<24)|0x102504, //; 04094; FSET (0x02) -- default 20MHz crystal ; Icmp=1.5mA 748 (0x03<<24)|0x026286, //; 0098A; FCHN (0x03) -- default CH7, 2442MHz 749 (0x04<<24)|0x000208, // 20060612.1.a 0x0002C8, // 20050818 // 20050816 0x000388 750 //; 02008; FCAL (0x04) -- XTAL Freq Trim=001000 (socket board#1); FA5976AYG_v1.3C 751 (0x05<<24)|0x24C60A, // 20060612.1.a 0x24C58A, // 941003 0x24C48A, // 20050818.2 0x24848A, // 20050818 // 20050816 0x24C48A 752 //; 09316; GANA (0x05) -- TX VGA default (TXVGA=0x18(12)) & TXGPK=110 ; FA5976A_1.3D 753 (0x06<<24)|0x3432CC, // 941003 0x26C34C, // 20050818 0x06B40C 754 //; 0D0CB; GANB (0x06) -- RXDC(DC offset) on; LNA=11; RXVGA=001011(11) ; RXFLSW=11(010001); RXGPK=00; RXGCF=00; -50dBm input 755 (0x07<<24)|0x0C68CE, // 20050818.2 0x0C66CE, // 20050818 // 20050816 0x0C68CE 756 //; 031A3; FILT (0x07) -- TX/RX filter with auto-tuning; TFLBW=011; RFLBW=100 757 (0x08<<24)|0x100010, //; 04000; TCAL (0x08) -- //for LO 758 (0x09<<24)|0x004012, // 20060612.1.a 0x6E4012, // 0x004012, 759 //; 1B900; RCALA (0x09) -- FASTS=11; HPDE=01 (100nsec); SEHP=1 (select B0 pin=RXHP); RXHP=1 (Turn on RXHP function)(FA5976A_1.3C) 760 (0x0A<<24)|0x704014, //; 1C100; RCALB (0x0A) 761 (0x0B<<24)|0x18BDD6, // 941003 0x1805D6, // 20050818.2 0x1801D6, // 20050818 // 20050816 0x1805D6 762 //; 062F7; IQCAL (0x0B) -- Turn on LO phase tuner=0111 & RX-LO phase = 0111; FA5976A_1.3B (2005/09/29) 763 (0x0C<<24)|0x575558, // 20050818.2 0x555558, // 20050818 // 20050816 0x575558 764 //; 15D55 ; IBSA (0x0C) -- IFPre =11 ; TC5376A_v1.3A for corner 765 (0x0D<<24)|0x55545A, // 20060612.1.a 0x55555A, 766 //; 15555 ; IBSB (0x0D) 767 (0x0E<<24)|0x5557DC, // 20060612.1.a 0x55555C, // 941003 0x5557DC, 768 //; 1555F ; IBSC (0x0E) -- IRLNA & IRLNB (PTAT & Const current)=01/01; FA5976B_1.3F (2005/11/25) 769 (0x10<<24)|0x000C20, // 941003 0x000020, // 20050818 770 //; 00030 ; TMODA (0x10) -- LNA_gain_step=0011 ; LNA=15/16dB 771 (0x11<<24)|0x0C0022, // 941003 0x030022 // 20050818.2 0x030022 // 20050818 // 20050816 0x0C0022 772 //; 03000 ; TMODB (0x11) -- Turn ON RX-Q path Test Switch; To improve IQ path group delay (FA5976A_1.3C) 773 (0x12<<24)|0x000024 // 20060612.1.a 0x001824 // 941003 add 774 //; TMODC (0x12) -- Turn OFF Tempearure sensor 775}; 776 777u32 w89rf242_channel_data_24[][2] = 778{ 779 {(0x03<<24)|0x025B06, (0x04<<24)|0x080408}, // channe1 01 780 {(0x03<<24)|0x025C46, (0x04<<24)|0x080408}, // channe1 02 781 {(0x03<<24)|0x025D86, (0x04<<24)|0x080408}, // channe1 03 782 {(0x03<<24)|0x025EC6, (0x04<<24)|0x080408}, // channe1 04 783 {(0x03<<24)|0x026006, (0x04<<24)|0x080408}, // channe1 05 784 {(0x03<<24)|0x026146, (0x04<<24)|0x080408}, // channe1 06 785 {(0x03<<24)|0x026286, (0x04<<24)|0x080408}, // channe1 07 786 {(0x03<<24)|0x0263C6, (0x04<<24)|0x080408}, // channe1 08 787 {(0x03<<24)|0x026506, (0x04<<24)|0x080408}, // channe1 09 788 {(0x03<<24)|0x026646, (0x04<<24)|0x080408}, // channe1 10 789 {(0x03<<24)|0x026786, (0x04<<24)|0x080408}, // channe1 11 790 {(0x03<<24)|0x0268C6, (0x04<<24)|0x080408}, // channe1 12 791 {(0x03<<24)|0x026A06, (0x04<<24)|0x080408}, // channe1 13 792 {(0x03<<24)|0x026D06, (0x04<<24)|0x080408} // channe1 14 793}; 794 795u32 w89rf242_power_data_24[] = {(0x05<<24)|0x24C48A, (0x05<<24)|0x24C48A, (0x05<<24)|0x24C48A}; 796 797// 20060315.6 Enlarge for new scale 798// 20060316.6 20060619.2.a add mapping array 799u32 w89rf242_txvga_old_mapping[][2] = 800{ 801 {0, 0} , // New <-> Old 802 {1, 1} , 803 {2, 2} , 804 {3, 3} , 805 {4, 4} , 806 {6, 5} , 807 {8, 6 }, 808 {10, 7 }, 809 {12, 8 }, 810 {14, 9 }, 811 {16, 10}, 812 {18, 11}, 813 {20, 12}, 814 {22, 13}, 815 {24, 14}, 816 {26, 15}, 817 {28, 16}, 818 {30, 17}, 819 {32, 18}, 820 {34, 19}, 821 822 823}; 824 825// 20060619.3 modify from Bruce's mail 826u32 w89rf242_txvga_data[][5] = 827{ 828 //low gain mode 829 { (0x05<<24)|0x24C00A, 0, 0x00292315, 0x0800FEFF, 0x52523131 },// ; min gain 830 { (0x05<<24)|0x24C80A, 1, 0x00292315, 0x0800FEFF, 0x52523131 }, 831 { (0x05<<24)|0x24C04A, 2, 0x00292315, 0x0800FEFF, 0x52523131 },// (default) +14dBm (ANT) 832 { (0x05<<24)|0x24C84A, 3, 0x00292315, 0x0800FEFF, 0x52523131 }, 833 834 //TXVGA=0x10 835 { (0x05<<24)|0x24C40A, 4, 0x00292315, 0x0800FEFF, 0x60603838 }, 836 { (0x05<<24)|0x24C40A, 5, 0x00262114, 0x0700FEFF, 0x65653B3B }, 837 838 //TXVGA=0x11 839 { (0x05<<24)|0x24C44A, 6, 0x00241F13, 0x0700FFFF, 0x58583333 }, 840 { (0x05<<24)|0x24C44A, 7, 0x00292315, 0x0800FEFF, 0x5E5E3737 }, 841 842 //TXVGA=0x12 843 { (0x05<<24)|0x24C48A, 8, 0x00262114, 0x0700FEFF, 0x53533030 }, 844 { (0x05<<24)|0x24C48A, 9, 0x00241F13, 0x0700FFFF, 0x59593434 }, 845 846 //TXVGA=0x13 847 { (0x05<<24)|0x24C4CA, 10, 0x00292315, 0x0800FEFF, 0x52523030 }, 848 { (0x05<<24)|0x24C4CA, 11, 0x00262114, 0x0700FEFF, 0x56563232 }, 849 850 //TXVGA=0x14 851 { (0x05<<24)|0x24C50A, 12, 0x00292315, 0x0800FEFF, 0x54543131 }, 852 { (0x05<<24)|0x24C50A, 13, 0x00262114, 0x0700FEFF, 0x58583434 }, 853 854 //TXVGA=0x15 855 { (0x05<<24)|0x24C54A, 14, 0x00292315, 0x0800FEFF, 0x54543131 }, 856 { (0x05<<24)|0x24C54A, 15, 0x00262114, 0x0700FEFF, 0x59593434 }, 857 858 //TXVGA=0x16 859 { (0x05<<24)|0x24C58A, 16, 0x00292315, 0x0800FEFF, 0x55553131 }, 860 { (0x05<<24)|0x24C58A, 17, 0x00292315, 0x0800FEFF, 0x5B5B3535 }, 861 862 //TXVGA=0x17 863 { (0x05<<24)|0x24C5CA, 18, 0x00262114, 0x0700FEFF, 0x51512F2F }, 864 { (0x05<<24)|0x24C5CA, 19, 0x00241F13, 0x0700FFFF, 0x55553131 }, 865 866 //TXVGA=0x18 867 { (0x05<<24)|0x24C60A, 20, 0x00292315, 0x0800FEFF, 0x4F4F2E2E }, 868 { (0x05<<24)|0x24C60A, 21, 0x00262114, 0x0700FEFF, 0x53533030 }, 869 870 //TXVGA=0x19 871 { (0x05<<24)|0x24C64A, 22, 0x00292315, 0x0800FEFF, 0x4E4E2D2D }, 872 { (0x05<<24)|0x24C64A, 23, 0x00262114, 0x0700FEFF, 0x53533030 }, 873 874 //TXVGA=0x1A 875 { (0x05<<24)|0x24C68A, 24, 0x00292315, 0x0800FEFF, 0x50502E2E }, 876 { (0x05<<24)|0x24C68A, 25, 0x00262114, 0x0700FEFF, 0x55553131 }, 877 878 //TXVGA=0x1B 879 { (0x05<<24)|0x24C6CA, 26, 0x00262114, 0x0700FEFF, 0x53533030 }, 880 { (0x05<<24)|0x24C6CA, 27, 0x00292315, 0x0800FEFF, 0x5A5A3434 }, 881 882 //TXVGA=0x1C 883 { (0x05<<24)|0x24C70A, 28, 0x00292315, 0x0800FEFF, 0x55553131 }, 884 { (0x05<<24)|0x24C70A, 29, 0x00292315, 0x0800FEFF, 0x5D5D3636 }, 885 886 //TXVGA=0x1D 887 { (0x05<<24)|0x24C74A, 30, 0x00292315, 0x0800FEFF, 0x5F5F3737 }, 888 { (0x05<<24)|0x24C74A, 31, 0x00262114, 0x0700FEFF, 0x65653B3B }, 889 890 //TXVGA=0x1E 891 { (0x05<<24)|0x24C78A, 32, 0x00292315, 0x0800FEFF, 0x66663B3B }, 892 { (0x05<<24)|0x24C78A, 33, 0x00262114, 0x0700FEFF, 0x70704141 }, 893 894 //TXVGA=0x1F 895 { (0x05<<24)|0x24C7CA, 34, 0x00292315, 0x0800FEFF, 0x72724242 } 896}; 897 898/////////////////////////////////////////////////////////////////////////////////////////////////// 899/////////////////////////////////////////////////////////////////////////////////////////////////// 900/////////////////////////////////////////////////////////////////////////////////////////////////// 901 902 903 904//============================================================================================================= 905// Uxx_ReadEthernetAddress -- 906// 907// Routine Description: 908// Reads in the Ethernet address from the IC. 909// 910// Arguments: 911// pHwData - The pHwData structure 912// 913// Return Value: 914// 915// The address is stored in EthernetIDAddr. 916//============================================================================================================= 917void 918Uxx_ReadEthernetAddress( struct hw_data * pHwData ) 919{ 920 u32 ltmp; 921 922 // Reading Ethernet address from EEPROM and set into hardware due to MAC address maybe change. 923 // Only unplug and plug again can make hardware read EEPROM again. 20060727 924 Wb35Reg_WriteSync( pHwData, 0x03b4, 0x08000000 ); // Start EEPROM access + Read + address(0x0d) 925 Wb35Reg_ReadSync( pHwData, 0x03b4, &ltmp ); 926 *(u16 *)pHwData->PermanentMacAddress = cpu_to_le16((u16)ltmp); //20060926 anson's endian 927 Wb35Reg_WriteSync( pHwData, 0x03b4, 0x08010000 ); // Start EEPROM access + Read + address(0x0d) 928 Wb35Reg_ReadSync( pHwData, 0x03b4, &ltmp ); 929 *(u16 *)(pHwData->PermanentMacAddress + 2) = cpu_to_le16((u16)ltmp); //20060926 anson's endian 930 Wb35Reg_WriteSync( pHwData, 0x03b4, 0x08020000 ); // Start EEPROM access + Read + address(0x0d) 931 Wb35Reg_ReadSync( pHwData, 0x03b4, &ltmp ); 932 *(u16 *)(pHwData->PermanentMacAddress + 4) = cpu_to_le16((u16)ltmp); //20060926 anson's endian 933 *(u16 *)(pHwData->PermanentMacAddress + 6) = 0; 934 Wb35Reg_WriteSync( pHwData, 0x03e8, cpu_to_le32(*(u32 *)pHwData->PermanentMacAddress) ); //20060926 anson's endian 935 Wb35Reg_WriteSync( pHwData, 0x03ec, cpu_to_le32(*(u32 *)(pHwData->PermanentMacAddress+4)) ); //20060926 anson's endian 936} 937 938 939//=============================================================================================================== 940// CardGetMulticastBit -- 941// Description: 942// For a given multicast address, returns the byte and bit in the card multicast registers that it hashes to. 943// Calls CardComputeCrc() to determine the CRC value. 944// Arguments: 945// Address - the address 946// Byte - the byte that it hashes to 947// Value - will have a 1 in the relevant bit 948// Return Value: 949// None. 950//============================================================================================================== 951void CardGetMulticastBit( u8 Address[ETH_ALEN], u8 *Byte, u8 *Value ) 952{ 953 u32 Crc; 954 u32 BitNumber; 955 956 // First compute the CRC. 957 Crc = CardComputeCrc(Address, ETH_ALEN); 958 959 // The computed CRC is bit0~31 from left to right 960 //At first we should do right shift 25bits, and read 7bits by using '&', 2^7=128 961 BitNumber = (u32) ((Crc >> 26) & 0x3f); 962 963 *Byte = (u8) (BitNumber >> 3);// 900514 original (BitNumber / 8) 964 *Value = (u8) ((u8)1 << (BitNumber % 8)); 965} 966 967void Uxx_power_on_procedure( struct hw_data * pHwData ) 968{ 969 u32 ltmp, loop; 970 971 if( pHwData->phy_type <= RF_MAXIM_V1 ) 972 Wb35Reg_WriteSync( pHwData, 0x03d4, 0xffffff38 ); 973 else 974 { 975 Wb35Reg_WriteSync( pHwData, 0x03f4, 0xFF5807FF );// 20060721 For NEW IC 0xFF5807FF 976 977 // 20060511.1 Fix the following 4 steps for Rx of RF 2230 initial fail 978 Wb35Reg_WriteSync( pHwData, 0x03d4, 0x80 );// regulator on only 979 msleep(10); // Modify 20051221.1.b 980 Wb35Reg_WriteSync( pHwData, 0x03d4, 0xb8 );// REG_ON RF_RSTN on, and 981 msleep(10); // Modify 20051221.1.b 982 983 ltmp = 0x4968; 984 if( (pHwData->phy_type == RF_WB_242) || 985 (RF_WB_242_1 == pHwData->phy_type) ) // 20060619.5 Add 986 ltmp = 0x4468; 987 Wb35Reg_WriteSync( pHwData, 0x03d0, ltmp ); 988 989 Wb35Reg_WriteSync( pHwData, 0x03d4, 0xa0 );// PLL_PD REF_PD set to 0 990 991 msleep(20); // Modify 20051221.1.b 992 Wb35Reg_ReadSync( pHwData, 0x03d0, &ltmp ); 993 loop = 500; // Wait for 5 second 20061101 994 while( !(ltmp & 0x20) && loop-- ) 995 { 996 msleep(10); // Modify 20051221.1.b 997 if( !Wb35Reg_ReadSync( pHwData, 0x03d0, &ltmp ) ) 998 break; 999 } 1000 1001 Wb35Reg_WriteSync( pHwData, 0x03d4, 0xe0 );// MLK_EN 1002 } 1003 1004 Wb35Reg_WriteSync( pHwData, 0x03b0, 1 );// Reset hardware first 1005 msleep(10); // Add this 20051221.1.b 1006 1007 // Set burst write delay 1008 Wb35Reg_WriteSync( pHwData, 0x03f8, 0x7ff ); 1009} 1010 1011void Set_ChanIndep_RfData_al7230_24( struct hw_data * pHwData, u32 *pltmp ,char number) 1012{ 1013 u8 i; 1014 1015 for( i=0; i<number; i++ ) 1016 { 1017 pHwData->phy_para[i] = al7230_rf_data_24[i]; 1018 pltmp[i] = (1 << 31) | (0 << 30) | (24 << 24) | (al7230_rf_data_24[i]&0xffffff); 1019 } 1020} 1021 1022void Set_ChanIndep_RfData_al7230_50( struct hw_data * pHwData, u32 *pltmp, char number) 1023{ 1024 u8 i; 1025 1026 for( i=0; i<number; i++ ) 1027 { 1028 pHwData->phy_para[i] = al7230_rf_data_50[i]; 1029 pltmp[i] = (1 << 31) | (0 << 30) | (24 << 24) | (al7230_rf_data_50[i]&0xffffff); 1030 } 1031} 1032 1033 1034//============================================================================================================= 1035// RFSynthesizer_initial -- 1036//============================================================================================================= 1037void 1038RFSynthesizer_initial(struct hw_data * pHwData) 1039{ 1040 u32 altmp[32]; 1041 u32 * pltmp = altmp; 1042 u32 ltmp; 1043 u8 number=0x00; // The number of register vale 1044 u8 i; 1045 1046 // 1047 // bit[31] SPI Enable. 1048 // 1=perform synthesizer program operation. This bit will 1049 // cleared automatically after the operation is completed. 1050 // bit[30] SPI R/W Control 1051 // 0=write, 1=read 1052 // bit[29:24] SPI Data Format Length 1053 // bit[17:4 ] RF Data bits. 1054 // bit[3 :0 ] RF address. 1055 switch( pHwData->phy_type ) 1056 { 1057 case RF_MAXIM_2825: 1058 case RF_MAXIM_V1: // 11g Winbond 2nd BB(with Phy board (v1) + Maxim 331) 1059 number = sizeof(max2825_rf_data)/sizeof(max2825_rf_data[0]); 1060 for( i=0; i<number; i++ ) 1061 { 1062 pHwData->phy_para[i] = max2825_rf_data[i];// Backup Rf parameter 1063 pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2825_rf_data[i], 18); 1064 } 1065 break; 1066 1067 case RF_MAXIM_2827: 1068 number = sizeof(max2827_rf_data)/sizeof(max2827_rf_data[0]); 1069 for( i=0; i<number; i++ ) 1070 { 1071 pHwData->phy_para[i] = max2827_rf_data[i]; 1072 pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2827_rf_data[i], 18); 1073 } 1074 break; 1075 1076 case RF_MAXIM_2828: 1077 number = sizeof(max2828_rf_data)/sizeof(max2828_rf_data[0]); 1078 for( i=0; i<number; i++ ) 1079 { 1080 pHwData->phy_para[i] = max2828_rf_data[i]; 1081 pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2828_rf_data[i], 18); 1082 } 1083 break; 1084 1085 case RF_MAXIM_2829: 1086 number = sizeof(max2829_rf_data)/sizeof(max2829_rf_data[0]); 1087 for( i=0; i<number; i++ ) 1088 { 1089 pHwData->phy_para[i] = max2829_rf_data[i]; 1090 pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2829_rf_data[i], 18); 1091 } 1092 break; 1093 1094 case RF_AIROHA_2230: 1095 number = sizeof(al2230_rf_data)/sizeof(al2230_rf_data[0]); 1096 for( i=0; i<number; i++ ) 1097 { 1098 pHwData->phy_para[i] = al2230_rf_data[i]; 1099 pltmp[i] = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse( al2230_rf_data[i], 20); 1100 } 1101 break; 1102 1103 case RF_AIROHA_2230S: 1104 number = sizeof(al2230s_rf_data)/sizeof(al2230s_rf_data[0]); 1105 for( i=0; i<number; i++ ) 1106 { 1107 pHwData->phy_para[i] = al2230s_rf_data[i]; 1108 pltmp[i] = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse( al2230s_rf_data[i], 20); 1109 } 1110 break; 1111 1112 case RF_AIROHA_7230: 1113 1114 //Start to fill RF parameters, PLL_ON should be pulled low. 1115 Wb35Reg_WriteSync( pHwData, 0x03dc, 0x00000000 ); 1116#ifdef _PE_STATE_DUMP_ 1117 printk("* PLL_ON low\n"); 1118#endif 1119 1120 number = sizeof(al7230_rf_data_24)/sizeof(al7230_rf_data_24[0]); 1121 Set_ChanIndep_RfData_al7230_24(pHwData, pltmp, number); 1122 break; 1123 1124 case RF_WB_242: 1125 case RF_WB_242_1: // 20060619.5 Add 1126 number = sizeof(w89rf242_rf_data)/sizeof(w89rf242_rf_data[0]); 1127 for( i=0; i<number; i++ ) 1128 { 1129 ltmp = w89rf242_rf_data[i]; 1130 if( i == 4 ) // Update the VCO trim from EEPROM 1131 { 1132 ltmp &= ~0xff0; // Mask bit4 ~bit11 1133 ltmp |= pHwData->VCO_trim<<4; 1134 } 1135 1136 pHwData->phy_para[i] = ltmp; 1137 pltmp[i] = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( ltmp, 24); 1138 } 1139 break; 1140 } 1141 1142 pHwData->phy_number = number; 1143 1144 // The 16 is the maximum capability of hardware. Here use 12 1145 if( number > 12 ) { 1146 //Wb35Reg_BurstWrite( pHwData, 0x0864, pltmp, 12, NO_INCREMENT ); 1147 for( i=0; i<12; i++ ) // For Al2230 1148 Wb35Reg_WriteSync( pHwData, 0x0864, pltmp[i] ); 1149 1150 pltmp += 12; 1151 number -= 12; 1152 } 1153 1154 // Write to register. number must less and equal than 16 1155 for( i=0; i<number; i++ ) 1156 Wb35Reg_WriteSync( pHwData, 0x864, pltmp[i] ); 1157 1158 // 20060630.1 Calibration only 1 time 1159 if( pHwData->CalOneTime ) 1160 return; 1161 pHwData->CalOneTime = 1; 1162 1163 switch( pHwData->phy_type ) 1164 { 1165 case RF_AIROHA_2230: 1166 1167 // 20060511.1 --- Modifying the follow step for Rx issue----------------- 1168 ltmp = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse( (0x07<<20)|0xE168E, 20); 1169 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1170 msleep(10); 1171 ltmp = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse( al2230_rf_data[7], 20); 1172 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1173 msleep(10); 1174 1175 case RF_AIROHA_2230S: // 20060420 Add this 1176 1177 // 20060511.1 --- Modifying the follow step for Rx issue----------------- 1178 Wb35Reg_WriteSync( pHwData, 0x03d4, 0x80 );// regulator on only 1179 msleep(10); // Modify 20051221.1.b 1180 1181 Wb35Reg_WriteSync( pHwData, 0x03d4, 0xa0 );// PLL_PD REF_PD set to 0 1182 msleep(10); // Modify 20051221.1.b 1183 1184 Wb35Reg_WriteSync( pHwData, 0x03d4, 0xe0 );// MLK_EN 1185 Wb35Reg_WriteSync( pHwData, 0x03b0, 1 );// Reset hardware first 1186 msleep(10); // Add this 20051221.1.b 1187 //------------------------------------------------------------------------ 1188 1189 // The follow code doesn't use the burst-write mode 1190 //phy_set_rf_data(phw_data, 0x0F, (0x0F<<20) | 0xF01A0); //Raise Initial Setting 1191 ltmp = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse( (0x0F<<20) | 0xF01A0, 20); 1192 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1193 1194 ltmp = pHwData->reg.BB5C & 0xfffff000; 1195 Wb35Reg_WriteSync( pHwData, 0x105c, ltmp ); 1196 pHwData->reg.BB50 |= 0x13;//(MASK_IQCAL_MODE|MASK_CALIB_START);//20060315.1 modify 1197 Wb35Reg_WriteSync(pHwData, 0x1050, pHwData->reg.BB50); 1198 msleep(5); 1199 1200 //phy_set_rf_data(phw_data, 0x0F, (0x0F<<20) | 0xF01B0); //Activate Filter Cal. 1201 ltmp = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse( (0x0F<<20) | 0xF01B0, 20); 1202 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1203 msleep(5); 1204 1205 //phy_set_rf_data(phw_data, 0x0F, (0x0F<<20) | 0xF01e0); //Activate TX DCC 1206 ltmp = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse( (0x0F<<20) | 0xF01E0, 20); 1207 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1208 msleep(5); 1209 1210 //phy_set_rf_data(phw_data, 0x0F, (0x0F<<20) | 0xF01A0); //Resotre Initial Setting 1211 ltmp = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse( (0x0F<<20) | 0xF01A0, 20); 1212 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1213 1214// //Force TXI(Q)P(N) to normal control 1215 Wb35Reg_WriteSync( pHwData, 0x105c, pHwData->reg.BB5C ); 1216 pHwData->reg.BB50 &= ~0x13;//(MASK_IQCAL_MODE|MASK_CALIB_START); 1217 Wb35Reg_WriteSync( pHwData, 0x1050, pHwData->reg.BB50); 1218 break; 1219 1220 case RF_AIROHA_7230: 1221 1222 //RF parameters have filled completely, PLL_ON should be 1223 //pulled high 1224 Wb35Reg_WriteSync( pHwData, 0x03dc, 0x00000080 ); 1225 #ifdef _PE_STATE_DUMP_ 1226 printk("* PLL_ON high\n"); 1227 #endif 1228 1229 //2.4GHz 1230 //ltmp = (1 << 31) | (0 << 30) | (24 << 24) | 0x1ABA8F; 1231 //Wb35Reg_WriteSync pHwData, 0x0864, ltmp ); 1232 //msleep(1); // Sleep 1 ms 1233 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | 0x9ABA8F; 1234 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1235 msleep(5); 1236 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | 0x3ABA8F; 1237 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1238 msleep(5); 1239 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | 0x1ABA8F; 1240 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1241 msleep(5); 1242 1243 //5GHz 1244 Wb35Reg_WriteSync( pHwData, 0x03dc, 0x00000000 ); 1245 #ifdef _PE_STATE_DUMP_ 1246 printk("* PLL_ON low\n"); 1247 #endif 1248 1249 number = sizeof(al7230_rf_data_50)/sizeof(al7230_rf_data_50[0]); 1250 Set_ChanIndep_RfData_al7230_50(pHwData, pltmp, number); 1251 // Write to register. number must less and equal than 16 1252 for( i=0; i<number; i++ ) 1253 Wb35Reg_WriteSync( pHwData, 0x0864, pltmp[i] ); 1254 msleep(5); 1255 1256 Wb35Reg_WriteSync( pHwData, 0x03dc, 0x00000080 ); 1257 #ifdef _PE_STATE_DUMP_ 1258 printk("* PLL_ON high\n"); 1259 #endif 1260 1261 //ltmp = (1 << 31) | (0 << 30) | (24 << 24) | 0x12BACF; 1262 //Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1263 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | 0x9ABA8F; 1264 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1265 msleep(5); 1266 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | 0x3ABA8F; 1267 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1268 msleep(5); 1269 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | 0x12BACF; 1270 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1271 msleep(5); 1272 1273 //Wb35Reg_WriteSync( pHwData, 0x03dc, 0x00000080 ); 1274 //printk("* PLL_ON high\n"); 1275 break; 1276 1277 case RF_WB_242: 1278 case RF_WB_242_1: // 20060619.5 Add 1279 1280 // 1281 // ; Version 1.3B revision items: for FA5976A , October 3, 2005 by HTHo 1282 // 1283 ltmp = pHwData->reg.BB5C & 0xfffff000; 1284 Wb35Reg_WriteSync( pHwData, 0x105c, ltmp ); 1285 Wb35Reg_WriteSync( pHwData, 0x1058, 0 ); 1286 pHwData->reg.BB50 |= 0x3;//(MASK_IQCAL_MODE|MASK_CALIB_START);//20060630 1287 Wb35Reg_WriteSync(pHwData, 0x1050, pHwData->reg.BB50); 1288 1289 //----- Calibration (1). VCO frequency calibration 1290 //Calibration (1a.0). Synthesizer reset (HTHo corrected 2005/05/10) 1291 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x0F<<24) | 0x00101E, 24); 1292 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1293 msleep(5); // Sleep 5ms 1294 //Calibration (1a). VCO frequency calibration mode ; waiting 2msec VCO calibration time 1295 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFE69c0, 24); 1296 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1297 msleep(2); // Sleep 2ms 1298 1299 //----- Calibration (2). TX baseband Gm-C filter auto-tuning 1300 //Calibration (2a). turn off ENCAL signal 1301 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xF8EBC0, 24); 1302 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1303 //Calibration (2b.0). TX filter auto-tuning BW: TFLBW=101 (TC5376A default) 1304 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x07<<24) | 0x0C68CE, 24); 1305 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1306 //Calibration (2b). send TX reset signal (HTHo corrected May 10, 2005) 1307 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x0F<<24) | 0x00201E, 24); 1308 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1309 //Calibration (2c). turn-on TX Gm-C filter auto-tuning 1310 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFCEBC0, 24); 1311 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1312 udelay(150); // Sleep 150 us 1313 //turn off ENCAL signal 1314 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xF8EBC0, 24); 1315 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1316 1317 //----- Calibration (3). RX baseband Gm-C filter auto-tuning 1318 //Calibration (3a). turn off ENCAL signal 1319 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFAEDC0, 24); 1320 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1321 //Calibration (3b.0). RX filter auto-tuning BW: RFLBW=100 (TC5376A+corner default; July 26, 2005) 1322 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x07<<24) | 0x0C68CE, 24); 1323 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1324 //Calibration (3b). send RX reset signal (HTHo corrected May 10, 2005) 1325 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x0F<<24) | 0x00401E, 24); 1326 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1327 //Calibration (3c). turn-on RX Gm-C filter auto-tuning 1328 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFEEDC0, 24); 1329 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1330 udelay(150); // Sleep 150 us 1331 //Calibration (3e). turn off ENCAL signal 1332 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFAEDC0, 24); 1333 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1334 1335 //----- Calibration (4). TX LO leakage calibration 1336 //Calibration (4a). TX LO leakage calibration 1337 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFD6BC0, 24); 1338 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1339 udelay(150); // Sleep 150 us 1340 1341 //----- Calibration (5). RX DC offset calibration 1342 //Calibration (5a). turn off ENCAL signal and set to RX SW DC caliration mode 1343 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFAEDC0, 24); 1344 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1345 //Calibration (5b). turn off AGC servo-loop & RSSI 1346 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x01<<24) | 0xEBFFC2, 24); 1347 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1348 1349 //; for LNA=11 -------- 1350 //Calibration (5c-h). RX DC offset current bias ON; & LNA=11; RXVGA=111111 1351 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x06<<24) | 0x343FCC, 24); 1352 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1353 //Calibration (5d). turn on RX DC offset cal function; and waiting 2 msec cal time 1354 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFF6DC0, 24); 1355 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1356 msleep(2); // Sleep 2ms 1357 //Calibration (5f). turn off ENCAL signal 1358 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFAEDC0, 24); 1359 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1360 1361 //; for LNA=10 -------- 1362 //Calibration (5c-m). RX DC offset current bias ON; & LNA=10; RXVGA=111111 1363 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x06<<24) | 0x342FCC, 24); 1364 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1365 //Calibration (5d). turn on RX DC offset cal function; and waiting 2 msec cal time 1366 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFF6DC0, 24); 1367 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1368 msleep(2); // Sleep 2ms 1369 //Calibration (5f). turn off ENCAL signal 1370 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFAEDC0, 24); 1371 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1372 1373 //; for LNA=01 -------- 1374 //Calibration (5c-m). RX DC offset current bias ON; & LNA=01; RXVGA=111111 1375 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x06<<24) | 0x341FCC, 24); 1376 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1377 //Calibration (5d). turn on RX DC offset cal function; and waiting 2 msec cal time 1378 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFF6DC0, 24); 1379 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1380 msleep(2); // Sleep 2ms 1381 //Calibration (5f). turn off ENCAL signal 1382 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFAEDC0, 24); 1383 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1384 1385 //; for LNA=00 -------- 1386 //Calibration (5c-l). RX DC offset current bias ON; & LNA=00; RXVGA=111111 1387 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x06<<24) | 0x340FCC, 24); 1388 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1389 //Calibration (5d). turn on RX DC offset cal function; and waiting 2 msec cal time 1390 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFF6DC0, 24); 1391 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1392 msleep(2); // Sleep 2ms 1393 //Calibration (5f). turn off ENCAL signal 1394 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFAEDC0, 24); 1395 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1396 //Calibration (5g). turn on AGC servo-loop 1397 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x01<<24) | 0xEFFFC2, 24); 1398 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1399 1400 //; ----- Calibration (7). Switch RF chip to normal mode 1401 //0x00 0xF86100 ; 3E184 ; Switch RF chip to normal mode 1402// msleep(10); // @@ 20060721 1403 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xF86100, 24); 1404 Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); 1405 msleep(5); // Sleep 5 ms 1406 1407// //write back 1408// Wb35Reg_WriteSync(pHwData, 0x105c, pHwData->reg.BB5C); 1409// pHwData->reg.BB50 &= ~0x13;//(MASK_IQCAL_MODE|MASK_CALIB_START); // 20060315.1 fix 1410// Wb35Reg_WriteSync(pHwData, 0x1050, pHwData->reg.BB50); 1411// msleep(1); // Sleep 1 ms 1412 break; 1413 } 1414} 1415 1416void BBProcessor_AL7230_2400( struct hw_data * pHwData) 1417{ 1418 struct wb35_reg *reg = &pHwData->reg; 1419 u32 pltmp[12]; 1420 1421 pltmp[0] = 0x16A8337A; // 0x16a5215f; // 0x1000 AGC_Ctrl1 1422 pltmp[1] = 0x9AFF9AA6; // 0x9aff9ca6; // 0x1004 AGC_Ctrl2 1423 pltmp[2] = 0x55D00A04; // 0x55d00a04; // 0x1008 AGC_Ctrl3 1424 pltmp[3] = 0xFFF72031; // 0xFfFf2138; // 0x100c AGC_Ctrl4 1425 reg->BB0C = 0xFFF72031; 1426 pltmp[4] = 0x0FacDCC5; // 0x1010 AGC_Ctrl5 // 20050927 0x0FacDCB7 1427 pltmp[5] = 0x00CAA333; // 0x00eaa333; // 0x1014 AGC_Ctrl6 1428 pltmp[6] = 0xF2211111; // 0x11111111; // 0x1018 AGC_Ctrl7 1429 pltmp[7] = 0x0FA3F0ED; // 0x101c AGC_Ctrl8 1430 pltmp[8] = 0x06443440; // 0x1020 AGC_Ctrl9 1431 pltmp[9] = 0xA8002A79; // 0xa9002A79; // 0x1024 AGC_Ctrl10 1432 pltmp[10] = 0x40000528; // 20050927 0x40000228 1433 pltmp[11] = 0x232D7F30; // 0x23457f30;// 0x102c A_ACQ_Ctrl 1434 reg->BB2C = 0x232D7F30; 1435 Wb35Reg_BurstWrite( pHwData, 0x1000, pltmp, 12, AUTO_INCREMENT ); 1436 1437 pltmp[0] = 0x00002c54; // 0x1030 B_ACQ_Ctrl 1438 reg->BB30 = 0x00002c54; 1439 pltmp[1] = 0x00C0D6C5; // 0x1034 A_TXRX_Ctrl 1440 pltmp[2] = 0x5B2C8769; // 0x1038 B_TXRX_Ctrl 1441 pltmp[3] = 0x00000000; // 0x103c 11a TX LS filter 1442 reg->BB3C = 0x00000000; 1443 pltmp[4] = 0x00003F29; // 0x1040 11a TX LS filter 1444 pltmp[5] = 0x0EFEFBFE; // 0x1044 11a TX LS filter 1445 pltmp[6] = 0x00332C1B; // 0x00453B24; // 0x1048 11b TX RC filter 1446 pltmp[7] = 0x0A00FEFF; // 0x0E00FEFF; // 0x104c 11b TX RC filter 1447 pltmp[8] = 0x2B106208; // 0x1050 MODE_Ctrl 1448 reg->BB50 = 0x2B106208; 1449 pltmp[9] = 0; // 0x1054 1450 reg->BB54 = 0x00000000; 1451 pltmp[10] = 0x52524242; // 0x64645252; // 0x1058 IQ_Alpha 1452 reg->BB58 = 0x52524242; 1453 pltmp[11] = 0xAA0AC000; // 0x105c DC_Cancel 1454 Wb35Reg_BurstWrite( pHwData, 0x1030, pltmp, 12, AUTO_INCREMENT ); 1455 1456} 1457 1458void BBProcessor_AL7230_5000( struct hw_data * pHwData) 1459{ 1460 struct wb35_reg *reg = &pHwData->reg; 1461 u32 pltmp[12]; 1462 1463 pltmp[0] = 0x16AA6678; // 0x1000 AGC_Ctrl1 1464 pltmp[1] = 0x9AFFA0B2; // 0x1004 AGC_Ctrl2 1465 pltmp[2] = 0x55D00A04; // 0x1008 AGC_Ctrl3 1466 pltmp[3] = 0xEFFF233E; // 0x100c AGC_Ctrl4 1467 reg->BB0C = 0xEFFF233E; 1468 pltmp[4] = 0x0FacDCC5; // 0x1010 AGC_Ctrl5 // 20050927 0x0FacDCB7 1469 pltmp[5] = 0x00CAA333; // 0x1014 AGC_Ctrl6 1470 pltmp[6] = 0xF2432111; // 0x1018 AGC_Ctrl7 1471 pltmp[7] = 0x0FA3F0ED; // 0x101c AGC_Ctrl8 1472 pltmp[8] = 0x05C43440; // 0x1020 AGC_Ctrl9 1473 pltmp[9] = 0x00002A79; // 0x1024 AGC_Ctrl10 1474 pltmp[10] = 0x40000528; // 20050927 0x40000228 1475 pltmp[11] = 0x232FDF30;// 0x102c A_ACQ_Ctrl 1476 reg->BB2C = 0x232FDF30; 1477 Wb35Reg_BurstWrite( pHwData, 0x1000, pltmp, 12, AUTO_INCREMENT ); 1478 1479 pltmp[0] = 0x80002C7C; // 0x1030 B_ACQ_Ctrl 1480 pltmp[1] = 0x00C0D6C5; // 0x1034 A_TXRX_Ctrl 1481 pltmp[2] = 0x5B2C8769; // 0x1038 B_TXRX_Ctrl 1482 pltmp[3] = 0x00000000; // 0x103c 11a TX LS filter 1483 reg->BB3C = 0x00000000; 1484 pltmp[4] = 0x00003F29; // 0x1040 11a TX LS filter 1485 pltmp[5] = 0x0EFEFBFE; // 0x1044 11a TX LS filter 1486 pltmp[6] = 0x00332C1B; // 0x1048 11b TX RC filter 1487 pltmp[7] = 0x0A00FEFF; // 0x104c 11b TX RC filter 1488 pltmp[8] = 0x2B107208; // 0x1050 MODE_Ctrl 1489 reg->BB50 = 0x2B107208; 1490 pltmp[9] = 0; // 0x1054 1491 reg->BB54 = 0x00000000; 1492 pltmp[10] = 0x52524242; // 0x1058 IQ_Alpha 1493 reg->BB58 = 0x52524242; 1494 pltmp[11] = 0xAA0AC000; // 0x105c DC_Cancel 1495 Wb35Reg_BurstWrite( pHwData, 0x1030, pltmp, 12, AUTO_INCREMENT ); 1496 1497} 1498 1499//============================================================================================================= 1500// BBProcessorPowerupInit -- 1501// 1502// Description: 1503// Initialize the Baseband processor. 1504// 1505// Arguments: 1506// pHwData - Handle of the USB Device. 1507// 1508// Return values: 1509// None. 1510//============================================================================================================= 1511void 1512BBProcessor_initial( struct hw_data * pHwData ) 1513{ 1514 struct wb35_reg *reg = &pHwData->reg; 1515 u32 i, pltmp[12]; 1516 1517 switch( pHwData->phy_type ) 1518 { 1519 case RF_MAXIM_V1: // Initializng the Winbond 2nd BB(with Phy board (v1) + Maxim 331) 1520 1521 pltmp[0] = 0x16F47E77; // 0x1000 AGC_Ctrl1 1522 pltmp[1] = 0x9AFFAEA4; // 0x1004 AGC_Ctrl2 1523 pltmp[2] = 0x55D00A04; // 0x1008 AGC_Ctrl3 1524 pltmp[3] = 0xEFFF1A34; // 0x100c AGC_Ctrl4 1525 reg->BB0C = 0xEFFF1A34; 1526 pltmp[4] = 0x0FABE0B7; // 0x1010 AGC_Ctrl5 1527 pltmp[5] = 0x00CAA332; // 0x1014 AGC_Ctrl6 1528 pltmp[6] = 0xF6632111; // 0x1018 AGC_Ctrl7 1529 pltmp[7] = 0x0FA3F0ED; // 0x101c AGC_Ctrl8 1530 pltmp[8] = 0x04CC3640; // 0x1020 AGC_Ctrl9 1531 pltmp[9] = 0x00002A79; // 0x1024 AGC_Ctrl10 1532 pltmp[10] = (pHwData->phy_type==3) ? 0x40000a28 : 0x40000228; // 0x1028 MAXIM_331(b31=0) + WBRF_V1(b11=1) : MAXIM_331(b31=0) + WBRF_V2(b11=0) 1533 pltmp[11] = 0x232FDF30; // 0x102c A_ACQ_Ctrl 1534 reg->BB2C = 0x232FDF30; //Modify for 33's 1.0.95.xxx version, antenna 1 1535 Wb35Reg_BurstWrite( pHwData, 0x1000, pltmp, 12, AUTO_INCREMENT ); 1536 1537 pltmp[0] = 0x00002C54; // 0x1030 B_ACQ_Ctrl 1538 reg->BB30 = 0x00002C54; 1539 pltmp[1] = 0x00C0D6C5; // 0x1034 A_TXRX_Ctrl 1540 pltmp[2] = 0x5B6C8769; // 0x1038 B_TXRX_Ctrl 1541 pltmp[3] = 0x00000000; // 0x103c 11a TX LS filter 1542 reg->BB3C = 0x00000000; 1543 pltmp[4] = 0x00003F29; // 0x1040 11a TX LS filter 1544 pltmp[5] = 0x0EFEFBFE; // 0x1044 11a TX LS filter 1545 pltmp[6] = 0x00453B24; // 0x1048 11b TX RC filter 1546 pltmp[7] = 0x0E00FEFF; // 0x104c 11b TX RC filter 1547 pltmp[8] = 0x27106208; // 0x1050 MODE_Ctrl 1548 reg->BB50 = 0x27106208; 1549 pltmp[9] = 0; // 0x1054 1550 reg->BB54 = 0x00000000; 1551 pltmp[10] = 0x64646464; // 0x1058 IQ_Alpha 1552 reg->BB58 = 0x64646464; 1553 pltmp[11] = 0xAA0AC000; // 0x105c DC_Cancel 1554 Wb35Reg_BurstWrite( pHwData, 0x1030, pltmp, 12, AUTO_INCREMENT ); 1555 1556 Wb35Reg_Write( pHwData, 0x1070, 0x00000045 ); 1557 break; 1558 1559 //------------------------------------------------------------------ 1560 //[20040722 WK] 1561 //Only for baseband version 2 1562// case RF_MAXIM_317: 1563 case RF_MAXIM_2825: 1564 case RF_MAXIM_2827: 1565 case RF_MAXIM_2828: 1566 1567 pltmp[0] = 0x16b47e77; // 0x1000 AGC_Ctrl1 1568 pltmp[1] = 0x9affaea4; // 0x1004 AGC_Ctrl2 1569 pltmp[2] = 0x55d00a04; // 0x1008 AGC_Ctrl3 1570 pltmp[3] = 0xefff1a34; // 0x100c AGC_Ctrl4 1571 reg->BB0C = 0xefff1a34; 1572 pltmp[4] = 0x0fabe0b7; // 0x1010 AGC_Ctrl5 1573 pltmp[5] = 0x00caa332; // 0x1014 AGC_Ctrl6 1574 pltmp[6] = 0xf6632111; // 0x1018 AGC_Ctrl7 1575 pltmp[7] = 0x0FA3F0ED; // 0x101c AGC_Ctrl8 1576 pltmp[8] = 0x04CC3640; // 0x1020 AGC_Ctrl9 1577 pltmp[9] = 0x00002A79; // 0x1024 AGC_Ctrl10 1578 pltmp[10] = 0x40000528; // 0x40000128; Modify for 33's 1.0.95 1579 pltmp[11] = 0x232fdf30; // 0x102c A_ACQ_Ctrl 1580 reg->BB2C = 0x232fdf30; //Modify for 33's 1.0.95.xxx version, antenna 1 1581 Wb35Reg_BurstWrite( pHwData, 0x1000, pltmp, 12, AUTO_INCREMENT ); 1582 1583 pltmp[0] = 0x00002C54; // 0x1030 B_ACQ_Ctrl 1584 reg->BB30 = 0x00002C54; 1585 pltmp[1] = 0x00C0D6C5; // 0x1034 A_TXRX_Ctrl 1586 pltmp[2] = 0x5B6C8769; // 0x1038 B_TXRX_Ctrl 1587 pltmp[3] = 0x00000000; // 0x103c 11a TX LS filter 1588 reg->BB3C = 0x00000000; 1589 pltmp[4] = 0x00003F29; // 0x1040 11a TX LS filter 1590 pltmp[5] = 0x0EFEFBFE; // 0x1044 11a TX LS filter 1591 pltmp[6] = 0x00453B24; // 0x1048 11b TX RC filter 1592 pltmp[7] = 0x0D00FDFF; // 0x104c 11b TX RC filter 1593 pltmp[8] = 0x27106208; // 0x1050 MODE_Ctrl 1594 reg->BB50 = 0x27106208; 1595 pltmp[9] = 0; // 0x1054 1596 reg->BB54 = 0x00000000; 1597 pltmp[10] = 0x64646464; // 0x1058 IQ_Alpha 1598 reg->BB58 = 0x64646464; 1599 pltmp[11] = 0xAA28C000; // 0x105c DC_Cancel 1600 Wb35Reg_BurstWrite( pHwData, 0x1030, pltmp, 12, AUTO_INCREMENT ); 1601 1602 Wb35Reg_Write( pHwData, 0x1070, 0x00000045 ); 1603 break; 1604 1605 case RF_MAXIM_2829: 1606 1607 pltmp[0] = 0x16b47e77; // 0x1000 AGC_Ctrl1 1608 pltmp[1] = 0x9affaea4; // 0x1004 AGC_Ctrl2 1609 pltmp[2] = 0x55d00a04; // 0x1008 AGC_Ctrl3 1610 pltmp[3] = 0xf4ff1632; // 0xefff1a34; // 0x100c AGC_Ctrl4 Modify for 33's 1.0.95 1611 reg->BB0C = 0xf4ff1632; // 0xefff1a34; Modify for 33's 1.0.95 1612 pltmp[4] = 0x0fabe0b7; // 0x1010 AGC_Ctrl5 1613 pltmp[5] = 0x00caa332; // 0x1014 AGC_Ctrl6 1614 pltmp[6] = 0xf8632112; // 0xf6632111; // 0x1018 AGC_Ctrl7 Modify for 33's 1.0.95 1615 pltmp[7] = 0x0FA3F0ED; // 0x101c AGC_Ctrl8 1616 pltmp[8] = 0x04CC3640; // 0x1020 AGC_Ctrl9 1617 pltmp[9] = 0x00002A79; // 0x1024 AGC_Ctrl10 1618 pltmp[10] = 0x40000528; // 0x40000128; modify for 33's 1.0.95 1619 pltmp[11] = 0x232fdf30; // 0x102c A_ACQ_Ctrl 1620 reg->BB2C = 0x232fdf30; //Modify for 33's 1.0.95.xxx version, antenna 1 1621 Wb35Reg_BurstWrite( pHwData, 0x1000, pltmp, 12, AUTO_INCREMENT ); 1622 1623 pltmp[0] = 0x00002C54; // 0x1030 B_ACQ_Ctrl 1624 reg->BB30 = 0x00002C54; 1625 pltmp[1] = 0x00C0D6C5; // 0x1034 A_TXRX_Ctrl 1626 pltmp[2] = 0x5b2c8769; // 0x5B6C8769; // 0x1038 B_TXRX_Ctrl Modify for 33's 1.0.95 1627 pltmp[3] = 0x00000000; // 0x103c 11a TX LS filter 1628 reg->BB3C = 0x00000000; 1629 pltmp[4] = 0x00003F29; // 0x1040 11a TX LS filter 1630 pltmp[5] = 0x0EFEFBFE; // 0x1044 11a TX LS filter 1631 pltmp[6] = 0x002c2617; // 0x00453B24; // 0x1048 11b TX RC filter Modify for 33's 1.0.95 1632 pltmp[7] = 0x0800feff; // 0x0D00FDFF; // 0x104c 11b TX RC filter Modify for 33's 1.0.95 1633 pltmp[8] = 0x27106208; // 0x1050 MODE_Ctrl 1634 reg->BB50 = 0x27106208; 1635 pltmp[9] = 0; // 0x1054 1636 reg->BB54 = 0x00000000; 1637 pltmp[10] = 0x64644a4a; // 0x64646464; // 0x1058 IQ_Alpha Modify for 33's 1.0.95 1638 reg->BB58 = 0x64646464; 1639 pltmp[11] = 0xAA28C000; // 0x105c DC_Cancel 1640 Wb35Reg_BurstWrite( pHwData, 0x1030, pltmp, 12, AUTO_INCREMENT ); 1641 1642 Wb35Reg_Write( pHwData, 0x1070, 0x00000045 ); 1643 break; 1644 1645 case RF_AIROHA_2230: 1646 1647 pltmp[0] = 0X16764A77; // 0x1000 AGC_Ctrl1 //0x16765A77 1648 pltmp[1] = 0x9affafb2; // 0x1004 AGC_Ctrl2 1649 pltmp[2] = 0x55d00a04; // 0x1008 AGC_Ctrl3 1650 pltmp[3] = 0xFFFd203c; // 0xFFFb203a; // 0x100c AGC_Ctrl4 Modify for 33's 1.0.95.xxx version 1651 reg->BB0C = 0xFFFd203c; 1652 pltmp[4] = 0X0FBFDCc5; // 0X0FBFDCA0; // 0x1010 AGC_Ctrl5 //0x0FB2E0B7 Modify for 33's 1.0.95.xxx version 1653 pltmp[5] = 0x00caa332; // 0x00caa333; // 0x1014 AGC_Ctrl6 Modify for 33's 1.0.95.xxx version 1654 pltmp[6] = 0XF6632111; // 0XF1632112; // 0x1018 AGC_Ctrl7 //0xf6632112 Modify for 33's 1.0.95.xxx version 1655 pltmp[7] = 0x0FA3F0ED; // 0x101c AGC_Ctrl8 1656 pltmp[8] = 0x04C43640; // 0x1020 AGC_Ctrl9 1657 pltmp[9] = 0x00002A79; // 0x1024 AGC_Ctrl10 1658 pltmp[10] = 0X40000528; //0x40000228 1659 pltmp[11] = 0x232dfF30; // 0x232A9F30; // 0x102c A_ACQ_Ctrl //0x232a9730 1660 reg->BB2C = 0x232dfF30; //Modify for 33's 1.0.95.xxx version, antenna 1 1661 Wb35Reg_BurstWrite( pHwData, 0x1000, pltmp, 12, AUTO_INCREMENT ); 1662 1663 pltmp[0] = 0x00002C54; // 0x1030 B_ACQ_Ctrl 1664 reg->BB30 = 0x00002C54; 1665 pltmp[1] = 0x00C0D6C5; // 0x1034 A_TXRX_Ctrl 1666 pltmp[2] = 0x5B2C8769; // 0x1038 B_TXRX_Ctrl //0x5B6C8769 1667 pltmp[3] = 0x00000000; // 0x103c 11a TX LS filter 1668 reg->BB3C = 0x00000000; 1669 pltmp[4] = 0x00003F29; // 0x1040 11a TX LS filter 1670 pltmp[5] = 0x0EFEFBFE; // 0x1044 11a TX LS filter 1671 pltmp[6] = BB48_DEFAULT_AL2230_11G; // 0x1048 11b TX RC filter 20060613.2 1672 reg->BB48 = BB48_DEFAULT_AL2230_11G; // 20051221 ch14 20060613.2 1673 pltmp[7] = BB4C_DEFAULT_AL2230_11G; // 0x104c 11b TX RC filter 20060613.2 1674 reg->BB4C = BB4C_DEFAULT_AL2230_11G; // 20060613.1 20060613.2 1675 pltmp[8] = 0x27106200; // 0x1050 MODE_Ctrl 1676 reg->BB50 = 0x27106200; 1677 pltmp[9] = 0; // 0x1054 1678 reg->BB54 = 0x00000000; 1679 pltmp[10] = 0x52524242; // 0x1058 IQ_Alpha 1680 reg->BB58 = 0x52524242; 1681 pltmp[11] = 0xAA0AC000; // 0x105c DC_Cancel 1682 Wb35Reg_BurstWrite( pHwData, 0x1030, pltmp, 12, AUTO_INCREMENT ); 1683 1684 Wb35Reg_Write( pHwData, 0x1070, 0x00000045 ); 1685 break; 1686 1687 case RF_AIROHA_2230S: // 20060420 Add this 1688 1689 pltmp[0] = 0X16764A77; // 0x1000 AGC_Ctrl1 //0x16765A77 1690 pltmp[1] = 0x9affafb2; // 0x1004 AGC_Ctrl2 1691 pltmp[2] = 0x55d00a04; // 0x1008 AGC_Ctrl3 1692 pltmp[3] = 0xFFFd203c; // 0xFFFb203a; // 0x100c AGC_Ctrl4 Modify for 33's 1.0.95.xxx version 1693 reg->BB0C = 0xFFFd203c; 1694 pltmp[4] = 0X0FBFDCc5; // 0X0FBFDCA0; // 0x1010 AGC_Ctrl5 //0x0FB2E0B7 Modify for 33's 1.0.95.xxx version 1695 pltmp[5] = 0x00caa332; // 0x00caa333; // 0x1014 AGC_Ctrl6 Modify for 33's 1.0.95.xxx version 1696 pltmp[6] = 0XF6632111; // 0XF1632112; // 0x1018 AGC_Ctrl7 //0xf6632112 Modify for 33's 1.0.95.xxx version 1697 pltmp[7] = 0x0FA3F0ED; // 0x101c AGC_Ctrl8 1698 pltmp[8] = 0x04C43640; // 0x1020 AGC_Ctrl9 1699 pltmp[9] = 0x00002A79; // 0x1024 AGC_Ctrl10 1700 pltmp[10] = 0X40000528; //0x40000228 1701 pltmp[11] = 0x232dfF30; // 0x232A9F30; // 0x102c A_ACQ_Ctrl //0x232a9730 1702 reg->BB2C = 0x232dfF30; //Modify for 33's 1.0.95.xxx version, antenna 1 1703 Wb35Reg_BurstWrite( pHwData, 0x1000, pltmp, 12, AUTO_INCREMENT ); 1704 1705 pltmp[0] = 0x00002C54; // 0x1030 B_ACQ_Ctrl 1706 reg->BB30 = 0x00002C54; 1707 pltmp[1] = 0x00C0D6C5; // 0x1034 A_TXRX_Ctrl 1708 pltmp[2] = 0x5B2C8769; // 0x1038 B_TXRX_Ctrl //0x5B6C8769 1709 pltmp[3] = 0x00000000; // 0x103c 11a TX LS filter 1710 reg->BB3C = 0x00000000; 1711 pltmp[4] = 0x00003F29; // 0x1040 11a TX LS filter 1712 pltmp[5] = 0x0EFEFBFE; // 0x1044 11a TX LS filter 1713 pltmp[6] = BB48_DEFAULT_AL2230_11G; // 0x1048 11b TX RC filter 20060613.2 1714 reg->BB48 = BB48_DEFAULT_AL2230_11G; // 20051221 ch14 20060613.2 1715 pltmp[7] = BB4C_DEFAULT_AL2230_11G; // 0x104c 11b TX RC filter 20060613.2 1716 reg->BB4C = BB4C_DEFAULT_AL2230_11G; // 20060613.1 1717 pltmp[8] = 0x27106200; // 0x1050 MODE_Ctrl 1718 reg->BB50 = 0x27106200; 1719 pltmp[9] = 0; // 0x1054 1720 reg->BB54 = 0x00000000; 1721 pltmp[10] = 0x52523232; // 20060419 0x52524242; // 0x1058 IQ_Alpha 1722 reg->BB58 = 0x52523232; // 20060419 0x52524242; 1723 pltmp[11] = 0xAA0AC000; // 0x105c DC_Cancel 1724 Wb35Reg_BurstWrite( pHwData, 0x1030, pltmp, 12, AUTO_INCREMENT ); 1725 1726 Wb35Reg_Write( pHwData, 0x1070, 0x00000045 ); 1727 break; 1728 1729 case RF_AIROHA_7230: 1730/* 1731 pltmp[0] = 0x16a84a77; // 0x1000 AGC_Ctrl1 1732 pltmp[1] = 0x9affafb2; // 0x1004 AGC_Ctrl2 1733 pltmp[2] = 0x55d00a04; // 0x1008 AGC_Ctrl3 1734 pltmp[3] = 0xFFFb203a; // 0x100c AGC_Ctrl4 1735 reg->BB0c = 0xFFFb203a; 1736 pltmp[4] = 0x0FBFDCB7; // 0x1010 AGC_Ctrl5 1737 pltmp[5] = 0x00caa333; // 0x1014 AGC_Ctrl6 1738 pltmp[6] = 0xf6632112; // 0x1018 AGC_Ctrl7 1739 pltmp[7] = 0x0FA3F0ED; // 0x101c AGC_Ctrl8 1740 pltmp[8] = 0x04C43640; // 0x1020 AGC_Ctrl9 1741 pltmp[9] = 0x00002A79; // 0x1024 AGC_Ctrl10 1742 pltmp[10] = 0x40000228; 1743 pltmp[11] = 0x232A9F30;// 0x102c A_ACQ_Ctrl 1744 reg->BB2c = 0x232A9F30; 1745 Wb35Reg_BurstWrite( pHwData, 0x1000, pltmp, 12, AUTO_INCREMENT ); 1746 1747 pltmp[0] = 0x00002C54; // 0x1030 B_ACQ_Ctrl 1748 reg->BB30 = 0x00002C54; 1749 pltmp[1] = 0x00C0D6C5; // 0x1034 A_TXRX_Ctrl 1750 pltmp[2] = 0x5B2C8769; // 0x1038 B_TXRX_Ctrl 1751 pltmp[3] = 0x00000000; // 0x103c 11a TX LS filter 1752 reg->BB3c = 0x00000000; 1753 pltmp[4] = 0x00003F29; // 0x1040 11a TX LS filter 1754 pltmp[5] = 0x0EFEFBFE; // 0x1044 11a TX LS filter 1755 pltmp[6] = 0x00453B24; // 0x1048 11b TX RC filter 1756 pltmp[7] = 0x0E00FEFF; // 0x104c 11b TX RC filter 1757 pltmp[8] = 0x27106200; // 0x1050 MODE_Ctrl 1758 reg->BB50 = 0x27106200; 1759 pltmp[9] = 0; // 0x1054 1760 reg->BB54 = 0x00000000; 1761 pltmp[10] = 0x64645252; // 0x1058 IQ_Alpha 1762 reg->BB58 = 0x64645252; 1763 pltmp[11] = 0xAA0AC000; // 0x105c DC_Cancel 1764 Wb35Reg_BurstWrite( pHwData, 0x1030, pltmp, 12, AUTO_INCREMENT ); 1765*/ 1766 BBProcessor_AL7230_2400( pHwData ); 1767 1768 Wb35Reg_Write( pHwData, 0x1070, 0x00000045 ); 1769 break; 1770 1771 case RF_WB_242: 1772 case RF_WB_242_1: // 20060619.5 Add 1773 1774 pltmp[0] = 0x16A8525D; // 0x1000 AGC_Ctrl1 1775 pltmp[1] = 0x9AFF9ABA; // 0x1004 AGC_Ctrl2 1776 pltmp[2] = 0x55D00A04; // 0x1008 AGC_Ctrl3 1777 pltmp[3] = 0xEEE91C32; // 0x100c AGC_Ctrl4 1778 reg->BB0C = 0xEEE91C32; 1779 pltmp[4] = 0x0FACDCC5; // 0x1010 AGC_Ctrl5 1780 pltmp[5] = 0x000AA344; // 0x1014 AGC_Ctrl6 1781 pltmp[6] = 0x22222221; // 0x1018 AGC_Ctrl7 1782 pltmp[7] = 0x0FA3F0ED; // 0x101c AGC_Ctrl8 1783 pltmp[8] = 0x04CC3440; // 20051018 0x03CB3440; // 0x1020 AGC_Ctrl9 20051014 0x03C33440 1784 pltmp[9] = 0xA9002A79; // 0x1024 AGC_Ctrl10 1785 pltmp[10] = 0x40000528; // 0x1028 1786 pltmp[11] = 0x23457F30; // 0x102c A_ACQ_Ctrl 1787 reg->BB2C = 0x23457F30; 1788 Wb35Reg_BurstWrite( pHwData, 0x1000, pltmp, 12, AUTO_INCREMENT ); 1789 1790 pltmp[0] = 0x00002C54; // 0x1030 B_ACQ_Ctrl 1791 reg->BB30 = 0x00002C54; 1792 pltmp[1] = 0x00C0D6C5; // 0x1034 A_TXRX_Ctrl 1793 pltmp[2] = 0x5B2C8769; // 0x1038 B_TXRX_Ctrl 1794 pltmp[3] = pHwData->BB3c_cal; // 0x103c 11a TX LS filter 1795 reg->BB3C = pHwData->BB3c_cal; 1796 pltmp[4] = 0x00003F29; // 0x1040 11a TX LS filter 1797 pltmp[5] = 0x0EFEFBFE; // 0x1044 11a TX LS filter 1798 pltmp[6] = BB48_DEFAULT_WB242_11G; // 0x1048 11b TX RC filter 20060613.2 1799 reg->BB48 = BB48_DEFAULT_WB242_11G; // 20060613.1 20060613.2 1800 pltmp[7] = BB4C_DEFAULT_WB242_11G; // 0x104c 11b TX RC filter 20060613.2 1801 reg->BB4C = BB4C_DEFAULT_WB242_11G; // 20060613.1 20060613.2 1802 pltmp[8] = 0x27106208; // 0x1050 MODE_Ctrl 1803 reg->BB50 = 0x27106208; 1804 pltmp[9] = pHwData->BB54_cal; // 0x1054 1805 reg->BB54 = pHwData->BB54_cal; 1806 pltmp[10] = 0x52523131; // 0x1058 IQ_Alpha 1807 reg->BB58 = 0x52523131; 1808 pltmp[11] = 0xAA0AC000; // 20060825 0xAA2AC000; // 0x105c DC_Cancel 1809 Wb35Reg_BurstWrite( pHwData, 0x1030, pltmp, 12, AUTO_INCREMENT ); 1810 1811 Wb35Reg_Write( pHwData, 0x1070, 0x00000045 ); 1812 break; 1813 } 1814 1815 // Fill the LNA table 1816 reg->LNAValue[0] = (u8)(reg->BB0C & 0xff); 1817 reg->LNAValue[1] = 0; 1818 reg->LNAValue[2] = (u8)((reg->BB0C & 0xff00)>>8); 1819 reg->LNAValue[3] = 0; 1820 1821 // Fill SQ3 table 1822 for( i=0; i<MAX_SQ3_FILTER_SIZE; i++ ) 1823 reg->SQ3_filter[i] = 0x2f; // half of Bit 0 ~ 6 1824} 1825 1826void set_tx_power_per_channel_max2829( struct hw_data * pHwData, ChanInfo Channel) 1827{ 1828 RFSynthesizer_SetPowerIndex( pHwData, 100 ); // 20060620.1 Modify 1829} 1830 1831void set_tx_power_per_channel_al2230( struct hw_data * pHwData, ChanInfo Channel ) 1832{ 1833 u8 index = 100; 1834 1835 if (pHwData->TxVgaFor24[Channel.ChanNo - 1] != 0xff) // 20060620.1 Add 1836 index = pHwData->TxVgaFor24[Channel.ChanNo - 1]; 1837 1838 RFSynthesizer_SetPowerIndex( pHwData, index ); 1839} 1840 1841void set_tx_power_per_channel_al7230( struct hw_data * pHwData, ChanInfo Channel) 1842{ 1843 u8 i, index = 100; 1844 1845 switch ( Channel.band ) 1846 { 1847 case BAND_TYPE_DSSS: 1848 case BAND_TYPE_OFDM_24: 1849 { 1850 if (pHwData->TxVgaFor24[Channel.ChanNo - 1] != 0xff) 1851 index = pHwData->TxVgaFor24[Channel.ChanNo - 1]; 1852 } 1853 break; 1854 case BAND_TYPE_OFDM_5: 1855 { 1856 for (i =0; i<35; i++) 1857 { 1858 if (Channel.ChanNo == pHwData->TxVgaFor50[i].ChanNo) 1859 { 1860 if (pHwData->TxVgaFor50[i].TxVgaValue != 0xff) 1861 index = pHwData->TxVgaFor50[i].TxVgaValue; 1862 break; 1863 } 1864 } 1865 } 1866 break; 1867 } 1868 RFSynthesizer_SetPowerIndex( pHwData, index ); 1869} 1870 1871void set_tx_power_per_channel_wb242( struct hw_data * pHwData, ChanInfo Channel) 1872{ 1873 u8 index = 100; 1874 1875 switch ( Channel.band ) 1876 { 1877 case BAND_TYPE_DSSS: 1878 case BAND_TYPE_OFDM_24: 1879 { 1880 if (pHwData->TxVgaFor24[Channel.ChanNo - 1] != 0xff) 1881 index = pHwData->TxVgaFor24[Channel.ChanNo - 1]; 1882 } 1883 break; 1884 case BAND_TYPE_OFDM_5: 1885 break; 1886 } 1887 RFSynthesizer_SetPowerIndex( pHwData, index ); 1888} 1889 1890//============================================================================================================= 1891// RFSynthesizer_SwitchingChannel -- 1892// 1893// Description: 1894// Swithch the RF channel. 1895// 1896// Arguments: 1897// pHwData - Handle of the USB Device. 1898// Channel - The channel no. 1899// 1900// Return values: 1901// None. 1902//============================================================================================================= 1903void 1904RFSynthesizer_SwitchingChannel( struct hw_data * pHwData, ChanInfo Channel ) 1905{ 1906 struct wb35_reg *reg = &pHwData->reg; 1907 u32 pltmp[16]; // The 16 is the maximum capability of hardware 1908 u32 count, ltmp; 1909 u8 i, j, number; 1910 u8 ChnlTmp; 1911 1912 switch( pHwData->phy_type ) 1913 { 1914 case RF_MAXIM_2825: 1915 case RF_MAXIM_V1: // 11g Winbond 2nd BB(with Phy board (v1) + Maxim 331) 1916 1917 if( Channel.band <= BAND_TYPE_OFDM_24 ) // channel 1 ~ 13 1918 { 1919 for( i=0; i<3; i++ ) 1920 pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2825_channel_data_24[Channel.ChanNo-1][i], 18); 1921 Wb35Reg_BurstWrite( pHwData, 0x0864, pltmp, 3, NO_INCREMENT ); 1922 } 1923 RFSynthesizer_SetPowerIndex( pHwData, 100 ); 1924 break; 1925 1926 case RF_MAXIM_2827: 1927 1928 if( Channel.band <= BAND_TYPE_OFDM_24 ) // channel 1 ~ 13 1929 { 1930 for( i=0; i<3; i++ ) 1931 pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2827_channel_data_24[Channel.ChanNo-1][i], 18); 1932 Wb35Reg_BurstWrite( pHwData, 0x0864, pltmp, 3, NO_INCREMENT ); 1933 } 1934 else if( Channel.band == BAND_TYPE_OFDM_5 ) // channel 36 ~ 64 1935 { 1936 ChnlTmp = (Channel.ChanNo - 36) / 4; 1937 for( i=0; i<3; i++ ) 1938 pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2827_channel_data_50[ChnlTmp][i], 18); 1939 Wb35Reg_BurstWrite( pHwData, 0x0864, pltmp, 3, NO_INCREMENT ); 1940 } 1941 RFSynthesizer_SetPowerIndex( pHwData, 100 ); 1942 break; 1943 1944 case RF_MAXIM_2828: 1945 1946 if( Channel.band <= BAND_TYPE_OFDM_24 ) // channel 1 ~ 13 1947 { 1948 for( i=0; i<3; i++ ) 1949 pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2828_channel_data_24[Channel.ChanNo-1][i], 18); 1950 Wb35Reg_BurstWrite( pHwData, 0x0864, pltmp, 3, NO_INCREMENT ); 1951 } 1952 else if( Channel.band == BAND_TYPE_OFDM_5 ) // channel 36 ~ 64 1953 { 1954 ChnlTmp = (Channel.ChanNo - 36) / 4; 1955 for ( i = 0; i < 3; i++) 1956 pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2828_channel_data_50[ChnlTmp][i], 18); 1957 Wb35Reg_BurstWrite( pHwData, 0x0864, pltmp, 3, NO_INCREMENT ); 1958 } 1959 RFSynthesizer_SetPowerIndex( pHwData, 100 ); 1960 break; 1961 1962 case RF_MAXIM_2829: 1963 1964 if( Channel.band <= BAND_TYPE_OFDM_24) 1965 { 1966 for( i=0; i<3; i++ ) 1967 pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2829_channel_data_24[Channel.ChanNo-1][i], 18); 1968 Wb35Reg_BurstWrite( pHwData, 0x0864, pltmp, 3, NO_INCREMENT ); 1969 } 1970 else if( Channel.band == BAND_TYPE_OFDM_5 ) 1971 { 1972 count = sizeof(max2829_channel_data_50) / sizeof(max2829_channel_data_50[0]); 1973 1974 for( i=0; i<count; i++ ) 1975 { 1976 if( max2829_channel_data_50[i][0] == Channel.ChanNo ) 1977 { 1978 for( j=0; j<3; j++ ) 1979 pltmp[j] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2829_channel_data_50[i][j+1], 18); 1980 Wb35Reg_BurstWrite( pHwData, 0x0864, pltmp, 3, NO_INCREMENT ); 1981 1982 if( (max2829_channel_data_50[i][3] & 0x3FFFF) == 0x2A946 ) 1983 { 1984 ltmp = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( (5<<18)|0x2A906, 18); 1985 Wb35Reg_Write( pHwData, 0x0864, ltmp ); 1986 } 1987 else // 0x2A9C6 1988 { 1989 ltmp = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( (5<<18)|0x2A986, 18); 1990 Wb35Reg_Write( pHwData, 0x0864, ltmp ); 1991 } 1992 } 1993 } 1994 } 1995 set_tx_power_per_channel_max2829( pHwData, Channel ); 1996 break; 1997 1998 case RF_AIROHA_2230: 1999 case RF_AIROHA_2230S: // 20060420 Add this 2000 2001 if( Channel.band <= BAND_TYPE_OFDM_24 ) // channel 1 ~ 14 2002 { 2003 for( i=0; i<2; i++ ) 2004 pltmp[i] = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse( al2230_channel_data_24[Channel.ChanNo-1][i], 20); 2005 Wb35Reg_BurstWrite( pHwData, 0x0864, pltmp, 2, NO_INCREMENT ); 2006 } 2007 set_tx_power_per_channel_al2230( pHwData, Channel ); 2008 break; 2009 2010 case RF_AIROHA_7230: 2011 2012 //Start to fill RF parameters, PLL_ON should be pulled low. 2013 //Wb35Reg_Write( pHwData, 0x03dc, 0x00000000 ); 2014 //printk("* PLL_ON low\n"); 2015 2016 //Channel independent registers 2017 if( Channel.band != pHwData->band) 2018 { 2019 if (Channel.band <= BAND_TYPE_OFDM_24) 2020 { 2021 //Update BB register 2022 BBProcessor_AL7230_2400(pHwData); 2023 2024 number = sizeof(al7230_rf_data_24)/sizeof(al7230_rf_data_24[0]); 2025 Set_ChanIndep_RfData_al7230_24(pHwData, pltmp, number); 2026 } 2027 else 2028 { 2029 //Update BB register 2030 BBProcessor_AL7230_5000(pHwData); 2031 2032 number = sizeof(al7230_rf_data_50)/sizeof(al7230_rf_data_50[0]); 2033 Set_ChanIndep_RfData_al7230_50(pHwData, pltmp, number); 2034 } 2035 2036 // Write to register. number must less and equal than 16 2037 Wb35Reg_BurstWrite( pHwData, 0x0864, pltmp, number, NO_INCREMENT ); 2038 #ifdef _PE_STATE_DUMP_ 2039 printk("Band changed\n"); 2040 #endif 2041 } 2042 2043 if( Channel.band <= BAND_TYPE_OFDM_24 ) // channel 1 ~ 14 2044 { 2045 for( i=0; i<2; i++ ) 2046 pltmp[i] = (1 << 31) | (0 << 30) | (24 << 24) | (al7230_channel_data_24[Channel.ChanNo-1][i]&0xffffff); 2047 Wb35Reg_BurstWrite( pHwData, 0x0864, pltmp, 2, NO_INCREMENT ); 2048 } 2049 else if( Channel.band == BAND_TYPE_OFDM_5 ) 2050 { 2051 //Update Reg12 2052 if ((Channel.ChanNo > 64) && (Channel.ChanNo <= 165)) 2053 { 2054 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | 0x00143c; 2055 Wb35Reg_Write( pHwData, 0x0864, ltmp ); 2056 } 2057 else //reg12 = 0x00147c at Channel 4920 ~ 5320 2058 { 2059 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | 0x00147c; 2060 Wb35Reg_Write( pHwData, 0x0864, ltmp ); 2061 } 2062 2063 count = sizeof(al7230_channel_data_5) / sizeof(al7230_channel_data_5[0]); 2064 2065 for (i=0; i<count; i++) 2066 { 2067 if (al7230_channel_data_5[i][0] == Channel.ChanNo) 2068 { 2069 for( j=0; j<3; j++ ) 2070 pltmp[j] = (1 << 31) | (0 << 30) | (24 << 24) | ( al7230_channel_data_5[i][j+1]&0xffffff); 2071 Wb35Reg_BurstWrite( pHwData, 0x0864, pltmp, 3, NO_INCREMENT ); 2072 } 2073 } 2074 } 2075 set_tx_power_per_channel_al7230(pHwData, Channel); 2076 break; 2077 2078 case RF_WB_242: 2079 case RF_WB_242_1: // 20060619.5 Add 2080 2081 if( Channel.band <= BAND_TYPE_OFDM_24 ) // channel 1 ~ 14 2082 { 2083 ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( w89rf242_channel_data_24[Channel.ChanNo-1][0], 24); 2084 Wb35Reg_Write( pHwData, 0x864, ltmp ); 2085 } 2086 set_tx_power_per_channel_wb242(pHwData, Channel); 2087 break; 2088 } 2089 2090 if( Channel.band <= BAND_TYPE_OFDM_24 ) 2091 { 2092 // BB: select 2.4 GHz, bit[12-11]=00 2093 reg->BB50 &= ~(BIT(11)|BIT(12)); 2094 Wb35Reg_Write( pHwData, 0x1050, reg->BB50 ); // MODE_Ctrl 2095 // MAC: select 2.4 GHz, bit[5]=0 2096 reg->M78_ERPInformation &= ~BIT(5); 2097 Wb35Reg_Write( pHwData, 0x0878, reg->M78_ERPInformation ); 2098 // enable 11b Baseband 2099 reg->BB30 &= ~BIT(31); 2100 Wb35Reg_Write( pHwData, 0x1030, reg->BB30 ); 2101 } 2102 else if( (Channel.band == BAND_TYPE_OFDM_5) ) 2103 { 2104 // BB: select 5 GHz 2105 reg->BB50 &= ~(BIT(11)|BIT(12)); 2106 if (Channel.ChanNo <=64 ) 2107 reg->BB50 |= BIT(12); // 10-5.25GHz 2108 else if ((Channel.ChanNo >= 100) && (Channel.ChanNo <= 124)) 2109 reg->BB50 |= BIT(11); // 01-5.48GHz 2110 else if ((Channel.ChanNo >=128) && (Channel.ChanNo <= 161)) 2111 reg->BB50 |= (BIT(12)|BIT(11)); // 11-5.775GHz 2112 else //Chan 184 ~ 196 will use bit[12-11] = 10 in version sh-src-1.2.25 2113 reg->BB50 |= BIT(12); 2114 Wb35Reg_Write( pHwData, 0x1050, reg->BB50 ); // MODE_Ctrl 2115 2116 //(1) M78 should alway use 2.4G setting when using RF_AIROHA_7230 2117 //(2) BB30 has been updated previously. 2118 if (pHwData->phy_type != RF_AIROHA_7230) 2119 { 2120 // MAC: select 5 GHz, bit[5]=1 2121 reg->M78_ERPInformation |= BIT(5); 2122 Wb35Reg_Write( pHwData, 0x0878, reg->M78_ERPInformation ); 2123 2124 // disable 11b Baseband 2125 reg->BB30 |= BIT(31); 2126 Wb35Reg_Write( pHwData, 0x1030, reg->BB30 ); 2127 } 2128 } 2129} 2130 2131//Set the tx power directly from DUT GUI, not from the EEPROM. Return the current setting 2132u8 RFSynthesizer_SetPowerIndex( struct hw_data * pHwData, u8 PowerIndex ) 2133{ 2134 u32 Band = pHwData->band; 2135 u8 index=0; 2136 2137 if( pHwData->power_index == PowerIndex ) // 20060620.1 Add 2138 return PowerIndex; 2139 2140 if (RF_MAXIM_2825 == pHwData->phy_type) 2141 { 2142 // Channel 1 - 13 2143 index = RFSynthesizer_SetMaxim2825Power( pHwData, PowerIndex ); 2144 } 2145 else if (RF_MAXIM_2827 == pHwData->phy_type) 2146 { 2147 if( Band <= BAND_TYPE_OFDM_24 ) // Channel 1 - 13 2148 index = RFSynthesizer_SetMaxim2827_24Power( pHwData, PowerIndex ); 2149 else// if( Band == BAND_TYPE_OFDM_5 ) // Channel 36 - 64 2150 index = RFSynthesizer_SetMaxim2827_50Power( pHwData, PowerIndex ); 2151 } 2152 else if (RF_MAXIM_2828 == pHwData->phy_type) 2153 { 2154 if( Band <= BAND_TYPE_OFDM_24 ) // Channel 1 - 13 2155 index = RFSynthesizer_SetMaxim2828_24Power( pHwData, PowerIndex ); 2156 else// if( Band == BAND_TYPE_OFDM_5 ) // Channel 36 - 64 2157 index = RFSynthesizer_SetMaxim2828_50Power( pHwData, PowerIndex ); 2158 } 2159 else if( RF_AIROHA_2230 == pHwData->phy_type ) 2160 { 2161 //Power index: 0 ~ 63 // Channel 1 - 14 2162 index = RFSynthesizer_SetAiroha2230Power( pHwData, PowerIndex ); 2163 index = (u8)al2230_txvga_data[index][1]; 2164 } 2165 else if( RF_AIROHA_2230S == pHwData->phy_type ) // 20060420 Add this 2166 { 2167 //Power index: 0 ~ 63 // Channel 1 - 14 2168 index = RFSynthesizer_SetAiroha2230Power( pHwData, PowerIndex ); 2169 index = (u8)al2230_txvga_data[index][1]; 2170 } 2171 else if( RF_AIROHA_7230 == pHwData->phy_type ) 2172 { 2173 //Power index: 0 ~ 63 2174 index = RFSynthesizer_SetAiroha7230Power( pHwData, PowerIndex ); 2175 index = (u8)al7230_txvga_data[index][1]; 2176 } 2177 else if( (RF_WB_242 == pHwData->phy_type) || 2178 (RF_WB_242_1 == pHwData->phy_type) ) // 20060619.5 Add 2179 { 2180 //Power index: 0 ~ 19 for original. New range is 0 ~ 33 2181 index = RFSynthesizer_SetWinbond242Power( pHwData, PowerIndex ); 2182 index = (u8)w89rf242_txvga_data[index][1]; 2183 } 2184 2185 pHwData->power_index = index; // Backup current 2186 return index; 2187} 2188 2189//-- Sub function 2190u8 RFSynthesizer_SetMaxim2828_24Power( struct hw_data * pHwData, u8 index ) 2191{ 2192 u32 PowerData; 2193 if( index > 1 ) index = 1; 2194 PowerData = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2828_power_data_24[index], 18); 2195 Wb35Reg_Write( pHwData, 0x0864, PowerData ); 2196 return index; 2197} 2198//-- 2199u8 RFSynthesizer_SetMaxim2828_50Power( struct hw_data * pHwData, u8 index ) 2200{ 2201 u32 PowerData; 2202 if( index > 1 ) index = 1; 2203 PowerData = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2828_power_data_50[index], 18); 2204 Wb35Reg_Write( pHwData, 0x0864, PowerData ); 2205 return index; 2206} 2207//-- 2208u8 RFSynthesizer_SetMaxim2827_24Power( struct hw_data * pHwData, u8 index ) 2209{ 2210 u32 PowerData; 2211 if( index > 1 ) index = 1; 2212 PowerData = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2827_power_data_24[index], 18); 2213 Wb35Reg_Write( pHwData, 0x0864, PowerData ); 2214 return index; 2215} 2216//-- 2217u8 RFSynthesizer_SetMaxim2827_50Power( struct hw_data * pHwData, u8 index ) 2218{ 2219 u32 PowerData; 2220 if( index > 1 ) index = 1; 2221 PowerData = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2827_power_data_50[index], 18); 2222 Wb35Reg_Write( pHwData, 0x0864, PowerData ); 2223 return index; 2224} 2225//-- 2226u8 RFSynthesizer_SetMaxim2825Power( struct hw_data * pHwData, u8 index ) 2227{ 2228 u32 PowerData; 2229 if( index > 1 ) index = 1; 2230 PowerData = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2825_power_data_24[index], 18); 2231 Wb35Reg_Write( pHwData, 0x0864, PowerData ); 2232 return index; 2233} 2234//-- 2235u8 RFSynthesizer_SetAiroha2230Power( struct hw_data * pHwData, u8 index ) 2236{ 2237 u32 PowerData; 2238 u8 i,count; 2239 2240 count = sizeof(al2230_txvga_data) / sizeof(al2230_txvga_data[0]); 2241 for (i=0; i<count; i++) 2242 { 2243 if (al2230_txvga_data[i][1] >= index) 2244 break; 2245 } 2246 if (i == count) 2247 i--; 2248 2249 PowerData = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse( al2230_txvga_data[i][0], 20); 2250 Wb35Reg_Write( pHwData, 0x0864, PowerData ); 2251 return i; 2252} 2253//-- 2254u8 RFSynthesizer_SetAiroha7230Power( struct hw_data * pHwData, u8 index ) 2255{ 2256 u32 PowerData; 2257 u8 i,count; 2258 2259 //PowerData = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse( airoha_power_data_24[index], 20); 2260 count = sizeof(al7230_txvga_data) / sizeof(al7230_txvga_data[0]); 2261 for (i=0; i<count; i++) 2262 { 2263 if (al7230_txvga_data[i][1] >= index) 2264 break; 2265 } 2266 if (i == count) 2267 i--; 2268 PowerData = (1 << 31) | (0 << 30) | (24 << 24) | (al7230_txvga_data[i][0]&0xffffff); 2269 Wb35Reg_Write( pHwData, 0x0864, PowerData ); 2270 return i; 2271} 2272 2273u8 RFSynthesizer_SetWinbond242Power( struct hw_data * pHwData, u8 index ) 2274{ 2275 u32 PowerData; 2276 u8 i,count; 2277 2278 count = sizeof(w89rf242_txvga_data) / sizeof(w89rf242_txvga_data[0]); 2279 for (i=0; i<count; i++) 2280 { 2281 if (w89rf242_txvga_data[i][1] >= index) 2282 break; 2283 } 2284 if (i == count) 2285 i--; 2286 2287 // Set TxVga into RF 2288 PowerData = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( w89rf242_txvga_data[i][0], 24); 2289 Wb35Reg_Write( pHwData, 0x0864, PowerData ); 2290 2291 // Update BB48 BB4C BB58 for high precision txvga 2292 Wb35Reg_Write( pHwData, 0x1048, w89rf242_txvga_data[i][2] ); 2293 Wb35Reg_Write( pHwData, 0x104c, w89rf242_txvga_data[i][3] ); 2294 Wb35Reg_Write( pHwData, 0x1058, w89rf242_txvga_data[i][4] ); 2295 2296// Rf vga 0 ~ 3 for temperature compensate. It will affect the scan Bss. 2297// The i value equals to 8 or 7 usually. So It's not necessary to setup this RF register. 2298// if( i <= 3 ) 2299// PowerData = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( 0x000024, 24 ); 2300// else 2301// PowerData = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( 0x001824, 24 ); 2302// Wb35Reg_Write( pHwData, 0x0864, PowerData ); 2303 return i; 2304} 2305 2306//=========================================================================================================== 2307// Dxx_initial -- 2308// Mxx_initial -- 2309 // 2310// Routine Description: 2311// Initial the hardware setting and module variable 2312 // 2313//=========================================================================================================== 2314void Dxx_initial( struct hw_data * pHwData ) 2315{ 2316 struct wb35_reg *reg = &pHwData->reg; 2317 2318 // Old IC:Single mode only. 2319 // New IC: operation decide by Software set bit[4]. 1:multiple 0: single 2320 reg->D00_DmaControl = 0xc0000004; //Txon, Rxon, multiple Rx for new 4k DMA 2321 //Txon, Rxon, single Rx for old 8k ASIC 2322 if( !HAL_USB_MODE_BURST( pHwData ) ) 2323 reg->D00_DmaControl = 0xc0000000;//Txon, Rxon, single Rx for new 4k DMA 2324 2325 Wb35Reg_WriteSync( pHwData, 0x0400, reg->D00_DmaControl ); 2326} 2327 2328void Mxx_initial( struct hw_data * pHwData ) 2329{ 2330 struct wb35_reg *reg = &pHwData->reg; 2331 u32 tmp; 2332 u32 pltmp[11]; 2333 u16 i; 2334 2335 2336 //====================================================== 2337 // Initial Mxx register 2338 //====================================================== 2339 2340 // M00 bit set 2341#ifdef _IBSS_BEACON_SEQ_STICK_ 2342 reg->M00_MacControl = 0; // Solve beacon sequence number stop by software 2343#else 2344 reg->M00_MacControl = 0x80000000; // Solve beacon sequence number stop by hardware 2345#endif 2346 2347 // M24 disable enter power save, BB RxOn and enable NAV attack 2348 reg->M24_MacControl = 0x08040042; 2349 pltmp[0] = reg->M24_MacControl; 2350 2351 pltmp[1] = 0; // Skip M28, because no initialize value is required. 2352 2353 // M2C CWmin and CWmax setting 2354 pHwData->cwmin = DEFAULT_CWMIN; 2355 pHwData->cwmax = DEFAULT_CWMAX; 2356 reg->M2C_MacControl = DEFAULT_CWMIN << 10; 2357 reg->M2C_MacControl |= DEFAULT_CWMAX; 2358 pltmp[2] = reg->M2C_MacControl; 2359 2360 // M30 BSSID 2361 pltmp[3] = *(u32 *)pHwData->bssid; 2362 2363 // M34 2364 pHwData->AID = DEFAULT_AID; 2365 tmp = *(u16 *)(pHwData->bssid+4); 2366 tmp |= DEFAULT_AID << 16; 2367 pltmp[4] = tmp; 2368 2369 // M38 2370 reg->M38_MacControl = (DEFAULT_RATE_RETRY_LIMIT<<8) | (DEFAULT_LONG_RETRY_LIMIT << 4) | DEFAULT_SHORT_RETRY_LIMIT; 2371 pltmp[5] = reg->M38_MacControl; 2372 2373 // M3C 2374 tmp = (DEFAULT_PIFST << 26) | (DEFAULT_EIFST << 16) | (DEFAULT_DIFST << 8) | (DEFAULT_SIFST << 4) | DEFAULT_OSIFST ; 2375 reg->M3C_MacControl = tmp; 2376 pltmp[6] = tmp; 2377 2378 // M40 2379 pHwData->slot_time_select = DEFAULT_SLOT_TIME; 2380 tmp = (DEFAULT_ATIMWD << 16) | DEFAULT_SLOT_TIME; 2381 reg->M40_MacControl = tmp; 2382 pltmp[7] = tmp; 2383 2384 // M44 2385 tmp = DEFAULT_MAX_TX_MSDU_LIFE_TIME << 10; // *1024 2386 reg->M44_MacControl = tmp; 2387 pltmp[8] = tmp; 2388 2389 // M48 2390 pHwData->BeaconPeriod = DEFAULT_BEACON_INTERVAL; 2391 pHwData->ProbeDelay = DEFAULT_PROBE_DELAY_TIME; 2392 tmp = (DEFAULT_BEACON_INTERVAL << 16) | DEFAULT_PROBE_DELAY_TIME; 2393 reg->M48_MacControl = tmp; 2394 pltmp[9] = tmp; 2395 2396 //M4C 2397 reg->M4C_MacStatus = (DEFAULT_PROTOCOL_VERSION << 30) | (DEFAULT_MAC_POWER_STATE << 28) | (DEFAULT_DTIM_ALERT_TIME << 24); 2398 pltmp[10] = reg->M4C_MacStatus; 2399 2400 // Burst write 2401 //Wb35Reg_BurstWrite( pHwData, 0x0824, pltmp, 11, AUTO_INCREMENT ); 2402 for( i=0; i<11; i++ ) 2403 Wb35Reg_WriteSync( pHwData, 0x0824 + i*4, pltmp[i] ); 2404 2405 // M60 2406 Wb35Reg_WriteSync( pHwData, 0x0860, 0x12481248 ); 2407 reg->M60_MacControl = 0x12481248; 2408 2409 // M68 2410 Wb35Reg_WriteSync( pHwData, 0x0868, 0x00050900 ); // 20051018 0x000F0F00 ); // 940930 0x00131300 2411 reg->M68_MacControl = 0x00050900; 2412 2413 // M98 2414 Wb35Reg_WriteSync( pHwData, 0x0898, 0xffff8888 ); 2415 reg->M98_MacControl = 0xffff8888; 2416} 2417 2418 2419void Uxx_power_off_procedure( struct hw_data * pHwData ) 2420{ 2421 // SW, PMU reset and turn off clock 2422 Wb35Reg_WriteSync( pHwData, 0x03b0, 3 ); 2423 Wb35Reg_WriteSync( pHwData, 0x03f0, 0xf9 ); 2424} 2425 2426//Decide the TxVga of every channel 2427void GetTxVgaFromEEPROM( struct hw_data * pHwData ) 2428{ 2429 u32 i, j, ltmp; 2430 u16 Value[MAX_TXVGA_EEPROM]; 2431 u8 *pctmp; 2432 u8 ctmp=0; 2433 2434 // Get the entire TxVga setting in EEPROM 2435 for( i=0; i<MAX_TXVGA_EEPROM; i++ ) 2436 { 2437 Wb35Reg_WriteSync( pHwData, 0x03b4, 0x08100000 + 0x00010000*i ); 2438 Wb35Reg_ReadSync( pHwData, 0x03b4, &ltmp ); 2439 Value[i] = (u16)( ltmp & 0xffff ); // Get 16 bit available 2440 Value[i] = cpu_to_le16( Value[i] ); // [7:0]2412 [7:0]2417 .... 2441 } 2442 2443 // Adjust the filed which fills with reserved value. 2444 pctmp = (u8 *)Value; 2445 for( i=0; i<(MAX_TXVGA_EEPROM*2); i++ ) 2446 { 2447 if( pctmp[i] != 0xff ) 2448 ctmp = pctmp[i]; 2449 else 2450 pctmp[i] = ctmp; 2451 } 2452 2453 // Adjust WB_242 to WB_242_1 TxVga scale 2454 if( pHwData->phy_type == RF_WB_242 ) 2455 { 2456 for( i=0; i<4; i++ ) // Only 2412 2437 2462 2484 case must be modified 2457 { 2458 for( j=0; j<(sizeof(w89rf242_txvga_old_mapping)/sizeof(w89rf242_txvga_old_mapping[0])); j++ ) 2459 { 2460 if( pctmp[i] < (u8)w89rf242_txvga_old_mapping[j][1] ) 2461 { 2462 pctmp[i] = (u8)w89rf242_txvga_old_mapping[j][0]; 2463 break; 2464 } 2465 } 2466 2467 if( j == (sizeof(w89rf242_txvga_old_mapping)/sizeof(w89rf242_txvga_old_mapping[0])) ) 2468 pctmp[i] = (u8)w89rf242_txvga_old_mapping[j-1][0]; 2469 } 2470 } 2471 2472 // 20060621 Add 2473 memcpy( pHwData->TxVgaSettingInEEPROM, pctmp, MAX_TXVGA_EEPROM*2 ); //MAX_TXVGA_EEPROM is u16 count 2474 EEPROMTxVgaAdjust( pHwData ); 2475} 2476 2477// This function will affect the TxVga parameter in HAL. If hal_set_current_channel 2478// or RFSynthesizer_SetPowerIndex be called, new TxVga will take effect. 2479// TxVgaSettingInEEPROM of sHwData is an u8 array point to EEPROM contain for IS89C35 2480// This function will use default TxVgaSettingInEEPROM data to calculate new TxVga. 2481void EEPROMTxVgaAdjust( struct hw_data * pHwData ) // 20060619.5 Add 2482{ 2483 u8 * pTxVga = pHwData->TxVgaSettingInEEPROM; 2484 s16 i, stmp; 2485 2486 //-- 2.4G -- 20060704.2 Request from Tiger 2487 //channel 1 ~ 5 2488 stmp = pTxVga[1] - pTxVga[0]; 2489 for( i=0; i<5; i++ ) 2490 pHwData->TxVgaFor24[i] = pTxVga[0] + stmp*i/4; 2491 //channel 6 ~ 10 2492 stmp = pTxVga[2] - pTxVga[1]; 2493 for( i=5; i<10; i++ ) 2494 pHwData->TxVgaFor24[i] = pTxVga[1] + stmp*(i-5)/4; 2495 //channel 11 ~ 13 2496 stmp = pTxVga[3] - pTxVga[2]; 2497 for( i=10; i<13; i++ ) 2498 pHwData->TxVgaFor24[i] = pTxVga[2] + stmp*(i-10)/2; 2499 //channel 14 2500 pHwData->TxVgaFor24[13] = pTxVga[3]; 2501 2502 //-- 5G -- 2503 if( pHwData->phy_type == RF_AIROHA_7230 ) 2504 { 2505 //channel 184 2506 pHwData->TxVgaFor50[0].ChanNo = 184; 2507 pHwData->TxVgaFor50[0].TxVgaValue = pTxVga[4]; 2508 //channel 196 2509 pHwData->TxVgaFor50[3].ChanNo = 196; 2510 pHwData->TxVgaFor50[3].TxVgaValue = pTxVga[5]; 2511 //interpolate 2512 pHwData->TxVgaFor50[1].ChanNo = 188; 2513 pHwData->TxVgaFor50[2].ChanNo = 192; 2514 stmp = pTxVga[5] - pTxVga[4]; 2515 pHwData->TxVgaFor50[2].TxVgaValue = pTxVga[5] - stmp/3; 2516 pHwData->TxVgaFor50[1].TxVgaValue = pTxVga[5] - stmp*2/3; 2517 2518 //channel 16 2519 pHwData->TxVgaFor50[6].ChanNo = 16; 2520 pHwData->TxVgaFor50[6].TxVgaValue = pTxVga[6]; 2521 pHwData->TxVgaFor50[4].ChanNo = 8; 2522 pHwData->TxVgaFor50[4].TxVgaValue = pTxVga[6]; 2523 pHwData->TxVgaFor50[5].ChanNo = 12; 2524 pHwData->TxVgaFor50[5].TxVgaValue = pTxVga[6]; 2525 2526 //channel 36 2527 pHwData->TxVgaFor50[8].ChanNo = 36; 2528 pHwData->TxVgaFor50[8].TxVgaValue = pTxVga[7]; 2529 pHwData->TxVgaFor50[7].ChanNo = 34; 2530 pHwData->TxVgaFor50[7].TxVgaValue = pTxVga[7]; 2531 pHwData->TxVgaFor50[9].ChanNo = 38; 2532 pHwData->TxVgaFor50[9].TxVgaValue = pTxVga[7]; 2533 2534 //channel 40 2535 pHwData->TxVgaFor50[10].ChanNo = 40; 2536 pHwData->TxVgaFor50[10].TxVgaValue = pTxVga[8]; 2537 //channel 48 2538 pHwData->TxVgaFor50[14].ChanNo = 48; 2539 pHwData->TxVgaFor50[14].TxVgaValue = pTxVga[9]; 2540 //interpolate 2541 pHwData->TxVgaFor50[11].ChanNo = 42; 2542 pHwData->TxVgaFor50[12].ChanNo = 44; 2543 pHwData->TxVgaFor50[13].ChanNo = 46; 2544 stmp = pTxVga[9] - pTxVga[8]; 2545 pHwData->TxVgaFor50[13].TxVgaValue = pTxVga[9] - stmp/4; 2546 pHwData->TxVgaFor50[12].TxVgaValue = pTxVga[9] - stmp*2/4; 2547 pHwData->TxVgaFor50[11].TxVgaValue = pTxVga[9] - stmp*3/4; 2548 2549 //channel 52 2550 pHwData->TxVgaFor50[15].ChanNo = 52; 2551 pHwData->TxVgaFor50[15].TxVgaValue = pTxVga[10]; 2552 //channel 64 2553 pHwData->TxVgaFor50[18].ChanNo = 64; 2554 pHwData->TxVgaFor50[18].TxVgaValue = pTxVga[11]; 2555 //interpolate 2556 pHwData->TxVgaFor50[16].ChanNo = 56; 2557 pHwData->TxVgaFor50[17].ChanNo = 60; 2558 stmp = pTxVga[11] - pTxVga[10]; 2559 pHwData->TxVgaFor50[17].TxVgaValue = pTxVga[11] - stmp/3; 2560 pHwData->TxVgaFor50[16].TxVgaValue = pTxVga[11] - stmp*2/3; 2561 2562 //channel 100 2563 pHwData->TxVgaFor50[19].ChanNo = 100; 2564 pHwData->TxVgaFor50[19].TxVgaValue = pTxVga[12]; 2565 //channel 112 2566 pHwData->TxVgaFor50[22].ChanNo = 112; 2567 pHwData->TxVgaFor50[22].TxVgaValue = pTxVga[13]; 2568 //interpolate 2569 pHwData->TxVgaFor50[20].ChanNo = 104; 2570 pHwData->TxVgaFor50[21].ChanNo = 108; 2571 stmp = pTxVga[13] - pTxVga[12]; 2572 pHwData->TxVgaFor50[21].TxVgaValue = pTxVga[13] - stmp/3; 2573 pHwData->TxVgaFor50[20].TxVgaValue = pTxVga[13] - stmp*2/3; 2574 2575 //channel 128 2576 pHwData->TxVgaFor50[26].ChanNo = 128; 2577 pHwData->TxVgaFor50[26].TxVgaValue = pTxVga[14]; 2578 //interpolate 2579 pHwData->TxVgaFor50[23].ChanNo = 116; 2580 pHwData->TxVgaFor50[24].ChanNo = 120; 2581 pHwData->TxVgaFor50[25].ChanNo = 124; 2582 stmp = pTxVga[14] - pTxVga[13]; 2583 pHwData->TxVgaFor50[25].TxVgaValue = pTxVga[14] - stmp/4; 2584 pHwData->TxVgaFor50[24].TxVgaValue = pTxVga[14] - stmp*2/4; 2585 pHwData->TxVgaFor50[23].TxVgaValue = pTxVga[14] - stmp*3/4; 2586 2587 //channel 140 2588 pHwData->TxVgaFor50[29].ChanNo = 140; 2589 pHwData->TxVgaFor50[29].TxVgaValue = pTxVga[15]; 2590 //interpolate 2591 pHwData->TxVgaFor50[27].ChanNo = 132; 2592 pHwData->TxVgaFor50[28].ChanNo = 136; 2593 stmp = pTxVga[15] - pTxVga[14]; 2594 pHwData->TxVgaFor50[28].TxVgaValue = pTxVga[15] - stmp/3; 2595 pHwData->TxVgaFor50[27].TxVgaValue = pTxVga[15] - stmp*2/3; 2596 2597 //channel 149 2598 pHwData->TxVgaFor50[30].ChanNo = 149; 2599 pHwData->TxVgaFor50[30].TxVgaValue = pTxVga[16]; 2600 //channel 165 2601 pHwData->TxVgaFor50[34].ChanNo = 165; 2602 pHwData->TxVgaFor50[34].TxVgaValue = pTxVga[17]; 2603 //interpolate 2604 pHwData->TxVgaFor50[31].ChanNo = 153; 2605 pHwData->TxVgaFor50[32].ChanNo = 157; 2606 pHwData->TxVgaFor50[33].ChanNo = 161; 2607 stmp = pTxVga[17] - pTxVga[16]; 2608 pHwData->TxVgaFor50[33].TxVgaValue = pTxVga[17] - stmp/4; 2609 pHwData->TxVgaFor50[32].TxVgaValue = pTxVga[17] - stmp*2/4; 2610 pHwData->TxVgaFor50[31].TxVgaValue = pTxVga[17] - stmp*3/4; 2611 } 2612 2613 #ifdef _PE_STATE_DUMP_ 2614 printk(" TxVgaFor24 : \n"); 2615 DataDmp((u8 *)pHwData->TxVgaFor24, 14 ,0); 2616 printk(" TxVgaFor50 : \n"); 2617 DataDmp((u8 *)pHwData->TxVgaFor50, 70 ,0); 2618 #endif 2619} 2620 2621void BBProcessor_RateChanging( struct hw_data * pHwData, u8 rate ) // 20060613.1 2622{ 2623 struct wb35_reg *reg = &pHwData->reg; 2624 unsigned char Is11bRate; 2625 2626 Is11bRate = (rate % 6) ? 1 : 0; 2627 switch( pHwData->phy_type ) 2628 { 2629 case RF_AIROHA_2230: 2630 case RF_AIROHA_2230S: // 20060420 Add this 2631 if( Is11bRate ) 2632 { 2633 if( (reg->BB48 != BB48_DEFAULT_AL2230_11B) && 2634 (reg->BB4C != BB4C_DEFAULT_AL2230_11B) ) 2635 { 2636 Wb35Reg_Write( pHwData, 0x1048, BB48_DEFAULT_AL2230_11B ); 2637 Wb35Reg_Write( pHwData, 0x104c, BB4C_DEFAULT_AL2230_11B ); 2638 } 2639 } 2640 else 2641 { 2642 if( (reg->BB48 != BB48_DEFAULT_AL2230_11G) && 2643 (reg->BB4C != BB4C_DEFAULT_AL2230_11G) ) 2644 { 2645 Wb35Reg_Write( pHwData, 0x1048, BB48_DEFAULT_AL2230_11G ); 2646 Wb35Reg_Write( pHwData, 0x104c, BB4C_DEFAULT_AL2230_11G ); 2647 } 2648 } 2649 break; 2650 2651 case RF_WB_242: // 20060623 The fix only for old TxVGA setting 2652 if( Is11bRate ) 2653 { 2654 if( (reg->BB48 != BB48_DEFAULT_WB242_11B) && 2655 (reg->BB4C != BB4C_DEFAULT_WB242_11B) ) 2656 { 2657 reg->BB48 = BB48_DEFAULT_WB242_11B; 2658 reg->BB4C = BB4C_DEFAULT_WB242_11B; 2659 Wb35Reg_Write( pHwData, 0x1048, BB48_DEFAULT_WB242_11B ); 2660 Wb35Reg_Write( pHwData, 0x104c, BB4C_DEFAULT_WB242_11B ); 2661 } 2662 } 2663 else 2664 { 2665 if( (reg->BB48 != BB48_DEFAULT_WB242_11G) && 2666 (reg->BB4C != BB4C_DEFAULT_WB242_11G) ) 2667 { 2668 reg->BB48 = BB48_DEFAULT_WB242_11G; 2669 reg->BB4C = BB4C_DEFAULT_WB242_11G; 2670 Wb35Reg_Write( pHwData, 0x1048, BB48_DEFAULT_WB242_11G ); 2671 Wb35Reg_Write( pHwData, 0x104c, BB4C_DEFAULT_WB242_11G ); 2672 } 2673 } 2674 break; 2675 } 2676} 2677 2678 2679 2680 2681 2682 2683