Skip to content

Commit 9b13ced

Browse files
committed
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>
1 parent d1539bd commit 9b13ced

1 file changed

Lines changed: 15 additions & 1 deletion

File tree

sound/soc/sof/ipc4-topology.c

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1370,7 +1370,17 @@ static int sof_ipc4_update_hw_params(struct snd_sof_dev *sdev, struct snd_pcm_hw
13701370
snd_fmt = SNDRV_PCM_FORMAT_S24_LE;
13711371
break;
13721372
case 32:
1373-
snd_fmt = SNDRV_PCM_FORMAT_S32_LE;
1373+
switch (type) {
1374+
case SOF_IPC4_TYPE_LSB_INTEGER:
1375+
snd_fmt = SNDRV_PCM_FORMAT_S32_LE;
1376+
break;
1377+
case SOF_IPC4_TYPE_FLOAT:
1378+
snd_fmt = SNDRV_PCM_FORMAT_FLOAT_LE;
1379+
break;
1380+
default:
1381+
dev_err(sdev->dev, "Unsupported PCM 32-bit IPC4 type %d\n", type);
1382+
return -EINVAL;
1383+
}
13741384
break;
13751385
default:
13761386
dev_err(sdev->dev, "invalid PCM valid_bits %d\n", valid_bits);
@@ -1496,6 +1506,8 @@ static int sof_ipc4_get_valid_bits(struct snd_sof_dev *sdev, struct snd_pcm_hw_p
14961506
return 24;
14971507
case SNDRV_PCM_FORMAT_S32_LE:
14981508
return 32;
1509+
case SNDRV_PCM_FORMAT_FLOAT_LE:
1510+
return 32;
14991511
default:
15001512
dev_err(sdev->dev, "invalid pcm frame format %d\n", params_format(params));
15011513
return -EINVAL;
@@ -1516,6 +1528,8 @@ static int sof_ipc4_get_sample_type(struct snd_sof_dev *sdev, struct snd_pcm_hw_
15161528
case SNDRV_PCM_FORMAT_S32_LE:
15171529
case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE:
15181530
return SOF_IPC4_TYPE_LSB_INTEGER;
1531+
case SNDRV_PCM_FORMAT_FLOAT_LE:
1532+
return SOF_IPC4_TYPE_FLOAT;
15191533
default:
15201534
dev_err(sdev->dev, "invalid pcm sample type %d\n", params_format(params));
15211535
return -EINVAL;

0 commit comments

Comments
 (0)