aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/i915/intel_dvo.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/intel_dvo.c b/drivers/gpu/drm/i915/intel_dvo.c
index 00e70dbe82da..cc70b16d5d42 100644
--- a/drivers/gpu/drm/i915/intel_dvo.c
+++ b/drivers/gpu/drm/i915/intel_dvo.c
@@ -448,6 +448,7 @@ void intel_dvo_init(struct drm_device *dev)
448 const struct intel_dvo_device *dvo = &intel_dvo_devices[i]; 448 const struct intel_dvo_device *dvo = &intel_dvo_devices[i];
449 struct i2c_adapter *i2c; 449 struct i2c_adapter *i2c;
450 int gpio; 450 int gpio;
451 bool dvoinit;
451 452
452 /* Allow the I2C driver info to specify the GPIO to be used in 453 /* Allow the I2C driver info to specify the GPIO to be used in
453 * special cases, but otherwise default to what's defined 454 * special cases, but otherwise default to what's defined
@@ -467,7 +468,17 @@ void intel_dvo_init(struct drm_device *dev)
467 i2c = intel_gmbus_get_adapter(dev_priv, gpio); 468 i2c = intel_gmbus_get_adapter(dev_priv, gpio);
468 469
469 intel_dvo->dev = *dvo; 470 intel_dvo->dev = *dvo;
470 if (!dvo->dev_ops->init(&intel_dvo->dev, i2c)) 471
472 /* GMBUS NAK handling seems to be unstable, hence let the
473 * transmitter detection run in bit banging mode for now.
474 */
475 intel_gmbus_force_bit(i2c, true);
476
477 dvoinit = dvo->dev_ops->init(&intel_dvo->dev, i2c);
478
479 intel_gmbus_force_bit(i2c, false);
480
481 if (!dvoinit)
471 continue; 482 continue;
472 483
473 intel_encoder->type = INTEL_OUTPUT_DVO; 484 intel_encoder->type = INTEL_OUTPUT_DVO;