On 03/12/19 1:47 PM, Geert Uytterhoeven wrote: > Hi Harish, > > On Tue, Dec 3, 2019 at 6:42 AM Harish Jenny K N > <harish_kandiga@xxxxxxxxxx> wrote: >>> +static int gpio_aggregator_probe(struct platform_device *pdev) >>> +{ >>> + struct device *dev = &pdev->dev; >>> + struct gpio_desc **descs; >>> + struct gpiochip_fwd *fwd; >>> + int i, n; >>> + >>> + n = gpiod_count(dev, NULL); >>> + if (n < 0) >>> + return n; >>> + >>> + descs = devm_kmalloc_array(dev, n, sizeof(*descs), GFP_KERNEL); >>> + if (!descs) >>> + return -ENOMEM; >>> + >>> + for (i = 0; i < n; i++) { >>> + descs[i] = devm_gpiod_get_index(dev, NULL, i, GPIOD_ASIS); >> can you please add this check as well as we need to return EPROBE_DEFER. >> >> if (desc[i] == ERR_PTR(-ENOENT)) >> < return -EPROBE_DEFER; > So gpiod_get_index() nevers return -EPROBE_DEFER, but returns -ENOENT > instead? > How can a driver distinguish between "GPIO not found" and "gpiochip driver > not yet initialized"? > Worse, so the *_optional() variants will return NULL in both cases, too, so > the caller will always fall back to optional GPIO not present? > > Or am I missing something? > > Gr{oetje,eeting}s, > > Geert We had earlier tested our changes on 4.14 kernel and the explicit return of -EPROBE_DEFER was needed in the inverter driver. probably the commit 6662ae6af82df10259a70c7569b4c12ea7f3ba93 ( gpiolib: Keep returning EPROBE_DEFER when we should) has fixed the issue and now it returns -EPROBE_DEFER. you can ignore this comment as of now. I will test and let you know if needed. Thanks, Harish