static int nvmem_add_cells_from_dt(struct nvmem_device *nvmem, struct device_node *np)
{
struct device *dev = &nvmem->dev;
- struct device_node *child;
const __be32 *addr;
int len, ret;
- for_each_child_of_node(np, child) {
+ for_each_child_of_node_scoped(np, child) {
struct nvmem_cell_info info = {0};
addr = of_get_property(child, "reg", &len);
continue;
if (len < 2 * sizeof(u32)) {
dev_err(dev, "nvmem: invalid reg on %pOF\n", child);
- of_node_put(child);
return -EINVAL;
}
info.nbits < 1 ||
info.bit_offset + info.nbits > BITS_PER_BYTE * info.bytes) {
dev_err(dev, "nvmem: invalid bits on %pOF\n", child);
- of_node_put(child);
return -EINVAL;
}
}
ret = nvmem_add_one_cell(nvmem, &info);
kfree(info.name);
if (ret) {
- of_node_put(child);
of_node_put(info.np);
return ret;
}