summaryrefslogtreecommitdiffstats
path: root/drivers/media/video/gspca/spca561.c
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2012-07-02 15:29:56 -0300
committerMauro Carvalho Chehab <mchehab@redhat.com>2012-07-30 18:41:06 -0300
commita8931d5948cdd55f899f107c61f375d34a580304 (patch)
treef04260cc2e13c4aaf499492279d0b3e6e6fea264 /drivers/media/video/gspca/spca561.c
parent9a3dafe43125e88a8a365a1fe81fdd8df0eb5eee (diff)
downloadlinux-a8931d5948cdd55f899f107c61f375d34a580304.tar.bz2
[media] gscpa_spca561: Add brightness control for rev12a cams
Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/gspca/spca561.c')
-rw-r--r--drivers/media/video/gspca/spca561.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/drivers/media/video/gspca/spca561.c b/drivers/media/video/gspca/spca561.c
index 7ea5e9112b2f..cfe71dd6747d 100644
--- a/drivers/media/video/gspca/spca561.c
+++ b/drivers/media/video/gspca/spca561.c
@@ -463,16 +463,21 @@ static int sd_init_72a(struct gspca_dev *gspca_dev)
return 0;
}
-/* rev 72a only */
static void setbrightness(struct gspca_dev *gspca_dev, s32 val)
{
+ struct sd *sd = (struct sd *) gspca_dev;
struct usb_device *dev = gspca_dev->dev;
+ __u16 reg;
- /* offsets for white balance */
- reg_w_val(dev, 0x8611, val); /* R */
- reg_w_val(dev, 0x8612, val); /* Gr */
- reg_w_val(dev, 0x8613, val); /* B */
- reg_w_val(dev, 0x8614, val); /* Gb */
+ if (sd->chip_revision == Rev012A)
+ reg = 0x8610;
+ else
+ reg = 0x8611;
+
+ reg_w_val(dev, reg + 0, val); /* R */
+ reg_w_val(dev, reg + 1, val); /* Gr */
+ reg_w_val(dev, reg + 2, val); /* B */
+ reg_w_val(dev, reg + 3, val); /* Gb */
}
static void setwhite(struct gspca_dev *gspca_dev, s32 white, s32 contrast)
@@ -815,6 +820,8 @@ static int sd_init_controls_12a(struct gspca_dev *gspca_dev)
v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
V4L2_CID_HUE, 1, 0x7f, 1, 0x40);
v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
+ V4L2_CID_BRIGHTNESS, -128, 127, 1, 0);
+ v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
V4L2_CID_EXPOSURE, 1, EXPOSURE_MAX, 1, 700);
v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
V4L2_CID_GAIN, 0, 255, 1, 63);