Lines Matching full:phydev
45 void phy_device_free(struct phy_device *phydev) in phy_device_free() argument
47 put_device(&phydev->mdio.dev); in phy_device_free()
53 struct phy_device *phydev; in phy_mdio_device_free() local
55 phydev = container_of(mdiodev, struct phy_device, mdio); in phy_mdio_device_free()
56 phy_device_free(phydev); in phy_mdio_device_free()
66 struct phy_device *phydev; in phy_mdio_device_remove() local
68 phydev = container_of(mdiodev, struct phy_device, mdio); in phy_mdio_device_remove()
69 phy_device_remove(phydev); in phy_mdio_device_remove()
79 static bool mdio_bus_phy_may_suspend(struct phy_device *phydev) in mdio_bus_phy_may_suspend() argument
81 struct device_driver *drv = phydev->mdio.dev.driver; in mdio_bus_phy_may_suspend()
83 struct net_device *netdev = phydev->attached_dev; in mdio_bus_phy_may_suspend()
115 return !phydev->suspended; in mdio_bus_phy_may_suspend()
120 struct phy_device *phydev = to_phy_device(dev); in mdio_bus_phy_suspend() local
123 * control, possibly with the phydev->lock held. Upon resume, netdev in mdio_bus_phy_suspend()
127 if (phydev->attached_dev && phydev->adjust_link) in mdio_bus_phy_suspend()
128 phy_stop_machine(phydev); in mdio_bus_phy_suspend()
130 if (!mdio_bus_phy_may_suspend(phydev)) in mdio_bus_phy_suspend()
133 phydev->suspended_by_mdio_bus = 1; in mdio_bus_phy_suspend()
135 return phy_suspend(phydev); in mdio_bus_phy_suspend()
140 struct phy_device *phydev = to_phy_device(dev); in mdio_bus_phy_resume() local
143 if (!phydev->suspended_by_mdio_bus) in mdio_bus_phy_resume()
146 phydev->suspended_by_mdio_bus = 0; in mdio_bus_phy_resume()
148 ret = phy_resume(phydev); in mdio_bus_phy_resume()
153 if (phydev->attached_dev && phydev->adjust_link) in mdio_bus_phy_resume()
154 phy_start_machine(phydev); in mdio_bus_phy_resume()
161 struct phy_device *phydev = to_phy_device(dev); in mdio_bus_phy_restore() local
162 struct net_device *netdev = phydev->attached_dev; in mdio_bus_phy_restore()
168 ret = phy_init_hw(phydev); in mdio_bus_phy_restore()
172 if (phydev->attached_dev && phydev->adjust_link) in mdio_bus_phy_restore()
173 phy_start_machine(phydev); in mdio_bus_phy_restore()
196 * @bus_id: A string which matches phydev->mdio.dev.bus_id (or PHY_ANY_ID)
197 * @phy_uid: Used to match against phydev->phy_id (the UID of the PHY)
199 * @phy_uid_mask: Applied to phydev->phy_id and fixup->phy_uid before
287 /* Returns 1 if fixup matches phydev in bus_id and phy_uid.
290 static int phy_needs_fixup(struct phy_device *phydev, struct phy_fixup *fixup) in phy_needs_fixup() argument
292 if (strcmp(fixup->bus_id, phydev_name(phydev)) != 0) in phy_needs_fixup()
297 (phydev->phy_id & fixup->phy_uid_mask)) in phy_needs_fixup()
304 /* Runs any matching fixups for this phydev */
305 static int phy_scan_fixups(struct phy_device *phydev) in phy_scan_fixups() argument
311 if (phy_needs_fixup(phydev, fixup)) { in phy_scan_fixups()
312 int err = fixup->run(phydev); in phy_scan_fixups()
318 phydev->has_fixups = true; in phy_scan_fixups()
328 struct phy_device *phydev = to_phy_device(dev); in phy_bus_match() local
330 const int num_ids = ARRAY_SIZE(phydev->c45_ids.device_ids); in phy_bus_match()
337 return phydrv->match_phy_device(phydev); in phy_bus_match()
339 if (phydev->is_c45) { in phy_bus_match()
341 if (!(phydev->c45_ids.devices_in_package & (1 << i))) in phy_bus_match()
345 (phydev->c45_ids.device_ids[i] & in phy_bus_match()
352 (phydev->phy_id & phydrv->phy_id_mask); in phy_bus_match()
359 struct phy_device *phydev = to_phy_device(dev); in phy_id_show() local
361 return sprintf(buf, "0x%.8lx\n", (unsigned long)phydev->phy_id); in phy_id_show()
368 struct phy_device *phydev = to_phy_device(dev); in phy_interface_show() local
371 if (phy_is_internal(phydev)) in phy_interface_show()
374 mode = phy_modes(phydev->interface); in phy_interface_show()
384 struct phy_device *phydev = to_phy_device(dev); in phy_has_fixups_show() local
386 return sprintf(buf, "%d\n", phydev->has_fixups); in phy_has_fixups_show()
649 * @phydev: phy_device structure to be added to the MDIO bus
651 int phy_device_register(struct phy_device *phydev) in phy_device_register() argument
655 err = mdiobus_register_device(&phydev->mdio); in phy_device_register()
660 phy_device_reset(phydev, 0); in phy_device_register()
663 err = phy_scan_fixups(phydev); in phy_device_register()
665 pr_err("PHY %d failed to initialize\n", phydev->mdio.addr); in phy_device_register()
669 err = device_add(&phydev->mdio.dev); in phy_device_register()
671 pr_err("PHY %d failed to add\n", phydev->mdio.addr); in phy_device_register()
679 phy_device_reset(phydev, 1); in phy_device_register()
681 mdiobus_unregister_device(&phydev->mdio); in phy_device_register()
688 * @phydev: phy_device structure to remove
694 void phy_device_remove(struct phy_device *phydev) in phy_device_remove() argument
696 device_del(&phydev->mdio.dev); in phy_device_remove()
699 phy_device_reset(phydev, 1); in phy_device_remove()
701 mdiobus_unregister_device(&phydev->mdio); in phy_device_remove()
711 struct phy_device *phydev; in phy_find_first() local
715 phydev = mdiobus_get_phy(bus, addr); in phy_find_first()
716 if (phydev) in phy_find_first()
717 return phydev; in phy_find_first()
723 static void phy_link_change(struct phy_device *phydev, bool up, bool do_carrier) in phy_link_change() argument
725 struct net_device *netdev = phydev->attached_dev; in phy_link_change()
733 phydev->adjust_link(netdev); in phy_link_change()
738 * @phydev: target phy_device struct
748 static void phy_prepare_link(struct phy_device *phydev, in phy_prepare_link() argument
751 phydev->adjust_link = handler; in phy_prepare_link()
757 * @phydev: the pointer to the phy device
761 int phy_connect_direct(struct net_device *dev, struct phy_device *phydev, in phy_connect_direct() argument
770 rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface); in phy_connect_direct()
774 phy_prepare_link(phydev, handler); in phy_connect_direct()
775 phy_start_machine(phydev); in phy_connect_direct()
776 if (phydev->irq > 0) in phy_connect_direct()
777 phy_start_interrupts(phydev); in phy_connect_direct()
802 struct phy_device *phydev; in phy_connect() local
814 phydev = to_phy_device(d); in phy_connect()
816 rc = phy_connect_direct(dev, phydev, handler, interface); in phy_connect()
821 return phydev; in phy_connect()
828 * @phydev: target phy_device struct
830 void phy_disconnect(struct phy_device *phydev) in phy_disconnect() argument
832 if (phydev->irq > 0) in phy_disconnect()
833 phy_stop_interrupts(phydev); in phy_disconnect()
835 phy_stop_machine(phydev); in phy_disconnect()
837 phydev->adjust_link = NULL; in phy_disconnect()
839 phy_detach(phydev); in phy_disconnect()
845 * @phydev: The PHY device to poll
861 static int phy_poll_reset(struct phy_device *phydev) in phy_poll_reset() argument
869 ret = phy_read(phydev, MII_BMCR); in phy_poll_reset()
883 int phy_init_hw(struct phy_device *phydev) in phy_init_hw() argument
888 phy_device_reset(phydev, 0); in phy_init_hw()
890 if (!phydev->drv || !phydev->drv->config_init) in phy_init_hw()
893 if (phydev->drv->soft_reset) in phy_init_hw()
894 ret = phydev->drv->soft_reset(phydev); in phy_init_hw()
896 ret = genphy_soft_reset(phydev); in phy_init_hw()
901 ret = phy_scan_fixups(phydev); in phy_init_hw()
905 return phydev->drv->config_init(phydev); in phy_init_hw()
909 void phy_attached_info(struct phy_device *phydev) in phy_attached_info() argument
911 phy_attached_print(phydev, NULL); in phy_attached_info()
916 void phy_attached_print(struct phy_device *phydev, const char *fmt, ...) in phy_attached_print() argument
918 const char *drv_name = phydev->drv ? phydev->drv->name : "unbound"; in phy_attached_print()
922 switch(phydev->irq) { in phy_attached_print()
930 snprintf(irq_num, sizeof(irq_num), "%d", phydev->irq); in phy_attached_print()
937 dev_info(&phydev->mdio.dev, ATTACHED_FMT "\n", in phy_attached_print()
938 drv_name, phydev_name(phydev), in phy_attached_print()
943 dev_info(&phydev->mdio.dev, ATTACHED_FMT, in phy_attached_print()
944 drv_name, phydev_name(phydev), in phy_attached_print()
957 * @phydev: Pointer to phy_device to attach
969 int phy_attach_direct(struct net_device *dev, struct phy_device *phydev, in phy_attach_direct() argument
973 struct mii_bus *bus = phydev->mdio.bus; in phy_attach_direct()
974 struct device *d = &phydev->mdio.dev; in phy_attach_direct()
994 if (phydev->is_c45) in phy_attach_direct()
1017 if (phydev->attached_dev) { in phy_attach_direct()
1023 phydev->phy_link_change = phy_link_change; in phy_attach_direct()
1024 phydev->attached_dev = dev; in phy_attach_direct()
1025 dev->phydev = phydev; in phy_attach_direct()
1035 phydev->sysfs_links = false; in phy_attach_direct()
1037 err = sysfs_create_link(&phydev->mdio.dev.kobj, &dev->dev.kobj, in phy_attach_direct()
1041 &phydev->mdio.dev.kobj, in phy_attach_direct()
1042 "phydev"); in phy_attach_direct()
1045 kobject_name(&phydev->mdio.dev.kobj), in phy_attach_direct()
1052 phydev->sysfs_links = true; in phy_attach_direct()
1055 phydev->dev_flags = flags; in phy_attach_direct()
1057 phydev->interface = interface; in phy_attach_direct()
1059 phydev->state = PHY_READY; in phy_attach_direct()
1064 netif_carrier_off(phydev->attached_dev); in phy_attach_direct()
1070 err = phy_init_hw(phydev); in phy_attach_direct()
1074 phy_resume(phydev); in phy_attach_direct()
1075 phy_led_triggers_register(phydev); in phy_attach_direct()
1081 phy_detach(phydev); in phy_attach_direct()
1107 struct phy_device *phydev; in phy_attach() local
1122 phydev = to_phy_device(d); in phy_attach()
1124 rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface); in phy_attach()
1129 return phydev; in phy_attach()
1135 * @phydev: target phy_device struct
1140 void phy_detach(struct phy_device *phydev) in phy_detach() argument
1142 struct net_device *dev = phydev->attached_dev; in phy_detach()
1146 if (phydev->sysfs_links) { in phy_detach()
1147 sysfs_remove_link(&dev->dev.kobj, "phydev"); in phy_detach()
1148 sysfs_remove_link(&phydev->mdio.dev.kobj, "attached_dev"); in phy_detach()
1150 phy_suspend(phydev); in phy_detach()
1151 phydev->attached_dev->phydev = NULL; in phy_detach()
1152 phydev->attached_dev = NULL; in phy_detach()
1153 phydev->phylink = NULL; in phy_detach()
1155 phy_led_triggers_unregister(phydev); in phy_detach()
1157 if (phydev->mdio.dev.driver) in phy_detach()
1158 module_put(phydev->mdio.dev.driver->owner); in phy_detach()
1165 if (phydev->mdio.dev.driver == &genphy_10g_driver.mdiodrv.driver || in phy_detach()
1166 phydev->mdio.dev.driver == &genphy_driver.mdiodrv.driver) in phy_detach()
1167 device_release_driver(&phydev->mdio.dev); in phy_detach()
1170 * The phydev might go away on the put_device() below, so avoid in phy_detach()
1173 bus = phydev->mdio.bus; in phy_detach()
1175 put_device(&phydev->mdio.dev); in phy_detach()
1180 phy_device_reset(phydev, 1); in phy_detach()
1184 int phy_suspend(struct phy_device *phydev) in phy_suspend() argument
1186 struct phy_driver *phydrv = to_phy_driver(phydev->mdio.dev.driver); in phy_suspend()
1187 struct net_device *netdev = phydev->attached_dev; in phy_suspend()
1192 phy_ethtool_get_wol(phydev, &wol); in phy_suspend()
1196 if (phydev->drv && phydrv->suspend) in phy_suspend()
1197 ret = phydrv->suspend(phydev); in phy_suspend()
1202 phydev->suspended = true; in phy_suspend()
1208 int __phy_resume(struct phy_device *phydev) in __phy_resume() argument
1210 struct phy_driver *phydrv = to_phy_driver(phydev->mdio.dev.driver); in __phy_resume()
1213 WARN_ON(!mutex_is_locked(&phydev->lock)); in __phy_resume()
1215 if (phydev->drv && phydrv->resume) in __phy_resume()
1216 ret = phydrv->resume(phydev); in __phy_resume()
1221 phydev->suspended = false; in __phy_resume()
1227 int phy_resume(struct phy_device *phydev) in phy_resume() argument
1231 mutex_lock(&phydev->lock); in phy_resume()
1232 ret = __phy_resume(phydev); in phy_resume()
1233 mutex_unlock(&phydev->lock); in phy_resume()
1239 int phy_loopback(struct phy_device *phydev, bool enable) in phy_loopback() argument
1241 struct phy_driver *phydrv = to_phy_driver(phydev->mdio.dev.driver); in phy_loopback()
1244 mutex_lock(&phydev->lock); in phy_loopback()
1246 if (enable && phydev->loopback_enabled) { in phy_loopback()
1251 if (!enable && !phydev->loopback_enabled) { in phy_loopback()
1256 if (phydev->drv && phydrv->set_loopback) in phy_loopback()
1257 ret = phydrv->set_loopback(phydev, enable); in phy_loopback()
1264 phydev->loopback_enabled = enable; in phy_loopback()
1267 mutex_unlock(&phydev->lock); in phy_loopback()
1274 * @phydev: target phy_device struct
1281 int phy_reset_after_clk_enable(struct phy_device *phydev) in phy_reset_after_clk_enable() argument
1283 if (!phydev || !phydev->drv) in phy_reset_after_clk_enable()
1286 if (phydev->drv->flags & PHY_RST_AFTER_CLK_EN) { in phy_reset_after_clk_enable()
1287 phy_device_reset(phydev, 1); in phy_reset_after_clk_enable()
1288 phy_device_reset(phydev, 0); in phy_reset_after_clk_enable()
1300 * @phydev: target phy_device struct
1307 static int genphy_config_advert(struct phy_device *phydev) in genphy_config_advert() argument
1314 phydev->advertising &= phydev->supported; in genphy_config_advert()
1315 advertise = phydev->advertising; in genphy_config_advert()
1318 adv = phy_read(phydev, MII_ADVERTISE); in genphy_config_advert()
1328 err = phy_write(phydev, MII_ADVERTISE, adv); in genphy_config_advert()
1335 bmsr = phy_read(phydev, MII_BMSR); in genphy_config_advert()
1347 adv = phy_read(phydev, MII_CTRL1000); in genphy_config_advert()
1354 if (phydev->supported & (SUPPORTED_1000baseT_Half | in genphy_config_advert()
1362 err = phy_write(phydev, MII_CTRL1000, adv); in genphy_config_advert()
1371 * @phydev: target phy_device struct
1377 static int genphy_config_eee_advert(struct phy_device *phydev) in genphy_config_eee_advert() argument
1379 int broken = phydev->eee_broken_modes; in genphy_config_eee_advert()
1390 adv = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV); in genphy_config_eee_advert()
1401 phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV, adv); in genphy_config_eee_advert()
1407 * genphy_setup_forced - configures/forces speed/duplex from @phydev
1408 * @phydev: target phy_device struct
1411 * to the values in phydev. Assumes that the values are valid.
1414 int genphy_setup_forced(struct phy_device *phydev) in genphy_setup_forced() argument
1418 phydev->pause = 0; in genphy_setup_forced()
1419 phydev->asym_pause = 0; in genphy_setup_forced()
1421 if (SPEED_1000 == phydev->speed) in genphy_setup_forced()
1423 else if (SPEED_100 == phydev->speed) in genphy_setup_forced()
1426 if (DUPLEX_FULL == phydev->duplex) in genphy_setup_forced()
1429 return phy_modify(phydev, MII_BMCR, in genphy_setup_forced()
1436 * @phydev: target phy_device struct
1438 int genphy_restart_aneg(struct phy_device *phydev) in genphy_restart_aneg() argument
1441 return phy_modify(phydev, MII_BMCR, BMCR_ISOLATE, in genphy_restart_aneg()
1448 * @phydev: target phy_device struct
1454 int genphy_config_aneg(struct phy_device *phydev) in genphy_config_aneg() argument
1458 changed = genphy_config_eee_advert(phydev); in genphy_config_aneg()
1460 if (AUTONEG_ENABLE != phydev->autoneg) in genphy_config_aneg()
1461 return genphy_setup_forced(phydev); in genphy_config_aneg()
1463 err = genphy_config_advert(phydev); in genphy_config_aneg()
1473 int ctl = phy_read(phydev, MII_BMCR); in genphy_config_aneg()
1486 return genphy_restart_aneg(phydev); in genphy_config_aneg()
1494 * @phydev: target phy_device struct
1500 int genphy_aneg_done(struct phy_device *phydev) in genphy_aneg_done() argument
1502 int retval = phy_read(phydev, MII_BMSR); in genphy_aneg_done()
1509 * genphy_update_link - update link status in @phydev
1510 * @phydev: target phy_device struct
1512 * Description: Update the value in phydev->link to reflect the
1516 int genphy_update_link(struct phy_device *phydev) in genphy_update_link() argument
1524 if (!phy_polling_mode(phydev)) { in genphy_update_link()
1525 status = phy_read(phydev, MII_BMSR); in genphy_update_link()
1531 status = phy_read(phydev, MII_BMSR); in genphy_update_link()
1536 phydev->link = 0; in genphy_update_link()
1538 phydev->link = 1; in genphy_update_link()
1546 * @phydev: target phy_device struct
1553 int genphy_read_status(struct phy_device *phydev) in genphy_read_status() argument
1563 err = genphy_update_link(phydev); in genphy_read_status()
1567 phydev->lp_advertising = 0; in genphy_read_status()
1569 if (AUTONEG_ENABLE == phydev->autoneg) { in genphy_read_status()
1570 if (phydev->supported & (SUPPORTED_1000baseT_Half in genphy_read_status()
1572 lpagb = phy_read(phydev, MII_STAT1000); in genphy_read_status()
1576 adv = phy_read(phydev, MII_CTRL1000); in genphy_read_status()
1582 phydev_err(phydev, "Master/Slave resolution failed, maybe conflicting manual settings?\n"); in genphy_read_status()
1584 phydev_err(phydev, "Master/Slave resolution failed\n"); in genphy_read_status()
1588 phydev->lp_advertising = in genphy_read_status()
1593 lpa = phy_read(phydev, MII_LPA); in genphy_read_status()
1597 phydev->lp_advertising |= mii_lpa_to_ethtool_lpa_t(lpa); in genphy_read_status()
1599 adv = phy_read(phydev, MII_ADVERTISE); in genphy_read_status()
1605 phydev->speed = SPEED_10; in genphy_read_status()
1606 phydev->duplex = DUPLEX_HALF; in genphy_read_status()
1607 phydev->pause = 0; in genphy_read_status()
1608 phydev->asym_pause = 0; in genphy_read_status()
1611 phydev->speed = SPEED_1000; in genphy_read_status()
1614 phydev->duplex = DUPLEX_FULL; in genphy_read_status()
1616 phydev->speed = SPEED_100; in genphy_read_status()
1619 phydev->duplex = DUPLEX_FULL; in genphy_read_status()
1622 phydev->duplex = DUPLEX_FULL; in genphy_read_status()
1624 if (phydev->duplex == DUPLEX_FULL) { in genphy_read_status()
1625 phydev->pause = lpa & LPA_PAUSE_CAP ? 1 : 0; in genphy_read_status()
1626 phydev->asym_pause = lpa & LPA_PAUSE_ASYM ? 1 : 0; in genphy_read_status()
1629 int bmcr = phy_read(phydev, MII_BMCR); in genphy_read_status()
1635 phydev->duplex = DUPLEX_FULL; in genphy_read_status()
1637 phydev->duplex = DUPLEX_HALF; in genphy_read_status()
1640 phydev->speed = SPEED_1000; in genphy_read_status()
1642 phydev->speed = SPEED_100; in genphy_read_status()
1644 phydev->speed = SPEED_10; in genphy_read_status()
1646 phydev->pause = 0; in genphy_read_status()
1647 phydev->asym_pause = 0; in genphy_read_status()
1656 * @phydev: target phy_device struct
1663 int genphy_soft_reset(struct phy_device *phydev) in genphy_soft_reset() argument
1667 ret = phy_set_bits(phydev, MII_BMCR, BMCR_RESET); in genphy_soft_reset()
1671 return phy_poll_reset(phydev); in genphy_soft_reset()
1675 int genphy_config_init(struct phy_device *phydev) in genphy_config_init() argument
1685 val = phy_read(phydev, MII_BMSR); in genphy_config_init()
1702 val = phy_read(phydev, MII_ESTATUS); in genphy_config_init()
1712 phydev->supported &= features; in genphy_config_init()
1713 phydev->advertising &= features; in genphy_config_init()
1736 int genphy_suspend(struct phy_device *phydev) in genphy_suspend() argument
1738 return phy_set_bits(phydev, MII_BMCR, BMCR_PDOWN); in genphy_suspend()
1742 int genphy_resume(struct phy_device *phydev) in genphy_resume() argument
1744 return phy_clear_bits(phydev, MII_BMCR, BMCR_PDOWN); in genphy_resume()
1748 int genphy_loopback(struct phy_device *phydev, bool enable) in genphy_loopback() argument
1750 return phy_modify(phydev, MII_BMCR, BMCR_LOOPBACK, in genphy_loopback()
1755 static int __set_phy_supported(struct phy_device *phydev, u32 max_speed) in __set_phy_supported() argument
1759 phydev->supported &= ~PHY_100BT_FEATURES; in __set_phy_supported()
1762 phydev->supported &= ~PHY_1000BT_FEATURES; in __set_phy_supported()
1773 int phy_set_max_speed(struct phy_device *phydev, u32 max_speed) in phy_set_max_speed() argument
1777 err = __set_phy_supported(phydev, max_speed); in phy_set_max_speed()
1781 phydev->advertising = phydev->supported; in phy_set_max_speed()
1787 static void of_set_phy_supported(struct phy_device *phydev) in of_set_phy_supported() argument
1789 struct device_node *node = phydev->mdio.dev.of_node; in of_set_phy_supported()
1799 __set_phy_supported(phydev, max_speed); in of_set_phy_supported()
1802 static void of_set_phy_eee_broken(struct phy_device *phydev) in of_set_phy_eee_broken() argument
1804 struct device_node *node = phydev->mdio.dev.of_node; in of_set_phy_eee_broken()
1826 phydev->eee_broken_modes = broken; in of_set_phy_eee_broken()
1839 struct phy_device *phydev = to_phy_device(dev); in phy_probe() local
1840 struct device_driver *drv = phydev->mdio.dev.driver; in phy_probe()
1844 phydev->drv = phydrv; in phy_probe()
1850 phy_interrupt_is_valid(phydev)) in phy_probe()
1851 phydev->irq = PHY_POLL; in phy_probe()
1854 phydev->is_internal = true; in phy_probe()
1856 mutex_lock(&phydev->lock); in phy_probe()
1862 phydev->supported = phydrv->features; in phy_probe()
1863 of_set_phy_supported(phydev); in phy_probe()
1864 phydev->advertising = phydev->supported; in phy_probe()
1869 of_set_phy_eee_broken(phydev); in phy_probe()
1883 phydev->supported &= ~(SUPPORTED_Pause | SUPPORTED_Asym_Pause); in phy_probe()
1884 phydev->supported |= phydrv->features & in phy_probe()
1887 phydev->supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause; in phy_probe()
1891 phydev->state = PHY_READY; in phy_probe()
1893 if (phydev->drv->probe) { in phy_probe()
1895 phy_device_reset(phydev, 0); in phy_probe()
1897 err = phydev->drv->probe(phydev); in phy_probe()
1900 phy_device_reset(phydev, 1); in phy_probe()
1904 mutex_unlock(&phydev->lock); in phy_probe()
1911 struct phy_device *phydev = to_phy_device(dev); in phy_remove() local
1913 cancel_delayed_work_sync(&phydev->state_queue); in phy_remove()
1915 mutex_lock(&phydev->lock); in phy_remove()
1916 phydev->state = PHY_DOWN; in phy_remove()
1917 mutex_unlock(&phydev->lock); in phy_remove()
1919 if (phydev->drv && phydev->drv->remove) { in phy_remove()
1920 phydev->drv->remove(phydev); in phy_remove()
1923 phy_device_reset(phydev, 1); in phy_remove()
1925 phydev->drv = NULL; in phy_remove()