aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/phy/micrel.c
diff options
context:
space:
mode:
authorChristian Hohnstaedt <chohnstaedt@innominate.com>2012-07-04 01:44:34 -0400
committerDavid S. Miller <davem@davemloft.net>2012-07-09 03:10:56 -0400
commitd5bf9071e71a4db85a0eea6236ef94a29fc3eec9 (patch)
treecf91cd107a5eda19dc8a1024b0c9b2115edf4988 /drivers/net/phy/micrel.c
parent567990cfccafc580b03b1fb501adf63132c12dcc (diff)
phylib: Support registering a bunch of drivers
If registering of one of them fails, all already registered drivers of this module will be unregistered. Use the new register/unregister functions in all drivers registering more than one driver. amd.c, realtek.c: Simplify: directly return registration result. Tested with broadcom.c All others compile-tested. Signed-off-by: Christian Hohnstaedt <chohnstaedt@innominate.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/phy/micrel.c')
-rw-r--r--drivers/net/phy/micrel.c62
1 files changed, 11 insertions, 51 deletions
diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
index 9d6c80c8a0cf..cf287e0eb408 100644
--- a/drivers/net/phy/micrel.c
+++ b/drivers/net/phy/micrel.c
@@ -114,7 +114,8 @@ static int ks8051_config_init(struct phy_device *phydev)
114 return 0; 114 return 0;
115} 115}
116 116
117static struct phy_driver ks8737_driver = { 117static struct phy_driver ksphy_driver[] = {
118{
118 .phy_id = PHY_ID_KS8737, 119 .phy_id = PHY_ID_KS8737,
119 .phy_id_mask = 0x00fffff0, 120 .phy_id_mask = 0x00fffff0,
120 .name = "Micrel KS8737", 121 .name = "Micrel KS8737",
@@ -126,9 +127,7 @@ static struct phy_driver ks8737_driver = {
126 .ack_interrupt = kszphy_ack_interrupt, 127 .ack_interrupt = kszphy_ack_interrupt,
127 .config_intr = ks8737_config_intr, 128 .config_intr = ks8737_config_intr,
128 .driver = { .owner = THIS_MODULE,}, 129 .driver = { .owner = THIS_MODULE,},
129}; 130}, {
130
131static struct phy_driver ks8041_driver = {
132 .phy_id = PHY_ID_KS8041, 131 .phy_id = PHY_ID_KS8041,
133 .phy_id_mask = 0x00fffff0, 132 .phy_id_mask = 0x00fffff0,
134 .name = "Micrel KS8041", 133 .name = "Micrel KS8041",
@@ -141,9 +140,7 @@ static struct phy_driver ks8041_driver = {
141 .ack_interrupt = kszphy_ack_interrupt, 140 .ack_interrupt = kszphy_ack_interrupt,
142 .config_intr = kszphy_config_intr, 141 .config_intr = kszphy_config_intr,
143 .driver = { .owner = THIS_MODULE,}, 142 .driver = { .owner = THIS_MODULE,},
144}; 143}, {
145
146static struct phy_driver ks8051_driver = {
147 .phy_id = PHY_ID_KS8051, 144 .phy_id = PHY_ID_KS8051,
148 .phy_id_mask = 0x00fffff0, 145 .phy_id_mask = 0x00fffff0,
149 .name = "Micrel KS8051", 146 .name = "Micrel KS8051",
@@ -156,9 +153,7 @@ static struct phy_driver ks8051_driver = {
156 .ack_interrupt = kszphy_ack_interrupt, 153 .ack_interrupt = kszphy_ack_interrupt,
157 .config_intr = kszphy_config_intr, 154 .config_intr = kszphy_config_intr,
158 .driver = { .owner = THIS_MODULE,}, 155 .driver = { .owner = THIS_MODULE,},
159}; 156}, {
160
161static struct phy_driver ks8001_driver = {
162 .phy_id = PHY_ID_KS8001, 157 .phy_id = PHY_ID_KS8001,
163 .name = "Micrel KS8001 or KS8721", 158 .name = "Micrel KS8001 or KS8721",
164 .phy_id_mask = 0x00ffffff, 159 .phy_id_mask = 0x00ffffff,
@@ -170,9 +165,7 @@ static struct phy_driver ks8001_driver = {
170 .ack_interrupt = kszphy_ack_interrupt, 165 .ack_interrupt = kszphy_ack_interrupt,
171 .config_intr = kszphy_config_intr, 166 .config_intr = kszphy_config_intr,
172 .driver = { .owner = THIS_MODULE,}, 167 .driver = { .owner = THIS_MODULE,},
173}; 168}, {
174
175static struct phy_driver ksz9021_driver = {
176 .phy_id = PHY_ID_KSZ9021, 169 .phy_id = PHY_ID_KSZ9021,
177 .phy_id_mask = 0x000ffffe, 170 .phy_id_mask = 0x000ffffe,
178 .name = "Micrel KSZ9021 Gigabit PHY", 171 .name = "Micrel KSZ9021 Gigabit PHY",
@@ -185,51 +178,18 @@ static struct phy_driver ksz9021_driver = {
185 .ack_interrupt = kszphy_ack_interrupt, 178 .ack_interrupt = kszphy_ack_interrupt,
186 .config_intr = ksz9021_config_intr, 179 .config_intr = ksz9021_config_intr,
187 .driver = { .owner = THIS_MODULE, }, 180 .driver = { .owner = THIS_MODULE, },
188}; 181} };
189 182
190static int __init ksphy_init(void) 183static int __init ksphy_init(void)
191{ 184{
192 int ret; 185 return phy_drivers_register(ksphy_driver,
193 186 ARRAY_SIZE(ksphy_driver));
194 ret = phy_driver_register(&ks8001_driver);
195 if (ret)
196 goto err1;
197
198 ret = phy_driver_register(&ksz9021_driver);
199 if (ret)
200 goto err2;
201
202 ret = phy_driver_register(&ks8737_driver);
203 if (ret)
204 goto err3;
205 ret = phy_driver_register(&ks8041_driver);
206 if (ret)
207 goto err4;
208 ret = phy_driver_register(&ks8051_driver);
209 if (ret)
210 goto err5;
211
212 return 0;
213
214err5:
215 phy_driver_unregister(&ks8041_driver);
216err4:
217 phy_driver_unregister(&ks8737_driver);
218err3:
219 phy_driver_unregister(&ksz9021_driver);
220err2:
221 phy_driver_unregister(&ks8001_driver);
222err1:
223 return ret;
224} 187}
225 188
226static void __exit ksphy_exit(void) 189static void __exit ksphy_exit(void)
227{ 190{
228 phy_driver_unregister(&ks8001_driver); 191 phy_drivers_unregister(ksphy_driver,
229 phy_driver_unregister(&ks8737_driver); 192 ARRAY_SIZE(ksphy_driver));
230 phy_driver_unregister(&ksz9021_driver);
231 phy_driver_unregister(&ks8041_driver);
232 phy_driver_unregister(&ks8051_driver);
233} 193}
234 194
235module_init(ksphy_init); 195module_init(ksphy_init);