public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] gspca_sonixj: add hardware vertical flip support for hama AC-150
@ 2010-10-17 11:08 Németh Márton
  2010-10-18 10:44 ` Jean-Francois Moine
  0 siblings, 1 reply; 3+ messages in thread
From: Németh Márton @ 2010-10-17 11:08 UTC (permalink / raw)
  To: Jean-Francois Moine; +Cc: V4L Mailing List

From: Márton Németh <nm127@freemail.hu>

The PO2030N sensor chip found in hama AC-150 webcam supports vertical flipping
the image by hardware. Add support for this in the gspca_sonixj driver also.

Signed-off-by: Márton Németh <nm127@freemail.hu>
---
diff -upr b/drivers/media/video/gspca/sonixj.c c/drivers/media/video/gspca/sonixj.c
--- b/drivers/media/video/gspca/sonixj.c	2010-10-17 11:22:33.000000000 +0200
+++ c/drivers/media/video/gspca/sonixj.c	2010-10-17 12:08:12.000000000 +0200
@@ -45,7 +45,7 @@ struct sd {
 	u8 blue;
 	u8 red;
 	u8 gamma;
-	u8 vflip;			/* ov7630/ov7648 only */
+	u8 vflip;			/* ov7630/ov7648/po2030n only */
 	u8 sharpness;
 	u8 infrared;			/* mt9v111 only */
 	u8 freq;			/* ov76xx only */
@@ -219,7 +219,7 @@ static const struct ctrl sd_ctrls[] = {
 	    .set = sd_setautogain,
 	    .get = sd_getautogain,
 	},
-/* ov7630/ov7648 only */
+/* ov7630/ov7648/po2030n only */
 #define VFLIP_IDX 7
 	{
 	    {
@@ -328,7 +328,6 @@ static const __u32 ctrl_dis[] = {

 [SENSOR_PO2030N] =	(1 << AUTOGAIN_IDX) |
 			(1 << INFRARED_IDX) |
-			(1 << VFLIP_IDX) |
 			(1 << FREQ_IDX),
 [SENSOR_SOI768] =	(1 << AUTOGAIN_IDX) |
 			(1 << INFRARED_IDX) |
@@ -2136,7 +2135,7 @@ static void setautogain(struct gspca_dev
 		sd->ag_cnt = -1;
 }

-/* hv7131r/ov7630/ov7648 only */
+/* hv7131r/ov7630/ov7648/po2030n only */
 static void setvflip(struct sd *sd)
 {
 	u8 comn;
@@ -2156,6 +2155,20 @@ static void setvflip(struct sd *sd)
 			comn |= 0x80;
 		i2c_w1(&sd->gspca_dev, 0x75, comn);
 		break;
+	case SENSOR_PO2030N:
+		/* Reg. 0x1E: Timing Generator Control Register 2 (Tgcontrol2)
+		 * (reset value: 0x0A)
+		 * bit7: HM: Horizontal Mirror: 0: disable, 1: enable
+		 * bit6: VM: Vertical Mirror: 0: disable, 1: enable
+		 * bit5: ST: Shutter Selection: 0: electrical, 1: mechanical
+		 * bit4: FT: Single Frame Transfer: 0: disable, 1: enable
+		 * bit3-0: X
+		 */
+		comn = 0x0A;
+		if (sd->vflip)
+			comn |= 0x40;
+		i2c_w1(&sd->gspca_dev, 0x1E, comn);
+		break;
 	default:
 /*	case SENSOR_OV7648: */
 		comn = 0x06;

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH 1/2] gspca_sonixj: add hardware vertical flip support for hama AC-150
  2010-10-17 11:08 [PATCH 1/2] gspca_sonixj: add hardware vertical flip support for hama AC-150 Németh Márton
@ 2010-10-18 10:44 ` Jean-Francois Moine
  2010-10-18 19:47   ` Németh Márton
  0 siblings, 1 reply; 3+ messages in thread
From: Jean-Francois Moine @ 2010-10-18 10:44 UTC (permalink / raw)
  To: Németh Márton; +Cc: V4L Mailing List

[-- Attachment #1: Type: text/plain, Size: 542 bytes --]

On Sun, 17 Oct 2010 13:08:01 +0200
Németh Márton <nm127@freemail.hu> wrote:

> The PO2030N sensor chip found in hama AC-150 webcam supports vertical
> flipping the image by hardware. Add support for this in the
> gspca_sonixj driver also.
	[snip]

Hi Németh,

The driver sonixj has changed in staging/2.6.37. I join a new version
of your patches. May you check it? (when acked, I'll keep you as the
author of the change)

Cheers.

-- 
Ken ar c'hentañ	|	      ** Breizh ha Linux atav! **
Jef		|		http://moinejf.free.fr/

[-- Attachment #2: patch.pat --]
[-- Type: application/octet-stream, Size: 4592 bytes --]

diff --git a/drivers/media/video/gspca/sonixj.c b/drivers/media/video/gspca/sonixj.c
index 2105ecb..1b651e3 100644
--- a/drivers/media/video/gspca/sonixj.c
+++ b/drivers/media/video/gspca/sonixj.c
@@ -40,6 +40,7 @@ enum e_ctrl {
 	RED,
 	GAMMA,
 	AUTOGAIN,
+	HFLIP,
 	VFLIP,
 	SHARPNESS,
 	INFRARED,
@@ -102,7 +103,7 @@ static void setcolors(struct gspca_dev *gspca_dev);
 static void setredblue(struct gspca_dev *gspca_dev);
 static void setgamma(struct gspca_dev *gspca_dev);
 static void setautogain(struct gspca_dev *gspca_dev);
-static void setvflip(struct gspca_dev *gspca_dev);
+static void sethvflip(struct gspca_dev *gspca_dev);
 static void setsharpness(struct gspca_dev *gspca_dev);
 static void setinfrared(struct gspca_dev *gspca_dev);
 static void setfreq(struct gspca_dev *gspca_dev);
@@ -195,7 +196,18 @@ static const struct ctrl sd_ctrls[NCTRLS] = {
 	    },
 	    .set_control = setautogain
 	},
-/* ov7630/ov7648 only */
+[HFLIP] = {
+	    {
+		.id      = V4L2_CID_VFLIP,
+		.type    = V4L2_CTRL_TYPE_BOOLEAN,
+		.name    = "Mirror",
+		.minimum = 0,
+		.maximum = 1,
+		.step    = 1,
+		.default_value = 0,
+	    },
+	    .set_control = sethvflip
+	},
 [VFLIP] = {
 	    {
 		.id      = V4L2_CID_VFLIP,
@@ -206,7 +218,7 @@ static const struct ctrl sd_ctrls[NCTRLS] = {
 		.step    = 1,
 		.default_value = 0,
 	    },
-	    .set_control = setvflip
+	    .set_control = sethvflip
 	},
 [SHARPNESS] = {
 	    {
@@ -252,59 +264,72 @@ static const struct ctrl sd_ctrls[NCTRLS] = {
 static const __u32 ctrl_dis[] = {
 [SENSOR_ADCM1700] =	(1 << AUTOGAIN) |
 			(1 << INFRARED) |
+			(1 << HFLIP) |
 			(1 << VFLIP) |
 			(1 << FREQ),
 
 [SENSOR_GC0307] =	(1 << INFRARED) |
+			(1 << HFLIP) |
 			(1 << VFLIP) |
 			(1 << FREQ),
 
 [SENSOR_HV7131R] =	(1 << INFRARED) |
+			(1 << HFLIP) |
 			(1 << FREQ),
 
 [SENSOR_MI0360] =	(1 << INFRARED) |
+			(1 << HFLIP) |
 			(1 << VFLIP) |
 			(1 << FREQ),
 
 [SENSOR_MI0360B] =	(1 << INFRARED) |
+			(1 << HFLIP) |
 			(1 << VFLIP) |
 			(1 << FREQ),
 
 [SENSOR_MO4000] =	(1 << INFRARED) |
+			(1 << HFLIP) |
 			(1 << VFLIP) |
 			(1 << FREQ),
 
-[SENSOR_MT9V111] =	(1 << VFLIP) |
+[SENSOR_MT9V111] =	(1 << HFLIP) |
+			(1 << VFLIP) |
 			(1 << FREQ),
 
 [SENSOR_OM6802] =	(1 << INFRARED) |
+			(1 << HFLIP) |
 			(1 << VFLIP) |
 			(1 << FREQ),
 
-[SENSOR_OV7630] =	(1 << INFRARED),
+[SENSOR_OV7630] =	(1 << INFRARED) |
+			(1 << HFLIP),
 
-[SENSOR_OV7648] =	(1 << INFRARED),
+[SENSOR_OV7648] =	(1 << INFRARED) |
+			(1 << HFLIP),
 
 [SENSOR_OV7660] =	(1 << AUTOGAIN) |
 			(1 << INFRARED) |
+			(1 << HFLIP) |
 			(1 << VFLIP),
 
 [SENSOR_PO1030] =	(1 << AUTOGAIN) |
 			(1 << INFRARED) |
+			(1 << HFLIP) |
 			(1 << VFLIP) |
 			(1 << FREQ),
 
 [SENSOR_PO2030N] =	(1 << AUTOGAIN) |
 			(1 << INFRARED) |
-			(1 << VFLIP) |
 			(1 << FREQ),
 [SENSOR_SOI768] =	(1 << AUTOGAIN) |
 			(1 << INFRARED) |
+			(1 << HFLIP) |
 			(1 << VFLIP) |
 			(1 << FREQ),
 
 [SENSOR_SP80708] =	(1 << AUTOGAIN) |
 			(1 << INFRARED) |
+			(1 << HFLIP) |
 			(1 << VFLIP) |
 			(1 << FREQ),
 };
@@ -2238,14 +2263,11 @@ static void setautogain(struct gspca_dev *gspca_dev)
 		sd->ag_cnt = -1;
 }
 
-/* hv7131r/ov7630/ov7648 only */
-static void setvflip(struct gspca_dev *gspca_dev)
+static void sethvflip(struct gspca_dev *gspca_dev)
 {
 	struct sd *sd = (struct sd *) gspca_dev;
 	u8 comn;
 
-	if (gspca_dev->ctrl_dis & (1 << VFLIP))
-		return;
 	switch (sd->sensor) {
 	case SENSOR_HV7131R:
 		comn = 0x18;			/* clkdiv = 1, ablcen = 1 */
@@ -2259,13 +2281,28 @@ static void setvflip(struct gspca_dev *gspca_dev)
 			comn |= 0x80;
 		i2c_w1(gspca_dev, 0x75, comn);
 		break;
-	default:
-/*	case SENSOR_OV7648: */
+	case SENSOR_OV7648:
 		comn = 0x06;
 		if (sd->ctrls[VFLIP].val)
 			comn |= 0x80;
 		i2c_w1(gspca_dev, 0x75, comn);
 		break;
+	case SENSOR_PO2030N:
+		/* Reg. 0x1E: Timing Generator Control Register 2 (Tgcontrol2)
+		 * (reset value: 0x0A)
+		 * bit7: HM: Horizontal Mirror: 0: disable, 1: enable
+		 * bit6: VM: Vertical Mirror: 0: disable, 1: enable
+		 * bit5: ST: Shutter Selection: 0: electrical, 1: mechanical
+		 * bit4: FT: Single Frame Transfer: 0: disable, 1: enable
+		 * bit3-0: X
+		 */
+		comn = 0x0a;
+		if (sd->ctrls[HFLIP].val)
+			comn |= 0x80;
+		if (sd->ctrls[VFLIP].val)
+			comn |= 0x40;
+		i2c_w1(&sd->gspca_dev, 0x1e, comn);
+		break;
 	}
 }
 
@@ -2652,7 +2689,7 @@ static int sd_start(struct gspca_dev *gspca_dev)
 	reg_w1(gspca_dev, 0x17, reg17);
 	reg_w1(gspca_dev, 0x01, reg1);
 
-	setvflip(gspca_dev);
+	sethvflip(gspca_dev);
 	setbrightness(gspca_dev);
 	setcontrast(gspca_dev);
 	setcolors(gspca_dev);

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH 1/2] gspca_sonixj: add hardware vertical flip support for hama AC-150
  2010-10-18 10:44 ` Jean-Francois Moine
@ 2010-10-18 19:47   ` Németh Márton
  0 siblings, 0 replies; 3+ messages in thread
From: Németh Márton @ 2010-10-18 19:47 UTC (permalink / raw)
  To: Jean-Francois Moine; +Cc: V4L Mailing List

Hi Jean-Francois,

Jean-Francois Moine wrote:
> On Sun, 17 Oct 2010 13:08:01 +0200
> Németh Márton <nm127@freemail.hu> wrote:
> 
>> The PO2030N sensor chip found in hama AC-150 webcam supports vertical
>> flipping the image by hardware. Add support for this in the
>> gspca_sonixj driver also.
> 	[snip]
> The driver sonixj has changed in staging/2.6.37. I join a new version
> of your patches. May you check it? (when acked, I'll keep you as the
> author of the change)

Looks good. It was a bit tricky for me sometimes to understand the changes
together with the "V4L/DVB: gspca - main: New video control mechanism"
(commit ccbfd092a4199a6fba17273c11c1e0b340d91eb5), but still looks good.

One small thing: the title of the patch shall be changed because this
version contains horizontal and vertical flip also.

Note that I could not run the new driver, yet, together with hama AC-150,
but I hope you could already try whether the new feature is working correctly.

	Márton Németh


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-10-18 19:47 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-10-17 11:08 [PATCH 1/2] gspca_sonixj: add hardware vertical flip support for hama AC-150 Németh Márton
2010-10-18 10:44 ` Jean-Francois Moine
2010-10-18 19:47   ` Németh Márton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox