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

Commit a0719f52 authored by Linus Walleij's avatar Linus Walleij Committed by Russell King
Browse files

ARM: 6376/1: plat-nomadik: MTU: Change prescaler limit and comment updates



The prescaler 16 is now used only when the timer runs at 32 MHz
or more. Some comment updates as well.

Acked-by: default avatarAlessandro Rubini <rubini@unipv.it>
Signed-off-by: default avatarJonas Aaberg <jonas.aberg@stericsson.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@stericsson.com>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 99f76891
Loading
Loading
Loading
Loading
+10 −7
Original line number Original line Diff line number Diff line
/*
/*
 *  linux/arch/arm/mach-nomadik/timer.c
 *  linux/arch/arm/plat-nomadik/timer.c
 *
 *
 * Copyright (C) 2008 STMicroelectronics
 * Copyright (C) 2008 STMicroelectronics
 * Copyright (C) 2010 Alessandro Rubini
 * Copyright (C) 2010 Alessandro Rubini
@@ -75,7 +75,7 @@ static void nmdk_clkevt_mode(enum clock_event_mode mode,
		cr = readl(mtu_base + MTU_CR(1));
		cr = readl(mtu_base + MTU_CR(1));
		writel(0, mtu_base + MTU_LR(1));
		writel(0, mtu_base + MTU_LR(1));
		writel(cr | MTU_CRn_ENA, mtu_base + MTU_CR(1));
		writel(cr | MTU_CRn_ENA, mtu_base + MTU_CR(1));
		writel(0x2, mtu_base + MTU_IMSC);
		writel(1 << 1, mtu_base + MTU_IMSC);
		break;
		break;
	case CLOCK_EVT_MODE_SHUTDOWN:
	case CLOCK_EVT_MODE_SHUTDOWN:
	case CLOCK_EVT_MODE_UNUSED:
	case CLOCK_EVT_MODE_UNUSED:
@@ -131,7 +131,7 @@ void __init nmdk_timer_init(void)
{
{
	unsigned long rate;
	unsigned long rate;
	struct clk *clk0;
	struct clk *clk0;
	u32 cr;
	u32 cr = MTU_CRn_32BITS;


	clk0 = clk_get_sys("mtu0", NULL);
	clk0 = clk_get_sys("mtu0", NULL);
	BUG_ON(IS_ERR(clk0));
	BUG_ON(IS_ERR(clk0));
@@ -139,12 +139,15 @@ void __init nmdk_timer_init(void)
	clk_enable(clk0);
	clk_enable(clk0);


	/*
	/*
	 * Tick rate is 2.4MHz for Nomadik and 110MHz for ux500:
	 * Tick rate is 2.4MHz for Nomadik and 2.4Mhz, 100MHz or 133 MHz
	 * use a divide-by-16 counter if it's more than 16MHz
	 * for ux500.
	 * Use a divide-by-16 counter if the tick rate is more than 32MHz.
	 * At 32 MHz, the timer (with 32 bit counter) can be programmed
	 * to wake-up at a max 127s a head in time. Dividing a 2.4 MHz timer
	 * with 16 gives too low timer resolution.
	 */
	 */
	cr = MTU_CRn_32BITS;;
	rate = clk_get_rate(clk0);
	rate = clk_get_rate(clk0);
	if (rate > 16 << 20) {
	if (rate > 32000000) {
		rate /= 16;
		rate /= 16;
		cr |= MTU_CRn_PRESCALE_16;
		cr |= MTU_CRn_PRESCALE_16;
	} else {
	} else {