--- 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" @@ -1722,7 +1724,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) { @@ -1730,6 +1732,16 @@ int ath5k_eeprom_read_mac(struct ath5k_h u32 total, offset; u16 data; int octet; + 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; + } AR5K_EEPROM_READ(0x20, data); --- 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" @@ -74,6 +75,19 @@ ath5k_pci_eeprom_read(struct ath_common { 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