Commit 1d16cfb3 authored by Rob Herring's avatar Rob Herring

clocksource: tegra20: use the device_node pointer passed to init

We've already matched the node, so use the node pointer passed in. The rtc
init was intermingled with the timer init, so split this out to a separate
init function.
Signed-off-by: default avatarRob Herring <rob.herring@calxeda.com>

Cc: John Stultz <johnstul@us.ibm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: default avatarStephen Warren <swarren@nvidia.com>
Tested-by: default avatarStephen Warren <swarren@nvidia.com>
parent effbfdd7
...@@ -154,28 +154,12 @@ static struct irqaction tegra_timer_irq = { ...@@ -154,28 +154,12 @@ static struct irqaction tegra_timer_irq = {
.dev_id = &tegra_clockevent, .dev_id = &tegra_clockevent,
}; };
static const struct of_device_id timer_match[] __initconst = {
{ .compatible = "nvidia,tegra20-timer" },
{}
};
static const struct of_device_id rtc_match[] __initconst = {
{ .compatible = "nvidia,tegra20-rtc" },
{}
};
static void __init tegra20_init_timer(struct device_node *np) static void __init tegra20_init_timer(struct device_node *np)
{ {
struct clk *clk; struct clk *clk;
unsigned long rate; unsigned long rate;
int ret; int ret;
np = of_find_matching_node(NULL, timer_match);
if (!np) {
pr_err("Failed to find timer DT node\n");
BUG();
}
timer_reg_base = of_iomap(np, 0); timer_reg_base = of_iomap(np, 0);
if (!timer_reg_base) { if (!timer_reg_base) {
pr_err("Can't map timer registers\n"); pr_err("Can't map timer registers\n");
...@@ -199,30 +183,6 @@ static void __init tegra20_init_timer(struct device_node *np) ...@@ -199,30 +183,6 @@ static void __init tegra20_init_timer(struct device_node *np)
of_node_put(np); of_node_put(np);
np = of_find_matching_node(NULL, rtc_match);
if (!np) {
pr_err("Failed to find RTC DT node\n");
BUG();
}
rtc_base = of_iomap(np, 0);
if (!rtc_base) {
pr_err("Can't map RTC registers");
BUG();
}
/*
* rtc registers are used by read_persistent_clock, keep the rtc clock
* enabled
*/
clk = clk_get_sys("rtc-tegra", NULL);
if (IS_ERR(clk))
pr_warn("Unable to get rtc-tegra clock\n");
else
clk_prepare_enable(clk);
of_node_put(np);
switch (rate) { switch (rate) {
case 12000000: case 12000000:
timer_writel(0x000b, TIMERUS_USEC_CFG); timer_writel(0x000b, TIMERUS_USEC_CFG);
...@@ -261,9 +221,34 @@ static void __init tegra20_init_timer(struct device_node *np) ...@@ -261,9 +221,34 @@ static void __init tegra20_init_timer(struct device_node *np)
#ifdef CONFIG_HAVE_ARM_TWD #ifdef CONFIG_HAVE_ARM_TWD
twd_local_timer_of_register(); twd_local_timer_of_register();
#endif #endif
}
CLOCKSOURCE_OF_DECLARE(tegra20_timer, "nvidia,tegra20-timer", tegra20_init_timer);
static void __init tegra20_init_rtc(struct device_node *np)
{
struct clk *clk;
rtc_base = of_iomap(np, 0);
if (!rtc_base) {
pr_err("Can't map RTC registers");
BUG();
}
/*
* rtc registers are used by read_persistent_clock, keep the rtc clock
* enabled
*/
clk = clk_get_sys("rtc-tegra", NULL);
if (IS_ERR(clk))
pr_warn("Unable to get rtc-tegra clock\n");
else
clk_prepare_enable(clk);
of_node_put(np);
register_persistent_clock(NULL, tegra_read_persistent_clock); register_persistent_clock(NULL, tegra_read_persistent_clock);
} }
CLOCKSOURCE_OF_DECLARE(tegra20, "nvidia,tegra20-timer", tegra20_init_timer); CLOCKSOURCE_OF_DECLARE(tegra20_rtc, "nvidia,tegra20-rtc", tegra20_init_rtc);
#ifdef CONFIG_PM #ifdef CONFIG_PM
static u32 usec_config; static u32 usec_config;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment