imx230: cropping region comparison fix
Hu He [Fri, 12 Feb 2016 19:51:10 +0000 (11:51 -0800)]
Previuosuly a cropped sensor mode is used as default and used in cropping
logic comparison. The later part should be compared with full size. For
imx230 sensor, it is 5344x4016.

Change definitions for default values to use those from full size setting
to fix the comparison logic.

Also add more comments.

Bug 1695366

Change-Id: Id819ea94f4079b7127b0728f25bd59c21ae067d7
Signed-off-by: Hu He <hhe@nvidia.com>
Reviewed-on: http://git-master/r/1011443
(cherry picked from commit 1cda066864daa670c6be7b2ef01329e4b5022891)
Reviewed-on: http://git-master/r/1013505
Reviewed-by: Automatic_Commit_Validation_User
GVS: Gerrit_Virtual_Submit
Reviewed-by: Arun Kannan <akannan@nvidia.com>
Reviewed-by: Kamal Balagopalan <kbalagopalan@nvidia.com>

drivers/media/i2c/soc_camera/imx230_v4l2.c

index 4f58a5b..f4b2b48 100644 (file)
 
 #define IMX230_MAX_COARSE_DIFF         10
 
+/* gain values are common among sensor modes */
 #define IMX230_GAIN_SHIFT              8
 #define IMX230_MIN_GAIN                (1 << IMX230_GAIN_SHIFT)
 #define IMX230_MAX_GAIN                (16 << IMX230_GAIN_SHIFT)
+#define IMX230_DEFAULT_GAIN    IMX230_MIN_GAIN
+
+/* common FL/CT values among sensor modes */
 #define IMX230_MIN_FRAME_LENGTH        (0x0)
 #define IMX230_MAX_FRAME_LENGTH        (0xffff)
 #define IMX230_MIN_EXPOSURE_COARSE     (0x0001)
 #define IMX230_MAX_EXPOSURE_COARSE     \
        (IMX230_MAX_FRAME_LENGTH-IMX230_MAX_COARSE_DIFF)
 
-#define IMX230_DEFAULT_GAIN            IMX230_MIN_GAIN
-#define IMX230_DEFAULT_FRAME_LENGTH    (0x0CDA)
+/* Definitions for full sensor mode that matches full mode's sequence */
+#define IMX230_MIN_FRAME_LENGTH_5344x4016      (0x1022)
+#define IMX230_DEFAULT_WIDTH_5344x4016 5344
+#define IMX230_DEFAULT_HEIGHT_5344x4016        4016
+
+/* Use full sensor mode settings as default values */
+#define IMX230_DEFAULT_MODE    IMX230_MODE_5344x4016
+#define IMX230_DEFAULT_WIDTH   IMX230_DEFAULT_WIDTH_5344x4016
+#define IMX230_DEFAULT_HEIGHT  IMX230_DEFAULT_HEIGHT_5344x4016
+#define IMX230_DEFAULT_FRAME_LENGTH    IMX230_MIN_FRAME_LENGTH_5344x4016
 #define IMX230_DEFAULT_EXPOSURE_COARSE \
        (IMX230_DEFAULT_FRAME_LENGTH-IMX230_MAX_COARSE_DIFF)
 
-#define IMX230_DEFAULT_MODE    IMX230_MODE_5344x3200
-#define IMX230_DEFAULT_WIDTH   5344
-#define IMX230_DEFAULT_HEIGHT  3200
+/* Some other common default values */
 #define IMX230_DEFAULT_DATAFMT V4L2_MBUS_FMT_SRGGB10_1X10
 #define IMX230_DEFAULT_CLK_FREQ        24000000
 
+/* R0x0344-R0x034B */
 #define IMX230_NUM_CROP_REGS   8
 
 struct imx230 {
@@ -546,8 +557,10 @@ static int imx230_s_crop(struct v4l2_subdev *sd, const struct v4l2_crop *crop)
        }
        right = rect->left + width - 1;
        bottom = rect->top + height - 1;
-       if ((right > IMX230_DEFAULT_WIDTH) ||
-               (bottom > IMX230_DEFAULT_HEIGHT)) {
+
+       /* Crop window is within the full mode's active */
+       if ((right > IMX230_DEFAULT_WIDTH_5344x4016) ||
+               (bottom > IMX230_DEFAULT_HEIGHT_5344x4016)) {
                dev_err(&client->dev,
                        "%s: CROP Bound Error: right:%d, bottom:%d)\n",
                        __func__, right, bottom);