Commit 6792e636 authored by Tomasz Figa's avatar Tomasz Figa

clocksource: samsung_pwm_timer: Do not use clocksource_mmio

In case of Samsung PWM timer, clocksource MMIO can not be used, because
custom suspend/resume callbacks are required.
Signed-off-by: default avatarTomasz Figa <tomasz.figa@gmail.com>
Reviewed-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
Reviewed-by: default avatarSylwester Nawrocki <s.nawrocki@samsung.com>
Tested-by: default avatarHeiko Stuebner <heiko@sntech.de>
Tested-by: default avatarMark Brown <broonie@linaro.org>
Tested-by: default avatarSylwester Nawrocki <sylvester.nawrocki@gmail.com>
Acked-by: default avatarArnd Bergmann <arnd@arndb.de>
parent 61d7e205
...@@ -99,7 +99,6 @@ config CLKSRC_EXYNOS_MCT ...@@ -99,7 +99,6 @@ config CLKSRC_EXYNOS_MCT
config CLKSRC_SAMSUNG_PWM config CLKSRC_SAMSUNG_PWM
bool bool
select CLKSRC_MMIO
help help
This is a new clocksource driver for the PWM timer found in This is a new clocksource driver for the PWM timer found in
Samsung S3C, S5P and Exynos SoCs, replacing an earlier driver Samsung S3C, S5P and Exynos SoCs, replacing an earlier driver
......
...@@ -298,6 +298,18 @@ static void __init samsung_clockevent_init(void) ...@@ -298,6 +298,18 @@ static void __init samsung_clockevent_init(void)
} }
} }
static cycle_t samsung_clocksource_read(struct clocksource *c)
{
return ~readl_relaxed(pwm.source_reg);
}
static struct clocksource samsung_clocksource = {
.name = "samsung_clocksource_timer",
.rating = 250,
.read = samsung_clocksource_read,
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
};
/* /*
* Override the global weak sched_clock symbol with this * Override the global weak sched_clock symbol with this
* local implementation which uses the clocksource to get some * local implementation which uses the clocksource to get some
...@@ -307,7 +319,7 @@ static void __init samsung_clockevent_init(void) ...@@ -307,7 +319,7 @@ static void __init samsung_clockevent_init(void)
*/ */
static u32 notrace samsung_read_sched_clock(void) static u32 notrace samsung_read_sched_clock(void)
{ {
return ~__raw_readl(pwm.source_reg); return samsung_clocksource_read(NULL);
} }
static void __init samsung_clocksource_init(void) static void __init samsung_clocksource_init(void)
...@@ -334,9 +346,8 @@ static void __init samsung_clocksource_init(void) ...@@ -334,9 +346,8 @@ static void __init samsung_clocksource_init(void)
setup_sched_clock(samsung_read_sched_clock, setup_sched_clock(samsung_read_sched_clock,
pwm.variant.bits, clock_rate); pwm.variant.bits, clock_rate);
ret = clocksource_mmio_init(pwm.source_reg, "samsung_clocksource_timer", samsung_clocksource.mask = CLOCKSOURCE_MASK(pwm.variant.bits);
clock_rate, 250, pwm.variant.bits, ret = clocksource_register_hz(&samsung_clocksource, clock_rate);
clocksource_mmio_readl_down);
if (ret) if (ret)
panic("samsung_clocksource_timer: can't register clocksource\n"); panic("samsung_clocksource_timer: can't register clocksource\n");
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment