linux/include/drm
Shashank Sharma 832d4f2f41 drm/edid: parse YCBCR420 videomodes from EDID
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: Shashank 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: Ville Syrjälä <ville.syrjala@linux.intel.com>
2017-07-14 21:23:54 +03:00
..
bridge drm/bridge/synopsys: dw-hdmi: Use bridge->mode_valid() callback 2017-06-05 12:09:50 +05:30
i2c drm/i2c: tda998x: Register ASoC hdmi-codec and add audio DT binding 2016-09-07 13:10:10 +01:00
tinydrm drm/tinydrm: Add tinydrm_xrgb8888_to_gray8() helper 2017-07-14 19:29:59 +02:00
ttm drm/ttm: fix include notation and remove -Iinclude/drm flag 2017-05-16 17:17:16 +02:00
ati_pcigart.h drm: Move legacy buffer structures to <drm/drm_legacy.h> 2014-09-12 15:28:12 +02:00
drm_agpsupport.h drm: Give drm_agp_clear drm_legacy_ prefix 2016-04-27 08:41:34 +02:00
drm_atomic_helper.h drm/atomic: Make private objs proper objects 2017-07-13 19:28:43 +03:00
drm_atomic.h drm/atomic: Make private objs proper objects 2017-07-13 19:28:43 +03:00
drm_auth.h drm: Move drm_lock_data out of drmP.h 2017-03-09 16:18:02 +01:00
drm_blend.h drm: Add DRM_MODE_ROTATE_ and DRM_MODE_REFLECT_ to UAPI 2017-05-22 09:49:48 +02:00
drm_bridge.h drm/bridge: Refactor out the panel wrapper from the lvds-encoder bridge. 2017-06-05 14:00:40 +05:30
drm_cache.h drm: Move drm_clflush prototypes to drm_cache header file 2017-01-10 11:17:01 +01:00
drm_color_mgmt.h drm: drm_color_mgmt.h needs struct drm_crtc declaration 2017-05-02 10:30:23 +02:00
drm_connector.h drm/edid: parse YCBCR420 videomodes from EDID 2017-07-14 21:23:54 +03:00
drm_crtc_helper.h drm/atomic: Acquire connection_mutex lock in drm_helper_probe_single_connector_modes, v4. 2017-04-06 21:29:23 +02:00
drm_crtc.h drm/doc: vblank cleanup 2017-06-20 10:26:01 +02:00
drm_debugfs_crc.h drm: Add API for capturing frame CRCs 2016-10-17 16:44:34 +02:00
drm_debugfs.h drm/debugfs: Add kerneldoc 2017-03-24 09:36:06 +01:00
drm_displayid.h drm/edid: add displayid detailed 1 timings to the modelist. (v1.1) 2016-05-23 11:35:31 +10:00
drm_dp_dual_mode_helper.h drm: Fix LSPCON kernel-doc 2016-10-19 18:20:40 +03:00
drm_dp_helper.h Linux 4.12-rc5 2017-06-16 13:58:27 +10:00
drm_dp_mst_helper.h drm/atomic: Make private objs proper objects 2017-07-13 19:28:43 +03:00
drm_drv.h Merge remote-tracking branch 'airlied/drm-next' into drm-misc-next 2017-06-27 09:18:17 -04:00
drm_edid.h drm: handle HDMI 2.0 VICs in AVI info-frames 2017-07-14 21:23:54 +03:00
drm_encoder_slave.h drm: Don't include <drm/drm_encoder.h> in <drm/drm_crtc.h> 2016-12-18 16:29:29 +05:30
drm_encoder.h drm/doc: Fix typos for early_unregister doc 2017-01-26 10:49:09 +01:00
drm_fb_cma_helper.h drm: Convert CMA fbdev console suspend helpers to use bool 2017-06-20 16:23:40 +02:00
drm_fb_helper.h drm/fb-helper: Add top-level lock 2017-07-06 10:00:42 +02:00
drm_file.h drm: introduce sync objects (v4) 2017-06-14 12:10:22 +10:00
drm_fixed.h drm: Add drm_fixp_from_fraction and drm_fixp2int_ceil 2016-02-05 15:23:48 +10:00
drm_flip_work.h drm/kms-helpers: Use recommened kerneldoc for struct member refs 2017-01-25 16:18:57 +01:00
drm_fourcc.h drm: Add mode_config .get_format_info() hook 2017-03-22 19:45:00 +02:00
drm_framebuffer.h Pointer for Markus's image conversion work. 2017-03-14 15:07:33 +01:00
drm_gem_cma_helper.h drm/cma: Fix recent regression of mmap() in the MMU case. 2017-04-18 12:25:37 -07:00
drm_gem.h drm: Remove pending_read_domains and pending_write_domain 2017-07-05 22:18:07 +02:00
drm_global.h drm: drop extern from function decls 2017-03-24 09:36:06 +01:00
drm_hashtab.h drm: drop extern from function decls 2017-03-24 09:36:06 +01:00
drm_ioctl.h drm: document drm_ioctl.[hc] 2017-04-04 20:47:54 +02:00
drm_irq.h drm: Extract drm_vblank.[hc] 2017-06-01 08:02:14 +02:00
drm_legacy.h drm: document drm_auth.c 2016-06-21 22:10:55 +02:00
drm_mipi_dsi.h drm/dsi: Implement DCS set/get display brightness 2016-08-24 13:34:00 +02:00
drm_mm.h Pointer for Markus's image conversion work. 2017-03-14 15:07:33 +01:00
drm_mode_config.h drm: Document kms locking a bit better 2017-03-29 08:34:28 +02:00
drm_mode_object.h drm: Introduce drm_mode_object_{get,put}() 2017-02-28 16:14:55 +01:00
drm_modes.h drm: add helper to validate YCBCR420 modes 2017-07-14 21:23:54 +03:00
drm_modeset_helper_vtables.h drm/atomic: initial support for asynchronous plane update 2017-07-03 10:04:44 +02:00
drm_modeset_helper.h drm: Pass 'dev' to drm_helper_mode_fill_fb_struct() 2016-12-15 14:03:30 +02:00
drm_modeset_lock.h drm: Remove drm_modeset_legacy_acquire_ctx and crtc->acquire_ctx 2017-04-05 09:26:45 +02:00
drm_of.h drm: of: introduce drm_of_find_panel_or_bridge 2017-04-06 17:00:27 -04:00
drm_os_linux.h drm: remove writeq/readq function definitions 2017-06-02 10:41:20 -04:00
drm_panel.h drm: make drm_panel.h self-contained 2017-05-16 17:17:02 +02:00
drm_pci.h drm/pci: Deprecate drm_pci_init/exit completely 2017-06-20 10:41:03 +02:00
drm_pciids.h drm/radeon: add new OLAND pci id 2015-08-12 12:24:05 -04:00
drm_plane_helper.h drm: Add acquire ctx parameter to ->plane_disable 2017-03-29 09:14:58 +02:00
drm_plane.h drm: Add acquire ctx parameter to ->plane_disable 2017-03-29 09:14:58 +02:00
drm_prime.h drm: Extract drm_vblank.[hc] 2017-06-01 08:02:14 +02:00
drm_print.h drm: drm_printer: add __printf validation 2017-02-26 21:43:08 +01:00
drm_property.h drm: rename, adjust and export drm_atomic_replace_property_blob 2017-07-14 15:53:06 +02:00
drm_rect.h drm/doc: move printf helpers out of drmP.h 2017-05-31 09:59:41 +02:00
drm_scdc_helper.h drm/scdc: declare drm_scdc_get_scrambling_status 2017-03-23 14:53:54 +02:00
drm_simple_kms_helper.h drm: Clarify the role of plane_state argument to drm_simple update(). 2017-03-30 12:02:00 -07:00
drm_syncobj.h drm: introduce sync objects (v4) 2017-06-14 12:10:22 +10:00
drm_sysfs.h drm: Consolidate and document sysfs support 2017-04-04 20:47:54 +02:00
drm_vblank.h drm/vblank: Unexport drm_vblank_cleanup 2017-06-28 12:51:13 +02:00
drm_vma_manager.h drm: Extract drm_prime.h 2017-03-09 16:18:02 +01:00
drmP.h drm/doc: vblank cleanup 2017-06-20 10:26:01 +02:00
gma_drm.h
i915_component.h drm/i915/dp: DP audio API changes for MST 2016-09-22 09:01:55 -07:00
i915_drm.h drm: avoid "possible bad bitmask?" warning 2016-08-09 22:18:26 +02:00
i915_pciids.h drm/i915/cfl: Add Coffee Lake PCI IDs for U Sku. 2017-06-09 11:36:29 -07:00
intel_lpe_audio.h ALSA: x86: Register multiple PCM devices for the LPE audio card 2017-05-03 16:24:00 +03:00
intel-gtt.h drm/i915: Use fixed-sized types for stolen 2017-01-06 16:02:09 +00:00