On Thu, 17 Mar 2016, Shashank Sharma <shashank.sharma@xxxxxxxxx> wrote: > [ text/plain ] > This patch restricts usage of live status check for HDMI detection. > While testing certain (monitor + cable) combinations with various > intel platforms, it seems that live status register is not reliable > on some older devices. So limit the live_status check from VLV onwards. > > This fixes a regression introduced in: > commit: 237ed86 "drm/i915: Check live status" > Author: Sonika Jindal <sonika.jindal@xxxxxxxxx> > Date: Tue Sep 15 09:44:20 2015 +0530 > Fixes: 237ed86c693d ("drm/i915: Check live status before reading edid") Cc: stable@xxxxxxxxxxxxxxx # v4.4 Bugzilla: ? > Signed-off-by: Shashank Sharma <shashank.sharma@xxxxxxxxx> > --- > drivers/gpu/drm/i915/intel_hdmi.c | 22 ++++++++++++++-------- > 1 file changed, 14 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c > index e2dab48..d24d18a 100644 > --- a/drivers/gpu/drm/i915/intel_hdmi.c > +++ b/drivers/gpu/drm/i915/intel_hdmi.c > @@ -1397,7 +1397,8 @@ intel_hdmi_detect(struct drm_connector *connector, bool force) > enum drm_connector_status status; > struct intel_hdmi *intel_hdmi = intel_attached_hdmi(connector); > struct drm_i915_private *dev_priv = to_i915(connector->dev); > - bool live_status = false; > + struct drm_device *dev = connector->dev; This is unnecessary. > + bool live_status = true; > unsigned int try; > > DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", > @@ -1405,16 +1406,21 @@ intel_hdmi_detect(struct drm_connector *connector, bool force) > > intel_display_power_get(dev_priv, POWER_DOMAIN_GMBUS); > > - for (try = 0; !live_status && try < 9; try++) { > - if (try) > - msleep(10); > - live_status = intel_digital_port_connected(dev_priv, > + /* > + * Live status check for HDMI detection is not very > + * reliable on older platforms. So insist the live > + * status check for EDID read from VLV onwards. > + */ > + if (INTEL_INFO(dev)->gen >= 7 && !IS_IVYBRIDGE(dev)) { Replace dev with dev_priv. Both work, it's magic, but we prefer using dev_priv where possible. Move try variable declaration here. > + for (try = 0; !live_status && try < 9; try++) { You'll now ignore live_status on all platforms. (But please do not turn this into a do-while, keep it as a for loop.) > + if (try) > + msleep(10); > + live_status = intel_digital_port_connected(dev_priv, > hdmi_to_dig_port(intel_hdmi)); > + } > + DRM_DEBUG_KMS("Live status %s\n", live_status ? "up" : "down"); Consider using onoff(live_status) instead of live_status ? "up" : "down". > } > > - if (!live_status) > - DRM_DEBUG_KMS("Live status not up!"); > - > intel_hdmi_unset_edid(connector); > > if (intel_hdmi_set_edid(connector, live_status)) { -- Jani Nikula, Intel Open Source Technology Center _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx