On Sat, 2024-02-17 at 16:42 +0000, Jonathan Cameron wrote: > From: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx> > > Switching to the _scoped() version removes the need for manual > calling of fwnode_handle_put() in the paths where the code > exits the loop early. In this case that's all in error paths. > > Cc: Nuno Sá <nuno.sa@xxxxxxxxxx> > Cc: Ibrahim Tilki <Ibrahim.Tilki@xxxxxxxxxx> > Signed-off-by: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx> > --- Reviewed-by: Nuno Sa <nuno.sa@xxxxxxxxxx> > drivers/iio/adc/max11410.c | 27 +++++++-------------------- > 1 file changed, 7 insertions(+), 20 deletions(-) > > diff --git a/drivers/iio/adc/max11410.c b/drivers/iio/adc/max11410.c > index 6af829349b4e..45368850b220 100644 > --- a/drivers/iio/adc/max11410.c > +++ b/drivers/iio/adc/max11410.c > @@ -696,7 +696,6 @@ static int max11410_parse_channels(struct max11410_state > *st, > struct device *dev = &st->spi_dev->dev; > struct max11410_channel_config *cfg; > struct iio_chan_spec *channels; > - struct fwnode_handle *child; > u32 reference, sig_path; > const char *node_name; > u32 inputs[2], scale; > @@ -720,7 +719,7 @@ static int max11410_parse_channels(struct max11410_state > *st, > if (!st->channels) > return -ENOMEM; > > - device_for_each_child_node(dev, child) { > + device_for_each_child_node_scoped(dev, child) { > node_name = fwnode_get_name(child); > if (fwnode_property_present(child, "diff-channels")) { > ret = fwnode_property_read_u32_array(child, > @@ -735,47 +734,37 @@ static int max11410_parse_channels(struct max11410_state > *st, > inputs[1] = 0; > chanspec.differential = 0; > } > - if (ret) { > - fwnode_handle_put(child); > + if (ret) > return ret; > - } > > if (inputs[0] > MAX11410_CHANNEL_INDEX_MAX || > - inputs[1] > MAX11410_CHANNEL_INDEX_MAX) { > - fwnode_handle_put(child); > + inputs[1] > MAX11410_CHANNEL_INDEX_MAX) > return dev_err_probe(&indio_dev->dev, -EINVAL, > "Invalid channel index for %s, > should be less than %d\n", > node_name, > MAX11410_CHANNEL_INDEX_MAX + 1); > - } > > cfg = &st->channels[chan_idx]; > > reference = MAX11410_REFSEL_AVDD_AGND; > fwnode_property_read_u32(child, "adi,reference", &reference); > - if (reference > MAX11410_REFSEL_MAX) { > - fwnode_handle_put(child); > + if (reference > MAX11410_REFSEL_MAX) > return dev_err_probe(&indio_dev->dev, -EINVAL, > "Invalid adi,reference value for > %s, should be less than %d.\n", > node_name, MAX11410_REFSEL_MAX + > 1); > - } > > if (!max11410_get_vrefp(st, reference) || > - (!max11410_get_vrefn(st, reference) && reference <= 2)) { > - fwnode_handle_put(child); > + (!max11410_get_vrefn(st, reference) && reference <= 2)) > return dev_err_probe(&indio_dev->dev, -EINVAL, > "Invalid VREF configuration for > %s, either specify corresponding VREF regulators or change adi,reference > property.\n", > node_name); > - } > > sig_path = MAX11410_PGA_SIG_PATH_BUFFERED; > fwnode_property_read_u32(child, "adi,input-mode", &sig_path); > - if (sig_path > MAX11410_SIG_PATH_MAX) { > - fwnode_handle_put(child); > + if (sig_path > MAX11410_SIG_PATH_MAX) > return dev_err_probe(&indio_dev->dev, -EINVAL, > "Invalid adi,input-mode value > for %s, should be less than %d.\n", > node_name, MAX11410_SIG_PATH_MAX > + 1); > - } > > fwnode_property_read_u32(child, "settling-time-us", > &cfg->settling_time_us); > @@ -793,10 +782,8 @@ static int max11410_parse_channels(struct max11410_state > *st, > cfg->scale_avail = devm_kcalloc(dev, > MAX11410_SCALE_AVAIL_SIZE * 2, > sizeof(*cfg- > >scale_avail), > GFP_KERNEL); > - if (!cfg->scale_avail) { > - fwnode_handle_put(child); > + if (!cfg->scale_avail) > return -ENOMEM; > - } > > scale = max11410_get_scale(st, *cfg); > for (i = 0; i < MAX11410_SCALE_AVAIL_SIZE; i++) {