Hello Chuhong, Sorry I missed 'if (PTR_ERR(desc) == -ENOENT)' check .... Can you in this case add an error message ? Regards Mickael On 10/17/19 09:48, Chuhong Yuan wrote: > On Thu, Oct 17, 2019 at 1:43 PM Mickael GUENE <mickael.guene@xxxxxx> wrote: >> >> Hello Chuhong, >> >> Is this check necessary ? >> since looking into code it seems to me devm_gpiod_get_optional() can only >> return NULL in case of error due to following check in devm_gpiod_get_index_optional() >> if (IS_ERR(desc)) { >> if (PTR_ERR(desc) == -ENOENT) >> return NULL; >> } >> And in that case reset_gpio is not used >> > > The problem may not be a null return value, but a returned error, > which is a minus value, > like -EPROBE_DEFER or -EINVAL returned by gpiod_find in gpiod_get_index. > In these cases, devm_gpiod_get_index_optional will not return null but > return the error. > Therefore, this check is necessary. > >> Regards >> Mickael >> >> On 10/16/19 12:56, Chuhong Yuan wrote: >>> mipid02_probe misses a check for devm_gpiod_get_optional and may miss >>> the failure. >>> Add a check to fix the problem. >>> >>> Signed-off-by: Chuhong Yuan <hslester96@xxxxxxxxx> >>> --- >>> drivers/media/i2c/st-mipid02.c | 3 +++ >>> 1 file changed, 3 insertions(+) >>> >>> diff --git a/drivers/media/i2c/st-mipid02.c b/drivers/media/i2c/st-mipid02.c >>> index 81285b8d5cfb..d38e888b0a43 100644 >>> --- a/drivers/media/i2c/st-mipid02.c >>> +++ b/drivers/media/i2c/st-mipid02.c >>> @@ -971,6 +971,9 @@ static int mipid02_probe(struct i2c_client *client) >>> bridge->reset_gpio = devm_gpiod_get_optional(dev, "reset", >>> GPIOD_OUT_HIGH); >>> >>> + if (IS_ERR(bridge->reset_gpio)) >>> + return PTR_ERR(bridge->reset_gpio); >>> + >>> ret = mipid02_get_regulators(bridge); >>> if (ret) { >>> dev_err(dev, "failed to get regulators %d", ret); >>>