• Shashank Sharma's avatar
    drm/edid: parse YCBCR420 videomodes from EDID · 832d4f2f
    Shashank Sharma authored
    HDMI 2.0 spec adds support for YCBCR420 sub-sampled output.
    CEA-861-F adds two new blocks in EDID's CEA extension blocks,
    to provide information about sink's YCBCR420 output capabilities.
    
    These blocks are:
    
    - YCBCR420vdb(YCBCR 420 video data block):
    This block contains VICs of video modes, which can be sopported only
    in YCBCR420 output mode (Not in RGB/YCBCR444/422. Its like a normal
    SVD block, valid for YCBCR420 modes only.
    
    - YCBCR420cmdb(YCBCR 420 capability map data block):
    This block gives information about video modes which can support
    YCBCR420 output mode also (along with RGB,YCBCR444/422 etc) This
    block contains a bitmap index of normal svd videomodes, which can
    support YCBCR420 output too.
    So if bit 0 from first vcb byte is set, first video mode in the svd
    list can support YCBCR420 output too. Bit 1 means second video mode
    from svd list can support YCBCR420 output too, and so on.
    
    This patch adds two bitmaps in display's hdmi_info structure, one each
    for VCB and VDB modes. If the source is HDMI 2.0 capable, this patch
    adds:
    - VDB modes (YCBCR 420 only modes) in connector's mode list, also makes
      an entry in the vdb_bitmap per vic.
    - VCB modes (YCBCR 420 also modes) only entry in the vcb_bitmap.
    
    Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
    Cc: Jose Abreu <joabreu@synopsys.com>
    Cc: Emil Velikov <emil.l.velikov@gmail.com>
    
    V2: Addressed
        Review comments from Emil:
        - Use 1ULL<<i instead of 1<<i to make sure the output is 64bit.
        - Use the suggested method for updating dbmap.
        - Add documentation for YCBCR420_vcb_map to fix kbuild warning.
    
        Review comments from Ville:
        - Do not expose the YCBCR420 flags in uabi layer, keep it internal.
        - Save a map of YCBCR420 modes for future reference.
        - Check db length before trying to parse extended tag.
        - Add a warning if there are > 64 modes in capability map block.
        - Use y420cmdb in function names and macros while dealing with vcb
          to be aligned with spec.
        - Move the display information parsing block ahead of mode parsing
          blocks.
    
    V3: Addressed design/review comments from Ville
        - Do not add flags in video modes, else we have to expose them to user
        - There should not be a UABI change, and kernel should detect the
          choice of the output based on type of mode, and the bitmaps.
        - Use standard bitops from kernel bitmap header, instead of calculating
          bit positions manually.
    
    V4: Addressed review comments from Ville:
        - s/ycbcr_420_vdb/y420vdb
        - s/ycbcr_420_vcb/y420cmdb
        - Be less verbose on description of do_y420vdb_modes
        - Move newmode variable in the loop scope.
        - Use svd_to_vic() to get a VIC, instead of 0x7f
        - Remove bitmap description for CMDB modes & VDB modes
        - Dont add connector->ycbcr_420_allowed check for cmdb modes
        - Remove 'len' variable, in is_y420cmdb function, which is used
          only once
        - Add length check in is_y420vdb function
        - Remove unnecessary if (!db) check in function parse_y420cmdb_bitmap
        - Do not add print about YCBCR 420 modes
        - Fix indentation in few places
        - Move ycbcr420_dc_modes in next patch, where its used
        - Add a separate patch for movement of drm_add_display_info()
    
    V5: Addressed review comments from Ville:
        - Add the patch which cleans up the current EXTENDED_TAG usage
        - Make y420_cmdb_map u64
        - Do not block ycbcr420 modes while parsing the EDID, rather
          add a separate helper function to prune ycbcr420-only modes from
          connector's probed modes.
    
    V6: Rebase
    V7: Move this patch after the 420_only validation patch (Ville)
    V8: Addressed review comments from Ville
        - use cea_vic_valid check before adding cmdb/vdb modes
        - add check for i < 64 while adding cmdb modes
        - use 1ULL while checking bitmap
    Signed-off-by: default avatarShashank Sharma <shashank.sharma@intel.com>
    Link: http://patchwork.freedesktop.org/patch/msgid/1500028426-14883-1-git-send-email-shashank.sharma@intel.com
    [vsyrjala: Fix checkpatch complaints and indentation]
    Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    832d4f2f
drm_edid.c 151 KB