Skip to content

Commit

Permalink
rt2x00: rt2800lib: probe RT chipset earlier
Browse files Browse the repository at this point in the history
The 'rt2800_validate_eeprom' function uses the type of
the RT chipset for verifying the number of RX streams
on RT28x0 devices. However the type of the RT chipset
is not yet detected when the 'rt2800_validate_eeprom'
function is called.

Move the RT chipset detection code into a separate helper
function, and call it before rt2800_validate_eeprom.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Gabor Juhos authored and John W. Linville committed Apr 1, 2013
1 parent 86868b2 commit cbafb60
Showing 1 changed file with 45 additions and 35 deletions.
80 changes: 45 additions & 35 deletions drivers/net/wireless/rt2x00/rt2800lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -5431,45 +5431,10 @@ static int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)

static int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev)
{
u32 reg;
u16 value;
u16 eeprom;
u32 rt;
u32 rev;
u16 rf;

if (rt2x00_rt(rt2x00dev, RT3290))
rt2800_register_read(rt2x00dev, MAC_CSR0_3290, &reg);
else
rt2800_register_read(rt2x00dev, MAC_CSR0, &reg);

rt = rt2x00_get_field32(reg, MAC_CSR0_CHIPSET);
rev = rt2x00_get_field32(reg, MAC_CSR0_REVISION);

switch (rt) {
case RT2860:
case RT2872:
case RT2883:
case RT3070:
case RT3071:
case RT3090:
case RT3290:
case RT3352:
case RT3390:
case RT3572:
case RT5390:
case RT5392:
case RT5592:
break;
default:
ERROR(rt2x00dev,
"Invalid RT chipset 0x%04x, rev %04x detected.\n",
rt, rev);
return -ENODEV;
}

rt2x00_set_rt(rt2x00dev, rt, rev);

/*
* Read EEPROM word for configuration.
*/
Expand Down Expand Up @@ -6067,11 +6032,56 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
return 0;
}

static int rt2800_probe_rt(struct rt2x00_dev *rt2x00dev)
{
u32 reg;
u32 rt;
u32 rev;

if (rt2x00_rt(rt2x00dev, RT3290))
rt2800_register_read(rt2x00dev, MAC_CSR0_3290, &reg);
else
rt2800_register_read(rt2x00dev, MAC_CSR0, &reg);

rt = rt2x00_get_field32(reg, MAC_CSR0_CHIPSET);
rev = rt2x00_get_field32(reg, MAC_CSR0_REVISION);

switch (rt) {
case RT2860:
case RT2872:
case RT2883:
case RT3070:
case RT3071:
case RT3090:
case RT3290:
case RT3352:
case RT3390:
case RT3572:
case RT5390:
case RT5392:
case RT5592:
break;
default:
ERROR(rt2x00dev,
"Invalid RT chipset 0x%04x, rev %04x detected.\n",
rt, rev);
return -ENODEV;
}

rt2x00_set_rt(rt2x00dev, rt, rev);

return 0;
}

int rt2800_probe_hw(struct rt2x00_dev *rt2x00dev)
{
int retval;
u32 reg;

retval = rt2800_probe_rt(rt2x00dev);
if (retval)
return retval;

/*
* Allocate eeprom data.
*/
Expand Down

0 comments on commit cbafb60

Please sign in to comment.