aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpio/gpio-davinci.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpio/gpio-davinci.c')
-rw-r--r--drivers/gpio/gpio-davinci.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/gpio/gpio-davinci.c b/drivers/gpio/gpio-davinci.c
index ac173575d3f6..65cb359308e3 100644
--- a/drivers/gpio/gpio-davinci.c
+++ b/drivers/gpio/gpio-davinci.c
@@ -437,6 +437,7 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev)
437{ 437{
438 unsigned gpio, bank; 438 unsigned gpio, bank;
439 int irq; 439 int irq;
440 int ret;
440 struct clk *clk; 441 struct clk *clk;
441 u32 binten = 0; 442 u32 binten = 0;
442 unsigned ngpio, bank_irq; 443 unsigned ngpio, bank_irq;
@@ -480,12 +481,15 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev)
480 PTR_ERR(clk)); 481 PTR_ERR(clk));
481 return PTR_ERR(clk); 482 return PTR_ERR(clk);
482 } 483 }
483 clk_prepare_enable(clk); 484 ret = clk_prepare_enable(clk);
485 if (ret)
486 return ret;
484 487
485 if (!pdata->gpio_unbanked) { 488 if (!pdata->gpio_unbanked) {
486 irq = devm_irq_alloc_descs(dev, -1, 0, ngpio, 0); 489 irq = devm_irq_alloc_descs(dev, -1, 0, ngpio, 0);
487 if (irq < 0) { 490 if (irq < 0) {
488 dev_err(dev, "Couldn't allocate IRQ numbers\n"); 491 dev_err(dev, "Couldn't allocate IRQ numbers\n");
492 clk_disable_unprepare(clk);
489 return irq; 493 return irq;
490 } 494 }
491 495
@@ -494,6 +498,7 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev)
494 chips); 498 chips);
495 if (!irq_domain) { 499 if (!irq_domain) {
496 dev_err(dev, "Couldn't register an IRQ domain\n"); 500 dev_err(dev, "Couldn't register an IRQ domain\n");
501 clk_disable_unprepare(clk);
497 return -ENODEV; 502 return -ENODEV;
498 } 503 }
499 } 504 }
@@ -562,8 +567,10 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev)
562 sizeof(struct 567 sizeof(struct
563 davinci_gpio_irq_data), 568 davinci_gpio_irq_data),
564 GFP_KERNEL); 569 GFP_KERNEL);
565 if (!irqdata) 570 if (!irqdata) {
571 clk_disable_unprepare(clk);
566 return -ENOMEM; 572 return -ENOMEM;
573 }
567 574
568 irqdata->regs = g; 575 irqdata->regs = g;
569 irqdata->bank_num = bank; 576 irqdata->bank_num = bank;