• Michal Oleszczyk's avatar
    mfd: core: Delete corresponding OF node entries from list on MFD removal · 8e88c61d
    Michal Oleszczyk authored
    When we consider MFD which implements hotplug (e.g. USB hotplug
    driver based on product and vendor IDs) functionality it turns out
    that its sub-devices are correctly matched with corresponding device
    tree nodes only at the first time. When physical device reboots
    or is replugged (and MFD driver is disconnected and probed back
    again) all sub-devices fails in mfd_add_device() with error
    'Failed to locate of_node'.
    
    The reason of that behavior is that when any MFD sub-device is
    created for the first time (and matched with device tree node) it
    is added to the mfd_of_node_list. It looks like this list is never
    cleaned even if devices added there are intentionally removed from
    the system. So when MFD device is replugged and all sub-devices
    are matched with their device tree nodes again they fail as matched
    nodes already exist in mfd_of_node_list. In other words current
    implementation does not support MFD with hotplug feature.
    
    This commit extends MFD core for hotplugging support by removing
    appropriate OF node entry from mfd_of_node_list when corresponding
    device is removed from the system. Thanks to that when device is
    added once again it can be matched with its device tree node
    successfully.
    Signed-off-by: default avatarMichal Oleszczyk <oleszczyk.m@gmail.com>
    Signed-off-by: default avatarLee Jones <lee@kernel.org>
    Link: https://lore.kernel.org/r/20220809060336.31892-1-m.oleszczyk@grinn-global.com
    8e88c61d
mfd-core.c 11.3 KB