diff options
| -rw-r--r-- | drivers/firmware/arm_scmi/clock.c | 7 | ||||
| -rw-r--r-- | drivers/firmware/arm_scmi/common.h | 21 | ||||
| -rw-r--r-- | drivers/firmware/arm_scmi/driver.c | 16 | ||||
| -rw-r--r-- | drivers/firmware/arm_scmi/perf.c | 7 | ||||
| -rw-r--r-- | drivers/firmware/arm_scmi/power.c | 7 | ||||
| -rw-r--r-- | drivers/firmware/arm_scmi/reset.c | 7 | ||||
| -rw-r--r-- | drivers/firmware/arm_scmi/sensors.c | 7 | ||||
| -rw-r--r-- | drivers/firmware/arm_scmi/system.c | 7 | 
8 files changed, 42 insertions, 37 deletions
| diff --git a/drivers/firmware/arm_scmi/clock.c b/drivers/firmware/arm_scmi/clock.c index a3b90be28009..c1cfe3ee3d55 100644 --- a/drivers/firmware/arm_scmi/clock.c +++ b/drivers/firmware/arm_scmi/clock.c @@ -364,9 +364,4 @@ static int scmi_clock_protocol_init(struct scmi_handle *handle)  	return 0;  } -static int __init scmi_clock_init(void) -{ -	return scmi_protocol_register(SCMI_PROTOCOL_CLOCK, -				      &scmi_clock_protocol_init); -} -subsys_initcall(scmi_clock_init); +DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(SCMI_PROTOCOL_CLOCK, clock) diff --git a/drivers/firmware/arm_scmi/common.h b/drivers/firmware/arm_scmi/common.h index a940c6cf1e51..37fb583f1bf5 100644 --- a/drivers/firmware/arm_scmi/common.h +++ b/drivers/firmware/arm_scmi/common.h @@ -159,6 +159,27 @@ int scmi_base_protocol_init(struct scmi_handle *h);  int __init scmi_bus_init(void);  void __exit scmi_bus_exit(void); +#define DECLARE_SCMI_REGISTER_UNREGISTER(func)		\ +	int __init scmi_##func##_register(void);	\ +	void __exit scmi_##func##_unregister(void) +DECLARE_SCMI_REGISTER_UNREGISTER(clock); +DECLARE_SCMI_REGISTER_UNREGISTER(perf); +DECLARE_SCMI_REGISTER_UNREGISTER(power); +DECLARE_SCMI_REGISTER_UNREGISTER(reset); +DECLARE_SCMI_REGISTER_UNREGISTER(sensors); +DECLARE_SCMI_REGISTER_UNREGISTER(system); + +#define DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(id, name) \ +int __init scmi_##name##_register(void) \ +{ \ +	return scmi_protocol_register((id), &scmi_##name##_protocol_init); \ +} \ +\ +void __exit scmi_##name##_unregister(void) \ +{ \ +	scmi_protocol_unregister((id)); \ +} +  /* SCMI Transport */  /**   * struct scmi_chan_info - Structure representing a SCMI channel information diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c index 8f60c6a97cc3..c5dea87edf8f 100644 --- a/drivers/firmware/arm_scmi/driver.c +++ b/drivers/firmware/arm_scmi/driver.c @@ -933,14 +933,28 @@ static int __init scmi_driver_init(void)  {  	scmi_bus_init(); +	scmi_clock_register(); +	scmi_perf_register(); +	scmi_power_register(); +	scmi_reset_register(); +	scmi_sensors_register(); +	scmi_system_register(); +  	return platform_driver_register(&scmi_driver);  } -module_init(scmi_driver_init); +subsys_initcall(scmi_driver_init);  static void __exit scmi_driver_exit(void)  {  	scmi_bus_exit(); +	scmi_clock_unregister(); +	scmi_perf_unregister(); +	scmi_power_unregister(); +	scmi_reset_unregister(); +	scmi_sensors_unregister(); +	scmi_system_unregister(); +  	platform_driver_unregister(&scmi_driver);  }  module_exit(scmi_driver_exit); diff --git a/drivers/firmware/arm_scmi/perf.c b/drivers/firmware/arm_scmi/perf.c index a3e7b1bfab00..ed475b40bd08 100644 --- a/drivers/firmware/arm_scmi/perf.c +++ b/drivers/firmware/arm_scmi/perf.c @@ -890,9 +890,4 @@ static int scmi_perf_protocol_init(struct scmi_handle *handle)  	return 0;  } -static int __init scmi_perf_init(void) -{ -	return scmi_protocol_register(SCMI_PROTOCOL_PERF, -				      &scmi_perf_protocol_init); -} -subsys_initcall(scmi_perf_init); +DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(SCMI_PROTOCOL_PERF, perf) diff --git a/drivers/firmware/arm_scmi/power.c b/drivers/firmware/arm_scmi/power.c index 32bcf5821ea9..1f37258e9bee 100644 --- a/drivers/firmware/arm_scmi/power.c +++ b/drivers/firmware/arm_scmi/power.c @@ -301,9 +301,4 @@ static int scmi_power_protocol_init(struct scmi_handle *handle)  	return 0;  } -static int __init scmi_power_init(void) -{ -	return scmi_protocol_register(SCMI_PROTOCOL_POWER, -				      &scmi_power_protocol_init); -} -subsys_initcall(scmi_power_init); +DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(SCMI_PROTOCOL_POWER, power) diff --git a/drivers/firmware/arm_scmi/reset.c b/drivers/firmware/arm_scmi/reset.c index 4e2dc5fc43d9..f063cfe17e02 100644 --- a/drivers/firmware/arm_scmi/reset.c +++ b/drivers/firmware/arm_scmi/reset.c @@ -313,9 +313,4 @@ static int scmi_reset_protocol_init(struct scmi_handle *handle)  	return 0;  } -static int __init scmi_reset_init(void) -{ -	return scmi_protocol_register(SCMI_PROTOCOL_RESET, -				      &scmi_reset_protocol_init); -} -subsys_initcall(scmi_reset_init); +DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(SCMI_PROTOCOL_RESET, reset) diff --git a/drivers/firmware/arm_scmi/sensors.c b/drivers/firmware/arm_scmi/sensors.c index 7d83680198de..9703cf6356a0 100644 --- a/drivers/firmware/arm_scmi/sensors.c +++ b/drivers/firmware/arm_scmi/sensors.c @@ -365,9 +365,4 @@ static int scmi_sensors_protocol_init(struct scmi_handle *handle)  	return 0;  } -static int __init scmi_sensors_init(void) -{ -	return scmi_protocol_register(SCMI_PROTOCOL_SENSOR, -				      &scmi_sensors_protocol_init); -} -subsys_initcall(scmi_sensors_init); +DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(SCMI_PROTOCOL_SENSOR, sensors) diff --git a/drivers/firmware/arm_scmi/system.c b/drivers/firmware/arm_scmi/system.c index aa1e74f066a0..283e12d5f24b 100644 --- a/drivers/firmware/arm_scmi/system.c +++ b/drivers/firmware/arm_scmi/system.c @@ -128,9 +128,4 @@ static int scmi_system_protocol_init(struct scmi_handle *handle)  	return 0;  } -static int __init scmi_system_init(void) -{ -	return scmi_protocol_register(SCMI_PROTOCOL_SYSTEM, -				      &scmi_system_protocol_init); -} -subsys_initcall(scmi_system_init); +DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(SCMI_PROTOCOL_SYSTEM, system) | 
