• Lyude Paul's avatar
    drm/i915/dp: Enable Intel's HDR backlight interface (only SDR for now) · 4a8d7990
    Lyude Paul authored
    So-recently a bunch of laptops on the market have started using DPCD
    backlight controls instead of the traditional DDI backlight controls.
    Originally we thought we had this handled by adding VESA backlight
    control support to i915, but the story ended up being a lot more
    complicated then that.
    
    Simply put-there's two main backlight interfaces Intel can see in the
    wild. Intel's proprietary HDR backlight interface, and the standard VESA
    backlight interface. Note that many panels have been observed to report
    support for both backlight interfaces, but testing has shown far more
    panels work with the Intel HDR backlight interface at the moment.
    Additionally, the VBT appears to be capable of reporting support for the
    VESA backlight interface but not the Intel HDR interface which needs to
    be probed by setting the right magic OUI.
    
    On top of that however, there's also actually two different variants of
    the Intel HDR backlight interface. The first uses the AUX channel for
    controlling the brightness of the screen in both SDR and HDR mode, and
    the second only uses the AUX channel for setting the brightness level in
    HDR mode - relying on PWM for setting the brightness level in SDR mode.
    
    For the time being we've been using EDIDs to maintain a list of quirks
    for panels that safely do support the VESA backlight interface. Adding
    support for Intel's HDR backlight interface in addition however, should
    finally allow us to auto-detect eDP backlight controls properly so long
    as we probe like so:
    
    * If the panel's VBT reports VESA backlight support, assume it really
      does support it
    * If the panel's VBT reports DDI backlight controls:
      * First probe for Intel's HDR backlight interface
      * If that fails, probe for VESA's backlight interface
      * If that fails, assume no DPCD backlight control
    * If the panel's VBT reports any other backlight type: just assume it
      doesn't have DPCD backlight controls
    
    Changes since v4:
    * Fix checkpatch issues
    Changes since v3:
    * Stop using drm_device and use drm_i915_private instead
    * Don't forget to return from intel_dp_aux_hdr_get_backlight() if we fail
      to read the current backlight mode from the DPCD
    * s/uint8_t/u8/
    * Remove unneeded parenthesis in intel_dp_aux_hdr_enable_backlight()
    * Use drm_dbg_kms() in intel_dp_aux_init_backlight_funcs()
    Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
    Reviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
    Cc: thaytan@noraisin.net
    Cc: Vasily Khoruzhick <anarsoul@gmail.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210114221709.2261452-4-lyude@redhat.com
    4a8d7990
intel_panel.c 68.9 KB