Skip to content

Commit

Permalink
rt2800: prepare for unification of EEPROM support code
Browse files Browse the repository at this point in the history
* Factor out common code from rt2800[pci,usb]_validate_eeprom()
  to rt2800_validate_eeprom().

* Fix interface specific comment in rt2800[pci,usb]_validate_eeprom().

* Enclose interface specific code in rt2800[pci,usb]_init_eeprom()
  with rt2x00_intf_is_[pci,usb]() checks.

Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Acked-by: Ivo van Doorn <IvDoorn@gmail.com>
Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Bartlomiej Zolnierkiewicz authored and John W. Linville committed Nov 11, 2009
1 parent 863cc97 commit 7ab7132
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 36 deletions.
51 changes: 30 additions & 21 deletions drivers/net/wireless/rt2x00/rt2800pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -1091,28 +1091,12 @@ static irqreturn_t rt2800pci_interrupt(int irq, void *dev_instance)
/*
* Device probe functions.
*/
static int rt2800pci_validate_eeprom(struct rt2x00_dev *rt2x00dev)
static int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)
{
u16 word;
u8 *mac;
u8 default_lna_gain;

/*
* Read EEPROM into buffer
*/
switch(rt2x00dev->chip.rt) {
case RT2880:
case RT3052:
rt2800pci_read_eeprom_soc(rt2x00dev);
break;
default:
if (rt2800pci_efuse_detect(rt2x00dev))
rt2800pci_read_eeprom_efuse(rt2x00dev);
else
rt2800pci_read_eeprom_pci(rt2x00dev);
break;
}

/*
* Start validation of the data that has been read.
*/
Expand All @@ -1131,7 +1115,7 @@ static int rt2800pci_validate_eeprom(struct rt2x00_dev *rt2x00dev)
EEPROM(rt2x00dev, "Antenna: 0x%04x\n", word);
} else if (rt2x00_rev(&rt2x00dev->chip) < RT2883_VERSION) {
/*
* There is a max of 2 RX streams for RT2860 series
* There is a max of 2 RX streams for RT28x0 series
*/
if (rt2x00_get_field16(word, EEPROM_ANTENNA_RXPATH) > 2)
rt2x00_set_field16(&word, EEPROM_ANTENNA_RXPATH, 2);
Expand Down Expand Up @@ -1210,6 +1194,27 @@ static int rt2800pci_validate_eeprom(struct rt2x00_dev *rt2x00dev)
return 0;
}

static int rt2800pci_validate_eeprom(struct rt2x00_dev *rt2x00dev)
{
/*
* Read EEPROM into buffer
*/
switch (rt2x00dev->chip.rt) {
case RT2880:
case RT3052:
rt2800pci_read_eeprom_soc(rt2x00dev);
break;
default:
if (rt2800pci_efuse_detect(rt2x00dev))
rt2800pci_read_eeprom_efuse(rt2x00dev);
else
rt2800pci_read_eeprom_pci(rt2x00dev);
break;
}

return rt2800_validate_eeprom(rt2x00dev);
}

static int rt2800pci_init_eeprom(struct rt2x00_dev *rt2x00dev)
{
u32 reg;
Expand All @@ -1226,16 +1231,20 @@ static int rt2800pci_init_eeprom(struct rt2x00_dev *rt2x00dev)
*/
value = rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RF_TYPE);
rt2800_register_read(rt2x00dev, MAC_CSR0, &reg);
rt2x00_set_chip_rf(rt2x00dev, value, reg);

if (rt2x00_intf_is_pci(rt2x00dev))
rt2x00_set_chip_rf(rt2x00dev, value, reg);

if (!rt2x00_rf(&rt2x00dev->chip, RF2820) &&
!rt2x00_rf(&rt2x00dev->chip, RF2850) &&
!rt2x00_rf(&rt2x00dev->chip, RF2720) &&
!rt2x00_rf(&rt2x00dev->chip, RF2750) &&
!rt2x00_rf(&rt2x00dev->chip, RF3020) &&
!rt2x00_rf(&rt2x00dev->chip, RF2020) &&
!rt2x00_rf(&rt2x00dev->chip, RF3021) &&
!rt2x00_rf(&rt2x00dev->chip, RF3022)) {
(rt2x00_intf_is_usb(rt2x00dev) ||
(rt2x00_intf_is_pci(rt2x00dev) &&
!rt2x00_rf(&rt2x00dev->chip, RF3021) &&
!rt2x00_rf(&rt2x00dev->chip, RF3022)))) {
ERROR(rt2x00dev, "Invalid RF chipset detected.\n");
return -ENODEV;
}
Expand Down
40 changes: 25 additions & 15 deletions drivers/net/wireless/rt2x00/rt2800usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -665,14 +665,12 @@ static void rt2800usb_fill_rxdone(struct queue_entry *entry,
/*
* Device probe functions.
*/
static int rt2800usb_validate_eeprom(struct rt2x00_dev *rt2x00dev)
static int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)
{
u16 word;
u8 *mac;
u8 default_lna_gain;

rt2x00usb_eeprom_read(rt2x00dev, rt2x00dev->eeprom, EEPROM_SIZE);

/*
* Start validation of the data that has been read.
*/
Expand All @@ -691,7 +689,7 @@ static int rt2800usb_validate_eeprom(struct rt2x00_dev *rt2x00dev)
EEPROM(rt2x00dev, "Antenna: 0x%04x\n", word);
} else if (rt2x00_rev(&rt2x00dev->chip) < RT2883_VERSION) {
/*
* There is a max of 2 RX streams for RT2870 series
* There is a max of 2 RX streams for RT28x0 series
*/
if (rt2x00_get_field16(word, EEPROM_ANTENNA_RXPATH) > 2)
rt2x00_set_field16(&word, EEPROM_ANTENNA_RXPATH, 2);
Expand Down Expand Up @@ -770,6 +768,13 @@ static int rt2800usb_validate_eeprom(struct rt2x00_dev *rt2x00dev)
return 0;
}

static int rt2800usb_validate_eeprom(struct rt2x00_dev *rt2x00dev)
{
rt2x00usb_eeprom_read(rt2x00dev, rt2x00dev->eeprom, EEPROM_SIZE);

return rt2800_validate_eeprom(rt2x00dev);
}

static int rt2800usb_init_eeprom(struct rt2x00_dev *rt2x00dev)
{
u32 reg;
Expand All @@ -786,18 +791,23 @@ static int rt2800usb_init_eeprom(struct rt2x00_dev *rt2x00dev)
*/
value = rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RF_TYPE);
rt2800_register_read(rt2x00dev, MAC_CSR0, &reg);
rt2x00_set_chip(rt2x00dev, RT2870, value, reg);

/*
* The check for rt2860 is not a typo, some rt2870 hardware
* identifies itself as rt2860 in the CSR register.
*/
if (!rt2x00_check_rev(&rt2x00dev->chip, 0xfff00000, 0x28600000) &&
!rt2x00_check_rev(&rt2x00dev->chip, 0xfff00000, 0x28700000) &&
!rt2x00_check_rev(&rt2x00dev->chip, 0xfff00000, 0x28800000) &&
!rt2x00_check_rev(&rt2x00dev->chip, 0xffff0000, 0x30700000)) {
ERROR(rt2x00dev, "Invalid RT chipset detected.\n");
return -ENODEV;
if (rt2x00_intf_is_usb(rt2x00dev)) {
struct rt2x00_chip *chip = &rt2x00dev->chip;

rt2x00_set_chip(rt2x00dev, RT2870, value, reg);

/*
* The check for rt2860 is not a typo, some rt2870 hardware
* identifies itself as rt2860 in the CSR register.
*/
if (!rt2x00_check_rev(chip, 0xfff00000, 0x28600000) &&
!rt2x00_check_rev(chip, 0xfff00000, 0x28700000) &&
!rt2x00_check_rev(chip, 0xfff00000, 0x28800000) &&
!rt2x00_check_rev(chip, 0xffff0000, 0x30700000)) {
ERROR(rt2x00dev, "Invalid RT chipset detected.\n");
return -ENODEV;
}
}

if (!rt2x00_rf(&rt2x00dev->chip, RF2820) &&
Expand Down

0 comments on commit 7ab7132

Please sign in to comment.