On Mon, Feb 10, 2014 at 01:06:43PM +0100, Norman Golisz wrote: > I just upgraded to the latest snapshot from Feb, 7. and I'm experiencing > a regression, where X11 doesn't detect the HDMI output when available. > > I've a dual-head configuration, where one VGA and one DVI monitor is > connected to a docking station of my Thinkpad T400. The VGA works, but > HDMI stays dark. > > Just before I upgraded from a snapshot from Feb, 2. to this snapshot, > everything worked fine. > > Below you'll find the output of xrandr, /var/log/Xorg.0.log, pcidump, dmesg. > > Please let me know if I can provide more information or test patches, > etc.!
Which thinkpad dock is this? I suspect it may be using an SDVO output in which case the following diff that combines some fixes we don't yet have from linux 3.8.13.17 might be interesting to try: aee389b0e2e0d99c1ac779804fc46c2921b405d6 drm/i915/sdvo: Use &intel_sdvo->ddc instead of intel_sdvo->i2c for DDC. and 795de6db7c0397315b083c6dbf57cecd2c6ad098 drm/i915: prefer VBT modes for SVDO-LVDS over EDID The change that introduced the problem for you is almost certaintly the update to xf86-video-intel 2.99.909. https://bugs.freedesktop.org/show_bug.cgi?id=66494 discusses a similiar problem involving a T400 and mentions trying a xorg.conf with: Section "Device" Option "ReprobeOutputs" "true" EndSection diff --git sys/dev/pci/drm/i915/intel_sdvo.c sys/dev/pci/drm/i915/intel_sdvo.c index d92daa8..18a75cb 100644 --- sys/dev/pci/drm/i915/intel_sdvo.c +++ sys/dev/pci/drm/i915/intel_sdvo.c @@ -1771,11 +1771,14 @@ static void intel_sdvo_get_lvds_modes(struct drm_connector *connector) * Assume that the preferred modes are * arranged in priority order. */ - intel_ddc_get_modes(connector, intel_sdvo->i2c); - if (list_empty(&connector->probed_modes) == false) - goto end; + intel_ddc_get_modes(connector, &intel_sdvo->ddc); - /* Fetch modes from VBT */ + /* + * Fetch modes from VBT. For SDVO prefer the VBT mode since some + * SDVO->LVDS transcoders can't cope with the EDID mode. Since + * drm_mode_probed_add adds the mode at the head of the list we add it + * last. + */ if (dev_priv->sdvo_lvds_vbt_mode != NULL) { newmode = drm_mode_duplicate(connector->dev, dev_priv->sdvo_lvds_vbt_mode); @@ -1787,7 +1790,6 @@ static void intel_sdvo_get_lvds_modes(struct drm_connector *connector) } } -end: list_for_each_entry(newmode, &connector->probed_modes, head) { if (newmode->type & DRM_MODE_TYPE_PREFERRED) { intel_sdvo->sdvo_lvds_fixed_mode =
