* phy_aneg_done - return auto-negotiation status
  * @phydev: target phy_device struct
  *
- * Description: Reads the status register and returns 0 either if
- *   auto-negotiation is incomplete, or if there was an error.
- *   Returns BMSR_ANEGCOMPLETE if auto-negotiation is done.
+ * Description: Return the auto-negotiation status from this @phydev
+ * Returns > 0 on success or < 0 on error. 0 means that auto-negotiation
+ * is still pending.
  */
 static inline int phy_aneg_done(struct phy_device *phydev)
 {
+       if (phydev->drv->aneg_done)
+               return phydev->drv->aneg_done(phydev);
+
        return genphy_aneg_done(phydev);
 }
 
 
        .config_init    = genphy_config_init,
        .features       = 0,
        .config_aneg    = genphy_config_aneg,
+       .aneg_done      = genphy_aneg_done,
        .read_status    = genphy_read_status,
        .suspend        = genphy_suspend,
        .resume         = genphy_resume,
 
         */
        int (*config_aneg)(struct phy_device *phydev);
 
+       /* Determines the auto negotiation result */
+       int (*aneg_done)(struct phy_device *phydev);
+
        /* Determines the negotiated speed and duplex */
        int (*read_status)(struct phy_device *phydev);