i915, HDMI/DP audio with multiple monitors

Yang, Libin libin.yang at intel.com
Thu Sep 13 01:48:07 UTC 2018


>-----Original Message-----
>From: Ville Syrjälä [mailto:ville.syrjala at linux.intel.com]
>Sent: Thursday, September 13, 2018 1:47 AM
>To: Bruno Prémont <bonbons at sysophe.eu>
>Cc: intel-gfx at lists.freedesktop.org; dri-devel at lists.freedesktop.org; Takashi
>Iwai <tiwai at suse.de>; alsa-devel at alsa-project.org; Yang, Libin
><libin.yang at intel.com>
>Subject: Re: i915, HDMI/DP audio with multiple monitors
>
>On Tue, Sep 11, 2018 at 03:50:13PM +0200, Bruno Prémont wrote:
>> Hi,
>>
>> I have a system with multiple monitors and would like to send
>> notification sounds to the monitor on which corresponding window is
>> visible.

This requirement is reasonable :)

>>
>> For a workstation and a tiny computer things look different:
>> - workstation (Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz):
>>  00:02.0 VGA compatible controller [0300]: Intel Corporation Xeon
>> E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller
>> [8086:0412] (rev 06)
>>  00:03.0 Audio device [0403]: Intel Corporation Xeon E3-1200 v3/4th
>> Gen Core Processor HD Audio Controller [8086:0c0c] (rev 06)
>>  00:1b.0 Audio device [0403]: Intel Corporation 8 Series/C220 Series
>> Chipset High Definition Audio Controller [8086:8c20] (rev 04)
>>
>>  Here alsa show me two cards:
>>  - HDA Intel PCH (Realtek ALC671)
>>  - HDA Intel HDMI (Intel Generic)
>>
>>  **** List of PLAYBACK Hardware Devices ****  card 0: HDMI [HDA Intel
>> HDMI], device 3: Generic Digital [Generic Digital]
>>    Subdevices: 1/1
>>    Subdevice #0: subdevice #0
>
>There should normally be multiple HDMI devices (one for each HDMI/DP
>connector more or less). Eg. my hsw shows:
>
>card 0: HDMI [HDA Intel HDMI], device 3: HDMI 0 [HDMI 0]
>  Subdevices: 1/1
>  Subdevice #0: subdevice #0
>card 0: HDMI [HDA Intel HDMI], device 7: HDMI 1 [HDMI 1]
>  Subdevices: 1/1
>  Subdevice #0: subdevice #0
>
>Looking at the hda_codec.c we see:
> static int audio_idx[HDA_PCM_NTYPES][5] = { ...
>        [HDA_PCM_TYPE_HDMI]  = { 3, 7, 8, 9, -1 },
>
>So you always get those device numbers, but I don't see an immediate
>relationship between those and the pin numbers (which do have some kind of
>relationship with the HDMI/DP port). I guess if they always get registered in
>order of the pin numbers then those would translate to 3 == port B, 7 == port
>C, etc. And after that the problem is figuring out which port is related to which
>connector, for which we have nothing at the moment.
>
>I suppose the ideal solution might be to have a sysfs symlink (or
>something) to connect the two together.
>
>But then there's MST where I think the pcm device correlates with the crtc
>rather than the connector. Maybe. I can't remember anymore, and I'm not
>sure it even works (I've recently heard people saying it doesn't).

Ville is right. For NON-MST (PCM static assignment), the PCM & PORT 
mapping is simple and static.

For DP-MST (PCM dynamic assignment), it is a little complicated. In HDMI
audio driver, the per_pin saves all the information. 
1. PORT info: per_pin->pin_nid is related to the PORT information. 
The mapping information is showed in hdmi audio driver function 
intel_pin_eld_notify(). 
2. PCM info: we can get the PCM with per_pin->pcm_idx.

With these information, we can tell which PCM is mapped to which PORT.

The audio driver can export such information to user space (No sure 
if such information is already exported.). And user space, such as 
pulseaudio and so on, can use such information automatically choose 
which PCM to playback corresponding to the monitor 
which active window is in. 

Regards,
Libin

>
>>  card 1: PCH [HDA Intel PCH], device 0: ALC671 Analog [ALC671 Analog]
>>    Subdevices: 1/1
>>    Subdevice #0: subdevice #0
>>
>>
>> - tiny computer (Intel(R) Core(TM) i5-6500T CPU @ 2.50GHz):
>>  00:02.0 VGA compatible controller [0300]: Intel Corporation HD
>> Graphics 530 [8086:1912] (rev 06)
>>  00:1f.3 Audio device [0403]: Intel Corporation Sunrise Point-H HD
>> Audio [8086:a170] (rev 31)
>>
>>  Here alsa shows a single card:
>>  - HDA Intel PCH (Realtek ALC671)
>>
>>  **** List of PLAYBACK Hardware Devices ****  card 0: PCH [HDA Intel
>> PCH], device 0: ALC671 Analog [ALC671 Analog]
>>    Subdevices: 1/1
>>    Subdevice #0: subdevice #0
>>  card 0: PCH [HDA Intel PCH], device 3: Generic Digital [Generic Digital]
>>    Subdevices: 1/1
>>    Subdevice #0: subdevice #0
>>
>>
>> How can I determine/set to which monitor the sound should go, and
>> preferably send different sounds to both monitors at same time?
>>
>>
>> Cheers,
>> Bruno
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/dri-devel
>
>--
>Ville Syrjälä
>Intel


More information about the dri-devel mailing list