Lines Matching defs:phydev

59 static int smsc_phy_ack_interrupt(struct phy_device *phydev)
61 int rc = phy_read(phydev, MII_LAN83C185_ISF);
66 int smsc_phy_config_intr(struct phy_device *phydev)
70 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
71 rc = smsc_phy_ack_interrupt(phydev);
75 rc = phy_write(phydev, MII_LAN83C185_IM,
78 rc = phy_write(phydev, MII_LAN83C185_IM, 0);
82 rc = smsc_phy_ack_interrupt(phydev);
89 static int smsc_phy_config_edpd(struct phy_device *phydev)
91 struct smsc_phy_priv *priv = phydev->priv;
94 return phy_set_bits(phydev, MII_LAN83C185_CTRL_STATUS,
97 return phy_clear_bits(phydev, MII_LAN83C185_CTRL_STATUS,
101 irqreturn_t smsc_phy_handle_interrupt(struct phy_device *phydev)
105 irq_status = phy_read(phydev, MII_LAN83C185_ISF);
108 phy_error(phydev);
116 phy_trigger_machine(phydev);
122 int smsc_phy_config_init(struct phy_device *phydev)
124 struct smsc_phy_priv *priv = phydev->priv;
130 if (!priv->edpd_mode_set_by_user && phydev->irq != PHY_POLL)
133 return smsc_phy_config_edpd(phydev);
137 static int smsc_phy_reset(struct phy_device *phydev)
139 int rc = phy_read(phydev, MII_LAN83C185_SPECIAL_MODES);
149 phy_write(phydev, MII_LAN83C185_SPECIAL_MODES, rc);
153 return genphy_soft_reset(phydev);
156 static int lan87xx_config_aneg(struct phy_device *phydev)
161 switch (phydev->mdix_ctrl) {
173 return genphy_config_aneg(phydev);
176 rc = phy_read(phydev, SPECIAL_CTRL_STS);
184 phy_write(phydev, SPECIAL_CTRL_STS, rc);
186 phydev->mdix = phydev->mdix_ctrl;
187 return genphy_config_aneg(phydev);
190 static int lan95xx_config_aneg_ext(struct phy_device *phydev)
192 if (phydev->phy_id == 0x0007c0f0) { /* LAN9500A or LAN9505A */
194 int rc = phy_set_bits(phydev, PHY_EDPD_CONFIG,
201 return lan87xx_config_aneg(phydev);
215 int lan87xx_read_status(struct phy_device *phydev)
217 struct smsc_phy_priv *priv = phydev->priv;
220 err = genphy_read_status(phydev);
224 if (!phydev->link && priv && priv->edpd_enable &&
230 rc = phy_read(phydev, MII_LAN83C185_CTRL_STATUS);
234 rc = phy_write(phydev, MII_LAN83C185_CTRL_STATUS,
244 10000, max_wait, true, phydev,
250 rc = phy_read(phydev, MII_LAN83C185_CTRL_STATUS);
254 rc = phy_write(phydev, MII_LAN83C185_CTRL_STATUS,
264 static int lan874x_phy_config_init(struct phy_device *phydev)
280 rc = phy_write_mmd(phydev, MDIO_MMD_PCS, MII_LAN874X_PHY_MMD_WOL_WUCSR,
286 rc = phy_write_mmd(phydev, MDIO_MMD_PCS, MII_LAN874X_PHY_MMD_MCFGR,
291 return smsc_phy_config_init(phydev);
294 static void lan874x_get_wol(struct phy_device *phydev,
297 struct smsc_phy_priv *priv = phydev->priv;
304 rc = phy_read_mmd(phydev, MDIO_MMD_PCS, MII_LAN874X_PHY_MMD_WOL_WUCSR);
367 static int lan874x_set_wol_pattern(struct phy_device *phydev, u16 val,
376 rc = phy_write_mmd(phydev, MDIO_MMD_PCS,
382 rc = phy_write_mmd(phydev, MDIO_MMD_PCS,
390 rc = phy_write_mmd(phydev, MDIO_MMD_PCS, reg, *mask);
400 phy_write_mmd(phydev, MDIO_MMD_PCS, reg, 0);
406 static int lan874x_set_wol(struct phy_device *phydev,
409 struct net_device *ndev = phydev->attached_dev;
410 struct smsc_phy_priv *priv = phydev->priv;
419 phydev_info(phydev,
424 rc = phy_read_mmd(phydev, MDIO_MMD_PCS, MII_LAN874X_PHY_MMD_WOL_WUCSR);
458 phydev_dbg(phydev, "pattern not valid at %d\n", rc);
464 rc = lan874x_set_wol_pattern(phydev, val, data, datalen, mask,
474 rc = lan874x_set_wol_pattern(phydev, val, data, 0, NULL, 0);
486 rc = phy_write_mmd(phydev, MDIO_MMD_PCS, reg,
493 rc = phy_write_mmd(phydev, MDIO_MMD_PCS, MII_LAN874X_PHY_MMD_WOL_WUCSR,
501 static int smsc_get_sset_count(struct phy_device *phydev)
506 static void smsc_get_strings(struct phy_device *phydev, u8 *data)
514 static u64 smsc_get_stat(struct phy_device *phydev, int i)
520 val = phy_read(phydev, stat.reg);
529 static void smsc_get_stats(struct phy_device *phydev,
535 data[i] = smsc_get_stat(phydev, i);
538 static int smsc_phy_get_edpd(struct phy_device *phydev, u16 *edpd)
540 struct smsc_phy_priv *priv = phydev->priv;
555 static int smsc_phy_set_edpd(struct phy_device *phydev, u16 edpd)
557 struct smsc_phy_priv *priv = phydev->priv;
574 if (phydev->irq != PHY_POLL)
584 return smsc_phy_config_edpd(phydev);
587 int smsc_phy_get_tunable(struct phy_device *phydev,
592 return smsc_phy_get_edpd(phydev, data);
599 int smsc_phy_set_tunable(struct phy_device *phydev,
604 return smsc_phy_set_edpd(phydev, *(u16 *)data);
611 int smsc_phy_probe(struct phy_device *phydev)
613 struct device *dev = &phydev->mdio.dev;
627 phydev->priv = priv;