ASoC: rockchip: add format and rate constraints on rk3399
authorYu-Hsuan Hsu <yuhsuan@chromium.org>
Tue, 30 Jun 2020 09:16:15 +0000 (17:16 +0800)
committerMark Brown <broonie@kernel.org>
Wed, 1 Jul 2020 13:20:01 +0000 (14:20 +0100)
S8 and S24 formats does not work on this machine driver so force to use
S16_LE instead.

In addition, add constraint to limit the max value of rate because the
rate higher than 96000(172000, 192000) is not stable either.

Signed-off-by: Yu-Hsuan Hsu <yuhsuan@chromium.org>
Link: https://lore.kernel.org/r/20200630091615.4020059-1-yuhsuan@chromium.org
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/rockchip/rk3399_gru_sound.c

index f45e5aa..9539b0d 100644 (file)
@@ -219,19 +219,32 @@ static int rockchip_sound_dmic_hw_params(struct snd_pcm_substream *substream,
        return 0;
 }
 
+static int rockchip_sound_startup(struct snd_pcm_substream *substream)
+{
+       struct snd_pcm_runtime *runtime = substream->runtime;
+
+       runtime->hw.formats = SNDRV_PCM_FMTBIT_S16_LE;
+       return snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_RATE,
+                       8000, 96000);
+}
+
 static const struct snd_soc_ops rockchip_sound_max98357a_ops = {
+       .startup = rockchip_sound_startup,
        .hw_params = rockchip_sound_max98357a_hw_params,
 };
 
 static const struct snd_soc_ops rockchip_sound_rt5514_ops = {
+       .startup = rockchip_sound_startup,
        .hw_params = rockchip_sound_rt5514_hw_params,
 };
 
 static const struct snd_soc_ops rockchip_sound_da7219_ops = {
+       .startup = rockchip_sound_startup,
        .hw_params = rockchip_sound_da7219_hw_params,
 };
 
 static const struct snd_soc_ops rockchip_sound_dmic_ops = {
+       .startup = rockchip_sound_startup,
        .hw_params = rockchip_sound_dmic_hw_params,
 };