From 7d4a772671d98789186d9c1eb7b44cb22c1d9981 Mon Sep 17 00:00:00 2001
From: Vladimir Barinov <vladimir.barinov@cogentembedded.com>
Date: Fri, 17 May 2019 23:18:30 +0300
Subject: [PATCH 120/122] lvds: ONSEMI: fix matrix position during crop

This preserves the centered window poition on imager
matrix during crop

Signed-off-by: Vladimir Barinov <vladimir.barinov@cogentembedded.com>
---
 drivers/media/i2c/soc_camera/ar0140.c | 8 ++++----
 drivers/media/i2c/soc_camera/ar0143.c | 8 ++++----
 drivers/media/i2c/soc_camera/ar0147.c | 8 ++++----
 drivers/media/i2c/soc_camera/ar0231.c | 8 ++++----
 drivers/media/i2c/soc_camera/ar0233.c | 8 ++++----
 5 files changed, 20 insertions(+), 20 deletions(-)

diff --git a/drivers/media/i2c/soc_camera/ar0140.c b/drivers/media/i2c/soc_camera/ar0140.c
index 807b6f8..c52ca4e 100644
--- a/drivers/media/i2c/soc_camera/ar0140.c
+++ b/drivers/media/i2c/soc_camera/ar0140.c
@@ -106,13 +106,13 @@ static int ar0140_set_window(struct v4l2_subdev *sd)
 	dev_dbg(&client->dev, "L=%d T=%d %dx%d\n", priv->rect.left, priv->rect.top, priv->rect.width, priv->rect.height);
 
 	/* horiz crop start */
-	reg16_write16(client, 0x3004, priv->rect.left);
+	reg16_write16(client, 0x3004, priv->rect.left + AR0140_X_START);
 	/* horiz crop end */
-	reg16_write16(client, 0x3008, priv->rect.left + priv->rect.width - 1);
+	reg16_write16(client, 0x3008, priv->rect.left + priv->rect.width - 1 + AR0140_X_START);
 	/* vert crop start */
-	reg16_write16(client, 0x3002, priv->rect.top);
+	reg16_write16(client, 0x3002, priv->rect.top + AR0140_Y_START);
 	/* vert crop end */
-	reg16_write16(client, 0x3006, priv->rect.top + priv->rect.height + 1);
+	reg16_write16(client, 0x3006, priv->rect.top + priv->rect.height - 1 + AR0140_Y_START);
 
 	return 0;
 };
diff --git a/drivers/media/i2c/soc_camera/ar0143.c b/drivers/media/i2c/soc_camera/ar0143.c
index 01494fe..b61c7eb 100644
--- a/drivers/media/i2c/soc_camera/ar0143.c
+++ b/drivers/media/i2c/soc_camera/ar0143.c
@@ -140,13 +140,13 @@ static int ar0143_set_window(struct v4l2_subdev *sd)
 	dev_dbg(&client->dev, "L=%d T=%d %dx%d\n", priv->rect.left, priv->rect.top, priv->rect.width, priv->rect.height);
 
 	/* horiz crop start */
-	reg16_write16(client, 0x3004, priv->rect.left);
+	reg16_write16(client, 0x3004, priv->rect.left + AR0143_X_START);
 	/* horiz crop end */
-	reg16_write16(client, 0x3008, priv->rect.left + priv->rect.width - 1);
+	reg16_write16(client, 0x3008, priv->rect.left + priv->rect.width - 1 + AR0143_X_START);
 	/* vert crop start */
-	reg16_write16(client, 0x3002, priv->rect.top);
+	reg16_write16(client, 0x3002, priv->rect.top + AR0143_Y_START);
 	/* vert crop end */
-	reg16_write16(client, 0x3006, priv->rect.top + priv->rect.height + 1);
+	reg16_write16(client, 0x3006, priv->rect.top + priv->rect.height + 1 + AR0143_Y_START);
 
 	return 0;
 };
diff --git a/drivers/media/i2c/soc_camera/ar0147.c b/drivers/media/i2c/soc_camera/ar0147.c
index cc7face..cc4e761 100644
--- a/drivers/media/i2c/soc_camera/ar0147.c
+++ b/drivers/media/i2c/soc_camera/ar0147.c
@@ -155,13 +155,13 @@ static int ar0147_set_window(struct v4l2_subdev *sd)
 	dev_dbg(&client->dev, "L=%d T=%d %dx%d\n", priv->rect.left, priv->rect.top, priv->rect.width, priv->rect.height);
 
 	/* horiz crop start */
-	reg16_write16(client, 0x3004, priv->rect.left);
+	reg16_write16(client, 0x3004, priv->rect.left + AR0147_X_START);
 	/* horiz crop end */
-	reg16_write16(client, 0x3008, priv->rect.left + priv->rect.width - 1);
+	reg16_write16(client, 0x3008, priv->rect.left + priv->rect.width - 1 + AR0147_X_START);
 	/* vert crop start */
-	reg16_write16(client, 0x3002, priv->rect.top);
+	reg16_write16(client, 0x3002, priv->rect.top + AR0147_Y_START);
 	/* vert crop end */
-	reg16_write16(client, 0x3006, priv->rect.top + priv->rect.height - 1);
+	reg16_write16(client, 0x3006, priv->rect.top + priv->rect.height - 1 + AR0147_Y_START);
 
 	return 0;
 };
diff --git a/drivers/media/i2c/soc_camera/ar0231.c b/drivers/media/i2c/soc_camera/ar0231.c
index 05037c7..b239f56 100644
--- a/drivers/media/i2c/soc_camera/ar0231.c
+++ b/drivers/media/i2c/soc_camera/ar0231.c
@@ -96,13 +96,13 @@ static int ar0231_set_window(struct v4l2_subdev *sd)
 	dev_err(&client->dev, "L=%d T=%d %dx%d\n", priv->rect.left, priv->rect.top, priv->rect.width, priv->rect.height);
 
 	/* horiz crop start */
-	reg16_write16(client, 0x3004, priv->rect.left);
+	reg16_write16(client, 0x3004, priv->rect.left + AR0231_X_START);
 	/* horiz crop end */
-	reg16_write16(client, 0x3008, priv->rect.left + priv->rect.width - 1);
+	reg16_write16(client, 0x3008, priv->rect.left + priv->rect.width - 1 + AR0231_X_START);
 	/* vert crop start */
-	reg16_write16(client, 0x3002, priv->rect.top);
+	reg16_write16(client, 0x3002, priv->rect.top + AR0231_Y_START);
 	/* vert crop end */
-	reg16_write16(client, 0x3006, priv->rect.top + priv->rect.height + 1);
+	reg16_write16(client, 0x3006, priv->rect.top + priv->rect.height - 1 + AR0231_Y_START);
 
 	return 0;
 };
diff --git a/drivers/media/i2c/soc_camera/ar0233.c b/drivers/media/i2c/soc_camera/ar0233.c
index 862c820..543b8a6 100644
--- a/drivers/media/i2c/soc_camera/ar0233.c
+++ b/drivers/media/i2c/soc_camera/ar0233.c
@@ -102,13 +102,13 @@ static int ar0233_set_window(struct v4l2_subdev *sd)
 	dev_dbg(&client->dev, "L=%d T=%d %dx%d\n", priv->rect.left, priv->rect.top, priv->rect.width, priv->rect.height);
 
 	/* horiz crop start */
-	reg16_write16(client, 0x3004, priv->rect.left);
+	reg16_write16(client, 0x3004, priv->rect.left + AR0233_X_START);
 	/* horiz crop end */
-	reg16_write16(client, 0x3008, priv->rect.left + priv->rect.width - 1);
+	reg16_write16(client, 0x3008, priv->rect.left + priv->rect.width - 1 + AR0233_X_START);
 	/* vert crop start */
-	reg16_write16(client, 0x3002, priv->rect.top);
+	reg16_write16(client, 0x3002, priv->rect.top + AR0233_Y_START);
 	/* vert crop end */
-	reg16_write16(client, 0x3006, priv->rect.top + priv->rect.height + 1);
+	reg16_write16(client, 0x3006, priv->rect.top + priv->rect.height - 1 + AR0233_Y_START);
 
 	return 0;
 };
-- 
2.7.4

