Merge branch 'module_phy_driver'
Johan Hovold says: ==================== net: phy: add module_phy_driver macro Add module_phy_driver macro that can be used by PHY drivers that only calls phy_driver_register or phy_drivers_register (and the corresponding unregister functions) in their module init (and exit). This allows us to eliminate a lot of boilerplate code. Split in three patches (actual macro and two driver change classes) in order to facilitate review. ==================== Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
59af81a144
|
@ -1468,20 +1468,7 @@ static struct phy_driver amd_xgbe_phy_driver[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static int __init amd_xgbe_phy_init(void)
|
||||
{
|
||||
return phy_drivers_register(amd_xgbe_phy_driver,
|
||||
ARRAY_SIZE(amd_xgbe_phy_driver));
|
||||
}
|
||||
|
||||
static void __exit amd_xgbe_phy_exit(void)
|
||||
{
|
||||
phy_drivers_unregister(amd_xgbe_phy_driver,
|
||||
ARRAY_SIZE(amd_xgbe_phy_driver));
|
||||
}
|
||||
|
||||
module_init(amd_xgbe_phy_init);
|
||||
module_exit(amd_xgbe_phy_exit);
|
||||
module_phy_driver(amd_xgbe_phy_driver);
|
||||
|
||||
static struct mdio_device_id __maybe_unused amd_xgbe_phy_ids[] = {
|
||||
{ XGBE_PHY_ID, XGBE_PHY_MASK },
|
||||
|
|
|
@ -61,7 +61,7 @@ static int am79c_config_intr(struct phy_device *phydev)
|
|||
return err;
|
||||
}
|
||||
|
||||
static struct phy_driver am79c_driver = {
|
||||
static struct phy_driver am79c_driver[] = { {
|
||||
.phy_id = PHY_ID_AM79C874,
|
||||
.name = "AM79C874",
|
||||
.phy_id_mask = 0xfffffff0,
|
||||
|
@ -73,20 +73,9 @@ static struct phy_driver am79c_driver = {
|
|||
.ack_interrupt = am79c_ack_interrupt,
|
||||
.config_intr = am79c_config_intr,
|
||||
.driver = { .owner = THIS_MODULE,},
|
||||
};
|
||||
} };
|
||||
|
||||
static int __init am79c_init(void)
|
||||
{
|
||||
return phy_driver_register(&am79c_driver);
|
||||
}
|
||||
|
||||
static void __exit am79c_exit(void)
|
||||
{
|
||||
phy_driver_unregister(&am79c_driver);
|
||||
}
|
||||
|
||||
module_init(am79c_init);
|
||||
module_exit(am79c_exit);
|
||||
module_phy_driver(am79c_driver);
|
||||
|
||||
static struct mdio_device_id __maybe_unused amd_tbl[] = {
|
||||
{ PHY_ID_AM79C874, 0xfffffff0 },
|
||||
|
|
|
@ -352,19 +352,7 @@ static struct phy_driver at803x_driver[] = {
|
|||
},
|
||||
} };
|
||||
|
||||
static int __init atheros_init(void)
|
||||
{
|
||||
return phy_drivers_register(at803x_driver,
|
||||
ARRAY_SIZE(at803x_driver));
|
||||
}
|
||||
|
||||
static void __exit atheros_exit(void)
|
||||
{
|
||||
phy_drivers_unregister(at803x_driver, ARRAY_SIZE(at803x_driver));
|
||||
}
|
||||
|
||||
module_init(atheros_init);
|
||||
module_exit(atheros_exit);
|
||||
module_phy_driver(at803x_driver);
|
||||
|
||||
static struct mdio_device_id __maybe_unused atheros_tbl[] = {
|
||||
{ ATH8030_PHY_ID, 0xffffffef },
|
||||
|
|
|
@ -100,20 +100,7 @@ static struct phy_driver bcm63xx_driver[] = {
|
|||
.driver = { .owner = THIS_MODULE },
|
||||
} };
|
||||
|
||||
static int __init bcm63xx_phy_init(void)
|
||||
{
|
||||
return phy_drivers_register(bcm63xx_driver,
|
||||
ARRAY_SIZE(bcm63xx_driver));
|
||||
}
|
||||
|
||||
static void __exit bcm63xx_phy_exit(void)
|
||||
{
|
||||
phy_drivers_unregister(bcm63xx_driver,
|
||||
ARRAY_SIZE(bcm63xx_driver));
|
||||
}
|
||||
|
||||
module_init(bcm63xx_phy_init);
|
||||
module_exit(bcm63xx_phy_exit);
|
||||
module_phy_driver(bcm63xx_driver);
|
||||
|
||||
static struct mdio_device_id __maybe_unused bcm63xx_tbl[] = {
|
||||
{ 0x00406000, 0xfffffc00 },
|
||||
|
|
|
@ -416,20 +416,7 @@ static struct mdio_device_id __maybe_unused bcm7xxx_tbl[] = {
|
|||
{ }
|
||||
};
|
||||
|
||||
static int __init bcm7xxx_phy_init(void)
|
||||
{
|
||||
return phy_drivers_register(bcm7xxx_driver,
|
||||
ARRAY_SIZE(bcm7xxx_driver));
|
||||
}
|
||||
|
||||
static void __exit bcm7xxx_phy_exit(void)
|
||||
{
|
||||
phy_drivers_unregister(bcm7xxx_driver,
|
||||
ARRAY_SIZE(bcm7xxx_driver));
|
||||
}
|
||||
|
||||
module_init(bcm7xxx_phy_init);
|
||||
module_exit(bcm7xxx_phy_exit);
|
||||
module_phy_driver(bcm7xxx_driver);
|
||||
|
||||
MODULE_DEVICE_TABLE(mdio, bcm7xxx_tbl);
|
||||
|
||||
|
|
|
@ -216,18 +216,6 @@ static struct phy_driver bcm87xx_driver[] = {
|
|||
.driver = { .owner = THIS_MODULE },
|
||||
} };
|
||||
|
||||
static int __init bcm87xx_init(void)
|
||||
{
|
||||
return phy_drivers_register(bcm87xx_driver,
|
||||
ARRAY_SIZE(bcm87xx_driver));
|
||||
}
|
||||
module_init(bcm87xx_init);
|
||||
|
||||
static void __exit bcm87xx_exit(void)
|
||||
{
|
||||
phy_drivers_unregister(bcm87xx_driver,
|
||||
ARRAY_SIZE(bcm87xx_driver));
|
||||
}
|
||||
module_exit(bcm87xx_exit);
|
||||
module_phy_driver(bcm87xx_driver);
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
@ -654,20 +654,7 @@ static struct phy_driver broadcom_drivers[] = {
|
|||
.driver = { .owner = THIS_MODULE },
|
||||
} };
|
||||
|
||||
static int __init broadcom_init(void)
|
||||
{
|
||||
return phy_drivers_register(broadcom_drivers,
|
||||
ARRAY_SIZE(broadcom_drivers));
|
||||
}
|
||||
|
||||
static void __exit broadcom_exit(void)
|
||||
{
|
||||
phy_drivers_unregister(broadcom_drivers,
|
||||
ARRAY_SIZE(broadcom_drivers));
|
||||
}
|
||||
|
||||
module_init(broadcom_init);
|
||||
module_exit(broadcom_exit);
|
||||
module_phy_driver(broadcom_drivers);
|
||||
|
||||
static struct mdio_device_id __maybe_unused broadcom_tbl[] = {
|
||||
{ PHY_ID_BCM5411, 0xfffffff0 },
|
||||
|
|
|
@ -129,20 +129,7 @@ static struct phy_driver cis820x_driver[] = {
|
|||
.driver = { .owner = THIS_MODULE,},
|
||||
} };
|
||||
|
||||
static int __init cicada_init(void)
|
||||
{
|
||||
return phy_drivers_register(cis820x_driver,
|
||||
ARRAY_SIZE(cis820x_driver));
|
||||
}
|
||||
|
||||
static void __exit cicada_exit(void)
|
||||
{
|
||||
phy_drivers_unregister(cis820x_driver,
|
||||
ARRAY_SIZE(cis820x_driver));
|
||||
}
|
||||
|
||||
module_init(cicada_init);
|
||||
module_exit(cicada_exit);
|
||||
module_phy_driver(cis820x_driver);
|
||||
|
||||
static struct mdio_device_id __maybe_unused cicada_tbl[] = {
|
||||
{ 0x000fc410, 0x000ffff0 },
|
||||
|
|
|
@ -182,20 +182,7 @@ static struct phy_driver dm91xx_driver[] = {
|
|||
.driver = { .owner = THIS_MODULE,},
|
||||
} };
|
||||
|
||||
static int __init davicom_init(void)
|
||||
{
|
||||
return phy_drivers_register(dm91xx_driver,
|
||||
ARRAY_SIZE(dm91xx_driver));
|
||||
}
|
||||
|
||||
static void __exit davicom_exit(void)
|
||||
{
|
||||
phy_drivers_unregister(dm91xx_driver,
|
||||
ARRAY_SIZE(dm91xx_driver));
|
||||
}
|
||||
|
||||
module_init(davicom_init);
|
||||
module_exit(davicom_exit);
|
||||
module_phy_driver(dm91xx_driver);
|
||||
|
||||
static struct mdio_device_id __maybe_unused davicom_tbl[] = {
|
||||
{ 0x0181b880, 0x0ffffff0 },
|
||||
|
|
|
@ -87,7 +87,7 @@ static int et1011c_read_status(struct phy_device *phydev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static struct phy_driver et1011c_driver = {
|
||||
static struct phy_driver et1011c_driver[] = { {
|
||||
.phy_id = 0x0282f014,
|
||||
.name = "ET1011C",
|
||||
.phy_id_mask = 0xfffffff0,
|
||||
|
@ -96,20 +96,9 @@ static struct phy_driver et1011c_driver = {
|
|||
.config_aneg = et1011c_config_aneg,
|
||||
.read_status = et1011c_read_status,
|
||||
.driver = { .owner = THIS_MODULE,},
|
||||
};
|
||||
} };
|
||||
|
||||
static int __init et1011c_init(void)
|
||||
{
|
||||
return phy_driver_register(&et1011c_driver);
|
||||
}
|
||||
|
||||
static void __exit et1011c_exit(void)
|
||||
{
|
||||
phy_driver_unregister(&et1011c_driver);
|
||||
}
|
||||
|
||||
module_init(et1011c_init);
|
||||
module_exit(et1011c_exit);
|
||||
module_phy_driver(et1011c_driver);
|
||||
|
||||
static struct mdio_device_id __maybe_unused et1011c_tbl[] = {
|
||||
{ 0x0282f014, 0xfffffff0 },
|
||||
|
|
|
@ -253,20 +253,7 @@ static struct phy_driver icplus_driver[] = {
|
|||
.driver = { .owner = THIS_MODULE,},
|
||||
} };
|
||||
|
||||
static int __init icplus_init(void)
|
||||
{
|
||||
return phy_drivers_register(icplus_driver,
|
||||
ARRAY_SIZE(icplus_driver));
|
||||
}
|
||||
|
||||
static void __exit icplus_exit(void)
|
||||
{
|
||||
phy_drivers_unregister(icplus_driver,
|
||||
ARRAY_SIZE(icplus_driver));
|
||||
}
|
||||
|
||||
module_init(icplus_init);
|
||||
module_exit(icplus_exit);
|
||||
module_phy_driver(icplus_driver);
|
||||
|
||||
static struct mdio_device_id __maybe_unused icplus_tbl[] = {
|
||||
{ 0x02430d80, 0x0ffffff0 },
|
||||
|
|
|
@ -312,20 +312,7 @@ static struct phy_driver lxt97x_driver[] = {
|
|||
.driver = { .owner = THIS_MODULE,},
|
||||
} };
|
||||
|
||||
static int __init lxt_init(void)
|
||||
{
|
||||
return phy_drivers_register(lxt97x_driver,
|
||||
ARRAY_SIZE(lxt97x_driver));
|
||||
}
|
||||
|
||||
static void __exit lxt_exit(void)
|
||||
{
|
||||
phy_drivers_unregister(lxt97x_driver,
|
||||
ARRAY_SIZE(lxt97x_driver));
|
||||
}
|
||||
|
||||
module_init(lxt_init);
|
||||
module_exit(lxt_exit);
|
||||
module_phy_driver(lxt97x_driver);
|
||||
|
||||
static struct mdio_device_id __maybe_unused lxt_tbl[] = {
|
||||
{ 0x78100000, 0xfffffff0 },
|
||||
|
|
|
@ -1120,20 +1120,7 @@ static struct phy_driver marvell_drivers[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static int __init marvell_init(void)
|
||||
{
|
||||
return phy_drivers_register(marvell_drivers,
|
||||
ARRAY_SIZE(marvell_drivers));
|
||||
}
|
||||
|
||||
static void __exit marvell_exit(void)
|
||||
{
|
||||
phy_drivers_unregister(marvell_drivers,
|
||||
ARRAY_SIZE(marvell_drivers));
|
||||
}
|
||||
|
||||
module_init(marvell_init);
|
||||
module_exit(marvell_exit);
|
||||
module_phy_driver(marvell_drivers);
|
||||
|
||||
static struct mdio_device_id __maybe_unused marvell_tbl[] = {
|
||||
{ MARVELL_PHY_ID_88E1101, MARVELL_PHY_ID_MASK },
|
||||
|
|
|
@ -657,20 +657,7 @@ static struct phy_driver ksphy_driver[] = {
|
|||
.driver = { .owner = THIS_MODULE, },
|
||||
} };
|
||||
|
||||
static int __init ksphy_init(void)
|
||||
{
|
||||
return phy_drivers_register(ksphy_driver,
|
||||
ARRAY_SIZE(ksphy_driver));
|
||||
}
|
||||
|
||||
static void __exit ksphy_exit(void)
|
||||
{
|
||||
phy_drivers_unregister(ksphy_driver,
|
||||
ARRAY_SIZE(ksphy_driver));
|
||||
}
|
||||
|
||||
module_init(ksphy_init);
|
||||
module_exit(ksphy_exit);
|
||||
module_phy_driver(ksphy_driver);
|
||||
|
||||
MODULE_DESCRIPTION("Micrel PHY driver");
|
||||
MODULE_AUTHOR("David J. Choi");
|
||||
|
|
|
@ -129,7 +129,7 @@ static int ns_config_init(struct phy_device *phydev)
|
|||
return ns_ack_interrupt(phydev);
|
||||
}
|
||||
|
||||
static struct phy_driver dp83865_driver = {
|
||||
static struct phy_driver dp83865_driver[] = { {
|
||||
.phy_id = DP83865_PHY_ID,
|
||||
.phy_id_mask = 0xfffffff0,
|
||||
.name = "NatSemi DP83865",
|
||||
|
@ -141,25 +141,14 @@ static struct phy_driver dp83865_driver = {
|
|||
.ack_interrupt = ns_ack_interrupt,
|
||||
.config_intr = ns_config_intr,
|
||||
.driver = {.owner = THIS_MODULE,}
|
||||
};
|
||||
} };
|
||||
|
||||
static int __init ns_init(void)
|
||||
{
|
||||
return phy_driver_register(&dp83865_driver);
|
||||
}
|
||||
|
||||
static void __exit ns_exit(void)
|
||||
{
|
||||
phy_driver_unregister(&dp83865_driver);
|
||||
}
|
||||
module_phy_driver(dp83865_driver);
|
||||
|
||||
MODULE_DESCRIPTION("NatSemi PHY driver");
|
||||
MODULE_AUTHOR("Stuart Menefy");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
module_init(ns_init);
|
||||
module_exit(ns_exit);
|
||||
|
||||
static struct mdio_device_id __maybe_unused ns_tbl[] = {
|
||||
{ DP83865_PHY_ID, 0xfffffff0 },
|
||||
{ }
|
||||
|
|
|
@ -111,7 +111,7 @@ static int qs6612_config_intr(struct phy_device *phydev)
|
|||
|
||||
}
|
||||
|
||||
static struct phy_driver qs6612_driver = {
|
||||
static struct phy_driver qs6612_driver[] = { {
|
||||
.phy_id = 0x00181440,
|
||||
.name = "QS6612",
|
||||
.phy_id_mask = 0xfffffff0,
|
||||
|
@ -123,20 +123,9 @@ static struct phy_driver qs6612_driver = {
|
|||
.ack_interrupt = qs6612_ack_interrupt,
|
||||
.config_intr = qs6612_config_intr,
|
||||
.driver = { .owner = THIS_MODULE,},
|
||||
};
|
||||
} };
|
||||
|
||||
static int __init qs6612_init(void)
|
||||
{
|
||||
return phy_driver_register(&qs6612_driver);
|
||||
}
|
||||
|
||||
static void __exit qs6612_exit(void)
|
||||
{
|
||||
phy_driver_unregister(&qs6612_driver);
|
||||
}
|
||||
|
||||
module_init(qs6612_init);
|
||||
module_exit(qs6612_exit);
|
||||
module_phy_driver(qs6612_driver);
|
||||
|
||||
static struct mdio_device_id __maybe_unused qs6612_tbl[] = {
|
||||
{ 0x00181440, 0xfffffff0 },
|
||||
|
|
|
@ -101,18 +101,7 @@ static struct phy_driver realtek_drvs[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static int __init realtek_init(void)
|
||||
{
|
||||
return phy_drivers_register(realtek_drvs, ARRAY_SIZE(realtek_drvs));
|
||||
}
|
||||
|
||||
static void __exit realtek_exit(void)
|
||||
{
|
||||
phy_drivers_unregister(realtek_drvs, ARRAY_SIZE(realtek_drvs));
|
||||
}
|
||||
|
||||
module_init(realtek_init);
|
||||
module_exit(realtek_exit);
|
||||
module_phy_driver(realtek_drvs);
|
||||
|
||||
static struct mdio_device_id __maybe_unused realtek_tbl[] = {
|
||||
{ 0x001cc912, 0x001fffff },
|
||||
|
|
|
@ -250,24 +250,12 @@ static struct phy_driver smsc_phy_driver[] = {
|
|||
.driver = { .owner = THIS_MODULE, }
|
||||
} };
|
||||
|
||||
static int __init smsc_init(void)
|
||||
{
|
||||
return phy_drivers_register(smsc_phy_driver,
|
||||
ARRAY_SIZE(smsc_phy_driver));
|
||||
}
|
||||
|
||||
static void __exit smsc_exit(void)
|
||||
{
|
||||
phy_drivers_unregister(smsc_phy_driver, ARRAY_SIZE(smsc_phy_driver));
|
||||
}
|
||||
module_phy_driver(smsc_phy_driver);
|
||||
|
||||
MODULE_DESCRIPTION("SMSC PHY driver");
|
||||
MODULE_AUTHOR("Herbert Valerio Riedel");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
module_init(smsc_init);
|
||||
module_exit(smsc_exit);
|
||||
|
||||
static struct mdio_device_id __maybe_unused smsc_tbl[] = {
|
||||
{ 0x0007c0a0, 0xfffffff0 },
|
||||
{ 0x0007c0b0, 0xfffffff0 },
|
||||
|
|
|
@ -112,20 +112,7 @@ static struct phy_driver ste10xp_pdriver[] = {
|
|||
.driver = {.owner = THIS_MODULE,}
|
||||
} };
|
||||
|
||||
static int __init ste10Xp_init(void)
|
||||
{
|
||||
return phy_drivers_register(ste10xp_pdriver,
|
||||
ARRAY_SIZE(ste10xp_pdriver));
|
||||
}
|
||||
|
||||
static void __exit ste10Xp_exit(void)
|
||||
{
|
||||
phy_drivers_unregister(ste10xp_pdriver,
|
||||
ARRAY_SIZE(ste10xp_pdriver));
|
||||
}
|
||||
|
||||
module_init(ste10Xp_init);
|
||||
module_exit(ste10Xp_exit);
|
||||
module_phy_driver(ste10xp_pdriver);
|
||||
|
||||
static struct mdio_device_id __maybe_unused ste10Xp_tbl[] = {
|
||||
{ STE101P_PHY_ID, 0xfffffff0 },
|
||||
|
|
|
@ -311,19 +311,7 @@ static struct phy_driver vsc82xx_driver[] = {
|
|||
.driver = { .owner = THIS_MODULE,},
|
||||
} };
|
||||
|
||||
static int __init vsc82xx_init(void)
|
||||
{
|
||||
return phy_drivers_register(vsc82xx_driver,
|
||||
ARRAY_SIZE(vsc82xx_driver));
|
||||
}
|
||||
|
||||
static void __exit vsc82xx_exit(void)
|
||||
{
|
||||
phy_drivers_unregister(vsc82xx_driver, ARRAY_SIZE(vsc82xx_driver));
|
||||
}
|
||||
|
||||
module_init(vsc82xx_init);
|
||||
module_exit(vsc82xx_exit);
|
||||
module_phy_driver(vsc82xx_driver);
|
||||
|
||||
static struct mdio_device_id __maybe_unused vitesse_tbl[] = {
|
||||
{ PHY_ID_VSC8234, 0x000ffff0 },
|
||||
|
|
|
@ -772,4 +772,28 @@ int __init mdio_bus_init(void);
|
|||
void mdio_bus_exit(void);
|
||||
|
||||
extern struct bus_type mdio_bus_type;
|
||||
|
||||
/**
|
||||
* module_phy_driver() - Helper macro for registering PHY drivers
|
||||
* @__phy_drivers: array of PHY drivers to register
|
||||
*
|
||||
* Helper macro for PHY drivers which do not do anything special in module
|
||||
* init/exit. Each module may only use this macro once, and calling it
|
||||
* replaces module_init() and module_exit().
|
||||
*/
|
||||
#define phy_module_driver(__phy_drivers, __count) \
|
||||
static int __init phy_module_init(void) \
|
||||
{ \
|
||||
return phy_drivers_register(__phy_drivers, __count); \
|
||||
} \
|
||||
module_init(phy_module_init); \
|
||||
static void __exit phy_module_exit(void) \
|
||||
{ \
|
||||
phy_drivers_unregister(__phy_drivers, __count); \
|
||||
} \
|
||||
module_exit(phy_module_exit)
|
||||
|
||||
#define module_phy_driver(__phy_drivers) \
|
||||
phy_module_driver(__phy_drivers, ARRAY_SIZE(__phy_drivers))
|
||||
|
||||
#endif /* __PHY_H */
|
||||
|
|
Loading…
Reference in New Issue