• P
    PM: core: Add new *_PM_OPS macros, deprecate old ones · 1a3c7bb0
    Paul Cercueil 提交于
    This commit introduces the following macros:
    
    SYSTEM_SLEEP_PM_OPS()
    LATE_SYSTEM_SLEEP_PM_OPS()
    NOIRQ_SYSTEM_SLEEP_PM_OPS()
    RUNTIME_PM_OPS()
    
    These new macros are very similar to their SET_*_PM_OPS() equivalent.
    They however differ in the fact that the callbacks they set will always
    be seen as referenced by the compiler. This means that the callback
    functions don't need to be wrapped with a #ifdef CONFIG_PM guard, or
    tagged with __maybe_unused, to prevent the compiler from complaining
    about unused static symbols. The compiler will then simply evaluate at
    compile time whether or not these symbols are dead code.
    
    The callbacks that are only useful with CONFIG_PM_SLEEP is enabled, are
    now also wrapped with a new pm_sleep_ptr() macro, which is inspired from
    pm_ptr(). This is needed for drivers that use different callbacks for
    sleep and runtime PM, to handle the case where CONFIG_PM is set and
    CONFIG_PM_SLEEP is not.
    
    This commit also deprecates the following macros:
    
    SIMPLE_DEV_PM_OPS()
    UNIVERSAL_DEV_PM_OPS()
    
    And introduces the following macros:
    
    DEFINE_SIMPLE_DEV_PM_OPS()
    DEFINE_UNIVERSAL_DEV_PM_OPS()
    
    These macros are similar to the functions they were created to replace,
    with the following differences:
    
     - They use the new macros introduced above, and as such always
       reference the provided callback functions.
    
     - They are not tagged with __maybe_unused. They are meant to be used
       with pm_ptr() or pm_sleep_ptr() for DEFINE_UNIVERSAL_DEV_PM_OPS()
       and DEFINE_SIMPLE_DEV_PM_OPS() respectively.
    
     - They declare the symbol static, since every driver seems to do that
       anyway; and if a non-static use-case is needed an indirection pointer
       could be used.
    
    The point of this change, is to progressively switch from a code model
    where PM callbacks are all protected behind CONFIG_PM guards, to a code
    model where the PM callbacks are always seen by the compiler, but
    discarded if not used.
    Signed-off-by: NPaul Cercueil <paul@crapouillou.net>
    Reviewed-by: NJonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
    1a3c7bb0
pm.h 33.8 KB