generic: ar8216: use bus->mdio_lock directly in ar8216_mii_{read,write}
authorGabor Juhos <juhosg@openwrt.org>
Wed, 7 Mar 2012 16:32:30 +0000 (16:32 +0000)
committerGabor Juhos <juhosg@openwrt.org>
Wed, 7 Mar 2012 16:32:30 +0000 (16:32 +0000)
SVN-Revision: 30837

target/linux/generic/files/drivers/net/phy/ar8216.c

index 12cba977eac8de7880c23fc13487c005acef29b0..fe329d8f1de13114063dd6ec87a09323092da180 100644 (file)
@@ -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