On Thu, 26 Apr 2012 15:21:14 -0300 Eugeni Dodonov <eugeni.dodonov at intel.com> wrote: > Digital port detection on Haswell is indicated by the presence of a bit in > DDI_BUF_CTL for port A, and by a different register for ports B, C and D. > So we check for those bits during the initialization time and let the hdmi > function know about those. > > Note that this bit does not indicates whether the output is DP or HDMI. > However, the DDI buffers can be programmed in a way that is shared between > DP/HDMI and FDI/HDMI except for PORT E. > > So for now, we detect those digital outputs as being HDMI, but proper DP > support is still pending. > > Note that DDI A can only drive eDP, so we do not handle it here for hdmi > initialization. > > v2: simplify Haswell handling logic > > v3: use generic function for handling digital outputs. > > Signed-off-by: Eugeni Dodonov <eugeni.dodonov at intel.com> > --- > drivers/gpu/drm/i915/intel_ddi.c | 29 +++++++++++++++++++++++++++++ > drivers/gpu/drm/i915/intel_display.c | 21 ++++++++++++++++++++- > drivers/gpu/drm/i915/intel_drv.h | 1 + > 3 files changed, 50 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c > index 93436caa..cd6fbaa 100644 > --- a/drivers/gpu/drm/i915/intel_ddi.c > +++ b/drivers/gpu/drm/i915/intel_ddi.c > @@ -230,3 +230,32 @@ void ddi_fdi_link_train(struct drm_crtc *crtc) > if (IS_HASWELL(dev)) > hsw_fdi_link_train(crtc); > } > + > +/* For DDI connections, it is possible to support different outputs over the > + * same DDI port, such as HDMI or DP or even VGA via FDI. So we don't know by > + * the time the output is detected what exactly is on the other end of it. This > + * function aims at providing support for this detection and proper output > + * configuration. > + */ > +void intel_ddi_init(struct drm_device *dev, enum port port) > +{ > + /* For now, we don't do any proper output detection and assume that we > + * handle HDMI only */ > + > + switch(port){ > + case PORT_A: > + /* We don't handle eDP and DP yet */ > + DRM_DEBUG_DRIVER("Found digital output on DDI port A\n"); > + break; > + /* Assume that the ports B, C and D are working in HDMI mode for now */ > + case PORT_B: > + case PORT_C: > + case PORT_D: > + intel_hdmi_init(dev, DDI_BUF_CTL(port)); > + break; > + default: > + DRM_DEBUG_DRIVER("No handlers defined for port %d, skipping DDI initialization\n", > + port); > + break; > + } > +} We really really need to get the port detection working on HSW using the VBT. -- Jesse Barnes, Intel Open Source Technology Center