Lines Matching defs:phydev
122 static int dp83822_ack_interrupt(struct phy_device *phydev)
126 err = phy_read(phydev, MII_DP83822_MISR1);
130 err = phy_read(phydev, MII_DP83822_MISR2);
137 static int dp83822_set_wol(struct phy_device *phydev,
140 struct net_device *ndev = phydev->attached_dev;
153 phy_write_mmd(phydev, DP83822_DEVADDR, MII_DP83822_WOL_DA1,
155 phy_write_mmd(phydev, DP83822_DEVADDR, MII_DP83822_WOL_DA2,
157 phy_write_mmd(phydev, DP83822_DEVADDR, MII_DP83822_WOL_DA3,
160 value = phy_read_mmd(phydev, DP83822_DEVADDR,
168 phy_write_mmd(phydev, DP83822_DEVADDR,
171 phy_write_mmd(phydev, DP83822_DEVADDR,
174 phy_write_mmd(phydev, DP83822_DEVADDR,
183 phy_read(phydev, MII_DP83822_MISR2);
188 return phy_write_mmd(phydev, DP83822_DEVADDR,
191 return phy_clear_bits_mmd(phydev, DP83822_DEVADDR,
196 static void dp83822_get_wol(struct phy_device *phydev,
205 value = phy_read_mmd(phydev, DP83822_DEVADDR, MII_DP83822_WOL_CFG);
211 sopass_val = phy_read_mmd(phydev, DP83822_DEVADDR,
216 sopass_val = phy_read_mmd(phydev, DP83822_DEVADDR,
221 sopass_val = phy_read_mmd(phydev, DP83822_DEVADDR,
234 static int dp83822_config_intr(struct phy_device *phydev)
236 struct dp83822_private *dp83822 = phydev->priv;
241 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
242 misr_status = phy_read(phydev, MII_DP83822_MISR1);
257 err = phy_write(phydev, MII_DP83822_MISR1, misr_status);
261 misr_status = phy_read(phydev, MII_DP83822_MISR2);
276 err = phy_write(phydev, MII_DP83822_MISR2, misr_status);
280 physcr_status = phy_read(phydev, MII_DP83822_PHYSCR);
287 err = phy_write(phydev, MII_DP83822_MISR1, 0);
291 err = phy_write(phydev, MII_DP83822_MISR2, 0);
295 physcr_status = phy_read(phydev, MII_DP83822_PHYSCR);
302 return phy_write(phydev, MII_DP83822_PHYSCR, physcr_status);
305 static int dp8382x_disable_wol(struct phy_device *phydev)
307 return phy_clear_bits_mmd(phydev, DP83822_DEVADDR, MII_DP83822_WOL_CFG,
312 static int dp83822_read_status(struct phy_device *phydev)
314 struct dp83822_private *dp83822 = phydev->priv;
315 int status = phy_read(phydev, MII_DP83822_PHYSTS);
321 phydev->speed = SPEED_UNKNOWN;
322 phydev->duplex = DUPLEX_UNKNOWN;
324 ctrl2 = phy_read(phydev, MII_DP83822_CTRL_2);
329 ret = phy_write(phydev, MII_DP83822_CTRL_2,
337 ret = genphy_read_status(phydev);
345 phydev->duplex = DUPLEX_FULL;
347 phydev->duplex = DUPLEX_HALF;
350 phydev->speed = SPEED_10;
352 phydev->speed = SPEED_100;
357 static int dp83822_config_init(struct phy_device *phydev)
359 struct dp83822_private *dp83822 = phydev->priv;
360 struct device *dev = &phydev->mdio.dev;
367 if (phy_interface_is_rgmii(phydev)) {
368 rx_int_delay = phy_get_internal_delay(phydev, dev, NULL, 0,
376 tx_int_delay = phy_get_internal_delay(phydev, dev, NULL, 0,
384 err = phy_set_bits_mmd(phydev, DP83822_DEVADDR,
392 err = phy_modify(phydev, MII_DP83822_CTRL_2,
398 linkmode_and(phydev->advertising, phydev->advertising,
399 phydev->supported);
402 phydev->supported);
404 phydev->advertising);
406 phydev->supported);
408 phydev->supported);
410 phydev->advertising);
412 phydev->advertising);
415 bmcr = phy_read(phydev, MII_BMCR);
420 err = phy_modify(phydev, MII_BMCR, BMCR_ANENABLE, 0);
424 phydev->autoneg = AUTONEG_DISABLE;
426 phydev->supported);
428 phydev->advertising);
431 err = phy_modify_changed(phydev, MII_ADVERTISE,
439 err = phy_set_bits_mmd(phydev, DP83822_DEVADDR,
446 return dp8382x_disable_wol(phydev);
449 static int dp8382x_config_init(struct phy_device *phydev)
451 return dp8382x_disable_wol(phydev);
454 static int dp83822_phy_reset(struct phy_device *phydev)
458 err = phy_write(phydev, MII_DP83822_RESET_CTRL, DP83822_SW_RESET);
462 return phydev->drv->config_init(phydev);
466 static int dp83822_of_init(struct phy_device *phydev)
468 struct dp83822_private *dp83822 = phydev->priv;
469 struct device *dev = &phydev->mdio.dev;
485 static int dp83822_of_init(struct phy_device *phydev)
491 static int dp83822_read_straps(struct phy_device *phydev)
493 struct dp83822_private *dp83822 = phydev->priv;
497 val = phy_read_mmd(phydev, DP83822_DEVADDR, MII_DP83822_SOR1);
516 static int dp83822_probe(struct phy_device *phydev)
521 dp83822 = devm_kzalloc(&phydev->mdio.dev, sizeof(*dp83822),
526 phydev->priv = dp83822;
528 ret = dp83822_read_straps(phydev);
532 dp83822_of_init(phydev);
535 phydev->port = PORT_FIBRE;
540 static int dp83822_suspend(struct phy_device *phydev)
544 value = phy_read_mmd(phydev, DP83822_DEVADDR, MII_DP83822_WOL_CFG);
547 genphy_suspend(phydev);
552 static int dp83822_resume(struct phy_device *phydev)
556 genphy_resume(phydev);
558 value = phy_read_mmd(phydev, DP83822_DEVADDR, MII_DP83822_WOL_CFG);
560 phy_write_mmd(phydev, DP83822_DEVADDR, MII_DP83822_WOL_CFG, value |