aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/phy
diff options
context:
space:
mode:
authorShaohui Xie <Shaohui.Xie@freescale.com>2014-01-10 01:27:22 -0500
committerDavid S. Miller <davem@davemloft.net>2014-01-13 17:29:49 -0500
commitab2145edb5e2db4d40320331140711659e91fb99 (patch)
tree17ad425c997e302d3f8919d4bd7b3ec5991a11e1 /drivers/net/phy
parent898dd0bda366edd0b077db4389a26c00509c73c9 (diff)
phylib: turn genphy_driver to an array
Then other generic phy driver such as generic 10g phy driver can join it. Signed-off-by: Shaohui Xie <Shaohui.Xie@freescale.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/phy')
-rw-r--r--drivers/net/phy/phy_device.c29
1 files changed, 21 insertions, 8 deletions
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index 5d81c89ee52b..1cde2b2aead0 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -50,7 +50,12 @@ static void phy_device_release(struct device *dev)
50 kfree(to_phy_device(dev)); 50 kfree(to_phy_device(dev));
51} 51}
52 52
53static struct phy_driver genphy_driver; 53enum genphy_driver {
54 GENPHY_DRV_1G,
55 GENPHY_DRV_MAX
56};
57
58static struct phy_driver genphy_driver[GENPHY_DRV_MAX];
54 59
55static LIST_HEAD(phy_fixup_list); 60static LIST_HEAD(phy_fixup_list);
56static DEFINE_MUTEX(phy_fixup_lock); 61static DEFINE_MUTEX(phy_fixup_lock);
@@ -580,7 +585,7 @@ static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
580 return -ENODEV; 585 return -ENODEV;
581 } 586 }
582 587
583 d->driver = &genphy_driver.driver; 588 d->driver = &genphy_driver[GENPHY_DRV_1G].driver;
584 589
585 err = d->driver->probe(d); 590 err = d->driver->probe(d);
586 if (err >= 0) 591 if (err >= 0)
@@ -658,6 +663,7 @@ EXPORT_SYMBOL(phy_attach);
658 */ 663 */
659void phy_detach(struct phy_device *phydev) 664void phy_detach(struct phy_device *phydev)
660{ 665{
666 int i;
661 phydev->attached_dev->phydev = NULL; 667 phydev->attached_dev->phydev = NULL;
662 phydev->attached_dev = NULL; 668 phydev->attached_dev = NULL;
663 phy_suspend(phydev); 669 phy_suspend(phydev);
@@ -667,8 +673,12 @@ void phy_detach(struct phy_device *phydev)
667 * from the generic driver so that there's a chance a 673 * from the generic driver so that there's a chance a
668 * real driver could be loaded 674 * real driver could be loaded
669 */ 675 */
670 if (phydev->dev.driver == &genphy_driver.driver) 676 for (i = 0; i < ARRAY_SIZE(genphy_driver); i++) {
671 device_release_driver(&phydev->dev); 677 if (phydev->dev.driver == &genphy_driver[i].driver) {
678 device_release_driver(&phydev->dev);
679 break;
680 }
681 }
672} 682}
673EXPORT_SYMBOL(phy_detach); 683EXPORT_SYMBOL(phy_detach);
674 684
@@ -1173,7 +1183,8 @@ void phy_drivers_unregister(struct phy_driver *drv, int n)
1173} 1183}
1174EXPORT_SYMBOL(phy_drivers_unregister); 1184EXPORT_SYMBOL(phy_drivers_unregister);
1175 1185
1176static struct phy_driver genphy_driver = { 1186static struct phy_driver genphy_driver[] = {
1187{
1177 .phy_id = 0xffffffff, 1188 .phy_id = 0xffffffff,
1178 .phy_id_mask = 0xffffffff, 1189 .phy_id_mask = 0xffffffff,
1179 .name = "Generic PHY", 1190 .name = "Generic PHY",
@@ -1184,7 +1195,7 @@ static struct phy_driver genphy_driver = {
1184 .suspend = genphy_suspend, 1195 .suspend = genphy_suspend,
1185 .resume = genphy_resume, 1196 .resume = genphy_resume,
1186 .driver = { .owner = THIS_MODULE, }, 1197 .driver = { .owner = THIS_MODULE, },
1187}; 1198} };
1188 1199
1189static int __init phy_init(void) 1200static int __init phy_init(void)
1190{ 1201{
@@ -1194,7 +1205,8 @@ static int __init phy_init(void)
1194 if (rc) 1205 if (rc)
1195 return rc; 1206 return rc;
1196 1207
1197 rc = phy_driver_register(&genphy_driver); 1208 rc = phy_drivers_register(genphy_driver,
1209 ARRAY_SIZE(genphy_driver));
1198 if (rc) 1210 if (rc)
1199 mdio_bus_exit(); 1211 mdio_bus_exit();
1200 1212
@@ -1203,7 +1215,8 @@ static int __init phy_init(void)
1203 1215
1204static void __exit phy_exit(void) 1216static void __exit phy_exit(void)
1205{ 1217{
1206 phy_driver_unregister(&genphy_driver); 1218 phy_drivers_unregister(genphy_driver,
1219 ARRAY_SIZE(genphy_driver));
1207 mdio_bus_exit(); 1220 mdio_bus_exit();
1208} 1221}
1209 1222