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

Pierre-Louis Bossart pierre-louis.bossart at linux.intel.com
Thu Jul 9 18:53:23 CEST 2020



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



More information about the Alsa-devel mailing list