Re: [PATCH] ASoC: Intel: boards: eve: Fix DMIC records zero

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 7/9/20 10:25 AM, vamshi.krishna.gopal@xxxxxxxxx wrote:
From: Brent Lu <brent.lu@xxxxxxxxx>

Add a dapm route to provide ssp mclk/sclk early
for DMIC  on SSP0(rt5514) and Headset on SSP1(rt5663)
since sclk for both codecs are different the
struct now defines SSP0 and SSP1 mclk , sclk separately
This change ensures the DMIC PCM port
will not return all-zero data

Signed-off-by: Brent Lu <brent.lu@xxxxxxxxx>
Signed-off-by: Vamshi Krishna Gopal <vamshi.krishna.gopal@xxxxxxxxx>
---
  .../intel/boards/kbl_rt5663_rt5514_max98927.c | 150 ++++++++++++------
  1 file changed, 102 insertions(+), 48 deletions(-)

diff --git a/sound/soc/intel/boards/kbl_rt5663_rt5514_max98927.c b/sound/soc/intel/boards/kbl_rt5663_rt5514_max98927.c
index b34cf6cf1139..584e4f9cedc2 100644
--- a/sound/soc/intel/boards/kbl_rt5663_rt5514_max98927.c
+++ b/sound/soc/intel/boards/kbl_rt5663_rt5514_max98927.c
@@ -53,8 +53,10 @@ struct kbl_codec_private {
  	struct snd_soc_jack kabylake_headset;
  	struct list_head hdmi_pcm_list;
  	struct snd_soc_jack kabylake_hdmi[2];
-	struct clk *mclk;
-	struct clk *sclk;
+	struct clk *ssp0_mclk;
+	struct clk *ssp0_sclk;
+	struct clk *ssp1_mclk;
+	struct clk *ssp1_sclk;

The definition of a per-SSP MCLK is just wrong. there are 2 MCLKs regardless of the number of SSPs, this should be MCLK0 and MCLK1.

It probably works in your case since you have 2 SSPs, but the Skylake driver exposes ssp2..5_mclk clocks that don't exist in hardware. Oh well.

If you don't mind I'd prefer it if you used mclk0 and mclk1 and drop the ssp_ prefix. You can still use the "ssp0_mclk" and "ssp1_mclk" strings when calling devm_clk_get(), but that way if the Skylake driver is fixed at some point we will not have to change the code in this driver, only the clock names.

[...]

@@ -757,6 +800,29 @@ static struct snd_soc_card kabylake_audio_card = {
  	.late_probe = kabylake_card_late_probe,
  };
+static int kabylake_audio_clk_get(struct device *dev, const char *id,
+	struct clk **clk)
+{
+	int ret = 0;
+
+	if (!clk)
+		return -EINVAL;
+
+	*clk = devm_clk_get(dev, id);
+	if (IS_ERR(*clk)) {
+		ret = PTR_ERR(*clk);
+		if (ret == -ENOENT) {
+			dev_info(dev, "Failed to get %s, defer probe\n", id);
+			return -EPROBE_DEFER;
+		}
+
+		dev_err(dev, "Failed to get %s with err:%d\n", id, ret);
+		return ret;

nit-pick: you can remove this return since you already have one two lines below.

+	}
+
+	return ret;
+}
+




[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Pulse Audio]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux