Commit 272df502bcd1fbb1b95facc92bd861d604be8871

Authored by Ben Dooks
Committed by Grant Likely
1 parent 0ce790e7d7

gpio/pca953x: fix error handling path in probe() call

If the device fails to respond, then the error path tries to remove an
interrupt that never got registered, which causes an backtrace from the
interrupt handling code.

Fix this by ensuring that the cleanup path has two labels and use the
correct path as needed.

fixes the following error:

WARNING: at kernel/irq/manage.c:908 __free_irq+0x80/0x160()
Trying to free already-free IRQ 0

Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>

Showing 1 changed file with 3 additions and 2 deletions Side-by-side Diff

drivers/gpio/pca953x.c
... ... @@ -558,7 +558,7 @@
558 558  
559 559 ret = gpiochip_add(&chip->gpio_chip);
560 560 if (ret)
561   - goto out_failed;
  561 + goto out_failed_irq;
562 562  
563 563 if (pdata->setup) {
564 564 ret = pdata->setup(client, chip->gpio_chip.base,
565 565  
... ... @@ -570,8 +570,9 @@
570 570 i2c_set_clientdata(client, chip);
571 571 return 0;
572 572  
573   -out_failed:
  573 +out_failed_irq:
574 574 pca953x_irq_teardown(chip);
  575 +out_failed:
575 576 kfree(chip->dyn_pdata);
576 577 kfree(chip);
577 578 return ret;