aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/clocksource/timer-stm32.c
diff options
context:
space:
mode:
authorDaniel Lezcano <daniel.lezcano@linaro.org>2016-06-06 17:28:17 -0400
committerDaniel Lezcano <daniel.lezcano@linaro.org>2016-06-28 04:19:31 -0400
commit38d94c5ae2dc60d6b54127695df9447e86a7d402 (patch)
tree015b25d0dad60fe830d684a9a0388d410f04214b /drivers/clocksource/timer-stm32.c
parent2ef2538bc613af45baf9f2a032c9a8259c4c6672 (diff)
clocksource/drivers/stm32: Convert init function to return error
The init functions do not return any error. They behave as the following: - panic, thus leading to a kernel crash while another timer may work and make the system boot up correctly or - print an error and let the caller unaware if the state of the system Change that by converting the init functions to return an error conforming to the CLOCKSOURCE_OF_RET prototype. Proper error handling (rollback, errno value) will be changed later case by case, thus this change just return back an error or success in the init function. Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> Acked-by: Maxime Coquelin <mcoquelin.stm32@gmail.com>
Diffstat (limited to 'drivers/clocksource/timer-stm32.c')
-rw-r--r--drivers/clocksource/timer-stm32.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/clocksource/timer-stm32.c b/drivers/clocksource/timer-stm32.c
index f3dcb76799b4..d5bf352905c8 100644
--- a/drivers/clocksource/timer-stm32.c
+++ b/drivers/clocksource/timer-stm32.c
@@ -98,7 +98,7 @@ static struct stm32_clock_event_ddata clock_event_ddata = {
98 }, 98 },
99}; 99};
100 100
101static void __init stm32_clockevent_init(struct device_node *np) 101static int __init stm32_clockevent_init(struct device_node *np)
102{ 102{
103 struct stm32_clock_event_ddata *data = &clock_event_ddata; 103 struct stm32_clock_event_ddata *data = &clock_event_ddata;
104 struct clk *clk; 104 struct clk *clk;
@@ -130,12 +130,14 @@ static void __init stm32_clockevent_init(struct device_node *np)
130 130
131 data->base = of_iomap(np, 0); 131 data->base = of_iomap(np, 0);
132 if (!data->base) { 132 if (!data->base) {
133 ret = -ENXIO;
133 pr_err("failed to map registers for clockevent\n"); 134 pr_err("failed to map registers for clockevent\n");
134 goto err_iomap; 135 goto err_iomap;
135 } 136 }
136 137
137 irq = irq_of_parse_and_map(np, 0); 138 irq = irq_of_parse_and_map(np, 0);
138 if (!irq) { 139 if (!irq) {
140 ret = -EINVAL;
139 pr_err("%s: failed to get irq.\n", np->full_name); 141 pr_err("%s: failed to get irq.\n", np->full_name);
140 goto err_get_irq; 142 goto err_get_irq;
141 } 143 }
@@ -173,7 +175,7 @@ static void __init stm32_clockevent_init(struct device_node *np)
173 pr_info("%s: STM32 clockevent driver initialized (%d bits)\n", 175 pr_info("%s: STM32 clockevent driver initialized (%d bits)\n",
174 np->full_name, bits); 176 np->full_name, bits);
175 177
176 return; 178 return ret;
177 179
178err_get_irq: 180err_get_irq:
179 iounmap(data->base); 181 iounmap(data->base);
@@ -182,7 +184,7 @@ err_iomap:
182err_clk_enable: 184err_clk_enable:
183 clk_put(clk); 185 clk_put(clk);
184err_clk_get: 186err_clk_get:
185 return; 187 return ret;
186} 188}
187 189
188CLOCKSOURCE_OF_DECLARE(stm32, "st,stm32-timer", stm32_clockevent_init); 190CLOCKSOURCE_OF_DECLARE_RET(stm32, "st,stm32-timer", stm32_clockevent_init);