diff options
| author | Helmut Raiger <helmut.raiger@hale.at> | 2011-06-29 00:12:14 +0000 | 
|---|---|---|
| committer | Wolfgang Denk <wd@denx.de> | 2011-09-07 23:49:58 +0200 | 
| commit | 6af1d41a46691ca67a8e79af12f07a22aa71680f (patch) | |
| tree | 7deba82e7ed29e8597b49fdfa32a0a49060bf087 /drivers/net/smc911x.c | |
| parent | 155cfb5ef18731a6d761edd2169699c67f0e1306 (diff) | |
| download | olio-uboot-2014.01-6af1d41a46691ca67a8e79af12f07a22aa71680f.tar.xz olio-uboot-2014.01-6af1d41a46691ca67a8e79af12f07a22aa71680f.zip | |
smc911x MII made available
The driver already had the MII functions, but they have not been
registered using miiphy_register().
Signed-off-by: Helmut Raiger <helmut.raiger@hale.at>
Diffstat (limited to 'drivers/net/smc911x.c')
| -rw-r--r-- | drivers/net/smc911x.c | 36 | 
1 files changed, 30 insertions, 6 deletions
| diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c index aeafeba44..6cc236ce7 100644 --- a/drivers/net/smc911x.c +++ b/drivers/net/smc911x.c @@ -50,7 +50,7 @@ static void smc911x_handle_mac_address(struct eth_device *dev)  	printf(DRIVERNAME ": MAC %pM\n", m);  } -static int smc911x_miiphy_read(struct eth_device *dev, +static int smc911x_eth_phy_read(struct eth_device *dev,  				u8 phy, u8 reg, u16 *val)  {  	while (smc911x_get_mac_csr(dev, MII_ACC) & MII_ACC_MII_BUSY) @@ -67,7 +67,7 @@ static int smc911x_miiphy_read(struct eth_device *dev,  	return 0;  } -static int smc911x_miiphy_write(struct eth_device *dev, +static int smc911x_eth_phy_write(struct eth_device *dev,  				u8 phy, u8 reg, u16  val)  {  	while (smc911x_get_mac_csr(dev, MII_ACC) & MII_ACC_MII_BUSY) @@ -103,10 +103,10 @@ static void smc911x_phy_configure(struct eth_device *dev)  	smc911x_phy_reset(dev); -	smc911x_miiphy_write(dev, 1, MII_BMCR, BMCR_RESET); +	smc911x_eth_phy_write(dev, 1, MII_BMCR, BMCR_RESET);  	mdelay(1); -	smc911x_miiphy_write(dev, 1, MII_ADVERTISE, 0x01e1); -	smc911x_miiphy_write(dev, 1, MII_BMCR, BMCR_ANENABLE | +	smc911x_eth_phy_write(dev, 1, MII_ADVERTISE, 0x01e1); +	smc911x_eth_phy_write(dev, 1, MII_BMCR, BMCR_ANENABLE |  				BMCR_ANRESTART);  	timeout = 5000; @@ -115,7 +115,7 @@ static void smc911x_phy_configure(struct eth_device *dev)  		if ((timeout--) == 0)  			goto err_out; -		if (smc911x_miiphy_read(dev, 1, MII_BMSR, &status) != 0) +		if (smc911x_eth_phy_read(dev, 1, MII_BMSR, &status) != 0)  			goto err_out;  	} while (!(status & BMSR_LSTATUS)); @@ -235,6 +235,25 @@ static int smc911x_rx(struct eth_device *dev)  	return 0;  } +#if defined(CONFIG_MII) || defined(CONFIG_CMD_MII) +/* wrapper for smc911x_eth_phy_read */ +static int smc911x_miiphy_read(char *devname, u8 phy, u8 reg, u16 *val) +{ +	struct eth_device *dev = eth_get_dev_by_name(devname); +	if (dev) +		return smc911x_eth_phy_read(dev, phy, reg, val); +	return -1; +} +/* wrapper for smc911x_eth_phy_write */ +static int smc911x_miiphy_write(char *devname, u8 phy, u8 reg, u16 val) +{ +	struct eth_device *dev = eth_get_dev_by_name(devname); +	if (dev) +		return smc911x_eth_phy_write(dev, phy, reg, val); +	return -1; +} +#endif +  int smc911x_initialize(u8 dev_num, int base_addr)  {  	unsigned long addrl, addrh; @@ -273,5 +292,10 @@ int smc911x_initialize(u8 dev_num, int base_addr)  	sprintf(dev->name, "%s-%hu", DRIVERNAME, dev_num);  	eth_register(dev); + +#if defined(CONFIG_MII) || defined(CONFIG_CMD_MII) +	miiphy_register(dev->name, smc911x_miiphy_read, smc911x_miiphy_write); +#endif +  	return 1;  } |