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.c29
1 files changed, 11 insertions, 18 deletions
diff --git a/drivers/gpio/gpio-davinci.c b/drivers/gpio/gpio-davinci.c
index 035a454eca43..423d37c95e6b 100644
--- a/drivers/gpio/gpio-davinci.c
+++ b/drivers/gpio/gpio-davinci.c
@@ -55,7 +55,7 @@ static inline struct davinci_gpio_regs __iomem *irq2regs(struct irq_data *d)
55 return g; 55 return g;
56} 56}
57 57
58static int davinci_gpio_irq_setup(struct platform_device *pdev); 58static int davinci_gpio_irq_setup(struct platform_device *pdev, int bank_irq);
59 59
60/*--------------------------------------------------------------------------*/ 60/*--------------------------------------------------------------------------*/
61 61
@@ -167,7 +167,7 @@ of_err:
167static int davinci_gpio_probe(struct platform_device *pdev) 167static int davinci_gpio_probe(struct platform_device *pdev)
168{ 168{
169 static int ctrl_num, bank_base; 169 static int ctrl_num, bank_base;
170 int gpio, bank, ret = 0; 170 int gpio, bank, bank_irq, ret = 0;
171 unsigned ngpio, nbank; 171 unsigned ngpio, nbank;
172 struct davinci_gpio_controller *chips; 172 struct davinci_gpio_controller *chips;
173 struct davinci_gpio_platform_data *pdata; 173 struct davinci_gpio_platform_data *pdata;
@@ -209,6 +209,12 @@ static int davinci_gpio_probe(struct platform_device *pdev)
209 if (IS_ERR(gpio_base)) 209 if (IS_ERR(gpio_base))
210 return PTR_ERR(gpio_base); 210 return PTR_ERR(gpio_base);
211 211
212 bank_irq = platform_get_irq(pdev, 0);
213 if (bank_irq < 0) {
214 dev_dbg(dev, "IRQ not populated\n");
215 return bank_irq;
216 }
217
212 snprintf(label, MAX_LABEL_SIZE, "davinci_gpio.%d", ctrl_num++); 218 snprintf(label, MAX_LABEL_SIZE, "davinci_gpio.%d", ctrl_num++);
213 chips->chip.label = devm_kstrdup(dev, label, GFP_KERNEL); 219 chips->chip.label = devm_kstrdup(dev, label, GFP_KERNEL);
214 if (!chips->chip.label) 220 if (!chips->chip.label)
@@ -243,7 +249,7 @@ static int davinci_gpio_probe(struct platform_device *pdev)
243 goto err; 249 goto err;
244 250
245 platform_set_drvdata(pdev, chips); 251 platform_set_drvdata(pdev, chips);
246 ret = davinci_gpio_irq_setup(pdev); 252 ret = davinci_gpio_irq_setup(pdev, bank_irq);
247 if (ret) 253 if (ret)
248 goto err; 254 goto err;
249 255
@@ -452,16 +458,15 @@ static const struct of_device_id davinci_gpio_ids[];
452 * (dm6446) can be set appropriately for GPIOV33 pins. 458 * (dm6446) can be set appropriately for GPIOV33 pins.
453 */ 459 */
454 460
455static int davinci_gpio_irq_setup(struct platform_device *pdev) 461static int davinci_gpio_irq_setup(struct platform_device *pdev, int bank_irq)
456{ 462{
457 unsigned gpio, bank; 463 unsigned gpio, bank;
458 int irq; 464 int irq;
459 int ret; 465 int ret;
460 struct clk *clk; 466 struct clk *clk;
461 u32 binten = 0; 467 u32 binten = 0;
462 unsigned ngpio, bank_irq; 468 unsigned ngpio;
463 struct device *dev = &pdev->dev; 469 struct device *dev = &pdev->dev;
464 struct resource *res;
465 struct davinci_gpio_controller *chips = platform_get_drvdata(pdev); 470 struct davinci_gpio_controller *chips = platform_get_drvdata(pdev);
466 struct davinci_gpio_platform_data *pdata = dev->platform_data; 471 struct davinci_gpio_platform_data *pdata = dev->platform_data;
467 struct davinci_gpio_regs __iomem *g; 472 struct davinci_gpio_regs __iomem *g;
@@ -481,18 +486,6 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev)
481 gpio_get_irq_chip = (gpio_get_irq_chip_cb_t)match->data; 486 gpio_get_irq_chip = (gpio_get_irq_chip_cb_t)match->data;
482 487
483 ngpio = pdata->ngpio; 488 ngpio = pdata->ngpio;
484 res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
485 if (!res) {
486 dev_err(dev, "Invalid IRQ resource\n");
487 return -EBUSY;
488 }
489
490 bank_irq = res->start;
491
492 if (!bank_irq) {
493 dev_err(dev, "Invalid IRQ resource\n");
494 return -ENODEV;
495 }
496 489
497 clk = devm_clk_get(dev, "gpio"); 490 clk = devm_clk_get(dev, "gpio");
498 if (IS_ERR(clk)) { 491 if (IS_ERR(clk)) {