[alsa-devel] [PATCH] ASoC: cAVS: add device_link to HDMI audio

Takashi Iwai tiwai at suse.de
Mon Apr 8 14:35:14 CEST 2019


On Mon, 08 Apr 2019 03:21:53 +0200,
libin.yang at intel.com wrote:
> 
> From: Libin Yang <libin.yang at intel.com>
> 
> In resume from S3, HDAC HDMI codec driver dapm event callback may be
> operated before HDMI codec driver turns on the display audio power
> domain because of the contest between display driver and hdmi codec driver.
> 
> This patch adds the device_link between cAVS generic machine device
> (consumer) and hdmi codec device (supplier) to make sure the sequence is
> always correct.
> 
> Signed-off-by: Libin Yang <libin.yang at intel.com>

Looks good to me.  Maybe it's worth to put a brief comment in
skl_hdmi_init() why this device link is needed, though.

Feel free to take my ack:
  Reviewed-by: Takashi Iwai <tiwai at suse.de>


thanks,

Takashi

> ---
>  sound/soc/intel/boards/skl_hda_dsp_common.c  | 15 +++++++++++++++
>  sound/soc/intel/boards/skl_hda_dsp_common.h  |  1 +
>  sound/soc/intel/boards/skl_hda_dsp_generic.c | 12 ++++++++++++
>  3 files changed, 28 insertions(+)
> 
> diff --git a/sound/soc/intel/boards/skl_hda_dsp_common.c b/sound/soc/intel/boards/skl_hda_dsp_common.c
> index 9b30c0e..01c8937 100644
> --- a/sound/soc/intel/boards/skl_hda_dsp_common.c
> +++ b/sound/soc/intel/boards/skl_hda_dsp_common.c
> @@ -17,6 +17,18 @@
>  
>  #define NAME_SIZE	32
>  
> +static int skl_hdmi_init(struct snd_soc_pcm_runtime *rtd)
> +{
> +	struct skl_hda_private *ctx = snd_soc_card_get_drvdata(rtd->card);
> +	struct snd_soc_dai *dai = rtd->codec_dai;
> +
> +	if (!ctx->link)
> +		ctx->link = device_link_add(rtd->card->dev, dai->dev,
> +					    DL_FLAG_RPM_ACTIVE);
> +
> +	return 0;
> +}
> +
>  int skl_hda_hdmi_add_pcm(struct snd_soc_card *card, int device)
>  {
>  	struct skl_hda_private *ctx = snd_soc_card_get_drvdata(card);
> @@ -48,6 +60,7 @@ struct snd_soc_dai_link skl_hda_be_dai_links[HDA_DSP_MAX_BE_DAI_LINKS] = {
>  		.cpu_dai_name = "iDisp1 Pin",
>  		.codec_name = "ehdaudio0D2",
>  		.codec_dai_name = "intel-hdmi-hifi1",
> +		.init = skl_hdmi_init,
>  		.dpcm_playback = 1,
>  		.no_pcm = 1,
>  		.trigger[0] = SND_SOC_DPCM_TRIGGER_POST,
> @@ -58,6 +71,7 @@ struct snd_soc_dai_link skl_hda_be_dai_links[HDA_DSP_MAX_BE_DAI_LINKS] = {
>  		.cpu_dai_name = "iDisp2 Pin",
>  		.codec_name = "ehdaudio0D2",
>  		.codec_dai_name = "intel-hdmi-hifi2",
> +		.init = skl_hdmi_init,
>  		.dpcm_playback = 1,
>  		.no_pcm = 1,
>  		.trigger[0] = SND_SOC_DPCM_TRIGGER_POST,
> @@ -68,6 +82,7 @@ struct snd_soc_dai_link skl_hda_be_dai_links[HDA_DSP_MAX_BE_DAI_LINKS] = {
>  		.cpu_dai_name = "iDisp3 Pin",
>  		.codec_name = "ehdaudio0D2",
>  		.codec_dai_name = "intel-hdmi-hifi3",
> +		.init = skl_hdmi_init,
>  		.dpcm_playback = 1,
>  		.no_pcm = 1,
>  		.trigger[0] = SND_SOC_DPCM_TRIGGER_POST,
> diff --git a/sound/soc/intel/boards/skl_hda_dsp_common.h b/sound/soc/intel/boards/skl_hda_dsp_common.h
> index 87c50af..df5cc6b 100644
> --- a/sound/soc/intel/boards/skl_hda_dsp_common.h
> +++ b/sound/soc/intel/boards/skl_hda_dsp_common.h
> @@ -29,6 +29,7 @@ struct skl_hda_private {
>  	int pcm_count;
>  	int dai_index;
>  	const char *platform_name;
> +	struct device_link *link;
>  };
>  
>  extern struct snd_soc_dai_link skl_hda_be_dai_links[HDA_DSP_MAX_BE_DAI_LINKS];
> diff --git a/sound/soc/intel/boards/skl_hda_dsp_generic.c b/sound/soc/intel/boards/skl_hda_dsp_generic.c
> index b9a21e6..ceca11e 100644
> --- a/sound/soc/intel/boards/skl_hda_dsp_generic.c
> +++ b/sound/soc/intel/boards/skl_hda_dsp_generic.c
> @@ -166,8 +166,20 @@ static int skl_hda_audio_probe(struct platform_device *pdev)
>  	return devm_snd_soc_register_card(&pdev->dev, &hda_soc_card);
>  }
>  
> +static int skl_hda_audio_remove(struct platform_device *pdev)
> +{
> +	struct snd_soc_card *card = platform_get_drvdata(pdev);
> +	struct skl_hda_private *ctx = snd_soc_card_get_drvdata(card);
> +
> +	if (ctx->link)
> +		device_link_del(ctx->link);
> +
> +	return 0;
> +}
> +
>  static struct platform_driver skl_hda_audio = {
>  	.probe = skl_hda_audio_probe,
> +	.remove = skl_hda_audio_remove,
>  	.driver = {
>  		.name = "skl_hda_dsp_generic",
>  		.pm = &snd_soc_pm_ops,
> -- 
> 2.7.4
> 
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> https://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> 


More information about the Alsa-devel mailing list