2 * drivers/net/phy/phy_device.c
4 * Framework for finding and configuring PHYs.
5 * Also contains generic PHY driver
9 * Copyright (c) 2004 Freescale Semiconductor, Inc.
11 * This program is free software; you can redistribute it and/or modify it
12 * under the terms of the GNU General Public License as published by the
13 * Free Software Foundation; either version 2 of the License, or (at your
14 * option) any later version.
17 #include <linux/kernel.h>
18 #include <linux/string.h>
19 #include <linux/errno.h>
20 #include <linux/unistd.h>
21 #include <linux/slab.h>
22 #include <linux/interrupt.h>
23 #include <linux/init.h>
24 #include <linux/delay.h>
25 #include <linux/netdevice.h>
26 #include <linux/etherdevice.h>
27 #include <linux/skbuff.h>
29 #include <linux/module.h>
30 #include <linux/mii.h>
31 #include <linux/ethtool.h>
32 #include <linux/phy.h>
36 #include <asm/uaccess.h>
38 MODULE_DESCRIPTION("PHY library");
39 MODULE_AUTHOR("Andy Fleming");
40 MODULE_LICENSE("GPL");
42 void phy_device_free(struct phy_device *phydev)
46 EXPORT_SYMBOL(phy_device_free);
48 static void phy_device_release(struct device *dev)
50 phy_device_free(to_phy_device(dev));
53 static struct phy_driver genphy_driver;
54 extern int mdio_bus_init(void);
55 extern void mdio_bus_exit(void);
57 static LIST_HEAD(phy_fixup_list);
58 static DEFINE_MUTEX(phy_fixup_lock);
60 static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
61 u32 flags, phy_interface_t interface);
64 * Creates a new phy_fixup and adds it to the list
65 * @bus_id: A string which matches phydev->dev.bus_id (or PHY_ANY_ID)
66 * @phy_uid: Used to match against phydev->phy_id (the UID of the PHY)
67 * It can also be PHY_ANY_UID
68 * @phy_uid_mask: Applied to phydev->phy_id and fixup->phy_uid before
70 * @run: The actual code to be run when a matching PHY is found
72 int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask,
73 int (*run)(struct phy_device *))
75 struct phy_fixup *fixup;
77 fixup = kzalloc(sizeof(struct phy_fixup), GFP_KERNEL);
81 strlcpy(fixup->bus_id, bus_id, sizeof(fixup->bus_id));
82 fixup->phy_uid = phy_uid;
83 fixup->phy_uid_mask = phy_uid_mask;
86 mutex_lock(&phy_fixup_lock);
87 list_add_tail(&fixup->list, &phy_fixup_list);
88 mutex_unlock(&phy_fixup_lock);
92 EXPORT_SYMBOL(phy_register_fixup);
94 /* Registers a fixup to be run on any PHY with the UID in phy_uid */
95 int phy_register_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask,
96 int (*run)(struct phy_device *))
98 return phy_register_fixup(PHY_ANY_ID, phy_uid, phy_uid_mask, run);
100 EXPORT_SYMBOL(phy_register_fixup_for_uid);
102 /* Registers a fixup to be run on the PHY with id string bus_id */
103 int phy_register_fixup_for_id(const char *bus_id,
104 int (*run)(struct phy_device *))
106 return phy_register_fixup(bus_id, PHY_ANY_UID, 0xffffffff, run);
108 EXPORT_SYMBOL(phy_register_fixup_for_id);
111 * Returns 1 if fixup matches phydev in bus_id and phy_uid.
112 * Fixups can be set to match any in one or more fields.
114 static int phy_needs_fixup(struct phy_device *phydev, struct phy_fixup *fixup)
116 if (strcmp(fixup->bus_id, dev_name(&phydev->dev)) != 0)
117 if (strcmp(fixup->bus_id, PHY_ANY_ID) != 0)
120 if ((fixup->phy_uid & fixup->phy_uid_mask) !=
121 (phydev->phy_id & fixup->phy_uid_mask))
122 if (fixup->phy_uid != PHY_ANY_UID)
128 /* Runs any matching fixups for this phydev */
129 int phy_scan_fixups(struct phy_device *phydev)
131 struct phy_fixup *fixup;
133 mutex_lock(&phy_fixup_lock);
134 list_for_each_entry(fixup, &phy_fixup_list, list) {
135 if (phy_needs_fixup(phydev, fixup)) {
138 err = fixup->run(phydev);
141 mutex_unlock(&phy_fixup_lock);
146 mutex_unlock(&phy_fixup_lock);
150 EXPORT_SYMBOL(phy_scan_fixups);
152 static struct phy_device* phy_device_create(struct mii_bus *bus,
153 int addr, int phy_id)
155 struct phy_device *dev;
157 /* We allocate the device, and initialize the
159 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
162 return (struct phy_device*) PTR_ERR((void*)-ENOMEM);
164 dev->dev.release = phy_device_release;
168 dev->pause = dev->asym_pause = 0;
170 dev->interface = PHY_INTERFACE_MODE_GMII;
172 dev->autoneg = AUTONEG_ENABLE;
175 dev->phy_id = phy_id;
177 dev->dev.parent = bus->parent;
178 dev->dev.bus = &mdio_bus_type;
179 dev->irq = bus->irq != NULL ? bus->irq[addr] : PHY_POLL;
180 dev_set_name(&dev->dev, PHY_ID_FMT, bus->id, addr);
182 dev->state = PHY_DOWN;
184 mutex_init(&dev->lock);
185 INIT_DELAYED_WORK(&dev->state_queue, phy_state_machine);
187 /* Request the appropriate module unconditionally; don't
188 bother trying to do so only if it isn't already loaded,
189 because that gets complicated. A hotplug event would have
190 done an unconditional modprobe anyway.
191 We don't do normal hotplug because it won't work for MDIO
192 -- because it relies on the device staying around for long
193 enough for the driver to get loaded. With MDIO, the NIC
194 driver will get bored and give up as soon as it finds that
195 there's no driver _already_ loaded. */
196 request_module(MDIO_MODULE_PREFIX MDIO_ID_FMT, MDIO_ID_ARGS(phy_id));
202 * get_phy_id - reads the specified addr for its ID.
203 * @bus: the target MII bus
204 * @addr: PHY address on the MII bus
205 * @phy_id: where to store the ID retrieved.
207 * Description: Reads the ID registers of the PHY at @addr on the
208 * @bus, stores it in @phy_id and returns zero on success.
210 static int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id)
214 /* Grab the bits from PHYIR1, and put them
215 * in the upper half */
216 phy_reg = mdiobus_read(bus, addr, MII_PHYSID1);
221 *phy_id = (phy_reg & 0xffff) << 16;
223 /* Grab the bits from PHYIR2, and put them in the lower half */
224 phy_reg = mdiobus_read(bus, addr, MII_PHYSID2);
229 *phy_id |= (phy_reg & 0xffff);
235 * get_phy_device - reads the specified PHY device and returns its @phy_device struct
236 * @bus: the target MII bus
237 * @addr: PHY address on the MII bus
239 * Description: Reads the ID registers of the PHY at @addr on the
240 * @bus, then allocates and returns the phy_device to represent it.
242 struct phy_device * get_phy_device(struct mii_bus *bus, int addr)
244 struct phy_device *dev = NULL;
248 r = get_phy_id(bus, addr, &phy_id);
252 /* If the phy_id is mostly Fs, there is no device there */
253 if ((phy_id & 0x1fffffff) == 0x1fffffff)
256 dev = phy_device_create(bus, addr, phy_id);
260 EXPORT_SYMBOL(get_phy_device);
263 * phy_device_register - Register the phy device on the MDIO bus
264 * @phydev: phy_device structure to be added to the MDIO bus
266 int phy_device_register(struct phy_device *phydev)
270 /* Don't register a phy if one is already registered at this
272 if (phydev->bus->phy_map[phydev->addr])
274 phydev->bus->phy_map[phydev->addr] = phydev;
276 /* Run all of the fixups for this PHY */
277 phy_scan_fixups(phydev);
279 err = device_register(&phydev->dev);
281 pr_err("phy %d failed to register\n", phydev->addr);
288 phydev->bus->phy_map[phydev->addr] = NULL;
291 EXPORT_SYMBOL(phy_device_register);
294 * phy_find_first - finds the first PHY device on the bus
295 * @bus: the target MII bus
297 struct phy_device *phy_find_first(struct mii_bus *bus)
301 for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
302 if (bus->phy_map[addr])
303 return bus->phy_map[addr];
307 EXPORT_SYMBOL(phy_find_first);
310 * phy_prepare_link - prepares the PHY layer to monitor link status
311 * @phydev: target phy_device struct
312 * @handler: callback function for link status change notifications
314 * Description: Tells the PHY infrastructure to handle the
315 * gory details on monitoring link status (whether through
316 * polling or an interrupt), and to call back to the
317 * connected device driver when the link status changes.
318 * If you want to monitor your own link state, don't call
321 static void phy_prepare_link(struct phy_device *phydev,
322 void (*handler)(struct net_device *))
324 phydev->adjust_link = handler;
328 * phy_connect_direct - connect an ethernet device to a specific phy_device
329 * @dev: the network device to connect
330 * @phydev: the pointer to the phy device
331 * @handler: callback function for state change notifications
332 * @flags: PHY device's dev_flags
333 * @interface: PHY device's interface
335 int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
336 void (*handler)(struct net_device *), u32 flags,
337 phy_interface_t interface)
341 rc = phy_attach_direct(dev, phydev, flags, interface);
345 phy_prepare_link(phydev, handler);
346 phy_start_machine(phydev, NULL);
348 phy_start_interrupts(phydev);
352 EXPORT_SYMBOL(phy_connect_direct);
355 * phy_connect - connect an ethernet device to a PHY device
356 * @dev: the network device to connect
357 * @bus_id: the id string of the PHY device to connect
358 * @handler: callback function for state change notifications
359 * @flags: PHY device's dev_flags
360 * @interface: PHY device's interface
362 * Description: Convenience function for connecting ethernet
363 * devices to PHY devices. The default behavior is for
364 * the PHY infrastructure to handle everything, and only notify
365 * the connected driver when the link status changes. If you
366 * don't want, or can't use the provided functionality, you may
367 * choose to call only the subset of functions which provide
368 * the desired functionality.
370 struct phy_device * phy_connect(struct net_device *dev, const char *bus_id,
371 void (*handler)(struct net_device *), u32 flags,
372 phy_interface_t interface)
374 struct phy_device *phydev;
378 /* Search the list of PHY devices on the mdio bus for the
379 * PHY with the requested name */
380 d = bus_find_device_by_name(&mdio_bus_type, NULL, bus_id);
382 pr_err("PHY %s not found\n", bus_id);
383 return ERR_PTR(-ENODEV);
385 phydev = to_phy_device(d);
387 rc = phy_connect_direct(dev, phydev, handler, flags, interface);
393 EXPORT_SYMBOL(phy_connect);
396 * phy_disconnect - disable interrupts, stop state machine, and detach a PHY device
397 * @phydev: target phy_device struct
399 void phy_disconnect(struct phy_device *phydev)
402 phy_stop_interrupts(phydev);
404 phy_stop_machine(phydev);
406 phydev->adjust_link = NULL;
410 EXPORT_SYMBOL(phy_disconnect);
412 int phy_init_hw(struct phy_device *phydev)
416 if (!phydev->drv || !phydev->drv->config_init)
419 ret = phy_scan_fixups(phydev);
423 return phydev->drv->config_init(phydev);
427 * phy_attach_direct - attach a network device to a given PHY device pointer
428 * @dev: network device to attach
429 * @phydev: Pointer to phy_device to attach
430 * @flags: PHY device's dev_flags
431 * @interface: PHY device's interface
433 * Description: Called by drivers to attach to a particular PHY
434 * device. The phy_device is found, and properly hooked up
435 * to the phy_driver. If no driver is attached, then the
436 * genphy_driver is used. The phy_device is given a ptr to
437 * the attaching device, and given a callback for link status
438 * change. The phy_device is returned to the attaching driver.
440 static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
441 u32 flags, phy_interface_t interface)
443 struct device *d = &phydev->dev;
446 /* Assume that if there is no driver, that it doesn't
447 * exist, and we should use the genphy driver. */
448 if (NULL == d->driver) {
449 d->driver = &genphy_driver.driver;
451 err = d->driver->probe(d);
453 err = device_bind_driver(d);
459 if (phydev->attached_dev) {
460 dev_err(&dev->dev, "PHY already attached\n");
464 phydev->attached_dev = dev;
465 dev->phydev = phydev;
467 phydev->dev_flags = flags;
469 phydev->interface = interface;
471 phydev->state = PHY_READY;
473 /* Do initial configuration here, now that
474 * we have certain key parameters
475 * (dev_flags and interface) */
476 err = phy_init_hw(phydev);
484 * phy_attach - attach a network device to a particular PHY device
485 * @dev: network device to attach
486 * @bus_id: Bus ID of PHY device to attach
487 * @flags: PHY device's dev_flags
488 * @interface: PHY device's interface
490 * Description: Same as phy_attach_direct() except that a PHY bus_id
491 * string is passed instead of a pointer to a struct phy_device.
493 struct phy_device *phy_attach(struct net_device *dev,
494 const char *bus_id, u32 flags, phy_interface_t interface)
496 struct bus_type *bus = &mdio_bus_type;
497 struct phy_device *phydev;
501 /* Search the list of PHY devices on the mdio bus for the
502 * PHY with the requested name */
503 d = bus_find_device_by_name(bus, NULL, bus_id);
505 pr_err("PHY %s not found\n", bus_id);
506 return ERR_PTR(-ENODEV);
508 phydev = to_phy_device(d);
510 rc = phy_attach_direct(dev, phydev, flags, interface);
516 EXPORT_SYMBOL(phy_attach);
519 * phy_detach - detach a PHY device from its network device
520 * @phydev: target phy_device struct
522 void phy_detach(struct phy_device *phydev)
524 phydev->attached_dev->phydev = NULL;
525 phydev->attached_dev = NULL;
527 /* If the device had no specific driver before (i.e. - it
528 * was using the generic driver), we unbind the device
529 * from the generic driver so that there's a chance a
530 * real driver could be loaded */
531 if (phydev->dev.driver == &genphy_driver.driver)
532 device_release_driver(&phydev->dev);
534 EXPORT_SYMBOL(phy_detach);
537 /* Generic PHY support and helper functions */
540 * genphy_config_advert - sanitize and advertise auto-negotiation parameters
541 * @phydev: target phy_device struct
543 * Description: Writes MII_ADVERTISE with the appropriate values,
544 * after sanitizing the values to make sure we only advertise
545 * what is supported. Returns < 0 on error, 0 if the PHY's advertisement
546 * hasn't changed, and > 0 if it has changed.
548 static int genphy_config_advert(struct phy_device *phydev)
552 int err, changed = 0;
554 /* Only allow advertising what
555 * this PHY supports */
556 phydev->advertising &= phydev->supported;
557 advertise = phydev->advertising;
559 /* Setup standard advertisement */
560 oldadv = adv = phy_read(phydev, MII_ADVERTISE);
565 adv &= ~(ADVERTISE_ALL | ADVERTISE_100BASE4 | ADVERTISE_PAUSE_CAP |
566 ADVERTISE_PAUSE_ASYM);
567 adv |= ethtool_adv_to_mii_adv_t(advertise);
570 err = phy_write(phydev, MII_ADVERTISE, adv);
577 /* Configure gigabit if it's supported */
578 if (phydev->supported & (SUPPORTED_1000baseT_Half |
579 SUPPORTED_1000baseT_Full)) {
580 oldadv = adv = phy_read(phydev, MII_CTRL1000);
585 adv &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF);
586 adv |= ethtool_adv_to_mii_ctrl1000_t(advertise);
589 err = phy_write(phydev, MII_CTRL1000, adv);
601 * genphy_setup_forced - configures/forces speed/duplex from @phydev
602 * @phydev: target phy_device struct
604 * Description: Configures MII_BMCR to force speed/duplex
605 * to the values in phydev. Assumes that the values are valid.
606 * Please see phy_sanitize_settings().
608 static int genphy_setup_forced(struct phy_device *phydev)
613 phydev->pause = phydev->asym_pause = 0;
615 if (SPEED_1000 == phydev->speed)
616 ctl |= BMCR_SPEED1000;
617 else if (SPEED_100 == phydev->speed)
618 ctl |= BMCR_SPEED100;
620 if (DUPLEX_FULL == phydev->duplex)
621 ctl |= BMCR_FULLDPLX;
623 err = phy_write(phydev, MII_BMCR, ctl);
630 * genphy_restart_aneg - Enable and Restart Autonegotiation
631 * @phydev: target phy_device struct
633 int genphy_restart_aneg(struct phy_device *phydev)
637 ctl = phy_read(phydev, MII_BMCR);
642 ctl |= (BMCR_ANENABLE | BMCR_ANRESTART);
644 /* Don't isolate the PHY if we're negotiating */
645 ctl &= ~(BMCR_ISOLATE);
647 ctl = phy_write(phydev, MII_BMCR, ctl);
651 EXPORT_SYMBOL(genphy_restart_aneg);
655 * genphy_config_aneg - restart auto-negotiation or write BMCR
656 * @phydev: target phy_device struct
658 * Description: If auto-negotiation is enabled, we configure the
659 * advertising, and then restart auto-negotiation. If it is not
660 * enabled, then we write the BMCR.
662 int genphy_config_aneg(struct phy_device *phydev)
666 if (AUTONEG_ENABLE != phydev->autoneg)
667 return genphy_setup_forced(phydev);
669 result = genphy_config_advert(phydev);
671 if (result < 0) /* error */
675 /* Advertisement hasn't changed, but maybe aneg was never on to
676 * begin with? Or maybe phy was isolated? */
677 int ctl = phy_read(phydev, MII_BMCR);
682 if (!(ctl & BMCR_ANENABLE) || (ctl & BMCR_ISOLATE))
683 result = 1; /* do restart aneg */
686 /* Only restart aneg if we are advertising something different
687 * than we were before. */
689 result = genphy_restart_aneg(phydev);
693 EXPORT_SYMBOL(genphy_config_aneg);
696 * genphy_update_link - update link status in @phydev
697 * @phydev: target phy_device struct
699 * Description: Update the value in phydev->link to reflect the
700 * current link value. In order to do this, we need to read
701 * the status register twice, keeping the second value.
703 int genphy_update_link(struct phy_device *phydev)
708 status = phy_read(phydev, MII_BMSR);
713 /* Read link and autonegotiation status */
714 status = phy_read(phydev, MII_BMSR);
719 if ((status & BMSR_LSTATUS) == 0)
726 EXPORT_SYMBOL(genphy_update_link);
729 * genphy_read_status - check the link status and update current link state
730 * @phydev: target phy_device struct
732 * Description: Check the link, then figure out the current state
733 * by comparing what we advertise with what the link partner
734 * advertises. Start by checking the gigabit possibilities,
735 * then move on to 10/100.
737 int genphy_read_status(struct phy_device *phydev)
744 /* Update the link, but return if there
746 err = genphy_update_link(phydev);
750 if (AUTONEG_ENABLE == phydev->autoneg) {
751 if (phydev->supported & (SUPPORTED_1000baseT_Half
752 | SUPPORTED_1000baseT_Full)) {
753 lpagb = phy_read(phydev, MII_STAT1000);
758 adv = phy_read(phydev, MII_CTRL1000);
766 lpa = phy_read(phydev, MII_LPA);
771 adv = phy_read(phydev, MII_ADVERTISE);
778 phydev->speed = SPEED_10;
779 phydev->duplex = DUPLEX_HALF;
780 phydev->pause = phydev->asym_pause = 0;
782 if (lpagb & (LPA_1000FULL | LPA_1000HALF)) {
783 phydev->speed = SPEED_1000;
785 if (lpagb & LPA_1000FULL)
786 phydev->duplex = DUPLEX_FULL;
787 } else if (lpa & (LPA_100FULL | LPA_100HALF)) {
788 phydev->speed = SPEED_100;
790 if (lpa & LPA_100FULL)
791 phydev->duplex = DUPLEX_FULL;
793 if (lpa & LPA_10FULL)
794 phydev->duplex = DUPLEX_FULL;
796 if (phydev->duplex == DUPLEX_FULL){
797 phydev->pause = lpa & LPA_PAUSE_CAP ? 1 : 0;
798 phydev->asym_pause = lpa & LPA_PAUSE_ASYM ? 1 : 0;
801 int bmcr = phy_read(phydev, MII_BMCR);
805 if (bmcr & BMCR_FULLDPLX)
806 phydev->duplex = DUPLEX_FULL;
808 phydev->duplex = DUPLEX_HALF;
810 if (bmcr & BMCR_SPEED1000)
811 phydev->speed = SPEED_1000;
812 else if (bmcr & BMCR_SPEED100)
813 phydev->speed = SPEED_100;
815 phydev->speed = SPEED_10;
817 phydev->pause = phydev->asym_pause = 0;
822 EXPORT_SYMBOL(genphy_read_status);
824 static int genphy_config_init(struct phy_device *phydev)
829 /* For now, I'll claim that the generic driver supports
830 * all possible port types */
831 features = (SUPPORTED_TP | SUPPORTED_MII
832 | SUPPORTED_AUI | SUPPORTED_FIBRE |
835 /* Do we support autonegotiation? */
836 val = phy_read(phydev, MII_BMSR);
841 if (val & BMSR_ANEGCAPABLE)
842 features |= SUPPORTED_Autoneg;
844 if (val & BMSR_100FULL)
845 features |= SUPPORTED_100baseT_Full;
846 if (val & BMSR_100HALF)
847 features |= SUPPORTED_100baseT_Half;
848 if (val & BMSR_10FULL)
849 features |= SUPPORTED_10baseT_Full;
850 if (val & BMSR_10HALF)
851 features |= SUPPORTED_10baseT_Half;
853 if (val & BMSR_ESTATEN) {
854 val = phy_read(phydev, MII_ESTATUS);
859 if (val & ESTATUS_1000_TFULL)
860 features |= SUPPORTED_1000baseT_Full;
861 if (val & ESTATUS_1000_THALF)
862 features |= SUPPORTED_1000baseT_Half;
865 phydev->supported = features;
866 phydev->advertising = features;
870 int genphy_suspend(struct phy_device *phydev)
874 mutex_lock(&phydev->lock);
876 value = phy_read(phydev, MII_BMCR);
877 phy_write(phydev, MII_BMCR, (value | BMCR_PDOWN));
879 mutex_unlock(&phydev->lock);
883 EXPORT_SYMBOL(genphy_suspend);
885 int genphy_resume(struct phy_device *phydev)
889 mutex_lock(&phydev->lock);
891 value = phy_read(phydev, MII_BMCR);
892 phy_write(phydev, MII_BMCR, (value & ~BMCR_PDOWN));
894 mutex_unlock(&phydev->lock);
898 EXPORT_SYMBOL(genphy_resume);
901 * phy_probe - probe and init a PHY device
902 * @dev: device to probe and init
904 * Description: Take care of setting up the phy_device structure,
905 * set the state to READY (the driver's init function should
906 * set it to STARTING if needed).
908 static int phy_probe(struct device *dev)
910 struct phy_device *phydev;
911 struct phy_driver *phydrv;
912 struct device_driver *drv;
915 phydev = to_phy_device(dev);
917 drv = phydev->dev.driver;
918 phydrv = to_phy_driver(drv);
919 phydev->drv = phydrv;
921 /* Disable the interrupt if the PHY doesn't support it */
922 if (!(phydrv->flags & PHY_HAS_INTERRUPT))
923 phydev->irq = PHY_POLL;
925 mutex_lock(&phydev->lock);
927 /* Start out supporting everything. Eventually,
928 * a controller will attach, and may modify one
929 * or both of these values */
930 phydev->supported = phydrv->features;
931 phydev->advertising = phydrv->features;
933 /* Set the state to READY by default */
934 phydev->state = PHY_READY;
936 if (phydev->drv->probe)
937 err = phydev->drv->probe(phydev);
939 mutex_unlock(&phydev->lock);
945 static int phy_remove(struct device *dev)
947 struct phy_device *phydev;
949 phydev = to_phy_device(dev);
951 mutex_lock(&phydev->lock);
952 phydev->state = PHY_DOWN;
953 mutex_unlock(&phydev->lock);
955 if (phydev->drv->remove)
956 phydev->drv->remove(phydev);
963 * phy_driver_register - register a phy_driver with the PHY layer
964 * @new_driver: new phy_driver to register
966 int phy_driver_register(struct phy_driver *new_driver)
970 new_driver->driver.name = new_driver->name;
971 new_driver->driver.bus = &mdio_bus_type;
972 new_driver->driver.probe = phy_probe;
973 new_driver->driver.remove = phy_remove;
975 retval = driver_register(&new_driver->driver);
978 printk(KERN_ERR "%s: Error %d in registering driver\n",
979 new_driver->name, retval);
984 pr_debug("%s: Registered new driver\n", new_driver->name);
988 EXPORT_SYMBOL(phy_driver_register);
990 void phy_driver_unregister(struct phy_driver *drv)
992 driver_unregister(&drv->driver);
994 EXPORT_SYMBOL(phy_driver_unregister);
996 static struct phy_driver genphy_driver = {
997 .phy_id = 0xffffffff,
998 .phy_id_mask = 0xffffffff,
999 .name = "Generic PHY",
1000 .config_init = genphy_config_init,
1002 .config_aneg = genphy_config_aneg,
1003 .read_status = genphy_read_status,
1004 .suspend = genphy_suspend,
1005 .resume = genphy_resume,
1006 .driver = {.owner= THIS_MODULE, },
1009 static int __init phy_init(void)
1013 rc = mdio_bus_init();
1017 rc = phy_driver_register(&genphy_driver);
1024 static void __exit phy_exit(void)
1026 phy_driver_unregister(&genphy_driver);
1030 subsys_initcall(phy_init);
1031 module_exit(phy_exit);