aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_dvo.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dvo.c')
-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 ee328ce8e9fe..2c0be924e9a9 100644
--- a/drivers/gpu/drm/i915/intel_dvo.c
+++ b/drivers/gpu/drm/i915/intel_dvo.c
@@ -455,6 +455,7 @@ void intel_dvo_init(struct drm_device *dev)
455 const struct intel_dvo_device *dvo = &intel_dvo_devices[i]; 455 const struct intel_dvo_device *dvo = &intel_dvo_devices[i];
456 struct i2c_adapter *i2c; 456 struct i2c_adapter *i2c;
457 int gpio; 457 int gpio;
458 bool dvoinit;
458 459
459 /* Allow the I2C driver info to specify the GPIO to be used in 460 /* Allow the I2C driver info to specify the GPIO to be used in
460 * special cases, but otherwise default to what's defined 461 * special cases, but otherwise default to what's defined
@@ -474,7 +475,17 @@ void intel_dvo_init(struct drm_device *dev)
474 i2c = intel_gmbus_get_adapter(dev_priv, gpio); 475 i2c = intel_gmbus_get_adapter(dev_priv, gpio);
475 476
476 intel_dvo->dev = *dvo; 477 intel_dvo->dev = *dvo;
477 if (!dvo->dev_ops->init(&intel_dvo->dev, i2c)) 478
479 /* GMBUS NAK handling seems to be unstable, hence let the
480 * transmitter detection run in bit banging mode for now.
481 */
482 intel_gmbus_force_bit(i2c, true);
483
484 dvoinit = dvo->dev_ops->init(&intel_dvo->dev, i2c);
485
486 intel_gmbus_force_bit(i2c, false);
487
488 if (!dvoinit)
478 continue; 489 continue;
479 490
480 intel_encoder->type = INTEL_OUTPUT_DVO; 491 intel_encoder->type = INTEL_OUTPUT_DVO;