diff options
| -rw-r--r-- | kernel/time/alarmtimer.c | 41 | 
1 files changed, 31 insertions, 10 deletions
diff --git a/kernel/time/alarmtimer.c b/kernel/time/alarmtimer.c index 154d5563ab1..c436e790b21 100644 --- a/kernel/time/alarmtimer.c +++ b/kernel/time/alarmtimer.c @@ -100,19 +100,25 @@ static struct class_interface alarmtimer_rtc_interface = {  	.add_dev = &alarmtimer_rtc_add_device,  }; -static void alarmtimer_rtc_interface_setup(void) +static int alarmtimer_rtc_interface_setup(void)  {  	alarmtimer_rtc_interface.class = rtc_class; -	class_interface_register(&alarmtimer_rtc_interface); +	return class_interface_register(&alarmtimer_rtc_interface); +} +static void alarmtimer_rtc_interface_remove(void) +{ +	class_interface_unregister(&alarmtimer_rtc_interface);  }  #else -#define alarmtimer_get_rtcdev() (0) -#define rtcdev (0) -#define alarmtimer_rtc_interface_setup() +static inline struct rtc_device *alarmtimer_get_rtcdev(void) +{ +	return NULL; +} +#define rtcdev (NULL) +static inline int alarmtimer_rtc_interface_setup(void) { return 0; } +static inline void alarmtimer_rtc_interface_remove(void) { }  #endif - -  /**   * alarmtimer_enqueue - Adds an alarm timer to an alarm_base timerqueue   * @base: pointer to the base where the timer is being run @@ -764,6 +770,7 @@ static struct platform_driver alarmtimer_driver = {   */  static int __init alarmtimer_init(void)  { +	struct platform_device *pdev;  	int error = 0;  	int i;  	struct k_clock alarm_clock = { @@ -793,11 +800,25 @@ static int __init alarmtimer_init(void)  		alarm_bases[i].timer.function = alarmtimer_fired;  	} -	alarmtimer_rtc_interface_setup(); +	error = alarmtimer_rtc_interface_setup(); +	if (error) +		return error; +  	error = platform_driver_register(&alarmtimer_driver); -	platform_device_register_simple("alarmtimer", -1, NULL, 0); +	if (error) +		goto out_if; +	pdev = platform_device_register_simple("alarmtimer", -1, NULL, 0); +	if (IS_ERR(pdev)) { +		error = PTR_ERR(pdev); +		goto out_drv; +	} +	return 0; + +out_drv: +	platform_driver_unregister(&alarmtimer_driver); +out_if: +	alarmtimer_rtc_interface_remove();  	return error;  }  device_initcall(alarmtimer_init); -  |