lkml.org 
[lkml]   [2015]   [Jul]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 11/23] nios2/time: Migrate to new 'set-state' interface
    Date
    Migrate nios2 driver to the new 'set-state' interface provided by
    clockevents core, the earlier 'set-mode' interface is marked obsolete
    now.

    This also enables us to implement callbacks for new states of clockevent
    devices, for example: ONESHOT_STOPPED.

    Cc: Ley Foon Tan <lftan@altera.com>
    Cc: Tobias Klauser <tklauser@distanz.ch>
    Cc: Herbert Xu <herbert@gondor.apana.org.au>
    Cc: Dmitry Torokhov <dtor@chromium.org>
    Cc: nios2-dev@lists.rocketboards.org
    Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
    ---
    arch/nios2/kernel/time.c | 49 ++++++++++++++++++++++++++++--------------------
    1 file changed, 29 insertions(+), 20 deletions(-)

    diff --git a/arch/nios2/kernel/time.c b/arch/nios2/kernel/time.c
    index 9e3cc8a40ee9..bbc3f9157f9c 100644
    --- a/arch/nios2/kernel/time.c
    +++ b/arch/nios2/kernel/time.c
    @@ -130,7 +130,7 @@ static void nios2_timer_stop(struct nios2_timer *timer)
    }

    static void nios2_timer_config(struct nios2_timer *timer, unsigned long period,
    - enum clock_event_mode mode)
    + bool periodic)
    {
    u16 ctrl;

    @@ -148,7 +148,7 @@ static void nios2_timer_config(struct nios2_timer *timer, unsigned long period,
    timer_writew(timer, period >> 16, ALTERA_TIMER_PERIODH_REG);

    ctrl |= ALTERA_TIMER_CONTROL_START_MSK | ALTERA_TIMER_CONTROL_ITO_MSK;
    - if (mode == CLOCK_EVT_MODE_PERIODIC)
    + if (periodic)
    ctrl |= ALTERA_TIMER_CONTROL_CONT_MSK;
    else
    ctrl &= ~ALTERA_TIMER_CONTROL_CONT_MSK;
    @@ -160,32 +160,38 @@ static int nios2_timer_set_next_event(unsigned long delta,
    {
    struct nios2_clockevent_dev *nios2_ced = to_nios2_clkevent(evt);

    - nios2_timer_config(&nios2_ced->timer, delta, evt->mode);
    + nios2_timer_config(&nios2_ced->timer, delta, false);

    return 0;
    }

    -static void nios2_timer_set_mode(enum clock_event_mode mode,
    - struct clock_event_device *evt)
    +static int nios2_timer_shutdown(struct clock_event_device *evt)
    +{
    + struct nios2_clockevent_dev *nios2_ced = to_nios2_clkevent(evt);
    + struct nios2_timer *timer = &nios2_ced->timer;
    +
    + nios2_timer_stop(timer);
    + return 0;
    +}
    +
    +static int nios2_timer_set_periodic(struct clock_event_device *evt)
    {
    unsigned long period;
    struct nios2_clockevent_dev *nios2_ced = to_nios2_clkevent(evt);
    struct nios2_timer *timer = &nios2_ced->timer;

    - switch (mode) {
    - case CLOCK_EVT_MODE_PERIODIC:
    - period = DIV_ROUND_UP(timer->freq, HZ);
    - nios2_timer_config(timer, period, CLOCK_EVT_MODE_PERIODIC);
    - break;
    - case CLOCK_EVT_MODE_ONESHOT:
    - case CLOCK_EVT_MODE_UNUSED:
    - case CLOCK_EVT_MODE_SHUTDOWN:
    - nios2_timer_stop(timer);
    - break;
    - case CLOCK_EVT_MODE_RESUME:
    - nios2_timer_start(timer);
    - break;
    - }
    + period = DIV_ROUND_UP(timer->freq, HZ);
    + nios2_timer_config(timer, period, true);
    + return 0;
    +}
    +
    +static int nios2_timer_resume(struct clock_event_device *evt)
    +{
    + struct nios2_clockevent_dev *nios2_ced = to_nios2_clkevent(evt);
    + struct nios2_timer *timer = &nios2_ced->timer;
    +
    + nios2_timer_start(timer);
    + return 0;
    }

    irqreturn_t timer_interrupt(int irq, void *dev_id)
    @@ -218,7 +224,10 @@ static struct nios2_clockevent_dev nios2_ce = {
    .rating = 250,
    .shift = 32,
    .set_next_event = nios2_timer_set_next_event,
    - .set_mode = nios2_timer_set_mode,
    + .set_state_shutdown = nios2_timer_shutdown,
    + .set_state_periodic = nios2_timer_set_periodic,
    + .set_state_oneshot = nios2_timer_shutdown,
    + .tick_resume = nios2_timer_resume,
    },
    };

    --
    2.4.0


    \
     
     \ /
      Last update: 2015-07-16 13:41    [W:3.488 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site