From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: "Pawse, GuruprasadX" Date: Wed, 18 Jan 2017 15:53:24 +0530 Subject: [PATCH] ASoC: Intel: Skylake: Support all I2S ports with all possible capabilities This patch adds all possible capabilities that the platform supports. This is the superset of the capabilities that all machines support. Below are the platform capabilities supported: Rates = Support all rates via SNDRV_PCM_RATE_KNOT BE Sample size = S16_LE, S24_LE, S32_LE FE Sample size = S16_LE, S24_LE, S32_LE, FLOAT_LE BE Num Channels = 1 to 8 FE Num Channels = 1 to 8 Change-Id: I975d3d1599505a1a4592160377b0d0ede1548c54 Signed-off-by: Pawse, GuruprasadX Reviewed-on: Reviewed-by: R, Dharageswari Reviewed-by: Diwakar, Praveen Reviewed-by: Nc, Shreyas Reviewed-by: Kp, Jeeja Tested-by: Sm, Bhadur A --- sound/soc/intel/skylake/skl-pcm.c | 129 ++++++++++++++++-------------- 1 file changed, 71 insertions(+), 58 deletions(-) diff --git a/sound/soc/intel/skylake/skl-pcm.c b/sound/soc/intel/skylake/skl-pcm.c index 9890374bfaa4..321f0ca5b96a 100644 --- a/sound/soc/intel/skylake/skl-pcm.c +++ b/sound/soc/intel/skylake/skl-pcm.c @@ -35,6 +35,7 @@ #define HDA_MONO 1 #define HDA_STEREO 2 #define HDA_QUAD 4 +#define HDA_8_CH 8 static const struct snd_pcm_hardware azx_pcm_hw = { .info = (SNDRV_PCM_INFO_MMAP | @@ -50,10 +51,11 @@ static const struct snd_pcm_hardware azx_pcm_hw = { SNDRV_PCM_INFO_NO_STATUS_MMAP), .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE | - SNDRV_PCM_FMTBIT_S24_LE, /* TODO Add constraints to other machine drivers */ + SNDRV_PCM_FMTBIT_S24_LE | + SNDRV_PCM_FMTBIT_FLOAT_LE, .rates = SNDRV_PCM_RATE_8000_192000 | SNDRV_PCM_RATE_KNOT, .rate_min = 8000, - .rate_max = 48000, + .rate_max = 192000, .channels_min = 1, .channels_max = 8, .buffer_bytes_max = AZX_MAX_BUF_SIZE, @@ -1015,20 +1017,19 @@ static struct snd_soc_dai_driver skl_fe_dai[] = { .playback = { .stream_name = "System Playback", .channels_min = HDA_MONO, - .channels_max = HDA_STEREO, + .channels_max = HDA_8_CH, .rates = SNDRV_PCM_RATE_8000_192000 | SNDRV_PCM_RATE_KNOT, - .formats = SNDRV_PCM_FMTBIT_S16_LE | - SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE, + .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE | + SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_FLOAT_LE, .sig_bits = 32, }, .capture = { .stream_name = "System Capture", .channels_min = HDA_MONO, - .channels_max = HDA_STEREO, - .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_32000 | - SNDRV_PCM_RATE_KNOT | - SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_8000, - .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE, + .channels_max = HDA_8_CH, + .rates = SNDRV_PCM_RATE_8000_192000 | SNDRV_PCM_RATE_KNOT, + .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE | + SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_FLOAT_LE, .sig_bits = 32, }, }, @@ -1181,17 +1182,19 @@ static struct snd_soc_dai_driver skl_platform_dai[] = { .ops = &skl_be_ssp_dai_ops, .playback = { .stream_name = "ssp0 Tx", - .channels_min = HDA_STEREO, - .channels_max = HDA_STEREO, - .rates = SNDRV_PCM_RATE_48000, - .formats = SNDRV_PCM_FMTBIT_S16_LE, + .channels_min = HDA_MONO, + .channels_max = HDA_8_CH, + .rates = SNDRV_PCM_RATE_8000_192000 | SNDRV_PCM_RATE_KNOT, + .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE | + SNDRV_PCM_FMTBIT_S32_LE, }, .capture = { .stream_name = "ssp0 Rx", - .channels_min = HDA_STEREO, - .channels_max = HDA_STEREO, - .rates = SNDRV_PCM_RATE_48000, - .formats = SNDRV_PCM_FMTBIT_S16_LE, + .channels_min = HDA_MONO, + .channels_max = HDA_8_CH, + .rates = SNDRV_PCM_RATE_8000_192000 | SNDRV_PCM_RATE_KNOT, + .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE | + SNDRV_PCM_FMTBIT_S32_LE, }, }, { @@ -1199,17 +1202,19 @@ static struct snd_soc_dai_driver skl_platform_dai[] = { .ops = &skl_be_ssp_dai_ops, .playback = { .stream_name = "ssp1 Tx", - .channels_min = HDA_STEREO, - .channels_max = HDA_STEREO, - .rates = SNDRV_PCM_RATE_48000, - .formats = SNDRV_PCM_FMTBIT_S16_LE, + .channels_min = HDA_MONO, + .channels_max = HDA_8_CH, + .rates = SNDRV_PCM_RATE_8000_192000 | SNDRV_PCM_RATE_KNOT, + .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE | + SNDRV_PCM_FMTBIT_S32_LE, }, .capture = { .stream_name = "ssp1 Rx", - .channels_min = HDA_STEREO, - .channels_max = HDA_STEREO, - .rates = SNDRV_PCM_RATE_48000, - .formats = SNDRV_PCM_FMTBIT_S16_LE, + .channels_min = HDA_MONO, + .channels_max = HDA_8_CH, + .rates = SNDRV_PCM_RATE_8000_192000 | SNDRV_PCM_RATE_KNOT, + .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE | + SNDRV_PCM_FMTBIT_S32_LE, }, }, { @@ -1217,17 +1222,19 @@ static struct snd_soc_dai_driver skl_platform_dai[] = { .ops = &skl_be_ssp_dai_ops, .playback = { .stream_name = "ssp2 Tx", - .channels_min = HDA_STEREO, - .channels_max = HDA_STEREO, - .rates = SNDRV_PCM_RATE_48000, - .formats = SNDRV_PCM_FMTBIT_S16_LE, + .channels_min = HDA_MONO, + .channels_max = HDA_8_CH, + .rates = SNDRV_PCM_RATE_8000_192000 | SNDRV_PCM_RATE_KNOT, + .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE | + SNDRV_PCM_FMTBIT_S32_LE, }, .capture = { .stream_name = "ssp2 Rx", - .channels_min = HDA_STEREO, - .channels_max = HDA_STEREO, - .rates = SNDRV_PCM_RATE_48000, - .formats = SNDRV_PCM_FMTBIT_S16_LE, + .channels_min = HDA_MONO, + .channels_max = HDA_8_CH, + .rates = SNDRV_PCM_RATE_8000_192000 | SNDRV_PCM_RATE_KNOT, + .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE | + SNDRV_PCM_FMTBIT_S32_LE, }, }, { @@ -1235,17 +1242,19 @@ static struct snd_soc_dai_driver skl_platform_dai[] = { .ops = &skl_be_ssp_dai_ops, .playback = { .stream_name = "ssp3 Tx", - .channels_min = HDA_STEREO, - .channels_max = HDA_STEREO, - .rates = SNDRV_PCM_RATE_48000, - .formats = SNDRV_PCM_FMTBIT_S16_LE, + .channels_min = HDA_MONO, + .channels_max = HDA_8_CH, + .rates = SNDRV_PCM_RATE_8000_192000 | SNDRV_PCM_RATE_KNOT, + .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE | + SNDRV_PCM_FMTBIT_S32_LE, }, .capture = { .stream_name = "ssp3 Rx", - .channels_min = HDA_STEREO, - .channels_max = HDA_STEREO, - .rates = SNDRV_PCM_RATE_48000, - .formats = SNDRV_PCM_FMTBIT_S16_LE, + .channels_min = HDA_MONO, + .channels_max = HDA_8_CH, + .rates = SNDRV_PCM_RATE_8000_192000 | SNDRV_PCM_RATE_KNOT, + .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE | + SNDRV_PCM_FMTBIT_S32_LE, }, }, { @@ -1253,17 +1262,19 @@ static struct snd_soc_dai_driver skl_platform_dai[] = { .ops = &skl_be_ssp_dai_ops, .playback = { .stream_name = "ssp4 Tx", - .channels_min = HDA_STEREO, - .channels_max = HDA_STEREO, - .rates = SNDRV_PCM_RATE_48000, - .formats = SNDRV_PCM_FMTBIT_S16_LE, + .channels_min = HDA_MONO, + .channels_max = HDA_8_CH, + .rates = SNDRV_PCM_RATE_8000_192000 | SNDRV_PCM_RATE_KNOT, + .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE | + SNDRV_PCM_FMTBIT_S32_LE, }, .capture = { .stream_name = "ssp4 Rx", - .channels_min = HDA_STEREO, - .channels_max = HDA_STEREO, - .rates = SNDRV_PCM_RATE_48000, - .formats = SNDRV_PCM_FMTBIT_S16_LE, + .channels_min = HDA_MONO, + .channels_max = HDA_8_CH, + .rates = SNDRV_PCM_RATE_8000_192000 | SNDRV_PCM_RATE_KNOT, + .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE | + SNDRV_PCM_FMTBIT_S32_LE, }, }, { @@ -1271,17 +1282,19 @@ static struct snd_soc_dai_driver skl_platform_dai[] = { .ops = &skl_be_ssp_dai_ops, .playback = { .stream_name = "ssp5 Tx", - .channels_min = HDA_STEREO, - .channels_max = HDA_STEREO, - .rates = SNDRV_PCM_RATE_48000, - .formats = SNDRV_PCM_FMTBIT_S16_LE, + .channels_min = HDA_MONO, + .channels_max = HDA_8_CH, + .rates = SNDRV_PCM_RATE_8000_192000 | SNDRV_PCM_RATE_KNOT, + .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE | + SNDRV_PCM_FMTBIT_S32_LE, }, .capture = { .stream_name = "ssp5 Rx", - .channels_min = HDA_STEREO, - .channels_max = HDA_STEREO, - .rates = SNDRV_PCM_RATE_48000, - .formats = SNDRV_PCM_FMTBIT_S16_LE, + .channels_min = HDA_MONO, + .channels_max = HDA_8_CH, + .rates = SNDRV_PCM_RATE_8000_192000 | SNDRV_PCM_RATE_KNOT, + .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE | + SNDRV_PCM_FMTBIT_S32_LE, }, }, { -- https://clearlinux.org