Commit 3a6f9dce authored by Wonjoon Lee's avatar Wonjoon Lee Committed by Mark Brown

ASoC: rk3399_gru_sound: fix recording pop at first attempt

Pop happens when mclk applied but dmic's own boot-time
Specify dmic delay times in dt to make sure
clocks are ready earlier than dmic working
Signed-off-by: default avatarWonjoon Lee <woojoo.lee@samsung.com>
Signed-off-by: default avatarXing Zheng <zhengxing@rock-chips.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 22b93eaf
...@@ -6,10 +6,17 @@ Required properties: ...@@ -6,10 +6,17 @@ Required properties:
connected to the codecs connected to the codecs
- rockchip,codec: The phandle of the MAX98357A/RT5514/DA7219 codecs - rockchip,codec: The phandle of the MAX98357A/RT5514/DA7219 codecs
Optional properties:
- dmic-wakeup-delay-ms : specify delay time (ms) for DMIC ready.
If this option is specified, which means it's required dmic need
delay for DMIC to ready so that rt5514 can avoid recording before
DMIC send valid data
Example: Example:
sound { sound {
compatible = "rockchip,rk3399-gru-sound"; compatible = "rockchip,rk3399-gru-sound";
rockchip,cpu = <&i2s0>; rockchip,cpu = <&i2s0>;
rockchip,codec = <&max98357a &rt5514 &da7219>; rockchip,codec = <&max98357a &rt5514 &da7219>;
dmic-wakeup-delay-ms = <20>;
}; };
...@@ -38,6 +38,8 @@ ...@@ -38,6 +38,8 @@
#define SOUND_FS 256 #define SOUND_FS 256
unsigned int rt5514_dmic_delay;
static struct snd_soc_jack rockchip_sound_jack; static struct snd_soc_jack rockchip_sound_jack;
static const struct snd_soc_dapm_widget rockchip_dapm_widgets[] = { static const struct snd_soc_dapm_widget rockchip_dapm_widgets[] = {
...@@ -123,6 +125,9 @@ static int rockchip_sound_rt5514_hw_params(struct snd_pcm_substream *substream, ...@@ -123,6 +125,9 @@ static int rockchip_sound_rt5514_hw_params(struct snd_pcm_substream *substream,
return ret; return ret;
} }
/* Wait for DMIC stable */
msleep(rt5514_dmic_delay);
return 0; return 0;
} }
...@@ -343,6 +348,15 @@ static int rockchip_sound_probe(struct platform_device *pdev) ...@@ -343,6 +348,15 @@ static int rockchip_sound_probe(struct platform_device *pdev)
return -ENODEV; return -ENODEV;
} }
/* Set DMIC delay */
ret = device_property_read_u32(&pdev->dev, "dmic-delay",
&rt5514_dmic_delay);
if (ret) {
rt5514_dmic_delay = 0;
dev_dbg(&pdev->dev,
"no optional property 'dmic-delay' found, default: no delay\n");
}
rockchip_dailinks[DAILINK_RT5514_DSP].cpu_name = kstrdup_const(dev_name(dev), GFP_KERNEL); rockchip_dailinks[DAILINK_RT5514_DSP].cpu_name = kstrdup_const(dev_name(dev), GFP_KERNEL);
rockchip_dailinks[DAILINK_RT5514_DSP].cpu_dai_name = kstrdup_const(dev_name(dev), GFP_KERNEL); rockchip_dailinks[DAILINK_RT5514_DSP].cpu_dai_name = kstrdup_const(dev_name(dev), GFP_KERNEL);
rockchip_dailinks[DAILINK_RT5514_DSP].platform_name = kstrdup_const(dev_name(dev), GFP_KERNEL); rockchip_dailinks[DAILINK_RT5514_DSP].platform_name = kstrdup_const(dev_name(dev), GFP_KERNEL);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment