All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
To: mac.chiang@intel.com, alsa-devel@alsa-project.org
Cc: sathya.prakash.m.r@intel.com, broonie@kernel.org, bard.liao@intel.com
Subject: Re: [PATCH] ASoC: Intel: boards: Add Cometlake machine driver support
Date: Thu, 8 Aug 2019 09:39:26 -0500	[thread overview]
Message-ID: <334b227c-10fb-ec2e-10d0-68587806eb8c@linux.intel.com> (raw)
In-Reply-To: <1565251120-13082-1-git-send-email-mac.chiang@intel.com>



On 8/8/19 2:58 AM, mac.chiang@intel.com wrote:
> From: Mac Chiang <mac.chiang@intel.com>
> 
> reuse and add Cometlake support with:
> SSP0 for DA7219 headphone codec
> SSP1 for MAX98357a speaker amp codec

Thanks, this is a good improvement compared to the previous version, but 
there are a couple of fixes needed, see comments below.
-Pierre

> 
> Signed-off-by: Mac Chiang <mac.chiang@intel.com>
> ---
>   sound/soc/intel/boards/Kconfig                    | 15 +++++++++
>   sound/soc/intel/boards/bxt_da7219_max98357a.c     | 37 ++++++++++++++++++++++-
>   sound/soc/intel/common/soc-acpi-intel-cnl-match.c | 12 ++++++++
>   sound/soc/intel/common/soc-intel-quirks.h         |  5 +++
>   4 files changed, 68 insertions(+), 1 deletion(-)
> 
> diff --git a/sound/soc/intel/boards/Kconfig b/sound/soc/intel/boards/Kconfig
> index 50bf149..617d63c 100644
> --- a/sound/soc/intel/boards/Kconfig
> +++ b/sound/soc/intel/boards/Kconfig
> @@ -256,6 +256,21 @@ config SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH
>   
>   endif ## SND_SOC_INTEL_SKL
>   
> +config SND_SOC_INTEL_DA7219_MAX98357A_GENERIC
> +	tristate
> +	select SND_SOC_DA7219
> +	select SND_SOC_MAX98357A
> +	select SND_SOC_DMIC
> +	select SND_SOC_HDAC_HDMI

This should be used in the other cases as well.

> +
> +if SND_SOC_SOF_COMETLAKE_LP

we probably need to check that the HDA link is enabled as done for APL

Also try to put CML after GLK/CNL, we try to have a semi-historical 
platform order, and there is no good reason to show CML before APL.

> +config SND_SOC_INTEL_CML_LP_DA7219_MAX98357A_MACH
> +	tristate "CML_LP with DA7219 and MAX98357A in I2S Mode"
> +	depends on I2C && ACPI
> +	depends on MFD_INTEL_LPSS || COMPILE_TEST
> +	select SND_SOC_INTEL_DA7219_MAX98357A_GENERIC
> +endif
> +
>   if SND_SOC_INTEL_APL
>   
>   config SND_SOC_INTEL_BXT_DA7219_MAX98357A_MACH
> diff --git a/sound/soc/intel/boards/bxt_da7219_max98357a.c b/sound/soc/intel/boards/bxt_da7219_max98357a.c
> index c0d865a..e5941ff 100644
> --- a/sound/soc/intel/boards/bxt_da7219_max98357a.c
> +++ b/sound/soc/intel/boards/bxt_da7219_max98357a.c
> @@ -24,6 +24,8 @@
>   
>   #define BXT_DIALOG_CODEC_DAI	"da7219-hifi"
>   #define BXT_MAXIM_CODEC_DAI	"HiFi"
> +#define MCLK_19M	19200000
> +#define MCLK_24M	24576000

Oh, this is suspicious. If this is the oscillator frequency, then this 
is 24.0 MHz.

>   #define DUAL_CHANNEL		2
>   #define QUAD_CHANNEL		4
>   
> @@ -181,8 +183,13 @@ static int broxton_da7219_codec_init(struct snd_soc_pcm_runtime *rtd)
>   	struct snd_soc_component *component = rtd->codec_dai->component;
>   
>   	/* Configure sysclk for codec */
> -	ret = snd_soc_dai_set_sysclk(codec_dai, DA7219_CLKSRC_MCLK, 19200000,
> +#if !IS_ENABLED(CONFIG_SND_SOC_SOF_COMETLAKE_LP)
> +	ret = snd_soc_dai_set_sysclk(codec_dai, DA7219_CLKSRC_MCLK, MCLK_19M,
>   				     SND_SOC_CLOCK_IN);
> +#else
> +	ret = snd_soc_dai_set_sysclk(codec_dai, DA7219_CLKSRC_MCLK, MCLK_24M,
> +				     SND_SOC_CLOCK_IN);
> +#endif

No, this needs to be a dynamic selection based on the platform, not a 
preprocessor define that will be evaluated at build time. Otherwise if 
we have a distribution that compiles support for BXT/GLK/CML_H then it 
will select 24M even for BXT/GLK.

>   	if (ret) {
>   		dev_err(rtd->dev, "can't set codec sysclk configuration\n");
>   		return ret;
> @@ -224,7 +231,11 @@ static int broxton_hdmi_init(struct snd_soc_pcm_runtime *rtd)
>   	if (!pcm)
>   		return -ENOMEM;
>   
> +#if !IS_ENABLED(CONFIG_SND_SOC_SOF_COMETLAKE_LP)
>   	pcm->device = BXT_DPCM_AUDIO_HDMI1_PB + dai->id;
> +#else
> +	pcm->device = dai->id;
> +#endif

same here, this needs to be based on a quirk evaluated at run-time.
I actually don't know why there should be any difference here?

>   	pcm->codec_dai = dai;
>   
>   	list_add_tail(&pcm->head, &ctx->hdmi_pcm_list);
> @@ -683,6 +694,27 @@ static int broxton_audio_probe(struct platform_device *pdev)
>   				broxton_dais[i].cpus->dai_name = "SSP2 Pin";
>   			}
>   		}
> +	} else if (soc_intel_is_cml()) {
> +		unsigned int i;
> +
> +		broxton_audio_card.name = "cmlda7219max";
> +
> +		for (i = 0; i < ARRAY_SIZE(broxton_dais); i++) {
> +			/* MAXIM_CODEC is connected to SSP1. */
> +			if (!strcmp(broxton_dais[i].codecs->dai_name,
> +					BXT_MAXIM_CODEC_DAI)) {
> +				broxton_dais[i].id = 1;
> +				broxton_dais[i].name = "SSP1-Codec";
> +				broxton_dais[i].cpus->dai_name = "SSP1 Pin";
> +			}
> +			/* DIALOG_CODEC is connected to SSP0 */
> +			else if (!strcmp(broxton_dais[i].codecs->dai_name,
> +					BXT_DIALOG_CODEC_DAI)) {
> +				broxton_dais[i].id = 0;
> +				broxton_dais[i].name = "SSP0-Codec";
> +				broxton_dais[i].cpus->dai_name = "SSP0 Pin";
> +			}
> +		}
>   	}
>   
>   	/* override plaform name, if required */
> @@ -700,6 +732,7 @@ static int broxton_audio_probe(struct platform_device *pdev)
>   static const struct platform_device_id bxt_board_ids[] = {
>   	{ .name = "bxt_da7219_max98357a" },
>   	{ .name = "glk_da7219_max98357a" },
> +	{ .name = "cml_da7219_max98357a" },
>   	{ }
>   };
>   
> @@ -720,6 +753,8 @@ MODULE_AUTHOR("Rohit Ainapure <rohit.m.ainapure@intel.com>");
>   MODULE_AUTHOR("Harsha Priya <harshapriya.n@intel.com>");
>   MODULE_AUTHOR("Conrad Cooke <conrad.cooke@intel.com>");
>   MODULE_AUTHOR("Naveen Manohar <naveen.m@intel.com>");
> +MODULE_AUTHOR("Mac Chiang <mac.chiang@intel.com>");
>   MODULE_LICENSE("GPL v2");
>   MODULE_ALIAS("platform:bxt_da7219_max98357a");
>   MODULE_ALIAS("platform:glk_da7219_max98357a");
> +MODULE_ALIAS("platform:cml_da7219_max98357a");
> diff --git a/sound/soc/intel/common/soc-acpi-intel-cnl-match.c b/sound/soc/intel/common/soc-acpi-intel-cnl-match.c
> index c36c0aa..4ea32b2 100644
> --- a/sound/soc/intel/common/soc-acpi-intel-cnl-match.c
> +++ b/sound/soc/intel/common/soc-acpi-intel-cnl-match.c
> @@ -19,6 +19,11 @@ static struct snd_soc_acpi_codecs cml_codecs = {
>   	.codecs = {"10EC5682"}
>   };
>   
> +static struct snd_soc_acpi_codecs cml_spk_codecs = {
> +	.num_codecs = 1,
> +	.codecs = {"MX98357A"}
> +};
> +
>   struct snd_soc_acpi_mach snd_soc_acpi_intel_cnl_machines[] = {
>   	{
>   		.id = "INT34C2",
> @@ -29,6 +34,13 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_cnl_machines[] = {
>   		.sof_tplg_filename = "sof-cnl-rt274.tplg",
>   	},
>   	{
> +		.id = "DLGS7219",
> +		.drv_name = "cml_da7219_max98357a",
> +		.quirk_data = &cml_spk_codecs,
> +		.sof_fw_filename = "sof-cnl.ri",
> +		.sof_tplg_filename = "sof-cml-da7219-max98357a.tplg",
> +	},
> +	{
>   		.id = "MX98357A",
>   		.drv_name = "sof_rt5682",
>   		.quirk_data = &cml_codecs,
> diff --git a/sound/soc/intel/common/soc-intel-quirks.h b/sound/soc/intel/common/soc-intel-quirks.h
> index 4718fd3..e6357d3 100644
> --- a/sound/soc/intel/common/soc-intel-quirks.h
> +++ b/sound/soc/intel/common/soc-intel-quirks.h
> @@ -36,6 +36,7 @@ SOC_INTEL_IS_CPU(byt, INTEL_FAM6_ATOM_SILVERMONT);
>   SOC_INTEL_IS_CPU(cht, INTEL_FAM6_ATOM_AIRMONT);
>   SOC_INTEL_IS_CPU(apl, INTEL_FAM6_ATOM_GOLDMONT);
>   SOC_INTEL_IS_CPU(glk, INTEL_FAM6_ATOM_GOLDMONT_PLUS);
> +SOC_INTEL_IS_CPU(cml, INTEL_FAM6_KABYLAKE_MOBILE);
>   
>   static inline bool soc_intel_is_byt_cr(struct platform_device *pdev)
>   {
> @@ -110,6 +111,10 @@ static inline bool soc_intel_is_glk(void)
>   	return false;
>   }
>   
> +static inline bool soc_intel_is_cml(void)
> +{
> +	return false;
> +}
>   #endif
>   
>    #endif /* _SND_SOC_INTEL_QUIRKS_H */

Humm, which branch does this apply against? It's not in Mark's tree nor 
in the SOF tree, so how did you test this?

I remember submitting this quirk suggestion but it was not approved 
upstream, or needed more work (this was before I dropped everything to 
work on SoundWire). You may have to do this manually for now with the 
cpu_id method, and we'll replace it later with a better solution.

  reply	other threads:[~2019-08-08 14:39 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-08  7:58 [PATCH] ASoC: Intel: boards: Add Cometlake machine driver support mac.chiang
2019-08-08 14:39 ` Pierre-Louis Bossart [this message]
2019-08-08 19:06   ` Pierre-Louis Bossart
2019-08-08 17:38 ` Sridharan, Ranjani
2019-08-08 19:15   ` Pierre-Louis Bossart
2019-08-08 19:22     ` Sridharan, Ranjani

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=334b227c-10fb-ec2e-10d0-68587806eb8c@linux.intel.com \
    --to=pierre-louis.bossart@linux.intel.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=bard.liao@intel.com \
    --cc=broonie@kernel.org \
    --cc=mac.chiang@intel.com \
    --cc=sathya.prakash.m.r@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.