• Linus Walleij's avatar
    mmc: Aggressive clock gating framework · 04566831
    Linus Walleij authored
    This patch modifies the MMC core code to optionally call the set_ios()
    operation on the driver with the clock frequency set to 0 (gate) after
    a grace period of at least 8 MCLK cycles, then restore it (ungate)
    before any new request. This gives the driver the option to shut down
    the MCI clock to the MMC/SD card when the clock frequency is 0, i.e.
    the core has stated that the MCI clock does not need to be generated.
    
    It is inspired by existing clock gating code found in the OMAP and
    Atmel drivers and brings this up to the host abstraction.  Gating is
    performed before and after any MMC request.
    
    This patchset implements this for the MMCI/PL180 MMC/SD host controller,
    but it should be simple to switch OMAP/Atmel over to using this instead.
    
    mmc_set_{gated,ungated}() add variable protection to the state holders
    for the clock gating code.  This is particularly important when ordinary
    .set_ios() calls would race with the .set_ios() call resulting from a
    delayed gate operation.
    Signed-off-by: default avatarLinus Walleij <linus.walleij@stericsson.com>
    Reviewed-by: default avatarChris Ball <cjb@laptop.org>
    Tested-by: default avatarChris Ball <cjb@laptop.org>
    Signed-off-by: default avatarChris Ball <cjb@laptop.org>
    04566831
core.h 2.2 KB