diff options
-rw-r--r-- | drivers/gpu/drm/i915/intel_dvo.c | 13 |
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; |