• Javier Carrasco's avatar
    leds: bd2606mvv: Fix device child node usage in bd2606mvv_probe() · ffbf1fcb
    Javier Carrasco authored
    The current implementation accesses the `child` fwnode handle outside of
    fwnode_for_each_available_child_node() without incrementing its
    refcount. Add the missing call to `fwnode_handle_get(child)`.
    
    The cleanup process where `child` is accessed is not right either
    because a single call to `fwnode_handle_put()` is carried out in case of
    an error, ignoring unasigned nodes at the point when the error happens.
    Keep `child` inside of the first loop, and use the helper pointer that
    receives references via `fwnode_handle_get()` to handle the child nodes
    within the second loop.
    
    Moreover, the iterated nodes are direct children of the device node,
    and the `device_for_each_child_node()` macro accounts for child node
    availability. By restricting `child` to live within that loop, the
    scoped version of it can be used to simplify the error handling.
    
    `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_scoped()` to indicate device's direct
    child nodes.
    
    Fixes: 8325642d ("leds: bd2606mvv: Driver for the Rohm 6 Channel i2c LED driver")
    Signed-off-by: default avatarJavier Carrasco <javier.carrasco.cruz@gmail.com>
    Link: https://lore.kernel.org/r/20240721-device_for_each_child_node-available-v2-3-f33748fd8b2d@gmail.comSigned-off-by: default avatarLee Jones <lee@kernel.org>
    ffbf1fcb
leds-bd2606mvv.c 3.87 KB