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

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

ARM: 6296/1: clock U300 intcon and timer properly



This removes the quirks to clock the U300 VIC and timer by custom
hooks and moves the control out to the clock framework where it
belongs. This is possible now that clocks are available early.

Signed-off-by: default avatarLinus Walleij <linus.walleij@stericsson.com>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 379aae5d
Loading
Loading
Loading
Loading
+0 −19
Original line number Diff line number Diff line
@@ -1315,25 +1315,6 @@ static void __init clk_register(void)
	clkdev_add_table(lookups, ARRAY_SIZE(lookups));
}

/*
 * The interrupt controller is enabled before the clock API is registered.
 */
void u300_enable_intcon_clock(void)
{
	clk_enable(&intcon_clk);
}
EXPORT_SYMBOL(u300_enable_intcon_clock);

/*
 * The timer is enabled before the clock API is registered.
 */
void u300_enable_timer_clock(void)
{
	clk_enable(&app_timer_clk);
}
EXPORT_SYMBOL(u300_enable_timer_clock);


#if (defined(CONFIG_DEBUG_FS) && defined(CONFIG_U300_DEBUG))
/*
 * The following makes it possible to view the status (especially
+0 −2
Original line number Diff line number Diff line
@@ -45,8 +45,6 @@ struct clk {
	void (*disable) (struct clk *);
};

void u300_enable_intcon_clock(void);
void u300_enable_timer_clock(void);
int u300_clock_init(void);

#endif
+8 −1
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@
#include <linux/amba/bus.h>
#include <linux/platform_device.h>
#include <linux/gpio.h>
#include <linux/clk.h>
#include <linux/err.h>
#include <mach/coh901318.h>

#include <asm/types.h>
@@ -1477,14 +1479,19 @@ static struct platform_device *platform_devs[] __initdata = {
void __init u300_init_irq(void)
{
	u32 mask[2] = {0, 0};
	struct clk *clk;
	int i;

	/* initialize clocking early, we want to clock the INTCON */
	u300_clock_init();

	/* Clock the interrupt controller */
	clk = clk_get_sys("intcon", NULL);
	BUG_ON(IS_ERR(clk));
	clk_enable(clk);

	for (i = 0; i < NR_IRQS; i++)
		set_bit(i, (unsigned long *) &mask[0]);
	u300_enable_intcon_clock();
	vic_init((void __iomem *) U300_INTCON0_VBASE, 0, mask[0], mask[0]);
	vic_init((void __iomem *) U300_INTCON1_VBASE, 32, mask[1], mask[1]);
}
+9 −2
Original line number Diff line number Diff line
@@ -15,6 +15,8 @@
#include <linux/clocksource.h>
#include <linux/types.h>
#include <linux/io.h>
#include <linux/clk.h>
#include <linux/err.h>

#include <mach/hardware.h>

@@ -23,7 +25,6 @@
#include <asm/mach/time.h>
#include <asm/mach/irq.h>

#include "clock.h"

/*
 * APP side special timer registers
@@ -367,7 +368,13 @@ unsigned long long notrace sched_clock(void)
 */
static void __init u300_timer_init(void)
{
	u300_enable_timer_clock();
	struct clk *clk;

	/* Clock the interrupt controller */
	clk = clk_get_sys("apptimer", NULL);
	BUG_ON(IS_ERR(clk));
	clk_enable(clk);

	/*
	 * Disable the "OS" and "DD" timers - these are designed for Symbian!
	 * Example usage in cnh1601578 cpu subsystem pd_timer_app.c