/** * mdio45_nway_restart - restart auto-negotiation for this interface * @mdio: MDIO interface * * Returns 0 on success, negative on error. */ int mdio45_nway_restart(const struct mdio_if_info *mdio) { if (!(mdio->mmds & MDIO_DEVS_AN)) return -EOPNOTSUPP; mdio_set_flag(mdio, mdio->prtad, MDIO_MMD_AN, MDIO_CTRL1, MDIO_AN_CTRL1_RESTART, true); return 0; }
static int aq100x_autoneg_enable(struct cphy *phy) { int err; err = aq100x_power_down(phy, 0); if (!err) err = mdio_set_flag(&phy->mdio, phy->mdio.prtad, MDIO_MMD_AN, MDIO_CTRL1, BMCR_ANENABLE | BMCR_ANRESTART, 1); return err; }
static int aq100x_power_down(struct cphy *phy, int off) { return mdio_set_flag(&phy->mdio, phy->mdio.prtad, MDIO_MMD_PMAPMD, MDIO_CTRL1, MDIO_CTRL1_LPOWER, off); }
static int aq100x_set_loopback(struct cphy *phy, int mmd, int dir, int enable) { return mdio_set_flag(&phy->mdio, phy->mdio.prtad, MDIO_MMD_PMAPMD, MDIO_CTRL1, BMCR_LOOPBACK, enable); }