diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dvo.c')
-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 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; |