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

Subject: V4L/DVB: gspca_cpia1: Add basic v4l2 illuminator controls for the 
Intel Play QX3
Author:  Andy Walls <awa...@md.metrocast.net>
Date:    Sun Sep 12 14:45:14 2010 -0300

This patch adds basic V4L2 controls for the illuminators on the Intel
Play QX3 microscope.

Signed-off-by: Andy Walls <awa...@md.metrocast.net>
Acked-by: Hans de Goede <hdego...@redhat.com>
Signed-off-by: Jean-François Moine <moin...@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mche...@redhat.com>

 drivers/media/video/gspca/cpia1.c |  100 ++++++++++++++++++++++++++++++++++++-
 1 files changed, 98 insertions(+), 2 deletions(-)

---

http://git.linuxtv.org/media-tree.git?a=commitdiff;h=d615dd0bd2f756d35a1d1762ca8c40372de5adff

diff --git a/drivers/media/video/gspca/cpia1.c 
b/drivers/media/video/gspca/cpia1.c
index c56bf0f..a9a4074 100644
--- a/drivers/media/video/gspca/cpia1.c
+++ b/drivers/media/video/gspca/cpia1.c
@@ -373,6 +373,10 @@ static int sd_setfreq(struct gspca_dev *gspca_dev, __s32 
val);
 static int sd_getfreq(struct gspca_dev *gspca_dev, __s32 *val);
 static int sd_setcomptarget(struct gspca_dev *gspca_dev, __s32 val);
 static int sd_getcomptarget(struct gspca_dev *gspca_dev, __s32 *val);
+static int sd_setilluminator1(struct gspca_dev *gspca_dev, __s32 val);
+static int sd_getilluminator1(struct gspca_dev *gspca_dev, __s32 *val);
+static int sd_setilluminator2(struct gspca_dev *gspca_dev, __s32 val);
+static int sd_getilluminator2(struct gspca_dev *gspca_dev, __s32 *val);
 
 static const struct ctrl sd_ctrls[] = {
        {
@@ -434,6 +438,34 @@ static const struct ctrl sd_ctrls[] = {
        },
        {
                {
+                       .id      = V4L2_CID_ILLUMINATORS_1,
+                       .type    = V4L2_CTRL_TYPE_BOOLEAN,
+                       .name    = "Illuminator 1",
+                       .minimum = 0,
+                       .maximum = 1,
+                       .step    = 1,
+#define ILLUMINATORS_1_DEF 0
+                       .default_value = ILLUMINATORS_1_DEF,
+               },
+               .set = sd_setilluminator1,
+               .get = sd_getilluminator1,
+       },
+       {
+               {
+                       .id      = V4L2_CID_ILLUMINATORS_2,
+                       .type    = V4L2_CTRL_TYPE_BOOLEAN,
+                       .name    = "Illuminator 2",
+                       .minimum = 0,
+                       .maximum = 1,
+                       .step    = 1,
+#define ILLUMINATORS_2_DEF 0
+                       .default_value = ILLUMINATORS_2_DEF,
+               },
+               .set = sd_setilluminator2,
+               .get = sd_getilluminator2,
+       },
+       {
+               {
 #define V4L2_CID_COMP_TARGET V4L2_CID_PRIVATE_BASE
                        .id      = V4L2_CID_COMP_TARGET,
                        .type    = V4L2_CTRL_TYPE_MENU,
@@ -1059,7 +1091,6 @@ static int command_resume(struct gspca_dev *gspca_dev)
                          0, sd->params.streamStartLine, 0, 0);
 }
 
-#if 0 /* Currently unused */
 static int command_setlights(struct gspca_dev *gspca_dev)
 {
        struct sd *sd = (struct sd *) gspca_dev;
@@ -1079,7 +1110,6 @@ static int command_setlights(struct gspca_dev *gspca_dev)
        return do_command(gspca_dev, CPIA_COMMAND_WriteMCPort, 2, 0,
                          p1 | p2 | 0xE0, 0);
 }
-#endif
 
 static int set_flicker(struct gspca_dev *gspca_dev, int on, int apply)
 {
@@ -1929,6 +1959,72 @@ static int sd_getcomptarget(struct gspca_dev *gspca_dev, 
__s32 *val)
        return 0;
 }
 
+static int sd_setilluminator(struct gspca_dev *gspca_dev, __s32 val, int n)
+{
+       struct sd *sd = (struct sd *) gspca_dev;
+       int ret;
+
+       if (!sd->params.qx3.qx3_detected)
+               return -EINVAL;
+
+       switch (n) {
+       case 1:
+               sd->params.qx3.bottomlight = val ? 1 : 0;
+               break;
+       case 2:
+               sd->params.qx3.toplight = val ? 1 : 0;
+               break;
+       default:
+               return -EINVAL;
+       }
+
+       ret = command_setlights(gspca_dev);
+       if (ret && ret != -EINVAL)
+               ret = -EBUSY;
+
+       return ret;
+}
+
+static int sd_setilluminator1(struct gspca_dev *gspca_dev, __s32 val)
+{
+       return sd_setilluminator(gspca_dev, val, 1);
+}
+
+static int sd_setilluminator2(struct gspca_dev *gspca_dev, __s32 val)
+{
+       return sd_setilluminator(gspca_dev, val, 2);
+}
+
+static int sd_getilluminator(struct gspca_dev *gspca_dev, __s32 *val, int n)
+{
+       struct sd *sd = (struct sd *) gspca_dev;
+
+       if (!sd->params.qx3.qx3_detected)
+               return -EINVAL;
+
+       switch (n) {
+       case 1:
+               *val = sd->params.qx3.bottomlight;
+               break;
+       case 2:
+               *val = sd->params.qx3.toplight;
+               break;
+       default:
+               return -EINVAL;
+       }
+       return 0;
+}
+
+static int sd_getilluminator1(struct gspca_dev *gspca_dev, __s32 *val)
+{
+       return sd_getilluminator(gspca_dev, val, 1);
+}
+
+static int sd_getilluminator2(struct gspca_dev *gspca_dev, __s32 *val)
+{
+       return sd_getilluminator(gspca_dev, val, 2);
+}
+
 static int sd_querymenu(struct gspca_dev *gspca_dev,
                        struct v4l2_querymenu *menu)
 {

_______________________________________________
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to