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); > >