|
@@ -106,6 +106,10 @@ static int __init stm32_clockevent_init(struct device_node *np)
|
|
|
unsigned long rate, max_delta;
|
|
|
int irq, ret, bits, prescaler = 1;
|
|
|
|
|
|
+ data = kmemdup(&clock_event_ddata, sizeof(*data), GFP_KERNEL);
|
|
|
+ if (!data)
|
|
|
+ return -ENOMEM;
|
|
|
+
|
|
|
clk = of_clk_get(np, 0);
|
|
|
if (IS_ERR(clk)) {
|
|
|
ret = PTR_ERR(clk);
|
|
@@ -156,8 +160,8 @@ static int __init stm32_clockevent_init(struct device_node *np)
|
|
|
|
|
|
writel_relaxed(prescaler - 1, data->base + TIM_PSC);
|
|
|
writel_relaxed(TIM_EGR_UG, data->base + TIM_EGR);
|
|
|
- writel_relaxed(TIM_DIER_UIE, data->base + TIM_DIER);
|
|
|
writel_relaxed(0, data->base + TIM_SR);
|
|
|
+ writel_relaxed(TIM_DIER_UIE, data->base + TIM_DIER);
|
|
|
|
|
|
data->periodic_top = DIV_ROUND_CLOSEST(rate, prescaler * HZ);
|
|
|
|
|
@@ -184,6 +188,7 @@ err_iomap:
|
|
|
err_clk_enable:
|
|
|
clk_put(clk);
|
|
|
err_clk_get:
|
|
|
+ kfree(data);
|
|
|
return ret;
|
|
|
}
|
|
|
|