[Intel-gfx] [PATCH 2/2] drm/i915/audio: Extend audio sync rate support for DP MST

Yang, Libin libin.yang at intel.com
Wed Nov 30 08:18:59 UTC 2016


>-----Original Message-----
>From: Ville Syrjälä [mailto:ville.syrjala at linux.intel.com]
>Sent: Wednesday, November 30, 2016 12:50 AM
>To: Jani Nikula <jani.nikula at linux.intel.com>
>Cc: Yang, Libin <libin.yang at intel.com>; intel-gfx at lists.freedesktop.org; Vetter,
>Daniel <daniel.vetter at intel.com>; Pandiyan, Dhinakaran
><dhinakaran.pandiyan at intel.com>; Kp, Jeeja <jeeja.kp at intel.com>;
>tiwai at suse.de
>Subject: Re: [PATCH 2/2] drm/i915/audio: Extend audio sync rate support for
>DP MST
>
>On Tue, Nov 29, 2016 at 06:33:50PM +0200, Jani Nikula wrote:
>> On Tue, 15 Nov 2016, libin.yang at intel.com wrote:
>> > From: Libin Yang <libin.yang at intel.com>
>> >
>> > This patch extends the support of audio sample rate sync up to DP
>> > MST.
>> >
>> > Signed-off-by: Libin Yang <libin.yang at intel.com>
>> > ---
>> >  drivers/gpu/drm/i915/intel_audio.c | 3 ++-
>> >  1 file changed, 2 insertions(+), 1 deletion(-)
>> >
>> > diff --git a/drivers/gpu/drm/i915/intel_audio.c
>> > b/drivers/gpu/drm/i915/intel_audio.c
>> > index c8a1345..88ed869 100644
>> > --- a/drivers/gpu/drm/i915/intel_audio.c
>> > +++ b/drivers/gpu/drm/i915/intel_audio.c
>> > @@ -807,7 +807,8 @@ static int
>i915_audio_component_sync_audio_rate(struct device *kdev, int port,
>> >  	intel_encoder = get_saved_enc(dev_priv, port, pipe);
>> >  	if (!intel_encoder || !intel_encoder->base.crtc ||
>> >  	    (intel_encoder->type != INTEL_OUTPUT_HDMI &&
>> > -	     intel_encoder->type != INTEL_OUTPUT_DP)) {
>> > +	     intel_encoder->type != INTEL_OUTPUT_DP &&
>> > +		 intel_encoder->type != INTEL_OUTPUT_DP_MST)) {
>>
>> I think the better option is to make absolutely sure we never store
>> other kinds of encoders in dev_priv->av_enc_map[pipe] to begin with. I
>> think that's true already, but please add
>>
>> 	if (WARN_ON(intel_encoder->type != INTEL_OUTPUT_HDMI &&
>> 		    intel_encoder->type != INTEL_OUTPUT_DP &&
>> 		    intel_encoder->type != INTEL_OUTPUT_DP_MST))
>>         	return;
>>
>> near the beginning of intel_audio_codec_enable(), and remove the type
>> checks here. This reduces the confusion about different kinds of
>> checks after calling get_saved_enc().
>
>This while encoder->type thing is pretty broken actually. Currently we're semi-
>randomly flipping DDI encoders between UNKNOWN,HDMI and DP.
>I want to eliminate that so that their type will always be just "DDI".
>For iguring out what kind of signal we are driving out you should be looking at
>crtc_state->output_types.

Do you mean the code should be like:
@@ -807,10 +807,7 @@ static int i915_audio_component_sync_audio_rate(struct device *kdev, int port,
 
 	/* 1. get the pipe */
 	intel_encoder = get_saved_enc(dev_priv, port, pipe);
-	if (!intel_encoder || !intel_encoder->base.crtc ||
-	    (intel_encoder->type != INTEL_OUTPUT_HDMI &&
-	     intel_encoder->type != INTEL_OUTPUT_DP &&
-		 intel_encoder->type != INTEL_OUTPUT_DP_MST)) {
+	if (!intel_encoder || !intel_encoder->base.crtc) {
 		DRM_DEBUG_KMS("Not valid for port %c\n", port_name(port));
 		err = -ENODEV;
 		goto unlock;
@@ -819,7 +816,12 @@ static int i915_audio_component_sync_audio_rate(struct device *kdev, int port,
 	/* pipe passed from the audio driver will be -1 for Non-MST case */
 	crtc = to_intel_crtc(intel_encoder->base.crtc);
 	crtc_state = crtc->config;
+	if (WARN_ON((crtc_state->output_types &
+		((1 << INTEL_OUTPUT_HDMI) |
+		 (1 << INTEL_OUTPUT_DP) |
+		 (1 << INTEL_OUTPUT_DP_MST))) == 0))
+		return 0;
+
 	pipe = crtc->pipe;

I did the test, and it seems intel_encoder->type can show the correct type 
on my platform. It is similar with crtc_state->output_types.

Regards,
Libin

>
>--
>Ville Syrjälä
>Intel OTC


More information about the Intel-gfx mailing list