ASoC: SOF: Intel: hda-pcm: Follow the pause_supported flag to drop PAUSE support
authorPeter Ujfalusi <peter.ujfalusi@linux.intel.com>
Fri, 13 Dec 2024 10:11:23 +0000 (12:11 +0200)
committerMark Brown <broonie@kernel.org>
Fri, 13 Dec 2024 13:10:30 +0000 (13:10 +0000)
If the stream's pause_supported flag is false then mask out the PAUSE
support, so user space will be prevented to use it.

Introduce a module parameter to ignore the pause_supported flag, named as
force_pause_support to allow testing of the PAUSE feature.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Reviewed-by: Liam Girdwood <liam.r.girdwood@intel.com>
Link: https://patch.msgid.link/20241213101123.27318-3-peter.ujfalusi@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/intel/hda-pcm.c

index 5b5e484f9acf1a5257d892d74ddf5e40c0418a93..1dd8d2092c3b4ff4e9f663b25d3e311fbddf96db 100644 (file)
@@ -37,6 +37,11 @@ static bool hda_disable_rewinds;
 module_param_named(disable_rewinds, hda_disable_rewinds, bool, 0444);
 MODULE_PARM_DESC(disable_rewinds, "SOF HDA disable rewinds");
 
+static int hda_force_pause_support = -1;
+module_param_named(force_pause_support, hda_force_pause_support, int, 0444);
+MODULE_PARM_DESC(force_pause_support,
+                "Pause support: -1: Use default, 0: Disable, 1: Enable (default -1)");
+
 u32 hda_dsp_get_mult_div(struct snd_sof_dev *sdev, int rate)
 {
        switch (rate) {
@@ -240,6 +245,16 @@ int hda_dsp_pcm_open(struct snd_sof_dev *sdev,
        if (hda_always_enable_dmi_l1 && direction == SNDRV_PCM_STREAM_CAPTURE)
                runtime->hw.info &= ~SNDRV_PCM_INFO_PAUSE;
 
+       /*
+        * Do not advertise the PAUSE support if it is forced to be disabled via
+        * module parameter or if the pause_supported is false for the PCM
+        * device
+        */
+       if (hda_force_pause_support == 0 ||
+           (hda_force_pause_support == -1 &&
+            !spcm->stream[substream->stream].pause_supported))
+               runtime->hw.info &= ~SNDRV_PCM_INFO_PAUSE;
+
        if (hda_always_enable_dmi_l1 ||
            direction == SNDRV_PCM_STREAM_PLAYBACK ||
            spcm->stream[substream->stream].d0i3_compatible)