Merge remote-tracking branch 'spi/fix/grant' into spi-linus
[cascardo/linux.git] / drivers / gpu / drm / i915 / intel_dvo.c
index 00e70db..cc70b16 100644 (file)
@@ -448,6 +448,7 @@ void intel_dvo_init(struct drm_device *dev)
                const struct intel_dvo_device *dvo = &intel_dvo_devices[i];
                struct i2c_adapter *i2c;
                int gpio;
+               bool dvoinit;
 
                /* Allow the I2C driver info to specify the GPIO to be used in
                 * special cases, but otherwise default to what's defined
@@ -467,7 +468,17 @@ void intel_dvo_init(struct drm_device *dev)
                i2c = intel_gmbus_get_adapter(dev_priv, gpio);
 
                intel_dvo->dev = *dvo;
-               if (!dvo->dev_ops->init(&intel_dvo->dev, i2c))
+
+               /* GMBUS NAK handling seems to be unstable, hence let the
+                * transmitter detection run in bit banging mode for now.
+                */
+               intel_gmbus_force_bit(i2c, true);
+
+               dvoinit = dvo->dev_ops->init(&intel_dvo->dev, i2c);
+
+               intel_gmbus_force_bit(i2c, false);
+
+               if (!dvoinit)
                        continue;
 
                intel_encoder->type = INTEL_OUTPUT_DVO;