Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -6,10 +6,17 @@ Required properties:
  connected to the 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:

sound {
	compatible = "rockchip,rk3399-gru-sound";
	rockchip,cpu = <&i2s0>;
	rockchip,codec = <&max98357a &rt5514 &da7219>;
	dmic-wakeup-delay-ms = <20>;
};
+14 −0
Original line number Diff line number Diff line
@@ -38,6 +38,8 @@

#define SOUND_FS	256

unsigned int rt5514_dmic_delay;

static struct snd_soc_jack rockchip_sound_jack;

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,
		return ret;
	}

	/* Wait for DMIC stable */
	msleep(rt5514_dmic_delay);

	return 0;
}

@@ -343,6 +348,15 @@ static int rockchip_sound_probe(struct platform_device *pdev)
		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_dai_name = kstrdup_const(dev_name(dev), GFP_KERNEL);
	rockchip_dailinks[DAILINK_RT5514_DSP].platform_name = kstrdup_const(dev_name(dev), GFP_KERNEL);