• Ranjani Sridharan's avatar
    ASoC: soc-pcm: test if a BE can be prepared · e123036b
    Ranjani Sridharan authored
    In the BE hw_params configuration, the existing code checks if any of the
    existing FEs are prepared, running, paused or suspended - and skips the
    configuration in those cases. This allows multiple calls of hw_params
    which the ALSA state machine supports.
    
    This check is not handled for the prepare stage, which can lead to the
    same BE being prepared multiple times. This patch adds a check similar to
    that of the hw_params, with the main difference being that the suspended
    state is allowed: the ALSA state machine allows a transition from
    suspended to prepared with hw_params skipped.
    
    This problem was detected on Intel IPC4/SoundWire devices, where the BE
    dailink .prepare stage is used to configure the SoundWire stream with a
    bank switch. Multiple .prepare calls lead to conflicts with the .trigger
    operation with IPC4 configurations. This problem was not detected earlier
    on Intel devices, HDaudio BE dailinks detect that the link is already
    prepared and skip the configuration, and for IPC3 devices there is no BE
    trigger.
    
    Link: https://github.com/thesofproject/sof/issues/7596
    Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com
    Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com
    Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com
    Link: https://lore.kernel.org/r/20230517185731.487124-1-pierre-louis.bossart@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org
    e123036b
soc-pcm.c 80.2 KB