[PATCH 2/4] soc-camera: tw9910: add hsync control support for platform

Kuninori Morimoto <[email protected]>
Newsgroups gmane.comp.video.video4linux
Message-ID <ubpkt9hui.wl%[email protected]>
Signed-off-by: Kuninori Morimoto <[email protected]>
---
 drivers/media/video/tw9910.c |   30 +++++++++++++-----------------
 include/media/tw9910.h       |    2 ++
 2 files changed, 15 insertions(+), 17 deletions(-)

diff --git a/drivers/media/video/tw9910.c b/drivers/media/video/tw9910.c
index 4652483..8e3d9e0 100644
--- a/drivers/media/video/tw9910.c
+++ b/drivers/media/video/tw9910.c
@@ -193,6 +193,10 @@
 #define RTSEL_FIELD 0x06 /* 0110 = FIELD */
 #define RTSEL_RTCO  0x07 /* 0111 = RTCO ( Real Time Control ) */
 
+/* HSYNC default */
+#define HSTART 0x0160
+#define HEND   0x0300
+
 /*
  * structure
  */
@@ -217,11 +221,6 @@ struct tw9910_cropping_ctrl {
 	u16 hactive;
 };
 
-struct tw9910_hsync_ctrl {
-	u16 start;
-	u16 end;
-};
-
 struct tw9910_priv {
 	struct v4l2_subdev                subdev;
 	struct tw9910_video_info       *info;
@@ -347,11 +346,6 @@ static const struct tw9910_cropping_ctrl tw9910_cropping_ctrl = {
 	.hactive = 0x02D0,
 };
 
-static const struct tw9910_hsync_ctrl tw9910_hsync_ctrl = {
-	.start = 0x0260,
-	.end   = 0x0300,
-};
-
 /*
  * general function
  */
@@ -418,19 +412,19 @@ static int tw9910_set_cropping(struct i2c_client *client,
 }
 
 static int tw9910_set_hsync(struct i2c_client *client,
-			    const struct tw9910_hsync_ctrl *hsync)
+			    const u16 start, const u16 end)
 {
 	int ret;
 
 	/* bit 10 - 3 */
 	ret = i2c_smbus_write_byte_data(client, HSGEGIN,
-					(hsync->start & 0x07F8) >> 3);
+					(start & 0x07F8) >> 3);
 	if (ret < 0)
 		return ret;
 
 	/* bit 10 - 3 */
 	ret = i2c_smbus_write_byte_data(client, HSEND,
-					(hsync->end & 0x07F8) >> 3);
+					(end & 0x07F8) >> 3);
 	if (ret < 0)
 		return ret;
 
@@ -440,9 +434,9 @@ static int tw9910_set_hsync(struct i2c_client *client,
 		return ret;
 
 	ret = i2c_smbus_write_byte_data(client, HSLOWCTL,
-					(ret & 0x88)                 |
-					(hsync->start & 0x0007) << 4 |
-					(hsync->end   & 0x0007));
+					(ret   & 0x88)        |
+					(start & 0x0007) << 4 |
+					(end   & 0x0007));
 
 	return ret;
 }
@@ -697,7 +691,9 @@ static int tw9910_s_crop(struct v4l2_subdev *sd, struct v4l2_crop *a)
 	/*
 	 * set hsync
 	 */
-	ret = tw9910_set_hsync(client, &tw9910_hsync_ctrl);
+	ret = tw9910_set_hsync(client,
+			       HSTART + priv->info->start_offset,
+			       HEND   + priv->info->end_offset);
 	if (ret < 0)
 		goto tw9910_set_fmt_error;
 
diff --git a/include/media/tw9910.h b/include/media/tw9910.h
index 73231e7..6ddb654 100644
--- a/include/media/tw9910.h
+++ b/include/media/tw9910.h
@@ -33,6 +33,8 @@ struct tw9910_video_info {
 	unsigned long          buswidth;
 	enum tw9910_mpout_pin  mpout;
 	struct soc_camera_link link;
+	u16 start_offset;
+	u16 end_offset;
 };
 
 
-- 
1.6.0.4

--
video4linux-list mailing list
Unsubscribe mailto:[email protected]?subject=unsubscribe
https://www.redhat.com/mailman/listinfo/video4linux-list
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.