Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4523f6ad authored by Thomas Gleixner's avatar Thomas Gleixner
Browse files

alarmtimers: Fix error handling



commit 8bc0dafb (alarmtimers: Rework RTC device selection using class
interface) did not implement required error checks. Add them.

Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent 9fb60336
Loading
Loading
Loading
Loading
+31 −10
Original line number Diff line number Diff line
@@ -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);