Lines Matching refs:phydev

225 static int __set_phy_supported(struct phy_device *phydev, u32 max_speed)  in __set_phy_supported()  argument
227 return __set_linkmode_max_speed(max_speed, phydev->supported); in __set_phy_supported()
230 int phy_set_max_speed(struct phy_device *phydev, u32 max_speed) in phy_set_max_speed() argument
234 err = __set_phy_supported(phydev, max_speed); in phy_set_max_speed()
238 phy_advertise_supported(phydev); in phy_set_max_speed()
244 void of_set_phy_supported(struct phy_device *phydev) in of_set_phy_supported() argument
246 struct device_node *node = phydev->mdio.dev.of_node; in of_set_phy_supported()
256 __set_phy_supported(phydev, max_speed); in of_set_phy_supported()
259 void of_set_phy_eee_broken(struct phy_device *phydev) in of_set_phy_eee_broken() argument
261 struct device_node *node = phydev->mdio.dev.of_node; in of_set_phy_eee_broken()
283 phydev->eee_broken_modes = broken; in of_set_phy_eee_broken()
286 void phy_resolve_aneg_pause(struct phy_device *phydev) in phy_resolve_aneg_pause() argument
288 if (phydev->duplex == DUPLEX_FULL) { in phy_resolve_aneg_pause()
289 phydev->pause = linkmode_test_bit(ETHTOOL_LINK_MODE_Pause_BIT, in phy_resolve_aneg_pause()
290 phydev->lp_advertising); in phy_resolve_aneg_pause()
291 phydev->asym_pause = linkmode_test_bit( in phy_resolve_aneg_pause()
293 phydev->lp_advertising); in phy_resolve_aneg_pause()
306 void phy_resolve_aneg_linkmode(struct phy_device *phydev) in phy_resolve_aneg_linkmode() argument
311 linkmode_and(common, phydev->lp_advertising, phydev->advertising); in phy_resolve_aneg_linkmode()
315 phydev->speed = settings[i].speed; in phy_resolve_aneg_linkmode()
316 phydev->duplex = settings[i].duplex; in phy_resolve_aneg_linkmode()
320 phy_resolve_aneg_pause(phydev); in phy_resolve_aneg_linkmode()
324 static int phy_resolve_min_speed(struct phy_device *phydev, bool fdx_only) in phy_resolve_min_speed() argument
329 linkmode_and(common, phydev->lp_advertising, phydev->advertising); in phy_resolve_min_speed()
342 int phy_speed_down_core(struct phy_device *phydev) in phy_speed_down_core() argument
344 int min_common_speed = phy_resolve_min_speed(phydev, true); in phy_speed_down_core()
349 return __set_linkmode_max_speed(min_common_speed, phydev->advertising); in phy_speed_down_core()
375 int __phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum) in __phy_read_mmd() argument
382 if (phydev->drv->read_mmd) { in __phy_read_mmd()
383 val = phydev->drv->read_mmd(phydev, devad, regnum); in __phy_read_mmd()
384 } else if (phydev->is_c45) { in __phy_read_mmd()
387 val = __mdiobus_read(phydev->mdio.bus, phydev->mdio.addr, addr); in __phy_read_mmd()
389 struct mii_bus *bus = phydev->mdio.bus; in __phy_read_mmd()
390 int phy_addr = phydev->mdio.addr; in __phy_read_mmd()
410 int phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum) in phy_read_mmd() argument
414 mutex_lock(&phydev->mdio.bus->mdio_lock); in phy_read_mmd()
415 ret = __phy_read_mmd(phydev, devad, regnum); in phy_read_mmd()
416 mutex_unlock(&phydev->mdio.bus->mdio_lock); in phy_read_mmd()
432 int __phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val) in __phy_write_mmd() argument
439 if (phydev->drv->write_mmd) { in __phy_write_mmd()
440 ret = phydev->drv->write_mmd(phydev, devad, regnum, val); in __phy_write_mmd()
441 } else if (phydev->is_c45) { in __phy_write_mmd()
444 ret = __mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, in __phy_write_mmd()
447 struct mii_bus *bus = phydev->mdio.bus; in __phy_write_mmd()
448 int phy_addr = phydev->mdio.addr; in __phy_write_mmd()
471 int phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val) in phy_write_mmd() argument
475 mutex_lock(&phydev->mdio.bus->mdio_lock); in phy_write_mmd()
476 ret = __phy_write_mmd(phydev, devad, regnum, val); in phy_write_mmd()
477 mutex_unlock(&phydev->mdio.bus->mdio_lock); in phy_write_mmd()
495 int __phy_modify_changed(struct phy_device *phydev, u32 regnum, u16 mask, in __phy_modify_changed() argument
500 ret = __phy_read(phydev, regnum); in __phy_modify_changed()
508 ret = __phy_write(phydev, regnum, new); in __phy_modify_changed()
527 int phy_modify_changed(struct phy_device *phydev, u32 regnum, u16 mask, u16 set) in phy_modify_changed() argument
531 mutex_lock(&phydev->mdio.bus->mdio_lock); in phy_modify_changed()
532 ret = __phy_modify_changed(phydev, regnum, mask, set); in phy_modify_changed()
533 mutex_unlock(&phydev->mdio.bus->mdio_lock); in phy_modify_changed()
550 int __phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set) in __phy_modify() argument
554 ret = __phy_modify_changed(phydev, regnum, mask, set); in __phy_modify()
571 int phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set) in phy_modify() argument
575 mutex_lock(&phydev->mdio.bus->mdio_lock); in phy_modify()
576 ret = __phy_modify(phydev, regnum, mask, set); in phy_modify()
577 mutex_unlock(&phydev->mdio.bus->mdio_lock); in phy_modify()
596 int __phy_modify_mmd_changed(struct phy_device *phydev, int devad, u32 regnum, in __phy_modify_mmd_changed() argument
601 ret = __phy_read_mmd(phydev, devad, regnum); in __phy_modify_mmd_changed()
609 ret = __phy_write_mmd(phydev, devad, regnum, new); in __phy_modify_mmd_changed()
629 int phy_modify_mmd_changed(struct phy_device *phydev, int devad, u32 regnum, in phy_modify_mmd_changed() argument
634 mutex_lock(&phydev->mdio.bus->mdio_lock); in phy_modify_mmd_changed()
635 ret = __phy_modify_mmd_changed(phydev, devad, regnum, mask, set); in phy_modify_mmd_changed()
636 mutex_unlock(&phydev->mdio.bus->mdio_lock); in phy_modify_mmd_changed()
654 int __phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum, in __phy_modify_mmd() argument
659 ret = __phy_modify_mmd_changed(phydev, devad, regnum, mask, set); in __phy_modify_mmd()
677 int phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum, in phy_modify_mmd() argument
682 mutex_lock(&phydev->mdio.bus->mdio_lock); in phy_modify_mmd()
683 ret = __phy_modify_mmd(phydev, devad, regnum, mask, set); in phy_modify_mmd()
684 mutex_unlock(&phydev->mdio.bus->mdio_lock); in phy_modify_mmd()
690 static int __phy_read_page(struct phy_device *phydev) in __phy_read_page() argument
692 return phydev->drv->read_page(phydev); in __phy_read_page()
695 static int __phy_write_page(struct phy_device *phydev, int page) in __phy_write_page() argument
697 return phydev->drv->write_page(phydev, page); in __phy_write_page()
708 int phy_save_page(struct phy_device *phydev) in phy_save_page() argument
710 mutex_lock(&phydev->mdio.bus->mdio_lock); in phy_save_page()
711 return __phy_read_page(phydev); in phy_save_page()
726 int phy_select_page(struct phy_device *phydev, int page) in phy_select_page() argument
730 oldpage = ret = phy_save_page(phydev); in phy_select_page()
735 ret = __phy_write_page(phydev, page); in phy_select_page()
760 int phy_restore_page(struct phy_device *phydev, int oldpage, int ret) in phy_restore_page() argument
765 r = __phy_write_page(phydev, oldpage); in phy_restore_page()
777 mutex_unlock(&phydev->mdio.bus->mdio_lock); in phy_restore_page()
791 int phy_read_paged(struct phy_device *phydev, int page, u32 regnum) in phy_read_paged() argument
795 oldpage = phy_select_page(phydev, page); in phy_read_paged()
797 ret = __phy_read(phydev, regnum); in phy_read_paged()
799 return phy_restore_page(phydev, oldpage, ret); in phy_read_paged()
812 int phy_write_paged(struct phy_device *phydev, int page, u32 regnum, u16 val) in phy_write_paged() argument
816 oldpage = phy_select_page(phydev, page); in phy_write_paged()
818 ret = __phy_write(phydev, regnum, val); in phy_write_paged()
820 return phy_restore_page(phydev, oldpage, ret); in phy_write_paged()
834 int phy_modify_paged_changed(struct phy_device *phydev, int page, u32 regnum, in phy_modify_paged_changed() argument
839 oldpage = phy_select_page(phydev, page); in phy_modify_paged_changed()
841 ret = __phy_modify_changed(phydev, regnum, mask, set); in phy_modify_paged_changed()
843 return phy_restore_page(phydev, oldpage, ret); in phy_modify_paged_changed()
857 int phy_modify_paged(struct phy_device *phydev, int page, u32 regnum, in phy_modify_paged() argument
860 int ret = phy_modify_paged_changed(phydev, page, regnum, mask, set); in phy_modify_paged()