diff options
| author | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2012-03-07 16:32:30 +0000 | 
|---|---|---|
| committer | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2012-03-07 16:32:30 +0000 | 
| commit | 044f0f9c5a1b53dcb4189886ab4ad2992c1be39e (patch) | |
| tree | b6b401594b07428a6d5674d14cbd800c93850234 /target/linux/generic/files/drivers/net/phy | |
| parent | 6ac61155e0e9c7bad82f4bee9fcdbe9c72e20982 (diff) | |
generic: ar8216: use bus->mdio_lock directly in ar8216_mii_{read,write}
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@30837 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/generic/files/drivers/net/phy')
| -rw-r--r-- | target/linux/generic/files/drivers/net/phy/ar8216.c | 27 | 
1 files changed, 19 insertions, 8 deletions
| diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c b/target/linux/generic/files/drivers/net/phy/ar8216.c index 12cba977e..fe329d8f1 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8216.c +++ b/target/linux/generic/files/drivers/net/phy/ar8216.c @@ -77,14 +77,20 @@ static u32  ar8216_mii_read(struct ar8216_priv *priv, int reg)  {  	struct phy_device *phy = priv->phy; +	struct mii_bus *bus = phy->bus;  	u16 r1, r2, page;  	u16 lo, hi;  	split_addr((u32) reg, &r1, &r2, &page); -	mdiobus_write(phy->bus, 0x18, 0, page); + +	mutex_lock(&bus->mdio_lock); + +	bus->write(bus, 0x18, 0, page);  	msleep(1); /* wait for the page switch to propagate */ -	lo = mdiobus_read(phy->bus, 0x10 | r2, r1); -	hi = mdiobus_read(phy->bus, 0x10 | r2, r1 + 1); +	lo = bus->read(bus, 0x10 | r2, r1); +	hi = bus->read(bus, 0x10 | r2, r1 + 1); + +	mutex_unlock(&bus->mdio_lock);  	return (hi << 16) | lo;  } @@ -93,17 +99,22 @@ static void  ar8216_mii_write(struct ar8216_priv *priv, int reg, u32 val)  {  	struct phy_device *phy = priv->phy; +	struct mii_bus *bus = phy->bus;  	u16 r1, r2, r3;  	u16 lo, hi;  	split_addr((u32) reg, &r1, &r2, &r3); -	mdiobus_write(phy->bus, 0x18, 0, r3); -	msleep(1); /* wait for the page switch to propagate */ -  	lo = val & 0xffff;  	hi = (u16) (val >> 16); -	mdiobus_write(phy->bus, 0x10 | r2, r1 + 1, hi); -	mdiobus_write(phy->bus, 0x10 | r2, r1, lo); + +	mutex_lock(&bus->mdio_lock); + +	bus->write(bus, 0x18, 0, r3); +	msleep(1); /* wait for the page switch to propagate */ +	bus->write(bus, 0x10 | r2, r1 + 1, hi); +	bus->write(bus, 0x10 | r2, r1, lo); + +	mutex_unlock(&bus->mdio_lock);  }  static u32 | 
