• Sonika Jindal's avatar
    drm/i915: Add hot_plug hook for hdmi encoder · 0b5e88dc
    Sonika Jindal authored
    This patch adds a separate probe function for HDMI
    EDID read over DDC channel. This function has been
    registered as a .hot_plug handler for HDMI encoder.
    
    The current implementation of hdmi_detect()
    function re-sets the cached HDMI edid (in connector->detect_edid) in
    every detect call.This function gets called many times, sometimes
    directly from userspace probes, forcing drivers to read EDID every
    detect function call.This causes several problems like:
    
    1. Race conditions in multiple hot_plug / unplug cases, between
       interrupts bottom halves and userspace detections.
    2. Many Un-necessary EDID reads for single hotplug/unplug
    3. HDMI complaince failures which expects only one EDID read per hotplug
    
    This function will be serving the purpose of really reading the EDID
    by really probing the DDC channel, and updating the cached EDID.
    
    The plan is to:
    1. i915 IRQ handler bottom half function already calls
       intel_encoder->hotplug() function. Adding This probe function which
       will read the EDID only in case of a hotplug / unplug.
    2. During init_connector this probe will be called to read the edid
    3. Reuse the cached EDID in hdmi_detect() function.
    
    The "< gen7" check is there because this was tested only for >=gen7
    platforms. For older platforms the hotplug/reading edid path remains same.
    
    v2: Calling set_edid instead of hdmi_probe during init.
    Also, for platforms having DDI, intel_encoder for DP and HDMI is same
    (taken from intel_dig_port), so for DP also, hot_plug function gets called
    which is not intended here. So, check for HDMI in intel_hdmi_probe
    Rely on HPD for updating edid only for platforms gen > 8 and also for VLV.
    
    v3: Dropping the gen < 8 || !VLV  check. Now all platforms should rely on
    hotplug or init for updating the edid.(Daniel)
    Also, calling hdmi_probe in init instead of set_edid
    
    v4: Renaming intel_hdmi_probe to intel_hdmi_hot_plug.
    Also calling this hotplug handler from intel_hpd_init to take care of init
    resume scenarios.
    
    v5: Moved the call to encoder hotplug during init to separate patch(Daniel)
    Signed-off-by: default avatarShashank Sharma <shashank.sharma@intel.com>
    Signed-off-by: default avatarSonika Jindal <sonika.jindal@intel.com>
    [danvet: Mark intel_hdmi_hot_plug as static.]
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    0b5e88dc
intel_hdmi.c 66.2 KB