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 -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds