diff options
author | Stanislaw Gruszka <stf_xl@wp.pl> | 2013-03-16 14:19:52 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2013-03-18 16:38:35 -0400 |
commit | 415e3f2f7bf8bff1a22446c22a7e384c6f429d2a (patch) | |
tree | 8c97f0fcecb915277ad9dfdd396dc658cdef9291 | |
parent | 939ec51dc7d055bb2cb8977a4c026d9dc85438dd (diff) |
rt2800: 5592: iq calibration for 5GHz
Based on:
RT5592_IQCalibration()
DPO_RT5572_LinuxSTA_2.6.1.3_20121022/cips/rt5592.c
Signed-off-by: Stanislaw Gruszka <stf_xl@wp.pl>
Tested-by: Wanlong Gao <gaowanlong@cn.fujitsu.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2800lib.c | 70 |
1 files changed, 60 insertions, 10 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c index 9b1f293b4833..f08a0424fe4d 100644 --- a/drivers/net/wireless/rt2x00/rt2800lib.c +++ b/drivers/net/wireless/rt2x00/rt2800lib.c | |||
@@ -2468,31 +2468,80 @@ static void rt2800_bbp_write_with_rx_chain(struct rt2x00_dev *rt2x00dev, | |||
2468 | } | 2468 | } |
2469 | } | 2469 | } |
2470 | 2470 | ||
2471 | |||
2472 | static void rt2800_iq_calibrate(struct rt2x00_dev *rt2x00dev, int channel) | 2471 | static void rt2800_iq_calibrate(struct rt2x00_dev *rt2x00dev, int channel) |
2473 | { | 2472 | { |
2474 | u8 cal; | 2473 | u8 cal; |
2475 | 2474 | ||
2476 | /* TODO */ | 2475 | /* TX0 IQ Gain */ |
2477 | if (WARN_ON_ONCE(channel > 14)) | ||
2478 | return; | ||
2479 | |||
2480 | rt2800_bbp_write(rt2x00dev, 158, 0x2c); | 2476 | rt2800_bbp_write(rt2x00dev, 158, 0x2c); |
2481 | cal = rt2x00_eeprom_byte(rt2x00dev, EEPROM_IQ_GAIN_CAL_TX0_2G); | 2477 | if (channel <= 14) |
2478 | cal = rt2x00_eeprom_byte(rt2x00dev, EEPROM_IQ_GAIN_CAL_TX0_2G); | ||
2479 | else if (channel >= 36 && channel <= 64) | ||
2480 | cal = rt2x00_eeprom_byte(rt2x00dev, | ||
2481 | EEPROM_IQ_GAIN_CAL_TX0_CH36_TO_CH64_5G); | ||
2482 | else if (channel >= 100 && channel <= 138) | ||
2483 | cal = rt2x00_eeprom_byte(rt2x00dev, | ||
2484 | EEPROM_IQ_GAIN_CAL_TX0_CH100_TO_CH138_5G); | ||
2485 | else if (channel >= 140 && channel <= 165) | ||
2486 | cal = rt2x00_eeprom_byte(rt2x00dev, | ||
2487 | EEPROM_IQ_GAIN_CAL_TX0_CH140_TO_CH165_5G); | ||
2488 | else | ||
2489 | cal = 0; | ||
2482 | rt2800_bbp_write(rt2x00dev, 159, cal); | 2490 | rt2800_bbp_write(rt2x00dev, 159, cal); |
2483 | 2491 | ||
2492 | /* TX0 IQ Phase */ | ||
2484 | rt2800_bbp_write(rt2x00dev, 158, 0x2d); | 2493 | rt2800_bbp_write(rt2x00dev, 158, 0x2d); |
2485 | cal = rt2x00_eeprom_byte(rt2x00dev, EEPROM_IQ_PHASE_CAL_TX0_2G); | 2494 | if (channel <= 14) |
2495 | cal = rt2x00_eeprom_byte(rt2x00dev, EEPROM_IQ_PHASE_CAL_TX0_2G); | ||
2496 | else if (channel >= 36 && channel <= 64) | ||
2497 | cal = rt2x00_eeprom_byte(rt2x00dev, | ||
2498 | EEPROM_IQ_PHASE_CAL_TX0_CH36_TO_CH64_5G); | ||
2499 | else if (channel >= 100 && channel <= 138) | ||
2500 | cal = rt2x00_eeprom_byte(rt2x00dev, | ||
2501 | EEPROM_IQ_PHASE_CAL_TX0_CH100_TO_CH138_5G); | ||
2502 | else if (channel >= 140 && channel <= 165) | ||
2503 | cal = rt2x00_eeprom_byte(rt2x00dev, | ||
2504 | EEPROM_IQ_PHASE_CAL_TX0_CH140_TO_CH165_5G); | ||
2505 | else | ||
2506 | cal = 0; | ||
2486 | rt2800_bbp_write(rt2x00dev, 159, cal); | 2507 | rt2800_bbp_write(rt2x00dev, 159, cal); |
2487 | 2508 | ||
2509 | /* TX1 IQ Gain */ | ||
2488 | rt2800_bbp_write(rt2x00dev, 158, 0x4a); | 2510 | rt2800_bbp_write(rt2x00dev, 158, 0x4a); |
2489 | cal = rt2x00_eeprom_byte(rt2x00dev, EEPROM_IQ_GAIN_CAL_TX1_2G); | 2511 | if (channel <= 14) |
2512 | cal = rt2x00_eeprom_byte(rt2x00dev, EEPROM_IQ_GAIN_CAL_TX1_2G); | ||
2513 | else if (channel >= 36 && channel <= 64) | ||
2514 | cal = rt2x00_eeprom_byte(rt2x00dev, | ||
2515 | EEPROM_IQ_GAIN_CAL_TX1_CH36_TO_CH64_5G); | ||
2516 | else if (channel >= 100 && channel <= 138) | ||
2517 | cal = rt2x00_eeprom_byte(rt2x00dev, | ||
2518 | EEPROM_IQ_GAIN_CAL_TX1_CH100_TO_CH138_5G); | ||
2519 | else if (channel >= 140 && channel <= 165) | ||
2520 | cal = rt2x00_eeprom_byte(rt2x00dev, | ||
2521 | EEPROM_IQ_GAIN_CAL_TX1_CH140_TO_CH165_5G); | ||
2522 | else | ||
2523 | cal = 0; | ||
2490 | rt2800_bbp_write(rt2x00dev, 159, cal); | 2524 | rt2800_bbp_write(rt2x00dev, 159, cal); |
2491 | 2525 | ||
2526 | /* TX1 IQ Phase */ | ||
2492 | rt2800_bbp_write(rt2x00dev, 158, 0x4b); | 2527 | rt2800_bbp_write(rt2x00dev, 158, 0x4b); |
2493 | cal = rt2x00_eeprom_byte(rt2x00dev, EEPROM_IQ_PHASE_CAL_TX1_2G); | 2528 | if (channel <= 14) |
2529 | cal = rt2x00_eeprom_byte(rt2x00dev, EEPROM_IQ_PHASE_CAL_TX1_2G); | ||
2530 | else if (channel >= 36 && channel <= 64) | ||
2531 | cal = rt2x00_eeprom_byte(rt2x00dev, | ||
2532 | EEPROM_IQ_PHASE_CAL_TX1_CH36_TO_CH64_5G); | ||
2533 | else if (channel >= 100 && channel <= 138) | ||
2534 | cal = rt2x00_eeprom_byte(rt2x00dev, | ||
2535 | EEPROM_IQ_PHASE_CAL_TX1_CH100_TO_CH138_5G); | ||
2536 | else if (channel >= 140 && channel <= 165) | ||
2537 | cal = rt2x00_eeprom_byte(rt2x00dev, | ||
2538 | EEPROM_IQ_PHASE_CAL_TX1_CH140_TO_CH165_5G); | ||
2539 | else | ||
2540 | cal = 0; | ||
2494 | rt2800_bbp_write(rt2x00dev, 159, cal); | 2541 | rt2800_bbp_write(rt2x00dev, 159, cal); |
2495 | 2542 | ||
2543 | /* FIXME: possible RX0, RX1 callibration ? */ | ||
2544 | |||
2496 | /* RF IQ compensation control */ | 2545 | /* RF IQ compensation control */ |
2497 | rt2800_bbp_write(rt2x00dev, 158, 0x04); | 2546 | rt2800_bbp_write(rt2x00dev, 158, 0x04); |
2498 | cal = rt2x00_eeprom_byte(rt2x00dev, EEPROM_RF_IQ_COMPENSATION_CONTROL); | 2547 | cal = rt2x00_eeprom_byte(rt2x00dev, EEPROM_RF_IQ_COMPENSATION_CONTROL); |
@@ -2500,7 +2549,8 @@ static void rt2800_iq_calibrate(struct rt2x00_dev *rt2x00dev, int channel) | |||
2500 | 2549 | ||
2501 | /* RF IQ imbalance compensation control */ | 2550 | /* RF IQ imbalance compensation control */ |
2502 | rt2800_bbp_write(rt2x00dev, 158, 0x03); | 2551 | rt2800_bbp_write(rt2x00dev, 158, 0x03); |
2503 | cal = rt2x00_eeprom_byte(rt2x00dev, EEPROM_RF_IQ_IMBALANCE_COMPENSATION_CONTROL); | 2552 | cal = rt2x00_eeprom_byte(rt2x00dev, |
2553 | EEPROM_RF_IQ_IMBALANCE_COMPENSATION_CONTROL); | ||
2504 | rt2800_bbp_write(rt2x00dev, 159, cal != 0xff ? cal : 0); | 2554 | rt2800_bbp_write(rt2x00dev, 159, cal != 0xff ? cal : 0); |
2505 | } | 2555 | } |
2506 | 2556 | ||