generic: ar8216: use bus->mdio_lock directly in ar8216_mii_{read,write}

SVN-Revision: 30837
master
Gabor Juhos 13 years ago
parent a31e090255
commit 7112130105
  1. 27
      target/linux/generic/files/drivers/net/phy/ar8216.c

@ -77,14 +77,20 @@ static u32
ar8216_mii_read(struct ar8216_priv *priv, int reg) ar8216_mii_read(struct ar8216_priv *priv, int reg)
{ {
struct phy_device *phy = priv->phy; struct phy_device *phy = priv->phy;
struct mii_bus *bus = phy->bus;
u16 r1, r2, page; u16 r1, r2, page;
u16 lo, hi; u16 lo, hi;
split_addr((u32) reg, &r1, &r2, &page); 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 */ msleep(1); /* wait for the page switch to propagate */
lo = mdiobus_read(phy->bus, 0x10 | r2, r1); lo = bus->read(bus, 0x10 | r2, r1);
hi = mdiobus_read(phy->bus, 0x10 | r2, r1 + 1); hi = bus->read(bus, 0x10 | r2, r1 + 1);
mutex_unlock(&bus->mdio_lock);
return (hi << 16) | lo; return (hi << 16) | lo;
} }
@ -93,17 +99,22 @@ static void
ar8216_mii_write(struct ar8216_priv *priv, int reg, u32 val) ar8216_mii_write(struct ar8216_priv *priv, int reg, u32 val)
{ {
struct phy_device *phy = priv->phy; struct phy_device *phy = priv->phy;
struct mii_bus *bus = phy->bus;
u16 r1, r2, r3; u16 r1, r2, r3;
u16 lo, hi; u16 lo, hi;
split_addr((u32) reg, &r1, &r2, &r3); 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; lo = val & 0xffff;
hi = (u16) (val >> 16); 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 static u32

Loading…
Cancel
Save