Messages in this thread |  | | Subject | Re: [PATCH] ASoC: Intel: boards: eve: Fix DMIC records zero | From | Pierre-Louis Bossart <> | Date | Thu, 9 Jul 2020 11:53:23 -0500 |
| |
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; > +} > +
|  |