ASoC: SOF: ipc4-topology: Add support for float sample type

This patch adds support for FLOAT_LE ALSA type for playback and
capture for IPC4 systems. Functions sof_ipc4_update_hw_params(),
sof_ipc4_get_valid_bits() and sof_ipc4_get_sample_type()
are updated to handle SOF_IPC4_TYPE_FLOAT and
SNDRV_PCM_FORMAT_FLOAT_LE.

Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Liam Girdwood <liam.r.girdwood@intel.com>
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Message-ID: <20250829105305.31818-4-peter.ujfalusi@linux.intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Seppo Ingalsuo
2025-08-29 13:53:05 +03:00
committed by Mark Brown
parent c04c2e8296
commit f7c41911ad

View File

@@ -1345,7 +1345,17 @@ static int sof_ipc4_update_hw_params(struct snd_sof_dev *sdev, struct snd_pcm_hw
snd_fmt = SNDRV_PCM_FORMAT_S24_LE;
break;
case 32:
snd_fmt = SNDRV_PCM_FORMAT_S32_LE;
switch (type) {
case SOF_IPC4_TYPE_LSB_INTEGER:
snd_fmt = SNDRV_PCM_FORMAT_S32_LE;
break;
case SOF_IPC4_TYPE_FLOAT:
snd_fmt = SNDRV_PCM_FORMAT_FLOAT_LE;
break;
default:
dev_err(sdev->dev, "Unsupported PCM 32-bit IPC4 type %d\n", type);
return -EINVAL;
}
break;
default:
dev_err(sdev->dev, "invalid PCM valid_bits %d\n", valid_bits);
@@ -1473,6 +1483,8 @@ static int sof_ipc4_get_valid_bits(struct snd_sof_dev *sdev, struct snd_pcm_hw_p
return 24;
case SNDRV_PCM_FORMAT_S32_LE:
return 32;
case SNDRV_PCM_FORMAT_FLOAT_LE:
return 32;
default:
dev_err(sdev->dev, "invalid pcm frame format %d\n", params_format(params));
return -EINVAL;
@@ -1493,6 +1505,8 @@ static int sof_ipc4_get_sample_type(struct snd_sof_dev *sdev, struct snd_pcm_hw_
case SNDRV_PCM_FORMAT_S32_LE:
case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE:
return SOF_IPC4_TYPE_LSB_INTEGER;
case SNDRV_PCM_FORMAT_FLOAT_LE:
return SOF_IPC4_TYPE_FLOAT;
default:
dev_err(sdev->dev, "invalid pcm sample type %d\n", params_format(params));
return -EINVAL;