Merge tag 'ceph-for-4.13-rc1' of git://github.com/ceph/ceph-client
[linux-2.6-microblaze.git] / drivers / gpio / gpio-davinci.c
index ac17357..65cb359 100644 (file)
@@ -437,6 +437,7 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev)
 {
        unsigned        gpio, bank;
        int             irq;
+       int             ret;
        struct clk      *clk;
        u32             binten = 0;
        unsigned        ngpio, bank_irq;
@@ -480,12 +481,15 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev)
                       PTR_ERR(clk));
                return PTR_ERR(clk);
        }
-       clk_prepare_enable(clk);
+       ret = clk_prepare_enable(clk);
+       if (ret)
+               return ret;
 
        if (!pdata->gpio_unbanked) {
                irq = devm_irq_alloc_descs(dev, -1, 0, ngpio, 0);
                if (irq < 0) {
                        dev_err(dev, "Couldn't allocate IRQ numbers\n");
+                       clk_disable_unprepare(clk);
                        return irq;
                }
 
@@ -494,6 +498,7 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev)
                                                        chips);
                if (!irq_domain) {
                        dev_err(dev, "Couldn't register an IRQ domain\n");
+                       clk_disable_unprepare(clk);
                        return -ENODEV;
                }
        }
@@ -562,8 +567,10 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev)
                                       sizeof(struct
                                              davinci_gpio_irq_data),
                                              GFP_KERNEL);
-               if (!irqdata)
+               if (!irqdata) {
+                       clk_disable_unprepare(clk);
                        return -ENOMEM;
+               }
 
                irqdata->regs = g;
                irqdata->bank_num = bank;