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
);
61 * Creates a new phy_fixup and adds it to the list
62 * @bus_id: A string which matches phydev->dev.bus_id (or PHY_ANY_ID)
63 * @phy_uid: Used to match against phydev->phy_id (the UID of the PHY)
64 * It can also be PHY_ANY_UID
65 * @phy_uid_mask: Applied to phydev->phy_id and fixup->phy_uid before
67 * @run: The actual code to be run when a matching PHY is found
69 int phy_register_fixup(const char *bus_id
, u32 phy_uid
, u32 phy_uid_mask
,
70 int (*run
)(struct phy_device
*))
72 struct phy_fixup
*fixup
;
74 fixup
= kzalloc(sizeof(struct phy_fixup
), GFP_KERNEL
);
78 strlcpy(fixup
->bus_id
, bus_id
, sizeof(fixup
->bus_id
));
79 fixup
->phy_uid
= phy_uid
;
80 fixup
->phy_uid_mask
= phy_uid_mask
;
83 mutex_lock(&phy_fixup_lock
);
84 list_add_tail(&fixup
->list
, &phy_fixup_list
);
85 mutex_unlock(&phy_fixup_lock
);
89 EXPORT_SYMBOL(phy_register_fixup
);
91 /* Registers a fixup to be run on any PHY with the UID in phy_uid */
92 int phy_register_fixup_for_uid(u32 phy_uid
, u32 phy_uid_mask
,
93 int (*run
)(struct phy_device
*))
95 return phy_register_fixup(PHY_ANY_ID
, phy_uid
, phy_uid_mask
, run
);
97 EXPORT_SYMBOL(phy_register_fixup_for_uid
);
99 /* Registers a fixup to be run on the PHY with id string bus_id */
100 int phy_register_fixup_for_id(const char *bus_id
,
101 int (*run
)(struct phy_device
*))
103 return phy_register_fixup(bus_id
, PHY_ANY_UID
, 0xffffffff, run
);
105 EXPORT_SYMBOL(phy_register_fixup_for_id
);
108 * Returns 1 if fixup matches phydev in bus_id and phy_uid.
109 * Fixups can be set to match any in one or more fields.
111 static int phy_needs_fixup(struct phy_device
*phydev
, struct phy_fixup
*fixup
)
113 if (strcmp(fixup
->bus_id
, dev_name(&phydev
->dev
)) != 0)
114 if (strcmp(fixup
->bus_id
, PHY_ANY_ID
) != 0)
117 if ((fixup
->phy_uid
& fixup
->phy_uid_mask
) !=
118 (phydev
->phy_id
& fixup
->phy_uid_mask
))
119 if (fixup
->phy_uid
!= PHY_ANY_UID
)
125 /* Runs any matching fixups for this phydev */
126 int phy_scan_fixups(struct phy_device
*phydev
)
128 struct phy_fixup
*fixup
;
130 mutex_lock(&phy_fixup_lock
);
131 list_for_each_entry(fixup
, &phy_fixup_list
, list
) {
132 if (phy_needs_fixup(phydev
, fixup
)) {
135 err
= fixup
->run(phydev
);
138 mutex_unlock(&phy_fixup_lock
);
143 mutex_unlock(&phy_fixup_lock
);
147 EXPORT_SYMBOL(phy_scan_fixups
);
149 struct phy_device
* phy_device_create(struct mii_bus
*bus
, int addr
, int phy_id
)
151 struct phy_device
*dev
;
153 /* We allocate the device, and initialize the
155 dev
= kzalloc(sizeof(*dev
), GFP_KERNEL
);
158 return (struct phy_device
*) PTR_ERR((void*)-ENOMEM
);
160 dev
->dev
.release
= phy_device_release
;
164 dev
->pause
= dev
->asym_pause
= 0;
166 dev
->interface
= PHY_INTERFACE_MODE_GMII
;
168 dev
->autoneg
= AUTONEG_ENABLE
;
171 dev
->phy_id
= phy_id
;
173 dev
->dev
.parent
= bus
->parent
;
174 dev
->dev
.bus
= &mdio_bus_type
;
175 dev
->irq
= bus
->irq
!= NULL
? bus
->irq
[addr
] : PHY_POLL
;
176 dev_set_name(&dev
->dev
, PHY_ID_FMT
, bus
->id
, addr
);
178 dev
->state
= PHY_DOWN
;
180 mutex_init(&dev
->lock
);
181 INIT_DELAYED_WORK(&dev
->state_queue
, phy_state_machine
);
183 /* Request the appropriate module unconditionally; don't
184 bother trying to do so only if it isn't already loaded,
185 because that gets complicated. A hotplug event would have
186 done an unconditional modprobe anyway.
187 We don't do normal hotplug because it won't work for MDIO
188 -- because it relies on the device staying around for long
189 enough for the driver to get loaded. With MDIO, the NIC
190 driver will get bored and give up as soon as it finds that
191 there's no driver _already_ loaded. */
192 request_module(MDIO_MODULE_PREFIX MDIO_ID_FMT
, MDIO_ID_ARGS(phy_id
));
196 EXPORT_SYMBOL(phy_device_create
);
199 * get_phy_id - reads the specified addr for its ID.
200 * @bus: the target MII bus
201 * @addr: PHY address on the MII bus
202 * @phy_id: where to store the ID retrieved.
204 * Description: Reads the ID registers of the PHY at @addr on the
205 * @bus, stores it in @phy_id and returns zero on success.
207 int get_phy_id(struct mii_bus
*bus
, int addr
, u32
*phy_id
)
211 /* Grab the bits from PHYIR1, and put them
212 * in the upper half */
213 phy_reg
= bus
->read(bus
, addr
, MII_PHYSID1
);
218 *phy_id
= (phy_reg
& 0xffff) << 16;
220 /* Grab the bits from PHYIR2, and put them in the lower half */
221 phy_reg
= bus
->read(bus
, addr
, MII_PHYSID2
);
226 *phy_id
|= (phy_reg
& 0xffff);
230 EXPORT_SYMBOL(get_phy_id
);
233 * get_phy_device - reads the specified PHY device and returns its @phy_device struct
234 * @bus: the target MII bus
235 * @addr: PHY address on the MII bus
237 * Description: Reads the ID registers of the PHY at @addr on the
238 * @bus, then allocates and returns the phy_device to represent it.
240 struct phy_device
* get_phy_device(struct mii_bus
*bus
, int addr
)
242 struct phy_device
*dev
= NULL
;
246 r
= get_phy_id(bus
, addr
, &phy_id
);
250 /* If the phy_id is mostly Fs, there is no device there */
251 if ((phy_id
& 0x1fffffff) == 0x1fffffff)
254 dev
= phy_device_create(bus
, addr
, phy_id
);
258 EXPORT_SYMBOL(get_phy_device
);
261 * phy_device_register - Register the phy device on the MDIO bus
262 * @phydev: phy_device structure to be added to the MDIO bus
264 int phy_device_register(struct phy_device
*phydev
)
268 /* Don't register a phy if one is already registered at this
270 if (phydev
->bus
->phy_map
[phydev
->addr
])
272 phydev
->bus
->phy_map
[phydev
->addr
] = phydev
;
274 /* Run all of the fixups for this PHY */
275 phy_scan_fixups(phydev
);
277 err
= device_register(&phydev
->dev
);
279 pr_err("phy %d failed to register\n", phydev
->addr
);
286 phydev
->bus
->phy_map
[phydev
->addr
] = NULL
;
289 EXPORT_SYMBOL(phy_device_register
);
292 * phy_find_first - finds the first PHY device on the bus
293 * @bus: the target MII bus
295 struct phy_device
*phy_find_first(struct mii_bus
*bus
)
299 for (addr
= 0; addr
< PHY_MAX_ADDR
; addr
++) {
300 if (bus
->phy_map
[addr
])
301 return bus
->phy_map
[addr
];
305 EXPORT_SYMBOL(phy_find_first
);
308 * phy_prepare_link - prepares the PHY layer to monitor link status
309 * @phydev: target phy_device struct
310 * @handler: callback function for link status change notifications
312 * Description: Tells the PHY infrastructure to handle the
313 * gory details on monitoring link status (whether through
314 * polling or an interrupt), and to call back to the
315 * connected device driver when the link status changes.
316 * If you want to monitor your own link state, don't call
319 void phy_prepare_link(struct phy_device
*phydev
,
320 void (*handler
)(struct net_device
*))
322 phydev
->adjust_link
= handler
;
326 * phy_connect_direct - connect an ethernet device to a specific phy_device
327 * @dev: the network device to connect
328 * @phydev: the pointer to the phy device
329 * @handler: callback function for state change notifications
330 * @flags: PHY device's dev_flags
331 * @interface: PHY device's interface
333 int phy_connect_direct(struct net_device
*dev
, struct phy_device
*phydev
,
334 void (*handler
)(struct net_device
*), u32 flags
,
335 phy_interface_t interface
)
339 rc
= phy_attach_direct(dev
, phydev
, flags
, interface
);
343 phy_prepare_link(phydev
, handler
);
344 phy_start_machine(phydev
, NULL
);
346 phy_start_interrupts(phydev
);
350 EXPORT_SYMBOL(phy_connect_direct
);
353 * phy_connect - connect an ethernet device to a PHY device
354 * @dev: the network device to connect
355 * @bus_id: the id string of the PHY device to connect
356 * @handler: callback function for state change notifications
357 * @flags: PHY device's dev_flags
358 * @interface: PHY device's interface
360 * Description: Convenience function for connecting ethernet
361 * devices to PHY devices. The default behavior is for
362 * the PHY infrastructure to handle everything, and only notify
363 * the connected driver when the link status changes. If you
364 * don't want, or can't use the provided functionality, you may
365 * choose to call only the subset of functions which provide
366 * the desired functionality.
368 struct phy_device
* phy_connect(struct net_device
*dev
, const char *bus_id
,
369 void (*handler
)(struct net_device
*), u32 flags
,
370 phy_interface_t interface
)
372 struct phy_device
*phydev
;
376 /* Search the list of PHY devices on the mdio bus for the
377 * PHY with the requested name */
378 d
= bus_find_device_by_name(&mdio_bus_type
, NULL
, bus_id
);
380 pr_err("PHY %s not found\n", bus_id
);
381 return ERR_PTR(-ENODEV
);
383 phydev
= to_phy_device(d
);
385 rc
= phy_connect_direct(dev
, phydev
, handler
, flags
, interface
);
391 EXPORT_SYMBOL(phy_connect
);
394 * phy_disconnect - disable interrupts, stop state machine, and detach a PHY device
395 * @phydev: target phy_device struct
397 void phy_disconnect(struct phy_device
*phydev
)
400 phy_stop_interrupts(phydev
);
402 phy_stop_machine(phydev
);
404 phydev
->adjust_link
= NULL
;
408 EXPORT_SYMBOL(phy_disconnect
);
410 int phy_init_hw(struct phy_device
*phydev
)
414 if (!phydev
->drv
|| !phydev
->drv
->config_init
)
417 ret
= phy_scan_fixups(phydev
);
421 return phydev
->drv
->config_init(phydev
);
425 * phy_attach_direct - attach a network device to a given PHY device pointer
426 * @dev: network device to attach
427 * @phydev: Pointer to phy_device to attach
428 * @flags: PHY device's dev_flags
429 * @interface: PHY device's interface
431 * Description: Called by drivers to attach to a particular PHY
432 * device. The phy_device is found, and properly hooked up
433 * to the phy_driver. If no driver is attached, then the
434 * genphy_driver is used. The phy_device is given a ptr to
435 * the attaching device, and given a callback for link status
436 * change. The phy_device is returned to the attaching driver.
438 int phy_attach_direct(struct net_device
*dev
, struct phy_device
*phydev
,
439 u32 flags
, phy_interface_t interface
)
441 struct device
*d
= &phydev
->dev
;
443 /* Assume that if there is no driver, that it doesn't
444 * exist, and we should use the genphy driver. */
445 if (NULL
== d
->driver
) {
447 d
->driver
= &genphy_driver
.driver
;
449 err
= d
->driver
->probe(d
);
451 err
= device_bind_driver(d
);
457 if (phydev
->attached_dev
) {
458 dev_err(&dev
->dev
, "PHY already attached\n");
462 phydev
->attached_dev
= dev
;
464 phydev
->dev_flags
= flags
;
466 phydev
->interface
= interface
;
468 /* Do initial configuration here, now that
469 * we have certain key parameters
470 * (dev_flags and interface) */
471 return phy_init_hw(phydev
);
473 EXPORT_SYMBOL(phy_attach_direct
);
476 * phy_attach - attach a network device to a particular PHY device
477 * @dev: network device to attach
478 * @bus_id: Bus ID of PHY device to attach
479 * @flags: PHY device's dev_flags
480 * @interface: PHY device's interface
482 * Description: Same as phy_attach_direct() except that a PHY bus_id
483 * string is passed instead of a pointer to a struct phy_device.
485 struct phy_device
*phy_attach(struct net_device
*dev
,
486 const char *bus_id
, u32 flags
, phy_interface_t interface
)
488 struct bus_type
*bus
= &mdio_bus_type
;
489 struct phy_device
*phydev
;
493 /* Search the list of PHY devices on the mdio bus for the
494 * PHY with the requested name */
495 d
= bus_find_device_by_name(bus
, NULL
, bus_id
);
497 pr_err("PHY %s not found\n", bus_id
);
498 return ERR_PTR(-ENODEV
);
500 phydev
= to_phy_device(d
);
502 rc
= phy_attach_direct(dev
, phydev
, flags
, interface
);
508 EXPORT_SYMBOL(phy_attach
);
511 * phy_detach - detach a PHY device from its network device
512 * @phydev: target phy_device struct
514 void phy_detach(struct phy_device
*phydev
)
516 phydev
->attached_dev
= NULL
;
518 /* If the device had no specific driver before (i.e. - it
519 * was using the generic driver), we unbind the device
520 * from the generic driver so that there's a chance a
521 * real driver could be loaded */
522 if (phydev
->dev
.driver
== &genphy_driver
.driver
)
523 device_release_driver(&phydev
->dev
);
525 EXPORT_SYMBOL(phy_detach
);
528 /* Generic PHY support and helper functions */
531 * genphy_config_advert - sanitize and advertise auto-negotation parameters
532 * @phydev: target phy_device struct
534 * Description: Writes MII_ADVERTISE with the appropriate values,
535 * after sanitizing the values to make sure we only advertise
536 * what is supported. Returns < 0 on error, 0 if the PHY's advertisement
537 * hasn't changed, and > 0 if it has changed.
539 int genphy_config_advert(struct phy_device
*phydev
)
543 int err
, changed
= 0;
545 /* Only allow advertising what
546 * this PHY supports */
547 phydev
->advertising
&= phydev
->supported
;
548 advertise
= phydev
->advertising
;
550 /* Setup standard advertisement */
551 oldadv
= adv
= phy_read(phydev
, MII_ADVERTISE
);
556 adv
&= ~(ADVERTISE_ALL
| ADVERTISE_100BASE4
| ADVERTISE_PAUSE_CAP
|
557 ADVERTISE_PAUSE_ASYM
);
558 if (advertise
& ADVERTISED_10baseT_Half
)
559 adv
|= ADVERTISE_10HALF
;
560 if (advertise
& ADVERTISED_10baseT_Full
)
561 adv
|= ADVERTISE_10FULL
;
562 if (advertise
& ADVERTISED_100baseT_Half
)
563 adv
|= ADVERTISE_100HALF
;
564 if (advertise
& ADVERTISED_100baseT_Full
)
565 adv
|= ADVERTISE_100FULL
;
566 if (advertise
& ADVERTISED_Pause
)
567 adv
|= ADVERTISE_PAUSE_CAP
;
568 if (advertise
& ADVERTISED_Asym_Pause
)
569 adv
|= ADVERTISE_PAUSE_ASYM
;
572 err
= phy_write(phydev
, MII_ADVERTISE
, adv
);
579 /* Configure gigabit if it's supported */
580 if (phydev
->supported
& (SUPPORTED_1000baseT_Half
|
581 SUPPORTED_1000baseT_Full
)) {
582 oldadv
= adv
= phy_read(phydev
, MII_CTRL1000
);
587 adv
&= ~(ADVERTISE_1000FULL
| ADVERTISE_1000HALF
);
588 if (advertise
& SUPPORTED_1000baseT_Half
)
589 adv
|= ADVERTISE_1000HALF
;
590 if (advertise
& SUPPORTED_1000baseT_Full
)
591 adv
|= ADVERTISE_1000FULL
;
594 err
= phy_write(phydev
, MII_CTRL1000
, adv
);
604 EXPORT_SYMBOL(genphy_config_advert
);
607 * genphy_setup_forced - configures/forces speed/duplex from @phydev
608 * @phydev: target phy_device struct
610 * Description: Configures MII_BMCR to force speed/duplex
611 * to the values in phydev. Assumes that the values are valid.
612 * Please see phy_sanitize_settings().
614 int genphy_setup_forced(struct phy_device
*phydev
)
619 phydev
->pause
= phydev
->asym_pause
= 0;
621 if (SPEED_1000
== phydev
->speed
)
622 ctl
|= BMCR_SPEED1000
;
623 else if (SPEED_100
== phydev
->speed
)
624 ctl
|= BMCR_SPEED100
;
626 if (DUPLEX_FULL
== phydev
->duplex
)
627 ctl
|= BMCR_FULLDPLX
;
629 err
= phy_write(phydev
, MII_BMCR
, ctl
);
636 * genphy_restart_aneg - Enable and Restart Autonegotiation
637 * @phydev: target phy_device struct
639 int genphy_restart_aneg(struct phy_device
*phydev
)
643 ctl
= phy_read(phydev
, MII_BMCR
);
648 ctl
|= (BMCR_ANENABLE
| BMCR_ANRESTART
);
650 /* Don't isolate the PHY if we're negotiating */
651 ctl
&= ~(BMCR_ISOLATE
);
653 ctl
= phy_write(phydev
, MII_BMCR
, ctl
);
657 EXPORT_SYMBOL(genphy_restart_aneg
);
661 * genphy_config_aneg - restart auto-negotiation or write BMCR
662 * @phydev: target phy_device struct
664 * Description: If auto-negotiation is enabled, we configure the
665 * advertising, and then restart auto-negotiation. If it is not
666 * enabled, then we write the BMCR.
668 int genphy_config_aneg(struct phy_device
*phydev
)
672 if (AUTONEG_ENABLE
!= phydev
->autoneg
)
673 return genphy_setup_forced(phydev
);
675 result
= genphy_config_advert(phydev
);
677 if (result
< 0) /* error */
681 /* Advertisment hasn't changed, but maybe aneg was never on to
682 * begin with? Or maybe phy was isolated? */
683 int ctl
= phy_read(phydev
, MII_BMCR
);
688 if (!(ctl
& BMCR_ANENABLE
) || (ctl
& BMCR_ISOLATE
))
689 result
= 1; /* do restart aneg */
692 /* Only restart aneg if we are advertising something different
693 * than we were before. */
695 result
= genphy_restart_aneg(phydev
);
699 EXPORT_SYMBOL(genphy_config_aneg
);
702 * genphy_update_link - update link status in @phydev
703 * @phydev: target phy_device struct
705 * Description: Update the value in phydev->link to reflect the
706 * current link value. In order to do this, we need to read
707 * the status register twice, keeping the second value.
709 int genphy_update_link(struct phy_device
*phydev
)
714 status
= phy_read(phydev
, MII_BMSR
);
719 /* Read link and autonegotiation status */
720 status
= phy_read(phydev
, MII_BMSR
);
725 if ((status
& BMSR_LSTATUS
) == 0)
732 EXPORT_SYMBOL(genphy_update_link
);
735 * genphy_read_status - check the link status and update current link state
736 * @phydev: target phy_device struct
738 * Description: Check the link, then figure out the current state
739 * by comparing what we advertise with what the link partner
740 * advertises. Start by checking the gigabit possibilities,
741 * then move on to 10/100.
743 int genphy_read_status(struct phy_device
*phydev
)
750 /* Update the link, but return if there
752 err
= genphy_update_link(phydev
);
756 if (AUTONEG_ENABLE
== phydev
->autoneg
) {
757 if (phydev
->supported
& (SUPPORTED_1000baseT_Half
758 | SUPPORTED_1000baseT_Full
)) {
759 lpagb
= phy_read(phydev
, MII_STAT1000
);
764 adv
= phy_read(phydev
, MII_CTRL1000
);
772 lpa
= phy_read(phydev
, MII_LPA
);
777 adv
= phy_read(phydev
, MII_ADVERTISE
);
784 phydev
->speed
= SPEED_10
;
785 phydev
->duplex
= DUPLEX_HALF
;
786 phydev
->pause
= phydev
->asym_pause
= 0;
788 if (lpagb
& (LPA_1000FULL
| LPA_1000HALF
)) {
789 phydev
->speed
= SPEED_1000
;
791 if (lpagb
& LPA_1000FULL
)
792 phydev
->duplex
= DUPLEX_FULL
;
793 } else if (lpa
& (LPA_100FULL
| LPA_100HALF
)) {
794 phydev
->speed
= SPEED_100
;
796 if (lpa
& LPA_100FULL
)
797 phydev
->duplex
= DUPLEX_FULL
;
799 if (lpa
& LPA_10FULL
)
800 phydev
->duplex
= DUPLEX_FULL
;
802 if (phydev
->duplex
== DUPLEX_FULL
){
803 phydev
->pause
= lpa
& LPA_PAUSE_CAP
? 1 : 0;
804 phydev
->asym_pause
= lpa
& LPA_PAUSE_ASYM
? 1 : 0;
807 int bmcr
= phy_read(phydev
, MII_BMCR
);
811 if (bmcr
& BMCR_FULLDPLX
)
812 phydev
->duplex
= DUPLEX_FULL
;
814 phydev
->duplex
= DUPLEX_HALF
;
816 if (bmcr
& BMCR_SPEED1000
)
817 phydev
->speed
= SPEED_1000
;
818 else if (bmcr
& BMCR_SPEED100
)
819 phydev
->speed
= SPEED_100
;
821 phydev
->speed
= SPEED_10
;
823 phydev
->pause
= phydev
->asym_pause
= 0;
828 EXPORT_SYMBOL(genphy_read_status
);
830 static int genphy_config_init(struct phy_device
*phydev
)
835 /* For now, I'll claim that the generic driver supports
836 * all possible port types */
837 features
= (SUPPORTED_TP
| SUPPORTED_MII
838 | SUPPORTED_AUI
| SUPPORTED_FIBRE
|
841 /* Do we support autonegotiation? */
842 val
= phy_read(phydev
, MII_BMSR
);
847 if (val
& BMSR_ANEGCAPABLE
)
848 features
|= SUPPORTED_Autoneg
;
850 if (val
& BMSR_100FULL
)
851 features
|= SUPPORTED_100baseT_Full
;
852 if (val
& BMSR_100HALF
)
853 features
|= SUPPORTED_100baseT_Half
;
854 if (val
& BMSR_10FULL
)
855 features
|= SUPPORTED_10baseT_Full
;
856 if (val
& BMSR_10HALF
)
857 features
|= SUPPORTED_10baseT_Half
;
859 if (val
& BMSR_ESTATEN
) {
860 val
= phy_read(phydev
, MII_ESTATUS
);
865 if (val
& ESTATUS_1000_TFULL
)
866 features
|= SUPPORTED_1000baseT_Full
;
867 if (val
& ESTATUS_1000_THALF
)
868 features
|= SUPPORTED_1000baseT_Half
;
871 phydev
->supported
= features
;
872 phydev
->advertising
= features
;
876 int genphy_suspend(struct phy_device
*phydev
)
880 mutex_lock(&phydev
->lock
);
882 value
= phy_read(phydev
, MII_BMCR
);
883 phy_write(phydev
, MII_BMCR
, (value
| BMCR_PDOWN
));
885 mutex_unlock(&phydev
->lock
);
889 EXPORT_SYMBOL(genphy_suspend
);
891 int genphy_resume(struct phy_device
*phydev
)
895 mutex_lock(&phydev
->lock
);
897 value
= phy_read(phydev
, MII_BMCR
);
898 phy_write(phydev
, MII_BMCR
, (value
& ~BMCR_PDOWN
));
900 mutex_unlock(&phydev
->lock
);
904 EXPORT_SYMBOL(genphy_resume
);
907 * phy_probe - probe and init a PHY device
908 * @dev: device to probe and init
910 * Description: Take care of setting up the phy_device structure,
911 * set the state to READY (the driver's init function should
912 * set it to STARTING if needed).
914 static int phy_probe(struct device
*dev
)
916 struct phy_device
*phydev
;
917 struct phy_driver
*phydrv
;
918 struct device_driver
*drv
;
921 phydev
= to_phy_device(dev
);
923 /* Make sure the driver is held.
924 * XXX -- Is this correct? */
925 drv
= get_driver(phydev
->dev
.driver
);
926 phydrv
= to_phy_driver(drv
);
927 phydev
->drv
= phydrv
;
929 /* Disable the interrupt if the PHY doesn't support it */
930 if (!(phydrv
->flags
& PHY_HAS_INTERRUPT
))
931 phydev
->irq
= PHY_POLL
;
933 mutex_lock(&phydev
->lock
);
935 /* Start out supporting everything. Eventually,
936 * a controller will attach, and may modify one
937 * or both of these values */
938 phydev
->supported
= phydrv
->features
;
939 phydev
->advertising
= phydrv
->features
;
941 /* Set the state to READY by default */
942 phydev
->state
= PHY_READY
;
944 if (phydev
->drv
->probe
)
945 err
= phydev
->drv
->probe(phydev
);
947 mutex_unlock(&phydev
->lock
);
953 static int phy_remove(struct device
*dev
)
955 struct phy_device
*phydev
;
957 phydev
= to_phy_device(dev
);
959 mutex_lock(&phydev
->lock
);
960 phydev
->state
= PHY_DOWN
;
961 mutex_unlock(&phydev
->lock
);
963 if (phydev
->drv
->remove
)
964 phydev
->drv
->remove(phydev
);
966 put_driver(dev
->driver
);
973 * phy_driver_register - register a phy_driver with the PHY layer
974 * @new_driver: new phy_driver to register
976 int phy_driver_register(struct phy_driver
*new_driver
)
980 new_driver
->driver
.name
= new_driver
->name
;
981 new_driver
->driver
.bus
= &mdio_bus_type
;
982 new_driver
->driver
.probe
= phy_probe
;
983 new_driver
->driver
.remove
= phy_remove
;
985 retval
= driver_register(&new_driver
->driver
);
988 printk(KERN_ERR
"%s: Error %d in registering driver\n",
989 new_driver
->name
, retval
);
994 pr_debug("%s: Registered new driver\n", new_driver
->name
);
998 EXPORT_SYMBOL(phy_driver_register
);
1000 void phy_driver_unregister(struct phy_driver
*drv
)
1002 driver_unregister(&drv
->driver
);
1004 EXPORT_SYMBOL(phy_driver_unregister
);
1006 static struct phy_driver genphy_driver
= {
1007 .phy_id
= 0xffffffff,
1008 .phy_id_mask
= 0xffffffff,
1009 .name
= "Generic PHY",
1010 .config_init
= genphy_config_init
,
1012 .config_aneg
= genphy_config_aneg
,
1013 .read_status
= genphy_read_status
,
1014 .suspend
= genphy_suspend
,
1015 .resume
= genphy_resume
,
1016 .driver
= {.owner
= THIS_MODULE
, },
1019 static int __init
phy_init(void)
1023 rc
= mdio_bus_init();
1027 rc
= phy_driver_register(&genphy_driver
);
1034 static void __exit
phy_exit(void)
1036 phy_driver_unregister(&genphy_driver
);
1040 subsys_initcall(phy_init
);
1041 module_exit(phy_exit
);