[alsa-devel] [PATCH v4 1/9] ALSA: hda/hdmi - implement mst_no_extra_pcms flag
Takashi Iwai
tiwai at suse.de
Sun Sep 15 11:39:57 CEST 2019
On Thu, 12 Sep 2019 16:21:52 +0200,
Kai Vehmanen wrote:
>
> To support the DP-MST multiple streams via single connector feature,
> the HDMI driver was extended with the concept of backup PCMs. See
> commit 9152085defb6 ("ALSA: hda - add DP MST audio support").
>
> This implementation works fine with snd_hda_intel.c as PCM topology
> is fully managed within the single driver.
>
> When the HDA codec driver is used from ASoC components, the concept
> of backup PCMs no longer fits. For ASoC topologies, the physical
> HDMI converters are presented as backend DAIs and these should match
> with hardware capabilities. The ASoC topology may define arbitrary
> PCMs (i.e. frontend DAIs) and have processing elements before eventual
> routing to the HDMI BE DAIs. With backup PCMs, the link between
> FE and BE DAIs would become dynamic and change when monitors are
> (un)plugged. This would lead to modifying the topology every time
> hotplug events happen, which is not currently possible in ASoC and
> there does not seem to be any obvious benefits from this design.
>
> To overcome above problems and enable the HDMI driver to be used
> from ASoC, this patch adds a new mode (mst_no_extra_pcms flags) to
> patch_hdmi.c. In this mode, the codec driver does not assume
> the backup PCMs to be created.
>
> Signed-off-by: Kai Vehmanen <kai.vehmanen at linux.intel.com>
Looks good to me.
Reviewed-by: Takashi Iwai <tiwai at suse.de>
thanks,
Takashi
> ---
> include/sound/hda_codec.h | 1 +
> sound/pci/hda/patch_hdmi.c | 19 ++++++++++++++-----
> 2 files changed, 15 insertions(+), 5 deletions(-)
>
> diff --git a/include/sound/hda_codec.h b/include/sound/hda_codec.h
> index 9a0393cf024c..ac18f428eda6 100644
> --- a/include/sound/hda_codec.h
> +++ b/include/sound/hda_codec.h
> @@ -254,6 +254,7 @@ struct hda_codec {
> unsigned int force_pin_prefix:1; /* Add location prefix */
> unsigned int link_down_at_suspend:1; /* link down at runtime suspend */
> unsigned int relaxed_resume:1; /* don't resume forcibly for jack */
> + unsigned int mst_no_extra_pcms:1; /* no backup PCMs for DP-MST */
>
> #ifdef CONFIG_PM
> unsigned long power_on_acct;
> diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
> index bca5de78e9ad..59aaee4a40fd 100644
> --- a/sound/pci/hda/patch_hdmi.c
> +++ b/sound/pci/hda/patch_hdmi.c
> @@ -2072,15 +2072,24 @@ static bool is_hdmi_pcm_attached(struct hdac_device *hdac, int pcm_idx)
> static int generic_hdmi_build_pcms(struct hda_codec *codec)
> {
> struct hdmi_spec *spec = codec->spec;
> - int idx;
> + int idx, pcm_num;
>
> /*
> * for non-mst mode, pcm number is the same as before
> - * for DP MST mode, pcm number is (nid number + dev_num - 1)
> - * dev_num is the device entry number in a pin
> - *
> + * for DP MST mode without extra PCM, pcm number is same
> + * for DP MST mode with extra PCMs, pcm number is
> + * (nid number + dev_num - 1)
> + * dev_num is the device entry number in a pin
> */
> - for (idx = 0; idx < spec->num_nids + spec->dev_num - 1; idx++) {
> +
> + if (codec->mst_no_extra_pcms)
> + pcm_num = spec->num_nids;
> + else
> + pcm_num = spec->num_nids + spec->dev_num - 1;
> +
> + codec_dbg(codec, "hdmi: pcm_num set to %d\n", pcm_num);
> +
> + for (idx = 0; idx < pcm_num; idx++) {
> struct hda_pcm *info;
> struct hda_pcm_stream *pstr;
>
> --
> 2.17.1
>
> _______________________________________________
> 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