• Thomas Petazzoni's avatar
    clk: clk-gpio: add support for sleeping GPIOs in gpio-gate-clk · c0189fee
    Thomas Petazzoni authored
    The current implementation of gpio-gate-clk enables/disables the clock
    using the GPIO in the ->enable() and ->disable() clock callbacks. This
    requires the GPIO to be configurable in atomic contexts. While it is
    the case for most memory-mapped GPIO controllers, it is not the case
    for GPIO expanders on I2C or SPI.
    
    This commit extends the gpio-gate-clk to check whether the GPIO calls
    require sleeping or not. If sleeping is not required, the current
    implementation based on ->enable()/->disable() is kept. However, if
    sleeping is needed, we instead implement the logic in the ->prepare()
    and ->unprepare() hooks. Thanks to this, a gate clock connected to a
    GPIO on a GPIO expander can be controlled with the existing driver.
    Signed-off-by: default avatarThomas Petazzoni <thomas.petazzoni@bootlin.com>
    [sboyd@kernel.org: Mark clk ops static]
    Signed-off-by: default avatarStephen Boyd <sboyd@kernel.org>
    c0189fee
clk-gpio.c 7.61 KB