net: phy: add module_phy_driver macro
Subsystems (4)
cover 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.
Johan
Johan Hovold (3):
net: phy: add module_phy_driver macro
net: phy: replace phy_driver_register calls
net: phy: replace phy_drivers_register calls
drivers/net/phy/amd-xgbe-phy.c | 15 +-------------- drivers/net/phy/amd.c | 17 +++-------------- drivers/net/phy/at803x.c | 14 +------------- drivers/net/phy/bcm63xx.c | 15 +-------------- drivers/net/phy/bcm7xxx.c | 15 +-------------- drivers/net/phy/bcm87xx.c | 14 +------------- drivers/net/phy/broadcom.c | 15 +-------------- drivers/net/phy/cicada.c | 15 +-------------- drivers/net/phy/davicom.c | 15 +-------------- drivers/net/phy/et1011c.c | 17 +++-------------- drivers/net/phy/icplus.c | 15 +-------------- drivers/net/phy/lxt.c | 15 +-------------- drivers/net/phy/marvell.c | 15 +-------------- drivers/net/phy/micrel.c | 15 +-------------- drivers/net/phy/national.c | 17 +++-------------- drivers/net/phy/qsemi.c | 17 +++-------------- drivers/net/phy/realtek.c | 13 +------------ drivers/net/phy/smsc.c | 14 +------------- drivers/net/phy/ste10Xp.c | 15 +-------------- drivers/net/phy/vitesse.c | 14 +------------- include/linux/phy.h | 24 ++++++++++++++++++++++++ 21 files changed, 52 insertions(+), 274 deletions(-)
Signature · 1 line
2.0.4
PATCH 1/3 net: phy: add module_phy_driver macro
Add helper macro for PHY drivers which do not do anything special in module init/exit. This will allow us to eliminate a lot of boilerplate code.
--- include/linux/phy.h | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+)
include/linux/phy.h +24 -0
@@ -745,4 +745,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 */
Signature · 1 line
2.0.4
PATCH 2/3 net: phy: replace phy_driver_register calls
In reply to Johan HovoldReplace module init/exit which only calls phy_driver_register with module_phy_driver macro.
Compile tested only.
--- drivers/net/phy/amd.c | 17 +++-------------- drivers/net/phy/et1011c.c | 17 +++-------------- drivers/net/phy/national.c | 17 +++-------------- drivers/net/phy/qsemi.c | 17 +++-------------- 4 files changed, 12 insertions(+), 56 deletions(-)
drivers/net/phy/amd.c +3 -14
@@ -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 },
drivers/net/phy/et1011c.c +3 -14
@@ -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 },
drivers/net/phy/national.c +3 -14
@@ -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 }, { }
drivers/net/phy/qsemi.c +3 -14
@@ -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 },
Signature · 1 line
2.0.4
PATCH 3/3 net: phy: replace phy_drivers_register calls
In reply to Johan HovoldReplace module init/exit which only calls phy_drivers_register with module_phy_driver macro.
Tested using Micrel driver, and otherwise compile-tested only.
--- drivers/net/phy/amd-xgbe-phy.c | 15 +-------------- drivers/net/phy/at803x.c | 14 +------------- drivers/net/phy/bcm63xx.c | 15 +-------------- drivers/net/phy/bcm7xxx.c | 15 +-------------- drivers/net/phy/bcm87xx.c | 14 +------------- drivers/net/phy/broadcom.c | 15 +-------------- drivers/net/phy/cicada.c | 15 +-------------- drivers/net/phy/davicom.c | 15 +-------------- drivers/net/phy/icplus.c | 15 +-------------- drivers/net/phy/lxt.c | 15 +-------------- drivers/net/phy/marvell.c | 15 +-------------- drivers/net/phy/micrel.c | 15 +-------------- drivers/net/phy/realtek.c | 13 +------------ drivers/net/phy/smsc.c | 14 +------------- drivers/net/phy/ste10Xp.c | 15 +-------------- drivers/net/phy/vitesse.c | 14 +------------- 16 files changed, 16 insertions(+), 218 deletions(-)
drivers/net/phy/amd-xgbe-phy.c +1 -14
@@ -1435,20 +1435,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 },
drivers/net/phy/at803x.c +1 -13
@@ -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 },
drivers/net/phy/bcm63xx.c +1 -14
@@ -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 },
drivers/net/phy/bcm7xxx.c +1 -14
@@ -337,20 +337,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);
drivers/net/phy/bcm87xx.c +1 -13
@@ -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" );
drivers/net/phy/broadcom.c +1 -14
@@ -776,20 +776,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 },
drivers/net/phy/cicada.c +1 -14
@@ -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 },
drivers/net/phy/davicom.c +1 -14
@@ -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 },
drivers/net/phy/icplus.c +1 -14
@@ -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 },
drivers/net/phy/lxt.c +1 -14
@@ -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 },
drivers/net/phy/marvell.c +1 -14
@@ -1052,20 +1052,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 },
drivers/net/phy/micrel.c +1 -14
@@ -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" );
drivers/net/phy/realtek.c +1 -12
@@ -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 },
drivers/net/phy/smsc.c +1 -13
@@ -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 },
drivers/net/phy/ste10Xp.c +1 -14
@@ -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 },
drivers/net/phy/vitesse.c +1 -13
@@ -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 },
Signature · 1 line
2.0.4
Quoted 8 lines · Johan Hovold
Add
module_phy_drivermacro that can be used by PHY drivers that only callsphy_driver_registerorphy_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.
Looks good to me:
Thanks!
Quoted 32 lines
Johan
Johan Hovold (3):
net: phy: addmodule_phy_drivermacro
net: phy: replacephy_driver_registercalls
net: phy: replacephy_drivers_registercallsdrivers/net/phy/amd-xgbe-phy.c | 15 +-------------- drivers/net/phy/amd.c | 17 +++-------------- drivers/net/phy/at803x.c | 14 +------------- drivers/net/phy/bcm63xx.c | 15 +-------------- drivers/net/phy/bcm7xxx.c | 15 +-------------- drivers/net/phy/bcm87xx.c | 14 +------------- drivers/net/phy/broadcom.c | 15 +-------------- drivers/net/phy/cicada.c | 15 +-------------- drivers/net/phy/davicom.c | 15 +-------------- drivers/net/phy/et1011c.c | 17 +++-------------- drivers/net/phy/icplus.c | 15 +-------------- drivers/net/phy/lxt.c | 15 +-------------- drivers/net/phy/marvell.c | 15 +-------------- drivers/net/phy/micrel.c | 15 +-------------- drivers/net/phy/national.c | 17 +++-------------- drivers/net/phy/qsemi.c | 17 +++-------------- drivers/net/phy/realtek.c | 13 +------------ drivers/net/phy/smsc.c | 14 +------------- drivers/net/phy/ste10Xp.c | 15 +-------------- drivers/net/phy/vitesse.c | 14 +------------- include/linux/phy.h | 24 ++++++++++++++++++++++++ 21 files changed, 52 insertions(+), 274 deletions(-)
David Miller
maintainerFrom: Florian Fainelli <[email protected]>
Date: Tue, 11 Nov 2014 11:14:29 -0800
Quoted 5 lines · Johan Hovold
Quoted 4 lines
Add
module_phy_drivermacro that can be used by PHY drivers that only callsphy_driver_registerorphy_drivers_register(and the corresponding unregister functions) in their module init (and exit).
Quoted 8 lines
Quoted 4 lines
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.
Looks good to me:
Reviewed-by Florian Fainelli <[email protected]>
Series applied, thanks.