Linux wireless drivers development
 help / color / mirror / Atom feed
* [RFC PATCH] wifi: rt2x00: use VCO_IC 0x2 for RF3053 on 2.4 GHz
@ 2026-10-12 13:37 Ho Jie Feng
  2026-10-13 10:23 ` Stanislaw Gruszka
  0 siblings, 1 reply; 4+ messages in thread
From: Ho Jie Feng @ 2026-10-12 13:37 UTC (permalink / raw)
  To: linux-wireless; +Cc: Ho Jie Feng, Stanislaw Gruszka, linux-kernel

Using the 0x1, the VCO calibration result is 0x7f on channels 6
and below. Using 0x2 fixes it.

Hardware: Netgear WNDA4100 (USB 0846:9013, RT3593 rev 0402, RF3053)

Signed-off-by: Ho Jie Feng <hjf3108@gmail.com>
---
RFC for this since I am not sure if it is a generic fix, since the
vendor driver also doesn't use VCO_IC=0x2.
Is this also a known issue?

Testing on different hardware would be appreciated.

 drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
index 2e2e382b62475..4a44a0222210d 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
@@ -2979,7 +2979,7 @@ static void rt2800_config_channel_rf3053(struct rt2x00_dev *rt2x00dev,
 
 	rfcsr = rt2800_rfcsr_read(rt2x00dev, 6);
 	if (rf->channel >= 1 && rf->channel <= 14)
-		rt2x00_set_field8(&rfcsr, RFCSR6_VCO_IC, 1);
+		rt2x00_set_field8(&rfcsr, RFCSR6_VCO_IC, 2);
 	else if (rf->channel >= 36 && rf->channel <= 64)
 		rt2x00_set_field8(&rfcsr, RFCSR6_VCO_IC, 2);
 	else if (rf->channel >= 100 && rf->channel <= 128)

base-commit: af32da41b0327b9c6a37856ba82b6760d6c8d10e
-- 
2.55.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [RFC PATCH] wifi: rt2x00: use VCO_IC 0x2 for RF3053 on 2.4 GHz
  2026-10-12 13:37 [RFC PATCH] wifi: rt2x00: use VCO_IC 0x2 for RF3053 on 2.4 GHz Ho Jie Feng
@ 2026-10-13 10:23 ` Stanislaw Gruszka
  2026-10-13 12:49   ` Jie Feng
  0 siblings, 1 reply; 4+ messages in thread
From: Stanislaw Gruszka @ 2026-10-13 10:23 UTC (permalink / raw)
  To: Ho Jie Feng; +Cc: linux-wireless, linux-kernel

Hi

On Mon, Oct 12, 2026 at 09:37:27PM +0800, Ho Jie Feng wrote:
> Using the 0x1, the VCO calibration result is 0x7f on channels 6
> and below. Using 0x2 fixes it.
>
> Hardware: Netgear WNDA4100 (USB 0846:9013, RT3593 rev 0402, RF3053)
> 
> Signed-off-by: Ho Jie Feng <hjf3108@gmail.com>
> ---
> RFC for this since I am not sure if it is a generic fix, since the
> vendor driver also doesn't use VCO_IC=0x2.
> Is this also a known issue?

Could you elaborate what is the issue and what you mean by
"VCO calibration result is 0x7f" ?

Regards
Stanislaw

> Testing on different hardware would be appreciated.
> 
>  drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
> index 2e2e382b62475..4a44a0222210d 100644
> --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
> @@ -2979,7 +2979,7 @@ static void rt2800_config_channel_rf3053(struct rt2x00_dev *rt2x00dev,
>  
>  	rfcsr = rt2800_rfcsr_read(rt2x00dev, 6);
>  	if (rf->channel >= 1 && rf->channel <= 14)
> -		rt2x00_set_field8(&rfcsr, RFCSR6_VCO_IC, 1);
> +		rt2x00_set_field8(&rfcsr, RFCSR6_VCO_IC, 2);
>  	else if (rf->channel >= 36 && rf->channel <= 64)
>  		rt2x00_set_field8(&rfcsr, RFCSR6_VCO_IC, 2);
>  	else if (rf->channel >= 100 && rf->channel <= 128)
> 
> base-commit: af32da41b0327b9c6a37856ba82b6760d6c8d10e
> -- 
> 2.55.0
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [RFC PATCH] wifi: rt2x00: use VCO_IC 0x2 for RF3053 on 2.4 GHz
  2026-10-13 10:23 ` Stanislaw Gruszka
@ 2026-10-13 12:49   ` Jie Feng
  2026-10-14  8:31     ` Stanislaw Gruszka
  0 siblings, 1 reply; 4+ messages in thread
From: Jie Feng @ 2026-10-13 12:49 UTC (permalink / raw)
  To: Stanislaw Gruszka; +Cc: linux-wireless, linux-kernel

On Tue, 13 Oct 2026 at 18:23, Stanislaw Gruszka <stf_xl@wp.pl> wrote:
>
> Hi
>
> On Mon, Oct 12, 2026 at 09:37:27PM +0800, Ho Jie Feng wrote:
> > Using the 0x1, the VCO calibration result is 0x7f on channels 6
> > and below. Using 0x2 fixes it.
> >
> > Hardware: Netgear WNDA4100 (USB 0846:9013, RT3593 rev 0402, RF3053)
> >
> > Signed-off-by: Ho Jie Feng <hjf3108@gmail.com>
> > ---
> > RFC for this since I am not sure if it is a generic fix, since the
> > vendor driver also doesn't use VCO_IC=0x2.
> > Is this also a known issue?
>
> Could you elaborate what is the issue and what you mean by
> "VCO calibration result is 0x7f" ?'
I had accidentally left the description out, sorry about that.

The adapter doesn't work on the lower channels in 2.4GHz,
channels 8 and below. This looked like an issue with
the PLL or something after debugging.

By tuning to channels 1-12 and using the debugfs to dump the
RFCSR registers, RFCSR4 is always 0x7f on the failing channels
consistently. Since there is code to switch RFCSR6 based on
channel, I tried the same as the 5GHz code to switch RFCSR6=0x2
for lower channels and it worked on all the channels surprisingly.

Due to the behaviour of RFCSR4, I think it is a VCO calibration
result since it seems to change after enabling the calibration.

I could not find any mention of this issue elsewhere, and suspect
either this hardware has very few Linux users or my hardware
is special in some way, so I can't guarantee that setting
it to 0x2 will work with another device even if it is the
same WNDA4100 model and chipset, so some testing would
be appreciated.

> Regards
> Stanislaw
>
> > Testing on different hardware would be appreciated.
> >
> >  drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
> > index 2e2e382b62475..4a44a0222210d 100644
> > --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
> > +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
> > @@ -2979,7 +2979,7 @@ static void rt2800_config_channel_rf3053(struct rt2x00_dev *rt2x00dev,
> >
> >       rfcsr = rt2800_rfcsr_read(rt2x00dev, 6);
> >       if (rf->channel >= 1 && rf->channel <= 14)
> > -             rt2x00_set_field8(&rfcsr, RFCSR6_VCO_IC, 1);
> > +             rt2x00_set_field8(&rfcsr, RFCSR6_VCO_IC, 2);
> >       else if (rf->channel >= 36 && rf->channel <= 64)
> >               rt2x00_set_field8(&rfcsr, RFCSR6_VCO_IC, 2);
> >       else if (rf->channel >= 100 && rf->channel <= 128)
> >
> > base-commit: af32da41b0327b9c6a37856ba82b6760d6c8d10e
> > --
> > 2.55.0
> >

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [RFC PATCH] wifi: rt2x00: use VCO_IC 0x2 for RF3053 on 2.4 GHz
  2026-10-13 12:49   ` Jie Feng
@ 2026-10-14  8:31     ` Stanislaw Gruszka
  0 siblings, 0 replies; 4+ messages in thread
From: Stanislaw Gruszka @ 2026-10-14  8:31 UTC (permalink / raw)
  To: Jie Feng; +Cc: linux-wireless, linux-kernel

On Tue, Oct 13, 2026 at 08:49:44PM +0800, Jie Feng wrote:
> On Tue, 13 Oct 2026 at 18:23, Stanislaw Gruszka <stf_xl@wp.pl> wrote:
> >
> > Hi
> >
> > On Mon, Oct 12, 2026 at 09:37:27PM +0800, Ho Jie Feng wrote:
> > > Using the 0x1, the VCO calibration result is 0x7f on channels 6
> > > and below. Using 0x2 fixes it.
> > >
> > > Hardware: Netgear WNDA4100 (USB 0846:9013, RT3593 rev 0402, RF3053)
> > >
> > > Signed-off-by: Ho Jie Feng <hjf3108@gmail.com>
> > > ---
> > > RFC for this since I am not sure if it is a generic fix, since the
> > > vendor driver also doesn't use VCO_IC=0x2.

I looked at vendor driver it does not set VCO_IC=0x2 when switch 
a channel. However it does it after wake up from suspend:
https://github.com/ashaffer/rt3573sta/blob/09b80e6290769c53736dc09c5ae9025e15bfbe69/chips/rt3593.c#L194

This function: RT3593ReverseRFSleepModeSetup seams to be partially
the same what NICInitRT3593RFRegisters does. 

Also NICInitRT3593RFRegisters it's different from
rt2800_init_rfcsr_3593() i.e. it set RF_R02 before GPIO_SWITCH.

Could you check if modifying rt2800_init_rfcsr_3593() 
to be more the same with both NICInitRT3593RFRegistersr and
RT3593ReverseRFSleepModeSetup (regarding RF_R06 change)
solve the problem?

> > > Is this also a known issue?
I didn't knew about it.

> > Could you elaborate what is the issue and what you mean by
> > "VCO calibration result is 0x7f" ?'
> I had accidentally left the description out, sorry about that.
No problem.

> The adapter doesn't work on the lower channels in 2.4GHz,
> channels 8 and below. This looked like an issue with
> the PLL or something after debugging.
> 
> By tuning to channels 1-12 and using the debugfs to dump the
> RFCSR registers, RFCSR4 is always 0x7f on the failing channels
> consistently. Since there is code to switch RFCSR6 based on
> channel, I tried the same as the 5GHz code to switch RFCSR6=0x2
> for lower channels and it worked on all the channels surprisingly.
> 
> Due to the behaviour of RFCSR4, I think it is a VCO calibration
> result since it seems to change after enabling the calibration.
> 
> I could not find any mention of this issue elsewhere, and suspect
> either this hardware has very few Linux users or my hardware
> is special in some way, so I can't guarantee that setting
> it to 0x2 will work with another device even if it is the
> same WNDA4100 model and chipset, so some testing would
> be appreciated.
I do not have RT3573/RT3593 device by myself and ordinary users
do not read linux-wireless mailing list, so we have rather little
chance to get more test coverage here.

Anyways, if init change that would make rt2800_init_rfcsr_3593()
more like vendor driver do not fix the problem, it's ok to modify
rt2800_config_channel_rf3053(). 

If we want to be more safe with the change, we can limit it with
rt2x00_rt_rev() using 'rev' of your tested device.

Regards
Stanislaw

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-10-14  8:31 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-12 13:37 [RFC PATCH] wifi: rt2x00: use VCO_IC 0x2 for RF3053 on 2.4 GHz Ho Jie Feng
2026-10-13 10:23 ` Stanislaw Gruszka
2026-10-13 12:49   ` Jie Feng
2026-10-14  8:31     ` Stanislaw Gruszka

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox