drm/i915/sdvo: force GPIO bit-banging also on default pin
authorJani Nikula <jani.nikula@intel.com>
Mon, 22 Oct 2012 13:12:17 +0000 (16:12 +0300)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 26 Oct 2012 08:26:19 +0000 (10:26 +0200)
commit 63abf3edaf42d0b9f278df90fe41c7ed4796b6b1
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Wed Dec 8 16:48:21 2010 +0000

    drm/i915/sdvo: Only use the SDVO pin if it is in the valid range

added a default fallback if BIOS provides an invalid pin mapping, but
failed to force GPIO bit-banging on it. Finish the job, and also clean up
the function a bit. With bit-banging, setting the gmbus speed has no
effect, so drop it.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
[danvet: Extend comment about gmbus in the code a bit.]
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/intel_sdvo.c

index 0007a4d9bf6e5248effc509fd25f442b6d4e3164..9ea545e6f56966d768fadd374189477d3e66dfe4 100644 (file)
@@ -2042,17 +2042,17 @@ intel_sdvo_select_i2c_bus(struct drm_i915_private *dev_priv,
        else
                mapping = &dev_priv->sdvo_mappings[1];
 
-       pin = GMBUS_PORT_DPB;
-       if (mapping->initialized)
+       if (mapping->initialized && intel_gmbus_is_port_valid(mapping->i2c_pin))
                pin = mapping->i2c_pin;
+       else
+               pin = GMBUS_PORT_DPB;
 
-       if (intel_gmbus_is_port_valid(pin)) {
-               sdvo->i2c = intel_gmbus_get_adapter(dev_priv, pin);
-               intel_gmbus_set_speed(sdvo->i2c, GMBUS_RATE_1MHZ);
-               intel_gmbus_force_bit(sdvo->i2c, true);
-       } else {
-               sdvo->i2c = intel_gmbus_get_adapter(dev_priv, GMBUS_PORT_DPB);
-       }
+       sdvo->i2c = intel_gmbus_get_adapter(dev_priv, pin);
+
+       /* With gmbus we should be able to drive sdvo i2c at 2MHz, but somehow
+        * our code totally fails once we start using gmbus. Hence fall back to
+        * bit banging for now. */
+       intel_gmbus_force_bit(sdvo->i2c, true);
 }
 
 static bool