diff options
Diffstat (limited to 'drivers/gpio/gpio-davinci.c')
-rw-r--r-- | drivers/gpio/gpio-davinci.c | 29 |
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 | ||
58 | static int davinci_gpio_irq_setup(struct platform_device *pdev); | 58 | static int davinci_gpio_irq_setup(struct platform_device *pdev, int bank_irq); |
59 | 59 | ||
60 | /*--------------------------------------------------------------------------*/ | 60 | /*--------------------------------------------------------------------------*/ |
61 | 61 | ||
@@ -167,7 +167,7 @@ of_err: | |||
167 | static int davinci_gpio_probe(struct platform_device *pdev) | 167 | static 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 | ||
455 | static int davinci_gpio_irq_setup(struct platform_device *pdev) | 461 | static 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)) { |