aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>2013-10-01 05:00:53 -0400
committerDaniel Lezcano <daniel.lezcano@linaro.org>2013-10-02 05:42:48 -0400
commit326e31eebe61dc838e031ea16968b2cfb43443e3 (patch)
treea4e11e9c3f9b2e2b8463750d1a767a1f0ba94971
parentfa94bd57b5a5b2206e5fdd0ed2dbacff199121f2 (diff)
clocksource: Put nodes passed to CLOCKSOURCE_OF_DECLARE callbacks centrally
Instead of letting each driver call of_node_put do it centrally in the loop that also calls the CLOCKSOURCE_OF_DECLARE callbacks. This is less prone to error and also moves getting and putting the references into the same function. Consequently all respective of_node_put calls in drivers are removed. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> Acked-by: David Brown <davidb@codeaurora.org>
-rw-r--r--arch/arm/mach-msm/timer.c1
-rw-r--r--drivers/clocksource/clksrc-of.c1
-rw-r--r--drivers/clocksource/dw_apb_timer_of.c2
-rw-r--r--drivers/clocksource/tegra20_timer.c4
-rw-r--r--drivers/clocksource/vt8500_timer.c2
5 files changed, 1 insertions, 9 deletions
diff --git a/arch/arm/mach-msm/timer.c b/arch/arm/mach-msm/timer.c
index 696fb73296d0..1e9c3383daba 100644
--- a/arch/arm/mach-msm/timer.c
+++ b/arch/arm/mach-msm/timer.c
@@ -274,7 +274,6 @@ static void __init msm_dt_timer_init(struct device_node *np)
274 pr_err("Unknown frequency\n"); 274 pr_err("Unknown frequency\n");
275 return; 275 return;
276 } 276 }
277 of_node_put(np);
278 277
279 event_base = base + 0x4; 278 event_base = base + 0x4;
280 sts_base = base + 0x88; 279 sts_base = base + 0x88;
diff --git a/drivers/clocksource/clksrc-of.c b/drivers/clocksource/clksrc-of.c
index 37f5325bec95..8b2ed14f121d 100644
--- a/drivers/clocksource/clksrc-of.c
+++ b/drivers/clocksource/clksrc-of.c
@@ -32,5 +32,6 @@ void __init clocksource_of_init(void)
32 for_each_matching_node_and_match(np, __clksrc_of_table, &match) { 32 for_each_matching_node_and_match(np, __clksrc_of_table, &match) {
33 init_func = match->data; 33 init_func = match->data;
34 init_func(np); 34 init_func(np);
35 of_node_put(np);
35 } 36 }
36} 37}
diff --git a/drivers/clocksource/dw_apb_timer_of.c b/drivers/clocksource/dw_apb_timer_of.c
index 003b2309f463..482618b59fa4 100644
--- a/drivers/clocksource/dw_apb_timer_of.c
+++ b/drivers/clocksource/dw_apb_timer_of.c
@@ -138,12 +138,10 @@ static void __init dw_apb_timer_init(struct device_node *timer)
138 case 0: 138 case 0:
139 pr_debug("%s: found clockevent timer\n", __func__); 139 pr_debug("%s: found clockevent timer\n", __func__);
140 add_clockevent(timer); 140 add_clockevent(timer);
141 of_node_put(timer);
142 break; 141 break;
143 case 1: 142 case 1:
144 pr_debug("%s: found clocksource timer\n", __func__); 143 pr_debug("%s: found clocksource timer\n", __func__);
145 add_clocksource(timer); 144 add_clocksource(timer);
146 of_node_put(timer);
147 init_sched_clock(); 145 init_sched_clock();
148 break; 146 break;
149 default: 147 default:
diff --git a/drivers/clocksource/tegra20_timer.c b/drivers/clocksource/tegra20_timer.c
index 5cff61677b6c..642849256d82 100644
--- a/drivers/clocksource/tegra20_timer.c
+++ b/drivers/clocksource/tegra20_timer.c
@@ -181,8 +181,6 @@ static void __init tegra20_init_timer(struct device_node *np)
181 rate = clk_get_rate(clk); 181 rate = clk_get_rate(clk);
182 } 182 }
183 183
184 of_node_put(np);
185
186 switch (rate) { 184 switch (rate) {
187 case 12000000: 185 case 12000000:
188 timer_writel(0x000b, TIMERUS_USEC_CFG); 186 timer_writel(0x000b, TIMERUS_USEC_CFG);
@@ -241,8 +239,6 @@ static void __init tegra20_init_rtc(struct device_node *np)
241 else 239 else
242 clk_prepare_enable(clk); 240 clk_prepare_enable(clk);
243 241
244 of_node_put(np);
245
246 register_persistent_clock(NULL, tegra_read_persistent_clock); 242 register_persistent_clock(NULL, tegra_read_persistent_clock);
247} 243}
248CLOCKSOURCE_OF_DECLARE(tegra20_rtc, "nvidia,tegra20-rtc", tegra20_init_rtc); 244CLOCKSOURCE_OF_DECLARE(tegra20_rtc, "nvidia,tegra20-rtc", tegra20_init_rtc);
diff --git a/drivers/clocksource/vt8500_timer.c b/drivers/clocksource/vt8500_timer.c
index 64f553f04fa4..ad3c0e83a779 100644
--- a/drivers/clocksource/vt8500_timer.c
+++ b/drivers/clocksource/vt8500_timer.c
@@ -137,14 +137,12 @@ static void __init vt8500_timer_init(struct device_node *np)
137 if (!regbase) { 137 if (!regbase) {
138 pr_err("%s: Missing iobase description in Device Tree\n", 138 pr_err("%s: Missing iobase description in Device Tree\n",
139 __func__); 139 __func__);
140 of_node_put(np);
141 return; 140 return;
142 } 141 }
143 timer_irq = irq_of_parse_and_map(np, 0); 142 timer_irq = irq_of_parse_and_map(np, 0);
144 if (!timer_irq) { 143 if (!timer_irq) {
145 pr_err("%s: Missing irq description in Device Tree\n", 144 pr_err("%s: Missing irq description in Device Tree\n",
146 __func__); 145 __func__);
147 of_node_put(np);
148 return; 146 return;
149 } 147 }
150 148