Commit 7ab71325 authored by Bartlomiej Zolnierkiewicz's avatar Bartlomiej Zolnierkiewicz Committed by John W. Linville

rt2800: prepare for unification of EEPROM support code

* 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: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Acked-by: default avatarIvo van Doorn <IvDoorn@gmail.com>
Acked-by: default avatarGertjan van Wingerde <gwingerde@gmail.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 863cc978
...@@ -1091,28 +1091,12 @@ static irqreturn_t rt2800pci_interrupt(int irq, void *dev_instance) ...@@ -1091,28 +1091,12 @@ static irqreturn_t rt2800pci_interrupt(int irq, void *dev_instance)
/* /*
* Device probe functions. * Device probe functions.
*/ */
static int rt2800pci_validate_eeprom(struct rt2x00_dev *rt2x00dev) static int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)
{ {
u16 word; u16 word;
u8 *mac; u8 *mac;
u8 default_lna_gain; 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. * Start validation of the data that has been read.
*/ */
...@@ -1131,7 +1115,7 @@ static int rt2800pci_validate_eeprom(struct rt2x00_dev *rt2x00dev) ...@@ -1131,7 +1115,7 @@ static int rt2800pci_validate_eeprom(struct rt2x00_dev *rt2x00dev)
EEPROM(rt2x00dev, "Antenna: 0x%04x\n", word); EEPROM(rt2x00dev, "Antenna: 0x%04x\n", word);
} else if (rt2x00_rev(&rt2x00dev->chip) < RT2883_VERSION) { } 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) if (rt2x00_get_field16(word, EEPROM_ANTENNA_RXPATH) > 2)
rt2x00_set_field16(&word, EEPROM_ANTENNA_RXPATH, 2); rt2x00_set_field16(&word, EEPROM_ANTENNA_RXPATH, 2);
...@@ -1210,6 +1194,27 @@ static int rt2800pci_validate_eeprom(struct rt2x00_dev *rt2x00dev) ...@@ -1210,6 +1194,27 @@ static int rt2800pci_validate_eeprom(struct rt2x00_dev *rt2x00dev)
return 0; 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) static int rt2800pci_init_eeprom(struct rt2x00_dev *rt2x00dev)
{ {
u32 reg; u32 reg;
...@@ -1226,6 +1231,8 @@ static int rt2800pci_init_eeprom(struct rt2x00_dev *rt2x00dev) ...@@ -1226,6 +1231,8 @@ static int rt2800pci_init_eeprom(struct rt2x00_dev *rt2x00dev)
*/ */
value = rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RF_TYPE); value = rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RF_TYPE);
rt2800_register_read(rt2x00dev, MAC_CSR0, &reg); rt2800_register_read(rt2x00dev, MAC_CSR0, &reg);
if (rt2x00_intf_is_pci(rt2x00dev))
rt2x00_set_chip_rf(rt2x00dev, value, reg); rt2x00_set_chip_rf(rt2x00dev, value, reg);
if (!rt2x00_rf(&rt2x00dev->chip, RF2820) && if (!rt2x00_rf(&rt2x00dev->chip, RF2820) &&
...@@ -1234,8 +1241,10 @@ static int rt2800pci_init_eeprom(struct rt2x00_dev *rt2x00dev) ...@@ -1234,8 +1241,10 @@ static int rt2800pci_init_eeprom(struct rt2x00_dev *rt2x00dev)
!rt2x00_rf(&rt2x00dev->chip, RF2750) && !rt2x00_rf(&rt2x00dev->chip, RF2750) &&
!rt2x00_rf(&rt2x00dev->chip, RF3020) && !rt2x00_rf(&rt2x00dev->chip, RF3020) &&
!rt2x00_rf(&rt2x00dev->chip, RF2020) && !rt2x00_rf(&rt2x00dev->chip, RF2020) &&
(rt2x00_intf_is_usb(rt2x00dev) ||
(rt2x00_intf_is_pci(rt2x00dev) &&
!rt2x00_rf(&rt2x00dev->chip, RF3021) && !rt2x00_rf(&rt2x00dev->chip, RF3021) &&
!rt2x00_rf(&rt2x00dev->chip, RF3022)) { !rt2x00_rf(&rt2x00dev->chip, RF3022)))) {
ERROR(rt2x00dev, "Invalid RF chipset detected.\n"); ERROR(rt2x00dev, "Invalid RF chipset detected.\n");
return -ENODEV; return -ENODEV;
} }
......
...@@ -665,14 +665,12 @@ static void rt2800usb_fill_rxdone(struct queue_entry *entry, ...@@ -665,14 +665,12 @@ static void rt2800usb_fill_rxdone(struct queue_entry *entry,
/* /*
* Device probe functions. * Device probe functions.
*/ */
static int rt2800usb_validate_eeprom(struct rt2x00_dev *rt2x00dev) static int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)
{ {
u16 word; u16 word;
u8 *mac; u8 *mac;
u8 default_lna_gain; u8 default_lna_gain;
rt2x00usb_eeprom_read(rt2x00dev, rt2x00dev->eeprom, EEPROM_SIZE);
/* /*
* Start validation of the data that has been read. * Start validation of the data that has been read.
*/ */
...@@ -691,7 +689,7 @@ static int rt2800usb_validate_eeprom(struct rt2x00_dev *rt2x00dev) ...@@ -691,7 +689,7 @@ static int rt2800usb_validate_eeprom(struct rt2x00_dev *rt2x00dev)
EEPROM(rt2x00dev, "Antenna: 0x%04x\n", word); EEPROM(rt2x00dev, "Antenna: 0x%04x\n", word);
} else if (rt2x00_rev(&rt2x00dev->chip) < RT2883_VERSION) { } 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) if (rt2x00_get_field16(word, EEPROM_ANTENNA_RXPATH) > 2)
rt2x00_set_field16(&word, EEPROM_ANTENNA_RXPATH, 2); rt2x00_set_field16(&word, EEPROM_ANTENNA_RXPATH, 2);
...@@ -770,6 +768,13 @@ static int rt2800usb_validate_eeprom(struct rt2x00_dev *rt2x00dev) ...@@ -770,6 +768,13 @@ static int rt2800usb_validate_eeprom(struct rt2x00_dev *rt2x00dev)
return 0; 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) static int rt2800usb_init_eeprom(struct rt2x00_dev *rt2x00dev)
{ {
u32 reg; u32 reg;
...@@ -786,19 +791,24 @@ static int rt2800usb_init_eeprom(struct rt2x00_dev *rt2x00dev) ...@@ -786,19 +791,24 @@ static int rt2800usb_init_eeprom(struct rt2x00_dev *rt2x00dev)
*/ */
value = rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RF_TYPE); value = rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RF_TYPE);
rt2800_register_read(rt2x00dev, MAC_CSR0, &reg); rt2800_register_read(rt2x00dev, MAC_CSR0, &reg);
if (rt2x00_intf_is_usb(rt2x00dev)) {
struct rt2x00_chip *chip = &rt2x00dev->chip;
rt2x00_set_chip(rt2x00dev, RT2870, value, reg); rt2x00_set_chip(rt2x00dev, RT2870, value, reg);
/* /*
* The check for rt2860 is not a typo, some rt2870 hardware * The check for rt2860 is not a typo, some rt2870 hardware
* identifies itself as rt2860 in the CSR register. * identifies itself as rt2860 in the CSR register.
*/ */
if (!rt2x00_check_rev(&rt2x00dev->chip, 0xfff00000, 0x28600000) && if (!rt2x00_check_rev(chip, 0xfff00000, 0x28600000) &&
!rt2x00_check_rev(&rt2x00dev->chip, 0xfff00000, 0x28700000) && !rt2x00_check_rev(chip, 0xfff00000, 0x28700000) &&
!rt2x00_check_rev(&rt2x00dev->chip, 0xfff00000, 0x28800000) && !rt2x00_check_rev(chip, 0xfff00000, 0x28800000) &&
!rt2x00_check_rev(&rt2x00dev->chip, 0xffff0000, 0x30700000)) { !rt2x00_check_rev(chip, 0xffff0000, 0x30700000)) {
ERROR(rt2x00dev, "Invalid RT chipset detected.\n"); ERROR(rt2x00dev, "Invalid RT chipset detected.\n");
return -ENODEV; return -ENODEV;
} }
}
if (!rt2x00_rf(&rt2x00dev->chip, RF2820) && if (!rt2x00_rf(&rt2x00dev->chip, RF2820) &&
!rt2x00_rf(&rt2x00dev->chip, RF2850) && !rt2x00_rf(&rt2x00dev->chip, RF2850) &&
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment