94 lines
2.7 KiB
Diff
94 lines
2.7 KiB
Diff
|
From 9087720db6f8ffd289b374b27eb07c7c8fcc3018 Mon Sep 17 00:00:00 2001
|
||
|
From: Samuel Holland <samuel@sholland.org>
|
||
|
Date: Wed, 14 Oct 2020 01:19:33 -0500
|
||
|
Subject: [PATCH 306/351] ASoC: sun8i-codec: Enable all supported sample rates
|
||
|
|
||
|
The system sample rate programmed into the hardware is really a clock
|
||
|
divider from SYSCLK to the ADC and DAC. Since we support two SYSCLK
|
||
|
frequencies, we can use all sample rates corresponding to one of those
|
||
|
frequencies divided by any available divisor.
|
||
|
|
||
|
This commit enables support for those sample rates. It also stops
|
||
|
advertising support for a 64 kHz sample rate, which is not supported.
|
||
|
|
||
|
Acked-by: Maxime Ripard <mripard@kernel.org>
|
||
|
Signed-off-by: Samuel Holland <samuel@sholland.org>
|
||
|
Link: https://lore.kernel.org/r/20201014061941.4306-10-samuel@sholland.org
|
||
|
Signed-off-by: Mark Brown <broonie@kernel.org>
|
||
|
---
|
||
|
sound/soc/sunxi/sun8i-codec.c | 17 ++++++++++++++---
|
||
|
1 file changed, 14 insertions(+), 3 deletions(-)
|
||
|
|
||
|
diff --git a/sound/soc/sunxi/sun8i-codec.c b/sound/soc/sunxi/sun8i-codec.c
|
||
|
index 21104e6e8892..38349d85fb17 100644
|
||
|
--- a/sound/soc/sunxi/sun8i-codec.c
|
||
|
+++ b/sound/soc/sunxi/sun8i-codec.c
|
||
|
@@ -94,6 +94,13 @@
|
||
|
#define SUN8I_AIF1CLK_CTRL_AIF1_WORD_SIZ_MASK GENMASK(5, 4)
|
||
|
#define SUN8I_AIF1CLK_CTRL_AIF1_DATA_FMT_MASK GENMASK(3, 2)
|
||
|
|
||
|
+#define SUN8I_CODEC_PCM_RATES (SNDRV_PCM_RATE_8000_48000|\
|
||
|
+ SNDRV_PCM_RATE_88200 |\
|
||
|
+ SNDRV_PCM_RATE_96000 |\
|
||
|
+ SNDRV_PCM_RATE_176400 |\
|
||
|
+ SNDRV_PCM_RATE_192000 |\
|
||
|
+ SNDRV_PCM_RATE_KNOT)
|
||
|
+
|
||
|
enum {
|
||
|
SUN8I_CODEC_AIF1,
|
||
|
SUN8I_CODEC_NAIFS
|
||
|
@@ -147,27 +154,31 @@ static int sun8i_codec_get_hw_rate(struct snd_pcm_hw_params *params)
|
||
|
unsigned int rate = params_rate(params);
|
||
|
|
||
|
switch (rate) {
|
||
|
- case 8000:
|
||
|
case 7350:
|
||
|
+ case 8000:
|
||
|
return 0x0;
|
||
|
case 11025:
|
||
|
return 0x1;
|
||
|
case 12000:
|
||
|
return 0x2;
|
||
|
+ case 14700:
|
||
|
case 16000:
|
||
|
return 0x3;
|
||
|
case 22050:
|
||
|
return 0x4;
|
||
|
case 24000:
|
||
|
return 0x5;
|
||
|
+ case 29400:
|
||
|
case 32000:
|
||
|
return 0x6;
|
||
|
case 44100:
|
||
|
return 0x7;
|
||
|
case 48000:
|
||
|
return 0x8;
|
||
|
+ case 88200:
|
||
|
case 96000:
|
||
|
return 0x9;
|
||
|
+ case 176400:
|
||
|
case 192000:
|
||
|
return 0xa;
|
||
|
default:
|
||
|
@@ -413,7 +424,7 @@ static struct snd_soc_dai_driver sun8i_codec_dais[] = {
|
||
|
.stream_name = "AIF1 Capture",
|
||
|
.channels_min = 1,
|
||
|
.channels_max = 2,
|
||
|
- .rates = SNDRV_PCM_RATE_8000_192000,
|
||
|
+ .rates = SUN8I_CODEC_PCM_RATES,
|
||
|
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||
|
.sig_bits = 24,
|
||
|
},
|
||
|
@@ -422,7 +433,7 @@ static struct snd_soc_dai_driver sun8i_codec_dais[] = {
|
||
|
.stream_name = "AIF1 Playback",
|
||
|
.channels_min = 1,
|
||
|
.channels_max = 2,
|
||
|
- .rates = SNDRV_PCM_RATE_8000_192000,
|
||
|
+ .rates = SUN8I_CODEC_PCM_RATES,
|
||
|
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||
|
},
|
||
|
.symmetric_rates = true,
|
||
|
--
|
||
|
2.34.0
|
||
|
|