• Cezary Rojewski's avatar
    ASoC: Intel: avs: Introduce PCM power management routines · 2b9a50ea
    Cezary Rojewski authored
    Implement suspend/resume() operations for component drivers. For most
    scenarios, the PM flow is similar to standard streaming one, except for
    the part where the position register are being saved and the lack of PCM
    pages freeing. To reduce code duplication, all avs_dai_suspend_XXX() and
    avs_dai_resume_XXX() functions reuse their non-PM equivalents.
    
    Given that path binding/unbinding happens only in FE part of the stream,
    the order of suspend() goes:
    
    1. hw_free() all FE DAIs, paths are unbound here
    2. hw_free() all BE DAIs
    
    Consequently, for resume() its:
    
    1. hw_params() all BE DAIs
    2. hw_params() all FE DAIs, paths are bound here
    3. prepare() all BE DAIs
    4. prepare() all FE DAIs
    
    As component->suspend/resume() do not provide substream pointer, store
    it ourselves so that the PM flow has all the necessary information to
    proceed.
    Signed-off-by: default avatarCezary Rojewski <cezary.rojewski@intel.com>
    Link: https://lore.kernel.org/r/20221027124702.1761002-3-cezary.rojewski@intel.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
    2b9a50ea
pcm.c 36.8 KB