* 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;
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
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;
.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;
}
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;
}
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;
}
* 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