diff options
author | Shaohui Xie <Shaohui.Xie@freescale.com> | 2014-01-10 01:27:22 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-01-13 17:29:49 -0500 |
commit | ab2145edb5e2db4d40320331140711659e91fb99 (patch) | |
tree | 17ad425c997e302d3f8919d4bd7b3ec5991a11e1 /drivers/net/phy | |
parent | 898dd0bda366edd0b077db4389a26c00509c73c9 (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.c | 29 |
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 | ||
53 | static struct phy_driver genphy_driver; | 53 | enum genphy_driver { |
54 | GENPHY_DRV_1G, | ||
55 | GENPHY_DRV_MAX | ||
56 | }; | ||
57 | |||
58 | static struct phy_driver genphy_driver[GENPHY_DRV_MAX]; | ||
54 | 59 | ||
55 | static LIST_HEAD(phy_fixup_list); | 60 | static LIST_HEAD(phy_fixup_list); |
56 | static DEFINE_MUTEX(phy_fixup_lock); | 61 | static 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 | */ |
659 | void phy_detach(struct phy_device *phydev) | 664 | void 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 | } |
673 | EXPORT_SYMBOL(phy_detach); | 683 | EXPORT_SYMBOL(phy_detach); |
674 | 684 | ||
@@ -1173,7 +1183,8 @@ void phy_drivers_unregister(struct phy_driver *drv, int n) | |||
1173 | } | 1183 | } |
1174 | EXPORT_SYMBOL(phy_drivers_unregister); | 1184 | EXPORT_SYMBOL(phy_drivers_unregister); |
1175 | 1185 | ||
1176 | static struct phy_driver genphy_driver = { | 1186 | static 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 | ||
1189 | static int __init phy_init(void) | 1200 | static 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 | ||
1204 | static void __exit phy_exit(void) | 1216 | static 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 | ||