Commit 8a85e72e authored by Jonathan Cameron's avatar Jonathan Cameron

iio: dac: ltc2688: 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: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Tested-by: default avatarNuno Sa <nuno.sa@analog.com>
Reviewed-by: default avatarNuno Sa <nuno.sa@analog.com>
Link: https://lore.kernel.org/r/20240217164249.921878-16-jic23@kernel.orgSigned-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 2fe97fcc
...@@ -746,26 +746,21 @@ static int ltc2688_span_lookup(const struct ltc2688_state *st, int min, int max) ...@@ -746,26 +746,21 @@ static int ltc2688_span_lookup(const struct ltc2688_state *st, int min, int max)
static int ltc2688_channel_config(struct ltc2688_state *st) static int ltc2688_channel_config(struct ltc2688_state *st)
{ {
struct device *dev = &st->spi->dev; struct device *dev = &st->spi->dev;
struct fwnode_handle *child;
u32 reg, clk_input, val, tmp[2]; u32 reg, clk_input, val, tmp[2];
int ret, span; int ret, span;
device_for_each_child_node(dev, child) { device_for_each_child_node_scoped(dev, child) {
struct ltc2688_chan *chan; struct ltc2688_chan *chan;
ret = fwnode_property_read_u32(child, "reg", &reg); ret = fwnode_property_read_u32(child, "reg", &reg);
if (ret) { if (ret)
fwnode_handle_put(child);
return dev_err_probe(dev, ret, return dev_err_probe(dev, ret,
"Failed to get reg property\n"); "Failed to get reg property\n");
}
if (reg >= LTC2688_DAC_CHANNELS) { if (reg >= LTC2688_DAC_CHANNELS)
fwnode_handle_put(child);
return dev_err_probe(dev, -EINVAL, return dev_err_probe(dev, -EINVAL,
"reg bigger than: %d\n", "reg bigger than: %d\n",
LTC2688_DAC_CHANNELS); LTC2688_DAC_CHANNELS);
}
val = 0; val = 0;
chan = &st->channels[reg]; chan = &st->channels[reg];
...@@ -786,12 +781,10 @@ static int ltc2688_channel_config(struct ltc2688_state *st) ...@@ -786,12 +781,10 @@ static int ltc2688_channel_config(struct ltc2688_state *st)
if (!ret) { if (!ret) {
span = ltc2688_span_lookup(st, (int)tmp[0] / 1000, span = ltc2688_span_lookup(st, (int)tmp[0] / 1000,
tmp[1] / 1000); tmp[1] / 1000);
if (span < 0) { if (span < 0)
fwnode_handle_put(child); return dev_err_probe(dev, span,
return dev_err_probe(dev, -EINVAL,
"output range not valid:[%d %d]\n", "output range not valid:[%d %d]\n",
tmp[0], tmp[1]); tmp[0], tmp[1]);
}
val |= FIELD_PREP(LTC2688_CH_SPAN_MSK, span); val |= FIELD_PREP(LTC2688_CH_SPAN_MSK, span);
} }
...@@ -800,17 +793,14 @@ static int ltc2688_channel_config(struct ltc2688_state *st) ...@@ -800,17 +793,14 @@ static int ltc2688_channel_config(struct ltc2688_state *st)
&clk_input); &clk_input);
if (!ret) { if (!ret) {
if (clk_input >= LTC2688_CH_TGP_MAX) { if (clk_input >= LTC2688_CH_TGP_MAX) {
fwnode_handle_put(child);
return dev_err_probe(dev, -EINVAL, return dev_err_probe(dev, -EINVAL,
"toggle-dither-input inv value(%d)\n", "toggle-dither-input inv value(%d)\n",
clk_input); clk_input);
} }
ret = ltc2688_tgp_clk_setup(st, chan, child, clk_input); ret = ltc2688_tgp_clk_setup(st, chan, child, clk_input);
if (ret) { if (ret)
fwnode_handle_put(child);
return ret; return ret;
}
/* /*
* 0 means software toggle which is the default mode. * 0 means software toggle which is the default mode.
...@@ -844,11 +834,9 @@ static int ltc2688_channel_config(struct ltc2688_state *st) ...@@ -844,11 +834,9 @@ static int ltc2688_channel_config(struct ltc2688_state *st)
ret = regmap_write(st->regmap, LTC2688_CMD_CH_SETTING(reg), ret = regmap_write(st->regmap, LTC2688_CMD_CH_SETTING(reg),
val); val);
if (ret) { if (ret)
fwnode_handle_put(child); return dev_err_probe(dev, ret,
return dev_err_probe(dev, -EINVAL,
"failed to set chan settings\n"); "failed to set chan settings\n");
}
} }
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment