[PORT FROM R2] atomisp: mt9e013: fail OTP checksum if only 0's are found
authorDavid Cohen <david.a.cohen@intel.com>
Thu, 24 Nov 2011 14:48:51 +0000 (16:48 +0200)
committerbuildbot <buildbot@intel.com>
Mon, 19 Dec 2011 13:33:43 +0000 (05:33 -0800)
BZ: 17272

If OTP data has only 0's checksum will pass, but data is invalid. This
patch makes it fail.

Change-Id: If461bb9b44736bfdcea96318c47bec185955e1db
Orig-Change-Id: I4a5cf7276ad44600fffbfce72e4cd50eb2d7c582
Signed-off-by: David Cohen <david.a.cohen@intel.com>
Reviewed-on: http://android.intel.com:8080/25232
Reviewed-by: Koskinen, Ilkka <ilkka.koskinen@intel.com>
Reviewed-by: Gerasimow, Timo <timo.gerasimow@intel.com>
Reviewed-by: Koski, Anttu <anttu.koski@intel.com>
Tested-by: Koski, Anttu <anttu.koski@intel.com>
Reviewed-by: buildbot <buildbot@intel.com>
Tested-by: buildbot <buildbot@intel.com>
Reviewed-on: http://android.intel.com:8080/28026
Reviewed-by: Tuominen, TeemuX <teemux.tuominen@intel.com>
drivers/media/video/mt9e013.c

index 85b9bb2..7f93058 100644 (file)
@@ -718,15 +718,22 @@ static int mt9e013_otp_checksum(struct v4l2_subdev *sd, u8 *buf, int list_len,
        unsigned long sum;
        u8 checksum;
        int i;
+       int zero_flag = 1;
 
        for (i = 0; i < list_len; i++) {
                sum = mt9e013_otp_sum(sd, buf, list[i].start, list[i].end);
                checksum = sum % MT9E013_OTP_MOD_CHECKSUM;
                if (buf[list[i].checksum] != checksum)
                        return -EINVAL;
+               /*
+                * Checksum must fail if whole data is 0.
+                * Clear zero_flag if data != 0 is found.
+                */
+               if (unlikely(zero_flag && (sum > 0)))
+                       zero_flag = 0;
        }
 
-       return 0;
+       return !zero_flag ? 0 : -EINVAL;
 }
 
 static int