diff options
Diffstat (limited to 'target/linux/generic/patches-2.6.37/601-phy-add-aneg-done-function.patch')
| -rw-r--r-- | target/linux/generic/patches-2.6.37/601-phy-add-aneg-done-function.patch | 45 | 
1 files changed, 45 insertions, 0 deletions
diff --git a/target/linux/generic/patches-2.6.37/601-phy-add-aneg-done-function.patch b/target/linux/generic/patches-2.6.37/601-phy-add-aneg-done-function.patch new file mode 100644 index 000000000..f37baad72 --- /dev/null +++ b/target/linux/generic/patches-2.6.37/601-phy-add-aneg-done-function.patch @@ -0,0 +1,45 @@ +--- a/include/linux/phy.h ++++ b/include/linux/phy.h +@@ -386,9 +386,18 @@ struct phy_driver { + 	 */ + 	int (*config_aneg)(struct phy_device *phydev); +  ++	/* Determine if autonegotiation is done */ ++	int (*aneg_done)(struct phy_device *phydev); ++ + 	/* Determines the negotiated speed and duplex */ + 	int (*read_status)(struct phy_device *phydev); +  ++	/*  ++	 * Update the value in phydev->link to reflect the  ++	 * current link value ++	 */ ++	int (*update_link)(struct phy_device *phydev); ++ + 	/* Clears any pending interrupts */ + 	int (*ack_interrupt)(struct phy_device *phydev); +  +--- a/drivers/net/phy/phy_device.c ++++ b/drivers/net/phy/phy_device.c +@@ -715,6 +715,9 @@ int genphy_update_link(struct phy_device + { + 	int status; +  ++	if (phydev->drv->update_link) ++		return phydev->drv->update_link(phydev); ++ + 	/* Do a fake read */ + 	status = phy_read(phydev, MII_BMSR); +  +--- a/drivers/net/phy/phy.c ++++ b/drivers/net/phy/phy.c +@@ -106,6 +106,9 @@ static inline int phy_aneg_done(struct p + { + 	int retval; +  ++	if (phydev->drv->aneg_done) ++		return phydev->drv->aneg_done(phydev); ++ + 	retval = phy_read(phydev, MII_BMSR); +  + 	return (retval < 0) ? retval : (retval & BMSR_ANEGCOMPLETE);  | 
