drm/edid: clean up EDID block checksum functions
authorJani Nikula <jani.nikula@intel.com>
Thu, 31 Mar 2022 18:44:59 +0000 (21:44 +0300)
committerJani Nikula <jani.nikula@intel.com>
Fri, 1 Apr 2022 14:44:40 +0000 (17:44 +0300)
Have two clear functions, one to compute the checksum over the EDID, and
another to get the checksum from the EDID. Throw away the diff function.

Ditch the drm_ prefix for static functions, and accept const void * to
help transition to struct edid * usage.

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/36641401c8eb0e403c0e33365ff4ad9a28f9fd4a.1648752228.git.jani.nikula@intel.com
drivers/gpu/drm/drm_edid.c

index 4504aac2c26320773942249e4957472ec4024ec1..c9161989b2d2c27a1a5868ac63ff05602fdb43fe 100644 (file)
@@ -1597,25 +1597,25 @@ module_param_named(edid_fixup, edid_fixup, int, 0400);
 MODULE_PARM_DESC(edid_fixup,
                 "Minimum number of valid EDID header bytes (0-8, default 6)");
 
-static int drm_edid_block_checksum(const u8 *raw_edid)
+static int edid_block_compute_checksum(const void *_block)
 {
+       const u8 *block = _block;
        int i;
        u8 csum = 0, crc = 0;
 
        for (i = 0; i < EDID_LENGTH - 1; i++)
-               csum += raw_edid[i];
+               csum += block[i];
 
        crc = 0x100 - csum;
 
        return crc;
 }
 
-static bool drm_edid_block_checksum_diff(const u8 *raw_edid, u8 real_checksum)
+static int edid_block_get_checksum(const void *_block)
 {
-       if (raw_edid[EDID_LENGTH - 1] != real_checksum)
-               return true;
-       else
-               return false;
+       const struct edid *block = _block;
+
+       return block->checksum;
 }
 
 static bool drm_edid_is_zero(const u8 *in_edid, int length)
@@ -1704,8 +1704,8 @@ bool drm_edid_block_valid(u8 *raw_edid, int block, bool print_bad_edid,
                }
        }
 
-       csum = drm_edid_block_checksum(raw_edid);
-       if (drm_edid_block_checksum_diff(raw_edid, csum)) {
+       csum = edid_block_compute_checksum(raw_edid);
+       if (csum != edid_block_get_checksum(raw_edid)) {
                if (edid_corrupt)
                        *edid_corrupt = true;
 
@@ -1859,7 +1859,7 @@ static void connector_bad_edid(struct drm_connector *connector,
        /* Calculate real checksum for the last edid extension block data */
        if (last_block < num_blocks)
                connector->real_edid_checksum =
-                       drm_edid_block_checksum(edid + last_block * EDID_LENGTH);
+                       edid_block_compute_checksum(edid + last_block * EDID_LENGTH);
 
        if (connector->bad_edid_counter++ && !drm_debug_enabled(DRM_UT_KMS))
                return;