Skip to content

Commit

Permalink
ASoC: SOF: ipc4-pcm: Invalidate the stream_start_offset in PAUSED state
Browse files Browse the repository at this point in the history
commit 3ce3bc3 upstream.

When the final state is SOF_IPC4_PIPE_PAUSED, it is possible that the
stream will be restarted (resume or start) in which case we need to update
the offset from the firmware.

Cc: stable@vger.kernel.org # 6.8
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://msgid.link/r/20240321130814.4412-14-peter.ujfalusi@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
ujfalusi authored and gregkh committed Apr 10, 2024
1 parent e2edcd5 commit 34c196d
Showing 1 changed file with 12 additions and 1 deletion.
13 changes: 12 additions & 1 deletion sound/soc/sof/ipc4-pcm.c
Expand Up @@ -420,8 +420,19 @@ static int sof_ipc4_trigger_pipelines(struct snd_soc_component *component,
}

/* return if this is the final state */
if (state == SOF_IPC4_PIPE_PAUSED)
if (state == SOF_IPC4_PIPE_PAUSED) {
struct sof_ipc4_timestamp_info *time_info;

/*
* Invalidate the stream_start_offset to make sure that it is
* going to be updated if the stream resumes
*/
time_info = spcm->stream[substream->stream].private;
if (time_info)
time_info->stream_start_offset = SOF_IPC4_INVALID_STREAM_POSITION;

goto free;
}
skip_pause_transition:
/* else set the RUNNING/RESET state in the DSP */
ret = sof_ipc4_set_multi_pipeline_state(sdev, state, trigger_list);
Expand Down

0 comments on commit 34c196d

Please sign in to comment.