--- a/drivers/net/wireless/ath/ath5k/eeprom.c +++ b/drivers/net/wireless/ath/ath5k/eeprom.c @@ -22,6 +22,8 @@ \*************************************/ #include +#include +#include #include "ath5k.h" #include "reg.h" @@ -1726,7 +1728,7 @@ ath5k_eeprom_read_spur_chans(struct ath5 } /* - * Read the MAC address from eeprom + * Read the MAC address from eeprom or platform_data */ int ath5k_eeprom_read_mac(struct ath5k_hw *ah, u8 *mac) { @@ -1734,6 +1736,16 @@ int ath5k_eeprom_read_mac(struct ath5k_h u32 total, offset; u16 data; int octet, ret; + struct ath5k_platform_data *pdata = NULL; + + if (ah->ah_sc->pdev) + pdata = ah->ah_sc->pdev->dev.platform_data; + + if (pdata && pdata->macaddr) + { + memcpy(mac, pdata->macaddr, ETH_ALEN); + return 0; + } ret = ath5k_hw_nvram_read(ah, 0x20, &data); if (ret) --- a/drivers/net/wireless/ath/ath5k/pci.c +++ b/drivers/net/wireless/ath/ath5k/pci.c @@ -17,6 +17,7 @@ #include #include #include +#include #include "../ath.h" #include "ath5k.h" #include "debug.h" @@ -73,6 +74,19 @@ bool ath5k_pci_eeprom_read(struct ath_co { struct ath5k_hw *ah = (struct ath5k_hw *) common->ah; u32 status, timeout; + struct ath5k_platform_data *pdata = NULL; + + if (ah->ah_sc->pdev) + pdata = ah->ah_sc->pdev->dev.platform_data; + + if (pdata && pdata->eeprom_data && pdata->eeprom_data[0] == AR5K_EEPROM_MAGIC_VALUE) + { + if (offset >= ATH5K_PLAT_EEP_MAX_WORDS) + return -EIO; + + *data = pdata->eeprom_data[offset]; + return 0; + } /* * Initialize EEPROM access