2012-09-16 20:29:57

by Gertjan van Wingerde

[permalink] [raw]
Subject: [PATCH 0/5] Assorted clean ups and a fix.

Another round of small clean ups to the rt2800 driver of rt2x00.
Also included is a fix for RT3572, in which rt2x00 deviated from the Ralink
driver when determining the default vgc for the 5GHz band.

--
Gertjan

---

Gertjan van Wingerde (5):
rt2x00: Code clean up in rt2800lib.
rt2x00: rt2800 - Fix default vgc values for RT3572
rt2x00: rt2800lib - code cleanup.
rt2x00: Code style cleanup in rt2800lib.c
rt2x00: Clean up RFCSR1 programming in rt2800_config_channel_rf3xxx.

drivers/net/wireless/rt2x00/rt2800lib.c | 72 +++++++++++++--------------------
1 file changed, 29 insertions(+), 43 deletions(-)

--
1.7.11.1



2012-09-16 20:29:57

by Gertjan van Wingerde

[permalink] [raw]
Subject: [PATCH 1/5] rt2x00: Code clean up in rt2800lib.

Make the code in rt2800_get_default_vgc more understandable and
readable, especially for the 5GHz band values.

Signed-off-by: Gertjan van Wingerde <[email protected]>

diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index 9e09367..cec4a99 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -2896,6 +2896,8 @@ EXPORT_SYMBOL_GPL(rt2800_link_stats);

static u8 rt2800_get_default_vgc(struct rt2x00_dev *rt2x00dev)
{
+ u8 vgc;
+
if (rt2x00dev->curr_band == IEEE80211_BAND_2GHZ) {
if (rt2x00_rt(rt2x00dev, RT3070) ||
rt2x00_rt(rt2x00dev, RT3071) ||
@@ -2904,15 +2906,17 @@ static u8 rt2800_get_default_vgc(struct rt2x00_dev *rt2x00dev)
rt2x00_rt(rt2x00dev, RT3390) ||
rt2x00_rt(rt2x00dev, RT5390) ||
rt2x00_rt(rt2x00dev, RT5392))
- return 0x1c + (2 * rt2x00dev->lna_gain);
+ vgc = 0x1c + (2 * rt2x00dev->lna_gain);
+ else
+ vgc = 0x2e + rt2x00dev->lna_gain;
+ } else { /* 5GHZ band */
+ if (!test_bit(CONFIG_CHANNEL_HT40, &rt2x00dev->flags))
+ vgc = 0x32 + (rt2x00dev->lna_gain * 5) / 3;
else
- return 0x2e + rt2x00dev->lna_gain;
+ vgc = 0x3a + (rt2x00dev->lna_gain * 5) / 3;
}

- if (!test_bit(CONFIG_CHANNEL_HT40, &rt2x00dev->flags))
- return 0x32 + (rt2x00dev->lna_gain * 5) / 3;
- else
- return 0x3a + (rt2x00dev->lna_gain * 5) / 3;
+ return vgc;
}

static inline void rt2800_set_vgc(struct rt2x00_dev *rt2x00dev,
--
1.7.11.1


2012-09-16 20:29:57

by Gertjan van Wingerde

[permalink] [raw]
Subject: [PATCH 4/5] rt2x00: Code style cleanup in rt2800lib.c

Signed-off-by: Gertjan van Wingerde <[email protected]>

diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index 37f64ba..d745c32 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -3090,7 +3090,7 @@ static int rt2800_init_registers(struct rt2x00_dev *rt2x00dev)
rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000400);
rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00080606);
} else if (rt2x00_rt(rt2x00dev, RT5390) ||
- rt2x00_rt(rt2x00dev, RT5392)) {
+ rt2x00_rt(rt2x00dev, RT5392)) {
rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000404);
rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00080606);
rt2800_register_write(rt2x00dev, TX_SW_CFG2, 0x00000000);
--
1.7.11.1


2012-09-17 15:28:13

by Ivo Van Doorn

[permalink] [raw]
Subject: Re: [PATCH 4/5] rt2x00: Code style cleanup in rt2800lib.c

On Sun, Sep 16, 2012 at 10:29 PM, Gertjan van Wingerde
<[email protected]> wrote:
> Signed-off-by: Gertjan van Wingerde <[email protected]>

Acked-by: Ivo van Doorn <[email protected]>

> diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
> index 37f64ba..d745c32 100644
> --- a/drivers/net/wireless/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
> @@ -3090,7 +3090,7 @@ static int rt2800_init_registers(struct rt2x00_dev *rt2x00dev)
> rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000400);
> rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00080606);
> } else if (rt2x00_rt(rt2x00dev, RT5390) ||
> - rt2x00_rt(rt2x00dev, RT5392)) {
> + rt2x00_rt(rt2x00dev, RT5392)) {
> rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000404);
> rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00080606);
> rt2800_register_write(rt2x00dev, TX_SW_CFG2, 0x00000000);
> --
> 1.7.11.1
>

2012-09-17 15:27:41

by Ivo Van Doorn

[permalink] [raw]
Subject: Re: [PATCH 2/5] rt2x00: rt2800 - Fix default vgc values for RT3572

On Sun, Sep 16, 2012 at 10:29 PM, Gertjan van Wingerde
<[email protected]> wrote:
> Align with the values used by the RT3572 Ralink vendor driver v2.5.0.0.
>
> Signed-off-by: Gertjan van Wingerde <[email protected]>

Acked-by: Ivo van Doorn <[email protected]>

> diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
> index cec4a99..17b8a28 100644
> --- a/drivers/net/wireless/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
> @@ -2904,16 +2904,21 @@ static u8 rt2800_get_default_vgc(struct rt2x00_dev *rt2x00dev)
> rt2x00_rt(rt2x00dev, RT3090) ||
> rt2x00_rt(rt2x00dev, RT3290) ||
> rt2x00_rt(rt2x00dev, RT3390) ||
> + rt2x00_rt(rt2x00dev, RT3572) ||
> rt2x00_rt(rt2x00dev, RT5390) ||
> rt2x00_rt(rt2x00dev, RT5392))
> vgc = 0x1c + (2 * rt2x00dev->lna_gain);
> else
> vgc = 0x2e + rt2x00dev->lna_gain;
> } else { /* 5GHZ band */
> - if (!test_bit(CONFIG_CHANNEL_HT40, &rt2x00dev->flags))
> - vgc = 0x32 + (rt2x00dev->lna_gain * 5) / 3;
> - else
> - vgc = 0x3a + (rt2x00dev->lna_gain * 5) / 3;
> + if (rt2x00_rt(rt2x00dev, RT3572))
> + vgc = 0x22 + (rt2x00dev->lna_gain * 5) / 3;
> + else {
> + if (!test_bit(CONFIG_CHANNEL_HT40, &rt2x00dev->flags))
> + vgc = 0x32 + (rt2x00dev->lna_gain * 5) / 3;
> + else
> + vgc = 0x3a + (rt2x00dev->lna_gain * 5) / 3;
> + }
> }
>
> return vgc;
> --
> 1.7.11.1
>

2012-09-17 15:27:13

by Ivo Van Doorn

[permalink] [raw]
Subject: Re: [PATCH 1/5] rt2x00: Code clean up in rt2800lib.

On Sun, Sep 16, 2012 at 10:29 PM, Gertjan van Wingerde
<[email protected]> wrote:
> Make the code in rt2800_get_default_vgc more understandable and
> readable, especially for the 5GHz band values.
>
> Signed-off-by: Gertjan van Wingerde <[email protected]>

Acked-by: Ivo van Doorn <[email protected]>

> diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
> index 9e09367..cec4a99 100644
> --- a/drivers/net/wireless/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
> @@ -2896,6 +2896,8 @@ EXPORT_SYMBOL_GPL(rt2800_link_stats);
>
> static u8 rt2800_get_default_vgc(struct rt2x00_dev *rt2x00dev)
> {
> + u8 vgc;
> +
> if (rt2x00dev->curr_band == IEEE80211_BAND_2GHZ) {
> if (rt2x00_rt(rt2x00dev, RT3070) ||
> rt2x00_rt(rt2x00dev, RT3071) ||
> @@ -2904,15 +2906,17 @@ static u8 rt2800_get_default_vgc(struct rt2x00_dev *rt2x00dev)
> rt2x00_rt(rt2x00dev, RT3390) ||
> rt2x00_rt(rt2x00dev, RT5390) ||
> rt2x00_rt(rt2x00dev, RT5392))
> - return 0x1c + (2 * rt2x00dev->lna_gain);
> + vgc = 0x1c + (2 * rt2x00dev->lna_gain);
> + else
> + vgc = 0x2e + rt2x00dev->lna_gain;
> + } else { /* 5GHZ band */
> + if (!test_bit(CONFIG_CHANNEL_HT40, &rt2x00dev->flags))
> + vgc = 0x32 + (rt2x00dev->lna_gain * 5) / 3;
> else
> - return 0x2e + rt2x00dev->lna_gain;
> + vgc = 0x3a + (rt2x00dev->lna_gain * 5) / 3;
> }
>
> - if (!test_bit(CONFIG_CHANNEL_HT40, &rt2x00dev->flags))
> - return 0x32 + (rt2x00dev->lna_gain * 5) / 3;
> - else
> - return 0x3a + (rt2x00dev->lna_gain * 5) / 3;
> + return vgc;
> }
>
> static inline void rt2800_set_vgc(struct rt2x00_dev *rt2x00dev,
> --
> 1.7.11.1
>

2012-09-17 15:28:00

by Ivo Van Doorn

[permalink] [raw]
Subject: Re: [PATCH 3/5] rt2x00: rt2800lib - code cleanup.

2012/9/16 Gertjan van Wingerde <[email protected]>:
> Move RT3290 BBP initialization sequence (part) to the right place in the code.
>
> This is just a code style change, no functional changes.
>
> Signed-off-by: Gertjan van Wingerde <[email protected]>

Acked-by: Ivo van Doorn <[email protected]>

> diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
> index 17b8a28..37f64ba 100644
> --- a/drivers/net/wireless/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
> @@ -3535,6 +3535,11 @@ static int rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
> } else if (rt2800_is_305x_soc(rt2x00dev)) {
> rt2800_bbp_write(rt2x00dev, 78, 0x0e);
> rt2800_bbp_write(rt2x00dev, 80, 0x08);
> + } else if (rt2x00_rt(rt2x00dev, RT3290)) {
> + rt2800_bbp_write(rt2x00dev, 74, 0x0b);
> + rt2800_bbp_write(rt2x00dev, 79, 0x18);
> + rt2800_bbp_write(rt2x00dev, 80, 0x09);
> + rt2800_bbp_write(rt2x00dev, 81, 0x33);
> } else if (rt2x00_rt(rt2x00dev, RT3352)) {
> rt2800_bbp_write(rt2x00dev, 78, 0x0e);
> rt2800_bbp_write(rt2x00dev, 80, 0x08);
> @@ -3543,13 +3548,6 @@ static int rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
> rt2800_bbp_write(rt2x00dev, 81, 0x37);
> }
>
> - if (rt2x00_rt(rt2x00dev, RT3290)) {
> - rt2800_bbp_write(rt2x00dev, 74, 0x0b);
> - rt2800_bbp_write(rt2x00dev, 79, 0x18);
> - rt2800_bbp_write(rt2x00dev, 80, 0x09);
> - rt2800_bbp_write(rt2x00dev, 81, 0x33);
> - }
> -
> rt2800_bbp_write(rt2x00dev, 82, 0x62);
> if (rt2x00_rt(rt2x00dev, RT3290) ||
> rt2x00_rt(rt2x00dev, RT5390) ||
> --
> 1.7.11.1
>

2012-09-16 20:29:57

by Gertjan van Wingerde

[permalink] [raw]
Subject: [PATCH 3/5] rt2x00: rt2800lib - code cleanup.

Move RT3290 BBP initialization sequence (part) to the right place in the code.

This is just a code style change, no functional changes.

Signed-off-by: Gertjan van Wingerde <[email protected]>

diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index 17b8a28..37f64ba 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -3535,6 +3535,11 @@ static int rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
} else if (rt2800_is_305x_soc(rt2x00dev)) {
rt2800_bbp_write(rt2x00dev, 78, 0x0e);
rt2800_bbp_write(rt2x00dev, 80, 0x08);
+ } else if (rt2x00_rt(rt2x00dev, RT3290)) {
+ rt2800_bbp_write(rt2x00dev, 74, 0x0b);
+ rt2800_bbp_write(rt2x00dev, 79, 0x18);
+ rt2800_bbp_write(rt2x00dev, 80, 0x09);
+ rt2800_bbp_write(rt2x00dev, 81, 0x33);
} else if (rt2x00_rt(rt2x00dev, RT3352)) {
rt2800_bbp_write(rt2x00dev, 78, 0x0e);
rt2800_bbp_write(rt2x00dev, 80, 0x08);
@@ -3543,13 +3548,6 @@ static int rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
rt2800_bbp_write(rt2x00dev, 81, 0x37);
}

- if (rt2x00_rt(rt2x00dev, RT3290)) {
- rt2800_bbp_write(rt2x00dev, 74, 0x0b);
- rt2800_bbp_write(rt2x00dev, 79, 0x18);
- rt2800_bbp_write(rt2x00dev, 80, 0x09);
- rt2800_bbp_write(rt2x00dev, 81, 0x33);
- }
-
rt2800_bbp_write(rt2x00dev, 82, 0x62);
if (rt2x00_rt(rt2x00dev, RT3290) ||
rt2x00_rt(rt2x00dev, RT5390) ||
--
1.7.11.1


2012-09-16 20:29:58

by Gertjan van Wingerde

[permalink] [raw]
Subject: [PATCH 5/5] rt2x00: Clean up RFCSR1 programming in rt2800_config_channel_rf3xxx.

Setting of the individual fields of the RF register can be simplified.

Signed-off-by: Gertjan van Wingerde <[email protected]>

diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index d745c32..540c94f 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -1763,36 +1763,15 @@ static void rt2800_config_channel_rf3xxx(struct rt2x00_dev *rt2x00dev,

rt2800_rfcsr_read(rt2x00dev, 1, &rfcsr);
rt2x00_set_field8(&rfcsr, RFCSR1_RX0_PD, 0);
+ rt2x00_set_field8(&rfcsr, RFCSR1_RX1_PD,
+ rt2x00dev->default_ant.rx_chain_num <= 1);
+ rt2x00_set_field8(&rfcsr, RFCSR1_RX2_PD,
+ rt2x00dev->default_ant.rx_chain_num <= 2);
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;
- }
- }
+ rt2x00_set_field8(&rfcsr, RFCSR1_TX1_PD,
+ rt2x00dev->default_ant.tx_chain_num <= 1);
+ rt2x00_set_field8(&rfcsr, RFCSR1_TX2_PD,
+ rt2x00dev->default_ant.tx_chain_num <= 2);
rt2800_rfcsr_write(rt2x00dev, 1, rfcsr);

rt2800_rfcsr_read(rt2x00dev, 30, &rfcsr);
--
1.7.11.1


2012-09-16 20:29:57

by Gertjan van Wingerde

[permalink] [raw]
Subject: [PATCH 2/5] rt2x00: rt2800 - Fix default vgc values for RT3572

Align with the values used by the RT3572 Ralink vendor driver v2.5.0.0.

Signed-off-by: Gertjan van Wingerde <[email protected]>

diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index cec4a99..17b8a28 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -2904,16 +2904,21 @@ static u8 rt2800_get_default_vgc(struct rt2x00_dev *rt2x00dev)
rt2x00_rt(rt2x00dev, RT3090) ||
rt2x00_rt(rt2x00dev, RT3290) ||
rt2x00_rt(rt2x00dev, RT3390) ||
+ rt2x00_rt(rt2x00dev, RT3572) ||
rt2x00_rt(rt2x00dev, RT5390) ||
rt2x00_rt(rt2x00dev, RT5392))
vgc = 0x1c + (2 * rt2x00dev->lna_gain);
else
vgc = 0x2e + rt2x00dev->lna_gain;
} else { /* 5GHZ band */
- if (!test_bit(CONFIG_CHANNEL_HT40, &rt2x00dev->flags))
- vgc = 0x32 + (rt2x00dev->lna_gain * 5) / 3;
- else
- vgc = 0x3a + (rt2x00dev->lna_gain * 5) / 3;
+ if (rt2x00_rt(rt2x00dev, RT3572))
+ vgc = 0x22 + (rt2x00dev->lna_gain * 5) / 3;
+ else {
+ if (!test_bit(CONFIG_CHANNEL_HT40, &rt2x00dev->flags))
+ vgc = 0x32 + (rt2x00dev->lna_gain * 5) / 3;
+ else
+ vgc = 0x3a + (rt2x00dev->lna_gain * 5) / 3;
+ }
}

return vgc;
--
1.7.11.1


2012-09-17 15:28:42

by Ivo Van Doorn

[permalink] [raw]
Subject: Re: [PATCH 5/5] rt2x00: Clean up RFCSR1 programming in rt2800_config_channel_rf3xxx.

On Sun, Sep 16, 2012 at 10:29 PM, Gertjan van Wingerde
<[email protected]> wrote:
> Setting of the individual fields of the RF register can be simplified.
>
> Signed-off-by: Gertjan van Wingerde <[email protected]>

Acked-by: Ivo van Doorn <[email protected]>

> diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
> index d745c32..540c94f 100644
> --- a/drivers/net/wireless/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
> @@ -1763,36 +1763,15 @@ static void rt2800_config_channel_rf3xxx(struct rt2x00_dev *rt2x00dev,
>
> rt2800_rfcsr_read(rt2x00dev, 1, &rfcsr);
> rt2x00_set_field8(&rfcsr, RFCSR1_RX0_PD, 0);
> + rt2x00_set_field8(&rfcsr, RFCSR1_RX1_PD,
> + rt2x00dev->default_ant.rx_chain_num <= 1);
> + rt2x00_set_field8(&rfcsr, RFCSR1_RX2_PD,
> + rt2x00dev->default_ant.rx_chain_num <= 2);
> 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;
> - }
> - }
> + rt2x00_set_field8(&rfcsr, RFCSR1_TX1_PD,
> + rt2x00dev->default_ant.tx_chain_num <= 1);
> + rt2x00_set_field8(&rfcsr, RFCSR1_TX2_PD,
> + rt2x00dev->default_ant.tx_chain_num <= 2);
> rt2800_rfcsr_write(rt2x00dev, 1, rfcsr);
>
> rt2800_rfcsr_read(rt2x00dev, 30, &rfcsr);
> --
> 1.7.11.1
>