mirror of https://gitee.com/openkylin/linux.git
V4L/DVB: gspca - t613: Cleanup and clarify the source
Signed-off-by: Jean-François Moine <moinejf@free.fr> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
a9dfc01d20
commit
cd8955b85e
|
@ -1,5 +1,7 @@
|
|||
/*
|
||||
* V4L2 by Jean-Francois Moine <http://moinejf.free.fr>
|
||||
* T613 subdriver
|
||||
*
|
||||
* Copyright (C) 2010 Jean-Francois Moine (http://moinejf.free.fr)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -47,15 +49,17 @@ struct sd {
|
|||
u8 red_balance; /* split balance */
|
||||
u8 blue_balance;
|
||||
u8 global_gain; /* aka gain */
|
||||
u8 whitebalance; /* set default r/g/b and activate */
|
||||
u8 awb; /* set default r/g/b and activate */
|
||||
u8 mirror;
|
||||
u8 effect;
|
||||
|
||||
u8 sensor;
|
||||
#define SENSOR_OM6802 0
|
||||
#define SENSOR_OTHER 1
|
||||
#define SENSOR_TAS5130A 2
|
||||
#define SENSOR_LT168G 3 /* must verify if this is the actual model */
|
||||
enum {
|
||||
SENSOR_OM6802,
|
||||
SENSOR_OTHER,
|
||||
SENSOR_TAS5130A,
|
||||
SENSOR_LT168G, /* must verify if this is the actual model */
|
||||
} sensors;
|
||||
};
|
||||
|
||||
/* V4L2 controls supported by the driver */
|
||||
|
@ -74,9 +78,8 @@ static int sd_getsharpness(struct gspca_dev *gspca_dev, __s32 *val);
|
|||
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_setwhitebalance(struct gspca_dev *gspca_dev, __s32 val);
|
||||
static int sd_getwhitebalance(struct gspca_dev *gspca_dev, __s32 *val);
|
||||
static int sd_setawb(struct gspca_dev *gspca_dev, __s32 val);
|
||||
static int sd_getawb(struct gspca_dev *gspca_dev, __s32 *val);
|
||||
static int sd_setblue_balance(struct gspca_dev *gspca_dev, __s32 val);
|
||||
static int sd_getblue_balance(struct gspca_dev *gspca_dev, __s32 *val);
|
||||
static int sd_setred_balance(struct gspca_dev *gspca_dev, __s32 val);
|
||||
|
@ -84,14 +87,13 @@ static int sd_getred_balance(struct gspca_dev *gspca_dev, __s32 *val);
|
|||
static int sd_setglobal_gain(struct gspca_dev *gspca_dev, __s32 val);
|
||||
static int sd_getglobal_gain(struct gspca_dev *gspca_dev, __s32 *val);
|
||||
|
||||
static int sd_setflip(struct gspca_dev *gspca_dev, __s32 val);
|
||||
static int sd_getflip(struct gspca_dev *gspca_dev, __s32 *val);
|
||||
static int sd_setmirror(struct gspca_dev *gspca_dev, __s32 val);
|
||||
static int sd_getmirror(struct gspca_dev *gspca_dev, __s32 *val);
|
||||
static int sd_seteffect(struct gspca_dev *gspca_dev, __s32 val);
|
||||
static int sd_geteffect(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[] = {
|
||||
{
|
||||
{
|
||||
|
@ -177,8 +179,8 @@ static const struct ctrl sd_ctrls[] = {
|
|||
#define MIRROR_DEF 0
|
||||
.default_value = MIRROR_DEF,
|
||||
},
|
||||
.set = sd_setflip,
|
||||
.get = sd_getflip
|
||||
.set = sd_setmirror,
|
||||
.get = sd_getmirror
|
||||
},
|
||||
{
|
||||
{
|
||||
|
@ -198,15 +200,15 @@ static const struct ctrl sd_ctrls[] = {
|
|||
{
|
||||
.id = V4L2_CID_AUTO_WHITE_BALANCE,
|
||||
.type = V4L2_CTRL_TYPE_INTEGER,
|
||||
.name = "White Balance",
|
||||
.name = "Auto White Balance",
|
||||
.minimum = 0,
|
||||
.maximum = 1,
|
||||
.step = 1,
|
||||
#define WHITE_BALANCE_DEF 0
|
||||
.default_value = WHITE_BALANCE_DEF,
|
||||
#define AWB_DEF 0
|
||||
.default_value = AWB_DEF,
|
||||
},
|
||||
.set = sd_setwhitebalance,
|
||||
.get = sd_getwhitebalance
|
||||
.set = sd_setawb,
|
||||
.get = sd_getawb
|
||||
},
|
||||
{
|
||||
{
|
||||
|
@ -280,16 +282,6 @@ static const struct ctrl sd_ctrls[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static char *effects_control[] = {
|
||||
"Normal",
|
||||
"Emboss", /* disabled */
|
||||
"Monochrome",
|
||||
"Sepia",
|
||||
"Sketch",
|
||||
"Sun Effect", /* disabled */
|
||||
"Negative",
|
||||
};
|
||||
|
||||
static const struct v4l2_pix_format vga_mode_t16[] = {
|
||||
{160, 120, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
|
||||
.bytesperline = 160,
|
||||
|
@ -375,7 +367,7 @@ static const u8 n4_lt168g[] = {
|
|||
};
|
||||
|
||||
static const struct additional_sensor_data sensor_data[] = {
|
||||
{ /* 0: OM6802 */
|
||||
[SENSOR_OM6802] = {
|
||||
.n3 =
|
||||
{0x61, 0x68, 0x65, 0x0a, 0x60, 0x04},
|
||||
.n4 = n4_om6802,
|
||||
|
@ -399,7 +391,7 @@ static const struct additional_sensor_data sensor_data[] = {
|
|||
.stream =
|
||||
{0x0b, 0x04, 0x0a, 0x78},
|
||||
},
|
||||
{ /* 1: OTHER */
|
||||
[SENSOR_OTHER] = {
|
||||
.n3 =
|
||||
{0x61, 0xc2, 0x65, 0x88, 0x60, 0x00},
|
||||
.n4 = n4_other,
|
||||
|
@ -423,7 +415,7 @@ static const struct additional_sensor_data sensor_data[] = {
|
|||
.stream =
|
||||
{0x0b, 0x04, 0x0a, 0x00},
|
||||
},
|
||||
{ /* 2: TAS5130A */
|
||||
[SENSOR_TAS5130A] = {
|
||||
.n3 =
|
||||
{0x61, 0xc2, 0x65, 0x0d, 0x60, 0x08},
|
||||
.n4 = n4_tas5130a,
|
||||
|
@ -447,7 +439,7 @@ static const struct additional_sensor_data sensor_data[] = {
|
|||
.stream =
|
||||
{0x0b, 0x04, 0x0a, 0x40},
|
||||
},
|
||||
{ /* 3: LT168G */
|
||||
[SENSOR_LT168G] = {
|
||||
.n3 = {0x61, 0xc2, 0x65, 0x68, 0x60, 0x00},
|
||||
.n4 = n4_lt168g,
|
||||
.n4sz = sizeof n4_lt168g,
|
||||
|
@ -469,6 +461,15 @@ static const struct additional_sensor_data sensor_data[] = {
|
|||
#define MAX_EFFECTS 7
|
||||
/* easily done by soft, this table could be removed,
|
||||
* i keep it here just in case */
|
||||
static char *effects_control[MAX_EFFECTS] = {
|
||||
"Normal",
|
||||
"Emboss", /* disabled */
|
||||
"Monochrome",
|
||||
"Sepia",
|
||||
"Sketch",
|
||||
"Sun Effect", /* disabled */
|
||||
"Negative",
|
||||
};
|
||||
static const u8 effects_table[MAX_EFFECTS][6] = {
|
||||
{0xa8, 0xe8, 0xc6, 0xd2, 0xc0, 0x00}, /* Normal */
|
||||
{0xa8, 0xc8, 0xc6, 0x52, 0xc0, 0x04}, /* Repujar */
|
||||
|
@ -625,7 +626,6 @@ static void reg_w_ixbuf(struct gspca_dev *gspca_dev,
|
|||
kfree(tmpbuf);
|
||||
}
|
||||
|
||||
/* Reported as OM6802*/
|
||||
static void om6802_sensor_init(struct gspca_dev *gspca_dev)
|
||||
{
|
||||
int i;
|
||||
|
@ -703,7 +703,7 @@ static int sd_config(struct gspca_dev *gspca_dev,
|
|||
sd->autogain = AUTOGAIN_DEF;
|
||||
sd->mirror = MIRROR_DEF;
|
||||
sd->freq = FREQ_DEF;
|
||||
sd->whitebalance = WHITE_BALANCE_DEF;
|
||||
sd->awb = AWB_DEF;
|
||||
sd->sharpness = SHARPNESS_DEF;
|
||||
sd->effect = EFFECTS_DEF;
|
||||
sd->red_balance = RED_BALANCE_DEF;
|
||||
|
@ -771,12 +771,12 @@ static void setglobalgain(struct gspca_dev *gspca_dev)
|
|||
}
|
||||
|
||||
/* Generic fnc for r/b balance, exposure and whitebalance */
|
||||
static void setbalance(struct gspca_dev *gspca_dev)
|
||||
static void setawb(struct gspca_dev *gspca_dev)
|
||||
{
|
||||
struct sd *sd = (struct sd *) gspca_dev;
|
||||
|
||||
/* on whitebalance leave defaults values */
|
||||
if (sd->whitebalance) {
|
||||
/* on awb leave defaults values */
|
||||
if (sd->awb) {
|
||||
reg_w(gspca_dev, 0x3c80);
|
||||
} else {
|
||||
reg_w(gspca_dev, 0x3880);
|
||||
|
@ -790,13 +790,6 @@ static void setbalance(struct gspca_dev *gspca_dev)
|
|||
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void setwhitebalance(struct gspca_dev *gspca_dev)
|
||||
{
|
||||
setbalance(gspca_dev);
|
||||
}
|
||||
|
||||
static void setsharpness(struct gspca_dev *gspca_dev)
|
||||
{
|
||||
struct sd *sd = (struct sd *) gspca_dev;
|
||||
|
@ -901,7 +894,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
|
|||
setgamma(gspca_dev);
|
||||
setcolors(gspca_dev);
|
||||
setsharpness(gspca_dev);
|
||||
setwhitebalance(gspca_dev);
|
||||
setawb(gspca_dev);
|
||||
|
||||
reg_w(gspca_dev, 0x2087); /* tied to white balance? */
|
||||
reg_w(gspca_dev, 0x2088);
|
||||
|
@ -926,16 +919,16 @@ static int sd_init(struct gspca_dev *gspca_dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void setflip(struct gspca_dev *gspca_dev)
|
||||
static void setmirror(struct gspca_dev *gspca_dev)
|
||||
{
|
||||
struct sd *sd = (struct sd *) gspca_dev;
|
||||
u8 flipcmd[8] =
|
||||
u8 hflipcmd[8] =
|
||||
{0x62, 0x07, 0x63, 0x03, 0x64, 0x00, 0x60, 0x09};
|
||||
|
||||
if (sd->mirror)
|
||||
flipcmd[3] = 0x01;
|
||||
hflipcmd[3] = 0x01;
|
||||
|
||||
reg_w_buf(gspca_dev, flipcmd, sizeof flipcmd);
|
||||
reg_w_buf(gspca_dev, hflipcmd, sizeof hflipcmd);
|
||||
}
|
||||
|
||||
static void seteffect(struct gspca_dev *gspca_dev)
|
||||
|
@ -1025,12 +1018,7 @@ static int sd_start(struct gspca_dev *gspca_dev)
|
|||
case SENSOR_OM6802:
|
||||
om6802_sensor_init(gspca_dev);
|
||||
break;
|
||||
case SENSOR_LT168G:
|
||||
break;
|
||||
case SENSOR_OTHER:
|
||||
break;
|
||||
default:
|
||||
/* case SENSOR_TAS5130A: */
|
||||
case SENSOR_TAS5130A:
|
||||
i = 0;
|
||||
for (;;) {
|
||||
reg_w_buf(gspca_dev, tas5130a_sensor_init[i],
|
||||
|
@ -1167,7 +1155,6 @@ static int sd_getglobal_gain(struct gspca_dev *gspca_dev, __s32 *val)
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val)
|
||||
{
|
||||
struct sd *sd = (struct sd *) gspca_dev;
|
||||
|
@ -1186,35 +1173,35 @@ static int sd_getbrightness(struct gspca_dev *gspca_dev, __s32 *val)
|
|||
return *val;
|
||||
}
|
||||
|
||||
static int sd_setwhitebalance(struct gspca_dev *gspca_dev, __s32 val)
|
||||
static int sd_setawb(struct gspca_dev *gspca_dev, __s32 val)
|
||||
{
|
||||
struct sd *sd = (struct sd *) gspca_dev;
|
||||
|
||||
sd->whitebalance = val;
|
||||
sd->awb = val;
|
||||
if (gspca_dev->streaming)
|
||||
setwhitebalance(gspca_dev);
|
||||
setawb(gspca_dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sd_getwhitebalance(struct gspca_dev *gspca_dev, __s32 *val)
|
||||
static int sd_getawb(struct gspca_dev *gspca_dev, __s32 *val)
|
||||
{
|
||||
struct sd *sd = (struct sd *) gspca_dev;
|
||||
|
||||
*val = sd->whitebalance;
|
||||
*val = sd->awb;
|
||||
return *val;
|
||||
}
|
||||
|
||||
static int sd_setflip(struct gspca_dev *gspca_dev, __s32 val)
|
||||
static int sd_setmirror(struct gspca_dev *gspca_dev, __s32 val)
|
||||
{
|
||||
struct sd *sd = (struct sd *) gspca_dev;
|
||||
|
||||
sd->mirror = val;
|
||||
if (gspca_dev->streaming)
|
||||
setflip(gspca_dev);
|
||||
setmirror(gspca_dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sd_getflip(struct gspca_dev *gspca_dev, __s32 *val)
|
||||
static int sd_getmirror(struct gspca_dev *gspca_dev, __s32 *val)
|
||||
{
|
||||
struct sd *sd = (struct sd *) gspca_dev;
|
||||
|
||||
|
@ -1300,7 +1287,7 @@ static int sd_setfreq(struct gspca_dev *gspca_dev, __s32 val)
|
|||
|
||||
sd->freq = val;
|
||||
if (gspca_dev->streaming)
|
||||
setlightfreq(gspca_dev);
|
||||
setfreq(gspca_dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1368,7 +1355,8 @@ static int sd_querymenu(struct gspca_dev *gspca_dev,
|
|||
case V4L2_CID_EFFECTS:
|
||||
if ((unsigned) menu->index < ARRAY_SIZE(effects_control)) {
|
||||
strncpy((char *) menu->name,
|
||||
effects_control[menu->index], 32);
|
||||
effects_control[menu->index],
|
||||
sizeof menu->name);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue