[alsa-devel] [PATCH] ASoC: cAVS: add device_link to HDMI audio
Yang, Libin
libin.yang at intel.com
Mon Apr 8 15:18:04 CEST 2019
Hi Takashi,
>-----Original Message-----
>From: Takashi Iwai [mailto:tiwai at suse.de]
>Sent: Monday, April 8, 2019 8:35 PM
>To: Yang, Libin <libin.yang at intel.com>
>Cc: alsa-devel at alsa-project.org; broonie at kernel.org; pierre-
>louis.bossart at linux.intel.com
>Subject: Re: [alsa-devel] [PATCH] ASoC: cAVS: add device_link to HDMI audio
>
>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.
I will do it. Thanks for the review and the advice.
Regards,
Libin
>
>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