• S
    ASoC: core: Don't schedule deferred_resume_work twice · 82e14e8b
    Stephen Warren 提交于
    For cards that have two or more DAIs, snd_soc_resume's loop over all
    DAIs ends up calling schedule_work(deferred_resume_work) once per DAI.
    Since this is the same work item each time, the 2nd and subsequent
    calls return 0 (work item already queued), and trigger the dev_err
    message below stating that a work item may have been lost.
    
    Solve this by adjusting the loop to simply calculate whether to run the
    resume work immediately or defer it, and then call schedule work (or not)
    one time based on that.
    
    Note: This has not been tested in mainline, but only in chromeos-2.6.38;
    mainline doesn't support suspend/resume on Tegra, nor does the mainline
    Tegra ASoC driver contain multiple DAIs. It has been compile-checked in
    mainline.
    Signed-off-by: NStephen Warren <swarren@nvidia.com>
    Acked-by: NLiam Girdwood <lrg@ti.com>
    Signed-off-by: NMark Brown <broonie@opensource.wolfsonmicro.com>
    82e14e8b
soc-core.c 100.3 KB