mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-27 09:12:39 +00:00
e0d482fdcf
The vendor driver does things differently based on what it finds in the SoC's CHIP_VER register, which should tell whether this is MT7620N or MT7620A (PKG) and probably also the revision (VER) and most likely also something about the silicon implementer (ECO). Introduce codepaths just like the ones in the vendor driver to handle the different chips properly. Some of those paths are most likely dead code and left-overs from FPGA versions or early prototypes of the chip. It'd thus be great if people can post their kernel logs, at least the line telling the chip version and eco, so we know what's actually out there in the wild -- all I could find is [ 0.000000] SoC Type: Ralink MT7620A ver:2 eco:6 and [ 0.000000] SoC Type: Ralink MT7620N ver:2 eco:6 which would make things easier, as then we really just need to know whether it's MT7620N or MT7620A and not care about FPGA or prototypes with ver <= 1 and eco <= 2. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
409 lines
16 KiB
Diff
409 lines
16 KiB
Diff
--- a/drivers/net/wireless/ralink/rt2x00/rt2800.h
|
|
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800.h
|
|
@@ -1042,6 +1042,11 @@
|
|
#define MIMO_PS_CFG_RX_STBY_POL FIELD32(0x00000010)
|
|
#define MIMO_PS_CFG_RX_RX_STBY0 FIELD32(0x00000020)
|
|
|
|
+#define BB_PA_MODE_CFG0 0x1214
|
|
+#define BB_PA_MODE_CFG1 0x1218
|
|
+#define RF_PA_MODE_CFG0 0x121C
|
|
+#define RF_PA_MODE_CFG1 0x1220
|
|
+
|
|
/*
|
|
* EDCA_AC0_CFG:
|
|
*/
|
|
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
|
|
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
|
|
@@ -3685,14 +3685,16 @@ static void rt2800_config_channel_rf7620
|
|
rt2x00_set_field8(&rfcsr, RFCSR19_K, rf->rf4);
|
|
rt2800_rfcsr_write(rt2x00dev, 19, rfcsr);
|
|
|
|
- /* Default: XO=20MHz , SDM mode */
|
|
- rfcsr = rt2800_rfcsr_read(rt2x00dev, 16);
|
|
- rt2x00_set_field8(&rfcsr, RFCSR16_SDM_MODE_MT7620, 0x80);
|
|
- rt2800_rfcsr_write(rt2x00dev, 16, rfcsr);
|
|
-
|
|
- rfcsr = rt2800_rfcsr_read(rt2x00dev, 21);
|
|
- rt2x00_set_field8(&rfcsr, RFCSR21_BIT8, 1);
|
|
- rt2800_rfcsr_write(rt2x00dev, 21, rfcsr);
|
|
+ if (rt2800_hw_get_chipver(rt2x00dev) > 1) {
|
|
+ /* Default: XO=20MHz , SDM mode */
|
|
+ rfcsr = rt2800_rfcsr_read(rt2x00dev, 16);
|
|
+ rt2x00_set_field8(&rfcsr, RFCSR16_SDM_MODE_MT7620, 0x80);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 16, rfcsr);
|
|
+
|
|
+ rfcsr = rt2800_rfcsr_read(rt2x00dev, 21);
|
|
+ rt2x00_set_field8(&rfcsr, RFCSR21_BIT8, 1);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 21, rfcsr);
|
|
+ }
|
|
|
|
rfcsr = rt2800_rfcsr_read(rt2x00dev, 1);
|
|
rt2x00_set_field8(&rfcsr, RFCSR1_TX2_EN_MT7620,
|
|
@@ -3726,18 +3728,23 @@ static void rt2800_config_channel_rf7620
|
|
rt2800_rfcsr_write_dccal(rt2x00dev, 59, 0x20);
|
|
}
|
|
|
|
- if (conf_is_ht40(conf)) {
|
|
- rt2800_rfcsr_write_dccal(rt2x00dev, 58, 0x08);
|
|
- rt2800_rfcsr_write_dccal(rt2x00dev, 59, 0x08);
|
|
- } else {
|
|
- rt2800_rfcsr_write_dccal(rt2x00dev, 58, 0x28);
|
|
- rt2800_rfcsr_write_dccal(rt2x00dev, 59, 0x28);
|
|
+ if (rt2800_hw_get_chipver(rt2x00dev) > 1) {
|
|
+ if (conf_is_ht40(conf)) {
|
|
+ rt2800_rfcsr_write_dccal(rt2x00dev, 58, 0x08);
|
|
+ rt2800_rfcsr_write_dccal(rt2x00dev, 59, 0x08);
|
|
+ } else {
|
|
+ rt2800_rfcsr_write_dccal(rt2x00dev, 58, 0x28);
|
|
+ rt2800_rfcsr_write_dccal(rt2x00dev, 59, 0x28);
|
|
+ }
|
|
}
|
|
|
|
- rfcsr = rt2800_rfcsr_read(rt2x00dev, 28);
|
|
- rt2x00_set_field8(&rfcsr, RFCSR28_CH11_HT40,
|
|
- conf_is_ht40(conf) && (rf->channel == 11));
|
|
- rt2800_rfcsr_write(rt2x00dev, 28, rfcsr);
|
|
+ if (rt2800_hw_get_chipver(rt2x00dev) > 1 &&
|
|
+ rt2800_hw_get_chipeco(rt2x00dev) == 2) {
|
|
+ rfcsr = rt2800_rfcsr_read(rt2x00dev, 28);
|
|
+ rt2x00_set_field8(&rfcsr, RFCSR28_CH11_HT40,
|
|
+ conf_is_ht40(conf) && (rf->channel == 11));
|
|
+ rt2800_rfcsr_write(rt2x00dev, 28, rfcsr);
|
|
+ }
|
|
|
|
if (!test_bit(DEVICE_STATE_SCANNING, &rt2x00dev->flags)) {
|
|
if (conf_is_ht40(conf)) {
|
|
@@ -3837,25 +3844,29 @@ static void rt2800_config_alc(struct rt2
|
|
if (i == 10000)
|
|
rt2x00_warn(rt2x00dev, "Wait MAC Status to MAX !!!\n");
|
|
|
|
- if (chan->center_freq > 2457) {
|
|
- bbp = rt2800_bbp_read(rt2x00dev, 30);
|
|
- bbp = 0x40;
|
|
- rt2800_bbp_write(rt2x00dev, 30, bbp);
|
|
- rt2800_rfcsr_write(rt2x00dev, 39, 0);
|
|
- if (rt2x00_has_cap_external_lna_bg(rt2x00dev))
|
|
- rt2800_rfcsr_write(rt2x00dev, 42, 0xfb);
|
|
- else
|
|
- rt2800_rfcsr_write(rt2x00dev, 42, 0x7b);
|
|
- } else {
|
|
- bbp = rt2800_bbp_read(rt2x00dev, 30);
|
|
- bbp = 0x1f;
|
|
- rt2800_bbp_write(rt2x00dev, 30, bbp);
|
|
- rt2800_rfcsr_write(rt2x00dev, 39, 0x80);
|
|
- if (rt2x00_has_cap_external_lna_bg(rt2x00dev))
|
|
- rt2800_rfcsr_write(rt2x00dev, 42, 0xdb);
|
|
- else
|
|
- rt2800_rfcsr_write(rt2x00dev, 42, 0x5b);
|
|
+ if (rt2800_hw_get_chipver(rt2x00dev) > 1 &&
|
|
+ rt2800_hw_get_chipeco(rt2x00dev) >= 2) {
|
|
+ if (chan->center_freq > 2457) {
|
|
+ bbp = rt2800_bbp_read(rt2x00dev, 30);
|
|
+ bbp = 0x40;
|
|
+ rt2800_bbp_write(rt2x00dev, 30, bbp);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 39, 0);
|
|
+ if (rt2x00_has_cap_external_lna_bg(rt2x00dev))
|
|
+ rt2800_rfcsr_write(rt2x00dev, 42, 0xfb);
|
|
+ else
|
|
+ rt2800_rfcsr_write(rt2x00dev, 42, 0x7b);
|
|
+ } else {
|
|
+ bbp = rt2800_bbp_read(rt2x00dev, 30);
|
|
+ bbp = 0x1f;
|
|
+ rt2800_bbp_write(rt2x00dev, 30, bbp);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 39, 0x80);
|
|
+ if (rt2x00_has_cap_external_lna_bg(rt2x00dev))
|
|
+ rt2800_rfcsr_write(rt2x00dev, 42, 0xdb);
|
|
+ else
|
|
+ rt2800_rfcsr_write(rt2x00dev, 42, 0x5b);
|
|
+ }
|
|
}
|
|
+
|
|
rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, mac_sys_ctrl);
|
|
|
|
rt2800_vco_calibration(rt2x00dev);
|
|
@@ -5887,18 +5898,33 @@ static int rt2800_init_registers(struct
|
|
} else if (rt2x00_rt(rt2x00dev, RT5350)) {
|
|
rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000404);
|
|
} else if (rt2x00_rt(rt2x00dev, RT6352)) {
|
|
- rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000401);
|
|
- rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x000C0000);
|
|
- rt2800_register_write(rt2x00dev, TX_SW_CFG2, 0x00000000);
|
|
- rt2800_register_write(rt2x00dev, TX_ALC_VGA3, 0x00000000);
|
|
- rt2800_register_write(rt2x00dev, TX0_BB_GAIN_ATTEN, 0x0);
|
|
- rt2800_register_write(rt2x00dev, TX1_BB_GAIN_ATTEN, 0x0);
|
|
- rt2800_register_write(rt2x00dev, TX0_RF_GAIN_ATTEN, 0x6C6C666C);
|
|
- rt2800_register_write(rt2x00dev, TX1_RF_GAIN_ATTEN, 0x6C6C666C);
|
|
- rt2800_register_write(rt2x00dev, TX0_RF_GAIN_CORRECT,
|
|
- 0x3630363A);
|
|
- rt2800_register_write(rt2x00dev, TX1_RF_GAIN_CORRECT,
|
|
- 0x3630363A);
|
|
+ if (rt2800_hw_get_chipver(rt2x00dev) <= 1) {
|
|
+ rt2800_register_write(rt2x00dev, TX_ALC_VGA3,
|
|
+ 0x00000000);
|
|
+ rt2800_register_write(rt2x00dev, BB_PA_MODE_CFG0,
|
|
+ 0x000055FF);
|
|
+ rt2800_register_write(rt2x00dev, BB_PA_MODE_CFG1,
|
|
+ 0x00550055);
|
|
+ rt2800_register_write(rt2x00dev, RF_PA_MODE_CFG0,
|
|
+ 0x000055FF);
|
|
+ rt2800_register_write(rt2x00dev, RF_PA_MODE_CFG1,
|
|
+ 0x00550055);
|
|
+ } else {
|
|
+ rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000401);
|
|
+ rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x000C0000);
|
|
+ rt2800_register_write(rt2x00dev, TX_SW_CFG2, 0x00000000);
|
|
+ rt2800_register_write(rt2x00dev, TX_ALC_VGA3, 0x00000000);
|
|
+ rt2800_register_write(rt2x00dev, TX0_BB_GAIN_ATTEN, 0x0);
|
|
+ rt2800_register_write(rt2x00dev, TX1_BB_GAIN_ATTEN, 0x0);
|
|
+ rt2800_register_write(rt2x00dev, TX0_RF_GAIN_ATTEN,
|
|
+ 0x6C6C666C);
|
|
+ rt2800_register_write(rt2x00dev, TX1_RF_GAIN_ATTEN,
|
|
+ 0x6C6C666C);
|
|
+ rt2800_register_write(rt2x00dev, TX0_RF_GAIN_CORRECT,
|
|
+ 0x3630363A);
|
|
+ rt2800_register_write(rt2x00dev, TX1_RF_GAIN_CORRECT,
|
|
+ 0x3630363A);
|
|
+ }
|
|
reg = rt2800_register_read(rt2x00dev, TX_ALC_CFG_1);
|
|
rt2x00_set_field32(®, TX_ALC_CFG_1_ROS_BUSY_EN, 0);
|
|
rt2800_register_write(rt2x00dev, TX_ALC_CFG_1, reg);
|
|
@@ -7042,14 +7068,16 @@ static void rt2800_init_bbp_6352(struct
|
|
rt2800_bbp_write(rt2x00dev, 188, 0x00);
|
|
rt2800_bbp_write(rt2x00dev, 189, 0x00);
|
|
|
|
- rt2800_bbp_write(rt2x00dev, 91, 0x06);
|
|
- rt2800_bbp_write(rt2x00dev, 92, 0x04);
|
|
- rt2800_bbp_write(rt2x00dev, 93, 0x54);
|
|
- rt2800_bbp_write(rt2x00dev, 99, 0x50);
|
|
- rt2800_bbp_write(rt2x00dev, 148, 0x84);
|
|
- rt2800_bbp_write(rt2x00dev, 167, 0x80);
|
|
- rt2800_bbp_write(rt2x00dev, 178, 0xFF);
|
|
- rt2800_bbp_write(rt2x00dev, 106, 0x13);
|
|
+ if (rt2800_hw_get_chipver(rt2x00dev) > 1) {
|
|
+ rt2800_bbp_write(rt2x00dev, 91, 0x06);
|
|
+ rt2800_bbp_write(rt2x00dev, 92, 0x04);
|
|
+ rt2800_bbp_write(rt2x00dev, 93, 0x54);
|
|
+ rt2800_bbp_write(rt2x00dev, 99, 0x50);
|
|
+ rt2800_bbp_write(rt2x00dev, 148, 0x84);
|
|
+ rt2800_bbp_write(rt2x00dev, 167, 0x80);
|
|
+ rt2800_bbp_write(rt2x00dev, 178, 0xFF);
|
|
+ rt2800_bbp_write(rt2x00dev, 106, 0x13);
|
|
+ }
|
|
|
|
/* BBP for G band GLRT function (BBP_128 ~ BBP_221) */
|
|
rt2800_bbp_glrt_write(rt2x00dev, 0, 0x00);
|
|
@@ -10388,31 +10416,36 @@ static void rt2800_init_rfcsr_6352(struc
|
|
rt2800_rfcsr_write(rt2x00dev, 42, 0x5B);
|
|
rt2800_rfcsr_write(rt2x00dev, 43, 0x00);
|
|
|
|
- rt2800_rfcsr_write(rt2x00dev, 11, 0x21);
|
|
- if (rt2800_clk_is_20mhz(rt2x00dev))
|
|
- rt2800_rfcsr_write(rt2x00dev, 13, 0x03);
|
|
- else
|
|
- rt2800_rfcsr_write(rt2x00dev, 13, 0x00);
|
|
- rt2800_rfcsr_write(rt2x00dev, 14, 0x7C);
|
|
- rt2800_rfcsr_write(rt2x00dev, 16, 0x80);
|
|
- rt2800_rfcsr_write(rt2x00dev, 17, 0x99);
|
|
- rt2800_rfcsr_write(rt2x00dev, 18, 0x99);
|
|
- rt2800_rfcsr_write(rt2x00dev, 19, 0x09);
|
|
- rt2800_rfcsr_write(rt2x00dev, 20, 0x50);
|
|
- rt2800_rfcsr_write(rt2x00dev, 21, 0xB0);
|
|
- rt2800_rfcsr_write(rt2x00dev, 22, 0x00);
|
|
- rt2800_rfcsr_write(rt2x00dev, 23, 0x06);
|
|
- rt2800_rfcsr_write(rt2x00dev, 24, 0x00);
|
|
- rt2800_rfcsr_write(rt2x00dev, 25, 0x00);
|
|
- rt2800_rfcsr_write(rt2x00dev, 26, 0x5D);
|
|
- rt2800_rfcsr_write(rt2x00dev, 27, 0x00);
|
|
- rt2800_rfcsr_write(rt2x00dev, 28, 0x61);
|
|
- rt2800_rfcsr_write(rt2x00dev, 29, 0xB5);
|
|
- rt2800_rfcsr_write(rt2x00dev, 43, 0x02);
|
|
-
|
|
- rt2800_rfcsr_write(rt2x00dev, 28, 0x62);
|
|
- rt2800_rfcsr_write(rt2x00dev, 29, 0xAD);
|
|
- rt2800_rfcsr_write(rt2x00dev, 39, 0x80);
|
|
+ if (rt2800_hw_get_chipver(rt2x00dev) > 1) {
|
|
+ rt2800_rfcsr_write(rt2x00dev, 11, 0x21);
|
|
+ if (rt2800_clk_is_20mhz(rt2x00dev))
|
|
+ rt2800_rfcsr_write(rt2x00dev, 13, 0x03);
|
|
+ else
|
|
+ rt2800_rfcsr_write(rt2x00dev, 13, 0x00);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 14, 0x7C);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 16, 0x80);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 17, 0x99);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 18, 0x99);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 19, 0x09);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 20, 0x50);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 21, 0xB0);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 22, 0x00);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 23, 0x06);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 24, 0x00);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 25, 0x00);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 26, 0x5D);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 27, 0x00);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 28, 0x61);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 29, 0xB5);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 43, 0x02);
|
|
+ }
|
|
+
|
|
+ if (rt2800_hw_get_chipver(rt2x00dev) > 1 &&
|
|
+ rt2800_hw_get_chipeco(rt2x00dev) >= 2) {
|
|
+ rt2800_rfcsr_write(rt2x00dev, 28, 0x62);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 29, 0xAD);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 39, 0x80);
|
|
+ }
|
|
|
|
/* Initialize RF channel register to default value */
|
|
rt2800_rfcsr_write_chanreg(rt2x00dev, 0, 0x03);
|
|
@@ -10478,63 +10511,71 @@ static void rt2800_init_rfcsr_6352(struc
|
|
|
|
rt2800_rfcsr_write_bank(rt2x00dev, 6, 45, 0xC5);
|
|
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 9, 0x47);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 10, 0x71);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 11, 0x33);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x0E);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 17, 0x23);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 19, 0xA4);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 20, 0x02);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 21, 0x12);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 28, 0x1C);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 29, 0xEB);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 32, 0x7D);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 34, 0xD6);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 36, 0x08);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 38, 0xB4);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 43, 0xD3);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 44, 0xB3);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 45, 0xD5);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 46, 0x27);
|
|
- rt2800_rfcsr_write_bank(rt2x00dev, 4, 47, 0x67);
|
|
- rt2800_rfcsr_write_bank(rt2x00dev, 6, 47, 0x69);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 48, 0xFF);
|
|
- rt2800_rfcsr_write_bank(rt2x00dev, 4, 54, 0x27);
|
|
- rt2800_rfcsr_write_bank(rt2x00dev, 6, 54, 0x20);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x66);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 56, 0xFF);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 57, 0x1C);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 58, 0x20);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 59, 0x6B);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 60, 0xF7);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 61, 0x09);
|
|
-
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 10, 0x51);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x06);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 19, 0xA7);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 28, 0x2C);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x64);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 8, 0x51);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 9, 0x36);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 11, 0x53);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x16);
|
|
-
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 47, 0x6C);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 48, 0xFC);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 49, 0x1F);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 54, 0x27);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x66);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 59, 0x6B);
|
|
-
|
|
- /* Initialize RF channel register for DRQFN */
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 43, 0xD3);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 44, 0xE3);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 45, 0xE5);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 47, 0x28);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x68);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 56, 0xF7);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 58, 0x02);
|
|
- rt2800_rfcsr_write_chanreg(rt2x00dev, 60, 0xC7);
|
|
+ if (rt2800_hw_get_chipver(rt2x00dev) > 1) {
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 9, 0x47);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 10, 0x71);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 11, 0x33);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x0E);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 17, 0x23);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 19, 0xA4);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 20, 0x02);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 21, 0x12);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 28, 0x1C);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 29, 0xEB);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 32, 0x7D);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 34, 0xD6);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 36, 0x08);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 38, 0xB4);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 43, 0xD3);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 44, 0xB3);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 45, 0xD5);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 46, 0x27);
|
|
+ rt2800_rfcsr_write_bank(rt2x00dev, 4, 47, 0x67);
|
|
+ rt2800_rfcsr_write_bank(rt2x00dev, 6, 47, 0x69);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 48, 0xFF);
|
|
+ rt2800_rfcsr_write_bank(rt2x00dev, 4, 54, 0x27);
|
|
+ rt2800_rfcsr_write_bank(rt2x00dev, 6, 54, 0x20);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x66);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 56, 0xFF);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 57, 0x1C);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 58, 0x20);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 59, 0x6B);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 60, 0xF7);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 61, 0x09);
|
|
+ }
|
|
+
|
|
+ if (rt2800_hw_get_chipver(rt2x00dev) > 1 &&
|
|
+ rt2800_hw_get_chipeco(rt2x00dev) >= 2) {
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 10, 0x51);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x06);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 19, 0xA7);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 28, 0x2C);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x64);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 8, 0x51);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 9, 0x36);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 11, 0x53);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x16);
|
|
+
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 47, 0x6C);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 48, 0xFC);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 49, 0x1F);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 54, 0x27);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x66);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 59, 0x6B);
|
|
+ }
|
|
+
|
|
+ if (rt2800_hw_get_chippkg(rt2x00dev) == 0 &&
|
|
+ rt2800_hw_get_chipver(rt2x00dev) == 1) {
|
|
+ /* Initialize RF channel register for DRQFN */
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 43, 0xD3);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 44, 0xE3);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 45, 0xE5);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 47, 0x28);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x68);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 56, 0xF7);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 58, 0x02);
|
|
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 60, 0xC7);
|
|
+ }
|
|
|
|
/* Initialize RF DC calibration register to default value */
|
|
rt2800_rfcsr_write_dccal(rt2x00dev, 0, 0x47);
|
|
@@ -10597,12 +10638,17 @@ static void rt2800_init_rfcsr_6352(struc
|
|
rt2800_rfcsr_write_dccal(rt2x00dev, 62, 0x00);
|
|
rt2800_rfcsr_write_dccal(rt2x00dev, 63, 0x00);
|
|
|
|
- rt2800_rfcsr_write_dccal(rt2x00dev, 3, 0x08);
|
|
- rt2800_rfcsr_write_dccal(rt2x00dev, 4, 0x04);
|
|
- rt2800_rfcsr_write_dccal(rt2x00dev, 5, 0x20);
|
|
+ if (rt2800_hw_get_chipver(rt2x00dev) > 1) {
|
|
+ rt2800_rfcsr_write_dccal(rt2x00dev, 3, 0x08);
|
|
+ rt2800_rfcsr_write_dccal(rt2x00dev, 4, 0x04);
|
|
+ rt2800_rfcsr_write_dccal(rt2x00dev, 5, 0x20);
|
|
+ }
|
|
|
|
- rt2800_rfcsr_write_dccal(rt2x00dev, 5, 0x00);
|
|
- rt2800_rfcsr_write_dccal(rt2x00dev, 17, 0x7C);
|
|
+ if (rt2800_hw_get_chipver(rt2x00dev) > 1 &&
|
|
+ rt2800_hw_get_chipeco(rt2x00dev) >= 2) {
|
|
+ rt2800_rfcsr_write_dccal(rt2x00dev, 5, 0x00);
|
|
+ rt2800_rfcsr_write_dccal(rt2x00dev, 17, 0x7C);
|
|
+ }
|
|
|
|
rt2800_r_calibration(rt2x00dev);
|
|
rt2800_rf_self_txdc_cal(rt2x00dev);
|