mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-07 13:53:24 +00:00
iio: adc: max11410: Use device_for_each_child_node_scoped()
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. Reviewed-by: Nuno Sa <nuno.sa@analog.com> Link: https://lore.kernel.org/r/20240217164249.921878-6-jic23@kernel.org Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
365130fd47
commit
1693d2a745
@ -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++) {
|
||||
|
Loading…
Reference in New Issue
Block a user