|
@@ -84,9 +84,6 @@ static int em_sti_enable(struct em_sti_priv *p)
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
- /* configure channel, periodic mode and maximum timeout */
|
|
|
- p->rate = clk_get_rate(p->clk);
|
|
|
-
|
|
|
/* reset the counter */
|
|
|
em_sti_write(p, STI_SET_H, 0x40000000);
|
|
|
em_sti_write(p, STI_SET_L, 0x00000000);
|
|
@@ -205,13 +202,9 @@ static u64 em_sti_clocksource_read(struct clocksource *cs)
|
|
|
|
|
|
static int em_sti_clocksource_enable(struct clocksource *cs)
|
|
|
{
|
|
|
- int ret;
|
|
|
struct em_sti_priv *p = cs_to_em_sti(cs);
|
|
|
|
|
|
- ret = em_sti_start(p, USER_CLOCKSOURCE);
|
|
|
- if (!ret)
|
|
|
- __clocksource_update_freq_hz(cs, p->rate);
|
|
|
- return ret;
|
|
|
+ return em_sti_start(p, USER_CLOCKSOURCE);
|
|
|
}
|
|
|
|
|
|
static void em_sti_clocksource_disable(struct clocksource *cs)
|
|
@@ -240,8 +233,7 @@ static int em_sti_register_clocksource(struct em_sti_priv *p)
|
|
|
|
|
|
dev_info(&p->pdev->dev, "used as clock source\n");
|
|
|
|
|
|
- /* Register with dummy 1 Hz value, gets updated in ->enable() */
|
|
|
- clocksource_register_hz(cs, 1);
|
|
|
+ clocksource_register_hz(cs, p->rate);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -263,7 +255,6 @@ static int em_sti_clock_event_set_oneshot(struct clock_event_device *ced)
|
|
|
|
|
|
dev_info(&p->pdev->dev, "used for oneshot clock events\n");
|
|
|
em_sti_start(p, USER_CLOCKEVENT);
|
|
|
- clockevents_config(&p->ced, p->rate);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -294,8 +285,7 @@ static void em_sti_register_clockevent(struct em_sti_priv *p)
|
|
|
|
|
|
dev_info(&p->pdev->dev, "used for clock events\n");
|
|
|
|
|
|
- /* Register with dummy 1 Hz value, gets updated in ->set_state_oneshot() */
|
|
|
- clockevents_config_and_register(ced, 1, 2, 0xffffffff);
|
|
|
+ clockevents_config_and_register(ced, p->rate, 2, 0xffffffff);
|
|
|
}
|
|
|
|
|
|
static int em_sti_probe(struct platform_device *pdev)
|
|
@@ -344,6 +334,15 @@ static int em_sti_probe(struct platform_device *pdev)
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+ ret = clk_enable(p->clk);
|
|
|
+ if (ret < 0) {
|
|
|
+ dev_err(&p->pdev->dev, "cannot enable clock\n");
|
|
|
+ clk_unprepare(p->clk);
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+ p->rate = clk_get_rate(p->clk);
|
|
|
+ clk_disable(p->clk);
|
|
|
+
|
|
|
raw_spin_lock_init(&p->lock);
|
|
|
em_sti_register_clockevent(p);
|
|
|
em_sti_register_clocksource(p);
|