0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #include "b43.h"
0014 #include "tables_lpphy.h"
0015 #include "phy_common.h"
0016 #include "phy_lp.h"
0017
0018
0019
0020 struct b206x_init_tab_entry {
0021 u16 offset;
0022 u16 value_a;
0023 u16 value_g;
0024 u8 flags;
0025 };
0026 #define B206X_FLAG_A 0x01
0027 #define B206X_FLAG_G 0x02
0028
0029 static const struct b206x_init_tab_entry b2062_init_tab[] = {
0030
0031
0032
0033
0034 { .offset = B2062_N_COMM4, .value_a = 0x0001, .value_g = 0x0000, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047 { .offset = B2062_N_PDN_CTL1, .value_a = 0x0000, .value_g = 0x00CA, .flags = B206X_FLAG_G, },
0048
0049 { .offset = B2062_N_PDN_CTL3, .value_a = 0x0000, .value_g = 0x0000, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0050 { .offset = B2062_N_PDN_CTL4, .value_a = 0x0015, .value_g = 0x002A, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0051
0052
0053 { .offset = B2062_N_LGENC, .value_a = 0x00DB, .value_g = 0x00FF, .flags = B206X_FLAG_A, },
0054
0055
0056
0057
0058
0059
0060 { .offset = B2062_N_LGENA_TUNE0, .value_a = 0x00DD, .value_g = 0x0000, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0061
0062 { .offset = B2062_N_LGENA_TUNE2, .value_a = 0x00DD, .value_g = 0x0000, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0063 { .offset = B2062_N_LGENA_TUNE3, .value_a = 0x0077, .value_g = 0x00B5, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0064 { .offset = B2062_N_LGENA_CTL3, .value_a = 0x0000, .value_g = 0x00FF, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0065
0066
0067
0068 { .offset = B2062_N_LGENA_CTL7, .value_a = 0x0033, .value_g = 0x0033, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0069
0070 { .offset = B2062_N_RXA_CTL1, .value_a = 0x0000, .value_g = 0x0000, .flags = B206X_FLAG_G, },
0071
0072
0073
0074
0075
0076
0077 { .offset = B2062_N_RXBB_CTL0, .value_a = 0x0082, .value_g = 0x0080, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0078
0079
0080
0081 { .offset = B2062_N_RXBB_GAIN1, .value_a = 0x0004, .value_g = 0x0004, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0082 { .offset = B2062_N_RXBB_GAIN2, .value_a = 0x0000, .value_g = 0x0000, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103 { .offset = B2062_N_TX_CTL4, .value_a = 0x0003, .value_g = 0x0003, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0104 { .offset = B2062_N_TX_CTL5, .value_a = 0x0002, .value_g = 0x0002, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0105
0106
0107
0108
0109
0110
0111
0112 { .offset = B2062_N_TX_TUNE, .value_a = 0x0088, .value_g = 0x001B, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141 { .offset = B2062_S_COMM4, .value_a = 0x0001, .value_g = 0x0000, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153 { .offset = B2062_S_PDS_CTL0, .value_a = 0x00FF, .value_g = 0x00FF, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0154
0155
0156
0157
0158
0159
0160 { .offset = B2062_S_LGENG_CTL0, .value_a = 0x00F8, .value_g = 0x00D8, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0161 { .offset = B2062_S_LGENG_CTL1, .value_a = 0x003C, .value_g = 0x0024, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0162
0163
0164
0165
0166
0167
0168 { .offset = B2062_S_LGENG_CTL8, .value_a = 0x0088, .value_g = 0x0080, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0169
0170 { .offset = B2062_S_LGENG_CTL10, .value_a = 0x0088, .value_g = 0x0080, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188
0189 { .offset = B2062_S_RFPLL_CTL0, .value_a = 0x0098, .value_g = 0x0098, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0190 { .offset = B2062_S_RFPLL_CTL1, .value_a = 0x0010, .value_g = 0x0010, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0191
0192
0193
0194 { .offset = B2062_S_RFPLL_CTL5, .value_a = 0x0043, .value_g = 0x0043, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0195 { .offset = B2062_S_RFPLL_CTL6, .value_a = 0x0047, .value_g = 0x0047, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0196 { .offset = B2062_S_RFPLL_CTL7, .value_a = 0x000C, .value_g = 0x000C, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0197 { .offset = B2062_S_RFPLL_CTL8, .value_a = 0x0011, .value_g = 0x0011, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0198 { .offset = B2062_S_RFPLL_CTL9, .value_a = 0x0011, .value_g = 0x0011, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0199 { .offset = B2062_S_RFPLL_CTL10, .value_a = 0x000E, .value_g = 0x000E, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0200 { .offset = B2062_S_RFPLL_CTL11, .value_a = 0x0008, .value_g = 0x0008, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0201 { .offset = B2062_S_RFPLL_CTL12, .value_a = 0x0033, .value_g = 0x0033, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0202 { .offset = B2062_S_RFPLL_CTL13, .value_a = 0x000A, .value_g = 0x000A, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0203 { .offset = B2062_S_RFPLL_CTL14, .value_a = 0x0006, .value_g = 0x0006, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0204
0205
0206
0207 { .offset = B2062_S_RFPLL_CTL18, .value_a = 0x003E, .value_g = 0x003E, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0208 { .offset = B2062_S_RFPLL_CTL19, .value_a = 0x0013, .value_g = 0x0013, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0209
0210 { .offset = B2062_S_RFPLL_CTL21, .value_a = 0x0062, .value_g = 0x0062, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0211 { .offset = B2062_S_RFPLL_CTL22, .value_a = 0x0007, .value_g = 0x0007, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0212 { .offset = B2062_S_RFPLL_CTL23, .value_a = 0x0016, .value_g = 0x0016, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0213 { .offset = B2062_S_RFPLL_CTL24, .value_a = 0x005C, .value_g = 0x005C, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0214 { .offset = B2062_S_RFPLL_CTL25, .value_a = 0x0095, .value_g = 0x0095, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0215
0216
0217
0218
0219 { .offset = B2062_S_RFPLL_CTL30, .value_a = 0x00A0, .value_g = 0x00A0, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0220 { .offset = B2062_S_RFPLL_CTL31, .value_a = 0x0004, .value_g = 0x0004, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0221
0222 { .offset = B2062_S_RFPLL_CTL33, .value_a = 0x00CC, .value_g = 0x00CC, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0223 { .offset = B2062_S_RFPLL_CTL34, .value_a = 0x0007, .value_g = 0x0007, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0224
0225
0226
0227
0228
0229
0230
0231
0232 { .offset = B2062_S_RXG_CNT8, .value_a = 0x000F, .value_g = 0x000F, .flags = B206X_FLAG_A, },
0233
0234
0235
0236
0237
0238
0239
0240
0241
0242 };
0243
0244 static const struct b206x_init_tab_entry b2063_init_tab[] = {
0245 { .offset = B2063_COMM1, .value_a = 0x0000, .value_g = 0x0000, .flags = B206X_FLAG_G, },
0246
0247
0248
0249
0250
0251
0252
0253
0254 { .offset = B2063_COMM10, .value_a = 0x0001, .value_g = 0x0000, .flags = B206X_FLAG_A, },
0255
0256
0257
0258
0259
0260 { .offset = B2063_COMM16, .value_a = 0x0000, .value_g = 0x0000, .flags = B206X_FLAG_G, },
0261 { .offset = B2063_COMM17, .value_a = 0x0000, .value_g = 0x0000, .flags = B206X_FLAG_G, },
0262 { .offset = B2063_COMM18, .value_a = 0x0000, .value_g = 0x0000, .flags = B206X_FLAG_G, },
0263 { .offset = B2063_COMM19, .value_a = 0x0000, .value_g = 0x0000, .flags = B206X_FLAG_G, },
0264 { .offset = B2063_COMM20, .value_a = 0x0000, .value_g = 0x0000, .flags = B206X_FLAG_G, },
0265 { .offset = B2063_COMM21, .value_a = 0x0000, .value_g = 0x0000, .flags = B206X_FLAG_G, },
0266 { .offset = B2063_COMM22, .value_a = 0x0000, .value_g = 0x0000, .flags = B206X_FLAG_G, },
0267 { .offset = B2063_COMM23, .value_a = 0x0000, .value_g = 0x0000, .flags = B206X_FLAG_G, },
0268 { .offset = B2063_COMM24, .value_a = 0x0000, .value_g = 0x0000, .flags = B206X_FLAG_G, },
0269
0270
0271
0272 { .offset = B2063_LOGEN_SP1, .value_a = 0x00e8, .value_g = 0x00d4, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0273 { .offset = B2063_LOGEN_SP2, .value_a = 0x00a7, .value_g = 0x0053, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0274
0275 { .offset = B2063_LOGEN_SP4, .value_a = 0x00f0, .value_g = 0x000f, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0276
0277 { .offset = B2063_G_RX_SP1, .value_a = 0x001f, .value_g = 0x005e, .flags = B206X_FLAG_G, },
0278 { .offset = B2063_G_RX_SP2, .value_a = 0x007f, .value_g = 0x007e, .flags = B206X_FLAG_G, },
0279 { .offset = B2063_G_RX_SP3, .value_a = 0x0030, .value_g = 0x00f0, .flags = B206X_FLAG_G, },
0280
0281
0282
0283 { .offset = B2063_G_RX_SP7, .value_a = 0x007f, .value_g = 0x007f, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0284
0285
0286 { .offset = B2063_G_RX_SP10, .value_a = 0x000c, .value_g = 0x000c, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0287
0288 { .offset = B2063_A_RX_SP1, .value_a = 0x003c, .value_g = 0x003f, .flags = B206X_FLAG_A, },
0289 { .offset = B2063_A_RX_SP2, .value_a = 0x00fc, .value_g = 0x00fe, .flags = B206X_FLAG_A, },
0290
0291
0292
0293
0294 { .offset = B2063_A_RX_SP7, .value_a = 0x0008, .value_g = 0x0008, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0295
0296
0297
0298 { .offset = B2063_RX_BB_SP4, .value_a = 0x0060, .value_g = 0x0060, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0299
0300
0301
0302 { .offset = B2063_RX_BB_SP8, .value_a = 0x0030, .value_g = 0x0030, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0303
0304
0305 { .offset = B2063_TX_RF_SP3, .value_a = 0x000c, .value_g = 0x000b, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0306 { .offset = B2063_TX_RF_SP4, .value_a = 0x0010, .value_g = 0x000f, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0307
0308
0309
0310
0311
0312
0313
0314
0315
0316
0317
0318
0319
0320 { .offset = B2063_PA_SP1, .value_a = 0x003d, .value_g = 0x00fd, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0321
0322
0323
0324
0325
0326
0327 { .offset = B2063_TX_BB_SP1, .value_a = 0x0002, .value_g = 0x0002, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0328
0329
0330
0331 { .offset = B2063_BANDGAP_CTL1, .value_a = 0x0056, .value_g = 0x0056, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0332
0333
0334
0335
0336
0337
0338
0339
0340
0341
0342
0343
0344
0345
0346
0347
0348
0349
0350
0351
0352
0353
0354
0355
0356
0357
0358
0359
0360
0361
0362 { .offset = B2063_PLL_JTAG_PLL_VCO2, .value_a = 0x00f7, .value_g = 0x00f7, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0363
0364
0365
0366
0367
0368
0369
0370
0371
0372
0373
0374
0375
0376
0377
0378
0379
0380
0381
0382
0383
0384
0385
0386
0387
0388
0389
0390
0391
0392
0393
0394
0395
0396
0397
0398
0399
0400
0401
0402
0403
0404
0405
0406
0407
0408
0409
0410
0411
0412
0413
0414
0415
0416
0417
0418
0419
0420
0421
0422
0423
0424
0425
0426
0427
0428
0429
0430
0431
0432
0433
0434
0435
0436
0437
0438
0439
0440 { .offset = B2063_G_RX_MIX3, .value_a = 0x0071, .value_g = 0x0071, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0441 { .offset = B2063_G_RX_MIX4, .value_a = 0x0071, .value_g = 0x0071, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0442
0443
0444
0445
0446
0447
0448
0449
0450
0451 { .offset = B2063_A_RX_1ST2, .value_a = 0x00f0, .value_g = 0x0030, .flags = B206X_FLAG_A, },
0452
0453
0454
0455
0456
0457
0458
0459
0460
0461
0462
0463
0464
0465
0466
0467 { .offset = B2063_A_RX_PS6, .value_a = 0x0077, .value_g = 0x0077, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0468
0469
0470
0471 { .offset = B2063_A_RX_MIX4, .value_a = 0x0003, .value_g = 0x0003, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0472 { .offset = B2063_A_RX_MIX5, .value_a = 0x000f, .value_g = 0x000f, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0473 { .offset = B2063_A_RX_MIX6, .value_a = 0x000f, .value_g = 0x000f, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0474
0475
0476
0477
0478
0479
0480 { .offset = B2063_RX_TIA_CTL1, .value_a = 0x0077, .value_g = 0x0077, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0481
0482 { .offset = B2063_RX_TIA_CTL3, .value_a = 0x0077, .value_g = 0x0077, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0483
0484
0485
0486
0487 { .offset = B2063_RX_BB_CTL2, .value_a = 0x0004, .value_g = 0x0004, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0488
0489
0490
0491
0492
0493
0494
0495
0496
0497
0498
0499
0500
0501
0502
0503
0504
0505
0506
0507
0508
0509
0510
0511 { .offset = B2063_PA_CTL1, .value_a = 0x0000, .value_g = 0x0004, .flags = B206X_FLAG_A, },
0512
0513
0514
0515
0516
0517
0518
0519
0520
0521
0522
0523
0524
0525
0526
0527
0528
0529 { .offset = B2063_VREG_CTL1, .value_a = 0x0003, .value_g = 0x0003, .flags = B206X_FLAG_A | B206X_FLAG_G, },
0530
0531
0532
0533
0534
0535
0536
0537
0538
0539
0540
0541 };
0542
0543 void b2062_upload_init_table(struct b43_wldev *dev)
0544 {
0545 const struct b206x_init_tab_entry *e;
0546 unsigned int i;
0547
0548 for (i = 0; i < ARRAY_SIZE(b2062_init_tab); i++) {
0549 e = &b2062_init_tab[i];
0550 if (b43_current_band(dev->wl) == NL80211_BAND_2GHZ) {
0551 if (!(e->flags & B206X_FLAG_G))
0552 continue;
0553 b43_radio_write(dev, e->offset, e->value_g);
0554 } else {
0555 if (!(e->flags & B206X_FLAG_A))
0556 continue;
0557 b43_radio_write(dev, e->offset, e->value_a);
0558 }
0559 }
0560 }
0561
0562 void b2063_upload_init_table(struct b43_wldev *dev)
0563 {
0564 const struct b206x_init_tab_entry *e;
0565 unsigned int i;
0566
0567 for (i = 0; i < ARRAY_SIZE(b2063_init_tab); i++) {
0568 e = &b2063_init_tab[i];
0569 if (b43_current_band(dev->wl) == NL80211_BAND_2GHZ) {
0570 if (!(e->flags & B206X_FLAG_G))
0571 continue;
0572 b43_radio_write(dev, e->offset, e->value_g);
0573 } else {
0574 if (!(e->flags & B206X_FLAG_A))
0575 continue;
0576 b43_radio_write(dev, e->offset, e->value_a);
0577 }
0578 }
0579 }
0580
0581 u32 b43_lptab_read(struct b43_wldev *dev, u32 offset)
0582 {
0583 u32 type, value;
0584
0585 type = offset & B43_LPTAB_TYPEMASK;
0586 offset &= ~B43_LPTAB_TYPEMASK;
0587 B43_WARN_ON(offset > 0xFFFF);
0588
0589 switch (type) {
0590 case B43_LPTAB_8BIT:
0591 b43_phy_write(dev, B43_LPPHY_TABLE_ADDR, offset);
0592 value = b43_phy_read(dev, B43_LPPHY_TABLEDATALO) & 0xFF;
0593 break;
0594 case B43_LPTAB_16BIT:
0595 b43_phy_write(dev, B43_LPPHY_TABLE_ADDR, offset);
0596 value = b43_phy_read(dev, B43_LPPHY_TABLEDATALO);
0597 break;
0598 case B43_LPTAB_32BIT:
0599 b43_phy_write(dev, B43_LPPHY_TABLE_ADDR, offset);
0600 value = b43_phy_read(dev, B43_LPPHY_TABLEDATAHI);
0601 value <<= 16;
0602 value |= b43_phy_read(dev, B43_LPPHY_TABLEDATALO);
0603 break;
0604 default:
0605 B43_WARN_ON(1);
0606 value = 0;
0607 }
0608
0609 return value;
0610 }
0611
0612 void b43_lptab_read_bulk(struct b43_wldev *dev, u32 offset,
0613 unsigned int nr_elements, void *_data)
0614 {
0615 u32 type;
0616 u8 *data = _data;
0617 unsigned int i;
0618
0619 type = offset & B43_LPTAB_TYPEMASK;
0620 offset &= ~B43_LPTAB_TYPEMASK;
0621 B43_WARN_ON(offset > 0xFFFF);
0622
0623 b43_phy_write(dev, B43_LPPHY_TABLE_ADDR, offset);
0624
0625 for (i = 0; i < nr_elements; i++) {
0626 switch (type) {
0627 case B43_LPTAB_8BIT:
0628 *data = b43_phy_read(dev, B43_LPPHY_TABLEDATALO) & 0xFF;
0629 data++;
0630 break;
0631 case B43_LPTAB_16BIT:
0632 *((u16 *)data) = b43_phy_read(dev, B43_LPPHY_TABLEDATALO);
0633 data += 2;
0634 break;
0635 case B43_LPTAB_32BIT:
0636 *((u32 *)data) = b43_phy_read(dev, B43_LPPHY_TABLEDATAHI);
0637 *((u32 *)data) <<= 16;
0638 *((u32 *)data) |= b43_phy_read(dev, B43_LPPHY_TABLEDATALO);
0639 data += 4;
0640 break;
0641 default:
0642 B43_WARN_ON(1);
0643 }
0644 }
0645 }
0646
0647 void b43_lptab_write(struct b43_wldev *dev, u32 offset, u32 value)
0648 {
0649 u32 type;
0650
0651 type = offset & B43_LPTAB_TYPEMASK;
0652 offset &= ~B43_LPTAB_TYPEMASK;
0653 B43_WARN_ON(offset > 0xFFFF);
0654
0655 switch (type) {
0656 case B43_LPTAB_8BIT:
0657 B43_WARN_ON(value & ~0xFF);
0658 b43_phy_write(dev, B43_LPPHY_TABLE_ADDR, offset);
0659 b43_phy_write(dev, B43_LPPHY_TABLEDATALO, value);
0660 break;
0661 case B43_LPTAB_16BIT:
0662 B43_WARN_ON(value & ~0xFFFF);
0663 b43_phy_write(dev, B43_LPPHY_TABLE_ADDR, offset);
0664 b43_phy_write(dev, B43_LPPHY_TABLEDATALO, value);
0665 break;
0666 case B43_LPTAB_32BIT:
0667 b43_phy_write(dev, B43_LPPHY_TABLE_ADDR, offset);
0668 b43_phy_write(dev, B43_LPPHY_TABLEDATAHI, value >> 16);
0669 b43_phy_write(dev, B43_LPPHY_TABLEDATALO, value);
0670 break;
0671 default:
0672 B43_WARN_ON(1);
0673 }
0674 }
0675
0676 void b43_lptab_write_bulk(struct b43_wldev *dev, u32 offset,
0677 unsigned int nr_elements, const void *_data)
0678 {
0679 u32 type, value;
0680 const u8 *data = _data;
0681 unsigned int i;
0682
0683 type = offset & B43_LPTAB_TYPEMASK;
0684 offset &= ~B43_LPTAB_TYPEMASK;
0685 B43_WARN_ON(offset > 0xFFFF);
0686
0687 b43_phy_write(dev, B43_LPPHY_TABLE_ADDR, offset);
0688
0689 for (i = 0; i < nr_elements; i++) {
0690 switch (type) {
0691 case B43_LPTAB_8BIT:
0692 value = *data;
0693 data++;
0694 B43_WARN_ON(value & ~0xFF);
0695 b43_phy_write(dev, B43_LPPHY_TABLEDATALO, value);
0696 break;
0697 case B43_LPTAB_16BIT:
0698 value = *((u16 *)data);
0699 data += 2;
0700 B43_WARN_ON(value & ~0xFFFF);
0701 b43_phy_write(dev, B43_LPPHY_TABLEDATALO, value);
0702 break;
0703 case B43_LPTAB_32BIT:
0704 value = *((u32 *)data);
0705 data += 4;
0706 b43_phy_write(dev, B43_LPPHY_TABLEDATAHI, value >> 16);
0707 b43_phy_write(dev, B43_LPPHY_TABLEDATALO, value);
0708 break;
0709 default:
0710 B43_WARN_ON(1);
0711 }
0712 }
0713 }
0714
0715 static const u8 lpphy_min_sig_sq_table[] = {
0716 0xde, 0xdc, 0xda, 0xd8, 0xd6, 0xd4, 0xd2, 0xcf, 0xcd,
0717 0xca, 0xc7, 0xc4, 0xc1, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
0718 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0x00,
0719 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
0720 0xbe, 0xbe, 0xbe, 0xbe, 0xc1, 0xc4, 0xc7, 0xca, 0xcd,
0721 0xcf, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde,
0722 };
0723
0724 static const u16 lpphy_rev01_noise_scale_table[] = {
0725 0xa4a4, 0xa4a4, 0xa4a4, 0xa4a4, 0xa4a4, 0xa4a4, 0xa4a4, 0xa4a4, 0xa4a4,
0726 0xa4a4, 0xa4a4, 0xa4a4, 0xa4a4, 0xa400, 0xa4a4, 0xa4a4, 0xa4a4, 0xa4a4,
0727 0xa4a4, 0xa4a4, 0xa4a4, 0xa4a4, 0xa4a4, 0xa4a4, 0xa4a4, 0xa4a4, 0x00a4,
0728 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4c00, 0x2d36,
0729 0x0000, 0x0000, 0x4c00, 0x2d36,
0730 };
0731
0732 static const u16 lpphy_rev2plus_noise_scale_table[] = {
0733 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4,
0734 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4,
0735 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x0000,
0736 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4,
0737 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4,
0738 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4,
0739 0x00a4,
0740 };
0741
0742 static const u16 lpphy_crs_gain_nft_table[] = {
0743 0x0366, 0x036a, 0x036f, 0x0364, 0x0367, 0x036d, 0x0374, 0x037f, 0x036f,
0744 0x037b, 0x038a, 0x0378, 0x0367, 0x036d, 0x0375, 0x0381, 0x0374, 0x0381,
0745 0x0392, 0x03a9, 0x03c4, 0x03e1, 0x0001, 0x001f, 0x0040, 0x005e, 0x007f,
0746 0x009e, 0x00bd, 0x00dd, 0x00fd, 0x011d, 0x013d,
0747 };
0748
0749 static const u16 lpphy_rev01_filter_control_table[] = {
0750 0xa0fc, 0x10fc, 0x10db, 0x20b7, 0xff93, 0x10bf, 0x109b, 0x2077, 0xff53,
0751 0x0127,
0752 };
0753
0754 static const u32 lpphy_rev2plus_filter_control_table[] = {
0755 0x000141fc, 0x000021fc, 0x000021b7, 0x0000416f, 0x0001ff27, 0x0000217f,
0756 0x00002137, 0x000040ef, 0x0001fea7, 0x0000024f,
0757 };
0758
0759 static const u32 lpphy_rev01_ps_control_table[] = {
0760 0x00010000, 0x000000a0, 0x00040000, 0x00000048, 0x08080101, 0x00000080,
0761 0x08080101, 0x00000040, 0x08080101, 0x000000c0, 0x08a81501, 0x000000c0,
0762 0x0fe8fd01, 0x000000c0, 0x08300105, 0x000000c0, 0x08080201, 0x000000c0,
0763 0x08280205, 0x000000c0, 0xe80802fe, 0x000000c7, 0x28080206, 0x000000c0,
0764 0x08080202, 0x000000c0, 0x0ba87602, 0x000000c0, 0x1068013d, 0x000000c0,
0765 0x10280105, 0x000000c0, 0x08880102, 0x000000c0, 0x08280106, 0x000000c0,
0766 0xe80801fd, 0x000000c7, 0xa8080115, 0x000000c0,
0767 };
0768
0769 static const u32 lpphy_rev2plus_ps_control_table[] = {
0770 0x00e38e08, 0x00e08e38, 0x00000000, 0x00000000, 0x00000000, 0x00002080,
0771 0x00006180, 0x00003002, 0x00000040, 0x00002042, 0x00180047, 0x00080043,
0772 0x00000041, 0x000020c1, 0x00046006, 0x00042002, 0x00040000, 0x00002003,
0773 0x00180006, 0x00080002,
0774 };
0775
0776 static const u8 lpphy_pll_fraction_table[] = {
0777 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80,
0778 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0779 };
0780
0781 static const u16 lpphy_iqlo_cal_table[] = {
0782 0x0200, 0x0300, 0x0400, 0x0600, 0x0800, 0x0b00, 0x1000, 0x1001, 0x1002,
0783 0x1003, 0x1004, 0x1005, 0x1006, 0x1007, 0x1707, 0x2007, 0x2d07, 0x4007,
0784 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0785 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0200, 0x0300, 0x0400, 0x0600,
0786 0x0800, 0x0b00, 0x1000, 0x1001, 0x1002, 0x1003, 0x1004, 0x1005, 0x1006,
0787 0x1007, 0x1707, 0x2007, 0x2d07, 0x4007, 0x0000, 0x0000, 0x0000, 0x0000,
0788 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0789 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0790 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0791 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0x0000, 0x0000,
0792 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0793 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0794 };
0795
0796 static const u16 lpphy_rev0_ofdm_cck_gain_table[] = {
0797 0x0001, 0x0001, 0x0001, 0x0001, 0x1001, 0x2001, 0x3001, 0x4001, 0x5001,
0798 0x6001, 0x7001, 0x7011, 0x7021, 0x2035, 0x2045, 0x2055, 0x2065, 0x2075,
0799 0x006d, 0x007d, 0x014d, 0x015d, 0x115d, 0x035d, 0x135d, 0x055d, 0x155d,
0800 0x0d5d, 0x1d5d, 0x2d5d, 0x555d, 0x655d, 0x755d,
0801 };
0802
0803 static const u16 lpphy_rev1_ofdm_cck_gain_table[] = {
0804 0x5000, 0x6000, 0x7000, 0x0001, 0x1001, 0x2001, 0x3001, 0x4001, 0x5001,
0805 0x6001, 0x7001, 0x7011, 0x7021, 0x2035, 0x2045, 0x2055, 0x2065, 0x2075,
0806 0x006d, 0x007d, 0x014d, 0x015d, 0x115d, 0x035d, 0x135d, 0x055d, 0x155d,
0807 0x0d5d, 0x1d5d, 0x2d5d, 0x555d, 0x655d, 0x755d,
0808 };
0809
0810 static const u16 lpphy_gain_delta_table[] = {
0811 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0812 };
0813
0814 static const u32 lpphy_tx_power_control_table[] = {
0815 0x00000050, 0x0000004f, 0x0000004e, 0x0000004d, 0x0000004c, 0x0000004b,
0816 0x0000004a, 0x00000049, 0x00000048, 0x00000047, 0x00000046, 0x00000045,
0817 0x00000044, 0x00000043, 0x00000042, 0x00000041, 0x00000040, 0x0000003f,
0818 0x0000003e, 0x0000003d, 0x0000003c, 0x0000003b, 0x0000003a, 0x00000039,
0819 0x00000038, 0x00000037, 0x00000036, 0x00000035, 0x00000034, 0x00000033,
0820 0x00000032, 0x00000031, 0x00000030, 0x0000002f, 0x0000002e, 0x0000002d,
0821 0x0000002c, 0x0000002b, 0x0000002a, 0x00000029, 0x00000028, 0x00000027,
0822 0x00000026, 0x00000025, 0x00000024, 0x00000023, 0x00000022, 0x00000021,
0823 0x00000020, 0x0000001f, 0x0000001e, 0x0000001d, 0x0000001c, 0x0000001b,
0824 0x0000001a, 0x00000019, 0x00000018, 0x00000017, 0x00000016, 0x00000015,
0825 0x00000014, 0x00000013, 0x00000012, 0x00000011, 0x00000000, 0x00000000,
0826 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0827 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0828 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0829 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0830 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0831 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0832 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0833 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0834 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0835 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0836 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0837 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0838 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0839 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0840 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0841 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0842 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0843 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0844 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0845 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0846 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0847 0x000075a0, 0x000075a0, 0x000075a1, 0x000075a1, 0x000075a2, 0x000075a2,
0848 0x000075a3, 0x000075a3, 0x000074b0, 0x000074b0, 0x000074b1, 0x000074b1,
0849 0x000074b2, 0x000074b2, 0x000074b3, 0x000074b3, 0x00006d20, 0x00006d20,
0850 0x00006d21, 0x00006d21, 0x00006d22, 0x00006d22, 0x00006d23, 0x00006d23,
0851 0x00004660, 0x00004660, 0x00004661, 0x00004661, 0x00004662, 0x00004662,
0852 0x00004663, 0x00004663, 0x00003e60, 0x00003e60, 0x00003e61, 0x00003e61,
0853 0x00003e62, 0x00003e62, 0x00003e63, 0x00003e63, 0x00003660, 0x00003660,
0854 0x00003661, 0x00003661, 0x00003662, 0x00003662, 0x00003663, 0x00003663,
0855 0x00002e60, 0x00002e60, 0x00002e61, 0x00002e61, 0x00002e62, 0x00002e62,
0856 0x00002e63, 0x00002e63, 0x00002660, 0x00002660, 0x00002661, 0x00002661,
0857 0x00002662, 0x00002662, 0x00002663, 0x00002663, 0x000025e0, 0x000025e0,
0858 0x000025e1, 0x000025e1, 0x000025e2, 0x000025e2, 0x000025e3, 0x000025e3,
0859 0x00001de0, 0x00001de0, 0x00001de1, 0x00001de1, 0x00001de2, 0x00001de2,
0860 0x00001de3, 0x00001de3, 0x00001d60, 0x00001d60, 0x00001d61, 0x00001d61,
0861 0x00001d62, 0x00001d62, 0x00001d63, 0x00001d63, 0x00001560, 0x00001560,
0862 0x00001561, 0x00001561, 0x00001562, 0x00001562, 0x00001563, 0x00001563,
0863 0x00000d60, 0x00000d60, 0x00000d61, 0x00000d61, 0x00000d62, 0x00000d62,
0864 0x00000d63, 0x00000d63, 0x00000ce0, 0x00000ce0, 0x00000ce1, 0x00000ce1,
0865 0x00000ce2, 0x00000ce2, 0x00000ce3, 0x00000ce3, 0x00000e10, 0x00000e10,
0866 0x00000e11, 0x00000e11, 0x00000e12, 0x00000e12, 0x00000e13, 0x00000e13,
0867 0x00000bf0, 0x00000bf0, 0x00000bf1, 0x00000bf1, 0x00000bf2, 0x00000bf2,
0868 0x00000bf3, 0x00000bf3, 0x04200000, 0x04000000, 0x04200000, 0x04000000,
0869 0x04200000, 0x04000000, 0x04200000, 0x04000000, 0x04200000, 0x04000000,
0870 0x04200000, 0x04000000, 0x04200000, 0x04000000, 0x04200000, 0x04000000,
0871 0x04200000, 0x04000000, 0x04200000, 0x04000000, 0x04200000, 0x04000000,
0872 0x04200000, 0x04000000, 0x04200000, 0x04000000, 0x04200000, 0x04000000,
0873 0x04200000, 0x04000000, 0x04200000, 0x04000000, 0x04200000, 0x04000000,
0874 0x04200000, 0x04000000, 0x04200000, 0x04000000, 0x04200000, 0x04000000,
0875 0x04200000, 0x04000000, 0x04200000, 0x04000000, 0x04200000, 0x04000000,
0876 0x04200000, 0x04000000, 0x04200000, 0x04000000, 0x04200000, 0x04000000,
0877 0x04200000, 0x04000000, 0x04200000, 0x04000000, 0x04200000, 0x04000000,
0878 0x04200000, 0x04000000, 0x04200000, 0x04000000, 0x04200000, 0x04000000,
0879 0x04200000, 0x04000000, 0x04200000, 0x04000000, 0x04200000, 0x04000000,
0880 0x04200000, 0x04000000, 0x04200000, 0x04000000, 0x04200000, 0x04000000,
0881 0x04200000, 0x04000000, 0x04200000, 0x04000000, 0x04200000, 0x04000000,
0882 0x04200000, 0x04000000, 0x04200000, 0x04000000, 0x04200000, 0x04000000,
0883 0x04200000, 0x04000000, 0x04200000, 0x04000000, 0x04200000, 0x04000000,
0884 0x04200000, 0x04000000, 0x04200000, 0x04000000, 0x04200000, 0x04000000,
0885 0x04200000, 0x04000000, 0x04200000, 0x04000000, 0x04200000, 0x04000000,
0886 0x04200000, 0x04000000, 0x04200000, 0x04000000, 0x04200000, 0x04000000,
0887 0x04200000, 0x04000000, 0x04200000, 0x04000000, 0x04200000, 0x04000000,
0888 0x04200000, 0x04000000, 0x04200000, 0x04000000, 0x04200000, 0x04000000,
0889 0x04200000, 0x04000000, 0x04200000, 0x04000000, 0x000000ff, 0x000002fc,
0890 0x0000fa08, 0x00000305, 0x00000206, 0x00000304, 0x0000fb04, 0x0000fcff,
0891 0x000005fb, 0x0000fd01, 0x00000401, 0x00000006, 0x0000ff03, 0x000007fc,
0892 0x0000fc08, 0x00000203, 0x0000fffb, 0x00000600, 0x0000fa01, 0x0000fc03,
0893 0x0000fe06, 0x0000fe00, 0x00000102, 0x000007fd, 0x000004fb, 0x000006ff,
0894 0x000004fd, 0x0000fdfa, 0x000007fb, 0x0000fdfa, 0x0000fa06, 0x00000500,
0895 0x0000f902, 0x000007fa, 0x0000fafa, 0x00000500, 0x000007fa, 0x00000700,
0896 0x00000305, 0x000004ff, 0x00000801, 0x00000503, 0x000005f9, 0x00000404,
0897 0x0000fb08, 0x000005fd, 0x00000501, 0x00000405, 0x0000fb03, 0x000007fc,
0898 0x00000403, 0x00000303, 0x00000402, 0x0000faff, 0x0000fe05, 0x000005fd,
0899 0x0000fe01, 0x000007fa, 0x00000202, 0x00000504, 0x00000102, 0x000008fe,
0900 0x0000fa04, 0x0000fafc, 0x0000fe08, 0x000000f9, 0x000002fa, 0x000003fe,
0901 0x00000304, 0x000004f9, 0x00000100, 0x0000fd06, 0x000008fc, 0x00000701,
0902 0x00000504, 0x0000fdfe, 0x0000fdfc, 0x000003fe, 0x00000704, 0x000002fc,
0903 0x000004f9, 0x0000fdfd, 0x0000fa07, 0x00000205, 0x000003fd, 0x000005fb,
0904 0x000004f9, 0x00000804, 0x0000fc06, 0x0000fcf9, 0x00000100, 0x0000fe05,
0905 0x00000408, 0x0000fb02, 0x00000304, 0x000006fe, 0x000004fa, 0x00000305,
0906 0x000008fc, 0x00000102, 0x000001fd, 0x000004fc, 0x0000fe03, 0x00000701,
0907 0x000001fb, 0x000001f9, 0x00000206, 0x000006fd, 0x00000508, 0x00000700,
0908 0x00000304, 0x000005fe, 0x000005ff, 0x0000fa04, 0x00000303, 0x0000fefb,
0909 0x000007f9, 0x0000fefc, 0x000004fd, 0x000005fc, 0x0000fffd, 0x0000fc08,
0910 0x0000fbf9, 0x0000fd07, 0x000008fb, 0x0000fe02, 0x000006fb, 0x00000702,
0911 };
0912
0913 static const u32 lpphy_gain_idx_table[] = {
0914 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0915 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0916 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0917 0x10000001, 0x00000000, 0x20000082, 0x00000000, 0x40000104, 0x00000000,
0918 0x60004207, 0x00000001, 0x7000838a, 0x00000001, 0xd021050d, 0x00000001,
0919 0xe041c683, 0x00000001, 0x50828805, 0x00000000, 0x80e34288, 0x00000000,
0920 0xb144040b, 0x00000000, 0xe1a6058e, 0x00000000, 0x12064711, 0x00000001,
0921 0xb0a18612, 0x00000010, 0xe1024794, 0x00000010, 0x11630915, 0x00000011,
0922 0x31c3ca1b, 0x00000011, 0xc1848a9c, 0x00000018, 0xf1e50da0, 0x00000018,
0923 0x22468e21, 0x00000019, 0x4286d023, 0x00000019, 0xa347d0a4, 0x00000019,
0924 0xb36811a6, 0x00000019, 0xf3e89227, 0x00000019, 0x0408d329, 0x0000001a,
0925 0x244953aa, 0x0000001a, 0x346994ab, 0x0000001a, 0x54aa152c, 0x0000001a,
0926 0x64ca55ad, 0x0000001a, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0927 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0928 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0929 0x00000000, 0x00000000, 0x10000001, 0x00000000, 0x20000082, 0x00000000,
0930 0x40000104, 0x00000000, 0x60004207, 0x00000001, 0x7000838a, 0x00000001,
0931 0xd021050d, 0x00000001, 0xe041c683, 0x00000001, 0x50828805, 0x00000000,
0932 0x80e34288, 0x00000000, 0xb144040b, 0x00000000, 0xe1a6058e, 0x00000000,
0933 0x12064711, 0x00000001, 0xb0a18612, 0x00000010, 0xe1024794, 0x00000010,
0934 0x11630915, 0x00000011, 0x31c3ca1b, 0x00000011, 0xc1848a9c, 0x00000018,
0935 0xf1e50da0, 0x00000018, 0x22468e21, 0x00000019, 0x4286d023, 0x00000019,
0936 0xa347d0a4, 0x00000019, 0xb36811a6, 0x00000019, 0xf3e89227, 0x00000019,
0937 0x0408d329, 0x0000001a, 0x244953aa, 0x0000001a, 0x346994ab, 0x0000001a,
0938 0x54aa152c, 0x0000001a, 0x64ca55ad, 0x0000001a,
0939 };
0940
0941 static const u16 lpphy_aux_gain_idx_table[] = {
0942 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0943 0x0001, 0x0002, 0x0004, 0x0016, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0944 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0004, 0x0016,
0945 };
0946
0947 static const u32 lpphy_gain_value_table[] = {
0948 0x00000008, 0x0000000e, 0x00000014, 0x0000001a, 0x000000fb, 0x00000004,
0949 0x00000008, 0x0000000d, 0x00000001, 0x00000004, 0x00000007, 0x0000000a,
0950 0x0000000d, 0x00000010, 0x00000012, 0x00000015, 0x00000000, 0x00000006,
0951 0x0000000c, 0x00000000, 0x00000000, 0x00000000, 0x00000012, 0x00000000,
0952 0x00000000, 0x00000000, 0x00000018, 0x00000000, 0x00000000, 0x00000000,
0953 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0954 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0955 0x0000001e, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0956 0x00000000, 0x00000003, 0x00000006, 0x00000009, 0x0000000c, 0x0000000f,
0957 0x00000012, 0x00000015, 0x00000018, 0x0000001b, 0x0000001e, 0x00000000,
0958 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000009, 0x000000f1,
0959 0x00000000, 0x00000000,
0960 };
0961
0962 static const u16 lpphy_gain_table[] = {
0963 0x0000, 0x0400, 0x0800, 0x0802, 0x0804, 0x0806, 0x0807, 0x0808, 0x080a,
0964 0x080b, 0x080c, 0x080e, 0x080f, 0x0810, 0x0812, 0x0813, 0x0814, 0x0816,
0965 0x0817, 0x081a, 0x081b, 0x081f, 0x0820, 0x0824, 0x0830, 0x0834, 0x0837,
0966 0x083b, 0x083f, 0x0840, 0x0844, 0x0857, 0x085b, 0x085f, 0x08d7, 0x08db,
0967 0x08df, 0x0957, 0x095b, 0x095f, 0x0b57, 0x0b5b, 0x0b5f, 0x0f5f, 0x135f,
0968 0x175f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0969 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0970 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0971 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0972 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0973 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0974 };
0975
0976 static const u32 lpphy_a0_gain_idx_table[] = {
0977 0x001111e0, 0x00652051, 0x00606055, 0x005b005a, 0x00555060, 0x00511065,
0978 0x004c806b, 0x0047d072, 0x00444078, 0x00400080, 0x003ca087, 0x0039408f,
0979 0x0035e098, 0x0032e0a1, 0x003030aa, 0x002d80b4, 0x002ae0bf, 0x002880ca,
0980 0x002640d6, 0x002410e3, 0x002220f0, 0x002020ff, 0x001e510e, 0x001ca11e,
0981 0x001b012f, 0x00199140, 0x00182153, 0x0016c168, 0x0015817d, 0x00145193,
0982 0x001321ab, 0x001211c5, 0x001111e0, 0x001021fc, 0x000f321a, 0x000e523a,
0983 0x000d925c, 0x000cd27f, 0x000c12a5, 0x000b62cd, 0x000ac2f8, 0x000a2325,
0984 0x00099355, 0x00091387, 0x000883bd, 0x000813f5, 0x0007a432, 0x00073471,
0985 0x0006c4b5, 0x000664fc, 0x00061547, 0x0005b598, 0x000565ec, 0x00051646,
0986 0x0004d6a5, 0x0004870a, 0x00044775, 0x000407e6, 0x0003d85e, 0x000398dd,
0987 0x00036963, 0x000339f2, 0x00030a89, 0x0002db28,
0988 };
0989
0990 static const u16 lpphy_a0_aux_gain_idx_table[] = {
0991 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0992 0x0000, 0x0000, 0x0002, 0x0014, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0993 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0002, 0x0014,
0994 };
0995
0996 static const u32 lpphy_a0_gain_value_table[] = {
0997 0x00000008, 0x0000000e, 0x00000014, 0x0000001a, 0x000000fb, 0x00000004,
0998 0x00000008, 0x0000000d, 0x00000001, 0x00000004, 0x00000007, 0x0000000a,
0999 0x0000000d, 0x00000010, 0x00000012, 0x00000015, 0x00000000, 0x00000006,
1000 0x0000000c, 0x00000000, 0x00000000, 0x00000000, 0x00000012, 0x00000000,
1001 0x00000000, 0x00000000, 0x00000018, 0x00000000, 0x00000000, 0x00000000,
1002 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1003 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1004 0x0000001e, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1005 0x00000000, 0x00000003, 0x00000006, 0x00000009, 0x0000000c, 0x0000000f,
1006 0x00000012, 0x00000015, 0x00000018, 0x0000001b, 0x0000001e, 0x00000000,
1007 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000f, 0x000000f7,
1008 0x00000000, 0x00000000,
1009 };
1010
1011 static const u16 lpphy_a0_gain_table[] = {
1012 0x0000, 0x0002, 0x0004, 0x0006, 0x0007, 0x0008, 0x000a, 0x000b, 0x000c,
1013 0x000e, 0x000f, 0x0010, 0x0012, 0x0013, 0x0014, 0x0016, 0x0017, 0x001a,
1014 0x001b, 0x001f, 0x0020, 0x0024, 0x0030, 0x0034, 0x0037, 0x003b, 0x003f,
1015 0x0040, 0x0044, 0x0057, 0x005b, 0x005f, 0x00d7, 0x00db, 0x00df, 0x0157,
1016 0x015b, 0x015f, 0x0357, 0x035b, 0x035f, 0x075f, 0x0b5f, 0x0f5f, 0x0000,
1017 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1018 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1019 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1020 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1021 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1022 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1023 };
1024
1025 static const u16 lpphy_sw_control_table[] = {
1026 0x0128, 0x0128, 0x0009, 0x0009, 0x0028, 0x0028, 0x0028, 0x0028, 0x0128,
1027 0x0128, 0x0009, 0x0009, 0x0028, 0x0028, 0x0028, 0x0028, 0x0009, 0x0009,
1028 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0018, 0x0018, 0x0018,
1029 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0128, 0x0128, 0x0009, 0x0009,
1030 0x0028, 0x0028, 0x0028, 0x0028, 0x0128, 0x0128, 0x0009, 0x0009, 0x0028,
1031 0x0028, 0x0028, 0x0028, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009,
1032 0x0009, 0x0009, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
1033 0x0018,
1034 };
1035
1036 static const u8 lpphy_hf_table[] = {
1037 0x4b, 0x36, 0x24, 0x18, 0x49, 0x34, 0x23, 0x17, 0x48,
1038 0x33, 0x23, 0x17, 0x48, 0x33, 0x23, 0x17,
1039 };
1040
1041 static const u32 lpphy_papd_eps_table[] = {
1042 0x00000000, 0x00013ffc, 0x0001dff3, 0x0001bff0, 0x00023fe9, 0x00021fdf,
1043 0x00028fdf, 0x00033fd2, 0x00039fcb, 0x00043fc7, 0x0004efc2, 0x00055fb5,
1044 0x0005cfb0, 0x00063fa8, 0x00068fa3, 0x00071f98, 0x0007ef92, 0x00084f8b,
1045 0x0008df82, 0x00097f77, 0x0009df69, 0x000a3f62, 0x000adf57, 0x000b6f4c,
1046 0x000bff41, 0x000c9f39, 0x000cff30, 0x000dbf27, 0x000e4f1e, 0x000edf16,
1047 0x000f7f13, 0x00102f11, 0x00110f10, 0x0011df11, 0x0012ef15, 0x00143f1c,
1048 0x00158f27, 0x00172f35, 0x00193f47, 0x001baf5f, 0x001e6f7e, 0x0021cfa4,
1049 0x0025bfd2, 0x002a2008, 0x002fb047, 0x00360090, 0x003d40e0, 0x0045c135,
1050 0x004fb189, 0x005ae1d7, 0x0067221d, 0x0075025a, 0x007ff291, 0x007ff2bf,
1051 0x007ff2e3, 0x007ff2ff, 0x007ff315, 0x007ff329, 0x007ff33f, 0x007ff356,
1052 0x007ff36e, 0x007ff39c, 0x007ff441, 0x007ff506,
1053 };
1054
1055 static const u32 lpphy_papd_mult_table[] = {
1056 0x001111e0, 0x00652051, 0x00606055, 0x005b005a, 0x00555060, 0x00511065,
1057 0x004c806b, 0x0047d072, 0x00444078, 0x00400080, 0x003ca087, 0x0039408f,
1058 0x0035e098, 0x0032e0a1, 0x003030aa, 0x002d80b4, 0x002ae0bf, 0x002880ca,
1059 0x002640d6, 0x002410e3, 0x002220f0, 0x002020ff, 0x001e510e, 0x001ca11e,
1060 0x001b012f, 0x00199140, 0x00182153, 0x0016c168, 0x0015817d, 0x00145193,
1061 0x001321ab, 0x001211c5, 0x001111e0, 0x001021fc, 0x000f321a, 0x000e523a,
1062 0x000d925c, 0x000cd27f, 0x000c12a5, 0x000b62cd, 0x000ac2f8, 0x000a2325,
1063 0x00099355, 0x00091387, 0x000883bd, 0x000813f5, 0x0007a432, 0x00073471,
1064 0x0006c4b5, 0x000664fc, 0x00061547, 0x0005b598, 0x000565ec, 0x00051646,
1065 0x0004d6a5, 0x0004870a, 0x00044775, 0x000407e6, 0x0003d85e, 0x000398dd,
1066 0x00036963, 0x000339f2, 0x00030a89, 0x0002db28,
1067 };
1068
1069 static struct lpphy_tx_gain_table_entry lpphy_rev0_nopa_tx_gain_table[] = {
1070 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 152, },
1071 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 147, },
1072 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 143, },
1073 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 139, },
1074 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 135, },
1075 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 131, },
1076 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 128, },
1077 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 124, },
1078 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 121, },
1079 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 117, },
1080 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 114, },
1081 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 111, },
1082 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 107, },
1083 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 104, },
1084 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 101, },
1085 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 99, },
1086 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 96, },
1087 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 93, },
1088 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 90, },
1089 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 88, },
1090 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 85, },
1091 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 83, },
1092 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 81, },
1093 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 78, },
1094 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 76, },
1095 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 74, },
1096 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 72, },
1097 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 70, },
1098 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 68, },
1099 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 66, },
1100 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 64, },
1101 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 62, },
1102 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 60, },
1103 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 59, },
1104 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 57, },
1105 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 72, },
1106 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 70, },
1107 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 68, },
1108 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 66, },
1109 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 64, },
1110 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 62, },
1111 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 60, },
1112 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 59, },
1113 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 57, },
1114 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 71, },
1115 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 69, },
1116 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 67, },
1117 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 65, },
1118 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 63, },
1119 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 62, },
1120 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 60, },
1121 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 58, },
1122 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 57, },
1123 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 70, },
1124 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 68, },
1125 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 66, },
1126 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 65, },
1127 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 63, },
1128 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 61, },
1129 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 59, },
1130 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 58, },
1131 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 71, },
1132 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 69, },
1133 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 67, },
1134 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 65, },
1135 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 63, },
1136 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 61, },
1137 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 60, },
1138 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 58, },
1139 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 56, },
1140 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 70, },
1141 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 68, },
1142 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 66, },
1143 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 64, },
1144 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 62, },
1145 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 60, },
1146 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 59, },
1147 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 72, },
1148 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 70, },
1149 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 68, },
1150 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 66, },
1151 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 64, },
1152 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 62, },
1153 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 60, },
1154 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 59, },
1155 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 72, },
1156 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 70, },
1157 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 68, },
1158 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 66, },
1159 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 64, },
1160 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 63, },
1161 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 61, },
1162 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 59, },
1163 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 57, },
1164 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 72, },
1165 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 70, },
1166 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 68, },
1167 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 66, },
1168 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 64, },
1169 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 62, },
1170 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 60, },
1171 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 59, },
1172 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 72, },
1173 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 70, },
1174 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 68, },
1175 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 66, },
1176 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 64, },
1177 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 62, },
1178 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 61, },
1179 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 59, },
1180 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 73, },
1181 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 71, },
1182 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 69, },
1183 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 67, },
1184 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 65, },
1185 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 63, },
1186 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 61, },
1187 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 59, },
1188 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 72, },
1189 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 70, },
1190 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 68, },
1191 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 66, },
1192 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 65, },
1193 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 63, },
1194 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 61, },
1195 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 59, },
1196 { .gm = 7, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 73, },
1197 { .gm = 7, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 71, },
1198 };
1199
1200 static struct lpphy_tx_gain_table_entry lpphy_rev0_2ghz_tx_gain_table[] = {
1201 { .gm = 4, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 64, },
1202 { .gm = 4, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 62, },
1203 { .gm = 4, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 60, },
1204 { .gm = 4, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 59, },
1205 { .gm = 4, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 72, },
1206 { .gm = 4, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 70, },
1207 { .gm = 4, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 68, },
1208 { .gm = 4, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 66, },
1209 { .gm = 4, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 64, },
1210 { .gm = 4, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 62, },
1211 { .gm = 4, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 60, },
1212 { .gm = 4, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 59, },
1213 { .gm = 4, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 72, },
1214 { .gm = 4, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 70, },
1215 { .gm = 4, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 68, },
1216 { .gm = 4, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 66, },
1217 { .gm = 4, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 64, },
1218 { .gm = 4, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 63, },
1219 { .gm = 4, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 61, },
1220 { .gm = 4, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 59, },
1221 { .gm = 4, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 57, },
1222 { .gm = 4, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 72, },
1223 { .gm = 4, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 70, },
1224 { .gm = 4, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 68, },
1225 { .gm = 4, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 66, },
1226 { .gm = 4, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 64, },
1227 { .gm = 4, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 62, },
1228 { .gm = 4, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 60, },
1229 { .gm = 4, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 59, },
1230 { .gm = 4, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 72, },
1231 { .gm = 4, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 70, },
1232 { .gm = 4, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 68, },
1233 { .gm = 4, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 66, },
1234 { .gm = 4, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 64, },
1235 { .gm = 4, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 62, },
1236 { .gm = 4, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 61, },
1237 { .gm = 4, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 59, },
1238 { .gm = 4, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 73, },
1239 { .gm = 4, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 71, },
1240 { .gm = 4, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 69, },
1241 { .gm = 4, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 67, },
1242 { .gm = 4, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 65, },
1243 { .gm = 4, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 63, },
1244 { .gm = 4, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 61, },
1245 { .gm = 4, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 59, },
1246 { .gm = 4, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 72, },
1247 { .gm = 4, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 70, },
1248 { .gm = 4, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 68, },
1249 { .gm = 4, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 66, },
1250 { .gm = 4, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 65, },
1251 { .gm = 4, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 63, },
1252 { .gm = 4, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 61, },
1253 { .gm = 4, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 59, },
1254 { .gm = 4, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 73, },
1255 { .gm = 4, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 71, },
1256 { .gm = 4, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 69, },
1257 { .gm = 4, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 67, },
1258 { .gm = 4, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 65, },
1259 { .gm = 4, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 63, },
1260 { .gm = 4, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 61, },
1261 { .gm = 4, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 60, },
1262 { .gm = 4, .pga = 10, .pad = 6, .dac = 0, .bb_mult = 72, },
1263 { .gm = 4, .pga = 10, .pad = 6, .dac = 0, .bb_mult = 70, },
1264 { .gm = 4, .pga = 10, .pad = 6, .dac = 0, .bb_mult = 68, },
1265 { .gm = 4, .pga = 10, .pad = 6, .dac = 0, .bb_mult = 66, },
1266 { .gm = 4, .pga = 10, .pad = 6, .dac = 0, .bb_mult = 64, },
1267 { .gm = 4, .pga = 10, .pad = 6, .dac = 0, .bb_mult = 62, },
1268 { .gm = 4, .pga = 10, .pad = 6, .dac = 0, .bb_mult = 60, },
1269 { .gm = 4, .pga = 10, .pad = 6, .dac = 0, .bb_mult = 59, },
1270 { .gm = 4, .pga = 10, .pad = 5, .dac = 0, .bb_mult = 72, },
1271 { .gm = 4, .pga = 10, .pad = 5, .dac = 0, .bb_mult = 70, },
1272 { .gm = 4, .pga = 10, .pad = 5, .dac = 0, .bb_mult = 68, },
1273 { .gm = 4, .pga = 10, .pad = 5, .dac = 0, .bb_mult = 66, },
1274 { .gm = 4, .pga = 10, .pad = 5, .dac = 0, .bb_mult = 64, },
1275 { .gm = 4, .pga = 10, .pad = 5, .dac = 0, .bb_mult = 62, },
1276 { .gm = 4, .pga = 10, .pad = 5, .dac = 0, .bb_mult = 60, },
1277 { .gm = 4, .pga = 10, .pad = 5, .dac = 0, .bb_mult = 59, },
1278 { .gm = 4, .pga = 9, .pad = 5, .dac = 0, .bb_mult = 70, },
1279 { .gm = 4, .pga = 9, .pad = 5, .dac = 0, .bb_mult = 68, },
1280 { .gm = 4, .pga = 9, .pad = 5, .dac = 0, .bb_mult = 66, },
1281 { .gm = 4, .pga = 9, .pad = 5, .dac = 0, .bb_mult = 64, },
1282 { .gm = 4, .pga = 9, .pad = 5, .dac = 0, .bb_mult = 63, },
1283 { .gm = 4, .pga = 9, .pad = 5, .dac = 0, .bb_mult = 61, },
1284 { .gm = 4, .pga = 9, .pad = 5, .dac = 0, .bb_mult = 59, },
1285 { .gm = 4, .pga = 9, .pad = 4, .dac = 0, .bb_mult = 71, },
1286 { .gm = 4, .pga = 9, .pad = 4, .dac = 0, .bb_mult = 69, },
1287 { .gm = 4, .pga = 9, .pad = 4, .dac = 0, .bb_mult = 67, },
1288 { .gm = 4, .pga = 9, .pad = 4, .dac = 0, .bb_mult = 65, },
1289 { .gm = 4, .pga = 9, .pad = 4, .dac = 0, .bb_mult = 63, },
1290 { .gm = 4, .pga = 9, .pad = 4, .dac = 0, .bb_mult = 62, },
1291 { .gm = 4, .pga = 9, .pad = 4, .dac = 0, .bb_mult = 60, },
1292 { .gm = 4, .pga = 9, .pad = 4, .dac = 0, .bb_mult = 58, },
1293 { .gm = 4, .pga = 8, .pad = 4, .dac = 0, .bb_mult = 70, },
1294 { .gm = 4, .pga = 8, .pad = 4, .dac = 0, .bb_mult = 68, },
1295 { .gm = 4, .pga = 8, .pad = 4, .dac = 0, .bb_mult = 66, },
1296 { .gm = 4, .pga = 8, .pad = 4, .dac = 0, .bb_mult = 65, },
1297 { .gm = 4, .pga = 8, .pad = 4, .dac = 0, .bb_mult = 63, },
1298 { .gm = 4, .pga = 8, .pad = 4, .dac = 0, .bb_mult = 61, },
1299 { .gm = 4, .pga = 8, .pad = 4, .dac = 0, .bb_mult = 59, },
1300 { .gm = 4, .pga = 7, .pad = 4, .dac = 0, .bb_mult = 68, },
1301 { .gm = 4, .pga = 7, .pad = 4, .dac = 0, .bb_mult = 66, },
1302 { .gm = 4, .pga = 7, .pad = 4, .dac = 0, .bb_mult = 64, },
1303 { .gm = 4, .pga = 7, .pad = 4, .dac = 0, .bb_mult = 62, },
1304 { .gm = 4, .pga = 7, .pad = 4, .dac = 0, .bb_mult = 61, },
1305 { .gm = 4, .pga = 7, .pad = 4, .dac = 0, .bb_mult = 59, },
1306 { .gm = 4, .pga = 7, .pad = 3, .dac = 0, .bb_mult = 67, },
1307 { .gm = 4, .pga = 7, .pad = 3, .dac = 0, .bb_mult = 65, },
1308 { .gm = 4, .pga = 7, .pad = 3, .dac = 0, .bb_mult = 63, },
1309 { .gm = 4, .pga = 7, .pad = 3, .dac = 0, .bb_mult = 62, },
1310 { .gm = 4, .pga = 7, .pad = 3, .dac = 0, .bb_mult = 60, },
1311 { .gm = 4, .pga = 6, .pad = 3, .dac = 0, .bb_mult = 65, },
1312 { .gm = 4, .pga = 6, .pad = 3, .dac = 0, .bb_mult = 63, },
1313 { .gm = 4, .pga = 6, .pad = 3, .dac = 0, .bb_mult = 61, },
1314 { .gm = 4, .pga = 6, .pad = 3, .dac = 0, .bb_mult = 60, },
1315 { .gm = 4, .pga = 6, .pad = 3, .dac = 0, .bb_mult = 58, },
1316 { .gm = 4, .pga = 5, .pad = 3, .dac = 0, .bb_mult = 68, },
1317 { .gm = 4, .pga = 5, .pad = 3, .dac = 0, .bb_mult = 66, },
1318 { .gm = 4, .pga = 5, .pad = 3, .dac = 0, .bb_mult = 64, },
1319 { .gm = 4, .pga = 5, .pad = 3, .dac = 0, .bb_mult = 62, },
1320 { .gm = 4, .pga = 5, .pad = 3, .dac = 0, .bb_mult = 60, },
1321 { .gm = 4, .pga = 5, .pad = 3, .dac = 0, .bb_mult = 59, },
1322 { .gm = 4, .pga = 5, .pad = 3, .dac = 0, .bb_mult = 57, },
1323 { .gm = 4, .pga = 4, .pad = 2, .dac = 0, .bb_mult = 83, },
1324 { .gm = 4, .pga = 4, .pad = 2, .dac = 0, .bb_mult = 81, },
1325 { .gm = 4, .pga = 4, .pad = 2, .dac = 0, .bb_mult = 78, },
1326 { .gm = 4, .pga = 4, .pad = 2, .dac = 0, .bb_mult = 76, },
1327 { .gm = 4, .pga = 4, .pad = 2, .dac = 0, .bb_mult = 74, },
1328 { .gm = 4, .pga = 4, .pad = 2, .dac = 0, .bb_mult = 72, },
1329 };
1330
1331 static struct lpphy_tx_gain_table_entry lpphy_rev0_5ghz_tx_gain_table[] = {
1332 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 99, },
1333 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 96, },
1334 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 93, },
1335 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 90, },
1336 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 88, },
1337 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 85, },
1338 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 83, },
1339 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 81, },
1340 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 78, },
1341 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 76, },
1342 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 74, },
1343 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 72, },
1344 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 70, },
1345 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 68, },
1346 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 66, },
1347 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 64, },
1348 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 62, },
1349 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 60, },
1350 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 59, },
1351 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 57, },
1352 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 55, },
1353 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 72, },
1354 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 70, },
1355 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 68, },
1356 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 66, },
1357 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 64, },
1358 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 62, },
1359 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 60, },
1360 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 58, },
1361 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 56, },
1362 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 55, },
1363 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 71, },
1364 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 69, },
1365 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 67, },
1366 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 65, },
1367 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 63, },
1368 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 62, },
1369 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 60, },
1370 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 58, },
1371 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 56, },
1372 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 72, },
1373 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 70, },
1374 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 68, },
1375 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 66, },
1376 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 64, },
1377 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 62, },
1378 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 60, },
1379 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 59, },
1380 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 57, },
1381 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 73, },
1382 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 71, },
1383 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 69, },
1384 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 67, },
1385 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 65, },
1386 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 63, },
1387 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 61, },
1388 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 60, },
1389 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 58, },
1390 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 71, },
1391 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 69, },
1392 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 67, },
1393 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 65, },
1394 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 63, },
1395 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 61, },
1396 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 60, },
1397 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 58, },
1398 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 70, },
1399 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 68, },
1400 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 66, },
1401 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 64, },
1402 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 62, },
1403 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 61, },
1404 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 59, },
1405 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 57, },
1406 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 56, },
1407 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 68, },
1408 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 66, },
1409 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 65, },
1410 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 63, },
1411 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 61, },
1412 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 59, },
1413 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 58, },
1414 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 70, },
1415 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 68, },
1416 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 66, },
1417 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 64, },
1418 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 63, },
1419 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 61, },
1420 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 59, },
1421 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 57, },
1422 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 70, },
1423 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 68, },
1424 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 66, },
1425 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 64, },
1426 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 62, },
1427 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 60, },
1428 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 59, },
1429 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 57, },
1430 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 70, },
1431 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 68, },
1432 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 66, },
1433 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 64, },
1434 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 62, },
1435 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 61, },
1436 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 59, },
1437 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 57, },
1438 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 70, },
1439 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 68, },
1440 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 66, },
1441 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 64, },
1442 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 62, },
1443 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 61, },
1444 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 59, },
1445 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 57, },
1446 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 70, },
1447 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 68, },
1448 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 66, },
1449 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 64, },
1450 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 62, },
1451 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 61, },
1452 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 59, },
1453 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 57, },
1454 { .gm = 7, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 69, },
1455 { .gm = 7, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 67, },
1456 { .gm = 7, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 65, },
1457 { .gm = 7, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 63, },
1458 { .gm = 7, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 62, },
1459 { .gm = 7, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 60, },
1460 };
1461
1462 static struct lpphy_tx_gain_table_entry lpphy_rev1_nopa_tx_gain_table[] = {
1463 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 152, },
1464 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 147, },
1465 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 143, },
1466 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 139, },
1467 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 135, },
1468 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 131, },
1469 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 128, },
1470 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 124, },
1471 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 121, },
1472 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 117, },
1473 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 114, },
1474 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 111, },
1475 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 107, },
1476 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 104, },
1477 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 101, },
1478 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 99, },
1479 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 96, },
1480 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 93, },
1481 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 90, },
1482 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 88, },
1483 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 85, },
1484 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 83, },
1485 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 81, },
1486 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 78, },
1487 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 76, },
1488 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 74, },
1489 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 72, },
1490 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 70, },
1491 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 68, },
1492 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 66, },
1493 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 64, },
1494 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 62, },
1495 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 60, },
1496 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 59, },
1497 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 57, },
1498 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 72, },
1499 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 70, },
1500 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 68, },
1501 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 66, },
1502 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 64, },
1503 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 62, },
1504 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 60, },
1505 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 59, },
1506 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 57, },
1507 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 72, },
1508 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 70, },
1509 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 68, },
1510 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 66, },
1511 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 64, },
1512 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 62, },
1513 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 60, },
1514 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 59, },
1515 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 57, },
1516 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 71, },
1517 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 69, },
1518 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 67, },
1519 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 65, },
1520 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 63, },
1521 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 62, },
1522 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 60, },
1523 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 58, },
1524 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 57, },
1525 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 70, },
1526 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 68, },
1527 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 66, },
1528 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 65, },
1529 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 63, },
1530 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 61, },
1531 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 59, },
1532 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 58, },
1533 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 71, },
1534 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 69, },
1535 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 67, },
1536 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 65, },
1537 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 63, },
1538 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 61, },
1539 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 60, },
1540 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 58, },
1541 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 56, },
1542 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 70, },
1543 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 68, },
1544 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 66, },
1545 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 64, },
1546 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 62, },
1547 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 60, },
1548 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 59, },
1549 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 72, },
1550 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 70, },
1551 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 68, },
1552 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 66, },
1553 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 64, },
1554 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 62, },
1555 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 60, },
1556 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 59, },
1557 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 72, },
1558 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 70, },
1559 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 68, },
1560 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 66, },
1561 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 64, },
1562 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 63, },
1563 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 61, },
1564 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 59, },
1565 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 57, },
1566 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 72, },
1567 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 70, },
1568 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 68, },
1569 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 66, },
1570 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 64, },
1571 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 62, },
1572 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 60, },
1573 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 59, },
1574 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 72, },
1575 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 70, },
1576 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 68, },
1577 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 66, },
1578 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 64, },
1579 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 62, },
1580 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 61, },
1581 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 59, },
1582 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 73, },
1583 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 71, },
1584 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 69, },
1585 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 67, },
1586 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 65, },
1587 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 63, },
1588 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 61, },
1589 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 59, },
1590 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 72, },
1591 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 70, },
1592 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 68, },
1593 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 66, },
1594 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 65, },
1595 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 63, },
1596 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 61, },
1597 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 59, },
1598 { .gm = 7, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 73, },
1599 { .gm = 7, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 71, },
1600 };
1601
1602 static struct lpphy_tx_gain_table_entry lpphy_rev1_2ghz_tx_gain_table[] = {
1603 { .gm = 4, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 90, },
1604 { .gm = 4, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 88, },
1605 { .gm = 4, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 85, },
1606 { .gm = 4, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 83, },
1607 { .gm = 4, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 81, },
1608 { .gm = 4, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 78, },
1609 { .gm = 4, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 76, },
1610 { .gm = 4, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 74, },
1611 { .gm = 4, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 72, },
1612 { .gm = 4, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 70, },
1613 { .gm = 4, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 68, },
1614 { .gm = 4, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 66, },
1615 { .gm = 4, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 64, },
1616 { .gm = 4, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 62, },
1617 { .gm = 4, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 60, },
1618 { .gm = 4, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 59, },
1619 { .gm = 4, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 72, },
1620 { .gm = 4, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 70, },
1621 { .gm = 4, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 68, },
1622 { .gm = 4, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 66, },
1623 { .gm = 4, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 64, },
1624 { .gm = 4, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 62, },
1625 { .gm = 4, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 60, },
1626 { .gm = 4, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 59, },
1627 { .gm = 4, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 72, },
1628 { .gm = 4, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 70, },
1629 { .gm = 4, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 68, },
1630 { .gm = 4, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 66, },
1631 { .gm = 4, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 64, },
1632 { .gm = 4, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 62, },
1633 { .gm = 4, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 60, },
1634 { .gm = 4, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 59, },
1635 { .gm = 4, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 72, },
1636 { .gm = 4, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 70, },
1637 { .gm = 4, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 68, },
1638 { .gm = 4, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 66, },
1639 { .gm = 4, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 64, },
1640 { .gm = 4, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 62, },
1641 { .gm = 4, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 60, },
1642 { .gm = 4, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 59, },
1643 { .gm = 4, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 72, },
1644 { .gm = 4, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 70, },
1645 { .gm = 4, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 68, },
1646 { .gm = 4, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 66, },
1647 { .gm = 4, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 64, },
1648 { .gm = 4, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 62, },
1649 { .gm = 4, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 60, },
1650 { .gm = 4, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 59, },
1651 { .gm = 4, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 72, },
1652 { .gm = 4, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 70, },
1653 { .gm = 4, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 68, },
1654 { .gm = 4, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 66, },
1655 { .gm = 4, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 64, },
1656 { .gm = 4, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 62, },
1657 { .gm = 4, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 60, },
1658 { .gm = 4, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 59, },
1659 { .gm = 4, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 72, },
1660 { .gm = 4, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 70, },
1661 { .gm = 4, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 68, },
1662 { .gm = 4, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 66, },
1663 { .gm = 4, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 64, },
1664 { .gm = 4, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 62, },
1665 { .gm = 4, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 60, },
1666 { .gm = 4, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 59, },
1667 { .gm = 4, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 72, },
1668 { .gm = 4, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 70, },
1669 { .gm = 4, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 68, },
1670 { .gm = 4, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 66, },
1671 { .gm = 4, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 64, },
1672 { .gm = 4, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 62, },
1673 { .gm = 4, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 60, },
1674 { .gm = 4, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 59, },
1675 { .gm = 4, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 72, },
1676 { .gm = 4, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 70, },
1677 { .gm = 4, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 68, },
1678 { .gm = 4, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 66, },
1679 { .gm = 4, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 64, },
1680 { .gm = 4, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 63, },
1681 { .gm = 4, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 61, },
1682 { .gm = 4, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 59, },
1683 { .gm = 4, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 57, },
1684 { .gm = 4, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 72, },
1685 { .gm = 4, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 70, },
1686 { .gm = 4, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 68, },
1687 { .gm = 4, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 66, },
1688 { .gm = 4, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 64, },
1689 { .gm = 4, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 62, },
1690 { .gm = 4, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 60, },
1691 { .gm = 4, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 59, },
1692 { .gm = 4, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 72, },
1693 { .gm = 4, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 70, },
1694 { .gm = 4, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 68, },
1695 { .gm = 4, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 66, },
1696 { .gm = 4, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 64, },
1697 { .gm = 4, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 62, },
1698 { .gm = 4, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 61, },
1699 { .gm = 4, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 59, },
1700 { .gm = 4, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 73, },
1701 { .gm = 4, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 71, },
1702 { .gm = 4, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 69, },
1703 { .gm = 4, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 67, },
1704 { .gm = 4, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 65, },
1705 { .gm = 4, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 63, },
1706 { .gm = 4, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 61, },
1707 { .gm = 4, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 59, },
1708 { .gm = 4, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 72, },
1709 { .gm = 4, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 70, },
1710 { .gm = 4, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 68, },
1711 { .gm = 4, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 66, },
1712 { .gm = 4, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 65, },
1713 { .gm = 4, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 63, },
1714 { .gm = 4, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 61, },
1715 { .gm = 4, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 59, },
1716 { .gm = 4, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 73, },
1717 { .gm = 4, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 71, },
1718 { .gm = 4, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 69, },
1719 { .gm = 4, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 67, },
1720 { .gm = 4, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 65, },
1721 { .gm = 4, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 63, },
1722 { .gm = 4, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 61, },
1723 { .gm = 4, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 60, },
1724 { .gm = 4, .pga = 10, .pad = 6, .dac = 0, .bb_mult = 72, },
1725 { .gm = 4, .pga = 10, .pad = 6, .dac = 0, .bb_mult = 70, },
1726 { .gm = 4, .pga = 10, .pad = 6, .dac = 0, .bb_mult = 68, },
1727 { .gm = 4, .pga = 10, .pad = 6, .dac = 0, .bb_mult = 66, },
1728 { .gm = 4, .pga = 10, .pad = 6, .dac = 0, .bb_mult = 64, },
1729 { .gm = 4, .pga = 10, .pad = 6, .dac = 0, .bb_mult = 62, },
1730 { .gm = 4, .pga = 10, .pad = 6, .dac = 0, .bb_mult = 60, },
1731 };
1732
1733 static struct lpphy_tx_gain_table_entry lpphy_rev1_5ghz_tx_gain_table[] = {
1734 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 99, },
1735 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 96, },
1736 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 93, },
1737 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 90, },
1738 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 88, },
1739 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 85, },
1740 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 83, },
1741 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 81, },
1742 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 78, },
1743 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 76, },
1744 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 74, },
1745 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 72, },
1746 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 70, },
1747 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 68, },
1748 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 66, },
1749 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 64, },
1750 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 62, },
1751 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 60, },
1752 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 59, },
1753 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 57, },
1754 { .gm = 7, .pga = 15, .pad = 15, .dac = 0, .bb_mult = 55, },
1755 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 72, },
1756 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 70, },
1757 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 68, },
1758 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 66, },
1759 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 64, },
1760 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 62, },
1761 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 60, },
1762 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 58, },
1763 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 56, },
1764 { .gm = 7, .pga = 15, .pad = 14, .dac = 0, .bb_mult = 55, },
1765 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 71, },
1766 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 69, },
1767 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 67, },
1768 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 65, },
1769 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 63, },
1770 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 62, },
1771 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 60, },
1772 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 58, },
1773 { .gm = 7, .pga = 15, .pad = 13, .dac = 0, .bb_mult = 56, },
1774 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 72, },
1775 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 70, },
1776 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 68, },
1777 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 66, },
1778 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 64, },
1779 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 62, },
1780 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 60, },
1781 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 59, },
1782 { .gm = 7, .pga = 15, .pad = 12, .dac = 0, .bb_mult = 57, },
1783 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 73, },
1784 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 71, },
1785 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 69, },
1786 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 67, },
1787 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 65, },
1788 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 63, },
1789 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 61, },
1790 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 60, },
1791 { .gm = 7, .pga = 15, .pad = 11, .dac = 0, .bb_mult = 58, },
1792 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 71, },
1793 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 69, },
1794 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 67, },
1795 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 65, },
1796 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 63, },
1797 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 61, },
1798 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 60, },
1799 { .gm = 7, .pga = 15, .pad = 10, .dac = 0, .bb_mult = 58, },
1800 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 70, },
1801 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 68, },
1802 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 66, },
1803 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 64, },
1804 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 62, },
1805 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 61, },
1806 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 59, },
1807 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 57, },
1808 { .gm = 7, .pga = 15, .pad = 9, .dac = 0, .bb_mult = 56, },
1809 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 68, },
1810 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 66, },
1811 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 65, },
1812 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 63, },
1813 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 61, },
1814 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 59, },
1815 { .gm = 7, .pga = 14, .pad = 9, .dac = 0, .bb_mult = 58, },
1816 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 70, },
1817 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 68, },
1818 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 66, },
1819 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 64, },
1820 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 63, },
1821 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 61, },
1822 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 59, },
1823 { .gm = 7, .pga = 13, .pad = 9, .dac = 0, .bb_mult = 57, },
1824 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 70, },
1825 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 68, },
1826 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 66, },
1827 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 64, },
1828 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 62, },
1829 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 60, },
1830 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 59, },
1831 { .gm = 7, .pga = 13, .pad = 8, .dac = 0, .bb_mult = 57, },
1832 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 70, },
1833 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 68, },
1834 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 66, },
1835 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 64, },
1836 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 62, },
1837 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 61, },
1838 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 59, },
1839 { .gm = 7, .pga = 12, .pad = 8, .dac = 0, .bb_mult = 57, },
1840 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 70, },
1841 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 68, },
1842 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 66, },
1843 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 64, },
1844 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 62, },
1845 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 61, },
1846 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 59, },
1847 { .gm = 7, .pga = 12, .pad = 7, .dac = 0, .bb_mult = 57, },
1848 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 70, },
1849 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 68, },
1850 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 66, },
1851 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 64, },
1852 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 62, },
1853 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 61, },
1854 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 59, },
1855 { .gm = 7, .pga = 11, .pad = 7, .dac = 0, .bb_mult = 57, },
1856 { .gm = 7, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 69, },
1857 { .gm = 7, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 67, },
1858 { .gm = 7, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 65, },
1859 { .gm = 7, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 63, },
1860 { .gm = 7, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 62, },
1861 { .gm = 7, .pga = 11, .pad = 6, .dac = 0, .bb_mult = 60, },
1862 };
1863
1864 static struct lpphy_tx_gain_table_entry lpphy_rev2_nopa_tx_gain_table[] = {
1865 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 152, },
1866 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 147, },
1867 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 143, },
1868 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 139, },
1869 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 135, },
1870 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 131, },
1871 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 128, },
1872 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 124, },
1873 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 121, },
1874 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 117, },
1875 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 114, },
1876 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 111, },
1877 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 107, },
1878 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 104, },
1879 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 101, },
1880 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 99, },
1881 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 96, },
1882 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 93, },
1883 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 90, },
1884 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 88, },
1885 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 85, },
1886 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 83, },
1887 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 81, },
1888 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 78, },
1889 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 76, },
1890 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 74, },
1891 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 72, },
1892 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 70, },
1893 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 68, },
1894 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 66, },
1895 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 64, },
1896 { .gm = 255, .pga = 255, .pad = 197, .dac = 0, .bb_mult = 64, },
1897 { .gm = 255, .pga = 255, .pad = 192, .dac = 0, .bb_mult = 64, },
1898 { .gm = 255, .pga = 255, .pad = 186, .dac = 0, .bb_mult = 64, },
1899 { .gm = 255, .pga = 255, .pad = 181, .dac = 0, .bb_mult = 64, },
1900 { .gm = 255, .pga = 255, .pad = 176, .dac = 0, .bb_mult = 64, },
1901 { .gm = 255, .pga = 255, .pad = 171, .dac = 0, .bb_mult = 64, },
1902 { .gm = 255, .pga = 255, .pad = 166, .dac = 0, .bb_mult = 64, },
1903 { .gm = 255, .pga = 255, .pad = 161, .dac = 0, .bb_mult = 64, },
1904 { .gm = 255, .pga = 255, .pad = 157, .dac = 0, .bb_mult = 64, },
1905 { .gm = 255, .pga = 255, .pad = 152, .dac = 0, .bb_mult = 64, },
1906 { .gm = 255, .pga = 255, .pad = 148, .dac = 0, .bb_mult = 64, },
1907 { .gm = 255, .pga = 255, .pad = 144, .dac = 0, .bb_mult = 64, },
1908 { .gm = 255, .pga = 255, .pad = 140, .dac = 0, .bb_mult = 64, },
1909 { .gm = 255, .pga = 255, .pad = 136, .dac = 0, .bb_mult = 64, },
1910 { .gm = 255, .pga = 255, .pad = 132, .dac = 0, .bb_mult = 64, },
1911 { .gm = 255, .pga = 255, .pad = 128, .dac = 0, .bb_mult = 64, },
1912 { .gm = 255, .pga = 255, .pad = 124, .dac = 0, .bb_mult = 64, },
1913 { .gm = 255, .pga = 255, .pad = 121, .dac = 0, .bb_mult = 64, },
1914 { .gm = 255, .pga = 255, .pad = 117, .dac = 0, .bb_mult = 64, },
1915 { .gm = 255, .pga = 255, .pad = 114, .dac = 0, .bb_mult = 64, },
1916 { .gm = 255, .pga = 255, .pad = 111, .dac = 0, .bb_mult = 64, },
1917 { .gm = 255, .pga = 255, .pad = 108, .dac = 0, .bb_mult = 64, },
1918 { .gm = 255, .pga = 255, .pad = 105, .dac = 0, .bb_mult = 64, },
1919 { .gm = 255, .pga = 255, .pad = 102, .dac = 0, .bb_mult = 64, },
1920 { .gm = 255, .pga = 255, .pad = 99, .dac = 0, .bb_mult = 64, },
1921 { .gm = 255, .pga = 255, .pad = 96, .dac = 0, .bb_mult = 64, },
1922 { .gm = 255, .pga = 255, .pad = 93, .dac = 0, .bb_mult = 64, },
1923 { .gm = 255, .pga = 255, .pad = 91, .dac = 0, .bb_mult = 64, },
1924 { .gm = 255, .pga = 255, .pad = 88, .dac = 0, .bb_mult = 64, },
1925 { .gm = 255, .pga = 255, .pad = 86, .dac = 0, .bb_mult = 64, },
1926 { .gm = 255, .pga = 255, .pad = 83, .dac = 0, .bb_mult = 64, },
1927 { .gm = 255, .pga = 255, .pad = 81, .dac = 0, .bb_mult = 64, },
1928 { .gm = 255, .pga = 255, .pad = 79, .dac = 0, .bb_mult = 64, },
1929 { .gm = 255, .pga = 255, .pad = 76, .dac = 0, .bb_mult = 64, },
1930 { .gm = 255, .pga = 255, .pad = 74, .dac = 0, .bb_mult = 64, },
1931 { .gm = 255, .pga = 255, .pad = 72, .dac = 0, .bb_mult = 64, },
1932 { .gm = 255, .pga = 255, .pad = 70, .dac = 0, .bb_mult = 64, },
1933 { .gm = 255, .pga = 255, .pad = 68, .dac = 0, .bb_mult = 64, },
1934 { .gm = 255, .pga = 255, .pad = 66, .dac = 0, .bb_mult = 64, },
1935 { .gm = 255, .pga = 255, .pad = 64, .dac = 0, .bb_mult = 64, },
1936 { .gm = 255, .pga = 248, .pad = 64, .dac = 0, .bb_mult = 64, },
1937 { .gm = 255, .pga = 248, .pad = 62, .dac = 0, .bb_mult = 64, },
1938 { .gm = 255, .pga = 241, .pad = 62, .dac = 0, .bb_mult = 64, },
1939 { .gm = 255, .pga = 241, .pad = 60, .dac = 0, .bb_mult = 64, },
1940 { .gm = 255, .pga = 234, .pad = 60, .dac = 0, .bb_mult = 64, },
1941 { .gm = 255, .pga = 234, .pad = 59, .dac = 0, .bb_mult = 64, },
1942 { .gm = 255, .pga = 227, .pad = 59, .dac = 0, .bb_mult = 64, },
1943 { .gm = 255, .pga = 227, .pad = 57, .dac = 0, .bb_mult = 64, },
1944 { .gm = 255, .pga = 221, .pad = 57, .dac = 0, .bb_mult = 64, },
1945 { .gm = 255, .pga = 221, .pad = 55, .dac = 0, .bb_mult = 64, },
1946 { .gm = 255, .pga = 215, .pad = 55, .dac = 0, .bb_mult = 64, },
1947 { .gm = 255, .pga = 215, .pad = 54, .dac = 0, .bb_mult = 64, },
1948 { .gm = 255, .pga = 208, .pad = 54, .dac = 0, .bb_mult = 64, },
1949 { .gm = 255, .pga = 208, .pad = 52, .dac = 0, .bb_mult = 64, },
1950 { .gm = 255, .pga = 203, .pad = 52, .dac = 0, .bb_mult = 64, },
1951 { .gm = 255, .pga = 203, .pad = 51, .dac = 0, .bb_mult = 64, },
1952 { .gm = 255, .pga = 197, .pad = 51, .dac = 0, .bb_mult = 64, },
1953 { .gm = 255, .pga = 197, .pad = 49, .dac = 0, .bb_mult = 64, },
1954 { .gm = 255, .pga = 191, .pad = 49, .dac = 0, .bb_mult = 64, },
1955 { .gm = 255, .pga = 191, .pad = 48, .dac = 0, .bb_mult = 64, },
1956 { .gm = 255, .pga = 186, .pad = 48, .dac = 0, .bb_mult = 64, },
1957 { .gm = 255, .pga = 186, .pad = 47, .dac = 0, .bb_mult = 64, },
1958 { .gm = 255, .pga = 181, .pad = 47, .dac = 0, .bb_mult = 64, },
1959 { .gm = 255, .pga = 181, .pad = 45, .dac = 0, .bb_mult = 64, },
1960 { .gm = 255, .pga = 175, .pad = 45, .dac = 0, .bb_mult = 64, },
1961 { .gm = 255, .pga = 175, .pad = 44, .dac = 0, .bb_mult = 64, },
1962 { .gm = 255, .pga = 170, .pad = 44, .dac = 0, .bb_mult = 64, },
1963 { .gm = 255, .pga = 170, .pad = 43, .dac = 0, .bb_mult = 64, },
1964 { .gm = 255, .pga = 166, .pad = 43, .dac = 0, .bb_mult = 64, },
1965 { .gm = 255, .pga = 166, .pad = 42, .dac = 0, .bb_mult = 64, },
1966 { .gm = 255, .pga = 161, .pad = 42, .dac = 0, .bb_mult = 64, },
1967 { .gm = 255, .pga = 161, .pad = 40, .dac = 0, .bb_mult = 64, },
1968 { .gm = 255, .pga = 156, .pad = 40, .dac = 0, .bb_mult = 64, },
1969 { .gm = 255, .pga = 156, .pad = 39, .dac = 0, .bb_mult = 64, },
1970 { .gm = 255, .pga = 152, .pad = 39, .dac = 0, .bb_mult = 64, },
1971 { .gm = 255, .pga = 152, .pad = 38, .dac = 0, .bb_mult = 64, },
1972 { .gm = 255, .pga = 148, .pad = 38, .dac = 0, .bb_mult = 64, },
1973 { .gm = 255, .pga = 148, .pad = 37, .dac = 0, .bb_mult = 64, },
1974 { .gm = 255, .pga = 143, .pad = 37, .dac = 0, .bb_mult = 64, },
1975 { .gm = 255, .pga = 143, .pad = 36, .dac = 0, .bb_mult = 64, },
1976 { .gm = 255, .pga = 139, .pad = 36, .dac = 0, .bb_mult = 64, },
1977 { .gm = 255, .pga = 139, .pad = 35, .dac = 0, .bb_mult = 64, },
1978 { .gm = 255, .pga = 135, .pad = 35, .dac = 0, .bb_mult = 64, },
1979 { .gm = 255, .pga = 135, .pad = 34, .dac = 0, .bb_mult = 64, },
1980 { .gm = 255, .pga = 132, .pad = 34, .dac = 0, .bb_mult = 64, },
1981 { .gm = 255, .pga = 132, .pad = 33, .dac = 0, .bb_mult = 64, },
1982 { .gm = 255, .pga = 128, .pad = 33, .dac = 0, .bb_mult = 64, },
1983 { .gm = 255, .pga = 128, .pad = 32, .dac = 0, .bb_mult = 64, },
1984 { .gm = 255, .pga = 124, .pad = 32, .dac = 0, .bb_mult = 64, },
1985 { .gm = 255, .pga = 124, .pad = 31, .dac = 0, .bb_mult = 64, },
1986 { .gm = 255, .pga = 121, .pad = 31, .dac = 0, .bb_mult = 64, },
1987 { .gm = 255, .pga = 121, .pad = 30, .dac = 0, .bb_mult = 64, },
1988 { .gm = 255, .pga = 117, .pad = 30, .dac = 0, .bb_mult = 64, },
1989 { .gm = 255, .pga = 117, .pad = 29, .dac = 0, .bb_mult = 64, },
1990 { .gm = 255, .pga = 114, .pad = 29, .dac = 0, .bb_mult = 64, },
1991 { .gm = 255, .pga = 114, .pad = 29, .dac = 0, .bb_mult = 64, },
1992 { .gm = 255, .pga = 111, .pad = 29, .dac = 0, .bb_mult = 64, },
1993 };
1994
1995 static struct lpphy_tx_gain_table_entry lpphy_rev2_2ghz_tx_gain_table[] = {
1996 { .gm = 7, .pga = 99, .pad = 255, .dac = 0, .bb_mult = 64, },
1997 { .gm = 7, .pga = 96, .pad = 255, .dac = 0, .bb_mult = 64, },
1998 { .gm = 7, .pga = 93, .pad = 255, .dac = 0, .bb_mult = 64, },
1999 { .gm = 7, .pga = 90, .pad = 255, .dac = 0, .bb_mult = 64, },
2000 { .gm = 7, .pga = 88, .pad = 255, .dac = 0, .bb_mult = 64, },
2001 { .gm = 7, .pga = 85, .pad = 255, .dac = 0, .bb_mult = 64, },
2002 { .gm = 7, .pga = 83, .pad = 255, .dac = 0, .bb_mult = 64, },
2003 { .gm = 7, .pga = 81, .pad = 255, .dac = 0, .bb_mult = 64, },
2004 { .gm = 7, .pga = 78, .pad = 255, .dac = 0, .bb_mult = 64, },
2005 { .gm = 7, .pga = 76, .pad = 255, .dac = 0, .bb_mult = 64, },
2006 { .gm = 7, .pga = 74, .pad = 255, .dac = 0, .bb_mult = 64, },
2007 { .gm = 7, .pga = 72, .pad = 255, .dac = 0, .bb_mult = 64, },
2008 { .gm = 7, .pga = 70, .pad = 255, .dac = 0, .bb_mult = 64, },
2009 { .gm = 7, .pga = 68, .pad = 255, .dac = 0, .bb_mult = 64, },
2010 { .gm = 7, .pga = 66, .pad = 255, .dac = 0, .bb_mult = 64, },
2011 { .gm = 7, .pga = 64, .pad = 255, .dac = 0, .bb_mult = 64, },
2012 { .gm = 7, .pga = 64, .pad = 255, .dac = 0, .bb_mult = 64, },
2013 { .gm = 7, .pga = 62, .pad = 255, .dac = 0, .bb_mult = 64, },
2014 { .gm = 7, .pga = 62, .pad = 248, .dac = 0, .bb_mult = 64, },
2015 { .gm = 7, .pga = 60, .pad = 248, .dac = 0, .bb_mult = 64, },
2016 { .gm = 7, .pga = 60, .pad = 241, .dac = 0, .bb_mult = 64, },
2017 { .gm = 7, .pga = 59, .pad = 241, .dac = 0, .bb_mult = 64, },
2018 { .gm = 7, .pga = 59, .pad = 234, .dac = 0, .bb_mult = 64, },
2019 { .gm = 7, .pga = 57, .pad = 234, .dac = 0, .bb_mult = 64, },
2020 { .gm = 7, .pga = 57, .pad = 227, .dac = 0, .bb_mult = 64, },
2021 { .gm = 7, .pga = 55, .pad = 227, .dac = 0, .bb_mult = 64, },
2022 { .gm = 7, .pga = 55, .pad = 221, .dac = 0, .bb_mult = 64, },
2023 { .gm = 7, .pga = 54, .pad = 221, .dac = 0, .bb_mult = 64, },
2024 { .gm = 7, .pga = 54, .pad = 215, .dac = 0, .bb_mult = 64, },
2025 { .gm = 7, .pga = 52, .pad = 215, .dac = 0, .bb_mult = 64, },
2026 { .gm = 7, .pga = 52, .pad = 208, .dac = 0, .bb_mult = 64, },
2027 { .gm = 7, .pga = 51, .pad = 208, .dac = 0, .bb_mult = 64, },
2028 { .gm = 7, .pga = 51, .pad = 203, .dac = 0, .bb_mult = 64, },
2029 { .gm = 7, .pga = 49, .pad = 203, .dac = 0, .bb_mult = 64, },
2030 { .gm = 7, .pga = 49, .pad = 197, .dac = 0, .bb_mult = 64, },
2031 { .gm = 7, .pga = 48, .pad = 197, .dac = 0, .bb_mult = 64, },
2032 { .gm = 7, .pga = 48, .pad = 191, .dac = 0, .bb_mult = 64, },
2033 { .gm = 7, .pga = 47, .pad = 191, .dac = 0, .bb_mult = 64, },
2034 { .gm = 7, .pga = 47, .pad = 186, .dac = 0, .bb_mult = 64, },
2035 { .gm = 7, .pga = 45, .pad = 186, .dac = 0, .bb_mult = 64, },
2036 { .gm = 7, .pga = 45, .pad = 181, .dac = 0, .bb_mult = 64, },
2037 { .gm = 7, .pga = 44, .pad = 181, .dac = 0, .bb_mult = 64, },
2038 { .gm = 7, .pga = 44, .pad = 175, .dac = 0, .bb_mult = 64, },
2039 { .gm = 7, .pga = 43, .pad = 175, .dac = 0, .bb_mult = 64, },
2040 { .gm = 7, .pga = 43, .pad = 170, .dac = 0, .bb_mult = 64, },
2041 { .gm = 7, .pga = 42, .pad = 170, .dac = 0, .bb_mult = 64, },
2042 { .gm = 7, .pga = 42, .pad = 166, .dac = 0, .bb_mult = 64, },
2043 { .gm = 7, .pga = 40, .pad = 166, .dac = 0, .bb_mult = 64, },
2044 { .gm = 7, .pga = 40, .pad = 161, .dac = 0, .bb_mult = 64, },
2045 { .gm = 7, .pga = 39, .pad = 161, .dac = 0, .bb_mult = 64, },
2046 { .gm = 7, .pga = 39, .pad = 156, .dac = 0, .bb_mult = 64, },
2047 { .gm = 7, .pga = 38, .pad = 156, .dac = 0, .bb_mult = 64, },
2048 { .gm = 7, .pga = 38, .pad = 152, .dac = 0, .bb_mult = 64, },
2049 { .gm = 7, .pga = 37, .pad = 152, .dac = 0, .bb_mult = 64, },
2050 { .gm = 7, .pga = 37, .pad = 148, .dac = 0, .bb_mult = 64, },
2051 { .gm = 7, .pga = 36, .pad = 148, .dac = 0, .bb_mult = 64, },
2052 { .gm = 7, .pga = 36, .pad = 143, .dac = 0, .bb_mult = 64, },
2053 { .gm = 7, .pga = 35, .pad = 143, .dac = 0, .bb_mult = 64, },
2054 { .gm = 7, .pga = 35, .pad = 139, .dac = 0, .bb_mult = 64, },
2055 { .gm = 7, .pga = 34, .pad = 139, .dac = 0, .bb_mult = 64, },
2056 { .gm = 7, .pga = 34, .pad = 135, .dac = 0, .bb_mult = 64, },
2057 { .gm = 7, .pga = 33, .pad = 135, .dac = 0, .bb_mult = 64, },
2058 { .gm = 7, .pga = 33, .pad = 132, .dac = 0, .bb_mult = 64, },
2059 { .gm = 7, .pga = 32, .pad = 132, .dac = 0, .bb_mult = 64, },
2060 { .gm = 7, .pga = 32, .pad = 128, .dac = 0, .bb_mult = 64, },
2061 { .gm = 7, .pga = 31, .pad = 128, .dac = 0, .bb_mult = 64, },
2062 { .gm = 7, .pga = 31, .pad = 124, .dac = 0, .bb_mult = 64, },
2063 { .gm = 7, .pga = 30, .pad = 124, .dac = 0, .bb_mult = 64, },
2064 { .gm = 7, .pga = 30, .pad = 121, .dac = 0, .bb_mult = 64, },
2065 { .gm = 7, .pga = 29, .pad = 121, .dac = 0, .bb_mult = 64, },
2066 { .gm = 7, .pga = 29, .pad = 117, .dac = 0, .bb_mult = 64, },
2067 { .gm = 7, .pga = 29, .pad = 117, .dac = 0, .bb_mult = 64, },
2068 { .gm = 7, .pga = 29, .pad = 114, .dac = 0, .bb_mult = 64, },
2069 { .gm = 7, .pga = 28, .pad = 114, .dac = 0, .bb_mult = 64, },
2070 { .gm = 7, .pga = 28, .pad = 111, .dac = 0, .bb_mult = 64, },
2071 { .gm = 7, .pga = 27, .pad = 111, .dac = 0, .bb_mult = 64, },
2072 { .gm = 7, .pga = 27, .pad = 108, .dac = 0, .bb_mult = 64, },
2073 { .gm = 7, .pga = 26, .pad = 108, .dac = 0, .bb_mult = 64, },
2074 { .gm = 7, .pga = 26, .pad = 104, .dac = 0, .bb_mult = 64, },
2075 { .gm = 7, .pga = 25, .pad = 104, .dac = 0, .bb_mult = 64, },
2076 { .gm = 7, .pga = 25, .pad = 102, .dac = 0, .bb_mult = 64, },
2077 { .gm = 7, .pga = 25, .pad = 102, .dac = 0, .bb_mult = 64, },
2078 { .gm = 7, .pga = 25, .pad = 99, .dac = 0, .bb_mult = 64, },
2079 { .gm = 7, .pga = 24, .pad = 99, .dac = 0, .bb_mult = 64, },
2080 { .gm = 7, .pga = 24, .pad = 96, .dac = 0, .bb_mult = 64, },
2081 { .gm = 7, .pga = 23, .pad = 96, .dac = 0, .bb_mult = 64, },
2082 { .gm = 7, .pga = 23, .pad = 93, .dac = 0, .bb_mult = 64, },
2083 { .gm = 7, .pga = 23, .pad = 93, .dac = 0, .bb_mult = 64, },
2084 { .gm = 7, .pga = 23, .pad = 90, .dac = 0, .bb_mult = 64, },
2085 { .gm = 7, .pga = 22, .pad = 90, .dac = 0, .bb_mult = 64, },
2086 { .gm = 7, .pga = 22, .pad = 88, .dac = 0, .bb_mult = 64, },
2087 { .gm = 7, .pga = 21, .pad = 88, .dac = 0, .bb_mult = 64, },
2088 { .gm = 7, .pga = 21, .pad = 85, .dac = 0, .bb_mult = 64, },
2089 { .gm = 7, .pga = 21, .pad = 85, .dac = 0, .bb_mult = 64, },
2090 { .gm = 7, .pga = 21, .pad = 83, .dac = 0, .bb_mult = 64, },
2091 { .gm = 7, .pga = 20, .pad = 83, .dac = 0, .bb_mult = 64, },
2092 { .gm = 7, .pga = 20, .pad = 81, .dac = 0, .bb_mult = 64, },
2093 { .gm = 7, .pga = 20, .pad = 81, .dac = 0, .bb_mult = 64, },
2094 { .gm = 7, .pga = 20, .pad = 78, .dac = 0, .bb_mult = 64, },
2095 { .gm = 7, .pga = 19, .pad = 78, .dac = 0, .bb_mult = 64, },
2096 { .gm = 7, .pga = 19, .pad = 76, .dac = 0, .bb_mult = 64, },
2097 { .gm = 7, .pga = 19, .pad = 76, .dac = 0, .bb_mult = 64, },
2098 { .gm = 7, .pga = 19, .pad = 74, .dac = 0, .bb_mult = 64, },
2099 { .gm = 7, .pga = 18, .pad = 74, .dac = 0, .bb_mult = 64, },
2100 { .gm = 7, .pga = 18, .pad = 72, .dac = 0, .bb_mult = 64, },
2101 { .gm = 7, .pga = 18, .pad = 72, .dac = 0, .bb_mult = 64, },
2102 { .gm = 7, .pga = 18, .pad = 70, .dac = 0, .bb_mult = 64, },
2103 { .gm = 7, .pga = 17, .pad = 70, .dac = 0, .bb_mult = 64, },
2104 { .gm = 7, .pga = 17, .pad = 68, .dac = 0, .bb_mult = 64, },
2105 { .gm = 7, .pga = 17, .pad = 68, .dac = 0, .bb_mult = 64, },
2106 { .gm = 7, .pga = 17, .pad = 66, .dac = 0, .bb_mult = 64, },
2107 { .gm = 7, .pga = 16, .pad = 66, .dac = 0, .bb_mult = 64, },
2108 { .gm = 7, .pga = 16, .pad = 64, .dac = 0, .bb_mult = 64, },
2109 { .gm = 7, .pga = 16, .pad = 64, .dac = 0, .bb_mult = 64, },
2110 { .gm = 7, .pga = 16, .pad = 62, .dac = 0, .bb_mult = 64, },
2111 { .gm = 7, .pga = 15, .pad = 62, .dac = 0, .bb_mult = 64, },
2112 { .gm = 7, .pga = 15, .pad = 60, .dac = 0, .bb_mult = 64, },
2113 { .gm = 7, .pga = 15, .pad = 60, .dac = 0, .bb_mult = 64, },
2114 { .gm = 7, .pga = 15, .pad = 59, .dac = 0, .bb_mult = 64, },
2115 { .gm = 7, .pga = 14, .pad = 59, .dac = 0, .bb_mult = 64, },
2116 { .gm = 7, .pga = 14, .pad = 57, .dac = 0, .bb_mult = 64, },
2117 { .gm = 7, .pga = 14, .pad = 57, .dac = 0, .bb_mult = 64, },
2118 { .gm = 7, .pga = 14, .pad = 55, .dac = 0, .bb_mult = 64, },
2119 { .gm = 7, .pga = 14, .pad = 55, .dac = 0, .bb_mult = 64, },
2120 { .gm = 7, .pga = 14, .pad = 54, .dac = 0, .bb_mult = 64, },
2121 { .gm = 7, .pga = 13, .pad = 54, .dac = 0, .bb_mult = 64, },
2122 { .gm = 7, .pga = 13, .pad = 52, .dac = 0, .bb_mult = 64, },
2123 { .gm = 7, .pga = 13, .pad = 52, .dac = 0, .bb_mult = 64, },
2124 };
2125
2126 static struct lpphy_tx_gain_table_entry lpphy_rev2_5ghz_tx_gain_table[] = {
2127 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 152, },
2128 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 147, },
2129 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 143, },
2130 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 139, },
2131 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 135, },
2132 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 131, },
2133 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 128, },
2134 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 124, },
2135 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 121, },
2136 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 117, },
2137 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 114, },
2138 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 111, },
2139 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 107, },
2140 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 104, },
2141 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 101, },
2142 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 99, },
2143 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 96, },
2144 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 93, },
2145 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 90, },
2146 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 88, },
2147 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 85, },
2148 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 83, },
2149 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 81, },
2150 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 78, },
2151 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 76, },
2152 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 74, },
2153 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 72, },
2154 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 70, },
2155 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 68, },
2156 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 66, },
2157 { .gm = 255, .pga = 255, .pad = 255, .dac = 0, .bb_mult = 64, },
2158 { .gm = 255, .pga = 255, .pad = 248, .dac = 0, .bb_mult = 64, },
2159 { .gm = 255, .pga = 255, .pad = 241, .dac = 0, .bb_mult = 64, },
2160 { .gm = 255, .pga = 255, .pad = 234, .dac = 0, .bb_mult = 64, },
2161 { .gm = 255, .pga = 255, .pad = 227, .dac = 0, .bb_mult = 64, },
2162 { .gm = 255, .pga = 255, .pad = 221, .dac = 0, .bb_mult = 64, },
2163 { .gm = 255, .pga = 255, .pad = 215, .dac = 0, .bb_mult = 64, },
2164 { .gm = 255, .pga = 255, .pad = 208, .dac = 0, .bb_mult = 64, },
2165 { .gm = 255, .pga = 255, .pad = 203, .dac = 0, .bb_mult = 64, },
2166 { .gm = 255, .pga = 255, .pad = 197, .dac = 0, .bb_mult = 64, },
2167 { .gm = 255, .pga = 255, .pad = 191, .dac = 0, .bb_mult = 64, },
2168 { .gm = 255, .pga = 255, .pad = 186, .dac = 0, .bb_mult = 64, },
2169 { .gm = 255, .pga = 255, .pad = 181, .dac = 0, .bb_mult = 64, },
2170 { .gm = 255, .pga = 255, .pad = 175, .dac = 0, .bb_mult = 64, },
2171 { .gm = 255, .pga = 255, .pad = 170, .dac = 0, .bb_mult = 64, },
2172 { .gm = 255, .pga = 255, .pad = 166, .dac = 0, .bb_mult = 64, },
2173 { .gm = 255, .pga = 255, .pad = 161, .dac = 0, .bb_mult = 64, },
2174 { .gm = 255, .pga = 255, .pad = 156, .dac = 0, .bb_mult = 64, },
2175 { .gm = 255, .pga = 255, .pad = 152, .dac = 0, .bb_mult = 64, },
2176 { .gm = 255, .pga = 255, .pad = 148, .dac = 0, .bb_mult = 64, },
2177 { .gm = 255, .pga = 255, .pad = 143, .dac = 0, .bb_mult = 64, },
2178 { .gm = 255, .pga = 255, .pad = 139, .dac = 0, .bb_mult = 64, },
2179 { .gm = 255, .pga = 255, .pad = 135, .dac = 0, .bb_mult = 64, },
2180 { .gm = 255, .pga = 255, .pad = 132, .dac = 0, .bb_mult = 64, },
2181 { .gm = 255, .pga = 255, .pad = 128, .dac = 0, .bb_mult = 64, },
2182 { .gm = 255, .pga = 255, .pad = 124, .dac = 0, .bb_mult = 64, },
2183 { .gm = 255, .pga = 255, .pad = 121, .dac = 0, .bb_mult = 64, },
2184 { .gm = 255, .pga = 255, .pad = 117, .dac = 0, .bb_mult = 64, },
2185 { .gm = 255, .pga = 255, .pad = 114, .dac = 0, .bb_mult = 64, },
2186 { .gm = 255, .pga = 255, .pad = 111, .dac = 0, .bb_mult = 64, },
2187 { .gm = 255, .pga = 255, .pad = 108, .dac = 0, .bb_mult = 64, },
2188 { .gm = 255, .pga = 255, .pad = 104, .dac = 0, .bb_mult = 64, },
2189 { .gm = 255, .pga = 255, .pad = 102, .dac = 0, .bb_mult = 64, },
2190 { .gm = 255, .pga = 255, .pad = 99, .dac = 0, .bb_mult = 64, },
2191 { .gm = 255, .pga = 255, .pad = 96, .dac = 0, .bb_mult = 64, },
2192 { .gm = 255, .pga = 255, .pad = 93, .dac = 0, .bb_mult = 64, },
2193 { .gm = 255, .pga = 255, .pad = 90, .dac = 0, .bb_mult = 64, },
2194 { .gm = 255, .pga = 255, .pad = 88, .dac = 0, .bb_mult = 64, },
2195 { .gm = 255, .pga = 255, .pad = 85, .dac = 0, .bb_mult = 64, },
2196 { .gm = 255, .pga = 255, .pad = 83, .dac = 0, .bb_mult = 64, },
2197 { .gm = 255, .pga = 255, .pad = 81, .dac = 0, .bb_mult = 64, },
2198 { .gm = 255, .pga = 255, .pad = 78, .dac = 0, .bb_mult = 64, },
2199 { .gm = 255, .pga = 255, .pad = 76, .dac = 0, .bb_mult = 64, },
2200 { .gm = 255, .pga = 255, .pad = 74, .dac = 0, .bb_mult = 64, },
2201 { .gm = 255, .pga = 255, .pad = 72, .dac = 0, .bb_mult = 64, },
2202 { .gm = 255, .pga = 255, .pad = 70, .dac = 0, .bb_mult = 64, },
2203 { .gm = 255, .pga = 255, .pad = 68, .dac = 0, .bb_mult = 64, },
2204 { .gm = 255, .pga = 255, .pad = 66, .dac = 0, .bb_mult = 64, },
2205 { .gm = 255, .pga = 255, .pad = 64, .dac = 0, .bb_mult = 64, },
2206 { .gm = 255, .pga = 255, .pad = 64, .dac = 0, .bb_mult = 64, },
2207 { .gm = 255, .pga = 255, .pad = 62, .dac = 0, .bb_mult = 64, },
2208 { .gm = 255, .pga = 248, .pad = 62, .dac = 0, .bb_mult = 64, },
2209 { .gm = 255, .pga = 248, .pad = 60, .dac = 0, .bb_mult = 64, },
2210 { .gm = 255, .pga = 241, .pad = 60, .dac = 0, .bb_mult = 64, },
2211 { .gm = 255, .pga = 241, .pad = 59, .dac = 0, .bb_mult = 64, },
2212 { .gm = 255, .pga = 234, .pad = 59, .dac = 0, .bb_mult = 64, },
2213 { .gm = 255, .pga = 234, .pad = 57, .dac = 0, .bb_mult = 64, },
2214 { .gm = 255, .pga = 227, .pad = 57, .dac = 0, .bb_mult = 64, },
2215 { .gm = 255, .pga = 227, .pad = 55, .dac = 0, .bb_mult = 64, },
2216 { .gm = 255, .pga = 221, .pad = 55, .dac = 0, .bb_mult = 64, },
2217 { .gm = 255, .pga = 221, .pad = 54, .dac = 0, .bb_mult = 64, },
2218 { .gm = 255, .pga = 215, .pad = 54, .dac = 0, .bb_mult = 64, },
2219 { .gm = 255, .pga = 215, .pad = 52, .dac = 0, .bb_mult = 64, },
2220 { .gm = 255, .pga = 208, .pad = 52, .dac = 0, .bb_mult = 64, },
2221 { .gm = 255, .pga = 208, .pad = 51, .dac = 0, .bb_mult = 64, },
2222 { .gm = 255, .pga = 203, .pad = 51, .dac = 0, .bb_mult = 64, },
2223 { .gm = 255, .pga = 203, .pad = 49, .dac = 0, .bb_mult = 64, },
2224 { .gm = 255, .pga = 197, .pad = 49, .dac = 0, .bb_mult = 64, },
2225 { .gm = 255, .pga = 197, .pad = 48, .dac = 0, .bb_mult = 64, },
2226 { .gm = 255, .pga = 191, .pad = 48, .dac = 0, .bb_mult = 64, },
2227 { .gm = 255, .pga = 191, .pad = 47, .dac = 0, .bb_mult = 64, },
2228 { .gm = 255, .pga = 186, .pad = 47, .dac = 0, .bb_mult = 64, },
2229 { .gm = 255, .pga = 186, .pad = 45, .dac = 0, .bb_mult = 64, },
2230 { .gm = 255, .pga = 181, .pad = 45, .dac = 0, .bb_mult = 64, },
2231 { .gm = 255, .pga = 181, .pad = 44, .dac = 0, .bb_mult = 64, },
2232 { .gm = 255, .pga = 175, .pad = 44, .dac = 0, .bb_mult = 64, },
2233 { .gm = 255, .pga = 175, .pad = 43, .dac = 0, .bb_mult = 64, },
2234 { .gm = 255, .pga = 170, .pad = 43, .dac = 0, .bb_mult = 64, },
2235 { .gm = 255, .pga = 170, .pad = 42, .dac = 0, .bb_mult = 64, },
2236 { .gm = 255, .pga = 166, .pad = 42, .dac = 0, .bb_mult = 64, },
2237 { .gm = 255, .pga = 166, .pad = 40, .dac = 0, .bb_mult = 64, },
2238 { .gm = 255, .pga = 161, .pad = 40, .dac = 0, .bb_mult = 64, },
2239 { .gm = 255, .pga = 161, .pad = 39, .dac = 0, .bb_mult = 64, },
2240 { .gm = 255, .pga = 156, .pad = 39, .dac = 0, .bb_mult = 64, },
2241 { .gm = 255, .pga = 156, .pad = 38, .dac = 0, .bb_mult = 64, },
2242 { .gm = 255, .pga = 152, .pad = 38, .dac = 0, .bb_mult = 64, },
2243 { .gm = 255, .pga = 152, .pad = 37, .dac = 0, .bb_mult = 64, },
2244 { .gm = 255, .pga = 148, .pad = 37, .dac = 0, .bb_mult = 64, },
2245 { .gm = 255, .pga = 148, .pad = 36, .dac = 0, .bb_mult = 64, },
2246 { .gm = 255, .pga = 143, .pad = 36, .dac = 0, .bb_mult = 64, },
2247 { .gm = 255, .pga = 143, .pad = 35, .dac = 0, .bb_mult = 64, },
2248 { .gm = 255, .pga = 139, .pad = 35, .dac = 0, .bb_mult = 64, },
2249 { .gm = 255, .pga = 139, .pad = 34, .dac = 0, .bb_mult = 64, },
2250 { .gm = 255, .pga = 135, .pad = 34, .dac = 0, .bb_mult = 64, },
2251 { .gm = 255, .pga = 135, .pad = 33, .dac = 0, .bb_mult = 64, },
2252 { .gm = 255, .pga = 132, .pad = 33, .dac = 0, .bb_mult = 64, },
2253 { .gm = 255, .pga = 132, .pad = 32, .dac = 0, .bb_mult = 64, },
2254 { .gm = 255, .pga = 128, .pad = 32, .dac = 0, .bb_mult = 64, },
2255 };
2256
2257 void lpphy_rev0_1_table_init(struct b43_wldev *dev)
2258 {
2259 B43_WARN_ON(dev->phy.rev >= 2);
2260
2261 b43_lptab_write_bulk(dev, B43_LPTAB8(2, 0),
2262 ARRAY_SIZE(lpphy_min_sig_sq_table), lpphy_min_sig_sq_table);
2263 b43_lptab_write_bulk(dev, B43_LPTAB16(1, 0),
2264 ARRAY_SIZE(lpphy_rev01_noise_scale_table), lpphy_rev01_noise_scale_table);
2265 b43_lptab_write_bulk(dev, B43_LPTAB16(14, 0),
2266 ARRAY_SIZE(lpphy_crs_gain_nft_table), lpphy_crs_gain_nft_table);
2267 b43_lptab_write_bulk(dev, B43_LPTAB16(8, 0),
2268 ARRAY_SIZE(lpphy_rev01_filter_control_table), lpphy_rev01_filter_control_table);
2269 b43_lptab_write_bulk(dev, B43_LPTAB32(9, 0),
2270 ARRAY_SIZE(lpphy_rev01_ps_control_table), lpphy_rev01_ps_control_table);
2271 b43_lptab_write_bulk(dev, B43_LPTAB8(6, 0),
2272 ARRAY_SIZE(lpphy_pll_fraction_table), lpphy_pll_fraction_table);
2273 b43_lptab_write_bulk(dev, B43_LPTAB16(0, 0),
2274 ARRAY_SIZE(lpphy_iqlo_cal_table), lpphy_iqlo_cal_table);
2275 if (dev->phy.rev == 0) {
2276 b43_lptab_write_bulk(dev, B43_LPTAB16(13, 0),
2277 ARRAY_SIZE(lpphy_rev0_ofdm_cck_gain_table), lpphy_rev0_ofdm_cck_gain_table);
2278 b43_lptab_write_bulk(dev, B43_LPTAB16(12, 0),
2279 ARRAY_SIZE(lpphy_rev0_ofdm_cck_gain_table), lpphy_rev0_ofdm_cck_gain_table);
2280 } else {
2281 b43_lptab_write_bulk(dev, B43_LPTAB16(13, 0),
2282 ARRAY_SIZE(lpphy_rev1_ofdm_cck_gain_table), lpphy_rev1_ofdm_cck_gain_table);
2283 b43_lptab_write_bulk(dev, B43_LPTAB16(12, 0),
2284 ARRAY_SIZE(lpphy_rev1_ofdm_cck_gain_table), lpphy_rev1_ofdm_cck_gain_table);
2285 }
2286 b43_lptab_write_bulk(dev, B43_LPTAB16(15, 0),
2287 ARRAY_SIZE(lpphy_gain_delta_table), lpphy_gain_delta_table);
2288 b43_lptab_write_bulk(dev, B43_LPTAB32(10, 0),
2289 ARRAY_SIZE(lpphy_tx_power_control_table), lpphy_tx_power_control_table);
2290 }
2291
2292 void lpphy_rev2plus_table_init(struct b43_wldev *dev)
2293 {
2294 int i;
2295
2296 B43_WARN_ON(dev->phy.rev < 2);
2297
2298 for (i = 0; i < 704; i++)
2299 b43_lptab_write(dev, B43_LPTAB32(7, i), 0);
2300
2301 b43_lptab_write_bulk(dev, B43_LPTAB8(2, 0),
2302 ARRAY_SIZE(lpphy_min_sig_sq_table), lpphy_min_sig_sq_table);
2303 b43_lptab_write_bulk(dev, B43_LPTAB16(1, 0),
2304 ARRAY_SIZE(lpphy_rev2plus_noise_scale_table), lpphy_rev2plus_noise_scale_table);
2305 b43_lptab_write_bulk(dev, B43_LPTAB32(11, 0),
2306 ARRAY_SIZE(lpphy_rev2plus_filter_control_table), lpphy_rev2plus_filter_control_table);
2307 b43_lptab_write_bulk(dev, B43_LPTAB32(12, 0),
2308 ARRAY_SIZE(lpphy_rev2plus_ps_control_table), lpphy_rev2plus_ps_control_table);
2309 b43_lptab_write_bulk(dev, B43_LPTAB32(13, 0),
2310 ARRAY_SIZE(lpphy_gain_idx_table), lpphy_gain_idx_table);
2311 b43_lptab_write_bulk(dev, B43_LPTAB16(14, 0),
2312 ARRAY_SIZE(lpphy_aux_gain_idx_table), lpphy_aux_gain_idx_table);
2313 b43_lptab_write_bulk(dev, B43_LPTAB16(15, 0),
2314 ARRAY_SIZE(lpphy_sw_control_table), lpphy_sw_control_table);
2315 b43_lptab_write_bulk(dev, B43_LPTAB8(16, 0),
2316 ARRAY_SIZE(lpphy_hf_table), lpphy_hf_table);
2317 b43_lptab_write_bulk(dev, B43_LPTAB32(17, 0),
2318 ARRAY_SIZE(lpphy_gain_value_table), lpphy_gain_value_table);
2319 b43_lptab_write_bulk(dev, B43_LPTAB16(18, 0),
2320 ARRAY_SIZE(lpphy_gain_table), lpphy_gain_table);
2321 b43_lptab_write_bulk(dev, B43_LPTAB8(6, 0),
2322 ARRAY_SIZE(lpphy_pll_fraction_table), lpphy_pll_fraction_table);
2323 b43_lptab_write_bulk(dev, B43_LPTAB16(0, 0),
2324 ARRAY_SIZE(lpphy_iqlo_cal_table), lpphy_iqlo_cal_table);
2325 b43_lptab_write_bulk(dev, B43_LPTAB32(9, 0),
2326 ARRAY_SIZE(lpphy_papd_eps_table), lpphy_papd_eps_table);
2327 b43_lptab_write_bulk(dev, B43_LPTAB32(10, 0),
2328 ARRAY_SIZE(lpphy_papd_mult_table), lpphy_papd_mult_table);
2329
2330 if ((dev->dev->chip_id == 0x4325) && (dev->dev->chip_rev == 0)) {
2331 b43_lptab_write_bulk(dev, B43_LPTAB32(13, 0),
2332 ARRAY_SIZE(lpphy_a0_gain_idx_table), lpphy_a0_gain_idx_table);
2333 b43_lptab_write_bulk(dev, B43_LPTAB16(14, 0),
2334 ARRAY_SIZE(lpphy_a0_aux_gain_idx_table), lpphy_a0_aux_gain_idx_table);
2335 b43_lptab_write_bulk(dev, B43_LPTAB32(17, 0),
2336 ARRAY_SIZE(lpphy_a0_gain_value_table), lpphy_a0_gain_value_table);
2337 b43_lptab_write_bulk(dev, B43_LPTAB16(18, 0),
2338 ARRAY_SIZE(lpphy_a0_gain_table), lpphy_a0_gain_table);
2339 }
2340 }
2341
2342 static void lpphy_rev0_1_write_gain_table(struct b43_wldev *dev, int offset,
2343 struct lpphy_tx_gain_table_entry data)
2344 {
2345 u32 tmp;
2346
2347 B43_WARN_ON(dev->phy.rev >= 2);
2348
2349 tmp = data.pad << 11;
2350 tmp |= data.pga << 7;
2351 tmp |= data.gm << 4;
2352 tmp |= data.dac;
2353 b43_lptab_write(dev, B43_LPTAB32(10, 0xC0 + offset), tmp);
2354 tmp = data.bb_mult << 20;
2355 b43_lptab_write(dev, B43_LPTAB32(10, 0x140 + offset), tmp);
2356 }
2357
2358 static void lpphy_rev2plus_write_gain_table(struct b43_wldev *dev, int offset,
2359 struct lpphy_tx_gain_table_entry data)
2360 {
2361 u32 tmp;
2362
2363 B43_WARN_ON(dev->phy.rev < 2);
2364
2365 tmp = data.pad << 16;
2366 tmp |= data.pga << 8;
2367 tmp |= data.gm;
2368 if (dev->phy.rev >= 3) {
2369 if (b43_current_band(dev->wl) == NL80211_BAND_5GHZ)
2370 tmp |= 0x10 << 24;
2371 else
2372 tmp |= 0x70 << 24;
2373 } else {
2374 if (b43_current_band(dev->wl) == NL80211_BAND_5GHZ)
2375 tmp |= 0x14 << 24;
2376 else
2377 tmp |= 0x7F << 24;
2378 }
2379 b43_lptab_write(dev, B43_LPTAB32(7, 0xC0 + offset), tmp);
2380 tmp = data.bb_mult << 20;
2381 tmp |= data.dac << 28;
2382 b43_lptab_write(dev, B43_LPTAB32(7, 0x140 + offset), tmp);
2383 }
2384
2385 void lpphy_write_gain_table(struct b43_wldev *dev, int offset,
2386 struct lpphy_tx_gain_table_entry data)
2387 {
2388 if (dev->phy.rev >= 2)
2389 lpphy_rev2plus_write_gain_table(dev, offset, data);
2390 else
2391 lpphy_rev0_1_write_gain_table(dev, offset, data);
2392 }
2393
2394 void lpphy_write_gain_table_bulk(struct b43_wldev *dev, int offset, int count,
2395 struct lpphy_tx_gain_table_entry *table)
2396 {
2397 int i;
2398
2399 for (i = offset; i < count; i++)
2400 lpphy_write_gain_table(dev, i, table[i]);
2401 }
2402
2403 void lpphy_init_tx_gain_table(struct b43_wldev *dev)
2404 {
2405 struct ssb_sprom *sprom = dev->dev->bus_sprom;
2406
2407 switch (dev->phy.rev) {
2408 case 0:
2409 if ((sprom->boardflags_hi & B43_BFH_NOPA) ||
2410 (sprom->boardflags_lo & B43_BFL_HGPA))
2411 lpphy_write_gain_table_bulk(dev, 0, 128,
2412 lpphy_rev0_nopa_tx_gain_table);
2413 else if (b43_current_band(dev->wl) == NL80211_BAND_2GHZ)
2414 lpphy_write_gain_table_bulk(dev, 0, 128,
2415 lpphy_rev0_2ghz_tx_gain_table);
2416 else
2417 lpphy_write_gain_table_bulk(dev, 0, 128,
2418 lpphy_rev0_5ghz_tx_gain_table);
2419 break;
2420 case 1:
2421 if ((sprom->boardflags_hi & B43_BFH_NOPA) ||
2422 (sprom->boardflags_lo & B43_BFL_HGPA))
2423 lpphy_write_gain_table_bulk(dev, 0, 128,
2424 lpphy_rev1_nopa_tx_gain_table);
2425 else if (b43_current_band(dev->wl) == NL80211_BAND_2GHZ)
2426 lpphy_write_gain_table_bulk(dev, 0, 128,
2427 lpphy_rev1_2ghz_tx_gain_table);
2428 else
2429 lpphy_write_gain_table_bulk(dev, 0, 128,
2430 lpphy_rev1_5ghz_tx_gain_table);
2431 break;
2432 default:
2433 if (sprom->boardflags_hi & B43_BFH_NOPA)
2434 lpphy_write_gain_table_bulk(dev, 0, 128,
2435 lpphy_rev2_nopa_tx_gain_table);
2436 else if (b43_current_band(dev->wl) == NL80211_BAND_2GHZ)
2437 lpphy_write_gain_table_bulk(dev, 0, 128,
2438 lpphy_rev2_2ghz_tx_gain_table);
2439 else
2440 lpphy_write_gain_table_bulk(dev, 0, 128,
2441 lpphy_rev2_5ghz_tx_gain_table);
2442 }
2443 }