Messages in this thread Patch in this message | | | From | Arvind Yadav <> | Subject | [v.2] clocksource:clps711x-timer:- Unmap a region obtained by remap. | Date | Mon, 22 Aug 2016 23:07:16 +0530 |
| |
iounmap frees the mapping when timer id is not matching.
Signed-off-by: Arvind Yadav <arvind.yadav.cs@gmail.com> --- drivers/clocksource/clps711x-timer.c | 41 +++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 19 deletions(-)
diff --git a/drivers/clocksource/clps711x-timer.c b/drivers/clocksource/clps711x-timer.c index 24db6d6..13dc295 100644 --- a/drivers/clocksource/clps711x-timer.c +++ b/drivers/clocksource/clps711x-timer.c @@ -33,14 +33,7 @@ static u64 notrace clps711x_sched_clock_read(void) static int __init _clps711x_clksrc_init(struct clk *clock, void __iomem *base) { - unsigned long rate; - - if (!base) - return -ENOMEM; - if (IS_ERR(clock)) - return PTR_ERR(clock); - - rate = clk_get_rate(clock); + unsigned long rate = clk_get_rate(clock); tcd = base; @@ -67,13 +60,6 @@ static int __init _clps711x_clkevt_init(struct clk *clock, void __iomem *base, struct clock_event_device *clkevt; unsigned long rate; - if (!irq) - return -EINVAL; - if (!base) - return -ENOMEM; - if (IS_ERR(clock)) - return PTR_ERR(clock); - clkevt = kzalloc(sizeof(*clkevt), GFP_KERNEL); if (!clkevt) return -ENOMEM; @@ -106,16 +92,33 @@ void __init clps711x_clksrc_init(void __iomem *tc1_base, void __iomem *tc2_base, #ifdef CONFIG_CLKSRC_OF static int __init clps711x_timer_init(struct device_node *np) { - unsigned int irq = irq_of_parse_and_map(np, 0); - struct clk *clock = of_clk_get(np, 0); - void __iomem *base = of_iomap(np, 0); + unsigned int irq; + struct clk *clock; + void __iomem *base; + int ret; + + irq = irq_of_parse_and_map(np, 0); + if (!irq) + return -EINVAL; + + clock = of_clk_get(np, 0); + if (IS_ERR(clock)) + return PTR_ERR(clock); + + base = of_iomap(np, 0); + if (!base) + return -ENOMEM; switch (of_alias_get_id(np, "timer")) { case CLPS711X_CLKSRC_CLOCKSOURCE: return _clps711x_clksrc_init(clock, base); case CLPS711X_CLKSRC_CLOCKEVENT: - return _clps711x_clkevt_init(clock, base, irq); + ret = _clps711x_clkevt_init(clock, base, irq); + if (ret) + iounmap(base); + return ret; default: + iounmap(base); return -EINVAL; } } -- 2.7.4
| |