Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+30 −21
Original line number Diff line number Diff line
@@ -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.
	 */
@@ -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);
@@ -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;
@@ -1226,6 +1231,8 @@ 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);

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

	if (!rt2x00_rf(&rt2x00dev->chip, RF2820) &&
@@ -1234,8 +1241,10 @@ static int rt2800pci_init_eeprom(struct rt2x00_dev *rt2x00dev)
	    !rt2x00_rf(&rt2x00dev->chip, RF2750) &&
	    !rt2x00_rf(&rt2x00dev->chip, RF3020) &&
	    !rt2x00_rf(&rt2x00dev->chip, RF2020) &&
	    (rt2x00_intf_is_usb(rt2x00dev) ||
	     (rt2x00_intf_is_pci(rt2x00dev) &&
	      !rt2x00_rf(&rt2x00dev->chip, RF3021) &&
	    !rt2x00_rf(&rt2x00dev->chip, RF3022)) {
	      !rt2x00_rf(&rt2x00dev->chip, RF3022)))) {
		ERROR(rt2x00dev, "Invalid RF chipset detected.\n");
		return -ENODEV;
	}
+25 −15
Original line number Diff line number Diff line
@@ -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.
	 */
@@ -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);
@@ -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;
@@ -786,19 +791,24 @@ 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);

	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(&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)) {
		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) &&
	    !rt2x00_rf(&rt2x00dev->chip, RF2850) &&