1

leds: pca995x: Use device_for_each_child_node() to access device child nodes

The iterated nodes are direct children of the device node, and the
`device_for_each_child_node()` macro accounts for child node
availability.

`fwnode_for_each_available_child_node()` is meant to access the child
nodes of an fwnode, and therefore not direct child nodes of the device
node.

Use `device_for_each_child_node()` to indicate device's direct child
nodes.

Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Link: https://lore.kernel.org/r/20240805-device_for_each_child_node-available-v3-2-48243a4aa5c0@gmail.com
Signed-off-by: Lee Jones <lee@kernel.org>
This commit is contained in:
Javier Carrasco 2024-08-05 16:49:45 +02:00 committed by Lee Jones
parent 70a4375e07
commit 6eefd65ba6

View File

@ -120,7 +120,7 @@ static const struct regmap_config pca995x_regmap = {
static int pca995x_probe(struct i2c_client *client)
{
struct fwnode_handle *led_fwnodes[PCA995X_MAX_OUTPUTS] = { 0 };
struct fwnode_handle *np, *child;
struct fwnode_handle *child;
struct device *dev = &client->dev;
const struct pca995x_chipdef *chipdef;
struct pca995x_chip *chip;
@ -129,8 +129,7 @@ static int pca995x_probe(struct i2c_client *client)
chipdef = device_get_match_data(&client->dev);
np = dev_fwnode(dev);
if (!np)
if (!dev_fwnode(dev))
return -ENODEV;
chip = devm_kzalloc(dev, sizeof(*chip), GFP_KERNEL);
@ -144,17 +143,13 @@ static int pca995x_probe(struct i2c_client *client)
i2c_set_clientdata(client, chip);
fwnode_for_each_available_child_node(np, child) {
device_for_each_child_node(dev, child) {
ret = fwnode_property_read_u32(child, "reg", &reg);
if (ret) {
fwnode_handle_put(child);
if (ret)
return ret;
}
if (reg < 0 || reg >= PCA995X_MAX_OUTPUTS || led_fwnodes[reg]) {
fwnode_handle_put(child);
if (reg < 0 || reg >= PCA995X_MAX_OUTPUTS || led_fwnodes[reg])
return -EINVAL;
}
led = &chip->leds[reg];
led_fwnodes[reg] = child;