diff --git a/drivers/watchdog/qcom-wdt.c b/drivers/watchdog/qcom-wdt.c index a425902b9f68..4eb1bf979012 100644 --- a/drivers/watchdog/qcom-wdt.c +++ b/drivers/watchdog/qcom-wdt.c @@ -303,21 +303,22 @@ static int qcom_wdt_probe(struct platform_device *pdev) return -EINVAL; } + wdt->wdd.info = &qcom_wdt_info; + /* check if there is pretimeout support */ - irq = platform_get_irq_optional(pdev, 0); - if (data->pretimeout && irq > 0) { - ret = devm_request_irq(dev, irq, qcom_wdt_isr, 0, - "wdt_bark", &wdt->wdd); - if (ret) - return ret; + if (data->pretimeout) { + irq = platform_get_irq_optional(pdev, 0); + if (irq < 0 && irq != -ENXIO) + return irq; + if (irq > 0) { + ret = devm_request_irq(dev, irq, qcom_wdt_isr, 0, + "wdt_bark", &wdt->wdd); + if (ret) + return ret; - wdt->wdd.info = &qcom_wdt_pt_info; - wdt->wdd.pretimeout = 1; - } else { - if (irq == -EPROBE_DEFER) - return -EPROBE_DEFER; - - wdt->wdd.info = &qcom_wdt_info; + wdt->wdd.info = &qcom_wdt_pt_info; + wdt->wdd.pretimeout = 1; + } } wdt->wdd.ops = &qcom_wdt_ops;