Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6c724d43 authored by Viresh Kumar's avatar Viresh Kumar
Browse files

ARM/w90x900/time: Migrate to new 'set-state' interface



Migrate w90x900 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: Wan ZongShun <mcuos.com@gmail.com>
Signed-off-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
parent 7639c0b8
Loading
Loading
Loading
Loading
+28 −23
Original line number Diff line number Diff line
@@ -48,31 +48,32 @@

static unsigned int timer0_load;

static void nuc900_clockevent_setmode(enum clock_event_mode mode,
		struct clock_event_device *clk)
static int nuc900_clockevent_shutdown(struct clock_event_device *evt)
{
	unsigned int val;
	unsigned int val = __raw_readl(REG_TCSR0) & ~(0x03 << 27);

	val = __raw_readl(REG_TCSR0);
	val &= ~(0x03 << 27);
	__raw_writel(val, REG_TCSR0);
	return 0;
}

	switch (mode) {
	case CLOCK_EVT_MODE_PERIODIC:
		__raw_writel(timer0_load, REG_TICR0);
		val |= (PERIOD | COUNTEN | INTEN | PRESCALE);
		break;
static int nuc900_clockevent_set_oneshot(struct clock_event_device *evt)
{
	unsigned int val = __raw_readl(REG_TCSR0) & ~(0x03 << 27);

	case CLOCK_EVT_MODE_ONESHOT:
	val |= (ONESHOT | COUNTEN | INTEN | PRESCALE);
		break;

	case CLOCK_EVT_MODE_UNUSED:
	case CLOCK_EVT_MODE_SHUTDOWN:
	case CLOCK_EVT_MODE_RESUME:
		break;
	__raw_writel(val, REG_TCSR0);
	return 0;
}

static int nuc900_clockevent_set_periodic(struct clock_event_device *evt)
{
	unsigned int val = __raw_readl(REG_TCSR0) & ~(0x03 << 27);

	__raw_writel(timer0_load, REG_TICR0);
	val |= (PERIOD | COUNTEN | INTEN | PRESCALE);
	__raw_writel(val, REG_TCSR0);
	return 0;
}

static int nuc900_clockevent_setnextevent(unsigned long evt,
@@ -91,8 +92,12 @@ static int nuc900_clockevent_setnextevent(unsigned long evt,

static struct clock_event_device nuc900_clockevent_device = {
	.name			= "nuc900-timer0",
	.features	= CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
	.set_mode	= nuc900_clockevent_setmode,
	.features		= CLOCK_EVT_FEAT_PERIODIC |
				  CLOCK_EVT_FEAT_ONESHOT,
	.set_state_shutdown	= nuc900_clockevent_shutdown,
	.set_state_periodic	= nuc900_clockevent_set_periodic,
	.set_state_oneshot	= nuc900_clockevent_set_oneshot,
	.tick_resume		= nuc900_clockevent_shutdown,
	.set_next_event		= nuc900_clockevent_setnextevent,
	.rating			= 300,
};