|
@@ -448,6 +448,7 @@ void intel_dvo_init(struct drm_device *dev)
|
|
|
const struct intel_dvo_device *dvo = &intel_dvo_devices[i];
|
|
|
struct i2c_adapter *i2c;
|
|
|
int gpio;
|
|
|
+ bool dvoinit;
|
|
|
|
|
|
/* Allow the I2C driver info to specify the GPIO to be used in
|
|
|
* special cases, but otherwise default to what's defined
|
|
@@ -467,7 +468,17 @@ void intel_dvo_init(struct drm_device *dev)
|
|
|
i2c = intel_gmbus_get_adapter(dev_priv, gpio);
|
|
|
|
|
|
intel_dvo->dev = *dvo;
|
|
|
- if (!dvo->dev_ops->init(&intel_dvo->dev, i2c))
|
|
|
+
|
|
|
+ /* GMBUS NAK handling seems to be unstable, hence let the
|
|
|
+ * transmitter detection run in bit banging mode for now.
|
|
|
+ */
|
|
|
+ intel_gmbus_force_bit(i2c, true);
|
|
|
+
|
|
|
+ dvoinit = dvo->dev_ops->init(&intel_dvo->dev, i2c);
|
|
|
+
|
|
|
+ intel_gmbus_force_bit(i2c, false);
|
|
|
+
|
|
|
+ if (!dvoinit)
|
|
|
continue;
|
|
|
|
|
|
intel_encoder->type = INTEL_OUTPUT_DVO;
|