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_tv8532: add gain control
Author:  Hans de Goede <[email protected]>
Date:    Wed May 12 06:58:00 2010 -0300

gspca_tv8532: add gain control

Signed-off-by: Hans de Goede <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>

 drivers/media/video/gspca/tv8532.c |   55 ++++++++++++++++++++++++++++++++++++
 1 files changed, 55 insertions(+), 0 deletions(-)

---

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

diff --git a/drivers/media/video/gspca/tv8532.c 
b/drivers/media/video/gspca/tv8532.c
index 2316838..420dde9 100644
--- a/drivers/media/video/gspca/tv8532.c
+++ b/drivers/media/video/gspca/tv8532.c
@@ -31,6 +31,7 @@ struct sd {
        struct gspca_dev gspca_dev;     /* !! must be the first item */
 
        __u16 brightness;
+       __u16 gain;
 
        __u8 packet;
 };
@@ -38,6 +39,8 @@ struct sd {
 /* V4L2 controls supported by the driver */
 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_setgain(struct gspca_dev *gspca_dev, __s32 val);
+static int sd_getgain(struct gspca_dev *gspca_dev, __s32 *val);
 
 static const struct ctrl sd_ctrls[] = {
        {
@@ -54,6 +57,20 @@ static const struct ctrl sd_ctrls[] = {
         .set = sd_setbrightness,
         .get = sd_getbrightness,
         },
+       {
+        {
+         .id = V4L2_CID_GAIN,
+         .type = V4L2_CTRL_TYPE_INTEGER,
+         .name = "Gain",
+         .minimum = 0,
+         .maximum = 0x7ff,
+         .step = 1,
+#define GAIN_DEF 0x100
+         .default_value = GAIN_DEF,
+         },
+        .set = sd_setgain,
+        .get = sd_getgain,
+        },
 };
 
 static const struct v4l2_pix_format sif_mode[] = {
@@ -92,6 +109,14 @@ static const struct v4l2_pix_format sif_mode[] = {
 #define R14_AD_ROW_BEGINL 0x14
 #define R15_AD_ROWBEGINH  0x15
 #define R1C_AD_EXPOSE_TIMEL 0x1c
+#define R20_GAIN_G1L   0x20
+#define R21_GAIN_G1H   0x21
+#define R22_GAIN_RL    0x22
+#define R23_GAIN_RH    0x23
+#define R24_GAIN_BL    0x24
+#define R25_GAIN_BH    0x25
+#define R26_GAIN_G2L   0x26
+#define R27_GAIN_G2H   0x27
 #define R28_QUANT      0x28
 #define R29_LINE       0x29
 #define R2C_POLARITY   0x2c
@@ -185,6 +210,7 @@ static int sd_config(struct gspca_dev *gspca_dev,
        cam->nmodes = ARRAY_SIZE(sif_mode);
 
        sd->brightness = BRIGHTNESS_DEF;
+       sd->gain = GAIN_DEF;
        return 0;
 }
 
@@ -224,6 +250,16 @@ static void setbrightness(struct gspca_dev *gspca_dev)
                                                /* 0x84 */
 }
 
+static void setgain(struct gspca_dev *gspca_dev)
+{
+       struct sd *sd = (struct sd *) gspca_dev;
+
+       reg_w2(gspca_dev, R20_GAIN_G1L, sd->gain);
+       reg_w2(gspca_dev, R22_GAIN_RL, sd->gain);
+       reg_w2(gspca_dev, R24_GAIN_BL, sd->gain);
+       reg_w2(gspca_dev, R26_GAIN_G2L, sd->gain);
+}
+
 /* -- start the camera -- */
 static int sd_start(struct gspca_dev *gspca_dev)
 {
@@ -254,6 +290,7 @@ static int sd_start(struct gspca_dev *gspca_dev)
        tv_8532_setReg(gspca_dev);
 
        setbrightness(gspca_dev);
+       setgain(gspca_dev);
 
        /************************************************/
        reg_w1(gspca_dev, R31_UPD, 0x01);       /* update registers */
@@ -320,6 +357,24 @@ static int sd_getbrightness(struct gspca_dev *gspca_dev, 
__s32 *val)
        return 0;
 }
 
+static int sd_setgain(struct gspca_dev *gspca_dev, __s32 val)
+{
+       struct sd *sd = (struct sd *) gspca_dev;
+
+       sd->gain = val;
+       if (gspca_dev->streaming)
+               setgain(gspca_dev);
+       return 0;
+}
+
+static int sd_getgain(struct gspca_dev *gspca_dev, __s32 *val)
+{
+       struct sd *sd = (struct sd *) gspca_dev;
+
+       *val = sd->gain;
+       return 0;
+}
+
 /* sub-driver description */
 static const struct sd_desc sd_desc = {
        .name = MODULE_NAME,

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

Reply via email to