Skip to content

Commit

Permalink
rt2x00: Add dynamic detection of eFuse EEPROM in rt2800pci.
Browse files Browse the repository at this point in the history
Instead of assuming that all rt3090 devices will have an eFuse EEPROM,
do as the legacy Ralink driver, and detect at run-time whether an
eFuse EEPROM is present.

Signed-off-by: Gertjan van Wingerde <gwingerde@gmail.com>
Acked-by: Ivo van Doorn <IvDoorn@gmail.com>
Acked-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Gertjan van Wingerde authored and John W. Linville committed Nov 11, 2009
1 parent 748d451 commit a659868
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 4 deletions.
22 changes: 18 additions & 4 deletions drivers/net/wireless/rt2x00/rt2800pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,15 @@ static void rt2800pci_read_eeprom_pci(struct rt2x00_dev *rt2x00dev)
EEPROM_SIZE / sizeof(u16));
}

static int rt2800pci_efuse_detect(struct rt2x00_dev *rt2x00dev)
{
u32 reg;

rt2800_register_read(rt2x00dev, EFUSE_CTRL, &reg);

return rt2x00_get_field32(reg, EFUSE_CTRL_PRESENT);
}

static void rt2800pci_efuse_read(struct rt2x00_dev *rt2x00dev,
unsigned int i)
{
Expand Down Expand Up @@ -182,6 +191,11 @@ static inline void rt2800pci_read_eeprom_pci(struct rt2x00_dev *rt2x00dev)
{
}

static inline int rt2800pci_efuse_detect(struct rt2x00_dev *rt2x00dev)
{
return 0;
}

static inline void rt2800pci_read_eeprom_efuse(struct rt2x00_dev *rt2x00dev)
{
}
Expand Down Expand Up @@ -1091,11 +1105,11 @@ static int rt2800pci_validate_eeprom(struct rt2x00_dev *rt2x00dev)
case RT3052:
rt2800pci_read_eeprom_soc(rt2x00dev);
break;
case RT3090:
rt2800pci_read_eeprom_efuse(rt2x00dev);
break;
default:
rt2800pci_read_eeprom_pci(rt2x00dev);
if (rt2800pci_efuse_detect(rt2x00dev))
rt2800pci_read_eeprom_efuse(rt2x00dev);
else
rt2800pci_read_eeprom_pci(rt2x00dev);
break;
}

Expand Down
1 change: 1 addition & 0 deletions drivers/net/wireless/rt2x00/rt2800pci.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
#define EFUSE_CTRL_ADDRESS_IN FIELD32(0x03fe0000)
#define EFUSE_CTRL_MODE FIELD32(0x000000c0)
#define EFUSE_CTRL_KICK FIELD32(0x40000000)
#define EFUSE_CTRL_PRESENT FIELD32(0x80000000)

/*
* EFUSE_DATA0
Expand Down

0 comments on commit a659868

Please sign in to comment.