Re: [PATCH] media: st-mipid02: add a check for devm_gpiod_get_optional
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 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 >>> --- >>> 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); >>>
Re: [PATCH] media: st-mipid02: add a check for devm_gpiod_get_optional
On Thu, Oct 17, 2019 at 1:43 PM Mickael GUENE 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 > > --- > > 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); > >
Re: [PATCH] media: st-mipid02: add a check for devm_gpiod_get_optional
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 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 > --- > 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); >
[PATCH] media: st-mipid02: add a check for devm_gpiod_get_optional
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 --- 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); -- 2.20.1