Lines Matching refs:phydev
200 void phy_device_free(struct phy_device *phydev) in phy_device_free() argument
202 put_device(&phydev->mdio.dev); in phy_device_free()
208 struct phy_device *phydev; in phy_mdio_device_free() local
210 phydev = container_of(mdiodev, struct phy_device, mdio); in phy_mdio_device_free()
211 phy_device_free(phydev); in phy_mdio_device_free()
221 struct phy_device *phydev; in phy_mdio_device_remove() local
223 phydev = container_of(mdiodev, struct phy_device, mdio); in phy_mdio_device_remove()
224 phy_device_remove(phydev); in phy_mdio_device_remove()
234 static bool mdio_bus_phy_may_suspend(struct phy_device *phydev) in mdio_bus_phy_may_suspend() argument
236 struct device_driver *drv = phydev->mdio.dev.driver; in mdio_bus_phy_may_suspend()
238 struct net_device *netdev = phydev->attached_dev; in mdio_bus_phy_may_suspend()
249 return !phydev->suspended; in mdio_bus_phy_may_suspend()
274 struct phy_device *phydev = to_phy_device(dev); in mdio_bus_phy_suspend() local
281 if (phydev->attached_dev && phydev->adjust_link) in mdio_bus_phy_suspend()
282 phy_stop_machine(phydev); in mdio_bus_phy_suspend()
284 if (!mdio_bus_phy_may_suspend(phydev)) in mdio_bus_phy_suspend()
287 return phy_suspend(phydev); in mdio_bus_phy_suspend()
292 struct phy_device *phydev = to_phy_device(dev); in mdio_bus_phy_resume() local
295 if (!mdio_bus_phy_may_suspend(phydev)) in mdio_bus_phy_resume()
298 ret = phy_resume(phydev); in mdio_bus_phy_resume()
303 if (phydev->attached_dev && phydev->adjust_link) in mdio_bus_phy_resume()
304 phy_start_machine(phydev); in mdio_bus_phy_resume()
311 struct phy_device *phydev = to_phy_device(dev); in mdio_bus_phy_restore() local
312 struct net_device *netdev = phydev->attached_dev; in mdio_bus_phy_restore()
318 ret = phy_init_hw(phydev); in mdio_bus_phy_restore()
322 if (phydev->attached_dev && phydev->adjust_link) in mdio_bus_phy_restore()
323 phy_start_machine(phydev); in mdio_bus_phy_restore()
440 static int phy_needs_fixup(struct phy_device *phydev, struct phy_fixup *fixup) in phy_needs_fixup() argument
442 if (strcmp(fixup->bus_id, phydev_name(phydev)) != 0) in phy_needs_fixup()
447 (phydev->phy_id & fixup->phy_uid_mask)) in phy_needs_fixup()
455 static int phy_scan_fixups(struct phy_device *phydev) in phy_scan_fixups() argument
461 if (phy_needs_fixup(phydev, fixup)) { in phy_scan_fixups()
462 int err = fixup->run(phydev); in phy_scan_fixups()
468 phydev->has_fixups = true; in phy_scan_fixups()
478 struct phy_device *phydev = to_phy_device(dev); in phy_bus_match() local
480 const int num_ids = ARRAY_SIZE(phydev->c45_ids.device_ids); in phy_bus_match()
487 return phydrv->match_phy_device(phydev); in phy_bus_match()
489 if (phydev->is_c45) { in phy_bus_match()
491 if (!(phydev->c45_ids.devices_in_package & (1 << i))) in phy_bus_match()
495 (phydev->c45_ids.device_ids[i] & in phy_bus_match()
502 (phydev->phy_id & phydrv->phy_id_mask); in phy_bus_match()
509 struct phy_device *phydev = to_phy_device(dev); in phy_id_show() local
511 return sprintf(buf, "0x%.8lx\n", (unsigned long)phydev->phy_id); in phy_id_show()
518 struct phy_device *phydev = to_phy_device(dev); in phy_interface_show() local
521 if (phy_is_internal(phydev)) in phy_interface_show()
524 mode = phy_modes(phydev->interface); in phy_interface_show()
534 struct phy_device *phydev = to_phy_device(dev); in phy_has_fixups_show() local
536 return sprintf(buf, "%d\n", phydev->has_fixups); in phy_has_fixups_show()
835 int phy_device_register(struct phy_device *phydev) in phy_device_register() argument
839 err = mdiobus_register_device(&phydev->mdio); in phy_device_register()
844 phy_device_reset(phydev, 0); in phy_device_register()
847 err = phy_scan_fixups(phydev); in phy_device_register()
849 phydev_err(phydev, "failed to initialize\n"); in phy_device_register()
853 err = device_add(&phydev->mdio.dev); in phy_device_register()
855 phydev_err(phydev, "failed to add\n"); in phy_device_register()
863 phy_device_reset(phydev, 1); in phy_device_register()
865 mdiobus_unregister_device(&phydev->mdio); in phy_device_register()
878 void phy_device_remove(struct phy_device *phydev) in phy_device_remove() argument
880 device_del(&phydev->mdio.dev); in phy_device_remove()
883 phy_device_reset(phydev, 1); in phy_device_remove()
885 mdiobus_unregister_device(&phydev->mdio); in phy_device_remove()
895 struct phy_device *phydev; in phy_find_first() local
899 phydev = mdiobus_get_phy(bus, addr); in phy_find_first()
900 if (phydev) in phy_find_first()
901 return phydev; in phy_find_first()
907 static void phy_link_change(struct phy_device *phydev, bool up, bool do_carrier) in phy_link_change() argument
909 struct net_device *netdev = phydev->attached_dev; in phy_link_change()
917 phydev->adjust_link(netdev); in phy_link_change()
932 static void phy_prepare_link(struct phy_device *phydev, in phy_prepare_link() argument
935 phydev->adjust_link = handler; in phy_prepare_link()
945 int phy_connect_direct(struct net_device *dev, struct phy_device *phydev, in phy_connect_direct() argument
954 rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface); in phy_connect_direct()
958 phy_prepare_link(phydev, handler); in phy_connect_direct()
959 if (phy_interrupt_is_valid(phydev)) in phy_connect_direct()
960 phy_request_interrupt(phydev); in phy_connect_direct()
985 struct phy_device *phydev; in phy_connect() local
997 phydev = to_phy_device(d); in phy_connect()
999 rc = phy_connect_direct(dev, phydev, handler, interface); in phy_connect()
1004 return phydev; in phy_connect()
1013 void phy_disconnect(struct phy_device *phydev) in phy_disconnect() argument
1015 if (phy_is_started(phydev)) in phy_disconnect()
1016 phy_stop(phydev); in phy_disconnect()
1018 if (phy_interrupt_is_valid(phydev)) in phy_disconnect()
1019 phy_free_interrupt(phydev); in phy_disconnect()
1021 phydev->adjust_link = NULL; in phy_disconnect()
1023 phy_detach(phydev); in phy_disconnect()
1045 static int phy_poll_reset(struct phy_device *phydev) in phy_poll_reset() argument
1053 ret = phy_read(phydev, MII_BMCR); in phy_poll_reset()
1067 int phy_init_hw(struct phy_device *phydev) in phy_init_hw() argument
1072 phy_device_reset(phydev, 0); in phy_init_hw()
1074 if (!phydev->drv) in phy_init_hw()
1077 if (phydev->drv->soft_reset) in phy_init_hw()
1078 ret = phydev->drv->soft_reset(phydev); in phy_init_hw()
1083 ret = phy_scan_fixups(phydev); in phy_init_hw()
1087 if (phydev->drv->config_init) in phy_init_hw()
1088 ret = phydev->drv->config_init(phydev); in phy_init_hw()
1094 void phy_attached_info(struct phy_device *phydev) in phy_attached_info() argument
1096 phy_attached_print(phydev, NULL); in phy_attached_info()
1101 void phy_attached_print(struct phy_device *phydev, const char *fmt, ...) in phy_attached_print() argument
1103 const char *drv_name = phydev->drv ? phydev->drv->name : "unbound"; in phy_attached_print()
1107 switch(phydev->irq) { in phy_attached_print()
1115 snprintf(irq_num, sizeof(irq_num), "%d", phydev->irq); in phy_attached_print()
1122 phydev_info(phydev, ATTACHED_FMT "\n", in phy_attached_print()
1123 drv_name, phydev_name(phydev), in phy_attached_print()
1128 phydev_info(phydev, ATTACHED_FMT, in phy_attached_print()
1129 drv_name, phydev_name(phydev), in phy_attached_print()
1139 static void phy_sysfs_create_links(struct phy_device *phydev) in phy_sysfs_create_links() argument
1141 struct net_device *dev = phydev->attached_dev; in phy_sysfs_create_links()
1147 err = sysfs_create_link(&phydev->mdio.dev.kobj, &dev->dev.kobj, in phy_sysfs_create_links()
1153 &phydev->mdio.dev.kobj, in phy_sysfs_create_links()
1157 kobject_name(&phydev->mdio.dev.kobj), in phy_sysfs_create_links()
1164 phydev->sysfs_links = true; in phy_sysfs_create_links()
1171 struct phy_device *phydev = to_phy_device(dev); in phy_standalone_show() local
1173 return sprintf(buf, "%d\n", !phydev->attached_dev); in phy_standalone_show()
1192 int phy_attach_direct(struct net_device *dev, struct phy_device *phydev, in phy_attach_direct() argument
1195 struct mii_bus *bus = phydev->mdio.bus; in phy_attach_direct()
1196 struct device *d = &phydev->mdio.dev; in phy_attach_direct()
1209 phydev_err(phydev, "failed to get the bus module\n"); in phy_attach_direct()
1219 if (phydev->is_c45) in phy_attach_direct()
1228 phydev_err(phydev, "failed to get the device driver module\n"); in phy_attach_direct()
1242 if (phydev->attached_dev) { in phy_attach_direct()
1248 phydev->phy_link_change = phy_link_change; in phy_attach_direct()
1250 phydev->attached_dev = dev; in phy_attach_direct()
1251 dev->phydev = phydev; in phy_attach_direct()
1262 phydev->sysfs_links = false; in phy_attach_direct()
1264 phy_sysfs_create_links(phydev); in phy_attach_direct()
1266 if (!phydev->attached_dev) { in phy_attach_direct()
1267 err = sysfs_create_file(&phydev->mdio.dev.kobj, in phy_attach_direct()
1270 phydev_err(phydev, "error creating 'phy_standalone' sysfs entry\n"); in phy_attach_direct()
1273 phydev->dev_flags = flags; in phy_attach_direct()
1275 phydev->interface = interface; in phy_attach_direct()
1277 phydev->state = PHY_READY; in phy_attach_direct()
1283 netif_carrier_off(phydev->attached_dev); in phy_attach_direct()
1289 err = phy_init_hw(phydev); in phy_attach_direct()
1293 phy_resume(phydev); in phy_attach_direct()
1294 phy_led_triggers_register(phydev); in phy_attach_direct()
1300 phy_detach(phydev); in phy_attach_direct()
1326 struct phy_device *phydev; in phy_attach() local
1341 phydev = to_phy_device(d); in phy_attach()
1343 rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface); in phy_attach()
1348 return phydev; in phy_attach()
1352 static bool phy_driver_is_genphy_kind(struct phy_device *phydev, in phy_driver_is_genphy_kind() argument
1355 struct device *d = &phydev->mdio.dev; in phy_driver_is_genphy_kind()
1358 if (!phydev->drv) in phy_driver_is_genphy_kind()
1368 bool phy_driver_is_genphy(struct phy_device *phydev) in phy_driver_is_genphy() argument
1370 return phy_driver_is_genphy_kind(phydev, in phy_driver_is_genphy()
1375 bool phy_driver_is_genphy_10g(struct phy_device *phydev) in phy_driver_is_genphy_10g() argument
1377 return phy_driver_is_genphy_kind(phydev, in phy_driver_is_genphy_10g()
1389 void phy_detach(struct phy_device *phydev) in phy_detach() argument
1391 struct net_device *dev = phydev->attached_dev; in phy_detach()
1395 if (phydev->sysfs_links) { in phy_detach()
1398 sysfs_remove_link(&phydev->mdio.dev.kobj, "attached_dev"); in phy_detach()
1401 if (!phydev->attached_dev) in phy_detach()
1402 sysfs_remove_file(&phydev->mdio.dev.kobj, in phy_detach()
1405 phy_suspend(phydev); in phy_detach()
1407 phydev->attached_dev->phydev = NULL; in phy_detach()
1408 phydev->attached_dev = NULL; in phy_detach()
1410 phydev->phylink = NULL; in phy_detach()
1412 phy_led_triggers_unregister(phydev); in phy_detach()
1414 module_put(phydev->mdio.dev.driver->owner); in phy_detach()
1421 if (phy_driver_is_genphy(phydev) || in phy_detach()
1422 phy_driver_is_genphy_10g(phydev)) in phy_detach()
1423 device_release_driver(&phydev->mdio.dev); in phy_detach()
1429 bus = phydev->mdio.bus; in phy_detach()
1431 put_device(&phydev->mdio.dev); in phy_detach()
1438 phy_device_reset(phydev, 1); in phy_detach()
1442 int phy_suspend(struct phy_device *phydev) in phy_suspend() argument
1444 struct phy_driver *phydrv = to_phy_driver(phydev->mdio.dev.driver); in phy_suspend()
1445 struct net_device *netdev = phydev->attached_dev; in phy_suspend()
1450 phy_ethtool_get_wol(phydev, &wol); in phy_suspend()
1454 if (phydev->drv && phydrv->suspend) in phy_suspend()
1455 ret = phydrv->suspend(phydev); in phy_suspend()
1460 phydev->suspended = true; in phy_suspend()
1466 int __phy_resume(struct phy_device *phydev) in __phy_resume() argument
1468 struct phy_driver *phydrv = to_phy_driver(phydev->mdio.dev.driver); in __phy_resume()
1471 WARN_ON(!mutex_is_locked(&phydev->lock)); in __phy_resume()
1473 if (phydev->drv && phydrv->resume) in __phy_resume()
1474 ret = phydrv->resume(phydev); in __phy_resume()
1479 phydev->suspended = false; in __phy_resume()
1485 int phy_resume(struct phy_device *phydev) in phy_resume() argument
1489 mutex_lock(&phydev->lock); in phy_resume()
1490 ret = __phy_resume(phydev); in phy_resume()
1491 mutex_unlock(&phydev->lock); in phy_resume()
1497 int phy_loopback(struct phy_device *phydev, bool enable) in phy_loopback() argument
1499 struct phy_driver *phydrv = to_phy_driver(phydev->mdio.dev.driver); in phy_loopback()
1502 mutex_lock(&phydev->lock); in phy_loopback()
1504 if (enable && phydev->loopback_enabled) { in phy_loopback()
1509 if (!enable && !phydev->loopback_enabled) { in phy_loopback()
1514 if (phydev->drv && phydrv->set_loopback) in phy_loopback()
1515 ret = phydrv->set_loopback(phydev, enable); in phy_loopback()
1522 phydev->loopback_enabled = enable; in phy_loopback()
1525 mutex_unlock(&phydev->lock); in phy_loopback()
1539 int phy_reset_after_clk_enable(struct phy_device *phydev) in phy_reset_after_clk_enable() argument
1541 if (!phydev || !phydev->drv) in phy_reset_after_clk_enable()
1544 if (phydev->drv->flags & PHY_RST_AFTER_CLK_EN) { in phy_reset_after_clk_enable()
1545 phy_device_reset(phydev, 1); in phy_reset_after_clk_enable()
1546 phy_device_reset(phydev, 0); in phy_reset_after_clk_enable()
1565 static int genphy_config_advert(struct phy_device *phydev) in genphy_config_advert() argument
1571 linkmode_and(phydev->advertising, phydev->advertising, in genphy_config_advert()
1572 phydev->supported); in genphy_config_advert()
1574 adv = linkmode_adv_to_mii_adv_t(phydev->advertising); in genphy_config_advert()
1577 err = phy_modify_changed(phydev, MII_ADVERTISE, in genphy_config_advert()
1586 bmsr = phy_read(phydev, MII_BMSR); in genphy_config_advert()
1597 adv = linkmode_adv_to_mii_ctrl1000_t(phydev->advertising); in genphy_config_advert()
1599 err = phy_modify_changed(phydev, MII_CTRL1000, in genphy_config_advert()
1618 int genphy_config_eee_advert(struct phy_device *phydev) in genphy_config_eee_advert() argument
1623 if (!phydev->eee_broken_modes) in genphy_config_eee_advert()
1626 err = phy_modify_mmd_changed(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV, in genphy_config_eee_advert()
1627 phydev->eee_broken_modes, 0); in genphy_config_eee_advert()
1641 int genphy_setup_forced(struct phy_device *phydev) in genphy_setup_forced() argument
1645 phydev->pause = 0; in genphy_setup_forced()
1646 phydev->asym_pause = 0; in genphy_setup_forced()
1648 if (SPEED_1000 == phydev->speed) in genphy_setup_forced()
1650 else if (SPEED_100 == phydev->speed) in genphy_setup_forced()
1653 if (DUPLEX_FULL == phydev->duplex) in genphy_setup_forced()
1656 return phy_modify(phydev, MII_BMCR, in genphy_setup_forced()
1665 int genphy_restart_aneg(struct phy_device *phydev) in genphy_restart_aneg() argument
1668 return phy_modify(phydev, MII_BMCR, BMCR_ISOLATE, in genphy_restart_aneg()
1682 int __genphy_config_aneg(struct phy_device *phydev, bool changed) in __genphy_config_aneg() argument
1686 if (genphy_config_eee_advert(phydev)) in __genphy_config_aneg()
1689 if (AUTONEG_ENABLE != phydev->autoneg) in __genphy_config_aneg()
1690 return genphy_setup_forced(phydev); in __genphy_config_aneg()
1692 err = genphy_config_advert(phydev); in __genphy_config_aneg()
1702 int ctl = phy_read(phydev, MII_BMCR); in __genphy_config_aneg()
1714 return changed ? genphy_restart_aneg(phydev) : 0; in __genphy_config_aneg()
1726 int genphy_aneg_done(struct phy_device *phydev) in genphy_aneg_done() argument
1728 int retval = phy_read(phydev, MII_BMSR); in genphy_aneg_done()
1742 int genphy_update_link(struct phy_device *phydev) in genphy_update_link() argument
1746 bmcr = phy_read(phydev, MII_BMCR); in genphy_update_link()
1760 if (!phy_polling_mode(phydev)) { in genphy_update_link()
1761 status = phy_read(phydev, MII_BMSR); in genphy_update_link()
1769 status = phy_read(phydev, MII_BMSR); in genphy_update_link()
1773 phydev->link = status & BMSR_LSTATUS ? 1 : 0; in genphy_update_link()
1774 phydev->autoneg_complete = status & BMSR_ANEGCOMPLETE ? 1 : 0; in genphy_update_link()
1779 if (phydev->autoneg == AUTONEG_ENABLE && !phydev->autoneg_complete) in genphy_update_link()
1780 phydev->link = 0; in genphy_update_link()
1786 int genphy_read_lpa(struct phy_device *phydev) in genphy_read_lpa() argument
1790 if (phydev->autoneg == AUTONEG_ENABLE) { in genphy_read_lpa()
1791 if (!phydev->autoneg_complete) { in genphy_read_lpa()
1792 mii_stat1000_mod_linkmode_lpa_t(phydev->lp_advertising, in genphy_read_lpa()
1794 mii_lpa_mod_linkmode_lpa_t(phydev->lp_advertising, 0); in genphy_read_lpa()
1798 if (phydev->is_gigabit_capable) { in genphy_read_lpa()
1799 lpagb = phy_read(phydev, MII_STAT1000); in genphy_read_lpa()
1804 int adv = phy_read(phydev, MII_CTRL1000); in genphy_read_lpa()
1810 phydev_err(phydev, "Master/Slave resolution failed, maybe conflicting manual settings?\n"); in genphy_read_lpa()
1812 phydev_err(phydev, "Master/Slave resolution failed\n"); in genphy_read_lpa()
1816 mii_stat1000_mod_linkmode_lpa_t(phydev->lp_advertising, in genphy_read_lpa()
1820 lpa = phy_read(phydev, MII_LPA); in genphy_read_lpa()
1824 mii_lpa_mod_linkmode_lpa_t(phydev->lp_advertising, lpa); in genphy_read_lpa()
1826 linkmode_zero(phydev->lp_advertising); in genphy_read_lpa()
1842 int genphy_read_status(struct phy_device *phydev) in genphy_read_status() argument
1844 int err, old_link = phydev->link; in genphy_read_status()
1847 err = genphy_update_link(phydev); in genphy_read_status()
1852 if (phydev->autoneg == AUTONEG_ENABLE && old_link && phydev->link) in genphy_read_status()
1855 phydev->speed = SPEED_UNKNOWN; in genphy_read_status()
1856 phydev->duplex = DUPLEX_UNKNOWN; in genphy_read_status()
1857 phydev->pause = 0; in genphy_read_status()
1858 phydev->asym_pause = 0; in genphy_read_status()
1860 err = genphy_read_lpa(phydev); in genphy_read_status()
1864 if (phydev->autoneg == AUTONEG_ENABLE && phydev->autoneg_complete) { in genphy_read_status()
1865 phy_resolve_aneg_linkmode(phydev); in genphy_read_status()
1866 } else if (phydev->autoneg == AUTONEG_DISABLE) { in genphy_read_status()
1867 int bmcr = phy_read(phydev, MII_BMCR); in genphy_read_status()
1873 phydev->duplex = DUPLEX_FULL; in genphy_read_status()
1875 phydev->duplex = DUPLEX_HALF; in genphy_read_status()
1878 phydev->speed = SPEED_1000; in genphy_read_status()
1880 phydev->speed = SPEED_100; in genphy_read_status()
1882 phydev->speed = SPEED_10; in genphy_read_status()
1898 int genphy_soft_reset(struct phy_device *phydev) in genphy_soft_reset() argument
1903 if (phydev->autoneg == AUTONEG_ENABLE) in genphy_soft_reset()
1906 ret = phy_modify(phydev, MII_BMCR, BMCR_ISOLATE, res); in genphy_soft_reset()
1910 ret = phy_poll_reset(phydev); in genphy_soft_reset()
1915 if (phydev->autoneg == AUTONEG_DISABLE) in genphy_soft_reset()
1916 ret = genphy_setup_forced(phydev); in genphy_soft_reset()
1931 int genphy_read_abilities(struct phy_device *phydev) in genphy_read_abilities() argument
1937 phydev->supported); in genphy_read_abilities()
1939 val = phy_read(phydev, MII_BMSR); in genphy_read_abilities()
1943 linkmode_mod_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, phydev->supported, in genphy_read_abilities()
1946 linkmode_mod_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, phydev->supported, in genphy_read_abilities()
1948 linkmode_mod_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT, phydev->supported, in genphy_read_abilities()
1950 linkmode_mod_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT, phydev->supported, in genphy_read_abilities()
1952 linkmode_mod_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT, phydev->supported, in genphy_read_abilities()
1956 val = phy_read(phydev, MII_ESTATUS); in genphy_read_abilities()
1961 phydev->supported, val & ESTATUS_1000_TFULL); in genphy_read_abilities()
1963 phydev->supported, val & ESTATUS_1000_THALF); in genphy_read_abilities()
1965 phydev->supported, val & ESTATUS_1000_XFULL); in genphy_read_abilities()
1989 int genphy_suspend(struct phy_device *phydev) in genphy_suspend() argument
1991 return phy_set_bits(phydev, MII_BMCR, BMCR_PDOWN); in genphy_suspend()
1995 int genphy_resume(struct phy_device *phydev) in genphy_resume() argument
1997 return phy_clear_bits(phydev, MII_BMCR, BMCR_PDOWN); in genphy_resume()
2001 int genphy_loopback(struct phy_device *phydev, bool enable) in genphy_loopback() argument
2003 return phy_modify(phydev, MII_BMCR, BMCR_LOOPBACK, in genphy_loopback()
2017 void phy_remove_link_mode(struct phy_device *phydev, u32 link_mode) in phy_remove_link_mode() argument
2019 linkmode_clear_bit(link_mode, phydev->supported); in phy_remove_link_mode()
2020 phy_advertise_supported(phydev); in phy_remove_link_mode()
2039 void phy_advertise_supported(struct phy_device *phydev) in phy_advertise_supported() argument
2043 linkmode_copy(new, phydev->supported); in phy_advertise_supported()
2044 phy_copy_pause_bits(new, phydev->advertising); in phy_advertise_supported()
2045 linkmode_copy(phydev->advertising, new); in phy_advertise_supported()
2056 void phy_support_sym_pause(struct phy_device *phydev) in phy_support_sym_pause() argument
2058 linkmode_clear_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, phydev->supported); in phy_support_sym_pause()
2059 phy_copy_pause_bits(phydev->advertising, phydev->supported); in phy_support_sym_pause()
2069 void phy_support_asym_pause(struct phy_device *phydev) in phy_support_asym_pause() argument
2071 phy_copy_pause_bits(phydev->advertising, phydev->supported); in phy_support_asym_pause()
2086 void phy_set_sym_pause(struct phy_device *phydev, bool rx, bool tx, in phy_set_sym_pause() argument
2089 linkmode_clear_bit(ETHTOOL_LINK_MODE_Pause_BIT, phydev->supported); in phy_set_sym_pause()
2093 phydev->supported); in phy_set_sym_pause()
2095 linkmode_copy(phydev->advertising, phydev->supported); in phy_set_sym_pause()
2110 void phy_set_asym_pause(struct phy_device *phydev, bool rx, bool tx) in phy_set_asym_pause() argument
2114 linkmode_copy(oldadv, phydev->advertising); in phy_set_asym_pause()
2117 phydev->advertising); in phy_set_asym_pause()
2119 phydev->advertising); in phy_set_asym_pause()
2123 phydev->advertising); in phy_set_asym_pause()
2125 phydev->advertising); in phy_set_asym_pause()
2130 phydev->advertising); in phy_set_asym_pause()
2132 if (!linkmode_equal(oldadv, phydev->advertising) && in phy_set_asym_pause()
2133 phydev->autoneg) in phy_set_asym_pause()
2134 phy_start_aneg(phydev); in phy_set_asym_pause()
2147 bool phy_validate_pause(struct phy_device *phydev, in phy_validate_pause() argument
2151 phydev->supported) && pp->rx_pause) in phy_validate_pause()
2155 phydev->supported) && in phy_validate_pause()
2178 struct phy_device *phydev = to_phy_device(dev); in phy_probe() local
2179 struct device_driver *drv = phydev->mdio.dev.driver; in phy_probe()
2183 phydev->drv = phydrv; in phy_probe()
2188 if (!phy_drv_supports_irq(phydrv) && phy_interrupt_is_valid(phydev)) in phy_probe()
2189 phydev->irq = PHY_POLL; in phy_probe()
2192 phydev->is_internal = true; in phy_probe()
2194 mutex_lock(&phydev->lock); in phy_probe()
2196 if (phydev->drv->probe) { in phy_probe()
2198 phy_device_reset(phydev, 0); in phy_probe()
2200 err = phydev->drv->probe(phydev); in phy_probe()
2203 phy_device_reset(phydev, 1); in phy_probe()
2213 linkmode_copy(phydev->supported, phydrv->features); in phy_probe()
2215 err = phydrv->get_features(phydev); in phy_probe()
2216 } else if (phydev->is_c45) { in phy_probe()
2217 err = genphy_c45_pma_read_abilities(phydev); in phy_probe()
2219 err = genphy_read_abilities(phydev); in phy_probe()
2226 phydev->supported)) in phy_probe()
2227 phydev->autoneg = 0; in phy_probe()
2230 phydev->supported)) in phy_probe()
2231 phydev->is_gigabit_capable = 1; in phy_probe()
2233 phydev->supported)) in phy_probe()
2234 phydev->is_gigabit_capable = 1; in phy_probe()
2236 of_set_phy_supported(phydev); in phy_probe()
2237 phy_advertise_supported(phydev); in phy_probe()
2242 of_set_phy_eee_broken(phydev); in phy_probe()
2255 if (!test_bit(ETHTOOL_LINK_MODE_Pause_BIT, phydev->supported) && in phy_probe()
2256 !test_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, phydev->supported)) { in phy_probe()
2258 phydev->supported); in phy_probe()
2260 phydev->supported); in phy_probe()
2264 phydev->state = PHY_READY; in phy_probe()
2267 mutex_unlock(&phydev->lock); in phy_probe()
2274 struct phy_device *phydev = to_phy_device(dev); in phy_remove() local
2276 cancel_delayed_work_sync(&phydev->state_queue); in phy_remove()
2278 mutex_lock(&phydev->lock); in phy_remove()
2279 phydev->state = PHY_DOWN; in phy_remove()
2280 mutex_unlock(&phydev->lock); in phy_remove()
2282 if (phydev->drv && phydev->drv->remove) { in phy_remove()
2283 phydev->drv->remove(phydev); in phy_remove()
2286 phy_device_reset(phydev, 1); in phy_remove()
2288 phydev->drv = NULL; in phy_remove()