Re: [PATCH 1/2] watchdog: pm8916_wdt: fix pretimeout registration flow

From: Guenter Roeck
Date: Sun Sep 08 2019 - 18:50:11 EST


On 9/6/19 1:30 PM, Jorge Ramirez-Ortiz wrote:
When an IRQ is present in the dts, the probe function shall fail if
the interrupt can not be registered.


The author intended differently, and did not want registration to fail
in this situation, following the logic that it is better to have a
standard watchdog without pretimeout than no watchdog at all.

Copying the author; I am not inclined to accept such a change without
input from the driver author.

Similar, for the deferred probe, we'll need to know from the driver author
if this is a concern. In general it is, but there are cases where
-EPROBE_DEFFER is never returned in practice (eg for some SoC watchdog
drivers).

Guenter

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

Signed-off-by: Jorge Ramirez-Ortiz <jorge.ramirez-ortiz@xxxxxxxxxx>
---
drivers/watchdog/pm8916_wdt.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/watchdog/pm8916_wdt.c b/drivers/watchdog/pm8916_wdt.c
index 2d3652004e39..cb5304c26ac3 100644
--- a/drivers/watchdog/pm8916_wdt.c
+++ b/drivers/watchdog/pm8916_wdt.c
@@ -163,9 +163,18 @@ static int pm8916_wdt_probe(struct platform_device *pdev)
irq = platform_get_irq(pdev, 0);
if (irq > 0) {
- if (devm_request_irq(dev, irq, pm8916_wdt_isr, 0, "pm8916_wdt",
- wdt))
- irq = 0;
+ err = devm_request_irq(dev, irq, pm8916_wdt_isr, 0,
+ "pm8916_wdt", wdt);
+ 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 */
@@ -177,7 +186,6 @@ static int pm8916_wdt_probe(struct platform_device *pdev)
return err;
}
- wdt->wdev.info = (irq > 0) ? &pm8916_wdt_pt_ident : &pm8916_wdt_ident,
wdt->wdev.ops = &pm8916_wdt_ops,
wdt->wdev.parent = dev;
wdt->wdev.min_timeout = PM8916_WDT_MIN_TIMEOUT;