On Fri 2019-05-31 08:39:18, Fabien DESSENNE wrote:
Hi Pavel
On 31/05/2019 10:19 AM, Pavel Machek wrote:
Hi!
[ Upstream commit b5b5a27bee5884860798ffd0f08e611a3942064b ]
During probe, return the provided errors value instead of -ENODEV. This allows the driver to be deferred probed if needed.
This is not correct AFAICT.
The driver gets defer probed *if needed*. *if needed* is for the case where platform_get_irq returns -EPROBE_DEFER, which happens if the irq controller is not ready yet.
Of course, for the other cases, the probe would just fail.
"This" was referring to code below. Sorry for confusion.
Best regards, Pavel
+++ b/drivers/media/platform/stm32/stm32-dcmi.c @@ -1673,8 +1673,9 @@ static int dcmi_probe(struct platform_device *pdev) irq = platform_get_irq(pdev, 0); if (irq <= 0) {
dev_err(&pdev->dev, "Could not get irq\n");
return -ENODEV;
if (irq != -EPROBE_DEFER)
dev_err(&pdev->dev, "Could not get irq\n");
}return irq;
dcmi->res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
irq == 0 is clearly means error here, but will be interpretted as success when returned to the caller.
Thank you for pointing this.
It shall be 'return irq ? irq : -ENXIO;' I will send a fix for this.
As device is not initialized at that point, I'd expect some kind of crash later. Pavel