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 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
= bus
->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
= bus
->read(bus
, addr
, MII_PHYSID2
);
229 *phy_id
|= (phy_reg
& 0xffff);
233 EXPORT_SYMBOL(get_phy_id
);
236 * get_phy_device - reads the specified PHY device and returns its @phy_device struct
237 * @bus: the target MII bus
238 * @addr: PHY address on the MII bus
240 * Description: Reads the ID registers of the PHY at @addr on the
241 * @bus, then allocates and returns the phy_device to represent it.
243 struct phy_device
* get_phy_device(struct mii_bus
*bus
, int addr
)
245 struct phy_device
*dev
= NULL
;
249 r
= get_phy_id(bus
, addr
, &phy_id
);
253 /* If the phy_id is mostly Fs, there is no device there */
254 if ((phy_id
& 0x1fffffff) == 0x1fffffff)
257 dev
= phy_device_create(bus
, addr
, phy_id
);
261 EXPORT_SYMBOL(get_phy_device
);
264 * phy_device_register - Register the phy device on the MDIO bus
265 * @phydev: phy_device structure to be added to the MDIO bus
267 int phy_device_register(struct phy_device
*phydev
)
271 /* Don't register a phy if one is already registered at this
273 if (phydev
->bus
->phy_map
[phydev
->addr
])
275 phydev
->bus
->phy_map
[phydev
->addr
] = phydev
;
277 /* Run all of the fixups for this PHY */
278 phy_scan_fixups(phydev
);
280 err
= device_register(&phydev
->dev
);
282 pr_err("phy %d failed to register\n", phydev
->addr
);
289 phydev
->bus
->phy_map
[phydev
->addr
] = NULL
;
292 EXPORT_SYMBOL(phy_device_register
);
295 * phy_find_first - finds the first PHY device on the bus
296 * @bus: the target MII bus
298 struct phy_device
*phy_find_first(struct mii_bus
*bus
)
302 for (addr
= 0; addr
< PHY_MAX_ADDR
; addr
++) {
303 if (bus
->phy_map
[addr
])
304 return bus
->phy_map
[addr
];
308 EXPORT_SYMBOL(phy_find_first
);
311 * phy_prepare_link - prepares the PHY layer to monitor link status
312 * @phydev: target phy_device struct
313 * @handler: callback function for link status change notifications
315 * Description: Tells the PHY infrastructure to handle the
316 * gory details on monitoring link status (whether through
317 * polling or an interrupt), and to call back to the
318 * connected device driver when the link status changes.
319 * If you want to monitor your own link state, don't call
322 static void phy_prepare_link(struct phy_device
*phydev
,
323 void (*handler
)(struct net_device
*))
325 phydev
->adjust_link
= handler
;
329 * phy_connect_direct - connect an ethernet device to a specific phy_device
330 * @dev: the network device to connect
331 * @phydev: the pointer to the phy device
332 * @handler: callback function for state change notifications
333 * @flags: PHY device's dev_flags
334 * @interface: PHY device's interface
336 int phy_connect_direct(struct net_device
*dev
, struct phy_device
*phydev
,
337 void (*handler
)(struct net_device
*), u32 flags
,
338 phy_interface_t interface
)
342 rc
= phy_attach_direct(dev
, phydev
, flags
, interface
);
346 phy_prepare_link(phydev
, handler
);
347 phy_start_machine(phydev
, NULL
);
349 phy_start_interrupts(phydev
);
353 EXPORT_SYMBOL(phy_connect_direct
);
356 * phy_connect - connect an ethernet device to a PHY device
357 * @dev: the network device to connect
358 * @bus_id: the id string of the PHY device to connect
359 * @handler: callback function for state change notifications
360 * @flags: PHY device's dev_flags
361 * @interface: PHY device's interface
363 * Description: Convenience function for connecting ethernet
364 * devices to PHY devices. The default behavior is for
365 * the PHY infrastructure to handle everything, and only notify
366 * the connected driver when the link status changes. If you
367 * don't want, or can't use the provided functionality, you may
368 * choose to call only the subset of functions which provide
369 * the desired functionality.
371 struct phy_device
* phy_connect(struct net_device
*dev
, const char *bus_id
,
372 void (*handler
)(struct net_device
*), u32 flags
,
373 phy_interface_t interface
)
375 struct phy_device
*phydev
;
379 /* Search the list of PHY devices on the mdio bus for the
380 * PHY with the requested name */
381 d
= bus_find_device_by_name(&mdio_bus_type
, NULL
, bus_id
);
383 pr_err("PHY %s not found\n", bus_id
);
384 return ERR_PTR(-ENODEV
);
386 phydev
= to_phy_device(d
);
388 rc
= phy_connect_direct(dev
, phydev
, handler
, flags
, interface
);
394 EXPORT_SYMBOL(phy_connect
);
397 * phy_disconnect - disable interrupts, stop state machine, and detach a PHY device
398 * @phydev: target phy_device struct
400 void phy_disconnect(struct phy_device
*phydev
)
403 phy_stop_interrupts(phydev
);
405 phy_stop_machine(phydev
);
407 phydev
->adjust_link
= NULL
;
411 EXPORT_SYMBOL(phy_disconnect
);
413 int phy_init_hw(struct phy_device
*phydev
)
417 if (!phydev
->drv
|| !phydev
->drv
->config_init
)
420 ret
= phy_scan_fixups(phydev
);
424 return phydev
->drv
->config_init(phydev
);
428 * phy_attach_direct - attach a network device to a given PHY device pointer
429 * @dev: network device to attach
430 * @phydev: Pointer to phy_device to attach
431 * @flags: PHY device's dev_flags
432 * @interface: PHY device's interface
434 * Description: Called by drivers to attach to a particular PHY
435 * device. The phy_device is found, and properly hooked up
436 * to the phy_driver. If no driver is attached, then the
437 * genphy_driver is used. The phy_device is given a ptr to
438 * the attaching device, and given a callback for link status
439 * change. The phy_device is returned to the attaching driver.
441 static int phy_attach_direct(struct net_device
*dev
, struct phy_device
*phydev
,
442 u32 flags
, phy_interface_t interface
)
444 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
) {
450 d
->driver
= &genphy_driver
.driver
;
452 err
= d
->driver
->probe(d
);
454 err
= device_bind_driver(d
);
460 if (phydev
->attached_dev
) {
461 dev_err(&dev
->dev
, "PHY already attached\n");
465 phydev
->attached_dev
= dev
;
466 dev
->phydev
= phydev
;
468 phydev
->dev_flags
= flags
;
470 phydev
->interface
= interface
;
472 phydev
->state
= PHY_READY
;
474 /* Do initial configuration here, now that
475 * we have certain key parameters
476 * (dev_flags and interface) */
477 return phy_init_hw(phydev
);
481 * phy_attach - attach a network device to a particular PHY device
482 * @dev: network device to attach
483 * @bus_id: Bus ID of PHY device to attach
484 * @flags: PHY device's dev_flags
485 * @interface: PHY device's interface
487 * Description: Same as phy_attach_direct() except that a PHY bus_id
488 * string is passed instead of a pointer to a struct phy_device.
490 struct phy_device
*phy_attach(struct net_device
*dev
,
491 const char *bus_id
, u32 flags
, phy_interface_t interface
)
493 struct bus_type
*bus
= &mdio_bus_type
;
494 struct phy_device
*phydev
;
498 /* Search the list of PHY devices on the mdio bus for the
499 * PHY with the requested name */
500 d
= bus_find_device_by_name(bus
, NULL
, bus_id
);
502 pr_err("PHY %s not found\n", bus_id
);
503 return ERR_PTR(-ENODEV
);
505 phydev
= to_phy_device(d
);
507 rc
= phy_attach_direct(dev
, phydev
, flags
, interface
);
513 EXPORT_SYMBOL(phy_attach
);
516 * phy_detach - detach a PHY device from its network device
517 * @phydev: target phy_device struct
519 void phy_detach(struct phy_device
*phydev
)
521 phydev
->attached_dev
->phydev
= NULL
;
522 phydev
->attached_dev
= NULL
;
524 /* If the device had no specific driver before (i.e. - it
525 * was using the generic driver), we unbind the device
526 * from the generic driver so that there's a chance a
527 * real driver could be loaded */
528 if (phydev
->dev
.driver
== &genphy_driver
.driver
)
529 device_release_driver(&phydev
->dev
);
531 EXPORT_SYMBOL(phy_detach
);
534 /* Generic PHY support and helper functions */
537 * genphy_config_advert - sanitize and advertise auto-negotation parameters
538 * @phydev: target phy_device struct
540 * Description: Writes MII_ADVERTISE with the appropriate values,
541 * after sanitizing the values to make sure we only advertise
542 * what is supported. Returns < 0 on error, 0 if the PHY's advertisement
543 * hasn't changed, and > 0 if it has changed.
545 static int genphy_config_advert(struct phy_device
*phydev
)
549 int err
, changed
= 0;
551 /* Only allow advertising what
552 * this PHY supports */
553 phydev
->advertising
&= phydev
->supported
;
554 advertise
= phydev
->advertising
;
556 /* Setup standard advertisement */
557 oldadv
= adv
= phy_read(phydev
, MII_ADVERTISE
);
562 adv
&= ~(ADVERTISE_ALL
| ADVERTISE_100BASE4
| ADVERTISE_PAUSE_CAP
|
563 ADVERTISE_PAUSE_ASYM
);
564 if (advertise
& ADVERTISED_10baseT_Half
)
565 adv
|= ADVERTISE_10HALF
;
566 if (advertise
& ADVERTISED_10baseT_Full
)
567 adv
|= ADVERTISE_10FULL
;
568 if (advertise
& ADVERTISED_100baseT_Half
)
569 adv
|= ADVERTISE_100HALF
;
570 if (advertise
& ADVERTISED_100baseT_Full
)
571 adv
|= ADVERTISE_100FULL
;
572 if (advertise
& ADVERTISED_Pause
)
573 adv
|= ADVERTISE_PAUSE_CAP
;
574 if (advertise
& ADVERTISED_Asym_Pause
)
575 adv
|= ADVERTISE_PAUSE_ASYM
;
578 err
= phy_write(phydev
, MII_ADVERTISE
, adv
);
585 /* Configure gigabit if it's supported */
586 if (phydev
->supported
& (SUPPORTED_1000baseT_Half
|
587 SUPPORTED_1000baseT_Full
)) {
588 oldadv
= adv
= phy_read(phydev
, MII_CTRL1000
);
593 adv
&= ~(ADVERTISE_1000FULL
| ADVERTISE_1000HALF
);
594 if (advertise
& SUPPORTED_1000baseT_Half
)
595 adv
|= ADVERTISE_1000HALF
;
596 if (advertise
& SUPPORTED_1000baseT_Full
)
597 adv
|= ADVERTISE_1000FULL
;
600 err
= phy_write(phydev
, MII_CTRL1000
, adv
);
612 * genphy_setup_forced - configures/forces speed/duplex from @phydev
613 * @phydev: target phy_device struct
615 * Description: Configures MII_BMCR to force speed/duplex
616 * to the values in phydev. Assumes that the values are valid.
617 * Please see phy_sanitize_settings().
619 static int genphy_setup_forced(struct phy_device
*phydev
)
624 phydev
->pause
= phydev
->asym_pause
= 0;
626 if (SPEED_1000
== phydev
->speed
)
627 ctl
|= BMCR_SPEED1000
;
628 else if (SPEED_100
== phydev
->speed
)
629 ctl
|= BMCR_SPEED100
;
631 if (DUPLEX_FULL
== phydev
->duplex
)
632 ctl
|= BMCR_FULLDPLX
;
634 err
= phy_write(phydev
, MII_BMCR
, ctl
);
641 * genphy_restart_aneg - Enable and Restart Autonegotiation
642 * @phydev: target phy_device struct
644 int genphy_restart_aneg(struct phy_device
*phydev
)
648 ctl
= phy_read(phydev
, MII_BMCR
);
653 ctl
|= (BMCR_ANENABLE
| BMCR_ANRESTART
);
655 /* Don't isolate the PHY if we're negotiating */
656 ctl
&= ~(BMCR_ISOLATE
);
658 ctl
= phy_write(phydev
, MII_BMCR
, ctl
);
662 EXPORT_SYMBOL(genphy_restart_aneg
);
666 * genphy_config_aneg - restart auto-negotiation or write BMCR
667 * @phydev: target phy_device struct
669 * Description: If auto-negotiation is enabled, we configure the
670 * advertising, and then restart auto-negotiation. If it is not
671 * enabled, then we write the BMCR.
673 int genphy_config_aneg(struct phy_device
*phydev
)
677 if (AUTONEG_ENABLE
!= phydev
->autoneg
)
678 return genphy_setup_forced(phydev
);
680 result
= genphy_config_advert(phydev
);
682 if (result
< 0) /* error */
686 /* Advertisment hasn't changed, but maybe aneg was never on to
687 * begin with? Or maybe phy was isolated? */
688 int ctl
= phy_read(phydev
, MII_BMCR
);
693 if (!(ctl
& BMCR_ANENABLE
) || (ctl
& BMCR_ISOLATE
))
694 result
= 1; /* do restart aneg */
697 /* Only restart aneg if we are advertising something different
698 * than we were before. */
700 result
= genphy_restart_aneg(phydev
);
704 EXPORT_SYMBOL(genphy_config_aneg
);
707 * genphy_update_link - update link status in @phydev
708 * @phydev: target phy_device struct
710 * Description: Update the value in phydev->link to reflect the
711 * current link value. In order to do this, we need to read
712 * the status register twice, keeping the second value.
714 int genphy_update_link(struct phy_device
*phydev
)
719 status
= phy_read(phydev
, MII_BMSR
);
724 /* Read link and autonegotiation status */
725 status
= phy_read(phydev
, MII_BMSR
);
730 if ((status
& BMSR_LSTATUS
) == 0)
737 EXPORT_SYMBOL(genphy_update_link
);
740 * genphy_read_status - check the link status and update current link state
741 * @phydev: target phy_device struct
743 * Description: Check the link, then figure out the current state
744 * by comparing what we advertise with what the link partner
745 * advertises. Start by checking the gigabit possibilities,
746 * then move on to 10/100.
748 int genphy_read_status(struct phy_device
*phydev
)
755 /* Update the link, but return if there
757 err
= genphy_update_link(phydev
);
761 if (AUTONEG_ENABLE
== phydev
->autoneg
) {
762 if (phydev
->supported
& (SUPPORTED_1000baseT_Half
763 | SUPPORTED_1000baseT_Full
)) {
764 lpagb
= phy_read(phydev
, MII_STAT1000
);
769 adv
= phy_read(phydev
, MII_CTRL1000
);
777 lpa
= phy_read(phydev
, MII_LPA
);
782 adv
= phy_read(phydev
, MII_ADVERTISE
);
789 phydev
->speed
= SPEED_10
;
790 phydev
->duplex
= DUPLEX_HALF
;
791 phydev
->pause
= phydev
->asym_pause
= 0;
793 if (lpagb
& (LPA_1000FULL
| LPA_1000HALF
)) {
794 phydev
->speed
= SPEED_1000
;
796 if (lpagb
& LPA_1000FULL
)
797 phydev
->duplex
= DUPLEX_FULL
;
798 } else if (lpa
& (LPA_100FULL
| LPA_100HALF
)) {
799 phydev
->speed
= SPEED_100
;
801 if (lpa
& LPA_100FULL
)
802 phydev
->duplex
= DUPLEX_FULL
;
804 if (lpa
& LPA_10FULL
)
805 phydev
->duplex
= DUPLEX_FULL
;
807 if (phydev
->duplex
== DUPLEX_FULL
){
808 phydev
->pause
= lpa
& LPA_PAUSE_CAP
? 1 : 0;
809 phydev
->asym_pause
= lpa
& LPA_PAUSE_ASYM
? 1 : 0;
812 int bmcr
= phy_read(phydev
, MII_BMCR
);
816 if (bmcr
& BMCR_FULLDPLX
)
817 phydev
->duplex
= DUPLEX_FULL
;
819 phydev
->duplex
= DUPLEX_HALF
;
821 if (bmcr
& BMCR_SPEED1000
)
822 phydev
->speed
= SPEED_1000
;
823 else if (bmcr
& BMCR_SPEED100
)
824 phydev
->speed
= SPEED_100
;
826 phydev
->speed
= SPEED_10
;
828 phydev
->pause
= phydev
->asym_pause
= 0;
833 EXPORT_SYMBOL(genphy_read_status
);
835 static int genphy_config_init(struct phy_device
*phydev
)
840 /* For now, I'll claim that the generic driver supports
841 * all possible port types */
842 features
= (SUPPORTED_TP
| SUPPORTED_MII
843 | SUPPORTED_AUI
| SUPPORTED_FIBRE
|
846 /* Do we support autonegotiation? */
847 val
= phy_read(phydev
, MII_BMSR
);
852 if (val
& BMSR_ANEGCAPABLE
)
853 features
|= SUPPORTED_Autoneg
;
855 if (val
& BMSR_100FULL
)
856 features
|= SUPPORTED_100baseT_Full
;
857 if (val
& BMSR_100HALF
)
858 features
|= SUPPORTED_100baseT_Half
;
859 if (val
& BMSR_10FULL
)
860 features
|= SUPPORTED_10baseT_Full
;
861 if (val
& BMSR_10HALF
)
862 features
|= SUPPORTED_10baseT_Half
;
864 if (val
& BMSR_ESTATEN
) {
865 val
= phy_read(phydev
, MII_ESTATUS
);
870 if (val
& ESTATUS_1000_TFULL
)
871 features
|= SUPPORTED_1000baseT_Full
;
872 if (val
& ESTATUS_1000_THALF
)
873 features
|= SUPPORTED_1000baseT_Half
;
876 phydev
->supported
= features
;
877 phydev
->advertising
= features
;
881 int genphy_suspend(struct phy_device
*phydev
)
885 mutex_lock(&phydev
->lock
);
887 value
= phy_read(phydev
, MII_BMCR
);
888 phy_write(phydev
, MII_BMCR
, (value
| BMCR_PDOWN
));
890 mutex_unlock(&phydev
->lock
);
894 EXPORT_SYMBOL(genphy_suspend
);
896 int genphy_resume(struct phy_device
*phydev
)
900 mutex_lock(&phydev
->lock
);
902 value
= phy_read(phydev
, MII_BMCR
);
903 phy_write(phydev
, MII_BMCR
, (value
& ~BMCR_PDOWN
));
905 mutex_unlock(&phydev
->lock
);
909 EXPORT_SYMBOL(genphy_resume
);
912 * phy_probe - probe and init a PHY device
913 * @dev: device to probe and init
915 * Description: Take care of setting up the phy_device structure,
916 * set the state to READY (the driver's init function should
917 * set it to STARTING if needed).
919 static int phy_probe(struct device
*dev
)
921 struct phy_device
*phydev
;
922 struct phy_driver
*phydrv
;
923 struct device_driver
*drv
;
926 phydev
= to_phy_device(dev
);
928 /* Make sure the driver is held.
929 * XXX -- Is this correct? */
930 drv
= get_driver(phydev
->dev
.driver
);
931 phydrv
= to_phy_driver(drv
);
932 phydev
->drv
= phydrv
;
934 /* Disable the interrupt if the PHY doesn't support it */
935 if (!(phydrv
->flags
& PHY_HAS_INTERRUPT
))
936 phydev
->irq
= PHY_POLL
;
938 mutex_lock(&phydev
->lock
);
940 /* Start out supporting everything. Eventually,
941 * a controller will attach, and may modify one
942 * or both of these values */
943 phydev
->supported
= phydrv
->features
;
944 phydev
->advertising
= phydrv
->features
;
946 /* Set the state to READY by default */
947 phydev
->state
= PHY_READY
;
949 if (phydev
->drv
->probe
)
950 err
= phydev
->drv
->probe(phydev
);
952 mutex_unlock(&phydev
->lock
);
958 static int phy_remove(struct device
*dev
)
960 struct phy_device
*phydev
;
962 phydev
= to_phy_device(dev
);
964 mutex_lock(&phydev
->lock
);
965 phydev
->state
= PHY_DOWN
;
966 mutex_unlock(&phydev
->lock
);
968 if (phydev
->drv
->remove
)
969 phydev
->drv
->remove(phydev
);
971 put_driver(dev
->driver
);
978 * phy_driver_register - register a phy_driver with the PHY layer
979 * @new_driver: new phy_driver to register
981 int phy_driver_register(struct phy_driver
*new_driver
)
985 new_driver
->driver
.name
= new_driver
->name
;
986 new_driver
->driver
.bus
= &mdio_bus_type
;
987 new_driver
->driver
.probe
= phy_probe
;
988 new_driver
->driver
.remove
= phy_remove
;
990 retval
= driver_register(&new_driver
->driver
);
993 printk(KERN_ERR
"%s: Error %d in registering driver\n",
994 new_driver
->name
, retval
);
999 pr_debug("%s: Registered new driver\n", new_driver
->name
);
1003 EXPORT_SYMBOL(phy_driver_register
);
1005 void phy_driver_unregister(struct phy_driver
*drv
)
1007 driver_unregister(&drv
->driver
);
1009 EXPORT_SYMBOL(phy_driver_unregister
);
1011 static struct phy_driver genphy_driver
= {
1012 .phy_id
= 0xffffffff,
1013 .phy_id_mask
= 0xffffffff,
1014 .name
= "Generic PHY",
1015 .config_init
= genphy_config_init
,
1017 .config_aneg
= genphy_config_aneg
,
1018 .read_status
= genphy_read_status
,
1019 .suspend
= genphy_suspend
,
1020 .resume
= genphy_resume
,
1021 .driver
= {.owner
= THIS_MODULE
, },
1024 static int __init
phy_init(void)
1028 rc
= mdio_bus_init();
1032 rc
= phy_driver_register(&genphy_driver
);
1039 static void __exit
phy_exit(void)
1041 phy_driver_unregister(&genphy_driver
);
1045 subsys_initcall(phy_init
);
1046 module_exit(phy_exit
);