clocksource/drivers/time-efm32: Convert init function to return error
[cascardo/linux.git] / drivers / clocksource / time-efm32.c
index b06e4c2..6e2f79f 100644 (file)
@@ -233,10 +233,15 @@ static int __init efm32_clockevent_init(struct device_node *np)
                                        DIV_ROUND_CLOSEST(rate, 1024),
                                        0xf, 0xffff);
 
-       setup_irq(irq, &efm32_clock_event_irq);
+       ret = setup_irq(irq, &efm32_clock_event_irq);
+       if (ret) {
+               pr_err("Failed setup irq");
+               goto err_setup_irq;
+       }
 
        return 0;
 
+err_setup_irq:
 err_get_irq:
 
        iounmap(base);
@@ -255,16 +260,16 @@ err_clk_get:
  * This function asserts that we have exactly one clocksource and one
  * clock_event_device in the end.
  */
-static void __init efm32_timer_init(struct device_node *np)
+static int __init efm32_timer_init(struct device_node *np)
 {
        static int has_clocksource, has_clockevent;
-       int ret;
+       int ret = 0;
 
        if (!has_clocksource) {
                ret = efm32_clocksource_init(np);
                if (!ret) {
                        has_clocksource = 1;
-                       return;
+                       return 0;
                }
        }
 
@@ -272,9 +277,11 @@ static void __init efm32_timer_init(struct device_node *np)
                ret = efm32_clockevent_init(np);
                if (!ret) {
                        has_clockevent = 1;
-                       return;
+                       return 0;
                }
        }
+
+       return ret;
 }
-CLOCKSOURCE_OF_DECLARE(efm32compat, "efm32,timer", efm32_timer_init);
-CLOCKSOURCE_OF_DECLARE(efm32, "energymicro,efm32-timer", efm32_timer_init);
+CLOCKSOURCE_OF_DECLARE_RET(efm32compat, "efm32,timer", efm32_timer_init);
+CLOCKSOURCE_OF_DECLARE_RET(efm32, "energymicro,efm32-timer", efm32_timer_init);