drm/i915/lvds: Use the GMBUS pin if specified in VBT

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
index 1317731..95e035a 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -771,7 +771,8 @@
  * If it is not present, return false.
  * If no child dev is parsed from VBT, it assumes that the LVDS is present.
  */
-static bool lvds_is_present_in_vbt(struct drm_device *dev)
+static bool lvds_is_present_in_vbt(struct drm_device *dev,
+				   u8 *i2c_pin)
 {
 	struct drm_i915_private *dev_priv = dev->dev_private;
 	int i;
@@ -790,6 +791,9 @@
 		    child->device_type != DEVICE_TYPE_LFP)
 			continue;
 
+		if (child->i2c_pin)
+		    *i2c_pin = child->i2c_pin;
+
 		/* However, we cannot trust the BIOS writers to populate
 		 * the VBT correctly.  Since LVDS requires additional
 		 * information from AIM blocks, a non-zero addin offset is
@@ -810,7 +814,7 @@
 	return false;
 }
 
-static bool intel_lvds_ddc_probe(struct drm_device *dev)
+static bool intel_lvds_ddc_probe(struct drm_device *dev, u8 pin)
 {
 	struct drm_i915_private *dev_priv = dev->dev_private;
 	u8 buf = 0;
@@ -822,7 +826,7 @@
 			.buf = &buf,
 		},
 	};
-	struct i2c_adapter *i2c = &dev_priv->gmbus[GMBUS_PORT_PANEL].adapter;
+	struct i2c_adapter *i2c = &dev_priv->gmbus[pin].adapter;
 	return i2c_transfer(i2c, msgs, 1) == 1;
 }
 
@@ -844,13 +848,15 @@
 	struct drm_display_mode *scan; /* *modes, *bios_mode; */
 	struct drm_crtc *crtc;
 	u32 lvds;
-	int pipe, gpio = GPIOC;
+	int pipe;
+	u8 pin;
 
 	/* Skip init on machines we know falsely report LVDS */
 	if (dmi_check_system(intel_no_lvds))
 		return;
 
-	if (!lvds_is_present_in_vbt(dev)) {
+	pin = GMBUS_PORT_PANEL;
+	if (!lvds_is_present_in_vbt(dev, &pin)) {
 		DRM_DEBUG_KMS("LVDS is not present in VBT\n");
 		return;
 	}
@@ -862,10 +868,9 @@
 			DRM_DEBUG_KMS("disable LVDS for eDP support\n");
 			return;
 		}
-		gpio = PCH_GPIOC;
 	}
 
-	if (!intel_lvds_ddc_probe(dev)) {
+	if (!intel_lvds_ddc_probe(dev, pin)) {
 		DRM_DEBUG_KMS("LVDS did not respond to DDC probe\n");
 		return;
 	}
@@ -930,7 +935,7 @@
 	 * preferred mode is the right one.
 	 */
 	intel_lvds->edid = drm_get_edid(connector,
-					&dev_priv->gmbus[GMBUS_PORT_PANEL].adapter);
+					&dev_priv->gmbus[pin].adapter);
 
 	if (!intel_lvds->edid) {
 		/* Didn't get an EDID, so