| .. | .. |
|---|
| 258 | 258 | resource_size(&timer_cfg->reg), |
|---|
| 259 | 259 | "davinci-timer")) { |
|---|
| 260 | 260 | pr_err("Unable to request memory region\n"); |
|---|
| 261 | | - return -EBUSY; |
|---|
| 261 | + rv = -EBUSY; |
|---|
| 262 | + goto exit_clk_disable; |
|---|
| 262 | 263 | } |
|---|
| 263 | 264 | |
|---|
| 264 | 265 | base = ioremap(timer_cfg->reg.start, resource_size(&timer_cfg->reg)); |
|---|
| 265 | 266 | if (!base) { |
|---|
| 266 | 267 | pr_err("Unable to map the register range\n"); |
|---|
| 267 | | - return -ENOMEM; |
|---|
| 268 | + rv = -ENOMEM; |
|---|
| 269 | + goto exit_mem_region; |
|---|
| 268 | 270 | } |
|---|
| 269 | 271 | |
|---|
| 270 | 272 | davinci_timer_init(base); |
|---|
| 271 | 273 | tick_rate = clk_get_rate(clk); |
|---|
| 272 | 274 | |
|---|
| 273 | 275 | clockevent = kzalloc(sizeof(*clockevent), GFP_KERNEL); |
|---|
| 274 | | - if (!clockevent) |
|---|
| 275 | | - return -ENOMEM; |
|---|
| 276 | + if (!clockevent) { |
|---|
| 277 | + rv = -ENOMEM; |
|---|
| 278 | + goto exit_iounmap_base; |
|---|
| 279 | + } |
|---|
| 276 | 280 | |
|---|
| 277 | 281 | clockevent->dev.name = "tim12"; |
|---|
| 278 | 282 | clockevent->dev.features = CLOCK_EVT_FEAT_ONESHOT; |
|---|
| .. | .. |
|---|
| 297 | 301 | "clockevent/tim12", clockevent); |
|---|
| 298 | 302 | if (rv) { |
|---|
| 299 | 303 | pr_err("Unable to request the clockevent interrupt\n"); |
|---|
| 300 | | - return rv; |
|---|
| 304 | + goto exit_free_clockevent; |
|---|
| 301 | 305 | } |
|---|
| 302 | 306 | |
|---|
| 303 | 307 | davinci_clocksource.dev.rating = 300; |
|---|
| .. | .. |
|---|
| 324 | 328 | rv = clocksource_register_hz(&davinci_clocksource.dev, tick_rate); |
|---|
| 325 | 329 | if (rv) { |
|---|
| 326 | 330 | pr_err("Unable to register clocksource\n"); |
|---|
| 327 | | - return rv; |
|---|
| 331 | + goto exit_free_irq; |
|---|
| 328 | 332 | } |
|---|
| 329 | 333 | |
|---|
| 330 | 334 | sched_clock_register(davinci_timer_read_sched_clock, |
|---|
| 331 | 335 | DAVINCI_TIMER_CLKSRC_BITS, tick_rate); |
|---|
| 332 | 336 | |
|---|
| 333 | 337 | return 0; |
|---|
| 338 | + |
|---|
| 339 | +exit_free_irq: |
|---|
| 340 | + free_irq(timer_cfg->irq[DAVINCI_TIMER_CLOCKEVENT_IRQ].start, |
|---|
| 341 | + clockevent); |
|---|
| 342 | +exit_free_clockevent: |
|---|
| 343 | + kfree(clockevent); |
|---|
| 344 | +exit_iounmap_base: |
|---|
| 345 | + iounmap(base); |
|---|
| 346 | +exit_mem_region: |
|---|
| 347 | + release_mem_region(timer_cfg->reg.start, |
|---|
| 348 | + resource_size(&timer_cfg->reg)); |
|---|
| 349 | +exit_clk_disable: |
|---|
| 350 | + clk_disable_unprepare(clk); |
|---|
| 351 | + return rv; |
|---|
| 334 | 352 | } |
|---|
| 335 | 353 | |
|---|
| 336 | 354 | static int __init of_davinci_timer_register(struct device_node *np) |
|---|