On Thu, 14 Apr 2022 16:15:59 +0300 Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> wrote: > The extended clocks are optional and may not be present for some > configurations supported by this driver. Nevertheless, in case > the clock is provided but some error happens during its getting, > that error handling should be done properly. > > Use devm_clk_get_optional() API and report possible errors using > dev_err_probe() to handle properly -EPROBE_DEFER error. > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> > Reviewed-by: Nuno Sá <nuno.sa@xxxxxxxxxx> Series applied with Nuno's Tested-by as sent to v1. Thanks, Jonathan > --- > v2: added tag (Nuno), massaged commit message (Nuno) > drivers/iio/imu/adis16480.c | 26 ++++++++++---------------- > 1 file changed, 10 insertions(+), 16 deletions(-) > > diff --git a/drivers/iio/imu/adis16480.c b/drivers/iio/imu/adis16480.c > index 287914016f28..fe520194a837 100644 > --- a/drivers/iio/imu/adis16480.c > +++ b/drivers/iio/imu/adis16480.c > @@ -1362,31 +1362,25 @@ static int adis16480_get_ext_clocks(struct adis16480 *st) > { > struct device *dev = &st->adis.spi->dev; > > - st->clk_mode = ADIS16480_CLK_INT; > - st->ext_clk = devm_clk_get(dev, "sync"); > - if (!IS_ERR_OR_NULL(st->ext_clk)) { > + st->ext_clk = devm_clk_get_optional(dev, "sync"); > + if (IS_ERR(st->ext_clk)) > + return dev_err_probe(dev, PTR_ERR(st->ext_clk), "failed to get ext clk\n"); > + if (st->ext_clk) { > st->clk_mode = ADIS16480_CLK_SYNC; > return 0; > } > > - if (PTR_ERR(st->ext_clk) != -ENOENT) { > - dev_err(dev, "failed to get ext clk\n"); > - return PTR_ERR(st->ext_clk); > - } > - > if (st->chip_info->has_pps_clk_mode) { > - st->ext_clk = devm_clk_get(dev, "pps"); > - if (!IS_ERR_OR_NULL(st->ext_clk)) { > + st->ext_clk = devm_clk_get_optional(dev, "pps"); > + if (IS_ERR(st->ext_clk)) > + return dev_err_probe(dev, PTR_ERR(st->ext_clk), "failed to get ext clk\n"); > + if (st->ext_clk) { > st->clk_mode = ADIS16480_CLK_PPS; > return 0; > } > - > - if (PTR_ERR(st->ext_clk) != -ENOENT) { > - dev_err(dev, "failed to get ext clk\n"); > - return PTR_ERR(st->ext_clk); > - } > } > > + st->clk_mode = ADIS16480_CLK_INT; > return 0; > } > > @@ -1447,7 +1441,7 @@ static int adis16480_probe(struct spi_device *spi) > if (ret) > return ret; > > - if (!IS_ERR_OR_NULL(st->ext_clk)) { > + if (st->ext_clk) { > ret = adis16480_ext_clk_config(st, true); > if (ret) > return ret;