Lines Matching full:phydev
122 static int dp83822_ack_interrupt(struct phy_device *phydev) in dp83822_ack_interrupt() argument
126 err = phy_read(phydev, MII_DP83822_MISR1); in dp83822_ack_interrupt()
130 err = phy_read(phydev, MII_DP83822_MISR2); in dp83822_ack_interrupt()
137 static int dp83822_set_wol(struct phy_device *phydev, in dp83822_set_wol() argument
140 struct net_device *ndev = phydev->attached_dev; in dp83822_set_wol()
153 phy_write_mmd(phydev, DP83822_DEVADDR, MII_DP83822_WOL_DA1, in dp83822_set_wol()
155 phy_write_mmd(phydev, DP83822_DEVADDR, MII_DP83822_WOL_DA2, in dp83822_set_wol()
157 phy_write_mmd(phydev, DP83822_DEVADDR, MII_DP83822_WOL_DA3, in dp83822_set_wol()
160 value = phy_read_mmd(phydev, DP83822_DEVADDR, in dp83822_set_wol()
168 phy_write_mmd(phydev, DP83822_DEVADDR, in dp83822_set_wol()
171 phy_write_mmd(phydev, DP83822_DEVADDR, in dp83822_set_wol()
174 phy_write_mmd(phydev, DP83822_DEVADDR, in dp83822_set_wol()
183 phy_read(phydev, MII_DP83822_MISR2); in dp83822_set_wol()
188 return phy_write_mmd(phydev, DP83822_DEVADDR, in dp83822_set_wol()
191 return phy_clear_bits_mmd(phydev, DP83822_DEVADDR, in dp83822_set_wol()
196 static void dp83822_get_wol(struct phy_device *phydev, in dp83822_get_wol() argument
205 value = phy_read_mmd(phydev, DP83822_DEVADDR, MII_DP83822_WOL_CFG); in dp83822_get_wol()
211 sopass_val = phy_read_mmd(phydev, DP83822_DEVADDR, in dp83822_get_wol()
216 sopass_val = phy_read_mmd(phydev, DP83822_DEVADDR, in dp83822_get_wol()
221 sopass_val = phy_read_mmd(phydev, DP83822_DEVADDR, in dp83822_get_wol()
234 static int dp83822_config_intr(struct phy_device *phydev) in dp83822_config_intr() argument
236 struct dp83822_private *dp83822 = phydev->priv; in dp83822_config_intr()
241 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) { in dp83822_config_intr()
242 misr_status = phy_read(phydev, MII_DP83822_MISR1); in dp83822_config_intr()
258 err = phy_write(phydev, MII_DP83822_MISR1, misr_status); in dp83822_config_intr()
262 misr_status = phy_read(phydev, MII_DP83822_MISR2); in dp83822_config_intr()
277 err = phy_write(phydev, MII_DP83822_MISR2, misr_status); in dp83822_config_intr()
281 physcr_status = phy_read(phydev, MII_DP83822_PHYSCR); in dp83822_config_intr()
288 err = phy_write(phydev, MII_DP83822_MISR1, 0); in dp83822_config_intr()
292 err = phy_write(phydev, MII_DP83822_MISR1, 0); in dp83822_config_intr()
296 physcr_status = phy_read(phydev, MII_DP83822_PHYSCR); in dp83822_config_intr()
303 return phy_write(phydev, MII_DP83822_PHYSCR, physcr_status); in dp83822_config_intr()
306 static int dp8382x_disable_wol(struct phy_device *phydev) in dp8382x_disable_wol() argument
308 return phy_clear_bits_mmd(phydev, DP83822_DEVADDR, MII_DP83822_WOL_CFG, in dp8382x_disable_wol()
313 static int dp83822_read_status(struct phy_device *phydev) in dp83822_read_status() argument
315 struct dp83822_private *dp83822 = phydev->priv; in dp83822_read_status()
316 int status = phy_read(phydev, MII_DP83822_PHYSTS); in dp83822_read_status()
322 phydev->speed = SPEED_UNKNOWN; in dp83822_read_status()
323 phydev->duplex = DUPLEX_UNKNOWN; in dp83822_read_status()
325 ctrl2 = phy_read(phydev, MII_DP83822_CTRL_2); in dp83822_read_status()
330 ret = phy_write(phydev, MII_DP83822_CTRL_2, in dp83822_read_status()
338 ret = genphy_read_status(phydev); in dp83822_read_status()
346 phydev->duplex = DUPLEX_FULL; in dp83822_read_status()
348 phydev->duplex = DUPLEX_HALF; in dp83822_read_status()
351 phydev->speed = SPEED_10; in dp83822_read_status()
353 phydev->speed = SPEED_100; in dp83822_read_status()
358 static int dp83822_config_init(struct phy_device *phydev) in dp83822_config_init() argument
360 struct dp83822_private *dp83822 = phydev->priv; in dp83822_config_init()
361 struct device *dev = &phydev->mdio.dev; in dp83822_config_init()
368 if (phy_interface_is_rgmii(phydev)) { in dp83822_config_init()
369 rx_int_delay = phy_get_internal_delay(phydev, dev, NULL, 0, in dp83822_config_init()
377 tx_int_delay = phy_get_internal_delay(phydev, dev, NULL, 0, in dp83822_config_init()
385 err = phy_set_bits_mmd(phydev, DP83822_DEVADDR, in dp83822_config_init()
393 err = phy_modify(phydev, MII_DP83822_CTRL_2, in dp83822_config_init()
399 linkmode_and(phydev->advertising, phydev->advertising, in dp83822_config_init()
400 phydev->supported); in dp83822_config_init()
403 phydev->supported); in dp83822_config_init()
405 phydev->advertising); in dp83822_config_init()
407 phydev->supported); in dp83822_config_init()
409 phydev->supported); in dp83822_config_init()
411 phydev->advertising); in dp83822_config_init()
413 phydev->advertising); in dp83822_config_init()
416 bmcr = phy_read(phydev, MII_BMCR); in dp83822_config_init()
421 err = phy_modify(phydev, MII_BMCR, BMCR_ANENABLE, 0); in dp83822_config_init()
425 phydev->autoneg = AUTONEG_DISABLE; in dp83822_config_init()
427 phydev->supported); in dp83822_config_init()
429 phydev->advertising); in dp83822_config_init()
432 err = phy_modify_changed(phydev, MII_ADVERTISE, in dp83822_config_init()
440 err = phy_set_bits_mmd(phydev, DP83822_DEVADDR, in dp83822_config_init()
447 return dp8382x_disable_wol(phydev); in dp83822_config_init()
450 static int dp8382x_config_init(struct phy_device *phydev) in dp8382x_config_init() argument
452 return dp8382x_disable_wol(phydev); in dp8382x_config_init()
455 static int dp83822_phy_reset(struct phy_device *phydev) in dp83822_phy_reset() argument
459 err = phy_write(phydev, MII_DP83822_RESET_CTRL, DP83822_SW_RESET); in dp83822_phy_reset()
463 return phydev->drv->config_init(phydev); in dp83822_phy_reset()
467 static int dp83822_of_init(struct phy_device *phydev) in dp83822_of_init() argument
469 struct dp83822_private *dp83822 = phydev->priv; in dp83822_of_init()
470 struct device *dev = &phydev->mdio.dev; in dp83822_of_init()
486 static int dp83822_of_init(struct phy_device *phydev) in dp83822_of_init() argument
492 static int dp83822_read_straps(struct phy_device *phydev) in dp83822_read_straps() argument
494 struct dp83822_private *dp83822 = phydev->priv; in dp83822_read_straps()
498 val = phy_read_mmd(phydev, DP83822_DEVADDR, MII_DP83822_SOR1); in dp83822_read_straps()
517 static int dp83822_probe(struct phy_device *phydev) in dp83822_probe() argument
522 dp83822 = devm_kzalloc(&phydev->mdio.dev, sizeof(*dp83822), in dp83822_probe()
527 phydev->priv = dp83822; in dp83822_probe()
529 ret = dp83822_read_straps(phydev); in dp83822_probe()
533 dp83822_of_init(phydev); in dp83822_probe()
536 phydev->port = PORT_FIBRE; in dp83822_probe()
541 static int dp83822_suspend(struct phy_device *phydev) in dp83822_suspend() argument
545 value = phy_read_mmd(phydev, DP83822_DEVADDR, MII_DP83822_WOL_CFG); in dp83822_suspend()
548 genphy_suspend(phydev); in dp83822_suspend()
553 static int dp83822_resume(struct phy_device *phydev) in dp83822_resume() argument
557 genphy_resume(phydev); in dp83822_resume()
559 value = phy_read_mmd(phydev, DP83822_DEVADDR, MII_DP83822_WOL_CFG); in dp83822_resume()
561 phy_write_mmd(phydev, DP83822_DEVADDR, MII_DP83822_WOL_CFG, value | in dp83822_resume()