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>
This commit is contained in:

committed by
David S. Miller

parent
567990cfcc
commit
d5bf9071e7
@@ -682,7 +682,8 @@ static int brcm_fet_config_intr(struct phy_device *phydev)
|
||||
return err;
|
||||
}
|
||||
|
||||
static struct phy_driver bcm5411_driver = {
|
||||
static struct phy_driver broadcom_drivers[] = {
|
||||
{
|
||||
.phy_id = PHY_ID_BCM5411,
|
||||
.phy_id_mask = 0xfffffff0,
|
||||
.name = "Broadcom BCM5411",
|
||||
@@ -695,9 +696,7 @@ static struct phy_driver bcm5411_driver = {
|
||||
.ack_interrupt = bcm54xx_ack_interrupt,
|
||||
.config_intr = bcm54xx_config_intr,
|
||||
.driver = { .owner = THIS_MODULE },
|
||||
};
|
||||
|
||||
static struct phy_driver bcm5421_driver = {
|
||||
}, {
|
||||
.phy_id = PHY_ID_BCM5421,
|
||||
.phy_id_mask = 0xfffffff0,
|
||||
.name = "Broadcom BCM5421",
|
||||
@@ -710,9 +709,7 @@ static struct phy_driver bcm5421_driver = {
|
||||
.ack_interrupt = bcm54xx_ack_interrupt,
|
||||
.config_intr = bcm54xx_config_intr,
|
||||
.driver = { .owner = THIS_MODULE },
|
||||
};
|
||||
|
||||
static struct phy_driver bcm5461_driver = {
|
||||
}, {
|
||||
.phy_id = PHY_ID_BCM5461,
|
||||
.phy_id_mask = 0xfffffff0,
|
||||
.name = "Broadcom BCM5461",
|
||||
@@ -725,9 +722,7 @@ static struct phy_driver bcm5461_driver = {
|
||||
.ack_interrupt = bcm54xx_ack_interrupt,
|
||||
.config_intr = bcm54xx_config_intr,
|
||||
.driver = { .owner = THIS_MODULE },
|
||||
};
|
||||
|
||||
static struct phy_driver bcm5464_driver = {
|
||||
}, {
|
||||
.phy_id = PHY_ID_BCM5464,
|
||||
.phy_id_mask = 0xfffffff0,
|
||||
.name = "Broadcom BCM5464",
|
||||
@@ -740,9 +735,7 @@ static struct phy_driver bcm5464_driver = {
|
||||
.ack_interrupt = bcm54xx_ack_interrupt,
|
||||
.config_intr = bcm54xx_config_intr,
|
||||
.driver = { .owner = THIS_MODULE },
|
||||
};
|
||||
|
||||
static struct phy_driver bcm5481_driver = {
|
||||
}, {
|
||||
.phy_id = PHY_ID_BCM5481,
|
||||
.phy_id_mask = 0xfffffff0,
|
||||
.name = "Broadcom BCM5481",
|
||||
@@ -755,9 +748,7 @@ static struct phy_driver bcm5481_driver = {
|
||||
.ack_interrupt = bcm54xx_ack_interrupt,
|
||||
.config_intr = bcm54xx_config_intr,
|
||||
.driver = { .owner = THIS_MODULE },
|
||||
};
|
||||
|
||||
static struct phy_driver bcm5482_driver = {
|
||||
}, {
|
||||
.phy_id = PHY_ID_BCM5482,
|
||||
.phy_id_mask = 0xfffffff0,
|
||||
.name = "Broadcom BCM5482",
|
||||
@@ -770,9 +761,7 @@ static struct phy_driver bcm5482_driver = {
|
||||
.ack_interrupt = bcm54xx_ack_interrupt,
|
||||
.config_intr = bcm54xx_config_intr,
|
||||
.driver = { .owner = THIS_MODULE },
|
||||
};
|
||||
|
||||
static struct phy_driver bcm50610_driver = {
|
||||
}, {
|
||||
.phy_id = PHY_ID_BCM50610,
|
||||
.phy_id_mask = 0xfffffff0,
|
||||
.name = "Broadcom BCM50610",
|
||||
@@ -785,9 +774,7 @@ static struct phy_driver bcm50610_driver = {
|
||||
.ack_interrupt = bcm54xx_ack_interrupt,
|
||||
.config_intr = bcm54xx_config_intr,
|
||||
.driver = { .owner = THIS_MODULE },
|
||||
};
|
||||
|
||||
static struct phy_driver bcm50610m_driver = {
|
||||
}, {
|
||||
.phy_id = PHY_ID_BCM50610M,
|
||||
.phy_id_mask = 0xfffffff0,
|
||||
.name = "Broadcom BCM50610M",
|
||||
@@ -800,9 +787,7 @@ static struct phy_driver bcm50610m_driver = {
|
||||
.ack_interrupt = bcm54xx_ack_interrupt,
|
||||
.config_intr = bcm54xx_config_intr,
|
||||
.driver = { .owner = THIS_MODULE },
|
||||
};
|
||||
|
||||
static struct phy_driver bcm57780_driver = {
|
||||
}, {
|
||||
.phy_id = PHY_ID_BCM57780,
|
||||
.phy_id_mask = 0xfffffff0,
|
||||
.name = "Broadcom BCM57780",
|
||||
@@ -815,9 +800,7 @@ static struct phy_driver bcm57780_driver = {
|
||||
.ack_interrupt = bcm54xx_ack_interrupt,
|
||||
.config_intr = bcm54xx_config_intr,
|
||||
.driver = { .owner = THIS_MODULE },
|
||||
};
|
||||
|
||||
static struct phy_driver bcmac131_driver = {
|
||||
}, {
|
||||
.phy_id = PHY_ID_BCMAC131,
|
||||
.phy_id_mask = 0xfffffff0,
|
||||
.name = "Broadcom BCMAC131",
|
||||
@@ -830,9 +813,7 @@ static struct phy_driver bcmac131_driver = {
|
||||
.ack_interrupt = brcm_fet_ack_interrupt,
|
||||
.config_intr = brcm_fet_config_intr,
|
||||
.driver = { .owner = THIS_MODULE },
|
||||
};
|
||||
|
||||
static struct phy_driver bcm5241_driver = {
|
||||
}, {
|
||||
.phy_id = PHY_ID_BCM5241,
|
||||
.phy_id_mask = 0xfffffff0,
|
||||
.name = "Broadcom BCM5241",
|
||||
@@ -845,84 +826,18 @@ static struct phy_driver bcm5241_driver = {
|
||||
.ack_interrupt = brcm_fet_ack_interrupt,
|
||||
.config_intr = brcm_fet_config_intr,
|
||||
.driver = { .owner = THIS_MODULE },
|
||||
};
|
||||
} };
|
||||
|
||||
static int __init broadcom_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = phy_driver_register(&bcm5411_driver);
|
||||
if (ret)
|
||||
goto out_5411;
|
||||
ret = phy_driver_register(&bcm5421_driver);
|
||||
if (ret)
|
||||
goto out_5421;
|
||||
ret = phy_driver_register(&bcm5461_driver);
|
||||
if (ret)
|
||||
goto out_5461;
|
||||
ret = phy_driver_register(&bcm5464_driver);
|
||||
if (ret)
|
||||
goto out_5464;
|
||||
ret = phy_driver_register(&bcm5481_driver);
|
||||
if (ret)
|
||||
goto out_5481;
|
||||
ret = phy_driver_register(&bcm5482_driver);
|
||||
if (ret)
|
||||
goto out_5482;
|
||||
ret = phy_driver_register(&bcm50610_driver);
|
||||
if (ret)
|
||||
goto out_50610;
|
||||
ret = phy_driver_register(&bcm50610m_driver);
|
||||
if (ret)
|
||||
goto out_50610m;
|
||||
ret = phy_driver_register(&bcm57780_driver);
|
||||
if (ret)
|
||||
goto out_57780;
|
||||
ret = phy_driver_register(&bcmac131_driver);
|
||||
if (ret)
|
||||
goto out_ac131;
|
||||
ret = phy_driver_register(&bcm5241_driver);
|
||||
if (ret)
|
||||
goto out_5241;
|
||||
return ret;
|
||||
|
||||
out_5241:
|
||||
phy_driver_unregister(&bcmac131_driver);
|
||||
out_ac131:
|
||||
phy_driver_unregister(&bcm57780_driver);
|
||||
out_57780:
|
||||
phy_driver_unregister(&bcm50610m_driver);
|
||||
out_50610m:
|
||||
phy_driver_unregister(&bcm50610_driver);
|
||||
out_50610:
|
||||
phy_driver_unregister(&bcm5482_driver);
|
||||
out_5482:
|
||||
phy_driver_unregister(&bcm5481_driver);
|
||||
out_5481:
|
||||
phy_driver_unregister(&bcm5464_driver);
|
||||
out_5464:
|
||||
phy_driver_unregister(&bcm5461_driver);
|
||||
out_5461:
|
||||
phy_driver_unregister(&bcm5421_driver);
|
||||
out_5421:
|
||||
phy_driver_unregister(&bcm5411_driver);
|
||||
out_5411:
|
||||
return ret;
|
||||
return phy_drivers_register(broadcom_drivers,
|
||||
ARRAY_SIZE(broadcom_drivers));
|
||||
}
|
||||
|
||||
static void __exit broadcom_exit(void)
|
||||
{
|
||||
phy_driver_unregister(&bcm5241_driver);
|
||||
phy_driver_unregister(&bcmac131_driver);
|
||||
phy_driver_unregister(&bcm57780_driver);
|
||||
phy_driver_unregister(&bcm50610m_driver);
|
||||
phy_driver_unregister(&bcm50610_driver);
|
||||
phy_driver_unregister(&bcm5482_driver);
|
||||
phy_driver_unregister(&bcm5481_driver);
|
||||
phy_driver_unregister(&bcm5464_driver);
|
||||
phy_driver_unregister(&bcm5461_driver);
|
||||
phy_driver_unregister(&bcm5421_driver);
|
||||
phy_driver_unregister(&bcm5411_driver);
|
||||
phy_drivers_unregister(broadcom_drivers,
|
||||
ARRAY_SIZE(broadcom_drivers));
|
||||
}
|
||||
|
||||
module_init(broadcom_init);
|
||||
|
Reference in New Issue
Block a user