aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video
diff options
context:
space:
mode:
authorJean-François Moine <moinejf@free.fr>2010-06-04 06:22:57 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2010-08-02 13:06:13 -0400
commitcd8955b85efd7f460339f0ac8117be9e513a6996 (patch)
treed5525daade40e40f7cd61a4e1316cba5ff9a358e /drivers/media/video
parenta9dfc01d206b3bc807814751cb2b4e0704f4a2f7 (diff)
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>
Diffstat (limited to 'drivers/media/video')
-rw-r--r--drivers/media/video/gspca/t613.c122
1 files changed, 55 insertions, 67 deletions
diff --git a/drivers/media/video/gspca/t613.c b/drivers/media/video/gspca/t613.c
index 63014372adb..abb2b605d57 100644
--- a/drivers/media/video/gspca/t613.c
+++ b/drivers/media/video/gspca/t613.c
@@ -1,5 +1,7 @@
1/* 1/*
2 * V4L2 by Jean-Francois Moine <http://moinejf.free.fr> 2 * T613 subdriver
3 *
4 * Copyright (C) 2010 Jean-Francois Moine (http://moinejf.free.fr)
3 * 5 *
4 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
@@ -47,15 +49,17 @@ struct sd {
47 u8 red_balance; /* split balance */ 49 u8 red_balance; /* split balance */
48 u8 blue_balance; 50 u8 blue_balance;
49 u8 global_gain; /* aka gain */ 51 u8 global_gain; /* aka gain */
50 u8 whitebalance; /* set default r/g/b and activate */ 52 u8 awb; /* set default r/g/b and activate */
51 u8 mirror; 53 u8 mirror;
52 u8 effect; 54 u8 effect;
53 55
54 u8 sensor; 56 u8 sensor;
55#define SENSOR_OM6802 0 57enum {
56#define SENSOR_OTHER 1 58 SENSOR_OM6802,
57#define SENSOR_TAS5130A 2 59 SENSOR_OTHER,
58#define SENSOR_LT168G 3 /* must verify if this is the actual model */ 60 SENSOR_TAS5130A,
61 SENSOR_LT168G, /* must verify if this is the actual model */
62} sensors;
59}; 63};
60 64
61/* V4L2 controls supported by the driver */ 65/* V4L2 controls supported by the driver */
@@ -74,9 +78,8 @@ static int sd_getsharpness(struct gspca_dev *gspca_dev, __s32 *val);
74static int sd_setfreq(struct gspca_dev *gspca_dev, __s32 val); 78static int sd_setfreq(struct gspca_dev *gspca_dev, __s32 val);
75static int sd_getfreq(struct gspca_dev *gspca_dev, __s32 *val); 79static int sd_getfreq(struct gspca_dev *gspca_dev, __s32 *val);
76 80
77 81static int sd_setawb(struct gspca_dev *gspca_dev, __s32 val);
78static int sd_setwhitebalance(struct gspca_dev *gspca_dev, __s32 val); 82static int sd_getawb(struct gspca_dev *gspca_dev, __s32 *val);
79static int sd_getwhitebalance(struct gspca_dev *gspca_dev, __s32 *val);
80static int sd_setblue_balance(struct gspca_dev *gspca_dev, __s32 val); 83static int sd_setblue_balance(struct gspca_dev *gspca_dev, __s32 val);
81static int sd_getblue_balance(struct gspca_dev *gspca_dev, __s32 *val); 84static int sd_getblue_balance(struct gspca_dev *gspca_dev, __s32 *val);
82static int sd_setred_balance(struct gspca_dev *gspca_dev, __s32 val); 85static 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);
84static int sd_setglobal_gain(struct gspca_dev *gspca_dev, __s32 val); 87static int sd_setglobal_gain(struct gspca_dev *gspca_dev, __s32 val);
85static int sd_getglobal_gain(struct gspca_dev *gspca_dev, __s32 *val); 88static int sd_getglobal_gain(struct gspca_dev *gspca_dev, __s32 *val);
86 89
87static int sd_setflip(struct gspca_dev *gspca_dev, __s32 val); 90static int sd_setmirror(struct gspca_dev *gspca_dev, __s32 val);
88static int sd_getflip(struct gspca_dev *gspca_dev, __s32 *val); 91static int sd_getmirror(struct gspca_dev *gspca_dev, __s32 *val);
89static int sd_seteffect(struct gspca_dev *gspca_dev, __s32 val); 92static int sd_seteffect(struct gspca_dev *gspca_dev, __s32 val);
90static int sd_geteffect(struct gspca_dev *gspca_dev, __s32 *val); 93static int sd_geteffect(struct gspca_dev *gspca_dev, __s32 *val);
91static int sd_querymenu(struct gspca_dev *gspca_dev, 94static int sd_querymenu(struct gspca_dev *gspca_dev,
92 struct v4l2_querymenu *menu); 95 struct v4l2_querymenu *menu);
93 96
94
95static const struct ctrl sd_ctrls[] = { 97static const struct ctrl sd_ctrls[] = {
96 { 98 {
97 { 99 {
@@ -177,8 +179,8 @@ static const struct ctrl sd_ctrls[] = {
177#define MIRROR_DEF 0 179#define MIRROR_DEF 0
178 .default_value = MIRROR_DEF, 180 .default_value = MIRROR_DEF,
179 }, 181 },
180 .set = sd_setflip, 182 .set = sd_setmirror,
181 .get = sd_getflip 183 .get = sd_getmirror
182 }, 184 },
183 { 185 {
184 { 186 {
@@ -198,15 +200,15 @@ static const struct ctrl sd_ctrls[] = {
198 { 200 {
199 .id = V4L2_CID_AUTO_WHITE_BALANCE, 201 .id = V4L2_CID_AUTO_WHITE_BALANCE,
200 .type = V4L2_CTRL_TYPE_INTEGER, 202 .type = V4L2_CTRL_TYPE_INTEGER,
201 .name = "White Balance", 203 .name = "Auto White Balance",
202 .minimum = 0, 204 .minimum = 0,
203 .maximum = 1, 205 .maximum = 1,
204 .step = 1, 206 .step = 1,
205#define WHITE_BALANCE_DEF 0 207#define AWB_DEF 0
206 .default_value = WHITE_BALANCE_DEF, 208 .default_value = AWB_DEF,
207 }, 209 },
208 .set = sd_setwhitebalance, 210 .set = sd_setawb,
209 .get = sd_getwhitebalance 211 .get = sd_getawb
210 }, 212 },
211 { 213 {
212 { 214 {
@@ -280,16 +282,6 @@ static const struct ctrl sd_ctrls[] = {
280 }, 282 },
281}; 283};
282 284
283static char *effects_control[] = {
284 "Normal",
285 "Emboss", /* disabled */
286 "Monochrome",
287 "Sepia",
288 "Sketch",
289 "Sun Effect", /* disabled */
290 "Negative",
291};
292
293static const struct v4l2_pix_format vga_mode_t16[] = { 285static const struct v4l2_pix_format vga_mode_t16[] = {
294 {160, 120, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, 286 {160, 120, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
295 .bytesperline = 160, 287 .bytesperline = 160,
@@ -375,7 +367,7 @@ static const u8 n4_lt168g[] = {
375}; 367};
376 368
377static const struct additional_sensor_data sensor_data[] = { 369static const struct additional_sensor_data sensor_data[] = {
378 { /* 0: OM6802 */ 370[SENSOR_OM6802] = {
379 .n3 = 371 .n3 =
380 {0x61, 0x68, 0x65, 0x0a, 0x60, 0x04}, 372 {0x61, 0x68, 0x65, 0x0a, 0x60, 0x04},
381 .n4 = n4_om6802, 373 .n4 = n4_om6802,
@@ -399,7 +391,7 @@ static const struct additional_sensor_data sensor_data[] = {
399 .stream = 391 .stream =
400 {0x0b, 0x04, 0x0a, 0x78}, 392 {0x0b, 0x04, 0x0a, 0x78},
401 }, 393 },
402 { /* 1: OTHER */ 394[SENSOR_OTHER] = {
403 .n3 = 395 .n3 =
404 {0x61, 0xc2, 0x65, 0x88, 0x60, 0x00}, 396 {0x61, 0xc2, 0x65, 0x88, 0x60, 0x00},
405 .n4 = n4_other, 397 .n4 = n4_other,
@@ -423,7 +415,7 @@ static const struct additional_sensor_data sensor_data[] = {
423 .stream = 415 .stream =
424 {0x0b, 0x04, 0x0a, 0x00}, 416 {0x0b, 0x04, 0x0a, 0x00},
425 }, 417 },
426 { /* 2: TAS5130A */ 418[SENSOR_TAS5130A] = {
427 .n3 = 419 .n3 =
428 {0x61, 0xc2, 0x65, 0x0d, 0x60, 0x08}, 420 {0x61, 0xc2, 0x65, 0x0d, 0x60, 0x08},
429 .n4 = n4_tas5130a, 421 .n4 = n4_tas5130a,
@@ -447,7 +439,7 @@ static const struct additional_sensor_data sensor_data[] = {
447 .stream = 439 .stream =
448 {0x0b, 0x04, 0x0a, 0x40}, 440 {0x0b, 0x04, 0x0a, 0x40},
449 }, 441 },
450 { /* 3: LT168G */ 442[SENSOR_LT168G] = {
451 .n3 = {0x61, 0xc2, 0x65, 0x68, 0x60, 0x00}, 443 .n3 = {0x61, 0xc2, 0x65, 0x68, 0x60, 0x00},
452 .n4 = n4_lt168g, 444 .n4 = n4_lt168g,
453 .n4sz = sizeof n4_lt168g, 445 .n4sz = sizeof n4_lt168g,
@@ -469,6 +461,15 @@ static const struct additional_sensor_data sensor_data[] = {
469#define MAX_EFFECTS 7 461#define MAX_EFFECTS 7
470/* easily done by soft, this table could be removed, 462/* easily done by soft, this table could be removed,
471 * i keep it here just in case */ 463 * i keep it here just in case */
464static char *effects_control[MAX_EFFECTS] = {
465 "Normal",
466 "Emboss", /* disabled */
467 "Monochrome",
468 "Sepia",
469 "Sketch",
470 "Sun Effect", /* disabled */
471 "Negative",
472};
472static const u8 effects_table[MAX_EFFECTS][6] = { 473static const u8 effects_table[MAX_EFFECTS][6] = {
473 {0xa8, 0xe8, 0xc6, 0xd2, 0xc0, 0x00}, /* Normal */ 474 {0xa8, 0xe8, 0xc6, 0xd2, 0xc0, 0x00}, /* Normal */
474 {0xa8, 0xc8, 0xc6, 0x52, 0xc0, 0x04}, /* Repujar */ 475 {0xa8, 0xc8, 0xc6, 0x52, 0xc0, 0x04}, /* Repujar */
@@ -625,7 +626,6 @@ static void reg_w_ixbuf(struct gspca_dev *gspca_dev,
625 kfree(tmpbuf); 626 kfree(tmpbuf);
626} 627}
627 628
628/* Reported as OM6802*/
629static void om6802_sensor_init(struct gspca_dev *gspca_dev) 629static void om6802_sensor_init(struct gspca_dev *gspca_dev)
630{ 630{
631 int i; 631 int i;
@@ -703,7 +703,7 @@ static int sd_config(struct gspca_dev *gspca_dev,
703 sd->autogain = AUTOGAIN_DEF; 703 sd->autogain = AUTOGAIN_DEF;
704 sd->mirror = MIRROR_DEF; 704 sd->mirror = MIRROR_DEF;
705 sd->freq = FREQ_DEF; 705 sd->freq = FREQ_DEF;
706 sd->whitebalance = WHITE_BALANCE_DEF; 706 sd->awb = AWB_DEF;
707 sd->sharpness = SHARPNESS_DEF; 707 sd->sharpness = SHARPNESS_DEF;
708 sd->effect = EFFECTS_DEF; 708 sd->effect = EFFECTS_DEF;
709 sd->red_balance = RED_BALANCE_DEF; 709 sd->red_balance = RED_BALANCE_DEF;
@@ -771,12 +771,12 @@ static void setglobalgain(struct gspca_dev *gspca_dev)
771} 771}
772 772
773/* Generic fnc for r/b balance, exposure and whitebalance */ 773/* Generic fnc for r/b balance, exposure and whitebalance */
774static void setbalance(struct gspca_dev *gspca_dev) 774static void setawb(struct gspca_dev *gspca_dev)
775{ 775{
776 struct sd *sd = (struct sd *) gspca_dev; 776 struct sd *sd = (struct sd *) gspca_dev;
777 777
778 /* on whitebalance leave defaults values */ 778 /* on awb leave defaults values */
779 if (sd->whitebalance) { 779 if (sd->awb) {
780 reg_w(gspca_dev, 0x3c80); 780 reg_w(gspca_dev, 0x3c80);
781 } else { 781 } else {
782 reg_w(gspca_dev, 0x3880); 782 reg_w(gspca_dev, 0x3880);
@@ -790,13 +790,6 @@ static void setbalance(struct gspca_dev *gspca_dev)
790 790
791} 791}
792 792
793
794
795static void setwhitebalance(struct gspca_dev *gspca_dev)
796{
797 setbalance(gspca_dev);
798}
799
800static void setsharpness(struct gspca_dev *gspca_dev) 793static void setsharpness(struct gspca_dev *gspca_dev)
801{ 794{
802 struct sd *sd = (struct sd *) gspca_dev; 795 struct sd *sd = (struct sd *) gspca_dev;
@@ -901,7 +894,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
901 setgamma(gspca_dev); 894 setgamma(gspca_dev);
902 setcolors(gspca_dev); 895 setcolors(gspca_dev);
903 setsharpness(gspca_dev); 896 setsharpness(gspca_dev);
904 setwhitebalance(gspca_dev); 897 setawb(gspca_dev);
905 898
906 reg_w(gspca_dev, 0x2087); /* tied to white balance? */ 899 reg_w(gspca_dev, 0x2087); /* tied to white balance? */
907 reg_w(gspca_dev, 0x2088); 900 reg_w(gspca_dev, 0x2088);
@@ -926,16 +919,16 @@ static int sd_init(struct gspca_dev *gspca_dev)
926 return 0; 919 return 0;
927} 920}
928 921
929static void setflip(struct gspca_dev *gspca_dev) 922static void setmirror(struct gspca_dev *gspca_dev)
930{ 923{
931 struct sd *sd = (struct sd *) gspca_dev; 924 struct sd *sd = (struct sd *) gspca_dev;
932 u8 flipcmd[8] = 925 u8 hflipcmd[8] =
933 {0x62, 0x07, 0x63, 0x03, 0x64, 0x00, 0x60, 0x09}; 926 {0x62, 0x07, 0x63, 0x03, 0x64, 0x00, 0x60, 0x09};
934 927
935 if (sd->mirror) 928 if (sd->mirror)
936 flipcmd[3] = 0x01; 929 hflipcmd[3] = 0x01;
937 930
938 reg_w_buf(gspca_dev, flipcmd, sizeof flipcmd); 931 reg_w_buf(gspca_dev, hflipcmd, sizeof hflipcmd);
939} 932}
940 933
941static void seteffect(struct gspca_dev *gspca_dev) 934static void seteffect(struct gspca_dev *gspca_dev)
@@ -1025,12 +1018,7 @@ static int sd_start(struct gspca_dev *gspca_dev)
1025 case SENSOR_OM6802: 1018 case SENSOR_OM6802:
1026 om6802_sensor_init(gspca_dev); 1019 om6802_sensor_init(gspca_dev);
1027 break; 1020 break;
1028 case SENSOR_LT168G: 1021 case SENSOR_TAS5130A:
1029 break;
1030 case SENSOR_OTHER:
1031 break;
1032 default:
1033/* case SENSOR_TAS5130A: */
1034 i = 0; 1022 i = 0;
1035 for (;;) { 1023 for (;;) {
1036 reg_w_buf(gspca_dev, tas5130a_sensor_init[i], 1024 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)
1167 return 0; 1155 return 0;
1168} 1156}
1169 1157
1170
1171static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) 1158static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val)
1172{ 1159{
1173 struct sd *sd = (struct sd *) gspca_dev; 1160 struct sd *sd = (struct sd *) gspca_dev;
@@ -1186,35 +1173,35 @@ static int sd_getbrightness(struct gspca_dev *gspca_dev, __s32 *val)
1186 return *val; 1173 return *val;
1187} 1174}
1188 1175
1189static int sd_setwhitebalance(struct gspca_dev *gspca_dev, __s32 val) 1176static int sd_setawb(struct gspca_dev *gspca_dev, __s32 val)
1190{ 1177{
1191 struct sd *sd = (struct sd *) gspca_dev; 1178 struct sd *sd = (struct sd *) gspca_dev;
1192 1179
1193 sd->whitebalance = val; 1180 sd->awb = val;
1194 if (gspca_dev->streaming) 1181 if (gspca_dev->streaming)
1195 setwhitebalance(gspca_dev); 1182 setawb(gspca_dev);
1196 return 0; 1183 return 0;
1197} 1184}
1198 1185
1199static int sd_getwhitebalance(struct gspca_dev *gspca_dev, __s32 *val) 1186static int sd_getawb(struct gspca_dev *gspca_dev, __s32 *val)
1200{ 1187{
1201 struct sd *sd = (struct sd *) gspca_dev; 1188 struct sd *sd = (struct sd *) gspca_dev;
1202 1189
1203 *val = sd->whitebalance; 1190 *val = sd->awb;
1204 return *val; 1191 return *val;
1205} 1192}
1206 1193
1207static int sd_setflip(struct gspca_dev *gspca_dev, __s32 val) 1194static int sd_setmirror(struct gspca_dev *gspca_dev, __s32 val)
1208{ 1195{
1209 struct sd *sd = (struct sd *) gspca_dev; 1196 struct sd *sd = (struct sd *) gspca_dev;
1210 1197
1211 sd->mirror = val; 1198 sd->mirror = val;
1212 if (gspca_dev->streaming) 1199 if (gspca_dev->streaming)
1213 setflip(gspca_dev); 1200 setmirror(gspca_dev);
1214 return 0; 1201 return 0;
1215} 1202}
1216 1203
1217static int sd_getflip(struct gspca_dev *gspca_dev, __s32 *val) 1204static int sd_getmirror(struct gspca_dev *gspca_dev, __s32 *val)
1218{ 1205{
1219 struct sd *sd = (struct sd *) gspca_dev; 1206 struct sd *sd = (struct sd *) gspca_dev;
1220 1207
@@ -1300,7 +1287,7 @@ static int sd_setfreq(struct gspca_dev *gspca_dev, __s32 val)
1300 1287
1301 sd->freq = val; 1288 sd->freq = val;
1302 if (gspca_dev->streaming) 1289 if (gspca_dev->streaming)
1303 setlightfreq(gspca_dev); 1290 setfreq(gspca_dev);
1304 return 0; 1291 return 0;
1305} 1292}
1306 1293
@@ -1368,7 +1355,8 @@ static int sd_querymenu(struct gspca_dev *gspca_dev,
1368 case V4L2_CID_EFFECTS: 1355 case V4L2_CID_EFFECTS:
1369 if ((unsigned) menu->index < ARRAY_SIZE(effects_control)) { 1356 if ((unsigned) menu->index < ARRAY_SIZE(effects_control)) {
1370 strncpy((char *) menu->name, 1357 strncpy((char *) menu->name,
1371 effects_control[menu->index], 32); 1358 effects_control[menu->index],
1359 sizeof menu->name);
1372 return 0; 1360 return 0;
1373 } 1361 }
1374 break; 1362 break;