Skip to content

Commit

Permalink
V4L/DVB: gspca_cpia1: Add basic v4l2 illuminator controls for the Int…
Browse files Browse the repository at this point in the history
…el Play QX3

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

Signed-off-by: Andy Walls <awalls@md.metrocast.net>
Acked-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Jean-François Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Andy Walls authored and Mauro Carvalho Chehab committed Oct 21, 2010
1 parent 008d35f commit 5151335
Showing 1 changed file with 98 additions and 2 deletions.
100 changes: 98 additions & 2 deletions drivers/media/video/gspca/cpia1.c
Original file line number Diff line number Diff line change
Expand Up @@ -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[] = {
{
Expand Down Expand Up @@ -432,6 +436,34 @@ static const struct ctrl sd_ctrls[] = {
.set = sd_setfreq,
.get = sd_getfreq,
},
{
{
.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
Expand Down Expand Up @@ -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;
Expand All @@ -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)
{
Expand Down Expand Up @@ -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)
{
Expand Down

0 comments on commit 5151335

Please sign in to comment.