The patches have been reordered and the changes suggested by Takashi Iwai have been worked in. Egbert Eich (18): 1. Make error handling of EDID extension blocks a bit more fault tolorant: * Don't fail when EDID extension blocks cannot be read or memory cannot be allocated. * Don't read EDID extension blocks there are no blocks to expect, either for EDID versions < 1.3 or when block 3 is equal to the base block (in which case the monitor is not EDDC capable and doesn't accept the segment address. DRM/KMS/EDID: Mask out Segment Bits when calculating Offset. DRM/KMS/EDID: 0x7e -> EDID_EXTENSION_FLAG_OFFSET (v2) DRM/KMS/EDID: Return Base EDID block if reading EEDID Blocks fails (v2) DRM/KMS/EDID: Don't fail when failing to allocate memory for EDID extensions. DRM/KMS/EDID: Test EDDC if EDID announces more than one Extension Block (v2) DRM/KMS/EDID: Don't expect extension blocks for EDID Versions < 1.3. DRM/KMS/EDID: Don't reallocate EDID blob when size has shrunk. 2. Fix EDID block maps: We skip invalid EEDID blocks, if we do so however we should fix the block maps to keep the EDID consistent. DRM/KMS/EDID: Fix up EEDID Map Blogs if Extension Block Count has changed (v2) 3. Improve handling of 'firmware'-supplied EDIDs: * Move EDID loading from a helper level to DRM core. * If there is a 'firmware'-supplied EDID matching the connector supply it whenever drm_get_edid() is called. * Allow to specify firmware for multiple connectors. * Use the same EDID fault handling as for DDC read EDIDs. DRM/KMS/EDID: Move drm_edid_load.o to drm.ko (v2) DRM/KMS/EDID: Feed 'firmware' supplied EDID blocks whenever the EDID is read (v2) DRM/KMS/EDID: Allow for multiple Connectors when specifying 'firmware'-EDID Files (v2) DRM/KMS/EDID: Use Extension Block Fixup Code also for 'firmware' EDID (v2) 4. Cache EDIDs with extension blocks. I2C transfer of EDIDs with several extension blocks can be quite time consuming. In many cases the EDID has not changed for a given connector since the last read. We detect this by comparing data from the base block. If a match is found we copy the EDID data from cache. This way only the base block needs to be transferred. DRM/KMS/EDID: Cache EDID blobs with extensions (v2) 5. Consolidate EDID fatal error handling: Store information about the error status of the last DDC read in the drm_connector structure. It combines the handling of all zero EDIDs (needed by the radeon driver) and the suppression of consecutive logging of the same EDID error. It will log again when the error pattern has changed (for inststance if the monitor has been exchanged). DRM/KMS/EDID: Consolidate EDID Error Handling (v2) 6. Move EDID-related functions to drm_edid.h The handling of EDID related DRM functions seemed to be a bit arbitrary: although drm_edid.h had been created, new functions were often added to drm_crtc.h DRM/KMS/ast: Include drm_edid.h in file using drm_get_edid(). DRM/KMS/gma500: Include drm_edid.h in file using drm_get_edid(). DRM/KMS/mgag200: Include drm_edid.h in file using drm_get_edid(). DRM/KMS/EDID: Move EDID related Functions to drm_edid.h. drivers/gpu/drm/Kconfig | 3 +- drivers/gpu/drm/Makefile | 2 +- drivers/gpu/drm/ast/ast_mode.c | 1 + drivers/gpu/drm/drm_crtc.c | 1 + drivers/gpu/drm/drm_crtc_helper.c | 6 +- drivers/gpu/drm/drm_edid.c | 333 ++++++++++++++++++++++++---- drivers/gpu/drm/drm_edid_load.c | 115 ++++------ drivers/gpu/drm/gma500/cdv_intel_dp.c | 1 + drivers/gpu/drm/gma500/oaktrail_lvds.c | 1 + drivers/gpu/drm/gma500/psb_intel_modes.c | 1 + drivers/gpu/drm/mgag200/mgag200_mode.c | 1 + drivers/gpu/drm/radeon/radeon_connectors.c | 2 +- include/drm/drm_crtc.h | 13 +- include/drm/drm_edid.h | 25 ++- 14 files changed, 370 insertions(+), 135 deletions(-) -- 1.7.7 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel