• Jani Nikula's avatar
    drm/displayid: add new displayid section/block iterators · 1a24c364
    Jani Nikula authored
    Iterating DisplayID blocks across sections (in EDID extensions) is
    unnecessarily complicated for the caller. Implement DisplayID iterators
    to go through all blocks in all sections.
    
    Usage example:
    
    	const struct displayid_block *block;
    	struct displayid_iter iter;
    
    	displayid_iter_edid_begin(edid, &iter);
    	displayid_iter_for_each(block, &iter) {
    		/* operate on block */
    	}
    	displayid_iter_end(&iter);
    
    When DisplayID is stored in EDID extensions, the DisplayID sections map
    to extensions as described in VESA DisplayID v1.3 Appendix B: DisplayID
    as an EDID Extension. This is implemented here.
    
    When DisplayID is stored in its dedicated DDC device 0xA4, according to
    VESA E-DDC v1.3, different rules apply for the structure. This is not
    implemented here, as we don't currently use it, but the idea is you'd
    have a different call for beginning the iteration, for example simply:
    
    	displayid_iter_begin(displayid, &iter);
    
    instead of displayid_iter_edid_begin(), and everything else would be
    hidden away in the iterator functions.
    
    v2:
    - sizeof(struct displayid_block) -> sizeof(*block) (Ville)
    - remove __ prefix from displayid_iter_block
    Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/da3dead1752ab16c061f7bd248ac1a4268f7fefb.1617024940.git.jani.nikula@intel.com
    1a24c364
drm_displayid.h 3.88 KB