[PATCH] soc-camera: tw9910: Add sync polarity support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Signed-off-by: Kuninori Morimoto <morimoto.kuninori@xxxxxxxxxxx>
---
 drivers/media/video/tw9910.c |   22 +++++++++++++++++++---
 1 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/drivers/media/video/tw9910.c b/drivers/media/video/tw9910.c
index a4ba720..243207d 100644
--- a/drivers/media/video/tw9910.c
+++ b/drivers/media/video/tw9910.c
@@ -166,7 +166,7 @@
 #define VSSL_FIELD  0x20 /*   2 : FIELD  */
 #define VSSL_VVALID 0x30 /*   3 : VVALID */
 #define VSSL_ZERO   0x70 /*   7 : 0      */
-#define HSP_LOW     0x00 /* 0 : HS pin output polarity is active low */
+#define HSP_LO      0x00 /* 0 : HS pin output polarity is active low */
 #define HSP_HI      0x08 /* 1 : HS pin output polarity is active high.*/
 			 /* HS pin output control */
 #define HSSL_HACT   0x00 /*   0 : HACT   */
@@ -175,6 +175,11 @@
 #define HSSL_HLOCK  0x03 /*   3 : HLOCK  */
 #define HSSL_ASYNCW 0x04 /*   4 : ASYNCW */
 #define HSSL_ZERO   0x07 /*   7 : 0      */
+			 /* xSSL_xVALID polarity */
+#define VSP_V_LO    VSP_HI /* xSSL_xVALID case, polarity will be inverted */
+#define VSP_V_HI    VSP_LO
+#define HSP_V_LO    HSP_HI
+#define HSP_V_HI    HSP_LO
 
 /* ACNTL1 */
 #define SRESET      0x80 /* resets the device to its default state
@@ -513,12 +518,22 @@ static int tw9910_set_bus_param(struct soc_camera_device *icd,
 {
 	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
 	struct i2c_client *client = sd->priv;
+	u8 val = VSSL_VVALID | HSSL_DVALID;
 
 	/*
 	 * set OUTCTR1
 	 */
-	return i2c_smbus_write_byte_data(client, OUTCTR1,
-					 VSSL_VVALID | HSSL_DVALID);
+	if (flags & SOCAM_HSYNC_ACTIVE_LOW)
+		val |= HSP_V_LO;
+	else
+		val |= HSP_V_HI;
+
+	if (flags & SOCAM_VSYNC_ACTIVE_LOW)
+		val |= VSP_V_LO;
+	else
+		val |= VSP_V_HI;
+
+	return i2c_smbus_write_byte_data(client, OUTCTR1, val);
 }
 
 static unsigned long tw9910_query_bus_param(struct soc_camera_device *icd)
@@ -528,6 +543,7 @@ static unsigned long tw9910_query_bus_param(struct soc_camera_device *icd)
 	struct soc_camera_link *icl = to_soc_camera_link(icd);
 	unsigned long flags = SOCAM_PCLK_SAMPLE_RISING | SOCAM_MASTER |
 		SOCAM_VSYNC_ACTIVE_HIGH | SOCAM_HSYNC_ACTIVE_HIGH |
+		SOCAM_VSYNC_ACTIVE_LOW  | SOCAM_HSYNC_ACTIVE_LOW  |
 		SOCAM_DATA_ACTIVE_HIGH | priv->info->buswidth;
 
 	return soc_camera_apply_sensor_flags(icl, flags);
-- 
1.6.3.3

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux