[PATCH v4 04/20] clocksource: samsung_pwm_timer: Do not use clocksource_mmio
Daniel Lezcano
daniel.lezcano at linaro.org
Sun Jul 21 23:56:16 EDT 2013
On 07/20/2013 02:04 AM, Tomasz Figa wrote:
> In case of Samsung PWM timer, clocksource MMIO can not be used, because
> custom suspend/resume callbacks are required.
>
> Signed-off-by: Tomasz Figa <tomasz.figa at gmail.com>
> ---
Reviewed-by: Daniel Lezcano <daniel.lezcano at linaro.org>
Please in the future Cc me and Thomas Gleixner (clocksource/clockevent
maintainers).
Thanks
-- Daniel
> drivers/clocksource/Kconfig | 1 -
> drivers/clocksource/samsung_pwm_timer.c | 19 +++++++++++++++----
> 2 files changed, 15 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
> index b7b9b04..41c6946 100644
> --- a/drivers/clocksource/Kconfig
> +++ b/drivers/clocksource/Kconfig
> @@ -99,7 +99,6 @@ config CLKSRC_EXYNOS_MCT
>
> config CLKSRC_SAMSUNG_PWM
> bool
> - select CLKSRC_MMIO
> help
> This is a new clocksource driver for the PWM timer found in
> Samsung S3C, S5P and Exynos SoCs, replacing an earlier driver
> diff --git a/drivers/clocksource/samsung_pwm_timer.c b/drivers/clocksource/samsung_pwm_timer.c
> index 823279b..753ffec 100644
> --- a/drivers/clocksource/samsung_pwm_timer.c
> +++ b/drivers/clocksource/samsung_pwm_timer.c
> @@ -288,6 +288,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
> * local implementation which uses the clocksource to get some
> @@ -297,7 +309,7 @@ static void __init samsung_clockevent_init(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)
> @@ -324,9 +336,8 @@ static void __init samsung_clocksource_init(void)
> setup_sched_clock(samsung_read_sched_clock,
> pwm.variant.bits, clock_rate);
>
> - ret = clocksource_mmio_init(pwm.source_reg, "samsung_clocksource_timer",
> - clock_rate, 250, pwm.variant.bits,
> - clocksource_mmio_readl_down);
> + samsung_clocksource.mask = CLOCKSOURCE_MASK(pwm.variant.bits);
> + ret = clocksource_register_hz(&samsung_clocksource, clock_rate);
> if (ret)
> panic("samsung_clocksource_timer: can't register clocksource\n");
> }
>
--
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs
Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog
More information about the linux-arm-kernel
mailing list