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@xxxxxxxxxxxxxxx> Looks good to me. Reviewed-by: Takashi Iwai <tiwai@xxxxxxx> 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@xxxxxxxxxxxxxxxx > https://mailman.alsa-project.org/mailman/listinfo/alsa-devel > _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx https://mailman.alsa-project.org/mailman/listinfo/alsa-devel