diff options
author | Jean-François Moine <moinejf@free.fr> | 2010-06-04 06:22:57 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-08-02 13:06:13 -0400 |
commit | cd8955b85efd7f460339f0ac8117be9e513a6996 (patch) | |
tree | d5525daade40e40f7cd61a4e1316cba5ff9a358e /drivers/media/video | |
parent | a9dfc01d206b3bc807814751cb2b4e0704f4a2f7 (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.c | 122 |
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 | 57 | enum { |
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); | |||
74 | static int sd_setfreq(struct gspca_dev *gspca_dev, __s32 val); | 78 | static int sd_setfreq(struct gspca_dev *gspca_dev, __s32 val); |
75 | static int sd_getfreq(struct gspca_dev *gspca_dev, __s32 *val); | 79 | static int sd_getfreq(struct gspca_dev *gspca_dev, __s32 *val); |
76 | 80 | ||
77 | 81 | static int sd_setawb(struct gspca_dev *gspca_dev, __s32 val); | |
78 | static int sd_setwhitebalance(struct gspca_dev *gspca_dev, __s32 val); | 82 | static int sd_getawb(struct gspca_dev *gspca_dev, __s32 *val); |
79 | static int sd_getwhitebalance(struct gspca_dev *gspca_dev, __s32 *val); | ||
80 | static int sd_setblue_balance(struct gspca_dev *gspca_dev, __s32 val); | 83 | static int sd_setblue_balance(struct gspca_dev *gspca_dev, __s32 val); |
81 | static int sd_getblue_balance(struct gspca_dev *gspca_dev, __s32 *val); | 84 | static int sd_getblue_balance(struct gspca_dev *gspca_dev, __s32 *val); |
82 | static int sd_setred_balance(struct gspca_dev *gspca_dev, __s32 val); | 85 | 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); | |||
84 | static int sd_setglobal_gain(struct gspca_dev *gspca_dev, __s32 val); | 87 | static int sd_setglobal_gain(struct gspca_dev *gspca_dev, __s32 val); |
85 | static int sd_getglobal_gain(struct gspca_dev *gspca_dev, __s32 *val); | 88 | static int sd_getglobal_gain(struct gspca_dev *gspca_dev, __s32 *val); |
86 | 89 | ||
87 | static int sd_setflip(struct gspca_dev *gspca_dev, __s32 val); | 90 | static int sd_setmirror(struct gspca_dev *gspca_dev, __s32 val); |
88 | static int sd_getflip(struct gspca_dev *gspca_dev, __s32 *val); | 91 | static int sd_getmirror(struct gspca_dev *gspca_dev, __s32 *val); |
89 | static int sd_seteffect(struct gspca_dev *gspca_dev, __s32 val); | 92 | static int sd_seteffect(struct gspca_dev *gspca_dev, __s32 val); |
90 | static int sd_geteffect(struct gspca_dev *gspca_dev, __s32 *val); | 93 | static int sd_geteffect(struct gspca_dev *gspca_dev, __s32 *val); |
91 | static int sd_querymenu(struct gspca_dev *gspca_dev, | 94 | static int sd_querymenu(struct gspca_dev *gspca_dev, |
92 | struct v4l2_querymenu *menu); | 95 | struct v4l2_querymenu *menu); |
93 | 96 | ||
94 | |||
95 | static const struct ctrl sd_ctrls[] = { | 97 | static 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 | ||
283 | static char *effects_control[] = { | ||
284 | "Normal", | ||
285 | "Emboss", /* disabled */ | ||
286 | "Monochrome", | ||
287 | "Sepia", | ||
288 | "Sketch", | ||
289 | "Sun Effect", /* disabled */ | ||
290 | "Negative", | ||
291 | }; | ||
292 | |||
293 | static const struct v4l2_pix_format vga_mode_t16[] = { | 285 | static 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 | ||
377 | static const struct additional_sensor_data sensor_data[] = { | 369 | static 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 */ |
464 | static char *effects_control[MAX_EFFECTS] = { | ||
465 | "Normal", | ||
466 | "Emboss", /* disabled */ | ||
467 | "Monochrome", | ||
468 | "Sepia", | ||
469 | "Sketch", | ||
470 | "Sun Effect", /* disabled */ | ||
471 | "Negative", | ||
472 | }; | ||
472 | static const u8 effects_table[MAX_EFFECTS][6] = { | 473 | static 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*/ | ||
629 | static void om6802_sensor_init(struct gspca_dev *gspca_dev) | 629 | static 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 */ |
774 | static void setbalance(struct gspca_dev *gspca_dev) | 774 | static 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 | |||
795 | static void setwhitebalance(struct gspca_dev *gspca_dev) | ||
796 | { | ||
797 | setbalance(gspca_dev); | ||
798 | } | ||
799 | |||
800 | static void setsharpness(struct gspca_dev *gspca_dev) | 793 | static 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 | ||
929 | static void setflip(struct gspca_dev *gspca_dev) | 922 | static 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 | ||
941 | static void seteffect(struct gspca_dev *gspca_dev) | 934 | static 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 | |||
1171 | static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) | 1158 | static 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 | ||
1189 | static int sd_setwhitebalance(struct gspca_dev *gspca_dev, __s32 val) | 1176 | static 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 | ||
1199 | static int sd_getwhitebalance(struct gspca_dev *gspca_dev, __s32 *val) | 1186 | static 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 | ||
1207 | static int sd_setflip(struct gspca_dev *gspca_dev, __s32 val) | 1194 | static 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 | ||
1217 | static int sd_getflip(struct gspca_dev *gspca_dev, __s32 *val) | 1204 | static 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; |