aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStanislaw Gruszka <sgruszka@redhat.com>2012-01-30 10:17:59 -0500
committerJohn W. Linville <linville@tuxdriver.com>2012-02-06 14:50:39 -0500
commitf1f12f9894c48dc8284762bc71e4a3ed5caf546f (patch)
tree0a99b1340bce34450b8cc8761275119efb37ad83
parent3e0c7643c561c7052430f5c033d5b1b1289c962e (diff)
rt2800: radio 3xxxx: channel switch RX/TX calibration fixes
Synchronize code with Ralink driver: 2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO Based on functions: RT30xx_ChipSwitchChannel RT33xx_ChipSwitchChannel NICInitRT3370RFRegisters and defines from: include/chip/rt33xx.h Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com> Acked-by: Gertjan van Wingerde <gwingerde@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/rt2x00/rt2800.h8
-rw-r--r--drivers/net/wireless/rt2x00/rt2800lib.c19
2 files changed, 24 insertions, 3 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
index abf2ae588164..c92fb2eee920 100644
--- a/drivers/net/wireless/rt2x00/rt2800.h
+++ b/drivers/net/wireless/rt2x00/rt2800.h
@@ -1872,6 +1872,13 @@ struct mac_iveiv_entry {
1872#define RFCSR23_FREQ_OFFSET FIELD8(0x7f) 1872#define RFCSR23_FREQ_OFFSET FIELD8(0x7f)
1873 1873
1874/* 1874/*
1875 * RFCSR 24:
1876 */
1877#define RFCSR24_TX_AGC_FC FIELD8(0x1f)
1878#define RFCSR24_TX_H20M FIELD8(0x20)
1879#define RFCSR24_TX_CALIB FIELD8(0x7f)
1880
1881/*
1875 * RFCSR 27: 1882 * RFCSR 27:
1876 */ 1883 */
1877#define RFCSR27_R1 FIELD8(0x03) 1884#define RFCSR27_R1 FIELD8(0x03)
@@ -1892,6 +1899,7 @@ struct mac_iveiv_entry {
1892 */ 1899 */
1893#define RFCSR31_RX_AGC_FC FIELD8(0x1f) 1900#define RFCSR31_RX_AGC_FC FIELD8(0x1f)
1894#define RFCSR31_RX_H20M FIELD8(0x20) 1901#define RFCSR31_RX_H20M FIELD8(0x20)
1902#define RFCSR31_RX_CALIB FIELD8(0x7f)
1895 1903
1896/* 1904/*
1897 * RFCSR 38: 1905 * RFCSR 38:
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index 0076bc7a9b36..c326e7b1c374 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -1645,7 +1645,7 @@ static void rt2800_config_channel_rf3xxx(struct rt2x00_dev *rt2x00dev,
1645 struct rf_channel *rf, 1645 struct rf_channel *rf,
1646 struct channel_info *info) 1646 struct channel_info *info)
1647{ 1647{
1648 u8 rfcsr; 1648 u8 rfcsr, calib_tx, calib_rx;
1649 1649
1650 rt2800_rfcsr_write(rt2x00dev, 2, rf->rf1); 1650 rt2800_rfcsr_write(rt2x00dev, 2, rf->rf1);
1651 1651
@@ -1710,8 +1710,21 @@ static void rt2800_config_channel_rf3xxx(struct rt2x00_dev *rt2x00dev,
1710 rt2x00_set_field8(&rfcsr, RFCSR23_FREQ_OFFSET, rt2x00dev->freq_offset); 1710 rt2x00_set_field8(&rfcsr, RFCSR23_FREQ_OFFSET, rt2x00dev->freq_offset);
1711 rt2800_rfcsr_write(rt2x00dev, 23, rfcsr); 1711 rt2800_rfcsr_write(rt2x00dev, 23, rfcsr);
1712 1712
1713 rt2800_rfcsr_write(rt2x00dev, 24, 1713 if (rt2x00_rt(rt2x00dev, RT3390)) {
1714 rt2x00dev->calibration[conf_is_ht40(conf)]); 1714 calib_tx = conf_is_ht40(conf) ? 0x68 : 0x4f;
1715 calib_rx = conf_is_ht40(conf) ? 0x6f : 0x4f;
1716 } else {
1717 calib_tx = rt2x00dev->calibration[conf_is_ht40(conf)];
1718 calib_rx = rt2x00dev->calibration[conf_is_ht40(conf)];
1719 }
1720
1721 rt2800_rfcsr_read(rt2x00dev, 24, &rfcsr);
1722 rt2x00_set_field8(&rfcsr, RFCSR24_TX_CALIB, calib_tx);
1723 rt2800_rfcsr_write(rt2x00dev, 24, rfcsr);
1724
1725 rt2800_rfcsr_read(rt2x00dev, 31, &rfcsr);
1726 rt2x00_set_field8(&rfcsr, RFCSR31_RX_CALIB, calib_rx);
1727 rt2800_rfcsr_write(rt2x00dev, 31, rfcsr);
1715 1728
1716 rt2800_rfcsr_read(rt2x00dev, 7, &rfcsr); 1729 rt2800_rfcsr_read(rt2x00dev, 7, &rfcsr);
1717 rt2x00_set_field8(&rfcsr, RFCSR7_RF_TUNING, 1); 1730 rt2x00_set_field8(&rfcsr, RFCSR7_RF_TUNING, 1);