• V
    drm/i915: Get panel_type from OpRegion panel details · a0562819
    Ville Syrjälä 提交于
    We've had problems on several occasions with using the panel type
    from the VBT block 40. Usually it seems to be 2, which often
    doesn't give us the correct timings for the panel. After some
    more digging I found a way to get a panel type via the OpRegion
    SWSCI GBDA "Get Panel Details" method. Let's try to use it.
    
    The spec has this to say about the output:
    "Bits [15:8] - Panel Type
     Bits contain the panel type user setting from CMOS
     00h = Not Valid, use default Panel Type & Timings from VBT
     01h - 0Fh = Panel Number"
    
    Another version of the spec lists the valid range as 1-16, which makes
    more sense since VBT supports 16 panels. Based on actual results
    from Rob's G45, 1-16 is what we need to accept.
    
    The other bits in the output don't look relevant for the problem at
    hand.
    
    The input is specified as:
    "Bits [31:4] - Reserved
     Reserved (must be zero)
     Bits [3:0] - Panel Number
     These bits contain the sequential index of Panel, starting at 0 and
     counting upwards from the first integrated Internal Flat-Panel Display
     Encoder present, and then from the first external Display Encoder
     (e.g., S/DVO-B then S/DVO-C) which supports Internal Flat-Panels.
     0h - 0Fh = Panel number"
    
    For now I've just hardcoded the input panel number as 0. That would seem
    like a decent choise for LVDS. Not so sure about eDP when port != A.
    
    v2: Accept values 1-16
        Filter out bogus results in opregion code (Jani)
        Add debug logging for all the different branches (Jani)
    
    Cc: Jani Nikula <jani.nikula@linux.intel.com>
    Cc: Rob Kramer <rob@solution-space.com>
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94825Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
    Link: http://patchwork.freedesktop.org/patch/msgid/1460359431-11003-1-git-send-email-ville.syrjala@linux.intel.comReviewed-by: NJani Nikula <jani.nikula@intel.com>
    Tested-by: NRob Kramer <rob@solution-space.com>
    a0562819
intel_opregion.c 29.9 KB