mirror of
https://github.com/torvalds/linux.git
synced 2026-06-02 11:33:28 +02:00
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:
parent
c04c2e8296
commit
f7c41911ad
|
|
@ -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;
|
snd_fmt = SNDRV_PCM_FORMAT_S24_LE;
|
||||||
break;
|
break;
|
||||||
case 32:
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
dev_err(sdev->dev, "invalid PCM valid_bits %d\n", valid_bits);
|
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;
|
return 24;
|
||||||
case SNDRV_PCM_FORMAT_S32_LE:
|
case SNDRV_PCM_FORMAT_S32_LE:
|
||||||
return 32;
|
return 32;
|
||||||
|
case SNDRV_PCM_FORMAT_FLOAT_LE:
|
||||||
|
return 32;
|
||||||
default:
|
default:
|
||||||
dev_err(sdev->dev, "invalid pcm frame format %d\n", params_format(params));
|
dev_err(sdev->dev, "invalid pcm frame format %d\n", params_format(params));
|
||||||
return -EINVAL;
|
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_S32_LE:
|
||||||
case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE:
|
case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE:
|
||||||
return SOF_IPC4_TYPE_LSB_INTEGER;
|
return SOF_IPC4_TYPE_LSB_INTEGER;
|
||||||
|
case SNDRV_PCM_FORMAT_FLOAT_LE:
|
||||||
|
return SOF_IPC4_TYPE_FLOAT;
|
||||||
default:
|
default:
|
||||||
dev_err(sdev->dev, "invalid pcm sample type %d\n", params_format(params));
|
dev_err(sdev->dev, "invalid pcm sample type %d\n", params_format(params));
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user