aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Müller2013-04-19 03:41:50 -0500
committerGreg Kroah-Hartman2013-05-11 15:54:03 -0500
commit93ebd54611790f79e85bb9d75a131e3f5733d20f (patch)
tree05346f1e15cec2a97900305b49ce9d2da59012ca
parent9f75bb3137659e678ccdfe353f73adb0d7f6cb68 (diff)
downloadkernel-omap-93ebd54611790f79e85bb9d75a131e3f5733d20f.tar.gz
kernel-omap-93ebd54611790f79e85bb9d75a131e3f5733d20f.tar.xz
kernel-omap-93ebd54611790f79e85bb9d75a131e3f5733d20f.zip
drm/i915: Fall back to bit banging mode for DVO transmitter detection
commit e4bfff54ed3f5de88f5358504c78c2cb037813aa upstream. As discussed in this thread http://lists.freedesktop.org/archives/dri-devel/2013-April/037411.html GMBUS based DVO transmitter detection seems to be unreliable which could result in an unusable DVO port. The attached patch fixes this by falling back to bit banging mode for the time DVO transmitter detection is in progress. Signed-off-by: David Müller <d.mueller@elsoft.ch> Tested-by: David Müller <d.mueller@elsoft.ch> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-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 15da99533e5b..ba96e0406cce 100644
--- a/drivers/gpu/drm/i915/intel_dvo.c
+++ b/drivers/gpu/drm/i915/intel_dvo.c
@@ -449,6 +449,7 @@ void intel_dvo_init(struct drm_device *dev)
449 const struct intel_dvo_device *dvo = &intel_dvo_devices[i]; 449 const struct intel_dvo_device *dvo = &intel_dvo_devices[i];
450 struct i2c_adapter *i2c; 450 struct i2c_adapter *i2c;
451 int gpio; 451 int gpio;
452 bool dvoinit;
452 453
453 /* Allow the I2C driver info to specify the GPIO to be used in 454 /* Allow the I2C driver info to specify the GPIO to be used in
454 * special cases, but otherwise default to what's defined 455 * special cases, but otherwise default to what's defined
@@ -468,7 +469,17 @@ void intel_dvo_init(struct drm_device *dev)
468 i2c = intel_gmbus_get_adapter(dev_priv, gpio); 469 i2c = intel_gmbus_get_adapter(dev_priv, gpio);
469 470
470 intel_dvo->dev = *dvo; 471 intel_dvo->dev = *dvo;
471 if (!dvo->dev_ops->init(&intel_dvo->dev, i2c)) 472
473 /* GMBUS NAK handling seems to be unstable, hence let the
474 * transmitter detection run in bit banging mode for now.
475 */
476 intel_gmbus_force_bit(i2c, true);
477
478 dvoinit = dvo->dev_ops->init(&intel_dvo->dev, i2c);
479
480 intel_gmbus_force_bit(i2c, false);
481
482 if (!dvoinit)
472 continue; 483 continue;
473 484
474 intel_encoder->type = INTEL_OUTPUT_DVO; 485 intel_encoder->type = INTEL_OUTPUT_DVO;