This is an automatic generated email to let you know that the following patch 
were queued at the 
http://git.linuxtv.org/v4l-dvb.git tree:

Subject: V4L/DVB: gspca - ov534: Add Powerline Frequency control
Author:  Mosalam Ebrahimi <[email protected]>
Date:    Mon Mar 8 13:52:17 2010 -0300

Note that setting this options to 50Hz can reduce the framerate, so it is
still disabled (60Hz) by default.

Signed-off-by: Mosalam Ebrahimi <[email protected]>
Signed-off-by: Antonio Ospite <[email protected]>
Signed-off-by: Jean-François Moine <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>

 drivers/media/video/gspca/ov534.c |   71 ++++++++++++++++++++++++++++++++++++-
 1 files changed, 70 insertions(+), 1 deletions(-)

---

http://git.linuxtv.org/v4l-dvb.git?a=commitdiff;h=9bc3ac54da6a52969088caca9f6acdf682fa8ace

diff --git a/drivers/media/video/gspca/ov534.c 
b/drivers/media/video/gspca/ov534.c
index 8783844..29af17e 100644
--- a/drivers/media/video/gspca/ov534.c
+++ b/drivers/media/video/gspca/ov534.c
@@ -66,7 +66,7 @@ struct sd {
        s8 sharpness;
        u8 hflip;
        u8 vflip;
-
+       u8 freqfltr;
 };
 
 /* V4L2 controls supported by the driver */
@@ -90,6 +90,10 @@ static int sd_setbrightness(struct gspca_dev *gspca_dev, 
__s32 val);
 static int sd_getbrightness(struct gspca_dev *gspca_dev, __s32 *val);
 static int sd_setcontrast(struct gspca_dev *gspca_dev, __s32 val);
 static int sd_getcontrast(struct gspca_dev *gspca_dev, __s32 *val);
+static int sd_setfreqfltr(struct gspca_dev *gspca_dev, __s32 val);
+static int sd_getfreqfltr(struct gspca_dev *gspca_dev, __s32 *val);
+static int sd_querymenu(struct gspca_dev *gspca_dev,
+               struct v4l2_querymenu *menu);
 
 static const struct ctrl sd_ctrls[] = {
        {       /* 0 */
@@ -233,6 +237,20 @@ static const struct ctrl sd_ctrls[] = {
                .set = sd_setvflip,
                .get = sd_getvflip,
        },
+       {       /* 10 */
+               {
+                       .id      = V4L2_CID_POWER_LINE_FREQUENCY,
+                       .type    = V4L2_CTRL_TYPE_MENU,
+                       .name    = "Light Frequency Filter",
+                       .minimum = 0,
+                       .maximum = 1,
+                       .step    = 1,
+#define FREQFLTR_DEF 0
+                       .default_value = FREQFLTR_DEF,
+               },
+               .set = sd_setfreqfltr,
+               .get = sd_getfreqfltr,
+       },
 };
 
 static const struct v4l2_pix_format ov772x_mode[] = {
@@ -784,6 +802,17 @@ static void setvflip(struct gspca_dev *gspca_dev)
                                sccb_reg_read(gspca_dev, 0x0c) & ~0x80);
 }
 
+static void setfreqfltr(struct gspca_dev *gspca_dev)
+{
+       struct sd *sd = (struct sd *) gspca_dev;
+
+       if (sd->freqfltr == 0)
+               sccb_reg_write(gspca_dev, 0x2b, 0x00);
+       else
+               sccb_reg_write(gspca_dev, 0x2b, 0x9e);
+}
+
+
 /* this function is called at probe time */
 static int sd_config(struct gspca_dev *gspca_dev,
                     const struct usb_device_id *id)
@@ -817,6 +846,7 @@ static int sd_config(struct gspca_dev *gspca_dev,
        sd->sharpness = SHARPNESS_DEF;
        sd->hflip = HFLIP_DEF;
        sd->vflip = VFLIP_DEF;
+       sd->freqfltr = FREQFLTR_DEF;
 
        return 0;
 }
@@ -886,6 +916,7 @@ static int sd_start(struct gspca_dev *gspca_dev)
        setsharpness(gspca_dev);
        setvflip(gspca_dev);
        sethflip(gspca_dev);
+       setfreqfltr(gspca_dev);
 
        ov534_set_led(gspca_dev, 1);
        ov534_reg_write(gspca_dev, 0xe0, 0x00);
@@ -1179,6 +1210,43 @@ static int sd_getvflip(struct gspca_dev *gspca_dev, 
__s32 *val)
        return 0;
 }
 
+static int sd_setfreqfltr(struct gspca_dev *gspca_dev, __s32 val)
+{
+       struct sd *sd = (struct sd *) gspca_dev;
+
+       sd->freqfltr = val;
+       if (gspca_dev->streaming)
+               setfreqfltr(gspca_dev);
+       return 0;
+}
+
+static int sd_getfreqfltr(struct gspca_dev *gspca_dev, __s32 *val)
+{
+       struct sd *sd = (struct sd *) gspca_dev;
+
+       *val = sd->freqfltr;
+       return 0;
+}
+
+static int sd_querymenu(struct gspca_dev *gspca_dev,
+               struct v4l2_querymenu *menu)
+{
+       switch (menu->id) {
+       case V4L2_CID_POWER_LINE_FREQUENCY:
+               switch (menu->index) {
+               case 0:         /* V4L2_CID_POWER_LINE_FREQUENCY_DISABLED */
+                       strcpy((char *) menu->name, "Disabled");
+                       return 0;
+               case 1:         /* V4L2_CID_POWER_LINE_FREQUENCY_50HZ */
+                       strcpy((char *) menu->name, "50 Hz");
+                       return 0;
+               }
+               break;
+       }
+
+       return -EINVAL;
+}
+
 /* get stream parameters (framerate) */
 static int sd_get_streamparm(struct gspca_dev *gspca_dev,
                             struct v4l2_streamparm *parm)
@@ -1230,6 +1298,7 @@ static const struct sd_desc sd_desc = {
        .start    = sd_start,
        .stopN    = sd_stopN,
        .pkt_scan = sd_pkt_scan,
+       .querymenu = sd_querymenu,
        .get_streamparm = sd_get_streamparm,
        .set_streamparm = sd_set_streamparm,
 };

_______________________________________________
linuxtv-commits mailing list
[email protected]
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to