/* Enable interrupt, reset on match and stop on match (MCR). */
writel_relaxed(LPC32XX_TIMER_MCR_MR0I | LPC32XX_TIMER_MCR_MR0R |
LPC32XX_TIMER_MCR_MR0S, ddata->base + LPC32XX_TIMER_MCR); return0;
}
clk = of_clk_get_by_name(np, "timerclk"); if (IS_ERR(clk)) {
pr_err("clock get failed (%ld)\n", PTR_ERR(clk)); return PTR_ERR(clk);
}
ret = clk_prepare_enable(clk); if (ret) {
pr_err("clock enable failed (%d)\n", ret); goto err_clk_enable;
}
base = of_iomap(np, 0); if (!base) {
pr_err("unable to map registers\n");
ret = -EADDRNOTAVAIL; goto err_iomap;
}
/* *Disableandresettimerthensetittofreerunningtimer *mode(CTCR)withnoprescaler(PR)ormatchoperations(MCR). *Aftersetupthetimerisreleasedfromresetandenabled.
*/
writel_relaxed(LPC32XX_TIMER_TCR_CRST, base + LPC32XX_TIMER_TCR);
writel_relaxed(0, base + LPC32XX_TIMER_PR);
writel_relaxed(0, base + LPC32XX_TIMER_MCR);
writel_relaxed(0, base + LPC32XX_TIMER_CTCR);
writel_relaxed(LPC32XX_TIMER_TCR_CEN, base + LPC32XX_TIMER_TCR);
rate = clk_get_rate(clk);
ret = clocksource_mmio_init(base + LPC32XX_TIMER_TC, "lpc3220 timer",
rate, 300, 32, clocksource_mmio_readl_up); if (ret) {
pr_err("failed to init clocksource (%d)\n", ret); goto err_clocksource_init;
}
clk = of_clk_get_by_name(np, "timerclk"); if (IS_ERR(clk)) {
pr_err("clock get failed (%ld)\n", PTR_ERR(clk)); return PTR_ERR(clk);
}
ret = clk_prepare_enable(clk); if (ret) {
pr_err("clock enable failed (%d)\n", ret); goto err_clk_enable;
}
base = of_iomap(np, 0); if (!base) {
pr_err("unable to map registers\n");
ret = -EADDRNOTAVAIL; goto err_iomap;
}
irq = irq_of_parse_and_map(np, 0); if (!irq) {
pr_err("get irq failed\n");
ret = -ENOENT; goto err_irq;
}
/* *Disabletimerandclearanypendinginterrupt(IR)onmatch *channel0(MR0).Cleartheprescalerasit'snotused.
*/
writel_relaxed(0, base + LPC32XX_TIMER_TCR);
writel_relaxed(0, base + LPC32XX_TIMER_PR);
writel_relaxed(0, base + LPC32XX_TIMER_CTCR);
writel_relaxed(LPC32XX_TIMER_IR_MR0INT, base + LPC32XX_TIMER_IR);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.