diff options
author | Gabor Juhos <juhosg@openwrt.org> | 2012-03-07 16:32:30 +0000 |
---|---|---|
committer | Gabor Juhos <juhosg@openwrt.org> | 2012-03-07 16:32:30 +0000 |
commit | 711213010514647ce1652ac40aff849f8c4a2593 (patch) | |
tree | bb215b521de70d9c3cb03dc9325764cf878dd6bc /target | |
parent | a31e0902557fb2052a47d7f9968c43e0e99da235 (diff) | |
download | upstream-711213010514647ce1652ac40aff849f8c4a2593.tar.gz upstream-711213010514647ce1652ac40aff849f8c4a2593.tar.bz2 upstream-711213010514647ce1652ac40aff849f8c4a2593.zip |
generic: ar8216: use bus->mdio_lock directly in ar8216_mii_{read,write}
SVN-Revision: 30837
Diffstat (limited to 'target')
-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 12cba977ea..fe329d8f1d 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 |