aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/clocksource/nomadik-mtu.c
diff options
context:
space:
mode:
authorOlof Johansson <olof@lixom.net>2013-01-28 16:36:23 -0500
committerOlof Johansson <olof@lixom.net>2013-01-28 16:36:23 -0500
commit7bcdd8d5e31db4f49ae52580e86723c376ee0999 (patch)
treebd252895046e9e17d3ab74b6a4d592b74976ca99 /drivers/clocksource/nomadik-mtu.c
parent96e61b8e34ea4982ce57319c19ab73e9e5d74165 (diff)
parentf8060f5446b1f2782f0a8ca9be2d870ea4198aee (diff)
Merge branch 'depends/cleanup' into next/drivers
* depends/cleanup: (375 commits) ARM: at91: fix board-rm9200-dt after sys_timer conversion clocksource: use clockevents_config_and_register() where possible ARM: use clockevents_config_and_register() where possible clockevents: export clockevents_config_and_register for module use timer: vt8500: Move timer code to drivers/clocksource irqchip: Move ARM vic.h to include/linux/irqchip/arm-vic.h ARM: picoxcell: use common irqchip_init function ARM: spear: use common irqchip_init function irqchip: Move ARM VIC to drivers/irqchip ARM: samsung: remove unused tick.h ARM: remove unneeded vic.h includes ARM: remove mach .handle_irq for VIC users ARM: VIC: set handle_arch_irq in VIC initialization ARM: VIC: shrink down vic.h irqchip: Move ARM gic.h to include/linux/irqchip/arm-gic.h ARM: use common irqchip_init for GIC init irqchip: Move ARM GIC to drivers/irqchip ARM: remove mach .handle_irq for GIC users ARM: GIC: set handle_arch_irq in GIC initialization ARM: GIC: remove direct use of gic_raise_softirq ...
Diffstat (limited to 'drivers/clocksource/nomadik-mtu.c')
-rw-r--r--drivers/clocksource/nomadik-mtu.c33
1 files changed, 20 insertions, 13 deletions
diff --git a/drivers/clocksource/nomadik-mtu.c b/drivers/clocksource/nomadik-mtu.c
index 5f3c8dbf360f..435e54d55bbd 100644
--- a/drivers/clocksource/nomadik-mtu.c
+++ b/drivers/clocksource/nomadik-mtu.c
@@ -141,12 +141,32 @@ static void nmdk_clkevt_mode(enum clock_event_mode mode,
141 } 141 }
142} 142}
143 143
144void nmdk_clksrc_reset(void)
145{
146 /* Disable */
147 writel(0, mtu_base + MTU_CR(0));
148
149 /* ClockSource: configure load and background-load, and fire it up */
150 writel(nmdk_cycle, mtu_base + MTU_LR(0));
151 writel(nmdk_cycle, mtu_base + MTU_BGLR(0));
152
153 writel(clk_prescale | MTU_CRn_32BITS | MTU_CRn_ENA,
154 mtu_base + MTU_CR(0));
155}
156
157static void nmdk_clkevt_resume(struct clock_event_device *cedev)
158{
159 nmdk_clkevt_reset();
160 nmdk_clksrc_reset();
161}
162
144static struct clock_event_device nmdk_clkevt = { 163static struct clock_event_device nmdk_clkevt = {
145 .name = "mtu_1", 164 .name = "mtu_1",
146 .features = CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_PERIODIC, 165 .features = CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_PERIODIC,
147 .rating = 200, 166 .rating = 200,
148 .set_mode = nmdk_clkevt_mode, 167 .set_mode = nmdk_clkevt_mode,
149 .set_next_event = nmdk_clkevt_next, 168 .set_next_event = nmdk_clkevt_next,
169 .resume = nmdk_clkevt_resume,
150}; 170};
151 171
152/* 172/*
@@ -168,19 +188,6 @@ static struct irqaction nmdk_timer_irq = {
168 .dev_id = &nmdk_clkevt, 188 .dev_id = &nmdk_clkevt,
169}; 189};
170 190
171void nmdk_clksrc_reset(void)
172{
173 /* Disable */
174 writel(0, mtu_base + MTU_CR(0));
175
176 /* ClockSource: configure load and background-load, and fire it up */
177 writel(nmdk_cycle, mtu_base + MTU_LR(0));
178 writel(nmdk_cycle, mtu_base + MTU_BGLR(0));
179
180 writel(clk_prescale | MTU_CRn_32BITS | MTU_CRn_ENA,
181 mtu_base + MTU_CR(0));
182}
183
184void __init nmdk_timer_init(void __iomem *base, int irq) 191void __init nmdk_timer_init(void __iomem *base, int irq)
185{ 192{
186 unsigned long rate; 193 unsigned long rate;