• Hans de Goede's avatar
    pinctrl: Allow modules to use pinctrl_[un]register_mappings · c72bed23
    Hans de Goede authored
    Currently only the drivers/pinctrl/devicetree.c code allows registering
    pinctrl-mappings which may later be unregistered, all other mappings
    are assumed to be permanent.
    
    Non-dt platforms may also want to register pinctrl mappings from code which
    is build as a module, which requires being able to unregister the mapping
    when the module is unloaded to avoid dangling pointers.
    
    To allow unregistering the mappings the devicetree code uses 2 internal
    functions: pinctrl_register_map and pinctrl_unregister_map.
    
    pinctrl_register_map allows the devicetree code to tell the core to
    not memdup the mappings as it retains ownership of them and
    pinctrl_unregister_map does the unregistering, note this only works
    when the mappings where not memdupped.
    
    The only code relying on the memdup/shallow-copy done by
    pinctrl_register_mappings is arch/arm/mach-u300/core.c this commit
    replaces the __initdata with const, so that the shallow-copy is no
    longer necessary.
    
    After that we can get rid of the internal pinctrl_unregister_map function
    and just use pinctrl_register_mappings directly everywhere.
    
    This commit also renames pinctrl_unregister_map to
    pinctrl_unregister_mappings so that its naming matches its
    pinctrl_register_mappings counter-part and exports it.
    
    Together these 2 changes will allow non-dt platform code to
    register pinctrl-mappings from modules without breaking things on
    module unload (as they can now unregister the mapping on unload).
    Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20191216205122.1850923-2-hdegoede@redhat.comSigned-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    c72bed23
core.c 56.5 KB