On 7/9/20 10:25 AM, vamshi.krishna.gopal@intel.com wrote:
From: Brent Lu brent.lu@intel.com
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@intel.com Signed-off-by: Vamshi Krishna Gopal vamshi.krishna.gopal@intel.com
.../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;
+}