Add DK, Jim and Jeeja Regards, Libin > -----Original Message----- > From: libin.yang@xxxxxxxxxxxxxxx [mailto:libin.yang@xxxxxxxxxxxxxxx] > Sent: Monday, September 26, 2016 4:21 PM > To: intel-gfx@xxxxxxxxxxxxxxxxxxxxx; jani.nikula@xxxxxxxxxxxxxxx; > ville.syrjala@xxxxxxxxxxxxxxx; Vetter, Daniel <daniel.vetter@xxxxxxxxx>; > tiwai@xxxxxxx > Cc: Yang, Libin <libin.yang@xxxxxxxxx>; Libin Yang > <libin.yang@xxxxxxxxxxxxxxx> > Subject: [PATCH] drm/i915/audio: extend get_saved_enc() to support more > scenarios > > From: Libin Yang <libin.yang@xxxxxxxxxxxxxxx> > > When bootup, audio driver may not know it is MST or not. The audio driver > will poll all the port & pipe combinations in either MST or Non-MST mode. > get_saved_enc() should handle this situation. > > Signed-off-by: Libin Yang <libin.yang@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/intel_audio.c | 32 ++++++++++++++++++++++++++++-- > -- > 1 file changed, 28 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_audio.c > b/drivers/gpu/drm/i915/intel_audio.c > index 9583f43..a6af14f 100644 > --- a/drivers/gpu/drm/i915/intel_audio.c > +++ b/drivers/gpu/drm/i915/intel_audio.c > @@ -635,25 +635,49 @@ static int > i915_audio_component_get_cdclk_freq(struct device *kdev) > return dev_priv->cdclk_freq; > } > > +/* > + * get the intel_encoder according to the parameter port and pipe > + * intel_encoder is saved by the index of pipe > + * MST & (pipe >= 0): return the av_enc_map[pipe], > + * when port is matched > + * MST & (pipe < 0): this is invalid > + * Non-MST & (pipe >= 0): only pipe = 0 (the first device entry) > + * will get the right intel_encoder with port matched > + * Non-MST & (pipe < 0): get the right intel_encoder with port matched > +*/ > static struct intel_encoder *get_saved_enc(struct drm_i915_private > *dev_priv, > int port, int pipe) > { > + struct intel_encoder *encoder; > > if (WARN_ON(pipe >= I915_MAX_PIPES)) > return NULL; > > /* MST */ > - if (pipe >= 0) > - return dev_priv->av_enc_map[pipe]; > + if (pipe >= 0) { > + encoder = dev_priv->av_enc_map[pipe]; > + /* > + * when bootup, audio driver may not know it is > + * MST or not. So it will poll all the port & pipe > + * combinations > + */ > + if (encoder != NULL && encoder->port == port && > + encoder->type == INTEL_OUTPUT_DP_MST) > + return encoder; > + } > > /* Non-MST */ > - for_each_pipe(dev_priv, pipe) { > - struct intel_encoder *encoder; > + if (pipe > 0) > + return NULL; > > + for_each_pipe(dev_priv, pipe) { > encoder = dev_priv->av_enc_map[pipe]; > if (encoder == NULL) > continue; > > + if (encoder->type == INTEL_OUTPUT_DP_MST) > + continue; > + > if (port == encoder->port) > return encoder; > } > -- > 1.9.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx