static int lan87xx_config_init(struct phy_device *phydev) { /* * Make sure the EDPWRDOWN bit is NOT set. Setting this bit on * LAN8710/LAN8720 PHY causes the PHY to misbehave, likely due * to a bug on the chip. * * When the system is powered on with the network cable being * disconnected all the way until after ifconfig ethX up is * issued for the LAN port with this PHY, connecting the cable * afterwards does not cause LINK change detection, while the * expected behavior is the Link UP being detected. */ int rc = phy_read(phydev, MII_LAN83C185_CTRL_STATUS); if (rc < 0) return rc; rc &= ~MII_LAN83C185_EDPWRDOWN; rc = phy_write(phydev, MII_LAN83C185_CTRL_STATUS, rc); if (rc < 0) return rc; return smsc_phy_ack_interrupt(phydev); }
static int smsc_phy_config_init(struct phy_device *phydev) { int rc = phy_read(phydev, MII_LAN83C185_CTRL_STATUS); if (rc < 0) return rc; rc = phy_write(phydev, MII_LAN83C185_CTRL_STATUS, rc | MII_LAN83C185_EDPWRDOWN); if (rc < 0) return rc; return smsc_phy_ack_interrupt (phydev); }
static int smsc_phy_config_init(struct phy_device *phydev) { int rc = phy_read(phydev, MII_LAN83C185_CTRL_STATUS); if (rc < 0) return rc; /* Enable energy detect mode for this SMSC Transceivers */ rc = phy_write(phydev, MII_LAN83C185_CTRL_STATUS, rc | MII_LAN83C185_EDPWRDOWN); if (rc < 0) return rc; return smsc_phy_ack_interrupt (phydev); }
static int smsc_phy_config_init(struct phy_device *phydev) { int rc = phy_read(phydev, MII_LAN83C185_SPECIAL_MODES); if (rc < 0) return rc; /* If the SMSC PHY is in power down mode, then set it * in all capable mode before using it. */ if ((rc & MII_LAN83C185_MODE_MASK) == MII_LAN83C185_MODE_POWERDOWN) { int timeout = 50000; /* set "all capable" mode and reset the phy */ rc |= MII_LAN83C185_MODE_ALL; phy_write(phydev, MII_LAN83C185_SPECIAL_MODES, rc); phy_write(phydev, MII_BMCR, BMCR_RESET); /* wait end of reset (max 500 ms) */ do { udelay(10); if (timeout-- == 0) return -1; rc = phy_read(phydev, MII_BMCR); } while (rc & BMCR_RESET); } rc = phy_read(phydev, MII_LAN83C185_CTRL_STATUS); if (rc < 0) return rc; /* Enable energy detect mode for this SMSC Transceivers */ rc = phy_write(phydev, MII_LAN83C185_CTRL_STATUS, rc | MII_LAN83C185_EDPWRDOWN); if (rc < 0) return rc; return smsc_phy_ack_interrupt (phydev); }
static int smsc_phy_config_init(struct phy_device *phydev) { int __maybe_unused len; struct device *dev __maybe_unused = &phydev->mdio.dev; struct device_node *of_node __maybe_unused = dev->of_node; int rc = phy_read(phydev, MII_LAN83C185_CTRL_STATUS); int enable_energy = 1; if (rc < 0) return rc; if (of_find_property(of_node, "smsc,disable-energy-detect", &len)) enable_energy = 0; if (enable_energy) { /* Enable energy detect mode for this SMSC Transceivers */ rc = phy_write(phydev, MII_LAN83C185_CTRL_STATUS, rc | MII_LAN83C185_EDPWRDOWN); if (rc < 0) return rc; } return smsc_phy_ack_interrupt(phydev); }
static int lan911x_config_init(struct phy_device *phydev) { return smsc_phy_ack_interrupt(phydev); }