phy: Add an mdio_device structure
Not all devices attached to an MDIO bus are phys. So add an mdio_device structure to represent the generic parts of an mdio device, and place this structure into the phy_device. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
e7f4dc3536
commit
e5a03bfd87
@@ -220,9 +220,10 @@ static void rx_timestamp_work(struct work_struct *work);
|
||||
|
||||
#define BROADCAST_ADDR 31
|
||||
|
||||
static inline int broadcast_write(struct mii_bus *bus, u32 regnum, u16 val)
|
||||
static inline int broadcast_write(struct phy_device *phydev, u32 regnum,
|
||||
u16 val)
|
||||
{
|
||||
return mdiobus_write(bus, BROADCAST_ADDR, regnum, val);
|
||||
return mdiobus_write(phydev->mdio.bus, BROADCAST_ADDR, regnum, val);
|
||||
}
|
||||
|
||||
/* Caller must hold extreg_lock. */
|
||||
@@ -232,7 +233,7 @@ static int ext_read(struct phy_device *phydev, int page, u32 regnum)
|
||||
int val;
|
||||
|
||||
if (dp83640->clock->page != page) {
|
||||
broadcast_write(phydev->bus, PAGESEL, page);
|
||||
broadcast_write(phydev, PAGESEL, page);
|
||||
dp83640->clock->page = page;
|
||||
}
|
||||
val = phy_read(phydev, regnum);
|
||||
@@ -247,11 +248,11 @@ static void ext_write(int broadcast, struct phy_device *phydev,
|
||||
struct dp83640_private *dp83640 = phydev->priv;
|
||||
|
||||
if (dp83640->clock->page != page) {
|
||||
broadcast_write(phydev->bus, PAGESEL, page);
|
||||
broadcast_write(phydev, PAGESEL, page);
|
||||
dp83640->clock->page = page;
|
||||
}
|
||||
if (broadcast)
|
||||
broadcast_write(phydev->bus, regnum, val);
|
||||
broadcast_write(phydev, regnum, val);
|
||||
else
|
||||
phy_write(phydev, regnum, val);
|
||||
}
|
||||
@@ -1039,7 +1040,7 @@ static int choose_this_phy(struct dp83640_clock *clock,
|
||||
if (chosen_phy == -1 && !clock->chosen)
|
||||
return 1;
|
||||
|
||||
if (chosen_phy == phydev->addr)
|
||||
if (chosen_phy == phydev->mdio.addr)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
@@ -1103,10 +1104,10 @@ static int dp83640_probe(struct phy_device *phydev)
|
||||
struct dp83640_private *dp83640;
|
||||
int err = -ENOMEM, i;
|
||||
|
||||
if (phydev->addr == BROADCAST_ADDR)
|
||||
if (phydev->mdio.addr == BROADCAST_ADDR)
|
||||
return 0;
|
||||
|
||||
clock = dp83640_clock_get_bus(phydev->bus);
|
||||
clock = dp83640_clock_get_bus(phydev->mdio.bus);
|
||||
if (!clock)
|
||||
goto no_clock;
|
||||
|
||||
@@ -1132,7 +1133,8 @@ static int dp83640_probe(struct phy_device *phydev)
|
||||
|
||||
if (choose_this_phy(clock, phydev)) {
|
||||
clock->chosen = dp83640;
|
||||
clock->ptp_clock = ptp_clock_register(&clock->caps, &phydev->dev);
|
||||
clock->ptp_clock = ptp_clock_register(&clock->caps,
|
||||
&phydev->mdio.dev);
|
||||
if (IS_ERR(clock->ptp_clock)) {
|
||||
err = PTR_ERR(clock->ptp_clock);
|
||||
goto no_register;
|
||||
@@ -1158,7 +1160,7 @@ static void dp83640_remove(struct phy_device *phydev)
|
||||
struct list_head *this, *next;
|
||||
struct dp83640_private *tmp, *dp83640 = phydev->priv;
|
||||
|
||||
if (phydev->addr == BROADCAST_ADDR)
|
||||
if (phydev->mdio.addr == BROADCAST_ADDR)
|
||||
return;
|
||||
|
||||
enable_status_frames(phydev, false);
|
||||
|
Reference in New Issue
Block a user