Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
phy_device.c
Go to the documentation of this file.
1 /*
2  * drivers/net/phy/phy_device.c
3  *
4  * Framework for finding and configuring PHYs.
5  * Also contains generic PHY driver
6  *
7  * Author: Andy Fleming
8  *
9  * Copyright (c) 2004 Freescale Semiconductor, Inc.
10  *
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.
15  *
16  */
17 
18 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
19 
20 #include <linux/kernel.h>
21 #include <linux/string.h>
22 #include <linux/errno.h>
23 #include <linux/unistd.h>
24 #include <linux/slab.h>
25 #include <linux/interrupt.h>
26 #include <linux/init.h>
27 #include <linux/delay.h>
28 #include <linux/netdevice.h>
29 #include <linux/etherdevice.h>
30 #include <linux/skbuff.h>
31 #include <linux/mm.h>
32 #include <linux/module.h>
33 #include <linux/mii.h>
34 #include <linux/ethtool.h>
35 #include <linux/phy.h>
36 
37 #include <asm/io.h>
38 #include <asm/irq.h>
39 #include <asm/uaccess.h>
40 
41 MODULE_DESCRIPTION("PHY library");
42 MODULE_AUTHOR("Andy Fleming");
43 MODULE_LICENSE("GPL");
44 
45 void phy_device_free(struct phy_device *phydev)
46 {
47  kfree(phydev);
48 }
50 
51 static void phy_device_release(struct device *dev)
52 {
54 }
55 
56 static struct phy_driver genphy_driver;
57 extern int mdio_bus_init(void);
58 extern void mdio_bus_exit(void);
59 
60 static LIST_HEAD(phy_fixup_list);
61 static DEFINE_MUTEX(phy_fixup_lock);
62 
63 static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
65 
66 /*
67  * Creates a new phy_fixup and adds it to the list
68  * @bus_id: A string which matches phydev->dev.bus_id (or PHY_ANY_ID)
69  * @phy_uid: Used to match against phydev->phy_id (the UID of the PHY)
70  * It can also be PHY_ANY_UID
71  * @phy_uid_mask: Applied to phydev->phy_id and fixup->phy_uid before
72  * comparison
73  * @run: The actual code to be run when a matching PHY is found
74  */
75 int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask,
76  int (*run)(struct phy_device *))
77 {
78  struct phy_fixup *fixup;
79 
80  fixup = kzalloc(sizeof(struct phy_fixup), GFP_KERNEL);
81  if (!fixup)
82  return -ENOMEM;
83 
84  strlcpy(fixup->bus_id, bus_id, sizeof(fixup->bus_id));
85  fixup->phy_uid = phy_uid;
86  fixup->phy_uid_mask = phy_uid_mask;
87  fixup->run = run;
88 
89  mutex_lock(&phy_fixup_lock);
90  list_add_tail(&fixup->list, &phy_fixup_list);
91  mutex_unlock(&phy_fixup_lock);
92 
93  return 0;
94 }
96 
97 /* Registers a fixup to be run on any PHY with the UID in phy_uid */
98 int phy_register_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask,
99  int (*run)(struct phy_device *))
100 {
101  return phy_register_fixup(PHY_ANY_ID, phy_uid, phy_uid_mask, run);
102 }
104 
105 /* Registers a fixup to be run on the PHY with id string bus_id */
106 int phy_register_fixup_for_id(const char *bus_id,
107  int (*run)(struct phy_device *))
108 {
109  return phy_register_fixup(bus_id, PHY_ANY_UID, 0xffffffff, run);
110 }
112 
113 /*
114  * Returns 1 if fixup matches phydev in bus_id and phy_uid.
115  * Fixups can be set to match any in one or more fields.
116  */
117 static int phy_needs_fixup(struct phy_device *phydev, struct phy_fixup *fixup)
118 {
119  if (strcmp(fixup->bus_id, dev_name(&phydev->dev)) != 0)
120  if (strcmp(fixup->bus_id, PHY_ANY_ID) != 0)
121  return 0;
122 
123  if ((fixup->phy_uid & fixup->phy_uid_mask) !=
124  (phydev->phy_id & fixup->phy_uid_mask))
125  if (fixup->phy_uid != PHY_ANY_UID)
126  return 0;
127 
128  return 1;
129 }
130 
131 /* Runs any matching fixups for this phydev */
132 int phy_scan_fixups(struct phy_device *phydev)
133 {
134  struct phy_fixup *fixup;
135 
136  mutex_lock(&phy_fixup_lock);
137  list_for_each_entry(fixup, &phy_fixup_list, list) {
138  if (phy_needs_fixup(phydev, fixup)) {
139  int err;
140 
141  err = fixup->run(phydev);
142 
143  if (err < 0) {
144  mutex_unlock(&phy_fixup_lock);
145  return err;
146  }
147  }
148  }
149  mutex_unlock(&phy_fixup_lock);
150 
151  return 0;
152 }
154 
155 struct phy_device *phy_device_create(struct mii_bus *bus, int addr, int phy_id,
156  bool is_c45, struct phy_c45_device_ids *c45_ids)
157 {
158  struct phy_device *dev;
159 
160  /* We allocate the device, and initialize the
161  * default values */
162  dev = kzalloc(sizeof(*dev), GFP_KERNEL);
163 
164  if (NULL == dev)
165  return (struct phy_device*) PTR_ERR((void*)-ENOMEM);
166 
167  dev->dev.release = phy_device_release;
168 
169  dev->speed = 0;
170  dev->duplex = -1;
171  dev->pause = dev->asym_pause = 0;
172  dev->link = 1;
174 
175  dev->autoneg = AUTONEG_ENABLE;
176 
177  dev->is_c45 = is_c45;
178  dev->addr = addr;
179  dev->phy_id = phy_id;
180  if (c45_ids)
181  dev->c45_ids = *c45_ids;
182  dev->bus = bus;
183  dev->dev.parent = bus->parent;
184  dev->dev.bus = &mdio_bus_type;
185  dev->irq = bus->irq != NULL ? bus->irq[addr] : PHY_POLL;
186  dev_set_name(&dev->dev, PHY_ID_FMT, bus->id, addr);
187 
188  dev->state = PHY_DOWN;
189 
190  mutex_init(&dev->lock);
192 
193  /* Request the appropriate module unconditionally; don't
194  bother trying to do so only if it isn't already loaded,
195  because that gets complicated. A hotplug event would have
196  done an unconditional modprobe anyway.
197  We don't do normal hotplug because it won't work for MDIO
198  -- because it relies on the device staying around for long
199  enough for the driver to get loaded. With MDIO, the NIC
200  driver will get bored and give up as soon as it finds that
201  there's no driver _already_ loaded. */
202  request_module(MDIO_MODULE_PREFIX MDIO_ID_FMT, MDIO_ID_ARGS(phy_id));
203 
204  return dev;
205 }
207 
221 static int get_phy_c45_ids(struct mii_bus *bus, int addr, u32 *phy_id,
222  struct phy_c45_device_ids *c45_ids) {
223  int phy_reg;
224  int i, reg_addr;
225  const int num_ids = ARRAY_SIZE(c45_ids->device_ids);
226 
227  /* Find first non-zero Devices In package. Device
228  * zero is reserved, so don't probe it.
229  */
230  for (i = 1;
231  i < num_ids && c45_ids->devices_in_package == 0;
232  i++) {
233  reg_addr = MII_ADDR_C45 | i << 16 | 6;
234  phy_reg = mdiobus_read(bus, addr, reg_addr);
235  if (phy_reg < 0)
236  return -EIO;
237  c45_ids->devices_in_package = (phy_reg & 0xffff) << 16;
238 
239  reg_addr = MII_ADDR_C45 | i << 16 | 5;
240  phy_reg = mdiobus_read(bus, addr, reg_addr);
241  if (phy_reg < 0)
242  return -EIO;
243  c45_ids->devices_in_package |= (phy_reg & 0xffff);
244 
245  /* If mostly Fs, there is no device there,
246  * let's get out of here.
247  */
248  if ((c45_ids->devices_in_package & 0x1fffffff) == 0x1fffffff) {
249  *phy_id = 0xffffffff;
250  return 0;
251  }
252  }
253 
254  /* Now probe Device Identifiers for each device present. */
255  for (i = 1; i < num_ids; i++) {
256  if (!(c45_ids->devices_in_package & (1 << i)))
257  continue;
258 
259  reg_addr = MII_ADDR_C45 | i << 16 | MII_PHYSID1;
260  phy_reg = mdiobus_read(bus, addr, reg_addr);
261  if (phy_reg < 0)
262  return -EIO;
263  c45_ids->device_ids[i] = (phy_reg & 0xffff) << 16;
264 
265  reg_addr = MII_ADDR_C45 | i << 16 | MII_PHYSID2;
266  phy_reg = mdiobus_read(bus, addr, reg_addr);
267  if (phy_reg < 0)
268  return -EIO;
269  c45_ids->device_ids[i] |= (phy_reg & 0xffff);
270  }
271  *phy_id = 0;
272  return 0;
273 }
274 
291 static int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id,
292  bool is_c45, struct phy_c45_device_ids *c45_ids)
293 {
294  int phy_reg;
295 
296  if (is_c45)
297  return get_phy_c45_ids(bus, addr, phy_id, c45_ids);
298 
299  /* Grab the bits from PHYIR1, and put them
300  * in the upper half */
301  phy_reg = mdiobus_read(bus, addr, MII_PHYSID1);
302 
303  if (phy_reg < 0)
304  return -EIO;
305 
306  *phy_id = (phy_reg & 0xffff) << 16;
307 
308  /* Grab the bits from PHYIR2, and put them in the lower half */
309  phy_reg = mdiobus_read(bus, addr, MII_PHYSID2);
310 
311  if (phy_reg < 0)
312  return -EIO;
313 
314  *phy_id |= (phy_reg & 0xffff);
315 
316  return 0;
317 }
318 
328 struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45)
329 {
330  struct phy_c45_device_ids c45_ids = {0};
331  struct phy_device *dev = NULL;
332  u32 phy_id = 0;
333  int r;
334 
335  r = get_phy_id(bus, addr, &phy_id, is_c45, &c45_ids);
336  if (r)
337  return ERR_PTR(r);
338 
339  /* If the phy_id is mostly Fs, there is no device there */
340  if ((phy_id & 0x1fffffff) == 0x1fffffff)
341  return NULL;
342 
343  dev = phy_device_create(bus, addr, phy_id, is_c45, &c45_ids);
344 
345  return dev;
346 }
348 
353 int phy_device_register(struct phy_device *phydev)
354 {
355  int err;
356 
357  /* Don't register a phy if one is already registered at this
358  * address */
359  if (phydev->bus->phy_map[phydev->addr])
360  return -EINVAL;
361  phydev->bus->phy_map[phydev->addr] = phydev;
362 
363  /* Run all of the fixups for this PHY */
364  phy_scan_fixups(phydev);
365 
366  err = device_register(&phydev->dev);
367  if (err) {
368  pr_err("phy %d failed to register\n", phydev->addr);
369  goto out;
370  }
371 
372  return 0;
373 
374  out:
375  phydev->bus->phy_map[phydev->addr] = NULL;
376  return err;
377 }
379 
384 struct phy_device *phy_find_first(struct mii_bus *bus)
385 {
386  int addr;
387 
388  for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
389  if (bus->phy_map[addr])
390  return bus->phy_map[addr];
391  }
392  return NULL;
393 }
395 
408 static void phy_prepare_link(struct phy_device *phydev,
409  void (*handler)(struct net_device *))
410 {
411  phydev->adjust_link = handler;
412 }
413 
422 int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
423  void (*handler)(struct net_device *), u32 flags,
425 {
426  int rc;
427 
428  rc = phy_attach_direct(dev, phydev, flags, interface);
429  if (rc)
430  return rc;
431 
432  phy_prepare_link(phydev, handler);
433  phy_start_machine(phydev, NULL);
434  if (phydev->irq > 0)
435  phy_start_interrupts(phydev);
436 
437  return 0;
438 }
440 
457 struct phy_device * phy_connect(struct net_device *dev, const char *bus_id,
458  void (*handler)(struct net_device *), u32 flags,
460 {
461  struct phy_device *phydev;
462  struct device *d;
463  int rc;
464 
465  /* Search the list of PHY devices on the mdio bus for the
466  * PHY with the requested name */
468  if (!d) {
469  pr_err("PHY %s not found\n", bus_id);
470  return ERR_PTR(-ENODEV);
471  }
472  phydev = to_phy_device(d);
473 
474  rc = phy_connect_direct(dev, phydev, handler, flags, interface);
475  if (rc)
476  return ERR_PTR(rc);
477 
478  return phydev;
479 }
481 
486 void phy_disconnect(struct phy_device *phydev)
487 {
488  if (phydev->irq > 0)
489  phy_stop_interrupts(phydev);
490 
491  phy_stop_machine(phydev);
492 
493  phydev->adjust_link = NULL;
494 
495  phy_detach(phydev);
496 }
498 
499 int phy_init_hw(struct phy_device *phydev)
500 {
501  int ret;
502 
503  if (!phydev->drv || !phydev->drv->config_init)
504  return 0;
505 
506  ret = phy_scan_fixups(phydev);
507  if (ret < 0)
508  return ret;
509 
510  return phydev->drv->config_init(phydev);
511 }
512 
527 static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
529 {
530  struct device *d = &phydev->dev;
531  int err;
532 
533  /* Assume that if there is no driver, that it doesn't
534  * exist, and we should use the genphy driver. */
535  if (NULL == d->driver) {
536  if (phydev->is_c45) {
537  pr_err("No driver for phy %x\n", phydev->phy_id);
538  return -ENODEV;
539  }
540 
541  d->driver = &genphy_driver.driver;
542 
543  err = d->driver->probe(d);
544  if (err >= 0)
545  err = device_bind_driver(d);
546 
547  if (err)
548  return err;
549  }
550 
551  if (phydev->attached_dev) {
552  dev_err(&dev->dev, "PHY already attached\n");
553  return -EBUSY;
554  }
555 
556  phydev->attached_dev = dev;
557  dev->phydev = phydev;
558 
559  phydev->dev_flags = flags;
560 
561  phydev->interface = interface;
562 
563  phydev->state = PHY_READY;
564 
565  /* Do initial configuration here, now that
566  * we have certain key parameters
567  * (dev_flags and interface) */
568  err = phy_init_hw(phydev);
569  if (err)
570  phy_detach(phydev);
571 
572  return err;
573 }
574 
585 struct phy_device *phy_attach(struct net_device *dev,
586  const char *bus_id, u32 flags, phy_interface_t interface)
587 {
588  struct bus_type *bus = &mdio_bus_type;
589  struct phy_device *phydev;
590  struct device *d;
591  int rc;
592 
593  /* Search the list of PHY devices on the mdio bus for the
594  * PHY with the requested name */
595  d = bus_find_device_by_name(bus, NULL, bus_id);
596  if (!d) {
597  pr_err("PHY %s not found\n", bus_id);
598  return ERR_PTR(-ENODEV);
599  }
600  phydev = to_phy_device(d);
601 
602  rc = phy_attach_direct(dev, phydev, flags, interface);
603  if (rc)
604  return ERR_PTR(rc);
605 
606  return phydev;
607 }
609 
614 void phy_detach(struct phy_device *phydev)
615 {
616  phydev->attached_dev->phydev = NULL;
617  phydev->attached_dev = NULL;
618 
619  /* If the device had no specific driver before (i.e. - it
620  * was using the generic driver), we unbind the device
621  * from the generic driver so that there's a chance a
622  * real driver could be loaded */
623  if (phydev->dev.driver == &genphy_driver.driver)
624  device_release_driver(&phydev->dev);
625 }
627 
628 
629 /* Generic PHY support and helper functions */
630 
640 static int genphy_config_advert(struct phy_device *phydev)
641 {
642  u32 advertise;
643  int oldadv, adv;
644  int err, changed = 0;
645 
646  /* Only allow advertising what
647  * this PHY supports */
648  phydev->advertising &= phydev->supported;
649  advertise = phydev->advertising;
650 
651  /* Setup standard advertisement */
652  oldadv = adv = phy_read(phydev, MII_ADVERTISE);
653 
654  if (adv < 0)
655  return adv;
656 
659  adv |= ethtool_adv_to_mii_adv_t(advertise);
660 
661  if (adv != oldadv) {
662  err = phy_write(phydev, MII_ADVERTISE, adv);
663 
664  if (err < 0)
665  return err;
666  changed = 1;
667  }
668 
669  /* Configure gigabit if it's supported */
670  if (phydev->supported & (SUPPORTED_1000baseT_Half |
672  oldadv = adv = phy_read(phydev, MII_CTRL1000);
673 
674  if (adv < 0)
675  return adv;
676 
678  adv |= ethtool_adv_to_mii_ctrl1000_t(advertise);
679 
680  if (adv != oldadv) {
681  err = phy_write(phydev, MII_CTRL1000, adv);
682 
683  if (err < 0)
684  return err;
685  changed = 1;
686  }
687  }
688 
689  return changed;
690 }
691 
700 static int genphy_setup_forced(struct phy_device *phydev)
701 {
702  int err;
703  int ctl = 0;
704 
705  phydev->pause = phydev->asym_pause = 0;
706 
707  if (SPEED_1000 == phydev->speed)
708  ctl |= BMCR_SPEED1000;
709  else if (SPEED_100 == phydev->speed)
710  ctl |= BMCR_SPEED100;
711 
712  if (DUPLEX_FULL == phydev->duplex)
713  ctl |= BMCR_FULLDPLX;
714 
715  err = phy_write(phydev, MII_BMCR, ctl);
716 
717  return err;
718 }
719 
720 
725 int genphy_restart_aneg(struct phy_device *phydev)
726 {
727  int ctl;
728 
729  ctl = phy_read(phydev, MII_BMCR);
730 
731  if (ctl < 0)
732  return ctl;
733 
734  ctl |= (BMCR_ANENABLE | BMCR_ANRESTART);
735 
736  /* Don't isolate the PHY if we're negotiating */
737  ctl &= ~(BMCR_ISOLATE);
738 
739  ctl = phy_write(phydev, MII_BMCR, ctl);
740 
741  return ctl;
742 }
744 
745 
754 int genphy_config_aneg(struct phy_device *phydev)
755 {
756  int result;
757 
758  if (AUTONEG_ENABLE != phydev->autoneg)
759  return genphy_setup_forced(phydev);
760 
761  result = genphy_config_advert(phydev);
762 
763  if (result < 0) /* error */
764  return result;
765 
766  if (result == 0) {
767  /* Advertisement hasn't changed, but maybe aneg was never on to
768  * begin with? Or maybe phy was isolated? */
769  int ctl = phy_read(phydev, MII_BMCR);
770 
771  if (ctl < 0)
772  return ctl;
773 
774  if (!(ctl & BMCR_ANENABLE) || (ctl & BMCR_ISOLATE))
775  result = 1; /* do restart aneg */
776  }
777 
778  /* Only restart aneg if we are advertising something different
779  * than we were before. */
780  if (result > 0)
781  result = genphy_restart_aneg(phydev);
782 
783  return result;
784 }
786 
795 int genphy_update_link(struct phy_device *phydev)
796 {
797  int status;
798 
799  /* Do a fake read */
800  status = phy_read(phydev, MII_BMSR);
801 
802  if (status < 0)
803  return status;
804 
805  /* Read link and autonegotiation status */
806  status = phy_read(phydev, MII_BMSR);
807 
808  if (status < 0)
809  return status;
810 
811  if ((status & BMSR_LSTATUS) == 0)
812  phydev->link = 0;
813  else
814  phydev->link = 1;
815 
816  return 0;
817 }
819 
829 int genphy_read_status(struct phy_device *phydev)
830 {
831  int adv;
832  int err;
833  int lpa;
834  int lpagb = 0;
835 
836  /* Update the link, but return if there
837  * was an error */
838  err = genphy_update_link(phydev);
839  if (err)
840  return err;
841 
842  if (AUTONEG_ENABLE == phydev->autoneg) {
843  if (phydev->supported & (SUPPORTED_1000baseT_Half
845  lpagb = phy_read(phydev, MII_STAT1000);
846 
847  if (lpagb < 0)
848  return lpagb;
849 
850  adv = phy_read(phydev, MII_CTRL1000);
851 
852  if (adv < 0)
853  return adv;
854 
855  lpagb &= adv << 2;
856  }
857 
858  lpa = phy_read(phydev, MII_LPA);
859 
860  if (lpa < 0)
861  return lpa;
862 
863  adv = phy_read(phydev, MII_ADVERTISE);
864 
865  if (adv < 0)
866  return adv;
867 
868  lpa &= adv;
869 
870  phydev->speed = SPEED_10;
871  phydev->duplex = DUPLEX_HALF;
872  phydev->pause = phydev->asym_pause = 0;
873 
874  if (lpagb & (LPA_1000FULL | LPA_1000HALF)) {
875  phydev->speed = SPEED_1000;
876 
877  if (lpagb & LPA_1000FULL)
878  phydev->duplex = DUPLEX_FULL;
879  } else if (lpa & (LPA_100FULL | LPA_100HALF)) {
880  phydev->speed = SPEED_100;
881 
882  if (lpa & LPA_100FULL)
883  phydev->duplex = DUPLEX_FULL;
884  } else
885  if (lpa & LPA_10FULL)
886  phydev->duplex = DUPLEX_FULL;
887 
888  if (phydev->duplex == DUPLEX_FULL){
889  phydev->pause = lpa & LPA_PAUSE_CAP ? 1 : 0;
890  phydev->asym_pause = lpa & LPA_PAUSE_ASYM ? 1 : 0;
891  }
892  } else {
893  int bmcr = phy_read(phydev, MII_BMCR);
894  if (bmcr < 0)
895  return bmcr;
896 
897  if (bmcr & BMCR_FULLDPLX)
898  phydev->duplex = DUPLEX_FULL;
899  else
900  phydev->duplex = DUPLEX_HALF;
901 
902  if (bmcr & BMCR_SPEED1000)
903  phydev->speed = SPEED_1000;
904  else if (bmcr & BMCR_SPEED100)
905  phydev->speed = SPEED_100;
906  else
907  phydev->speed = SPEED_10;
908 
909  phydev->pause = phydev->asym_pause = 0;
910  }
911 
912  return 0;
913 }
915 
916 static int genphy_config_init(struct phy_device *phydev)
917 {
918  int val;
919  u32 features;
920 
921  /* For now, I'll claim that the generic driver supports
922  * all possible port types */
923  features = (SUPPORTED_TP | SUPPORTED_MII
925  SUPPORTED_BNC);
926 
927  /* Do we support autonegotiation? */
928  val = phy_read(phydev, MII_BMSR);
929 
930  if (val < 0)
931  return val;
932 
933  if (val & BMSR_ANEGCAPABLE)
934  features |= SUPPORTED_Autoneg;
935 
936  if (val & BMSR_100FULL)
937  features |= SUPPORTED_100baseT_Full;
938  if (val & BMSR_100HALF)
939  features |= SUPPORTED_100baseT_Half;
940  if (val & BMSR_10FULL)
941  features |= SUPPORTED_10baseT_Full;
942  if (val & BMSR_10HALF)
943  features |= SUPPORTED_10baseT_Half;
944 
945  if (val & BMSR_ESTATEN) {
946  val = phy_read(phydev, MII_ESTATUS);
947 
948  if (val < 0)
949  return val;
950 
951  if (val & ESTATUS_1000_TFULL)
952  features |= SUPPORTED_1000baseT_Full;
953  if (val & ESTATUS_1000_THALF)
954  features |= SUPPORTED_1000baseT_Half;
955  }
956 
957  phydev->supported = features;
958  phydev->advertising = features;
959 
960  return 0;
961 }
962 int genphy_suspend(struct phy_device *phydev)
963 {
964  int value;
965 
966  mutex_lock(&phydev->lock);
967 
968  value = phy_read(phydev, MII_BMCR);
969  phy_write(phydev, MII_BMCR, (value | BMCR_PDOWN));
970 
971  mutex_unlock(&phydev->lock);
972 
973  return 0;
974 }
976 
977 int genphy_resume(struct phy_device *phydev)
978 {
979  int value;
980 
981  mutex_lock(&phydev->lock);
982 
983  value = phy_read(phydev, MII_BMCR);
984  phy_write(phydev, MII_BMCR, (value & ~BMCR_PDOWN));
985 
986  mutex_unlock(&phydev->lock);
987 
988  return 0;
989 }
991 
1000 static int phy_probe(struct device *dev)
1001 {
1002  struct phy_device *phydev;
1003  struct phy_driver *phydrv;
1004  struct device_driver *drv;
1005  int err = 0;
1006 
1007  phydev = to_phy_device(dev);
1008 
1009  drv = phydev->dev.driver;
1010  phydrv = to_phy_driver(drv);
1011  phydev->drv = phydrv;
1012 
1013  /* Disable the interrupt if the PHY doesn't support it */
1014  if (!(phydrv->flags & PHY_HAS_INTERRUPT))
1015  phydev->irq = PHY_POLL;
1016 
1017  mutex_lock(&phydev->lock);
1018 
1019  /* Start out supporting everything. Eventually,
1020  * a controller will attach, and may modify one
1021  * or both of these values */
1022  phydev->supported = phydrv->features;
1023  phydev->advertising = phydrv->features;
1024 
1025  /* Set the state to READY by default */
1026  phydev->state = PHY_READY;
1027 
1028  if (phydev->drv->probe)
1029  err = phydev->drv->probe(phydev);
1030 
1031  mutex_unlock(&phydev->lock);
1032 
1033  return err;
1034 
1035 }
1036 
1037 static int phy_remove(struct device *dev)
1038 {
1039  struct phy_device *phydev;
1040 
1041  phydev = to_phy_device(dev);
1042 
1043  mutex_lock(&phydev->lock);
1044  phydev->state = PHY_DOWN;
1045  mutex_unlock(&phydev->lock);
1046 
1047  if (phydev->drv->remove)
1048  phydev->drv->remove(phydev);
1049  phydev->drv = NULL;
1050 
1051  return 0;
1052 }
1053 
1058 int phy_driver_register(struct phy_driver *new_driver)
1059 {
1060  int retval;
1061 
1062  new_driver->driver.name = new_driver->name;
1063  new_driver->driver.bus = &mdio_bus_type;
1064  new_driver->driver.probe = phy_probe;
1065  new_driver->driver.remove = phy_remove;
1066 
1067  retval = driver_register(&new_driver->driver);
1068 
1069  if (retval) {
1070  pr_err("%s: Error %d in registering driver\n",
1071  new_driver->name, retval);
1072 
1073  return retval;
1074  }
1075 
1076  pr_debug("%s: Registered new driver\n", new_driver->name);
1077 
1078  return 0;
1079 }
1081 
1082 int phy_drivers_register(struct phy_driver *new_driver, int n)
1083 {
1084  int i, ret = 0;
1085 
1086  for (i = 0; i < n; i++) {
1087  ret = phy_driver_register(new_driver + i);
1088  if (ret) {
1089  while (i-- > 0)
1090  phy_driver_unregister(new_driver + i);
1091  break;
1092  }
1093  }
1094  return ret;
1095 }
1097 
1099 {
1100  driver_unregister(&drv->driver);
1101 }
1103 
1104 void phy_drivers_unregister(struct phy_driver *drv, int n)
1105 {
1106  int i;
1107  for (i = 0; i < n; i++) {
1108  phy_driver_unregister(drv + i);
1109  }
1110 }
1112 
1113 static struct phy_driver genphy_driver = {
1114  .phy_id = 0xffffffff,
1115  .phy_id_mask = 0xffffffff,
1116  .name = "Generic PHY",
1117  .config_init = genphy_config_init,
1118  .features = 0,
1119  .config_aneg = genphy_config_aneg,
1120  .read_status = genphy_read_status,
1121  .suspend = genphy_suspend,
1122  .resume = genphy_resume,
1123  .driver = {.owner= THIS_MODULE, },
1124 };
1125 
1126 static int __init phy_init(void)
1127 {
1128  int rc;
1129 
1130  rc = mdio_bus_init();
1131  if (rc)
1132  return rc;
1133 
1134  rc = phy_driver_register(&genphy_driver);
1135  if (rc)
1136  mdio_bus_exit();
1137 
1138  return rc;
1139 }
1140 
1141 static void __exit phy_exit(void)
1142 {
1143  phy_driver_unregister(&genphy_driver);
1144  mdio_bus_exit();
1145 }
1146 
1147 subsys_initcall(phy_init);
1148 module_exit(phy_exit);