• Shashank Sharma's avatar
    drm/i915: Add YCBCR 4:2:0/4:4:4 support for LSPCON · 668b6c17
    Shashank Sharma authored
    LSPCON chips can generate YCBCR outputs, if asked nicely :).
    
    In order to generate YCBCR 4:2:0 outputs, a source must:
    - send YCBCR 4:4:4 signals to LSPCON
    - program color space as 4:2:0 in AVI infoframes
    
    Whereas for YCBCR 4:4:4 outputs, the source must:
    - send YCBCR 4:4:4 signals to LSPCON
    - program color space as 4:4:4 in AVI infoframes
    
    So for both 4:2:0 as well as 4:4:4 outputs, we are driving the
    pipe for YCBCR 4:4:4 output, but AVI infoframe's color space
    information indicates LSPCON FW to start scaling down from YCBCR
    4:4:4 and generate YCBCR 4:2:0 output. As the scaling is done by
    LSPCON device, we need not to reserve a scaler for 4:2:0 outputs.
    
    V2: rebase
    V3: Addressed review comments from Ville
        - add enum crtc_output_format instead of bool ycbcr420
        - use crtc_output_format=4:4:4 for modeset of LSPCON 4:2:0 output
          cases in this way we will have YCBCR 4:4:4 framework ready (except
          the ABI part)
    V4: Added r-b from Maarten (for v3)
        Addressed review comments from Ville:
        - Do not add a non-atomic state variable to determine lspcon output.
          Instead add bool in CRTC state to indicate lspcon based scaling.
    V5: Addressed review comments from Ville:
        - Change the state bool name from external scaling to something more
          relavent.
        - Keep the info and adjusted_mode structures const.
        - use crtc_state instead of pipe_config.
        - Push all the config change into lspcon_ycbcr420_config function.
    V6: Rebase, small changes to accommodate changes in patch 2.
    V7: Fixed checkpatch warnings for alignment
    V8: Rebase
    
        PS: Ignored following warnings to match the current formatting:
        drm/i915: Add YCBCR 4:2:0/4:4:4 support for LSPCON
         -:53: CHECK:SPACING: spaces preferred around that '<<' (ctx:VxV)
        #53: FILE: drivers/gpu/drm/i915/i915_reg.h:8721:
        +#define  TRANS_MSA_SAMPLING_444        (2<<1)
                                              ^
        -:54: CHECK:SPACING: spaces preferred around that '<<' (ctx:VxV)
        #54: FILE: drivers/gpu/drm/i915/i915_reg.h:8722:
        +#define  TRANS_MSA_CLRSP_YCBCR         (2<<3)
    V9: Rebase
    V10: Rebase
    V11: Rebase
    
    Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
    Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
    Reviewed-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
    Signed-off-by: default avatarShashank Sharma <shashank.sharma@intel.com>
    Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/1539325394-20788-8-git-send-email-shashank.sharma@intel.com
    668b6c17
intel_display.c 456 KB