[ARM] MXC: rework timer/clock initialisation
- rename mxc_clocks_init to architecture specific versions. This allows us to have more than one architecture compiled in. - call mxc_timer_init from clock initialisation instead from board code Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
a2865197a5
commit
30c730f8f9
13 changed files with 30 additions and 36 deletions
|
@ -25,6 +25,7 @@
|
|||
|
||||
#include <mach/clock.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/common.h>
|
||||
#include "crm_regs.h"
|
||||
|
||||
static int _clk_enable(struct clk *clk)
|
||||
|
@ -594,7 +595,7 @@ static struct clk *mxc_clks[] = {
|
|||
&rtc_clk,
|
||||
};
|
||||
|
||||
int __init mxc_clocks_init(unsigned long fref)
|
||||
int __init mx1_clocks_init(unsigned long fref)
|
||||
{
|
||||
struct clk **clkp;
|
||||
unsigned int reg;
|
||||
|
@ -625,5 +626,7 @@ int __init mxc_clocks_init(unsigned long fref)
|
|||
clk_enable(&hclk);
|
||||
clk_enable(&fclk);
|
||||
|
||||
mxc_timer_init(&gpt_clk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -118,8 +118,7 @@ static void __init mx1ads_init(void)
|
|||
|
||||
static void __init mx1ads_timer_init(void)
|
||||
{
|
||||
mxc_clocks_init(32000);
|
||||
mxc_timer_init("gpt_clk");
|
||||
mx1_clocks_init(32000);
|
||||
}
|
||||
|
||||
struct sys_timer mx1ads_timer = {
|
||||
|
|
|
@ -1551,7 +1551,7 @@ static void __init probe_mxc_clocks(void)
|
|||
* must be called very early to get information about the
|
||||
* available clock rate when the timer framework starts
|
||||
*/
|
||||
int __init mxc_clocks_init(unsigned long fref)
|
||||
int __init mx27_clocks_init(unsigned long fref)
|
||||
{
|
||||
u32 cscr;
|
||||
struct clk **clkp;
|
||||
|
@ -1593,5 +1593,8 @@ int __init mxc_clocks_init(unsigned long fref)
|
|||
#ifdef CONFIG_DEBUG_LL_CONSOLE
|
||||
clk_enable(&uart1_clk[0]);
|
||||
#endif
|
||||
|
||||
mxc_timer_init(&gpt1_clk[0]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -263,8 +263,7 @@ static void __init mx27ads_timer_init(void)
|
|||
if ((__raw_readw(PBC_VERSION_REG) & CKIH_27MHZ_BIT_SET) == 0)
|
||||
fref = 27000000;
|
||||
|
||||
mxc_clocks_init(fref);
|
||||
mxc_timer_init("gpt_clk.0");
|
||||
mx27_clocks_init(fref);
|
||||
}
|
||||
|
||||
struct sys_timer mx27ads_timer = {
|
||||
|
|
|
@ -230,8 +230,7 @@ static void __init pcm038_init(void)
|
|||
|
||||
static void __init pcm038_timer_init(void)
|
||||
{
|
||||
mxc_clocks_init(26000000);
|
||||
mxc_timer_init("gpt_clk.0");
|
||||
mx27_clocks_init(26000000);
|
||||
}
|
||||
|
||||
struct sys_timer pcm038_timer = {
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include <linux/io.h>
|
||||
#include <mach/clock.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/common.h>
|
||||
#include <asm/div64.h>
|
||||
|
||||
#include "crm_regs.h"
|
||||
|
@ -1071,7 +1072,7 @@ static struct clk *mxc_clks[] = {
|
|||
&iim_clk,
|
||||
};
|
||||
|
||||
int __init mxc_clocks_init(unsigned long fref)
|
||||
int __init mx31_clocks_init(unsigned long fref)
|
||||
{
|
||||
u32 reg;
|
||||
struct clk **clkp;
|
||||
|
@ -1121,6 +1122,8 @@ int __init mxc_clocks_init(unsigned long fref)
|
|||
__raw_writel(reg, MXC_CCM_PMCR1);
|
||||
}
|
||||
|
||||
mxc_timer_init(&ipg_clk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -244,8 +244,7 @@ static void __init mxc_board_init(void)
|
|||
|
||||
static void __init mx31ads_timer_init(void)
|
||||
{
|
||||
mxc_clocks_init(26000000);
|
||||
mxc_timer_init("ipg_clk.0");
|
||||
mx31_clocks_init(26000000);
|
||||
}
|
||||
|
||||
struct sys_timer mx31ads_timer = {
|
||||
|
|
|
@ -82,8 +82,7 @@ static void __init mxc_board_init(void)
|
|||
|
||||
static void __init mx31lite_timer_init(void)
|
||||
{
|
||||
mxc_clocks_init(26000000);
|
||||
mxc_timer_init("ipg_clk.0");
|
||||
mx31_clocks_init(26000000);
|
||||
}
|
||||
|
||||
struct sys_timer mx31lite_timer = {
|
||||
|
|
|
@ -120,8 +120,7 @@ void __init mx31moboard_map_io(void)
|
|||
|
||||
static void __init mx31moboard_timer_init(void)
|
||||
{
|
||||
mxc_clocks_init(26000000);
|
||||
mxc_timer_init("ipg_clk.0");
|
||||
mx31_clocks_init(26000000);
|
||||
}
|
||||
|
||||
struct sys_timer mx31moboard_timer = {
|
||||
|
|
|
@ -91,8 +91,7 @@ static void __init mxc_board_init(void)
|
|||
|
||||
static void __init mx31pdk_timer_init(void)
|
||||
{
|
||||
mxc_clocks_init(26000000);
|
||||
mxc_timer_init("ipg_clk.0");
|
||||
mx31_clocks_init(26000000);
|
||||
}
|
||||
|
||||
static struct sys_timer mx31pdk_timer = {
|
||||
|
|
|
@ -181,8 +181,7 @@ void __init pcm037_map_io(void)
|
|||
|
||||
static void __init pcm037_timer_init(void)
|
||||
{
|
||||
mxc_clocks_init(26000000);
|
||||
mxc_timer_init("ipg_clk.0");
|
||||
mx31_clocks_init(26000000);
|
||||
}
|
||||
|
||||
struct sys_timer pcm037_timer = {
|
||||
|
|
|
@ -12,11 +12,14 @@
|
|||
#define __ASM_ARCH_MXC_COMMON_H__
|
||||
|
||||
struct platform_device;
|
||||
struct clk;
|
||||
|
||||
extern void mxc_map_io(void);
|
||||
extern void mxc_init_irq(void);
|
||||
extern void mxc_timer_init(const char *clk_timer);
|
||||
extern int mxc_clocks_init(unsigned long fref);
|
||||
extern void mxc_timer_init(struct clk *timer_clk);
|
||||
extern int mx1_clocks_init(unsigned long fref);
|
||||
extern int mx27_clocks_init(unsigned long fref);
|
||||
extern int mx31_clocks_init(unsigned long fref);
|
||||
extern int mxc_register_gpios(void);
|
||||
extern int mxc_register_device(struct platform_device *pdev, void *data);
|
||||
|
||||
|
|
|
@ -34,9 +34,6 @@
|
|||
static struct clock_event_device clockevent_mxc;
|
||||
static enum clock_event_mode clockevent_mode = CLOCK_EVT_MODE_UNUSED;
|
||||
|
||||
/* clock source for the timer */
|
||||
static struct clk *timer_clk;
|
||||
|
||||
/* clock source */
|
||||
|
||||
static cycle_t mxc_get_cycles(void)
|
||||
|
@ -53,7 +50,7 @@ static struct clocksource clocksource_mxc = {
|
|||
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
||||
};
|
||||
|
||||
static int __init mxc_clocksource_init(void)
|
||||
static int __init mxc_clocksource_init(struct clk *timer_clk)
|
||||
{
|
||||
unsigned int clock;
|
||||
|
||||
|
@ -177,7 +174,7 @@ static struct clock_event_device clockevent_mxc = {
|
|||
.rating = 200,
|
||||
};
|
||||
|
||||
static int __init mxc_clockevent_init(void)
|
||||
static int __init mxc_clockevent_init(struct clk *timer_clk)
|
||||
{
|
||||
unsigned int clock;
|
||||
|
||||
|
@ -197,14 +194,8 @@ static int __init mxc_clockevent_init(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void __init mxc_timer_init(const char *clk_timer)
|
||||
void __init mxc_timer_init(struct clk *timer_clk)
|
||||
{
|
||||
timer_clk = clk_get(NULL, clk_timer);
|
||||
if (!timer_clk) {
|
||||
printk(KERN_ERR"Cannot determine timer clock. Giving up.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
clk_enable(timer_clk);
|
||||
|
||||
/*
|
||||
|
@ -219,10 +210,9 @@ void __init mxc_timer_init(const char *clk_timer)
|
|||
TIMER_BASE + MXC_TCTL);
|
||||
|
||||
/* init and register the timer to the framework */
|
||||
mxc_clocksource_init();
|
||||
mxc_clockevent_init();
|
||||
mxc_clocksource_init(timer_clk);
|
||||
mxc_clockevent_init(timer_clk);
|
||||
|
||||
/* Make irqs happen */
|
||||
setup_irq(TIMER_INTERRUPT, &mxc_timer_irq);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue