• Ville Syrjälä's avatar
    drm: Add helper for DP++ adaptors · b3daa5ef
    Ville Syrjälä authored
    Add a helper which aids in the identification of DP dual mode
    (aka. DP++) adaptors. There are several types of adaptors
    specified: type 1 DVI, type 1 HDMI, type 2 DVI, type 2 HDMI
    
    Type 1 adaptors have a max TMDS clock limit of 165MHz, type 2 adaptors
    may go as high as 300MHz and they provide a register informing the
    source device what the actual limit is. Supposedly also type 1 adaptors
    may optionally implement this register. This TMDS clock limit is the
    main reason why we need to identify these adaptors.
    
    Type 1 adaptors provide access to their internal registers and the sink
    DDC bus through I2C. Type 2 adaptors provide this access both via I2C
    and I2C-over-AUX. A type 2 source device may choose to implement either
    of these methods. If a source device implements the I2C-over-AUX
    method, then the driver will obviously need specific support for such
    adaptors since the port is driven like an HDMI port, but DDC
    communication happes over the AUX channel.
    
    This helper should be enough to identify the adaptor type (some
    type 1 DVI adaptors may be a slight exception) and the maximum TMDS
    clock limit. Another feature that may be available is control over
    the TMDS output buffers on the adaptor, possibly allowing for some
    power saving when the TMDS link is down.
    
    Other user controllable features that may be available in the adaptors
    are downstream i2c bus speed control when using i2c-over-aux, and
    some control over the CEC pin. I chose not to provide any helper
    functions for those since I have no use for them in i915 at this time.
    The rest of the registers in the adaptor are mostly just information,
    eg. IEEE OUI, hardware and firmware revision, etc.
    
    v2: Pass adaptor type to helper functions to ease driver implementation
        Fix a bunch of typoes (Paulo)
        Add DRM_DP_DUAL_MODE_UNKNOWN for the case where we don't (yet) know
        the type (Paulo)
        Reject 0x00 and 0xff DP_DUAL_MODE_MAX_TMDS_CLOCK values (Paulo)
        Adjust drm_dp_dual_mode_detect() type2 vs. type1 detection to
        ease future LSPCON enabling
        Remove the unused DP_DUAL_MODE_LAST_RESERVED define
    v3: Fix kernel doc function argument descriptions (Jani)
        s/NONE/UNKNOWN/ in drm_dp_dual_mode_detect() docs
        Add kernel doc for enum drm_dp_dual_mode_type
        Actually build the docs
        Fix more typoes
    v4: Adjust code indentation of type2 adaptor detection (Shashank)
        Add debug messages for failurs cases (Shashank)
    v5: EXPORT_SYMBOL(drm_dp_dual_mode_read) (Paulo)
    
    Cc: stable@vger.kernel.org
    Cc: Tore Anderson <tore@fud.no>
    Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
    Cc: Shashank Sharma <shashank.sharma@intel.com>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Cc: Shashank Sharma <shashank.sharma@intel.com>
    Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Reviewed-by: Shashank Sharma <shashank.sharma@intel.com> (v4)
    Link: http://patchwork.freedesktop.org/patch/msgid/1462542412-25533-1-git-send-email-ville.syrjala@linux.intel.com
    (cherry picked from commit ede53344)
    Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
    b3daa5ef
drm_dp_dual_mode_helper.c 10.7 KB