watchdog: pm8916_wdt: fix pretimeout registration flow

When an IRQ is present in the dts, the probe function shall fail if
the interrupt can not be registered.

The probe function shall also be retried if getting the irq is being
deferred.

Signed-off-by: Jorge Ramirez-Ortiz <jorge.ramirez-ortiz@linaro.org>
Reviewed-by: Loic Poulain <loic.poulain@linaro.org>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
This commit is contained in:
Jorge Ramirez-Ortiz 2019-09-06 22:30:53 +02:00 committed by Wim Van Sebroeck
parent c58e81341a
commit 1993f1d7ca

View File

@ -163,9 +163,17 @@ static int pm8916_wdt_probe(struct platform_device *pdev)
irq = platform_get_irq(pdev, 0); irq = platform_get_irq(pdev, 0);
if (irq > 0) { if (irq > 0) {
if (devm_request_irq(dev, irq, pm8916_wdt_isr, 0, "pm8916_wdt", err = devm_request_irq(dev, irq, pm8916_wdt_isr, 0,
wdt)) "pm8916_wdt", wdt);
irq = 0; if (err)
return err;
wdt->wdev.info = &pm8916_wdt_pt_ident;
} else {
if (irq == -EPROBE_DEFER)
return -EPROBE_DEFER;
wdt->wdev.info = &pm8916_wdt_ident;
} }
/* Configure watchdog to hard-reset mode */ /* Configure watchdog to hard-reset mode */
@ -177,7 +185,6 @@ static int pm8916_wdt_probe(struct platform_device *pdev)
return err; return err;
} }
wdt->wdev.info = (irq > 0) ? &pm8916_wdt_pt_ident : &pm8916_wdt_ident,
wdt->wdev.ops = &pm8916_wdt_ops, wdt->wdev.ops = &pm8916_wdt_ops,
wdt->wdev.parent = dev; wdt->wdev.parent = dev;
wdt->wdev.min_timeout = PM8916_WDT_MIN_TIMEOUT; wdt->wdev.min_timeout = PM8916_WDT_MIN_TIMEOUT;