• Marek Szyprowski's avatar
    clk: Add support for runtime PM · 9a34b453
    Marek Szyprowski authored
    Registers for some clocks might be located in the SOC area, which are under the
    power domain. To enable access to those registers respective domain has to be
    turned on. Additionally, registers for such clocks will usually loose its
    contents when power domain is turned off, so additional saving and restoring of
    them might be needed in the clock controller driver.
    
    This patch adds basic infrastructure in the clocks core to allow implementing
    driver for such clocks under power domains. Clock provider can supply a
    struct device pointer, which is the used by clock core for tracking and managing
    clock's controller runtime pm state. Each clk_prepare() operation
    will first call pm_runtime_get_sync() on the supplied device, while
    clk_unprepare() will do pm_runtime_put_sync() at the end.
    
    Additional calls to pm_runtime_get/put functions are required to ensure that any
    register access (like calculating/changing clock rates and unpreparing/disabling
    unused clocks on boot) will be done with clock controller in runtime resumend
    state.
    
    When one wants to register clock controller, which make use of this feature, he
    has to:
    1. Provide a struct device to the core when registering the provider.
    2. Ensure to enable runtime PM for that device before registering clocks.
    3. Make sure that the runtime PM status of the controller device reflects
       the HW state.
    Signed-off-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
    Reviewed-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    Acked-by: default avatarKrzysztof Kozlowski <krzk@kernel.org>
    Signed-off-by: default avatarMichael Turquette <mturquette@baylibre.com>
    Link: lkml.kernel.org/r/1503302703-13801-2-git-send-email-m.szyprowski@samsung.com
    9a34b453
clk.c 86.2 KB