[Intel-gfx] [PATCH] drm/i915/dp: DP audio API changes for MST

Ville Syrjälä ville.syrjala at linux.intel.com
Thu Aug 4 20:48:28 UTC 2016


On Thu, Aug 04, 2016 at 07:55:09PM +0200, Takashi Iwai wrote:
> On Thu, 04 Aug 2016 19:35:16 +0200,
> Ville Syrjälä wrote:
> > 
> > On Thu, Aug 04, 2016 at 10:18:52AM -0700, Jim Bride wrote:
> > > On Wed, Aug 03, 2016 at 10:08:12PM +0300, Ville Syrjälä wrote:
> > > > On Tue, Aug 02, 2016 at 07:14:30PM -0700, Dhinakaran Pandiyan wrote:
> > > > > DP MST provides the capability to send multiple video and audio streams via
> > > > > one single port. This requires the API's between i915 and audio drivers to
> > > > > distinguish between audio capable displays connected to a port. This patch
> > > > > adds this support via an additional parameter 'int dev_id'. The existing
> > > > > parameter 'port' does not change it's meaning.
> > > > > 
> > > > > dev_id =
> > > > > 	MST	: pipe that the stream originates from
> > > > > 	Non-MST	: -1
> > > > > 
> > > > > Affected APIs:
> > > > > struct i915_audio_component_ops
> > > > > -       int (*sync_audio_rate)(struct device *, int port, int rate);
> > > > > +	int (*sync_audio_rate)(struct device *, int port, int dev_id,
> > > > 
> > > > Does the term 'dev_id' have some special meaning on the audio side? On
> > > > the i915 side things would be less confusing if we just called it
> > > > 'pipe'.
> > > 
> > > Yeah, it does.  All of the documentation on the audio side is written
> > > in terms of device ID, so they asked for that nomenclature.
> > 
> > And is the device ID always the same as the pipe? Until now we've made
> > due with passing the port instead of the pipe, so either the audio side
> > didn't use the device ID, or its meaning changes based on how we drive
> > things, or they dug it out from somewhere else based on the port?
> 
> This is my concern, too.  Currently we have a very wild assumption
> even for the port mapping.  In the audio side, there is neither port
> nor pipe.  There are only the widget node id and the device id.  The
> former is supposedly corresponding to the port, and the latter to the
> pipe.  But the audio side has absolutely no clue about how these are
> connected.

So I tried to study this a bit, and MST and device<n> are mentioned a few
times in the description of some audio registers in the GPU docs. Looks
like a bunch of bits overlap somehow with pin vs. device usage. I don't
understand how that's supposed to work. Eg:
 AUD_PWRSTAUD_PWRST
 1:0 	 PinB Widget PwrSt Set
 PinB Widget power state that was setFor DP MST this represents Device1
 power state

It's anyone's guees what those bits are suppoosed to reflect when you're
doing MST with device1/pipe A, and at the same time you're driving
port B in HDMI/SST mode.

Anyways, it doesn't help that this whole device widget aspect of hda
seems to be undocumented. No spec I've found seems to know anything
about any device widgets, and yet those are how MST rolls apparently.

In conclusion, I'd say that consistency's sake we should use either
dev+pin or pipe+port in the interface, not mix both. In case of
dev+pin I don't think we should use the NID (I'm assuming device
widgets have one too), but rather the index. i915 could then do
the mapping somethign like dev=pipe and pin=port-1, and then
snd-hda can do the idx<->nid conversion however it sees fit
(just use base_nid, or walk some per-type widget lists, or whatever).

That's assuming the widgets really are somehow ordered consistently so
we can index them like that. I also might have understtod everyhing I
read abou hda.

-- 
Ville Syrjälä
Intel OTC


More information about the Intel-gfx mailing list