* [PATCH 1/4] rt2800: radio 3xxx: reprogram only lower bits of RF_R3
@ 2012-01-30 15:17 Stanislaw Gruszka
2012-01-30 15:17 ` [PATCH 2/4] rt2800: radio 3xxx: program RF_R1 during channel switch Stanislaw Gruszka
` (3 more replies)
0 siblings, 4 replies; 14+ messages in thread
From: Stanislaw Gruszka @ 2012-01-30 15:17 UTC (permalink / raw)
To: John W. Linville; +Cc: linux-wireless, users, Stanislaw Gruszka
Synchronize code with Ralink driver:
2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO
(functions: RT33xx_ChipSwitchChannel() and RT30xx_ChipSwitchChannel())
Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
---
drivers/net/wireless/rt2x00/rt2800.h | 5 +++++
drivers/net/wireless/rt2x00/rt2800lib.c | 5 ++++-
2 files changed, 9 insertions(+), 1 deletions(-)
diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
index 2571a2f..abf2ae5 100644
--- a/drivers/net/wireless/rt2x00/rt2800.h
+++ b/drivers/net/wireless/rt2x00/rt2800.h
@@ -1796,6 +1796,11 @@ struct mac_iveiv_entry {
#define RFCSR2_RESCAL_EN FIELD8(0x80)
/*
+ * RFCSR 3:
+ */
+#define RFCSR3_K FIELD8(0x0f)
+
+/*
* FRCSR 5:
*/
#define RFCSR5_R1 FIELD8(0x0c)
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index 22a1a8f..6edf566 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -1649,7 +1649,10 @@ static void rt2800_config_channel_rf3xxx(struct rt2x00_dev *rt2x00dev,
u8 rfcsr;
rt2800_rfcsr_write(rt2x00dev, 2, rf->rf1);
- rt2800_rfcsr_write(rt2x00dev, 3, rf->rf3);
+
+ rt2800_rfcsr_read(rt2x00dev, 3, &rfcsr);
+ rt2x00_set_field8(&rfcsr, RFCSR3_K, rf->rf3);
+ rt2800_rfcsr_write(rt2x00dev, 3, rfcsr);
rt2800_rfcsr_read(rt2x00dev, 6, &rfcsr);
rt2x00_set_field8(&rfcsr, RFCSR6_R1, rf->rf2);
--
1.7.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 2/4] rt2800: radio 3xxx: program RF_R1 during channel switch
2012-01-30 15:17 [PATCH 1/4] rt2800: radio 3xxx: reprogram only lower bits of RF_R3 Stanislaw Gruszka
@ 2012-01-30 15:17 ` Stanislaw Gruszka
2012-01-30 22:06 ` [rt2x00-users] " Gertjan van Wingerde
2012-01-30 15:17 ` [PATCH 3/4] rt2800: radio 3xxx: add channel switch calibration routines Stanislaw Gruszka
` (2 subsequent siblings)
3 siblings, 1 reply; 14+ messages in thread
From: Stanislaw Gruszka @ 2012-01-30 15:17 UTC (permalink / raw)
To: John W. Linville; +Cc: linux-wireless, users, Stanislaw Gruszka
Synchronize code with Ralink driver:
2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO
Based on functions:
RT33xx_ChipSwitchChannel
RT30xx_ChipSwitchChannel
RT33xx_Init
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
---
drivers/net/wireless/rt2x00/rt2800lib.c | 34 +++++++++++++++++++++++++++++++
1 files changed, 34 insertions(+), 0 deletions(-)
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index 6edf566..a841918 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -1666,6 +1666,40 @@ static void rt2800_config_channel_rf3xxx(struct rt2x00_dev *rt2x00dev,
rt2x00_set_field8(&rfcsr, RFCSR13_TX_POWER, info->default_power2);
rt2800_rfcsr_write(rt2x00dev, 13, rfcsr);
+ rt2800_rfcsr_read(rt2x00dev, 1, &rfcsr);
+ rt2x00_set_field8(&rfcsr, RFCSR1_RX0_PD, 0);
+ rt2x00_set_field8(&rfcsr, RFCSR1_TX0_PD, 0);
+ if (rt2x00_rt(rt2x00dev, RT3390)) {
+ rt2x00_set_field8(&rfcsr, RFCSR1_RX1_PD,
+ rt2x00dev->default_ant.rx_chain_num == 1);
+ rt2x00_set_field8(&rfcsr, RFCSR1_TX1_PD,
+ rt2x00dev->default_ant.tx_chain_num == 1);
+ } else {
+ rt2x00_set_field8(&rfcsr, RFCSR1_RX1_PD, 0);
+ rt2x00_set_field8(&rfcsr, RFCSR1_TX1_PD, 0);
+ rt2x00_set_field8(&rfcsr, RFCSR1_RX2_PD, 0);
+ rt2x00_set_field8(&rfcsr, RFCSR1_TX2_PD, 0);
+
+ switch (rt2x00dev->default_ant.tx_chain_num) {
+ case 1:
+ rt2x00_set_field8(&rfcsr, RFCSR1_TX1_PD, 1);
+ /* fall through */
+ case 2:
+ rt2x00_set_field8(&rfcsr, RFCSR1_TX2_PD, 1);
+ break;
+ }
+
+ switch (rt2x00dev->default_ant.rx_chain_num) {
+ case 1:
+ rt2x00_set_field8(&rfcsr, RFCSR1_RX1_PD, 1);
+ /* fall through */
+ case 2:
+ rt2x00_set_field8(&rfcsr, RFCSR1_RX2_PD, 1);
+ break;
+ }
+ }
+ rt2800_rfcsr_write(rt2x00dev, 1, rfcsr);
+
rt2800_rfcsr_read(rt2x00dev, 23, &rfcsr);
rt2x00_set_field8(&rfcsr, RFCSR23_FREQ_OFFSET, rt2x00dev->freq_offset);
rt2800_rfcsr_write(rt2x00dev, 23, rfcsr);
--
1.7.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 3/4] rt2800: radio 3xxx: add channel switch calibration routines
2012-01-30 15:17 [PATCH 1/4] rt2800: radio 3xxx: reprogram only lower bits of RF_R3 Stanislaw Gruszka
2012-01-30 15:17 ` [PATCH 2/4] rt2800: radio 3xxx: program RF_R1 during channel switch Stanislaw Gruszka
@ 2012-01-30 15:17 ` Stanislaw Gruszka
2012-02-01 10:30 ` Helmut Schaa
2012-01-30 15:17 ` [PATCH 4/4] rt2800: radio 3xxxx: channel switch RX/TX calibration fixes Stanislaw Gruszka
2012-02-01 10:27 ` [PATCH 1/4] rt2800: radio 3xxx: reprogram only lower bits of RF_R3 Helmut Schaa
3 siblings, 1 reply; 14+ messages in thread
From: Stanislaw Gruszka @ 2012-01-30 15:17 UTC (permalink / raw)
To: John W. Linville; +Cc: linux-wireless, users, Stanislaw Gruszka
Synchronize code with Ralink driver:
2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO
Based on functions:
RT33xx_ChipSwitchChannel
RT30xx_ChipSwitchChannel
Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
---
drivers/net/wireless/rt2x00/rt2800lib.c | 14 ++++++++++++++
1 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index a841918..b5dcc48 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -1700,6 +1700,13 @@ static void rt2800_config_channel_rf3xxx(struct rt2x00_dev *rt2x00dev,
}
rt2800_rfcsr_write(rt2x00dev, 1, rfcsr);
+ rt2800_rfcsr_read(rt2x00dev, 30, &rfcsr);
+ rt2x00_set_field8(&rfcsr, RFCSR30_RF_CALIBRATION, 1);
+ rt2800_rfcsr_write(rt2x00dev, 30, rfcsr);
+ msleep(1);
+ rt2x00_set_field8(&rfcsr, RFCSR30_RF_CALIBRATION, 0);
+ rt2800_rfcsr_write(rt2x00dev, 30, rfcsr);
+
rt2800_rfcsr_read(rt2x00dev, 23, &rfcsr);
rt2x00_set_field8(&rfcsr, RFCSR23_FREQ_OFFSET, rt2x00dev->freq_offset);
rt2800_rfcsr_write(rt2x00dev, 23, rfcsr);
@@ -1710,6 +1717,13 @@ static void rt2800_config_channel_rf3xxx(struct rt2x00_dev *rt2x00dev,
rt2800_rfcsr_read(rt2x00dev, 7, &rfcsr);
rt2x00_set_field8(&rfcsr, RFCSR7_RF_TUNING, 1);
rt2800_rfcsr_write(rt2x00dev, 7, rfcsr);
+
+ rt2800_rfcsr_read(rt2x00dev, 30, &rfcsr);
+ rt2x00_set_field8(&rfcsr, RFCSR30_RF_CALIBRATION, 1);
+ rt2800_rfcsr_write(rt2x00dev, 30, rfcsr);
+ msleep(1);
+ rt2x00_set_field8(&rfcsr, RFCSR30_RF_CALIBRATION, 0);
+ rt2800_rfcsr_write(rt2x00dev, 30, rfcsr);
}
static void rt2800_config_channel_rf3052(struct rt2x00_dev *rt2x00dev,
--
1.7.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 4/4] rt2800: radio 3xxxx: channel switch RX/TX calibration fixes
2012-01-30 15:17 [PATCH 1/4] rt2800: radio 3xxx: reprogram only lower bits of RF_R3 Stanislaw Gruszka
2012-01-30 15:17 ` [PATCH 2/4] rt2800: radio 3xxx: program RF_R1 during channel switch Stanislaw Gruszka
2012-01-30 15:17 ` [PATCH 3/4] rt2800: radio 3xxx: add channel switch calibration routines Stanislaw Gruszka
@ 2012-01-30 15:17 ` Stanislaw Gruszka
2012-01-30 22:12 ` [rt2x00-users] " Gertjan van Wingerde
2012-02-01 15:17 ` [PATCH 5/4] rt2800: document RF_R03 register bits [7:4] Stanislaw Gruszka
2012-02-01 10:27 ` [PATCH 1/4] rt2800: radio 3xxx: reprogram only lower bits of RF_R3 Helmut Schaa
3 siblings, 2 replies; 14+ messages in thread
From: Stanislaw Gruszka @ 2012-01-30 15:17 UTC (permalink / raw)
To: John W. Linville; +Cc: linux-wireless, users, Stanislaw Gruszka
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>
---
drivers/net/wireless/rt2x00/rt2800.h | 8 ++++++++
drivers/net/wireless/rt2x00/rt2800lib.c | 19 ++++++++++++++++---
2 files changed, 24 insertions(+), 3 deletions(-)
diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
index abf2ae5..c92fb2e 100644
--- a/drivers/net/wireless/rt2x00/rt2800.h
+++ b/drivers/net/wireless/rt2x00/rt2800.h
@@ -1872,6 +1872,13 @@ struct mac_iveiv_entry {
#define RFCSR23_FREQ_OFFSET FIELD8(0x7f)
/*
+ * RFCSR 24:
+ */
+#define RFCSR24_TX_AGC_FC FIELD8(0x1f)
+#define RFCSR24_TX_H20M FIELD8(0x20)
+#define RFCSR24_TX_CALIB FIELD8(0x7f)
+
+/*
* RFCSR 27:
*/
#define RFCSR27_R1 FIELD8(0x03)
@@ -1892,6 +1899,7 @@ struct mac_iveiv_entry {
*/
#define RFCSR31_RX_AGC_FC FIELD8(0x1f)
#define RFCSR31_RX_H20M FIELD8(0x20)
+#define RFCSR31_RX_CALIB FIELD8(0x7f)
/*
* RFCSR 38:
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index b5dcc48..13d83ab 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -1646,7 +1646,7 @@ static void rt2800_config_channel_rf3xxx(struct rt2x00_dev *rt2x00dev,
struct rf_channel *rf,
struct channel_info *info)
{
- u8 rfcsr;
+ u8 rfcsr, calib_tx, calib_rx;
rt2800_rfcsr_write(rt2x00dev, 2, rf->rf1);
@@ -1711,8 +1711,21 @@ static void rt2800_config_channel_rf3xxx(struct rt2x00_dev *rt2x00dev,
rt2x00_set_field8(&rfcsr, RFCSR23_FREQ_OFFSET, rt2x00dev->freq_offset);
rt2800_rfcsr_write(rt2x00dev, 23, rfcsr);
- rt2800_rfcsr_write(rt2x00dev, 24,
- rt2x00dev->calibration[conf_is_ht40(conf)]);
+ if (rt2x00_rt(rt2x00dev, RT3390)) {
+ calib_tx = conf_is_ht40(conf) ? 0x68 : 0x4f;
+ calib_rx = conf_is_ht40(conf) ? 0x6f : 0x4f;
+ } else {
+ calib_tx = rt2x00dev->calibration[conf_is_ht40(conf)];
+ calib_rx = rt2x00dev->calibration[conf_is_ht40(conf)];
+ }
+
+ rt2800_rfcsr_read(rt2x00dev, 24, &rfcsr);
+ rt2x00_set_field8(&rfcsr, RFCSR24_TX_CALIB, calib_tx);
+ rt2800_rfcsr_write(rt2x00dev, 24, rfcsr);
+
+ rt2800_rfcsr_read(rt2x00dev, 31, &rfcsr);
+ rt2x00_set_field8(&rfcsr, RFCSR31_RX_CALIB, calib_rx);
+ rt2800_rfcsr_write(rt2x00dev, 31, rfcsr);
rt2800_rfcsr_read(rt2x00dev, 7, &rfcsr);
rt2x00_set_field8(&rfcsr, RFCSR7_RF_TUNING, 1);
--
1.7.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [rt2x00-users] [PATCH 2/4] rt2800: radio 3xxx: program RF_R1 during channel switch
2012-01-30 15:17 ` [PATCH 2/4] rt2800: radio 3xxx: program RF_R1 during channel switch Stanislaw Gruszka
@ 2012-01-30 22:06 ` Gertjan van Wingerde
2012-01-31 8:14 ` Stanislaw Gruszka
0 siblings, 1 reply; 14+ messages in thread
From: Gertjan van Wingerde @ 2012-01-30 22:06 UTC (permalink / raw)
To: Stanislaw Gruszka; +Cc: John W. Linville, linux-wireless, users
On 01/30/12 16:17, Stanislaw Gruszka wrote:
> Synchronize code with Ralink driver:
> 2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO
> Based on functions:
> RT33xx_ChipSwitchChannel
> RT30xx_ChipSwitchChannel
> RT33xx_Init
>
> Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
> ---
> drivers/net/wireless/rt2x00/rt2800lib.c | 34 +++++++++++++++++++++++++++++++
> 1 files changed, 34 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
> index 6edf566..a841918 100644
> --- a/drivers/net/wireless/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
> @@ -1666,6 +1666,40 @@ static void rt2800_config_channel_rf3xxx(struct rt2x00_dev *rt2x00dev,
> rt2x00_set_field8(&rfcsr, RFCSR13_TX_POWER, info->default_power2);
> rt2800_rfcsr_write(rt2x00dev, 13, rfcsr);
>
> + rt2800_rfcsr_read(rt2x00dev, 1, &rfcsr);
> + rt2x00_set_field8(&rfcsr, RFCSR1_RX0_PD, 0);
> + rt2x00_set_field8(&rfcsr, RFCSR1_TX0_PD, 0);
> + if (rt2x00_rt(rt2x00dev, RT3390)) {
> + rt2x00_set_field8(&rfcsr, RFCSR1_RX1_PD,
> + rt2x00dev->default_ant.rx_chain_num == 1);
> + rt2x00_set_field8(&rfcsr, RFCSR1_TX1_PD,
> + rt2x00dev->default_ant.tx_chain_num == 1);
> + } else {
> + rt2x00_set_field8(&rfcsr, RFCSR1_RX1_PD, 0);
> + rt2x00_set_field8(&rfcsr, RFCSR1_TX1_PD, 0);
> + rt2x00_set_field8(&rfcsr, RFCSR1_RX2_PD, 0);
> + rt2x00_set_field8(&rfcsr, RFCSR1_TX2_PD, 0);
> +
> + switch (rt2x00dev->default_ant.tx_chain_num) {
> + case 1:
> + rt2x00_set_field8(&rfcsr, RFCSR1_TX1_PD, 1);
> + /* fall through */
> + case 2:
> + rt2x00_set_field8(&rfcsr, RFCSR1_TX2_PD, 1);
> + break;
> + }
> +
> + switch (rt2x00dev->default_ant.rx_chain_num) {
> + case 1:
> + rt2x00_set_field8(&rfcsr, RFCSR1_RX1_PD, 1);
> + /* fall through */
> + case 2:
> + rt2x00_set_field8(&rfcsr, RFCSR1_RX2_PD, 1);
> + break;
> + }
> + }
> + rt2800_rfcsr_write(rt2x00dev, 1, rfcsr);
> +
> rt2800_rfcsr_read(rt2x00dev, 23, &rfcsr);
> rt2x00_set_field8(&rfcsr, RFCSR23_FREQ_OFFSET, rt2x00dev->freq_offset);
> rt2800_rfcsr_write(rt2x00dev, 23, rfcsr);
To be honest, I think that this can be simplied to a single case for
both RT30xx and RT33xx. Just take the RT30xx branch of the added
if-statement and it should just work fine on both chipset families.
Yes, I am aware the Ralink driver has slightly different code here, but
that just seems to be because they work with knowledge of the
limitations of RT33xx, which ensures that tx_chain_num and rx_chain_num
can never be 2 on that chipset, but still handling it doesn't harm. It
would merely result in better readable code.
---
Gertjan
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [rt2x00-users] [PATCH 4/4] rt2800: radio 3xxxx: channel switch RX/TX calibration fixes
2012-01-30 15:17 ` [PATCH 4/4] rt2800: radio 3xxxx: channel switch RX/TX calibration fixes Stanislaw Gruszka
@ 2012-01-30 22:12 ` Gertjan van Wingerde
2012-02-01 15:17 ` [PATCH 5/4] rt2800: document RF_R03 register bits [7:4] Stanislaw Gruszka
1 sibling, 0 replies; 14+ messages in thread
From: Gertjan van Wingerde @ 2012-01-30 22:12 UTC (permalink / raw)
To: Stanislaw Gruszka; +Cc: John W. Linville, linux-wireless, users
On 01/30/12 16:17, Stanislaw Gruszka wrote:
> 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>
> ---
> drivers/net/wireless/rt2x00/rt2800.h | 8 ++++++++
> drivers/net/wireless/rt2x00/rt2800lib.c | 19 ++++++++++++++++---
> 2 files changed, 24 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
> index abf2ae5..c92fb2e 100644
> --- a/drivers/net/wireless/rt2x00/rt2800.h
> +++ b/drivers/net/wireless/rt2x00/rt2800.h
> @@ -1872,6 +1872,13 @@ struct mac_iveiv_entry {
> #define RFCSR23_FREQ_OFFSET FIELD8(0x7f)
>
> /*
> + * RFCSR 24:
> + */
> +#define RFCSR24_TX_AGC_FC FIELD8(0x1f)
> +#define RFCSR24_TX_H20M FIELD8(0x20)
> +#define RFCSR24_TX_CALIB FIELD8(0x7f)
> +
> +/*
> * RFCSR 27:
> */
> #define RFCSR27_R1 FIELD8(0x03)
> @@ -1892,6 +1899,7 @@ struct mac_iveiv_entry {
> */
> #define RFCSR31_RX_AGC_FC FIELD8(0x1f)
> #define RFCSR31_RX_H20M FIELD8(0x20)
> +#define RFCSR31_RX_CALIB FIELD8(0x7f)
>
> /*
> * RFCSR 38:
> diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
> index b5dcc48..13d83ab 100644
> --- a/drivers/net/wireless/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
> @@ -1646,7 +1646,7 @@ static void rt2800_config_channel_rf3xxx(struct rt2x00_dev *rt2x00dev,
> struct rf_channel *rf,
> struct channel_info *info)
> {
> - u8 rfcsr;
> + u8 rfcsr, calib_tx, calib_rx;
>
> rt2800_rfcsr_write(rt2x00dev, 2, rf->rf1);
>
> @@ -1711,8 +1711,21 @@ static void rt2800_config_channel_rf3xxx(struct rt2x00_dev *rt2x00dev,
> rt2x00_set_field8(&rfcsr, RFCSR23_FREQ_OFFSET, rt2x00dev->freq_offset);
> rt2800_rfcsr_write(rt2x00dev, 23, rfcsr);
>
> - rt2800_rfcsr_write(rt2x00dev, 24,
> - rt2x00dev->calibration[conf_is_ht40(conf)]);
> + if (rt2x00_rt(rt2x00dev, RT3390)) {
> + calib_tx = conf_is_ht40(conf) ? 0x68 : 0x4f;
> + calib_rx = conf_is_ht40(conf) ? 0x6f : 0x4f;
> + } else {
> + calib_tx = rt2x00dev->calibration[conf_is_ht40(conf)];
> + calib_rx = rt2x00dev->calibration[conf_is_ht40(conf)];
> + }
> +
> + rt2800_rfcsr_read(rt2x00dev, 24, &rfcsr);
> + rt2x00_set_field8(&rfcsr, RFCSR24_TX_CALIB, calib_tx);
> + rt2800_rfcsr_write(rt2x00dev, 24, rfcsr);
> +
> + rt2800_rfcsr_read(rt2x00dev, 31, &rfcsr);
> + rt2x00_set_field8(&rfcsr, RFCSR31_RX_CALIB, calib_rx);
> + rt2800_rfcsr_write(rt2x00dev, 31, rfcsr);
>
> rt2800_rfcsr_read(rt2x00dev, 7, &rfcsr);
> rt2x00_set_field8(&rfcsr, RFCSR7_RF_TUNING, 1);
--
---
Gertjan
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [rt2x00-users] [PATCH 2/4] rt2800: radio 3xxx: program RF_R1 during channel switch
2012-01-30 22:06 ` [rt2x00-users] " Gertjan van Wingerde
@ 2012-01-31 8:14 ` Stanislaw Gruszka
2012-01-31 17:00 ` Gertjan van Wingerde
0 siblings, 1 reply; 14+ messages in thread
From: Stanislaw Gruszka @ 2012-01-31 8:14 UTC (permalink / raw)
To: Gertjan van Wingerde; +Cc: John W. Linville, linux-wireless, users
On Mon, Jan 30, 2012 at 11:06:49PM +0100, Gertjan van Wingerde wrote:
> On 01/30/12 16:17, Stanislaw Gruszka wrote:
> > + rt2800_rfcsr_read(rt2x00dev, 1, &rfcsr);
> > + rt2x00_set_field8(&rfcsr, RFCSR1_RX0_PD, 0);
> > + rt2x00_set_field8(&rfcsr, RFCSR1_TX0_PD, 0);
> > + if (rt2x00_rt(rt2x00dev, RT3390)) {
> > + rt2x00_set_field8(&rfcsr, RFCSR1_RX1_PD,
> > + rt2x00dev->default_ant.rx_chain_num == 1);
> > + rt2x00_set_field8(&rfcsr, RFCSR1_TX1_PD,
> > + rt2x00dev->default_ant.tx_chain_num == 1);
> > + } else {
> > + rt2x00_set_field8(&rfcsr, RFCSR1_RX1_PD, 0);
> > + rt2x00_set_field8(&rfcsr, RFCSR1_TX1_PD, 0);
> > + rt2x00_set_field8(&rfcsr, RFCSR1_RX2_PD, 0);
> > + rt2x00_set_field8(&rfcsr, RFCSR1_TX2_PD, 0);
> > +
> > + switch (rt2x00dev->default_ant.tx_chain_num) {
> > + case 1:
> > + rt2x00_set_field8(&rfcsr, RFCSR1_TX1_PD, 1);
> > + /* fall through */
> > + case 2:
> > + rt2x00_set_field8(&rfcsr, RFCSR1_TX2_PD, 1);
> > + break;
> > + }
> > +
> > + switch (rt2x00dev->default_ant.rx_chain_num) {
> > + case 1:
> > + rt2x00_set_field8(&rfcsr, RFCSR1_RX1_PD, 1);
> > + /* fall through */
> > + case 2:
> > + rt2x00_set_field8(&rfcsr, RFCSR1_RX2_PD, 1);
> > + break;
> > + }
> > + }
> > + rt2800_rfcsr_write(rt2x00dev, 1, rfcsr);
> > +
> > rt2800_rfcsr_read(rt2x00dev, 23, &rfcsr);
> > rt2x00_set_field8(&rfcsr, RFCSR23_FREQ_OFFSET, rt2x00dev->freq_offset);
> > rt2800_rfcsr_write(rt2x00dev, 23, rfcsr);
>
> To be honest, I think that this can be simplied to a single case for
> both RT30xx and RT33xx. Just take the RT30xx branch of the added
> if-statement and it should just work fine on both chipset families.
>
> Yes, I am aware the Ralink driver has slightly different code here, but
> that just seems to be because they work with knowledge of the
> limitations of RT33xx, which ensures that tx_chain_num and rx_chain_num
> can never be 2 on that chipset, but still handling it doesn't harm. It
> would merely result in better readable code.
Not only the code is different, but RF_R1 register value we program
is different for 30xx and 33xx when chain_num == 1 (changed by
RFCSR1_{RX2,TX2)_PD bit).
I'm not against merging these two cases and program different values
into register than Ralink driver do, but maybe in the next linux
release (counting from release of that change), so any breakage
eventually caused by that merge could be easily detected.
Stanislaw
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [rt2x00-users] [PATCH 2/4] rt2800: radio 3xxx: program RF_R1 during channel switch
2012-01-31 8:14 ` Stanislaw Gruszka
@ 2012-01-31 17:00 ` Gertjan van Wingerde
2012-02-01 15:21 ` Stanislaw Gruszka
0 siblings, 1 reply; 14+ messages in thread
From: Gertjan van Wingerde @ 2012-01-31 17:00 UTC (permalink / raw)
To: Stanislaw Gruszka; +Cc: John W. Linville, linux-wireless, users
On Tue, Jan 31, 2012 at 9:14 AM, Stanislaw Gruszka <sgruszka@redhat.com> wrote:
> On Mon, Jan 30, 2012 at 11:06:49PM +0100, Gertjan van Wingerde wrote:
>> On 01/30/12 16:17, Stanislaw Gruszka wrote:
>> > + rt2800_rfcsr_read(rt2x00dev, 1, &rfcsr);
>> > + rt2x00_set_field8(&rfcsr, RFCSR1_RX0_PD, 0);
>> > + rt2x00_set_field8(&rfcsr, RFCSR1_TX0_PD, 0);
>> > + if (rt2x00_rt(rt2x00dev, RT3390)) {
>> > + rt2x00_set_field8(&rfcsr, RFCSR1_RX1_PD,
>> > + rt2x00dev->default_ant.rx_chain_num == 1);
>> > + rt2x00_set_field8(&rfcsr, RFCSR1_TX1_PD,
>> > + rt2x00dev->default_ant.tx_chain_num == 1);
>> > + } else {
>> > + rt2x00_set_field8(&rfcsr, RFCSR1_RX1_PD, 0);
>> > + rt2x00_set_field8(&rfcsr, RFCSR1_TX1_PD, 0);
>> > + rt2x00_set_field8(&rfcsr, RFCSR1_RX2_PD, 0);
>> > + rt2x00_set_field8(&rfcsr, RFCSR1_TX2_PD, 0);
>> > +
>> > + switch (rt2x00dev->default_ant.tx_chain_num) {
>> > + case 1:
>> > + rt2x00_set_field8(&rfcsr, RFCSR1_TX1_PD, 1);
>> > + /* fall through */
>> > + case 2:
>> > + rt2x00_set_field8(&rfcsr, RFCSR1_TX2_PD, 1);
>> > + break;
>> > + }
>> > +
>> > + switch (rt2x00dev->default_ant.rx_chain_num) {
>> > + case 1:
>> > + rt2x00_set_field8(&rfcsr, RFCSR1_RX1_PD, 1);
>> > + /* fall through */
>> > + case 2:
>> > + rt2x00_set_field8(&rfcsr, RFCSR1_RX2_PD, 1);
>> > + break;
>> > + }
>> > + }
>> > + rt2800_rfcsr_write(rt2x00dev, 1, rfcsr);
>> > +
>> > rt2800_rfcsr_read(rt2x00dev, 23, &rfcsr);
>> > rt2x00_set_field8(&rfcsr, RFCSR23_FREQ_OFFSET, rt2x00dev->freq_offset);
>> > rt2800_rfcsr_write(rt2x00dev, 23, rfcsr);
>>
>> To be honest, I think that this can be simplied to a single case for
>> both RT30xx and RT33xx. Just take the RT30xx branch of the added
>> if-statement and it should just work fine on both chipset families.
>>
>> Yes, I am aware the Ralink driver has slightly different code here, but
>> that just seems to be because they work with knowledge of the
>> limitations of RT33xx, which ensures that tx_chain_num and rx_chain_num
>> can never be 2 on that chipset, but still handling it doesn't harm. It
>> would merely result in better readable code.
>
> Not only the code is different, but RF_R1 register value we program
> is different for 30xx and 33xx when chain_num == 1 (changed by
> RFCSR1_{RX2,TX2)_PD bit).
>
> I'm not against merging these two cases and program different values
> into register than Ralink driver do, but maybe in the next linux
> release (counting from release of that change), so any breakage
> eventually caused by that merge could be easily detected.
OK. Indeed let's do this in a different commit, at least. I don't know
if it has to be a
different kernel release, as long as we are able to bisect it.
Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
for this patch as well.
---
Gertjan
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/4] rt2800: radio 3xxx: reprogram only lower bits of RF_R3
2012-01-30 15:17 [PATCH 1/4] rt2800: radio 3xxx: reprogram only lower bits of RF_R3 Stanislaw Gruszka
` (2 preceding siblings ...)
2012-01-30 15:17 ` [PATCH 4/4] rt2800: radio 3xxxx: channel switch RX/TX calibration fixes Stanislaw Gruszka
@ 2012-02-01 10:27 ` Helmut Schaa
3 siblings, 0 replies; 14+ messages in thread
From: Helmut Schaa @ 2012-02-01 10:27 UTC (permalink / raw)
To: Stanislaw Gruszka; +Cc: John W. Linville, linux-wireless, users
On Mon, Jan 30, 2012 at 4:17 PM, Stanislaw Gruszka <sgruszka@redhat.com> wrote:
> - rt2800_rfcsr_write(rt2x00dev, 3, rf->rf3);
> +
> + rt2800_rfcsr_read(rt2x00dev, 3, &rfcsr);
> + rt2x00_set_field8(&rfcsr, RFCSR3_K, rf->rf3);
> + rt2800_rfcsr_write(rt2x00dev, 3, rfcsr);
Mind to add the same/similar comment here as the legacy driver does?
It seems as if this only applies to RT3370 and newer while the change
doesn't affect older chipsets:
RT3370/RT3390 RF version is 0x3320 RF_R3 [7:4] is not reserved bits
RF_R3[6:4] (pa1_bc_cck) : PA1 Bias CCK
RF_R3[7] (pa2_cc_cck) : PA2 Cascode Bias CCK
Thanks,
Helmut
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 3/4] rt2800: radio 3xxx: add channel switch calibration routines
2012-01-30 15:17 ` [PATCH 3/4] rt2800: radio 3xxx: add channel switch calibration routines Stanislaw Gruszka
@ 2012-02-01 10:30 ` Helmut Schaa
0 siblings, 0 replies; 14+ messages in thread
From: Helmut Schaa @ 2012-02-01 10:30 UTC (permalink / raw)
To: Stanislaw Gruszka; +Cc: John W. Linville, linux-wireless, users
On Mon, Jan 30, 2012 at 4:17 PM, Stanislaw Gruszka <sgruszka@redhat.com> wrote:
> Synchronize code with Ralink driver:
> 2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO
> Based on functions:
> RT33xx_ChipSwitchChannel
> RT30xx_ChipSwitchChannel
>
> Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
> Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
> ---
> drivers/net/wireless/rt2x00/rt2800lib.c | 14 ++++++++++++++
> 1 files changed, 14 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
> index a841918..b5dcc48 100644
> --- a/drivers/net/wireless/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
> @@ -1700,6 +1700,13 @@ static void rt2800_config_channel_rf3xxx(struct rt2x00_dev *rt2x00dev,
> }
> rt2800_rfcsr_write(rt2x00dev, 1, rfcsr);
>
> + rt2800_rfcsr_read(rt2x00dev, 30, &rfcsr);
> + rt2x00_set_field8(&rfcsr, RFCSR30_RF_CALIBRATION, 1);
> + rt2800_rfcsr_write(rt2x00dev, 30, rfcsr);
> + msleep(1);
> + rt2x00_set_field8(&rfcsr, RFCSR30_RF_CALIBRATION, 0);
> + rt2800_rfcsr_write(rt2x00dev, 30, rfcsr);
> +
> rt2800_rfcsr_read(rt2x00dev, 23, &rfcsr);
> rt2x00_set_field8(&rfcsr, RFCSR23_FREQ_OFFSET, rt2x00dev->freq_offset);
> rt2800_rfcsr_write(rt2x00dev, 23, rfcsr);
> @@ -1710,6 +1717,13 @@ static void rt2800_config_channel_rf3xxx(struct rt2x00_dev *rt2x00dev,
> rt2800_rfcsr_read(rt2x00dev, 7, &rfcsr);
> rt2x00_set_field8(&rfcsr, RFCSR7_RF_TUNING, 1);
> rt2800_rfcsr_write(rt2x00dev, 7, rfcsr);
> +
> + rt2800_rfcsr_read(rt2x00dev, 30, &rfcsr);
> + rt2x00_set_field8(&rfcsr, RFCSR30_RF_CALIBRATION, 1);
> + rt2800_rfcsr_write(rt2x00dev, 30, rfcsr);
> + msleep(1);
> + rt2x00_set_field8(&rfcsr, RFCSR30_RF_CALIBRATION, 0);
> + rt2800_rfcsr_write(rt2x00dev, 30, rfcsr);
> }
This was also introduced for later chipsets only but since Ralink left the
code in for all chipsets I guess this is ok ...
Helmut
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 5/4] rt2800: document RF_R03 register bits [7:4]
2012-01-30 15:17 ` [PATCH 4/4] rt2800: radio 3xxxx: channel switch RX/TX calibration fixes Stanislaw Gruszka
2012-01-30 22:12 ` [rt2x00-users] " Gertjan van Wingerde
@ 2012-02-01 15:17 ` Stanislaw Gruszka
2012-02-01 17:00 ` Helmut Schaa
2012-02-01 19:11 ` [rt2x00-users] " Gertjan van Wingerde
1 sibling, 2 replies; 14+ messages in thread
From: Stanislaw Gruszka @ 2012-02-01 15:17 UTC (permalink / raw)
To: John W. Linville; +Cc: linux-wireless, users, Helmut Schaa
Taken from:
2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO
(based on function RT33xx_ChipSwitchChannel)
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
---
drivers/net/wireless/rt2x00/rt2800.h | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
index c92fb2e..fac9ece 100644
--- a/drivers/net/wireless/rt2x00/rt2800.h
+++ b/drivers/net/wireless/rt2x00/rt2800.h
@@ -1799,6 +1799,9 @@ struct mac_iveiv_entry {
* RFCSR 3:
*/
#define RFCSR3_K FIELD8(0x0f)
+/* Bits [7-4] for RF3320 (RT3370/RT3390), on other chipsets reserved */
+#define RFCSR3_PA1_BIAS_CCK FIELD8(0x70);
+#define RFCSR3_PA2_CASCODE_BIAS_CCKK FIELD8(0x80);
/*
* FRCSR 5:
--
1.7.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [rt2x00-users] [PATCH 2/4] rt2800: radio 3xxx: program RF_R1 during channel switch
2012-01-31 17:00 ` Gertjan van Wingerde
@ 2012-02-01 15:21 ` Stanislaw Gruszka
0 siblings, 0 replies; 14+ messages in thread
From: Stanislaw Gruszka @ 2012-02-01 15:21 UTC (permalink / raw)
To: Gertjan van Wingerde; +Cc: John W. Linville, linux-wireless, users
On Tue, Jan 31, 2012 at 06:00:09PM +0100, Gertjan van Wingerde wrote:
> > Not only the code is different, but RF_R1 register value we program
> > is different for 30xx and 33xx when chain_num == 1 (changed by
> > RFCSR1_{RX2,TX2)_PD bit).
> >
> > I'm not against merging these two cases and program different values
> > into register than Ralink driver do, but maybe in the next linux
> > release (counting from release of that change), so any breakage
> > eventually caused by that merge could be easily detected.
>
> OK. Indeed let's do this in a different commit, at least. I don't know
> if it has to be a
> different kernel release, as long as we are able to bisect it.
Average users are using only released stuff, so if this patch fix
any practical problem i.e. throughput, and merging code will break
that again, fix and new breakage will stay unnoticed.
> Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
>
> for this patch as well.
Thanks
Stanislaw
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 5/4] rt2800: document RF_R03 register bits [7:4]
2012-02-01 15:17 ` [PATCH 5/4] rt2800: document RF_R03 register bits [7:4] Stanislaw Gruszka
@ 2012-02-01 17:00 ` Helmut Schaa
2012-02-01 19:11 ` [rt2x00-users] " Gertjan van Wingerde
1 sibling, 0 replies; 14+ messages in thread
From: Helmut Schaa @ 2012-02-01 17:00 UTC (permalink / raw)
To: Stanislaw Gruszka; +Cc: John W. Linville, linux-wireless, users
On Wed, Feb 1, 2012 at 4:17 PM, Stanislaw Gruszka <sgruszka@redhat.com> wrote:
> Taken from:
> 2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO
> (based on function RT33xx_ChipSwitchChannel)
Nice, thanks a lot!
> Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
> ---
> drivers/net/wireless/rt2x00/rt2800.h | 3 +++
> 1 files changed, 3 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
> index c92fb2e..fac9ece 100644
> --- a/drivers/net/wireless/rt2x00/rt2800.h
> +++ b/drivers/net/wireless/rt2x00/rt2800.h
> @@ -1799,6 +1799,9 @@ struct mac_iveiv_entry {
> * RFCSR 3:
> */
> #define RFCSR3_K FIELD8(0x0f)
> +/* Bits [7-4] for RF3320 (RT3370/RT3390), on other chipsets reserved */
> +#define RFCSR3_PA1_BIAS_CCK FIELD8(0x70);
> +#define RFCSR3_PA2_CASCODE_BIAS_CCKK FIELD8(0x80);
>
> /*
> * FRCSR 5:
> --
> 1.7.1
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [rt2x00-users] [PATCH 5/4] rt2800: document RF_R03 register bits [7:4]
2012-02-01 15:17 ` [PATCH 5/4] rt2800: document RF_R03 register bits [7:4] Stanislaw Gruszka
2012-02-01 17:00 ` Helmut Schaa
@ 2012-02-01 19:11 ` Gertjan van Wingerde
1 sibling, 0 replies; 14+ messages in thread
From: Gertjan van Wingerde @ 2012-02-01 19:11 UTC (permalink / raw)
To: Stanislaw Gruszka; +Cc: John W. Linville, linux-wireless, users
On 1 feb. 2012, at 16:17, Stanislaw Gruszka <sgruszka@redhat.com> wrote:
> Taken from:
> 2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO
> (based on function RT33xx_ChipSwitchChannel)
>
> Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
> ---
> drivers/net/wireless/rt2x00/rt2800.h | 3 +++
> 1 files changed, 3 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
> index c92fb2e..fac9ece 100644
> --- a/drivers/net/wireless/rt2x00/rt2800.h
> +++ b/drivers/net/wireless/rt2x00/rt2800.h
> @@ -1799,6 +1799,9 @@ struct mac_iveiv_entry {
> * RFCSR 3:
> */
> #define RFCSR3_K FIELD8(0x0f)
> +/* Bits [7-4] for RF3320 (RT3370/RT3390), on other chipsets reserved */
> +#define RFCSR3_PA1_BIAS_CCK FIELD8(0x70);
> +#define RFCSR3_PA2_CASCODE_BIAS_CCKK FIELD8(0x80);
>
> /*
> * FRCSR 5:
> --
> 1.7.1
>
>
> _______________________________________________
> users mailing list
> users@rt2x00.serialmonkey.com
> http://rt2x00.serialmonkey.com/mailman/listinfo/users_rt2x00.serialmonkey.com
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2012-02-01 19:12 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-01-30 15:17 [PATCH 1/4] rt2800: radio 3xxx: reprogram only lower bits of RF_R3 Stanislaw Gruszka
2012-01-30 15:17 ` [PATCH 2/4] rt2800: radio 3xxx: program RF_R1 during channel switch Stanislaw Gruszka
2012-01-30 22:06 ` [rt2x00-users] " Gertjan van Wingerde
2012-01-31 8:14 ` Stanislaw Gruszka
2012-01-31 17:00 ` Gertjan van Wingerde
2012-02-01 15:21 ` Stanislaw Gruszka
2012-01-30 15:17 ` [PATCH 3/4] rt2800: radio 3xxx: add channel switch calibration routines Stanislaw Gruszka
2012-02-01 10:30 ` Helmut Schaa
2012-01-30 15:17 ` [PATCH 4/4] rt2800: radio 3xxxx: channel switch RX/TX calibration fixes Stanislaw Gruszka
2012-01-30 22:12 ` [rt2x00-users] " Gertjan van Wingerde
2012-02-01 15:17 ` [PATCH 5/4] rt2800: document RF_R03 register bits [7:4] Stanislaw Gruszka
2012-02-01 17:00 ` Helmut Schaa
2012-02-01 19:11 ` [rt2x00-users] " Gertjan van Wingerde
2012-02-01 10:27 ` [PATCH 1/4] rt2800: radio 3xxx: reprogram only lower bits of RF_R3 Helmut Schaa
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.