diff options
author | Daniel Mack <daniel@caiaq.de> | 2009-03-24 23:32:03 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-03-24 23:32:03 -0700 |
commit | 67fca028f1535e510689d2e444b0289e264e05c1 (patch) | |
tree | 8df26ed8bc025eb32e16b97adf9242e1c2b76cdb /drivers/net/ax88796.c | |
parent | 47cb035560a41bd1bd3db506eeab93088815203e (diff) |
ax88796: Add method to take MAC from platform data
Implement a way to provide the MAC address for ax88796 devices from
their platform data. Boards might decide to set the address
programmatically, taken from boot tags or other sources.
Signed-off-by: Daniel Mack <daniel@caiaq.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ax88796.c')
-rw-r--r-- | drivers/net/ax88796.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/drivers/net/ax88796.c b/drivers/net/ax88796.c index e7c9748437d4..62d9c9cc5671 100644 --- a/drivers/net/ax88796.c +++ b/drivers/net/ax88796.c @@ -733,12 +733,19 @@ static int ax_init_dev(struct net_device *dev, int first_init) /* load the mac-address from the device if this is the * first time we've initialised */ - if (first_init && ax->plat->flags & AXFLG_MAC_FROMDEV) { - ei_outb(E8390_NODMA + E8390_PAGE1 + E8390_STOP, - ei_local->mem + E8390_CMD); /* 0x61 */ + if (first_init) { + if (ax->plat->flags & AXFLG_MAC_FROMDEV) { + ei_outb(E8390_NODMA + E8390_PAGE1 + E8390_STOP, + ei_local->mem + E8390_CMD); /* 0x61 */ + for (i = 0; i < ETHER_ADDR_LEN; i++) + dev->dev_addr[i] = + ei_inb(ioaddr + EN1_PHYS_SHIFT(i)); + } - for (i = 0 ; i < ETHER_ADDR_LEN ; i++) - dev->dev_addr[i] = ei_inb(ioaddr + EN1_PHYS_SHIFT(i)); + if ((ax->plat->flags & AXFLG_MAC_FROMPLATFORM) && + ax->plat->mac_addr) + memcpy(dev->dev_addr, ax->plat->mac_addr, + ETHER_ADDR_LEN); } ax_reset_8390(dev); |