ASoC: SOF: Intel: hda: fix reset of host_period_bytes
authorMarcin Rajwa <marcin.rajwa@linux.intel.com>
Fri, 27 Sep 2019 20:05:34 +0000 (15:05 -0500)
committerMark Brown <broonie@kernel.org>
Tue, 1 Oct 2019 17:35:28 +0000 (18:35 +0100)
This patch prevents the reset of host period bytes
and uses no_stream_position to record requests
for stream position.

Signed-off-by: Marcin Rajwa <marcin.rajwa@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20190927200538.660-10-pierre-louis.bossart@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/intel/hda-pcm.c

index 9b730f183529184c91920c1bd1de5b3f02abd0c3..575f5f5877d85a279a086aa9248ccd71d2346568 100644 (file)
@@ -89,6 +89,7 @@ int hda_dsp_pcm_hw_params(struct snd_sof_dev *sdev,
        struct hdac_ext_stream *stream = stream_to_hdac_ext_stream(hstream);
        struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata;
        struct snd_dma_buffer *dmab;
+       struct sof_ipc_fw_version *v = &sdev->fw_ready.version;
        int ret;
        u32 size, rate, bits;
 
@@ -116,9 +117,17 @@ int hda_dsp_pcm_hw_params(struct snd_sof_dev *sdev,
        /* disable SPIB, to enable buffer wrap for stream */
        hda_dsp_stream_spib_config(sdev, stream, HDA_DSP_SPIB_DISABLE, 0);
 
-       /* set host_period_bytes to 0 if no IPC position */
-       if (hda && hda->no_ipc_position)
-               ipc_params->host_period_bytes = 0;
+       /* update no_stream_position flag for ipc params */
+       if (hda && hda->no_ipc_position) {
+               /* For older ABIs set host_period_bytes to zero to inform
+                * FW we don't want position updates. Newer versions use
+                * no_stream_position for this purpose.
+                */
+               if (v->abi_version < SOF_ABI_VER(3, 10, 0))
+                       ipc_params->host_period_bytes = 0;
+               else
+                       ipc_params->no_stream_position = 1;
+       }
 
        ipc_params->stream_tag = hstream->stream_tag;