aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/gspca/zc3xx.c
diff options
context:
space:
mode:
authorJean-Francois Moine <moinejf@free.fr>2008-06-30 14:50:11 -0400
committerMauro Carvalho Chehab <mchehab@infradead.org>2008-07-20 06:14:49 -0400
commit6a7eba24e4f0ff725d33159f6265e3a79d53a833 (patch)
tree3e50d669cb91affbcfad9333d74ddc452783094f /drivers/media/video/gspca/zc3xx.c
parentd43fa32fec442571f10f5d0c3b553413288728de (diff)
V4L/DVB (8157): gspca: all subdrivers
- remaning subdrivers added - remove the decoding helper and some specific frame decodings Signed-off-by: Jean-Francois Moine <moinejf@free.fr> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/video/gspca/zc3xx.c')
-rw-r--r--drivers/media/video/gspca/zc3xx.c649
1 files changed, 351 insertions, 298 deletions
diff --git a/drivers/media/video/gspca/zc3xx.c b/drivers/media/video/gspca/zc3xx.c
index 03cc7fc58dbc..b767f32511bb 100644
--- a/drivers/media/video/gspca/zc3xx.c
+++ b/drivers/media/video/gspca/zc3xx.c
@@ -3,7 +3,7 @@
3 * Copyright (C) 2004 2005 2006 Michel Xhaard 3 * Copyright (C) 2004 2005 2006 Michel Xhaard
4 * mxhaard@magic.fr 4 * mxhaard@magic.fr
5 * 5 *
6 * V4L2 by Jean-François Moine <http://moinejf.free.fr> 6 * V4L2 by Jean-Francois Moine <http://moinejf.free.fr>
7 * 7 *
8 * This program is free software; you can redistribute it and/or modify 8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by 9 * it under the terms of the GNU General Public License as published by
@@ -24,15 +24,14 @@
24 24
25#include "gspca.h" 25#include "gspca.h"
26 26
27#define DRIVER_VERSION_NUMBER KERNEL_VERSION(0, 2, 13) 27#define DRIVER_VERSION_NUMBER KERNEL_VERSION(2, 1, 0)
28static const char version[] = "0.2.13"; 28static const char version[] = "2.1.0";
29 29
30MODULE_AUTHOR("Michel Xhaard <mxhaard@users.sourceforge.net>, " 30MODULE_AUTHOR("Michel Xhaard <mxhaard@users.sourceforge.net>, "
31 "Serge A. Suchkov <Serge.A.S@tochka.ru>"); 31 "Serge A. Suchkov <Serge.A.S@tochka.ru>");
32MODULE_DESCRIPTION("GSPCA ZC03xx/VC3xx USB Camera Driver"); 32MODULE_DESCRIPTION("GSPCA ZC03xx/VC3xx USB Camera Driver");
33MODULE_LICENSE("GPL"); 33MODULE_LICENSE("GPL");
34 34
35static int lightfreq = 50;
36static int force_sensor = -1; 35static int force_sensor = -1;
37 36
38#include "jpeg.h" 37#include "jpeg.h"
@@ -41,10 +40,12 @@ static int force_sensor = -1;
41struct sd { 40struct sd {
42 struct gspca_dev gspca_dev; /* !! must be the first item */ 41 struct gspca_dev gspca_dev; /* !! must be the first item */
43 42
44 unsigned char brightness; 43 __u8 brightness;
45 unsigned char contrast; 44 __u8 contrast;
46 unsigned char autogain; 45 __u8 gamma;
47 unsigned char gamma; 46 __u8 autogain;
47 __u8 lightfreq;
48 __u8 sharpness;
48 49
49 char qindex; 50 char qindex;
50 char sensor; /* Type of image sensor chip */ 51 char sensor; /* Type of image sensor chip */
@@ -61,14 +62,13 @@ struct sd {
61#define SENSOR_OV7620 9 62#define SENSOR_OV7620 9
62/*#define SENSOR_OV7648 9 - same values */ 63/*#define SENSOR_OV7648 9 - same values */
63#define SENSOR_OV7630C 10 64#define SENSOR_OV7630C 10
64/*#define SENSOR_free 11 */ 65#define SENSOR_PAS106 11
65#define SENSOR_PAS106 12 66#define SENSOR_PB0330 12
66#define SENSOR_PB0330 13 67#define SENSOR_PO2030 13
67#define SENSOR_PO2030 14 68#define SENSOR_TAS5130CK 14
68#define SENSOR_TAS5130CK 15 69#define SENSOR_TAS5130CXX 15
69#define SENSOR_TAS5130CXX 16 70#define SENSOR_TAS5130C_VF0250 16
70#define SENSOR_TAS5130C_VF0250 17 71#define SENSOR_MAX 17
71#define SENSOR_MAX 18
72 unsigned short chip_revision; 72 unsigned short chip_revision;
73}; 73};
74 74
@@ -79,7 +79,12 @@ static int sd_setcontrast(struct gspca_dev *gspca_dev, __s32 val);
79static int sd_getcontrast(struct gspca_dev *gspca_dev, __s32 *val); 79static int sd_getcontrast(struct gspca_dev *gspca_dev, __s32 *val);
80static int sd_setautogain(struct gspca_dev *gspca_dev, __s32 val); 80static int sd_setautogain(struct gspca_dev *gspca_dev, __s32 val);
81static int sd_getautogain(struct gspca_dev *gspca_dev, __s32 *val); 81static int sd_getautogain(struct gspca_dev *gspca_dev, __s32 *val);
82static int sd_setgamma(struct gspca_dev *gspca_dev, __s32 val);
82static int sd_getgamma(struct gspca_dev *gspca_dev, __s32 *val); 83static int sd_getgamma(struct gspca_dev *gspca_dev, __s32 *val);
84static int sd_setfreq(struct gspca_dev *gspca_dev, __s32 val);
85static int sd_getfreq(struct gspca_dev *gspca_dev, __s32 *val);
86static int sd_setsharpness(struct gspca_dev *gspca_dev, __s32 val);
87static int sd_getsharpness(struct gspca_dev *gspca_dev, __s32 *val);
83 88
84static struct ctrl sd_ctrls[] = { 89static struct ctrl sd_ctrls[] = {
85#define SD_BRIGHTNESS 0 90#define SD_BRIGHTNESS 0
@@ -110,7 +115,21 @@ static struct ctrl sd_ctrls[] = {
110 .set = sd_setcontrast, 115 .set = sd_setcontrast,
111 .get = sd_getcontrast, 116 .get = sd_getcontrast,
112 }, 117 },
113#define SD_AUTOGAIN 2 118#define SD_GAMMA 2
119 {
120 {
121 .id = V4L2_CID_GAMMA,
122 .type = V4L2_CTRL_TYPE_INTEGER,
123 .name = "Gamma",
124 .minimum = 1,
125 .maximum = 6,
126 .step = 1,
127 .default_value = 4,
128 },
129 .set = sd_setgamma,
130 .get = sd_getgamma,
131 },
132#define SD_AUTOGAIN 3
114 { 133 {
115 { 134 {
116 .id = V4L2_CID_AUTOGAIN, 135 .id = V4L2_CID_AUTOGAIN,
@@ -124,19 +143,33 @@ static struct ctrl sd_ctrls[] = {
124 .set = sd_setautogain, 143 .set = sd_setautogain,
125 .get = sd_getautogain, 144 .get = sd_getautogain,
126 }, 145 },
127#define SD_GAMMA 3 146#define SD_FREQ 4
128 { 147 {
129 { 148 {
130 .id = V4L2_CID_GAMMA, 149 .id = V4L2_CID_POWER_LINE_FREQUENCY,
150 .type = V4L2_CTRL_TYPE_MENU,
151 .name = "Light frequency filter",
152 .minimum = 0,
153 .maximum = 2, /* 0: 0, 1: 50Hz, 2:60Hz */
154 .step = 1,
155 .default_value = 1,
156 },
157 .set = sd_setfreq,
158 .get = sd_getfreq,
159 },
160#define SD_SHARPNESS 5
161 {
162 {
163 .id = V4L2_CID_SHARPNESS,
131 .type = V4L2_CTRL_TYPE_INTEGER, 164 .type = V4L2_CTRL_TYPE_INTEGER,
132 .name = "Gamma", 165 .name = "Sharpness",
133 .minimum = 1, 166 .minimum = 0,
134 .maximum = 6, 167 .maximum = 3,
135 .step = 1, 168 .step = 1,
136 .default_value = 4, 169 .default_value = 2,
137 }, 170 },
138 .set = sd_setcontrast, 171 .set = sd_setsharpness,
139 .get = sd_getgamma, 172 .get = sd_getsharpness,
140 }, 173 },
141}; 174};
142 175
@@ -211,11 +244,11 @@ static struct usb_action cs2102_Initial[] = {
211 {0xa1, 0x01, 0x0002}, 244 {0xa1, 0x01, 0x0002},
212 {0xa1, 0x01, 0x0008}, 245 {0xa1, 0x01, 0x0008},
213 {0xa0, 0x03, 0x0008}, /* 00 */ 246 {0xa0, 0x03, 0x0008}, /* 00 */
214 {0xa0, 0x08, 0x01c6}, /* clock ? */ 247 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
215 {0xa1, 0x01, 0x01c8}, 248 {0xa1, 0x01, 0x01c8},
216 {0xa1, 0x01, 0x01c9}, 249 {0xa1, 0x01, 0x01c9},
217 {0xa1, 0x01, 0x01ca}, 250 {0xa1, 0x01, 0x01ca},
218 {0xa0, 0x0f, 0x01cb}, 251 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
219 {0xa0, 0x24, 0x0120}, /* gamma 5 */ 252 {0xa0, 0x24, 0x0120}, /* gamma 5 */
220 {0xa0, 0x44, 0x0121}, 253 {0xa0, 0x44, 0x0121},
221 {0xa0, 0x64, 0x0122}, 254 {0xa0, 0x64, 0x0122},
@@ -284,7 +317,7 @@ static struct usb_action cs2102_Initial[] = {
284 {0xa0, 0x40, 0x0116}, 317 {0xa0, 0x40, 0x0116},
285 {0xa0, 0x40, 0x0117}, 318 {0xa0, 0x40, 0x0117},
286 {0xa0, 0x40, 0x0118}, 319 {0xa0, 0x40, 0x0118},
287 {0, 0, 0} 320 {}
288}; 321};
289 322
290static struct usb_action cs2102_InitialScale[] = { 323static struct usb_action cs2102_InitialScale[] = {
@@ -341,11 +374,11 @@ static struct usb_action cs2102_InitialScale[] = {
341 {0xa1, 0x01, 0x0002}, 374 {0xa1, 0x01, 0x0002},
342 {0xa1, 0x01, 0x0008}, 375 {0xa1, 0x01, 0x0008},
343 {0xa0, 0x03, 0x0008}, /* 00 */ 376 {0xa0, 0x03, 0x0008}, /* 00 */
344 {0xa0, 0x08, 0x01c6}, /* clock ? */ 377 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
345 {0xa1, 0x01, 0x01c8}, 378 {0xa1, 0x01, 0x01c8},
346 {0xa1, 0x01, 0x01c9}, 379 {0xa1, 0x01, 0x01c9},
347 {0xa1, 0x01, 0x01ca}, 380 {0xa1, 0x01, 0x01ca},
348 {0xa0, 0x0f, 0x01cb}, 381 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
349 {0xa0, 0x24, 0x0120}, /* gamma 5 */ 382 {0xa0, 0x24, 0x0120}, /* gamma 5 */
350 {0xa0, 0x44, 0x0121}, 383 {0xa0, 0x44, 0x0121},
351 {0xa0, 0x64, 0x0122}, 384 {0xa0, 0x64, 0x0122},
@@ -414,7 +447,7 @@ static struct usb_action cs2102_InitialScale[] = {
414 {0xa0, 0x40, 0x0116}, 447 {0xa0, 0x40, 0x0116},
415 {0xa0, 0x40, 0x0117}, 448 {0xa0, 0x40, 0x0117},
416 {0xa0, 0x40, 0x0118}, 449 {0xa0, 0x40, 0x0118},
417 {0, 0, 0} 450 {}
418}; 451};
419static struct usb_action cs2102_50HZ[] = { 452static struct usb_action cs2102_50HZ[] = {
420 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ 453 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */
@@ -439,7 +472,7 @@ static struct usb_action cs2102_50HZ[] = {
439 {0xa0, 0x8c, 0x001d}, /* 00,1d,8c,cc */ 472 {0xa0, 0x8c, 0x001d}, /* 00,1d,8c,cc */
440 {0xa0, 0xb0, 0x001e}, /* 00,1e,b0,cc */ 473 {0xa0, 0xb0, 0x001e}, /* 00,1e,b0,cc */
441 {0xa0, 0xd0, 0x001f}, /* 00,1f,d0,cc */ 474 {0xa0, 0xd0, 0x001f}, /* 00,1f,d0,cc */
442 {0, 0, 0} 475 {}
443}; 476};
444static struct usb_action cs2102_50HZScale[] = { 477static struct usb_action cs2102_50HZScale[] = {
445 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ 478 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */
@@ -464,7 +497,7 @@ static struct usb_action cs2102_50HZScale[] = {
464 {0xa0, 0x93, 0x001d}, /* 00,1d,93,cc */ 497 {0xa0, 0x93, 0x001d}, /* 00,1d,93,cc */
465 {0xa0, 0xb0, 0x001e}, /* 00,1e,b0,cc */ 498 {0xa0, 0xb0, 0x001e}, /* 00,1e,b0,cc */
466 {0xa0, 0xd0, 0x001f}, /* 00,1f,d0,cc */ 499 {0xa0, 0xd0, 0x001f}, /* 00,1f,d0,cc */
467 {0, 0, 0} 500 {}
468}; 501};
469static struct usb_action cs2102_60HZ[] = { 502static struct usb_action cs2102_60HZ[] = {
470 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ 503 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */
@@ -489,7 +522,7 @@ static struct usb_action cs2102_60HZ[] = {
489 {0xa0, 0x5d, 0x001d}, /* 00,1d,5d,cc */ 522 {0xa0, 0x5d, 0x001d}, /* 00,1d,5d,cc */
490 {0xa0, 0x90, 0x001e}, /* 00,1e,90,cc */ 523 {0xa0, 0x90, 0x001e}, /* 00,1e,90,cc */
491 {0xa0, 0xd0, 0x00c8}, /* 00,c8,d0,cc */ 524 {0xa0, 0xd0, 0x00c8}, /* 00,c8,d0,cc */
492 {0, 0, 0} 525 {}
493}; 526};
494static struct usb_action cs2102_60HZScale[] = { 527static struct usb_action cs2102_60HZScale[] = {
495 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ 528 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */
@@ -514,7 +547,7 @@ static struct usb_action cs2102_60HZScale[] = {
514 {0xa0, 0xb7, 0x001d}, /* 00,1d,b7,cc */ 547 {0xa0, 0xb7, 0x001d}, /* 00,1d,b7,cc */
515 {0xa0, 0xd0, 0x001e}, /* 00,1e,d0,cc */ 548 {0xa0, 0xd0, 0x001e}, /* 00,1e,d0,cc */
516 {0xa0, 0xe8, 0x001f}, /* 00,1f,e8,cc */ 549 {0xa0, 0xe8, 0x001f}, /* 00,1f,e8,cc */
517 {0, 0, 0} 550 {}
518}; 551};
519static struct usb_action cs2102_NoFliker[] = { 552static struct usb_action cs2102_NoFliker[] = {
520 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ 553 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */
@@ -539,7 +572,7 @@ static struct usb_action cs2102_NoFliker[] = {
539 {0xa0, 0x59, 0x001d}, /* 00,1d,59,cc */ 572 {0xa0, 0x59, 0x001d}, /* 00,1d,59,cc */
540 {0xa0, 0x90, 0x001e}, /* 00,1e,90,cc */ 573 {0xa0, 0x90, 0x001e}, /* 00,1e,90,cc */
541 {0xa0, 0xc8, 0x001f}, /* 00,1f,c8,cc */ 574 {0xa0, 0xc8, 0x001f}, /* 00,1f,c8,cc */
542 {0, 0, 0} 575 {}
543}; 576};
544static struct usb_action cs2102_NoFlikerScale[] = { 577static struct usb_action cs2102_NoFlikerScale[] = {
545 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ 578 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */
@@ -564,7 +597,7 @@ static struct usb_action cs2102_NoFlikerScale[] = {
564 {0xa0, 0x59, 0x001d}, /* 00,1d,59,cc */ 597 {0xa0, 0x59, 0x001d}, /* 00,1d,59,cc */
565 {0xa0, 0x90, 0x001e}, /* 00,1e,90,cc */ 598 {0xa0, 0x90, 0x001e}, /* 00,1e,90,cc */
566 {0xa0, 0xc8, 0x001f}, /* 00,1f,c8,cc */ 599 {0xa0, 0xc8, 0x001f}, /* 00,1f,c8,cc */
567 {0, 0, 0} 600 {}
568}; 601};
569 602
570/* CS2102_KOCOM */ 603/* CS2102_KOCOM */
@@ -676,8 +709,8 @@ static struct usb_action cs2102K_Initial[] = {
676 {0xa0, 0x40, 0x0117}, 709 {0xa0, 0x40, 0x0117},
677 {0xa0, 0x4c, 0x0118}, 710 {0xa0, 0x4c, 0x0118},
678 {0xa0, 0x03, 0x0008}, /* clock ? */ 711 {0xa0, 0x03, 0x0008}, /* clock ? */
679 {0xa0, 0x08, 0x01c6}, 712 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
680 {0xa0, 0x0f, 0x01cb}, 713 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
681 {0xa0, 0x13, 0x0120}, /* gamma 4 */ 714 {0xa0, 0x13, 0x0120}, /* gamma 4 */
682 {0xa0, 0x38, 0x0121}, 715 {0xa0, 0x38, 0x0121},
683 {0xa0, 0x59, 0x0122}, 716 {0xa0, 0x59, 0x0122},
@@ -824,7 +857,7 @@ static struct usb_action cs2102K_Initial[] = {
824 {0xa0, 0x00, 0x01a7}, 857 {0xa0, 0x00, 0x01a7},
825 {0xa0, 0x04, 0x01a7}, 858 {0xa0, 0x04, 0x01a7},
826 {0xa0, 0x00, 0x01a7}, 859 {0xa0, 0x00, 0x01a7},
827 {0, 0, 0} 860 {}
828}; 861};
829 862
830static struct usb_action cs2102K_InitialScale[] = { 863static struct usb_action cs2102K_InitialScale[] = {
@@ -936,8 +969,8 @@ static struct usb_action cs2102K_InitialScale[] = {
936 {0xa0, 0x40, 0x0117}, 969 {0xa0, 0x40, 0x0117},
937 {0xa0, 0x4c, 0x0118}, 970 {0xa0, 0x4c, 0x0118},
938 {0xa0, 0x03, 0x0008}, /* clock ? */ 971 {0xa0, 0x03, 0x0008}, /* clock ? */
939 {0xa0, 0x08, 0x01c6}, 972 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
940 {0xa0, 0x0f, 0x01cb}, 973 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
941 {0xa0, 0x13, 0x0120}, /* gamma 4 */ 974 {0xa0, 0x13, 0x0120}, /* gamma 4 */
942 {0xa0, 0x38, 0x0121}, 975 {0xa0, 0x38, 0x0121},
943 {0xa0, 0x59, 0x0122}, 976 {0xa0, 0x59, 0x0122},
@@ -1137,8 +1170,8 @@ static struct usb_action cs2102K_InitialScale[] = {
1137 {0xa0, 0x40, 0x0117}, 1170 {0xa0, 0x40, 0x0117},
1138 {0xa0, 0x4c, 0x0118}, 1171 {0xa0, 0x4c, 0x0118},
1139 {0xa0, 0x03, 0x0008}, /* clock ? */ 1172 {0xa0, 0x03, 0x0008}, /* clock ? */
1140 {0xa0, 0x08, 0x01c6}, 1173 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
1141 {0xa0, 0x0f, 0x01cb}, 1174 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
1142 {0xa0, 0x13, 0x0120}, /* gamma 4 */ 1175 {0xa0, 0x13, 0x0120}, /* gamma 4 */
1143 {0xa0, 0x38, 0x0121}, 1176 {0xa0, 0x38, 0x0121},
1144 {0xa0, 0x59, 0x0122}, 1177 {0xa0, 0x59, 0x0122},
@@ -1401,7 +1434,7 @@ static struct usb_action cs2102K_InitialScale[] = {
1401 {0xa0, 0x04, 0x01a7}, 1434 {0xa0, 0x04, 0x01a7},
1402 {0xa0, 0x00, 0x01a7}, 1435 {0xa0, 0x00, 0x01a7},
1403 {0xa0, 0x04, 0x01a7}, 1436 {0xa0, 0x04, 0x01a7},
1404 {0, 0, 0} 1437 {}
1405}; 1438};
1406 1439
1407static struct usb_action gc0305_Initial[] = { /* 640x480 */ 1440static struct usb_action gc0305_Initial[] = { /* 640x480 */
@@ -1466,7 +1499,7 @@ static struct usb_action gc0305_Initial[] = { /* 640x480 */
1466 {0xa0, 0x40, 0x0117}, /* 01,17,40,cc */ 1499 {0xa0, 0x40, 0x0117}, /* 01,17,40,cc */
1467 {0xa0, 0x52, 0x0118}, /* 01,18,52,cc */ 1500 {0xa0, 0x52, 0x0118}, /* 01,18,52,cc */
1468 {0xa0, 0x03, 0x0113}, /* 01,13,03,cc */ 1501 {0xa0, 0x03, 0x0113}, /* 01,13,03,cc */
1469 {0,0,0} 1502 {}
1470}; 1503};
1471static struct usb_action gc0305_InitialScale[] = { /* 320x240 */ 1504static struct usb_action gc0305_InitialScale[] = { /* 320x240 */
1472 {0xa0, 0x01, 0x0000}, /* 00,00,01,cc */ 1505 {0xa0, 0x01, 0x0000}, /* 00,00,01,cc */
@@ -1529,7 +1562,7 @@ static struct usb_action gc0305_InitialScale[] = { /* 320x240 */
1529 {0xa0, 0x40, 0x0117}, /* 01,17,40,cc */ 1562 {0xa0, 0x40, 0x0117}, /* 01,17,40,cc */
1530 {0xa0, 0x52, 0x0118}, /* 01,18,52,cc */ 1563 {0xa0, 0x52, 0x0118}, /* 01,18,52,cc */
1531 {0xa0, 0x03, 0x0113}, /* 01,13,03,cc */ 1564 {0xa0, 0x03, 0x0113}, /* 01,13,03,cc */
1532 {0,0,0} 1565 {}
1533}; 1566};
1534static struct usb_action gc0305_50HZ[] = { 1567static struct usb_action gc0305_50HZ[] = {
1535 {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 1568 {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */
@@ -1552,7 +1585,7 @@ static struct usb_action gc0305_50HZ[] = {
1552 {0xa0, 0x60, 0x011d}, /* 01,1d,60,cc */ 1585 {0xa0, 0x60, 0x011d}, /* 01,1d,60,cc */
1553 {0xa0, 0x42, 0x0180}, /* 01,80,42,cc */ 1586 {0xa0, 0x42, 0x0180}, /* 01,80,42,cc */
1554/* {0xa0, 0x85, 0x018d}, * 01,8d,85,cc * * if 640x480 */ 1587/* {0xa0, 0x85, 0x018d}, * 01,8d,85,cc * * if 640x480 */
1555 {0,0,0} 1588 {}
1556}; 1589};
1557static struct usb_action gc0305_60HZ[] = { 1590static struct usb_action gc0305_60HZ[] = {
1558 {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 1591 {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */
@@ -1575,7 +1608,7 @@ static struct usb_action gc0305_60HZ[] = {
1575 {0xa0, 0x60, 0x011d}, /* 01,1d,60,cc */ 1608 {0xa0, 0x60, 0x011d}, /* 01,1d,60,cc */
1576 {0xa0, 0x42, 0x0180}, /* 01,80,42,cc */ 1609 {0xa0, 0x42, 0x0180}, /* 01,80,42,cc */
1577 {0xa0, 0x80, 0x018d}, /* 01,8d,80,cc */ 1610 {0xa0, 0x80, 0x018d}, /* 01,8d,80,cc */
1578 {0,0,0} 1611 {}
1579}; 1612};
1580 1613
1581static struct usb_action gc0305_NoFliker[] = { 1614static struct usb_action gc0305_NoFliker[] = {
@@ -1598,7 +1631,7 @@ static struct usb_action gc0305_NoFliker[] = {
1598 {0xa0, 0x60, 0x011d}, /* 01,1d,60,cc */ 1631 {0xa0, 0x60, 0x011d}, /* 01,1d,60,cc */
1599 {0xa0, 0x03, 0x0180}, /* 01,80,03,cc */ 1632 {0xa0, 0x03, 0x0180}, /* 01,80,03,cc */
1600 {0xa0, 0x80, 0x018d}, /* 01,8d,80,cc */ 1633 {0xa0, 0x80, 0x018d}, /* 01,8d,80,cc */
1601 {0,0,0} 1634 {}
1602}; 1635};
1603 1636
1604/* play poker with registers at your own risk !! */ 1637/* play poker with registers at your own risk !! */
@@ -1647,11 +1680,11 @@ static struct usb_action hdcs2020xx_Initial[] = {
1647 {0xa1, 0x01, 0x0002}, 1680 {0xa1, 0x01, 0x0002},
1648 {0xa1, 0x01, 0x0008}, 1681 {0xa1, 0x01, 0x0008},
1649 {0xa0, 0x03, 0x0008}, /* clock ? */ 1682 {0xa0, 0x03, 0x0008}, /* clock ? */
1650 {0xa0, 0x04, 0x01c6}, 1683 {0xa0, 0x04, 0x01c6}, /* sharpness+ */
1651 {0xa1, 0x01, 0x01c8}, 1684 {0xa1, 0x01, 0x01c8},
1652 {0xa1, 0x01, 0x01c9}, 1685 {0xa1, 0x01, 0x01c9},
1653 {0xa1, 0x01, 0x01ca}, 1686 {0xa1, 0x01, 0x01ca},
1654 {0xa0, 0x07, 0x01cb}, 1687 {0xa0, 0x07, 0x01cb}, /* sharpness- */
1655 {0xa0, 0x11, 0x0120}, /* gamma ~4 */ 1688 {0xa0, 0x11, 0x0120}, /* gamma ~4 */
1656 {0xa0, 0x37, 0x0121}, 1689 {0xa0, 0x37, 0x0121},
1657 {0xa0, 0x58, 0x0122}, 1690 {0xa0, 0x58, 0x0122},
@@ -1744,7 +1777,7 @@ static struct usb_action hdcs2020xx_Initial[] = {
1744 {0xa1, 0x01, 0x0118}, 1777 {0xa1, 0x01, 0x0118},
1745/* {0xa0, 0x02, 0x0008}, */ 1778/* {0xa0, 0x02, 0x0008}, */
1746 {0xa0, 0x00, 0x0007}, 1779 {0xa0, 0x00, 0x0007},
1747 {0, 0, 0} 1780 {}
1748}; 1781};
1749 1782
1750static struct usb_action hdcs2020xx_InitialScale[] = { 1783static struct usb_action hdcs2020xx_InitialScale[] = {
@@ -1792,11 +1825,11 @@ static struct usb_action hdcs2020xx_InitialScale[] = {
1792 {0xa1, 0x01, 0x0002}, 1825 {0xa1, 0x01, 0x0002},
1793 {0xa1, 0x01, 0x0008}, 1826 {0xa1, 0x01, 0x0008},
1794 {0xa0, 0x03, 0x0008}, /* clock ? */ 1827 {0xa0, 0x03, 0x0008}, /* clock ? */
1795 {0xa0, 0x04, 0x01c6}, 1828 {0xa0, 0x04, 0x01c6}, /* sharpness+ */
1796 {0xa1, 0x01, 0x01c8}, 1829 {0xa1, 0x01, 0x01c8},
1797 {0xa1, 0x01, 0x01c9}, 1830 {0xa1, 0x01, 0x01c9},
1798 {0xa1, 0x01, 0x01ca}, 1831 {0xa1, 0x01, 0x01ca},
1799 {0xa0, 0x07, 0x01cb}, 1832 {0xa0, 0x07, 0x01cb}, /* sharpness- */
1800 {0xa0, 0x11, 0x0120}, /* gamma ~4*/ 1833 {0xa0, 0x11, 0x0120}, /* gamma ~4*/
1801 {0xa0, 0x37, 0x0121}, 1834 {0xa0, 0x37, 0x0121},
1802 {0xa0, 0x58, 0x0122}, 1835 {0xa0, 0x58, 0x0122},
@@ -1887,7 +1920,7 @@ static struct usb_action hdcs2020xx_InitialScale[] = {
1887/* {0xa0, 0x02, 0x0008}, */ 1920/* {0xa0, 0x02, 0x0008}, */
1888 {0xa0, 0x00, 0x0007}, 1921 {0xa0, 0x00, 0x0007},
1889/* {0xa0, 0x18, 0x00fe}, */ 1922/* {0xa0, 0x18, 0x00fe}, */
1890 {0, 0, 0} 1923 {}
1891}; 1924};
1892static struct usb_action hdcs2020xb_Initial[] = { 1925static struct usb_action hdcs2020xb_Initial[] = {
1893 {0xa0, 0x01, 0x0000}, 1926 {0xa0, 0x01, 0x0000},
@@ -1942,11 +1975,11 @@ static struct usb_action hdcs2020xb_Initial[] = {
1942 {0xa0, 0x40, 0x0118}, 1975 {0xa0, 0x40, 0x0118},
1943 {0xa1, 0x01, 0x0008}, 1976 {0xa1, 0x01, 0x0008},
1944 {0xa0, 0x03, 0x0008}, /* clock ? */ 1977 {0xa0, 0x03, 0x0008}, /* clock ? */
1945 {0xa0, 0x08, 0x01c6}, 1978 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
1946 {0xa1, 0x01, 0x01c8}, 1979 {0xa1, 0x01, 0x01c8},
1947 {0xa1, 0x01, 0x01c9}, 1980 {0xa1, 0x01, 0x01c9},
1948 {0xa1, 0x01, 0x01ca}, 1981 {0xa1, 0x01, 0x01ca},
1949 {0xa0, 0x0f, 0x01cb}, 1982 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
1950 {0xa0, 0x13, 0x0120}, /* gamma 4 */ 1983 {0xa0, 0x13, 0x0120}, /* gamma 4 */
1951 {0xa0, 0x38, 0x0121}, 1984 {0xa0, 0x38, 0x0121},
1952 {0xa0, 0x59, 0x0122}, 1985 {0xa0, 0x59, 0x0122},
@@ -2019,7 +2052,7 @@ static struct usb_action hdcs2020xb_Initial[] = {
2019 {0xa0, 0x40, 0x0116}, 2052 {0xa0, 0x40, 0x0116},
2020 {0xa0, 0x40, 0x0117}, 2053 {0xa0, 0x40, 0x0117},
2021 {0xa0, 0x40, 0x0118}, 2054 {0xa0, 0x40, 0x0118},
2022 {0, 0, 0} 2055 {}
2023}; 2056};
2024static struct usb_action hdcs2020xb_InitialScale[] = { 2057static struct usb_action hdcs2020xb_InitialScale[] = {
2025 {0xa0, 0x01, 0x0000}, 2058 {0xa0, 0x01, 0x0000},
@@ -2072,11 +2105,11 @@ static struct usb_action hdcs2020xb_InitialScale[] = {
2072 {0xa0, 0x40, 0x0118}, 2105 {0xa0, 0x40, 0x0118},
2073 {0xa1, 0x01, 0x0008}, 2106 {0xa1, 0x01, 0x0008},
2074 {0xa0, 0x03, 0x0008}, /* clock ? */ 2107 {0xa0, 0x03, 0x0008}, /* clock ? */
2075 {0xa0, 0x08, 0x01c6}, 2108 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
2076 {0xa1, 0x01, 0x01c8}, 2109 {0xa1, 0x01, 0x01c8},
2077 {0xa1, 0x01, 0x01c9}, 2110 {0xa1, 0x01, 0x01c9},
2078 {0xa1, 0x01, 0x01ca}, 2111 {0xa1, 0x01, 0x01ca},
2079 {0xa0, 0x0f, 0x01cb}, 2112 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
2080 {0xa0, 0x13, 0x0120}, /* gamma 4 */ 2113 {0xa0, 0x13, 0x0120}, /* gamma 4 */
2081 {0xa0, 0x38, 0x0121}, 2114 {0xa0, 0x38, 0x0121},
2082 {0xa0, 0x59, 0x0122}, 2115 {0xa0, 0x59, 0x0122},
@@ -2147,7 +2180,7 @@ static struct usb_action hdcs2020xb_InitialScale[] = {
2147 {0xa0, 0x40, 0x0116}, 2180 {0xa0, 0x40, 0x0116},
2148 {0xa0, 0x40, 0x0117}, 2181 {0xa0, 0x40, 0x0117},
2149 {0xa0, 0x40, 0x0118}, 2182 {0xa0, 0x40, 0x0118},
2150 {0, 0, 0} 2183 {}
2151}; 2184};
2152static struct usb_action hdcs2020b_50HZ[] = { 2185static struct usb_action hdcs2020b_50HZ[] = {
2153 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ 2186 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */
@@ -2168,7 +2201,7 @@ static struct usb_action hdcs2020b_50HZ[] = {
2168 {0xa0, 0x05, 0x001d}, /* 00,1d,05,cc */ 2201 {0xa0, 0x05, 0x001d}, /* 00,1d,05,cc */
2169 {0xa0, 0x1a, 0x001e}, /* 00,1e,1a,cc */ 2202 {0xa0, 0x1a, 0x001e}, /* 00,1e,1a,cc */
2170 {0xa0, 0x2f, 0x001f}, /* 00,1f,2f,cc */ 2203 {0xa0, 0x2f, 0x001f}, /* 00,1f,2f,cc */
2171 {0, 0, 0} 2204 {}
2172}; 2205};
2173static struct usb_action hdcs2020b_60HZ[] = { 2206static struct usb_action hdcs2020b_60HZ[] = {
2174 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ 2207 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */
@@ -2189,7 +2222,7 @@ static struct usb_action hdcs2020b_60HZ[] = {
2189 {0xa0, 0x04, 0x001d}, /* 00,1d,04,cc */ 2222 {0xa0, 0x04, 0x001d}, /* 00,1d,04,cc */
2190 {0xa0, 0x18, 0x001e}, /* 00,1e,18,cc */ 2223 {0xa0, 0x18, 0x001e}, /* 00,1e,18,cc */
2191 {0xa0, 0x2c, 0x001f}, /* 00,1f,2c,cc */ 2224 {0xa0, 0x2c, 0x001f}, /* 00,1f,2c,cc */
2192 {0, 0, 0} 2225 {}
2193}; 2226};
2194static struct usb_action hdcs2020b_NoFliker[] = { 2227static struct usb_action hdcs2020b_NoFliker[] = {
2195 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ 2228 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */
@@ -2210,7 +2243,7 @@ static struct usb_action hdcs2020b_NoFliker[] = {
2210 {0xa0, 0x04, 0x001d}, /* 00,1d,04,cc */ 2243 {0xa0, 0x04, 0x001d}, /* 00,1d,04,cc */
2211 {0xa0, 0x17, 0x001e}, /* 00,1e,17,cc */ 2244 {0xa0, 0x17, 0x001e}, /* 00,1e,17,cc */
2212 {0xa0, 0x2a, 0x001f}, /* 00,1f,2a,cc */ 2245 {0xa0, 0x2a, 0x001f}, /* 00,1f,2a,cc */
2213 {0, 0, 0} 2246 {}
2214}; 2247};
2215 2248
2216static struct usb_action hv7131bxx_Initial[] = { 2249static struct usb_action hv7131bxx_Initial[] = {
@@ -2266,11 +2299,11 @@ static struct usb_action hv7131bxx_Initial[] = {
2266 2299
2267 {0xa1, 0x01, 0x0008}, 2300 {0xa1, 0x01, 0x0008},
2268 {0xa0, 0x03, 0x0008}, /* clock ? */ 2301 {0xa0, 0x03, 0x0008}, /* clock ? */
2269 {0xa0, 0x08, 0x01c6}, 2302 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
2270 {0xa1, 0x01, 0x01c8}, 2303 {0xa1, 0x01, 0x01c8},
2271 {0xa1, 0x01, 0x01c9}, 2304 {0xa1, 0x01, 0x01c9},
2272 {0xa1, 0x01, 0x01ca}, 2305 {0xa1, 0x01, 0x01ca},
2273 {0xa0, 0x0f, 0x01cb}, 2306 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
2274 2307
2275 {0xa0, 0x50, 0x010a}, /* matrix */ 2308 {0xa0, 0x50, 0x010a}, /* matrix */
2276 {0xa0, 0xf8, 0x010b}, 2309 {0xa0, 0xf8, 0x010b},
@@ -2318,7 +2351,7 @@ static struct usb_action hv7131bxx_Initial[] = {
2318 {0xa0, 0x40, 0x0117}, 2351 {0xa0, 0x40, 0x0117},
2319 {0xa0, 0x40, 0x0118}, 2352 {0xa0, 0x40, 0x0118},
2320/* {0xa0, 0x02, 0x0008}, */ 2353/* {0xa0, 0x02, 0x0008}, */
2321 {0, 0, 0} 2354 {}
2322}; 2355};
2323 2356
2324static struct usb_action hv7131bxx_InitialScale[] = { 2357static struct usb_action hv7131bxx_InitialScale[] = {
@@ -2373,11 +2406,11 @@ static struct usb_action hv7131bxx_InitialScale[] = {
2373 {0xa1, 0x01, 0x0096}, 2406 {0xa1, 0x01, 0x0096},
2374 {0xa1, 0x01, 0x0008}, 2407 {0xa1, 0x01, 0x0008},
2375 {0xa0, 0x03, 0x0008}, /* clock ? */ 2408 {0xa0, 0x03, 0x0008}, /* clock ? */
2376 {0xa0, 0x08, 0x01c6}, 2409 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
2377 {0xa1, 0x01, 0x01c8}, 2410 {0xa1, 0x01, 0x01c8},
2378 {0xa1, 0x01, 0x01c9}, 2411 {0xa1, 0x01, 0x01c9},
2379 {0xa1, 0x01, 0x01ca}, 2412 {0xa1, 0x01, 0x01ca},
2380 {0xa0, 0x0f, 0x01cb}, 2413 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
2381 2414
2382 {0xa0, 0x50, 0x010a}, /* matrix */ 2415 {0xa0, 0x50, 0x010a}, /* matrix */
2383 {0xa0, 0xf8, 0x010b}, 2416 {0xa0, 0xf8, 0x010b},
@@ -2424,7 +2457,7 @@ static struct usb_action hv7131bxx_InitialScale[] = {
2424 {0xa0, 0x40, 0x0117}, 2457 {0xa0, 0x40, 0x0117},
2425 {0xa0, 0x40, 0x0118}, 2458 {0xa0, 0x40, 0x0118},
2426/* {0xa0, 0x02, 0x0008}, */ 2459/* {0xa0, 0x02, 0x0008}, */
2427 {0, 0, 0} 2460 {}
2428}; 2461};
2429 2462
2430static struct usb_action hv7131cxx_Initial[] = { 2463static struct usb_action hv7131cxx_Initial[] = {
@@ -2478,11 +2511,11 @@ static struct usb_action hv7131cxx_Initial[] = {
2478 2511
2479 {0xa1, 0x01, 0x0008}, 2512 {0xa1, 0x01, 0x0008},
2480 {0xa0, 0x03, 0x0008}, /* clock ? */ 2513 {0xa0, 0x03, 0x0008}, /* clock ? */
2481 {0xa0, 0x08, 0x01c6}, 2514 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
2482 {0xa1, 0x01, 0x01c8}, 2515 {0xa1, 0x01, 0x01c8},
2483 {0xa1, 0x01, 0x01c9}, 2516 {0xa1, 0x01, 0x01c9},
2484 {0xa1, 0x01, 0x01ca}, 2517 {0xa1, 0x01, 0x01ca},
2485 {0xa0, 0x0f, 0x01cb}, 2518 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
2486 2519
2487 {0xa0, 0x60, 0x010a}, /* matrix */ 2520 {0xa0, 0x60, 0x010a}, /* matrix */
2488 {0xa0, 0xf0, 0x010b}, 2521 {0xa0, 0xf0, 0x010b},
@@ -2518,7 +2551,7 @@ static struct usb_action hv7131cxx_Initial[] = {
2518 {0xa0, 0x40, 0x0180}, 2551 {0xa0, 0x40, 0x0180},
2519 {0xa1, 0x01, 0x0180}, 2552 {0xa1, 0x01, 0x0180},
2520 {0xa0, 0x42, 0x0180}, 2553 {0xa0, 0x42, 0x0180},
2521 {0, 0, 0} 2554 {}
2522}; 2555};
2523 2556
2524static struct usb_action hv7131cxx_InitialScale[] = { 2557static struct usb_action hv7131cxx_InitialScale[] = {
@@ -2577,11 +2610,11 @@ static struct usb_action hv7131cxx_InitialScale[] = {
2577 2610
2578 {0xa1, 0x01, 0x0008}, 2611 {0xa1, 0x01, 0x0008},
2579 {0xa0, 0x03, 0x0008}, /* clock ? */ 2612 {0xa0, 0x03, 0x0008}, /* clock ? */
2580 {0xa0, 0x08, 0x01c6}, 2613 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
2581 {0xa1, 0x01, 0x01c8}, 2614 {0xa1, 0x01, 0x01c8},
2582 {0xa1, 0x01, 0x01c9}, 2615 {0xa1, 0x01, 0x01c9},
2583 {0xa1, 0x01, 0x01ca}, 2616 {0xa1, 0x01, 0x01ca},
2584 {0xa0, 0x0f, 0x01cb}, 2617 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
2585 2618
2586 {0xa0, 0x60, 0x010a}, /* matrix */ 2619 {0xa0, 0x60, 0x010a}, /* matrix */
2587 {0xa0, 0xf0, 0x010b}, 2620 {0xa0, 0xf0, 0x010b},
@@ -2619,7 +2652,7 @@ static struct usb_action hv7131cxx_InitialScale[] = {
2619 {0xa0, 0x40, 0x0180}, 2652 {0xa0, 0x40, 0x0180},
2620 {0xa1, 0x01, 0x0180}, 2653 {0xa1, 0x01, 0x0180},
2621 {0xa0, 0x42, 0x0180}, 2654 {0xa0, 0x42, 0x0180},
2622 {0, 0, 0} 2655 {}
2623}; 2656};
2624 2657
2625static struct usb_action icm105axx_Initial[] = { 2658static struct usb_action icm105axx_Initial[] = {
@@ -2743,11 +2776,11 @@ static struct usb_action icm105axx_Initial[] = {
2743 {0xa1, 0x01, 0x0008}, 2776 {0xa1, 0x01, 0x0008},
2744 2777
2745 {0xa0, 0x03, 0x0008}, /* clock ? */ 2778 {0xa0, 0x03, 0x0008}, /* clock ? */
2746 {0xa0, 0x08, 0x01c6}, 2779 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
2747 {0xa1, 0x01, 0x01c8}, 2780 {0xa1, 0x01, 0x01c8},
2748 {0xa1, 0x01, 0x01c9}, 2781 {0xa1, 0x01, 0x01c9},
2749 {0xa1, 0x01, 0x01ca}, 2782 {0xa1, 0x01, 0x01ca},
2750 {0xa0, 0x0f, 0x01cb}, 2783 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
2751 {0xa0, 0x52, 0x010a}, /* matrix */ 2784 {0xa0, 0x52, 0x010a}, /* matrix */
2752 {0xa0, 0xf7, 0x010b}, 2785 {0xa0, 0xf7, 0x010b},
2753 {0xa0, 0xf7, 0x010c}, 2786 {0xa0, 0xf7, 0x010c},
@@ -2796,7 +2829,7 @@ static struct usb_action icm105axx_Initial[] = {
2796 {0xa0, 0x40, 0x0116}, 2829 {0xa0, 0x40, 0x0116},
2797 {0xa0, 0x40, 0x0117}, 2830 {0xa0, 0x40, 0x0117},
2798 {0xa0, 0x40, 0x0118}, 2831 {0xa0, 0x40, 0x0118},
2799 {0, 0, 0} 2832 {}
2800}; 2833};
2801 2834
2802static struct usb_action icm105axx_InitialScale[] = { 2835static struct usb_action icm105axx_InitialScale[] = {
@@ -2924,11 +2957,11 @@ static struct usb_action icm105axx_InitialScale[] = {
2924 {0xa1, 0x01, 0x0008}, 2957 {0xa1, 0x01, 0x0008},
2925 2958
2926 {0xa0, 0x03, 0x0008}, /* clock ? */ 2959 {0xa0, 0x03, 0x0008}, /* clock ? */
2927 {0xa0, 0x08, 0x01c6}, 2960 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
2928 {0xa1, 0x01, 0x01c8}, 2961 {0xa1, 0x01, 0x01c8},
2929 {0xa1, 0x01, 0x01c9}, 2962 {0xa1, 0x01, 0x01c9},
2930 {0xa1, 0x01, 0x01ca}, 2963 {0xa1, 0x01, 0x01ca},
2931 {0xa0, 0x0f, 0x01cb}, 2964 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
2932 2965
2933 {0xa0, 0x52, 0x010a}, /* matrix */ 2966 {0xa0, 0x52, 0x010a}, /* matrix */
2934 {0xa0, 0xf7, 0x010b}, 2967 {0xa0, 0xf7, 0x010b},
@@ -2976,7 +3009,7 @@ static struct usb_action icm105axx_InitialScale[] = {
2976 {0xa0, 0x40, 0x0116}, 3009 {0xa0, 0x40, 0x0116},
2977 {0xa0, 0x40, 0x0117}, 3010 {0xa0, 0x40, 0x0117},
2978 {0xa0, 0x40, 0x0118}, 3011 {0xa0, 0x40, 0x0118},
2979 {0, 0, 0} 3012 {}
2980}; 3013};
2981static struct usb_action icm105a_50HZ[] = { 3014static struct usb_action icm105a_50HZ[] = {
2982 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ 3015 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */
@@ -3007,7 +3040,7 @@ static struct usb_action icm105a_50HZ[] = {
3007 {0xa0, 0xd8, 0x001e}, /* 00,1e,d8,cc */ 3040 {0xa0, 0xd8, 0x001e}, /* 00,1e,d8,cc */
3008 {0xa0, 0xea, 0x001f}, /* 00,1f,ea,cc */ 3041 {0xa0, 0xea, 0x001f}, /* 00,1f,ea,cc */
3009 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */ 3042 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */
3010 {0, 0, 0} 3043 {}
3011}; 3044};
3012static struct usb_action icm105a_50HZScale[] = { 3045static struct usb_action icm105a_50HZScale[] = {
3013 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ 3046 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */
@@ -3040,7 +3073,7 @@ static struct usb_action icm105a_50HZScale[] = {
3040 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */ 3073 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */
3041 {0xa0, 0x00, 0x01a7}, /* 01,a7,00,cc */ 3074 {0xa0, 0x00, 0x01a7}, /* 01,a7,00,cc */
3042 {0xa0, 0xc0, 0x01a8}, /* 01,a8,c0,cc */ 3075 {0xa0, 0xc0, 0x01a8}, /* 01,a8,c0,cc */
3043 {0, 0, 0} 3076 {}
3044}; 3077};
3045static struct usb_action icm105a_60HZ[] = { 3078static struct usb_action icm105a_60HZ[] = {
3046 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ 3079 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */
@@ -3071,7 +3104,7 @@ static struct usb_action icm105a_60HZ[] = {
3071 {0xa0, 0xd4, 0x001e}, /* 00,1e,d4,cc */ 3104 {0xa0, 0xd4, 0x001e}, /* 00,1e,d4,cc */
3072 {0xa0, 0xe8, 0x001f}, /* 00,1f,e8,cc */ 3105 {0xa0, 0xe8, 0x001f}, /* 00,1f,e8,cc */
3073 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */ 3106 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */
3074 {0, 0, 0} 3107 {}
3075}; 3108};
3076static struct usb_action icm105a_60HZScale[] = { 3109static struct usb_action icm105a_60HZScale[] = {
3077 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ 3110 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */
@@ -3104,7 +3137,7 @@ static struct usb_action icm105a_60HZScale[] = {
3104 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */ 3137 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */
3105 {0xa0, 0x00, 0x01a7}, /* 01,a7,00,cc */ 3138 {0xa0, 0x00, 0x01a7}, /* 01,a7,00,cc */
3106 {0xa0, 0xc0, 0x01a8}, /* 01,a8,c0,cc */ 3139 {0xa0, 0xc0, 0x01a8}, /* 01,a8,c0,cc */
3107 {0, 0, 0} 3140 {}
3108}; 3141};
3109static struct usb_action icm105a_NoFliker[] = { 3142static struct usb_action icm105a_NoFliker[] = {
3110 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ 3143 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */
@@ -3135,7 +3168,7 @@ static struct usb_action icm105a_NoFliker[] = {
3135 {0xa0, 0xd4, 0x001e}, /* 00,1e,d4,cc */ 3168 {0xa0, 0xd4, 0x001e}, /* 00,1e,d4,cc */
3136 {0xa0, 0xe8, 0x001f}, /* 00,1f,e8,cc */ 3169 {0xa0, 0xe8, 0x001f}, /* 00,1f,e8,cc */
3137 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */ 3170 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */
3138 {0, 0, 0} 3171 {}
3139}; 3172};
3140static struct usb_action icm105a_NoFlikerScale[] = { 3173static struct usb_action icm105a_NoFlikerScale[] = {
3141 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ 3174 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */
@@ -3168,7 +3201,7 @@ static struct usb_action icm105a_NoFlikerScale[] = {
3168 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */ 3201 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */
3169 {0xa0, 0x00, 0x01a7}, /* 01,a7,00,cc */ 3202 {0xa0, 0x00, 0x01a7}, /* 01,a7,00,cc */
3170 {0xa0, 0xc0, 0x01a8}, /* 01,a8,c0,cc */ 3203 {0xa0, 0xc0, 0x01a8}, /* 01,a8,c0,cc */
3171 {0, 0, 0} 3204 {}
3172}; 3205};
3173 3206
3174static struct usb_action MC501CB_InitialScale[] = { 3207static struct usb_action MC501CB_InitialScale[] = {
@@ -3288,7 +3321,7 @@ static struct usb_action MC501CB_InitialScale[] = {
3288 {0xaa, 0x36, 0x001d}, /* 00,36,1D,aa */ 3321 {0xaa, 0x36, 0x001d}, /* 00,36,1D,aa */
3289 {0xaa, 0x37, 0x004c}, /* 00,37,4C,aa */ 3322 {0xaa, 0x37, 0x004c}, /* 00,37,4C,aa */
3290 {0xaa, 0x3b, 0x001d}, /* 00,3B,1D,aa */ 3323 {0xaa, 0x3b, 0x001d}, /* 00,3B,1D,aa */
3291 {0, 0, 0} 3324 {}
3292}; 3325};
3293 3326
3294static struct usb_action MC501CB_Initial[] = { /* 320x240 */ 3327static struct usb_action MC501CB_Initial[] = { /* 320x240 */
@@ -3407,7 +3440,7 @@ static struct usb_action MC501CB_Initial[] = { /* 320x240 */
3407 {0xaa, 0x36, 0x001d}, /* 00,36,1D,aa */ 3440 {0xaa, 0x36, 0x001d}, /* 00,36,1D,aa */
3408 {0xaa, 0x37, 0x004c}, /* 00,37,4C,aa */ 3441 {0xaa, 0x37, 0x004c}, /* 00,37,4C,aa */
3409 {0xaa, 0x3b, 0x001d}, /* 00,3B,1D,aa */ 3442 {0xaa, 0x3b, 0x001d}, /* 00,3B,1D,aa */
3410 {0, 0, 0} 3443 {}
3411}; 3444};
3412 3445
3413static struct usb_action MC501CB_50HZ[] = { 3446static struct usb_action MC501CB_50HZ[] = {
@@ -3424,7 +3457,7 @@ static struct usb_action MC501CB_50HZ[] = {
3424 {0xaa, 0x36, 0x003a}, /* 00,36,3A,aa */ 3457 {0xaa, 0x36, 0x003a}, /* 00,36,3A,aa */
3425 {0xaa, 0x37, 0x0098}, /* 00,37,98,aa */ 3458 {0xaa, 0x37, 0x0098}, /* 00,37,98,aa */
3426 {0xaa, 0x3b, 0x003a}, /* 00,3B,3A,aa */ 3459 {0xaa, 0x3b, 0x003a}, /* 00,3B,3A,aa */
3427 {0, 0, 0} 3460 {}
3428}; 3461};
3429 3462
3430static struct usb_action MC501CB_50HZScale[] = { 3463static struct usb_action MC501CB_50HZScale[] = {
@@ -3441,7 +3474,7 @@ static struct usb_action MC501CB_50HZScale[] = {
3441 {0xaa, 0x36, 0x0018}, /* 00,36,18,aa */ 3474 {0xaa, 0x36, 0x0018}, /* 00,36,18,aa */
3442 {0xaa, 0x37, 0x006a}, /* 00,37,6A,aa */ 3475 {0xaa, 0x37, 0x006a}, /* 00,37,6A,aa */
3443 {0xaa, 0x3d, 0x0018}, /* 00,3D,18,aa */ 3476 {0xaa, 0x3d, 0x0018}, /* 00,3D,18,aa */
3444 {0, 0, 0} 3477 {}
3445}; 3478};
3446 3479
3447static struct usb_action MC501CB_60HZ[] = { 3480static struct usb_action MC501CB_60HZ[] = {
@@ -3458,7 +3491,7 @@ static struct usb_action MC501CB_60HZ[] = {
3458 {0xaa, 0x36, 0x0030}, /* 00,36,30,aa */ 3491 {0xaa, 0x36, 0x0030}, /* 00,36,30,aa */
3459 {0xaa, 0x37, 0x00d4}, /* 00,37,D4,aa */ 3492 {0xaa, 0x37, 0x00d4}, /* 00,37,D4,aa */
3460 {0xaa, 0x3d, 0x0030}, /* 00,3D,30,aa */ 3493 {0xaa, 0x3d, 0x0030}, /* 00,3D,30,aa */
3461 {0, 0, 0} 3494 {}
3462}; 3495};
3463 3496
3464static struct usb_action MC501CB_60HZScale[] = { 3497static struct usb_action MC501CB_60HZScale[] = {
@@ -3475,7 +3508,7 @@ static struct usb_action MC501CB_60HZScale[] = {
3475 {0xaa, 0x36, 0x0018}, /* 00,36,18,aa */ 3508 {0xaa, 0x36, 0x0018}, /* 00,36,18,aa */
3476 {0xaa, 0x37, 0x006a}, /* 00,37,6A,aa */ 3509 {0xaa, 0x37, 0x006a}, /* 00,37,6A,aa */
3477 {0xaa, 0x3d, 0x0018}, /* 00,3D,18,aa */ 3510 {0xaa, 0x3d, 0x0018}, /* 00,3D,18,aa */
3478 {0, 0, 0} 3511 {}
3479}; 3512};
3480 3513
3481static struct usb_action MC501CB_NoFliker[] = { 3514static struct usb_action MC501CB_NoFliker[] = {
@@ -3492,7 +3525,7 @@ static struct usb_action MC501CB_NoFliker[] = {
3492 {0xaa, 0x36, 0x0030}, /* 00,36,30,aa */ 3525 {0xaa, 0x36, 0x0030}, /* 00,36,30,aa */
3493 {0xaa, 0x37, 0x00d4}, /* 00,37,D4,aa */ 3526 {0xaa, 0x37, 0x00d4}, /* 00,37,D4,aa */
3494 {0xaa, 0x3d, 0x0030}, /* 00,3D,30,aa */ 3527 {0xaa, 0x3d, 0x0030}, /* 00,3D,30,aa */
3495 {0, 0, 0} 3528 {}
3496}; 3529};
3497 3530
3498static struct usb_action MC501CB_NoFlikerScale[] = { 3531static struct usb_action MC501CB_NoFlikerScale[] = {
@@ -3504,7 +3537,7 @@ static struct usb_action MC501CB_NoFlikerScale[] = {
3504 {0xaa, 0x3e, 0x00d4}, /* 00,3E,D4,aa */ 3537 {0xaa, 0x3e, 0x00d4}, /* 00,3E,D4,aa */
3505 {0xaa, 0x3b, 0x0030}, /* 00,3B,30,aa */ 3538 {0xaa, 0x3b, 0x0030}, /* 00,3B,30,aa */
3506 {0xaa, 0x3c, 0x00d4}, /* 00,3C,D4,aa */ 3539 {0xaa, 0x3c, 0x00d4}, /* 00,3C,D4,aa */
3507 {0, 0, 0} 3540 {}
3508}; 3541};
3509 3542
3510/* from zs211.inf - HKR,%OV7620%,Initial - 640x480 */ 3543/* from zs211.inf - HKR,%OV7620%,Initial - 640x480 */
@@ -3575,7 +3608,7 @@ static struct usb_action OV7620_mode0[] = {
3575 {0xa0, 0x40, 0x011d}, /* 01,1d,40,cc */ 3608 {0xa0, 0x40, 0x011d}, /* 01,1d,40,cc */
3576 {0xa0, 0x02, 0x0180}, /* 01,80,02,cc */ 3609 {0xa0, 0x02, 0x0180}, /* 01,80,02,cc */
3577 {0xa0, 0x50, 0x01a8}, /* 01,a8,50,cc */ 3610 {0xa0, 0x50, 0x01a8}, /* 01,a8,50,cc */
3578 {0, 0, 0} 3611 {}
3579}; 3612};
3580 3613
3581/* from zs211.inf - HKR,%OV7620%,InitialScale - 320x240 */ 3614/* from zs211.inf - HKR,%OV7620%,InitialScale - 320x240 */
@@ -3646,7 +3679,7 @@ static struct usb_action OV7620_mode1[] = {
3646 {0xa0, 0x50, 0x011d}, /* 01,1d,50,cc */ 3679 {0xa0, 0x50, 0x011d}, /* 01,1d,50,cc */
3647 {0xa0, 0x02, 0x0180}, /* 01,80,02,cc */ 3680 {0xa0, 0x02, 0x0180}, /* 01,80,02,cc */
3648 {0xa0, 0x50, 0x01a8}, /* 01,a8,50,cc */ 3681 {0xa0, 0x50, 0x01a8}, /* 01,a8,50,cc */
3649 {0, 0, 0} 3682 {}
3650}; 3683};
3651 3684
3652/* from zs211.inf - HKR,%OV7620%\AE,50HZ */ 3685/* from zs211.inf - HKR,%OV7620%\AE,50HZ */
@@ -3665,7 +3698,7 @@ static struct usb_action OV7620_50HZ[] = {
3665 {0xaa, 0x10, 0x0082}, /* 00,10,82,aa */ 3698 {0xaa, 0x10, 0x0082}, /* 00,10,82,aa */
3666 {0xaa, 0x76, 0x0003}, /* 00,76,03,aa */ 3699 {0xaa, 0x76, 0x0003}, /* 00,76,03,aa */
3667/* {0xa0, 0x40, 0x0002}, * 00,02,40,cc - if mode0 (640x480) */ 3700/* {0xa0, 0x40, 0x0002}, * 00,02,40,cc - if mode0 (640x480) */
3668 {0, 0, 0} 3701 {}
3669}; 3702};
3670 3703
3671/* from zs211.inf - HKR,%OV7620%\AE,60HZ */ 3704/* from zs211.inf - HKR,%OV7620%\AE,60HZ */
@@ -3687,7 +3720,7 @@ static struct usb_action OV7620_60HZ[] = {
3687/* ?? in gspca v1, it was 3720/* ?? in gspca v1, it was
3688 {0xa0, 0x00, 0x0039}, * 00,00,00,dd * 3721 {0xa0, 0x00, 0x0039}, * 00,00,00,dd *
3689 {0xa1, 0x01, 0x0037}, */ 3722 {0xa1, 0x01, 0x0037}, */
3690 {0, 0, 0} 3723 {}
3691}; 3724};
3692 3725
3693/* from zs211.inf - HKR,%OV7620%\AE,NoFliker */ 3726/* from zs211.inf - HKR,%OV7620%\AE,NoFliker */
@@ -3707,7 +3740,7 @@ static struct usb_action OV7620_NoFliker[] = {
3707/* ?? was 3740/* ?? was
3708 {0xa0, 0x00, 0x0039}, * 00,00,00,dd * 3741 {0xa0, 0x00, 0x0039}, * 00,00,00,dd *
3709 {0xa1, 0x01, 0x0037}, */ 3742 {0xa1, 0x01, 0x0037}, */
3710 {0, 0, 0} 3743 {}
3711}; 3744};
3712 3745
3713static struct usb_action ov7630c_Initial[] = { 3746static struct usb_action ov7630c_Initial[] = {
@@ -3795,14 +3828,11 @@ static struct usb_action ov7630c_Initial[] = {
3795/* 0x03, */ 3828/* 0x03, */
3796 {0xa1, 0x01, 0x0008}, 3829 {0xa1, 0x01, 0x0008},
3797 {0xa0, 0x03, 0x0008}, /* clock ? */ 3830 {0xa0, 0x03, 0x0008}, /* clock ? */
3798 {0xa0, 0x08, 0x01c6}, 3831 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
3799/* 0x05, */
3800 {0xa1, 0x01, 0x01c8}, 3832 {0xa1, 0x01, 0x01c8},
3801/* 0x07, */
3802 {0xa1, 0x01, 0x01c9}, 3833 {0xa1, 0x01, 0x01c9},
3803/* 0x0f, */
3804 {0xa1, 0x01, 0x01ca}, 3834 {0xa1, 0x01, 0x01ca},
3805 {0xa0, 0x0f, 0x01cb}, 3835 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
3806 {0xa0, 0x01, 0x0120}, /* gamma 2 ?*/ 3836 {0xa0, 0x01, 0x0120}, /* gamma 2 ?*/
3807 {0xa0, 0x0c, 0x0121}, 3837 {0xa0, 0x0c, 0x0121},
3808 {0xa0, 0x1f, 0x0122}, 3838 {0xa0, 0x1f, 0x0122},
@@ -3867,7 +3897,7 @@ static struct usb_action ov7630c_Initial[] = {
3867 {0xaa, 0x13, 0x0083}, /* 40 */ 3897 {0xaa, 0x13, 0x0083}, /* 40 */
3868 {0xa1, 0x01, 0x0180}, 3898 {0xa1, 0x01, 0x0180},
3869 {0xa0, 0x42, 0x0180}, 3899 {0xa0, 0x42, 0x0180},
3870 {0, 0, 0} 3900 {}
3871}; 3901};
3872 3902
3873static struct usb_action ov7630c_InitialScale[] = { 3903static struct usb_action ov7630c_InitialScale[] = {
@@ -3954,14 +3984,11 @@ static struct usb_action ov7630c_InitialScale[] = {
3954 3984
3955 {0xa1, 0x01, 0x0008}, 3985 {0xa1, 0x01, 0x0008},
3956 {0xa0, 0x03, 0x0008}, /* clock ? */ 3986 {0xa0, 0x03, 0x0008}, /* clock ? */
3957 {0xa0, 0x08, 0x01c6}, 3987 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
3958
3959 {0xa1, 0x01, 0x01c8}, 3988 {0xa1, 0x01, 0x01c8},
3960
3961 {0xa1, 0x01, 0x01c9}, 3989 {0xa1, 0x01, 0x01c9},
3962
3963 {0xa1, 0x01, 0x01ca}, 3990 {0xa1, 0x01, 0x01ca},
3964 {0xa0, 0x0f, 0x01cb}, 3991 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
3965 {0xa0, 0x16, 0x0120}, /* gamma ~4 */ 3992 {0xa0, 0x16, 0x0120}, /* gamma ~4 */
3966 {0xa0, 0x3a, 0x0121}, 3993 {0xa0, 0x3a, 0x0121},
3967 {0xa0, 0x5b, 0x0122}, 3994 {0xa0, 0x5b, 0x0122},
@@ -4027,7 +4054,7 @@ static struct usb_action ov7630c_InitialScale[] = {
4027 4054
4028 {0xa1, 0x01, 0x0180}, 4055 {0xa1, 0x01, 0x0180},
4029 {0xa0, 0x42, 0x0180}, 4056 {0xa0, 0x42, 0x0180},
4030 {0, 0, 0} 4057 {}
4031}; 4058};
4032 4059
4033static struct usb_action pas106b_Initial_com[] = { 4060static struct usb_action pas106b_Initial_com[] = {
@@ -4041,7 +4068,7 @@ static struct usb_action pas106b_Initial_com[] = {
4041 {0xa0, 0x03, 0x003a}, 4068 {0xa0, 0x03, 0x003a},
4042 {0xa0, 0x0c, 0x003b}, 4069 {0xa0, 0x0c, 0x003b},
4043 {0xa0, 0x04, 0x0038}, 4070 {0xa0, 0x04, 0x0038},
4044 {0, 0, 0} 4071 {}
4045}; 4072};
4046 4073
4047static struct usb_action pas106b_Initial[] = { /* 176x144 */ 4074static struct usb_action pas106b_Initial[] = { /* 176x144 */
@@ -4099,10 +4126,8 @@ static struct usb_action pas106b_Initial[] = { /* 176x144 */
4099 {0xa0, 0x08, 0x0301}, /* EEPROMAccess */ 4126 {0xa0, 0x08, 0x0301}, /* EEPROMAccess */
4100/* JPEG control */ 4127/* JPEG control */
4101 {0xa0, 0x03, 0x0008}, /* ClockSetting */ 4128 {0xa0, 0x03, 0x0008}, /* ClockSetting */
4102/* Unknown */ 4129 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
4103 {0xa0, 0x08, 0x01c6}, 4130 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
4104/* Sharpness */
4105 {0xa0, 0x0f, 0x01cb}, /* Sharpness05 */
4106/* Other registers */ 4131/* Other registers */
4107 {0xa0, 0x0d, 0x0100}, /* OperationMode */ 4132 {0xa0, 0x0d, 0x0100}, /* OperationMode */
4108/* Auto exposure and white balance */ 4133/* Auto exposure and white balance */
@@ -4113,9 +4138,8 @@ static struct usb_action pas106b_Initial[] = { /* 176x144 */
4113 {0xa0, 0x08, 0x0301}, /* EEPROMAccess */ 4138 {0xa0, 0x08, 0x0301}, /* EEPROMAccess */
4114/* JPEG control */ 4139/* JPEG control */
4115 {0xa0, 0x03, 0x0008}, /* ClockSetting */ 4140 {0xa0, 0x03, 0x0008}, /* ClockSetting */
4116/* Sharpness */ 4141 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
4117 {0xa0, 0x08, 0x01c6}, /* Sharpness00 */ 4142 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
4118 {0xa0, 0x0f, 0x01cb}, /* Sharpness05 */
4119 4143
4120 {0xa0, 0x58, 0x010a}, /* matrix */ 4144 {0xa0, 0x58, 0x010a}, /* matrix */
4121 {0xa0, 0xf4, 0x010b}, 4145 {0xa0, 0xf4, 0x010b},
@@ -4162,7 +4186,7 @@ static struct usb_action pas106b_Initial[] = { /* 176x144 */
4162 {0xa0, 0x40, 0x0116}, /* RGain */ 4186 {0xa0, 0x40, 0x0116}, /* RGain */
4163 {0xa0, 0x40, 0x0117}, /* GGain */ 4187 {0xa0, 0x40, 0x0117}, /* GGain */
4164 {0xa0, 0x40, 0x0118}, /* BGain */ 4188 {0xa0, 0x40, 0x0118}, /* BGain */
4165 {0, 0, 0} 4189 {}
4166}; 4190};
4167 4191
4168static struct usb_action pas106b_InitialScale[] = { /* 352x288 */ 4192static struct usb_action pas106b_InitialScale[] = { /* 352x288 */
@@ -4221,10 +4245,8 @@ static struct usb_action pas106b_InitialScale[] = { /* 352x288 */
4221 {0xa0, 0x08, 0x0301}, /* EEPROMAccess */ 4245 {0xa0, 0x08, 0x0301}, /* EEPROMAccess */
4222/* JPEG control */ 4246/* JPEG control */
4223 {0xa0, 0x03, 0x0008}, /* ClockSetting */ 4247 {0xa0, 0x03, 0x0008}, /* ClockSetting */
4224/* Unknown */ 4248 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
4225 {0xa0, 0x08, 0x01c6}, 4249 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
4226/* Sharpness */
4227 {0xa0, 0x0f, 0x01cb}, /* Sharpness05 */
4228/* Other registers */ 4250/* Other registers */
4229 {0xa0, 0x0d, 0x0100}, /* OperationMode */ 4251 {0xa0, 0x0d, 0x0100}, /* OperationMode */
4230/* Auto exposure and white balance */ 4252/* Auto exposure and white balance */
@@ -4235,9 +4257,8 @@ static struct usb_action pas106b_InitialScale[] = { /* 352x288 */
4235 {0xa0, 0x08, 0x0301}, /* EEPROMAccess */ 4257 {0xa0, 0x08, 0x0301}, /* EEPROMAccess */
4236/* JPEG control */ 4258/* JPEG control */
4237 {0xa0, 0x03, 0x0008}, /* ClockSetting */ 4259 {0xa0, 0x03, 0x0008}, /* ClockSetting */
4238/* Sharpness */ 4260 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
4239 {0xa0, 0x08, 0x01c6}, /* Sharpness00 */ 4261 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
4240 {0xa0, 0x0f, 0x01cb}, /* Sharpness05 */
4241 4262
4242 {0xa0, 0x58, 0x010a}, /* matrix */ 4263 {0xa0, 0x58, 0x010a}, /* matrix */
4243 {0xa0, 0xf4, 0x010b}, 4264 {0xa0, 0xf4, 0x010b},
@@ -4289,7 +4310,7 @@ static struct usb_action pas106b_InitialScale[] = { /* 352x288 */
4289 4310
4290 {0xa0, 0x00, 0x0007}, /* AutoCorrectEnable */ 4311 {0xa0, 0x00, 0x0007}, /* AutoCorrectEnable */
4291 {0xa0, 0xff, 0x0018}, /* Frame adjust */ 4312 {0xa0, 0xff, 0x0018}, /* Frame adjust */
4292 {0, 0, 0} 4313 {}
4293}; 4314};
4294static struct usb_action pas106b_50HZ[] = { 4315static struct usb_action pas106b_50HZ[] = {
4295 {0xa0, 0x00, 0x0190}, /* 01,90,00,cc */ 4316 {0xa0, 0x00, 0x0190}, /* 01,90,00,cc */
@@ -4305,7 +4326,7 @@ static struct usb_action pas106b_50HZ[] = {
4305 {0xaa, 0x05, 0x0002}, /* 00,05,02,aa */ 4326 {0xaa, 0x05, 0x0002}, /* 00,05,02,aa */
4306 {0xaa, 0x07, 0x001c}, /* 00,07,1c,aa */ 4327 {0xaa, 0x07, 0x001c}, /* 00,07,1c,aa */
4307 {0xa0, 0x04, 0x01a9}, /* 01,a9,04,cc */ 4328 {0xa0, 0x04, 0x01a9}, /* 01,a9,04,cc */
4308 {0, 0, 0} 4329 {}
4309}; 4330};
4310static struct usb_action pas106b_60HZ[] = { 4331static struct usb_action pas106b_60HZ[] = {
4311 {0xa0, 0x00, 0x0190}, /* 01,90,00,cc */ 4332 {0xa0, 0x00, 0x0190}, /* 01,90,00,cc */
@@ -4321,7 +4342,7 @@ static struct usb_action pas106b_60HZ[] = {
4321 {0xaa, 0x05, 0x0001}, /* 00,05,01,aa */ 4342 {0xaa, 0x05, 0x0001}, /* 00,05,01,aa */
4322 {0xaa, 0x07, 0x00c4}, /* 00,07,c4,aa */ 4343 {0xaa, 0x07, 0x00c4}, /* 00,07,c4,aa */
4323 {0xa0, 0x04, 0x01a9}, /* 01,a9,04,cc */ 4344 {0xa0, 0x04, 0x01a9}, /* 01,a9,04,cc */
4324 {0, 0, 0} 4345 {}
4325}; 4346};
4326static struct usb_action pas106b_NoFliker[] = { 4347static struct usb_action pas106b_NoFliker[] = {
4327 {0xa0, 0x00, 0x0190}, /* 01,90,00,cc */ 4348 {0xa0, 0x00, 0x0190}, /* 01,90,00,cc */
@@ -4337,10 +4358,9 @@ static struct usb_action pas106b_NoFliker[] = {
4337 {0xaa, 0x05, 0x0001}, /* 00,05,01,aa */ 4358 {0xaa, 0x05, 0x0001}, /* 00,05,01,aa */
4338 {0xaa, 0x07, 0x0030}, /* 00,07,30,aa */ 4359 {0xaa, 0x07, 0x0030}, /* 00,07,30,aa */
4339 {0xa0, 0x00, 0x01a9}, /* 01,a9,00,cc */ 4360 {0xa0, 0x00, 0x01a9}, /* 01,a9,00,cc */
4340 {0, 0, 0} 4361 {}
4341}; 4362};
4342 4363
4343/* Aurelien setting from snoop */
4344static struct usb_action pb03303x_Initial[] = { 4364static struct usb_action pb03303x_Initial[] = {
4345 {0xa0, 0x01, 0x0000}, 4365 {0xa0, 0x01, 0x0000},
4346 {0xa0, 0x03, 0x0008}, 4366 {0xa0, 0x03, 0x0008},
@@ -4411,11 +4431,11 @@ static struct usb_action pb03303x_Initial[] = {
4411 4431
4412 {0xa1, 0x01, 0x0008}, 4432 {0xa1, 0x01, 0x0008},
4413 {0xa0, 0x03, 0x0008}, /* clock ? */ 4433 {0xa0, 0x03, 0x0008}, /* clock ? */
4414 {0xa0, 0x08, 0x01c6}, 4434 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
4415 {0xa1, 0x01, 0x01c8}, 4435 {0xa1, 0x01, 0x01c8},
4416 {0xa1, 0x01, 0x01c9}, 4436 {0xa1, 0x01, 0x01c9},
4417 {0xa1, 0x01, 0x01ca}, 4437 {0xa1, 0x01, 0x01ca},
4418 {0xa0, 0x0f, 0x01cb}, 4438 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
4419 {0xa0, 0x13, 0x0120}, /* gamma 4 */ 4439 {0xa0, 0x13, 0x0120}, /* gamma 4 */
4420 {0xa0, 0x38, 0x0121}, 4440 {0xa0, 0x38, 0x0121},
4421 {0xa0, 0x59, 0x0122}, 4441 {0xa0, 0x59, 0x0122},
@@ -4484,7 +4504,7 @@ static struct usb_action pb03303x_Initial[] = {
4484 {0xa0, 0x40, 0x0180}, 4504 {0xa0, 0x40, 0x0180},
4485 {0xa1, 0x01, 0x0180}, 4505 {0xa1, 0x01, 0x0180},
4486 {0xa0, 0x42, 0x0180}, 4506 {0xa0, 0x42, 0x0180},
4487 {0, 0, 0} 4507 {}
4488}; 4508};
4489 4509
4490static struct usb_action pb03303x_InitialScale[] = { 4510static struct usb_action pb03303x_InitialScale[] = {
@@ -4559,11 +4579,11 @@ static struct usb_action pb03303x_InitialScale[] = {
4559 4579
4560 {0xa1, 0x01, 0x0008}, 4580 {0xa1, 0x01, 0x0008},
4561 {0xa0, 0x03, 0x0008}, /* clock ? */ 4581 {0xa0, 0x03, 0x0008}, /* clock ? */
4562 {0xa0, 0x08, 0x01c6}, 4582 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
4563 {0xa1, 0x01, 0x01c8}, 4583 {0xa1, 0x01, 0x01c8},
4564 {0xa1, 0x01, 0x01c9}, 4584 {0xa1, 0x01, 0x01c9},
4565 {0xa1, 0x01, 0x01ca}, 4585 {0xa1, 0x01, 0x01ca},
4566 {0xa0, 0x0f, 0x01cb}, 4586 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
4567 4587
4568 {0xa0, 0x13, 0x0120}, /* gamma 4 */ 4588 {0xa0, 0x13, 0x0120}, /* gamma 4 */
4569 {0xa0, 0x38, 0x0121}, 4589 {0xa0, 0x38, 0x0121},
@@ -4633,7 +4653,7 @@ static struct usb_action pb03303x_InitialScale[] = {
4633 {0xa0, 0x40, 0x0180}, 4653 {0xa0, 0x40, 0x0180},
4634 {0xa1, 0x01, 0x0180}, 4654 {0xa1, 0x01, 0x0180},
4635 {0xa0, 0x42, 0x0180}, 4655 {0xa0, 0x42, 0x0180},
4636 {0, 0, 0} 4656 {}
4637}; 4657};
4638static struct usb_action pb0330xx_Initial[] = { 4658static struct usb_action pb0330xx_Initial[] = {
4639 {0xa1, 0x01, 0x0008}, 4659 {0xa1, 0x01, 0x0008},
@@ -4701,11 +4721,11 @@ static struct usb_action pb0330xx_Initial[] = {
4701 {0xa0, 0x50, 0x0112}, 4721 {0xa0, 0x50, 0x0112},
4702 {0xa1, 0x01, 0x0008}, 4722 {0xa1, 0x01, 0x0008},
4703 {0xa0, 0x03, 0x0008}, /* clock ? */ 4723 {0xa0, 0x03, 0x0008}, /* clock ? */
4704 {0xa0, 0x08, 0x01c6}, 4724 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
4705 {0xa1, 0x01, 0x01c8}, 4725 {0xa1, 0x01, 0x01c8},
4706 {0xa1, 0x01, 0x01c9}, 4726 {0xa1, 0x01, 0x01c9},
4707 {0xa1, 0x01, 0x01ca}, 4727 {0xa1, 0x01, 0x01ca},
4708 {0xa0, 0x0f, 0x01cb}, 4728 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
4709 4729
4710 {0xa0, 0x50, 0x010a}, /* matrix */ 4730 {0xa0, 0x50, 0x010a}, /* matrix */
4711 {0xa0, 0xf8, 0x010b}, 4731 {0xa0, 0xf8, 0x010b},
@@ -4747,7 +4767,7 @@ static struct usb_action pb0330xx_Initial[] = {
4747 {0xa1, 0x01, 0x0007}, 4767 {0xa1, 0x01, 0x0007},
4748/* {0xa0, 0x30, 0x0007}, */ 4768/* {0xa0, 0x30, 0x0007}, */
4749/* {0xa0, 0x00, 0x0007}, */ 4769/* {0xa0, 0x00, 0x0007}, */
4750 {0, 0, 0} 4770 {}
4751}; 4771};
4752 4772
4753static struct usb_action pb0330xx_InitialScale[] = { 4773static struct usb_action pb0330xx_InitialScale[] = {
@@ -4816,11 +4836,11 @@ static struct usb_action pb0330xx_InitialScale[] = {
4816 {0xa0, 0x50, 0x0112}, 4836 {0xa0, 0x50, 0x0112},
4817 {0xa1, 0x01, 0x0008}, 4837 {0xa1, 0x01, 0x0008},
4818 {0xa0, 0x03, 0x0008}, /* clock ? */ 4838 {0xa0, 0x03, 0x0008}, /* clock ? */
4819 {0xa0, 0x08, 0x01c6}, 4839 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
4820 {0xa1, 0x01, 0x01c8}, 4840 {0xa1, 0x01, 0x01c8},
4821 {0xa1, 0x01, 0x01c9}, 4841 {0xa1, 0x01, 0x01c9},
4822 {0xa1, 0x01, 0x01ca}, 4842 {0xa1, 0x01, 0x01ca},
4823 {0xa0, 0x0f, 0x01cb}, 4843 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
4824 4844
4825 {0xa0, 0x50, 0x010a}, /* matrix */ 4845 {0xa0, 0x50, 0x010a}, /* matrix */
4826 {0xa0, 0xf8, 0x010b}, 4846 {0xa0, 0xf8, 0x010b},
@@ -4861,7 +4881,7 @@ static struct usb_action pb0330xx_InitialScale[] = {
4861 {0xa1, 0x01, 0x0007}, 4881 {0xa1, 0x01, 0x0007},
4862/* {0xa0, 0x30, 0x0007}, */ 4882/* {0xa0, 0x30, 0x0007}, */
4863/* {0xa0, 0x00, 0x0007}, */ 4883/* {0xa0, 0x00, 0x0007}, */
4864 {0, 0, 0} 4884 {}
4865}; 4885};
4866static struct usb_action pb0330_50HZ[] = { 4886static struct usb_action pb0330_50HZ[] = {
4867 {0xa0, 0x00, 0x0190}, /* 01,90,00,cc */ 4887 {0xa0, 0x00, 0x0190}, /* 01,90,00,cc */
@@ -4877,7 +4897,7 @@ static struct usb_action pb0330_50HZ[] = {
4877 {0xa0, 0x68, 0x001d}, /* 00,1d,68,cc */ 4897 {0xa0, 0x68, 0x001d}, /* 00,1d,68,cc */
4878 {0xa0, 0x90, 0x001e}, /* 00,1e,90,cc */ 4898 {0xa0, 0x90, 0x001e}, /* 00,1e,90,cc */
4879 {0xa0, 0xc8, 0x001f}, /* 00,1f,c8,cc */ 4899 {0xa0, 0xc8, 0x001f}, /* 00,1f,c8,cc */
4880 {0, 0, 0} 4900 {}
4881}; 4901};
4882static struct usb_action pb0330_50HZScale[] = { 4902static struct usb_action pb0330_50HZScale[] = {
4883 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ 4903 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */
@@ -4894,7 +4914,7 @@ static struct usb_action pb0330_50HZScale[] = {
4894 {0xa0, 0xe5, 0x001d}, /* 00,1d,e5,cc */ 4914 {0xa0, 0xe5, 0x001d}, /* 00,1d,e5,cc */
4895 {0xa0, 0xf0, 0x001e}, /* 00,1e,f0,cc */ 4915 {0xa0, 0xf0, 0x001e}, /* 00,1e,f0,cc */
4896 {0xa0, 0xf8, 0x001f}, /* 00,1f,f8,cc */ 4916 {0xa0, 0xf8, 0x001f}, /* 00,1f,f8,cc */
4897 {0, 0, 0} 4917 {}
4898}; 4918};
4899static struct usb_action pb0330_60HZ[] = { 4919static struct usb_action pb0330_60HZ[] = {
4900 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ 4920 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */
@@ -4911,7 +4931,7 @@ static struct usb_action pb0330_60HZ[] = {
4911 {0xa0, 0x43, 0x001d}, /* 00,1d,43,cc */ 4931 {0xa0, 0x43, 0x001d}, /* 00,1d,43,cc */
4912 {0xa0, 0x50, 0x001e}, /* 00,1e,50,cc */ 4932 {0xa0, 0x50, 0x001e}, /* 00,1e,50,cc */
4913 {0xa0, 0x90, 0x001f}, /* 00,1f,90,cc */ 4933 {0xa0, 0x90, 0x001f}, /* 00,1f,90,cc */
4914 {0, 0, 0} 4934 {}
4915}; 4935};
4916static struct usb_action pb0330_60HZScale[] = { 4936static struct usb_action pb0330_60HZScale[] = {
4917 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ 4937 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */
@@ -4928,7 +4948,7 @@ static struct usb_action pb0330_60HZScale[] = {
4928 {0xa0, 0x41, 0x001d}, /* 00,1d,41,cc */ 4948 {0xa0, 0x41, 0x001d}, /* 00,1d,41,cc */
4929 {0xa0, 0x50, 0x001e}, /* 00,1e,50,cc */ 4949 {0xa0, 0x50, 0x001e}, /* 00,1e,50,cc */
4930 {0xa0, 0x90, 0x001f}, /* 00,1f,90,cc */ 4950 {0xa0, 0x90, 0x001f}, /* 00,1f,90,cc */
4931 {0, 0, 0} 4951 {}
4932}; 4952};
4933static struct usb_action pb0330_NoFliker[] = { 4953static struct usb_action pb0330_NoFliker[] = {
4934 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ 4954 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */
@@ -4945,7 +4965,7 @@ static struct usb_action pb0330_NoFliker[] = {
4945 {0xa0, 0x09, 0x001d}, /* 00,1d,09,cc */ 4965 {0xa0, 0x09, 0x001d}, /* 00,1d,09,cc */
4946 {0xa0, 0x40, 0x001e}, /* 00,1e,40,cc */ 4966 {0xa0, 0x40, 0x001e}, /* 00,1e,40,cc */
4947 {0xa0, 0x90, 0x001f}, /* 00,1f,90,cc */ 4967 {0xa0, 0x90, 0x001f}, /* 00,1f,90,cc */
4948 {0, 0, 0} 4968 {}
4949}; 4969};
4950static struct usb_action pb0330_NoFlikerScale[] = { 4970static struct usb_action pb0330_NoFlikerScale[] = {
4951 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ 4971 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */
@@ -4962,7 +4982,7 @@ static struct usb_action pb0330_NoFlikerScale[] = {
4962 {0xa0, 0x09, 0x001d}, /* 00,1d,09,cc */ 4982 {0xa0, 0x09, 0x001d}, /* 00,1d,09,cc */
4963 {0xa0, 0x40, 0x001e}, /* 00,1e,40,cc */ 4983 {0xa0, 0x40, 0x001e}, /* 00,1e,40,cc */
4964 {0xa0, 0x90, 0x001f}, /* 00,1f,90,cc */ 4984 {0xa0, 0x90, 0x001f}, /* 00,1f,90,cc */
4965 {0, 0, 0} 4985 {}
4966}; 4986};
4967 4987
4968/* from oem9.inf - HKR,%PO2030%,Initial - 640x480 - (close to CS2102) */ 4988/* from oem9.inf - HKR,%PO2030%,Initial - 640x480 - (close to CS2102) */
@@ -5039,7 +5059,7 @@ static struct usb_action PO2030_mode0[] = {
5039 {0xa0, 0x08, 0x0301}, /* 03,01,08,cc */ 5059 {0xa0, 0x08, 0x0301}, /* 03,01,08,cc */
5040 {0xa0, 0x7a, 0x0116}, /* 01,16,7a,cc */ 5060 {0xa0, 0x7a, 0x0116}, /* 01,16,7a,cc */
5041 {0xa0, 0x4a, 0x0118}, /* 01,18,4a,cc */ 5061 {0xa0, 0x4a, 0x0118}, /* 01,18,4a,cc */
5042 {0, 0, 0} 5062 {}
5043}; 5063};
5044 5064
5045/* from oem9.inf - HKR,%PO2030%,InitialScale - 320x240 */ 5065/* from oem9.inf - HKR,%PO2030%,InitialScale - 320x240 */
@@ -5116,7 +5136,7 @@ static struct usb_action PO2030_mode1[] = {
5116 {0xa0, 0x08, 0x0301}, /* 03,01,08,cc */ 5136 {0xa0, 0x08, 0x0301}, /* 03,01,08,cc */
5117 {0xa0, 0x7a, 0x0116}, /* 01,16,7a,cc */ 5137 {0xa0, 0x7a, 0x0116}, /* 01,16,7a,cc */
5118 {0xa0, 0x4a, 0x0118}, /* 01,18,4a,cc */ 5138 {0xa0, 0x4a, 0x0118}, /* 01,18,4a,cc */
5119 {0, 0, 0} 5139 {}
5120}; 5140};
5121 5141
5122static struct usb_action PO2030_50HZ[] = { 5142static struct usb_action PO2030_50HZ[] = {
@@ -5138,7 +5158,7 @@ static struct usb_action PO2030_50HZ[] = {
5138 {0xa0, 0x88, 0x018d}, /* 01,8d,88,cc */ 5158 {0xa0, 0x88, 0x018d}, /* 01,8d,88,cc */
5139 {0xa0, 0x58, 0x011d}, /* 01,1d,58,cc */ 5159 {0xa0, 0x58, 0x011d}, /* 01,1d,58,cc */
5140 {0xa0, 0x42, 0x0180}, /* 01,80,42,cc */ 5160 {0xa0, 0x42, 0x0180}, /* 01,80,42,cc */
5141 {0, 0, 0} 5161 {}
5142}; 5162};
5143 5163
5144static struct usb_action PO2030_60HZ[] = { 5164static struct usb_action PO2030_60HZ[] = {
@@ -5160,7 +5180,7 @@ static struct usb_action PO2030_60HZ[] = {
5160 {0xa0, 0x88, 0x018d}, /* 01,8d,88,cc */ /* win: 01,8d,80 */ 5180 {0xa0, 0x88, 0x018d}, /* 01,8d,88,cc */ /* win: 01,8d,80 */
5161 {0xa0, 0x58, 0x011d}, /* 01,1d,58,cc */ 5181 {0xa0, 0x58, 0x011d}, /* 01,1d,58,cc */
5162 {0xa0, 0x42, 0x0180}, /* 01,80,42,cc */ 5182 {0xa0, 0x42, 0x0180}, /* 01,80,42,cc */
5163 {0, 0, 0} 5183 {}
5164}; 5184};
5165 5185
5166static struct usb_action PO2030_NoFliker[] = { 5186static struct usb_action PO2030_NoFliker[] = {
@@ -5171,7 +5191,7 @@ static struct usb_action PO2030_NoFliker[] = {
5171 {0xaa, 0x1c, 0x0078}, /* 00,1c,78,aa */ 5191 {0xaa, 0x1c, 0x0078}, /* 00,1c,78,aa */
5172 {0xaa, 0x46, 0x0000}, /* 00,46,00,aa */ 5192 {0xaa, 0x46, 0x0000}, /* 00,46,00,aa */
5173 {0xaa, 0x15, 0x0000}, /* 00,15,00,aa */ 5193 {0xaa, 0x15, 0x0000}, /* 00,15,00,aa */
5174 {0, 0, 0} 5194 {}
5175}; 5195};
5176 5196
5177/* TEST */ 5197/* TEST */
@@ -5302,8 +5322,8 @@ static struct usb_action tas5130CK_Initial[] = {
5302 {0xa0, 0x03, 0x0111}, 5322 {0xa0, 0x03, 0x0111},
5303 {0xa0, 0x51, 0x0112}, 5323 {0xa0, 0x51, 0x0112},
5304 {0xa0, 0x03, 0x0008}, 5324 {0xa0, 0x03, 0x0008},
5305 {0xa0, 0x08, 0x01c6}, 5325 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
5306 {0xa0, 0x0f, 0x01cb}, 5326 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
5307 {0xa0, 0x38, 0x0120}, /* gamma > 5 */ 5327 {0xa0, 0x38, 0x0120}, /* gamma > 5 */
5308 {0xa0, 0x51, 0x0121}, 5328 {0xa0, 0x51, 0x0121},
5309 {0xa0, 0x6e, 0x0122}, 5329 {0xa0, 0x6e, 0x0122},
@@ -5375,7 +5395,7 @@ static struct usb_action tas5130CK_Initial[] = {
5375 {0xa0, 0x15, 0x01ae}, 5395 {0xa0, 0x15, 0x01ae},
5376 {0xa0, 0x40, 0x0180}, 5396 {0xa0, 0x40, 0x0180},
5377 {0xa0, 0x42, 0x0180}, 5397 {0xa0, 0x42, 0x0180},
5378 {0, 0, 0} 5398 {}
5379}; 5399};
5380 5400
5381static struct usb_action tas5130CK_InitialScale[] = { 5401static struct usb_action tas5130CK_InitialScale[] = {
@@ -5505,8 +5525,8 @@ static struct usb_action tas5130CK_InitialScale[] = {
5505 {0xa0, 0x03, 0x0111}, 5525 {0xa0, 0x03, 0x0111},
5506 {0xa0, 0x51, 0x0112}, 5526 {0xa0, 0x51, 0x0112},
5507 {0xa0, 0x03, 0x0008}, 5527 {0xa0, 0x03, 0x0008},
5508 {0xa0, 0x08, 0x01c6}, 5528 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
5509 {0xa0, 0x0f, 0x01cb}, 5529 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
5510 {0xa0, 0x38, 0x0120}, /* gamma > 5 */ 5530 {0xa0, 0x38, 0x0120}, /* gamma > 5 */
5511 {0xa0, 0x51, 0x0121}, 5531 {0xa0, 0x51, 0x0121},
5512 {0xa0, 0x6e, 0x0122}, 5532 {0xa0, 0x6e, 0x0122},
@@ -5583,7 +5603,7 @@ static struct usb_action tas5130CK_InitialScale[] = {
5583 {0xa0, 0x02, 0x0008}, 5603 {0xa0, 0x02, 0x0008},
5584 {0xa0, 0x00, 0x0007}, 5604 {0xa0, 0x00, 0x0007},
5585 {0xa0, 0x03, 0x0008}, 5605 {0xa0, 0x03, 0x0008},
5586 {0, 0, 0} 5606 {}
5587}; 5607};
5588 5608
5589static struct usb_action tas5130cxx_Initial[] = { 5609static struct usb_action tas5130cxx_Initial[] = {
@@ -5625,11 +5645,11 @@ static struct usb_action tas5130cxx_Initial[] = {
5625 {0xa1, 0x01, 0x0002}, 5645 {0xa1, 0x01, 0x0002},
5626 {0xa1, 0x01, 0x0008}, 5646 {0xa1, 0x01, 0x0008},
5627 {0xa0, 0x03, 0x0008}, /* clock ? */ 5647 {0xa0, 0x03, 0x0008}, /* clock ? */
5628 {0xa0, 0x08, 0x01c6}, 5648 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
5629 {0xa1, 0x01, 0x01c8}, 5649 {0xa1, 0x01, 0x01c8},
5630 {0xa1, 0x01, 0x01c9}, 5650 {0xa1, 0x01, 0x01c9},
5631 {0xa1, 0x01, 0x01ca}, 5651 {0xa1, 0x01, 0x01ca},
5632 {0xa0, 0x0f, 0x01cb}, 5652 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
5633 5653
5634 {0xa0, 0x68, 0x010a}, /* matrix */ 5654 {0xa0, 0x68, 0x010a}, /* matrix */
5635 {0xa0, 0xec, 0x010b}, 5655 {0xa0, 0xec, 0x010b},
@@ -5673,7 +5693,7 @@ static struct usb_action tas5130cxx_Initial[] = {
5673 {0xa0, 0x40, 0x0180}, 5693 {0xa0, 0x40, 0x0180},
5674 {0xa1, 0x01, 0x0180}, 5694 {0xa1, 0x01, 0x0180},
5675 {0xa0, 0x42, 0x0180}, 5695 {0xa0, 0x42, 0x0180},
5676 {0, 0, 0} 5696 {}
5677}; 5697};
5678static struct usb_action tas5130cxx_InitialScale[] = { 5698static struct usb_action tas5130cxx_InitialScale[] = {
5679 {0xa0, 0x01, 0x0000}, 5699 {0xa0, 0x01, 0x0000},
@@ -5718,11 +5738,11 @@ static struct usb_action tas5130cxx_InitialScale[] = {
5718 5738
5719 {0xa0, 0x03, 0x0008}, 5739 {0xa0, 0x03, 0x0008},
5720 {0xa1, 0x01, 0x0008}, /* clock ? */ 5740 {0xa1, 0x01, 0x0008}, /* clock ? */
5721 {0xa0, 0x08, 0x01c6}, 5741 {0xa0, 0x08, 0x01c6}, /* sharpness+ */
5722 {0xa1, 0x01, 0x01c8}, 5742 {0xa1, 0x01, 0x01c8},
5723 {0xa1, 0x01, 0x01c9}, 5743 {0xa1, 0x01, 0x01c9},
5724 {0xa1, 0x01, 0x01ca}, 5744 {0xa1, 0x01, 0x01ca},
5725 {0xa0, 0x0f, 0x01cb}, 5745 {0xa0, 0x0f, 0x01cb}, /* sharpness- */
5726 5746
5727 {0xa0, 0x68, 0x010a}, /* matrix */ 5747 {0xa0, 0x68, 0x010a}, /* matrix */
5728 {0xa0, 0xec, 0x010b}, 5748 {0xa0, 0xec, 0x010b},
@@ -5763,7 +5783,7 @@ static struct usb_action tas5130cxx_InitialScale[] = {
5763 {0xa0, 0x40, 0x0180}, 5783 {0xa0, 0x40, 0x0180},
5764 {0xa1, 0x01, 0x0180}, 5784 {0xa1, 0x01, 0x0180},
5765 {0xa0, 0x42, 0x0180}, 5785 {0xa0, 0x42, 0x0180},
5766 {0, 0, 0} 5786 {}
5767}; 5787};
5768static struct usb_action tas5130cxx_50HZ[] = { 5788static struct usb_action tas5130cxx_50HZ[] = {
5769 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ 5789 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */
@@ -5786,7 +5806,7 @@ static struct usb_action tas5130cxx_50HZ[] = {
5786 {0xa0, 0xea, 0x001f}, /* 00,1f,ea,cc */ 5806 {0xa0, 0xea, 0x001f}, /* 00,1f,ea,cc */
5787 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */ 5807 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */
5788 {0xa0, 0x03, 0x009f}, /* 00,9f,03,cc */ 5808 {0xa0, 0x03, 0x009f}, /* 00,9f,03,cc */
5789 {0, 0, 0} 5809 {}
5790}; 5810};
5791static struct usb_action tas5130cxx_50HZScale[] = { 5811static struct usb_action tas5130cxx_50HZScale[] = {
5792 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ 5812 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */
@@ -5809,7 +5829,7 @@ static struct usb_action tas5130cxx_50HZScale[] = {
5809 {0xa0, 0xf8, 0x001f}, /* 00,1f,f8,cc */ 5829 {0xa0, 0xf8, 0x001f}, /* 00,1f,f8,cc */
5810 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */ 5830 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */
5811 {0xa0, 0x03, 0x009f}, /* 00,9f,03,cc */ 5831 {0xa0, 0x03, 0x009f}, /* 00,9f,03,cc */
5812 {0, 0, 0} 5832 {}
5813}; 5833};
5814static struct usb_action tas5130cxx_60HZ[] = { 5834static struct usb_action tas5130cxx_60HZ[] = {
5815 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ 5835 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */
@@ -5832,7 +5852,7 @@ static struct usb_action tas5130cxx_60HZ[] = {
5832 {0xa0, 0xe0, 0x001f}, /* 00,1f,e0,cc */ 5852 {0xa0, 0xe0, 0x001f}, /* 00,1f,e0,cc */
5833 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */ 5853 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */
5834 {0xa0, 0x03, 0x009f}, /* 00,9f,03,cc */ 5854 {0xa0, 0x03, 0x009f}, /* 00,9f,03,cc */
5835 {0, 0, 0} 5855 {}
5836}; 5856};
5837static struct usb_action tas5130cxx_60HZScale[] = { 5857static struct usb_action tas5130cxx_60HZScale[] = {
5838 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ 5858 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */
@@ -5855,7 +5875,7 @@ static struct usb_action tas5130cxx_60HZScale[] = {
5855 {0xa0, 0xe0, 0x001f}, /* 00,1f,e0,cc */ 5875 {0xa0, 0xe0, 0x001f}, /* 00,1f,e0,cc */
5856 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */ 5876 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */
5857 {0xa0, 0x03, 0x009f}, /* 00,9f,03,cc */ 5877 {0xa0, 0x03, 0x009f}, /* 00,9f,03,cc */
5858 {0, 0, 0} 5878 {}
5859}; 5879};
5860static struct usb_action tas5130cxx_NoFliker[] = { 5880static struct usb_action tas5130cxx_NoFliker[] = {
5861 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ 5881 {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */
@@ -5878,7 +5898,7 @@ static struct usb_action tas5130cxx_NoFliker[] = {
5878 {0xa0, 0xe0, 0x001f}, /* 00,1f,e0,cc */ 5898 {0xa0, 0xe0, 0x001f}, /* 00,1f,e0,cc */
5879 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */ 5899 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */
5880 {0xa0, 0x02, 0x009f}, /* 00,9f,02,cc */ 5900 {0xa0, 0x02, 0x009f}, /* 00,9f,02,cc */
5881 {0, 0, 0} 5901 {}
5882}; 5902};
5883 5903
5884static struct usb_action tas5130cxx_NoFlikerScale[] = { 5904static struct usb_action tas5130cxx_NoFlikerScale[] = {
@@ -5902,7 +5922,7 @@ static struct usb_action tas5130cxx_NoFlikerScale[] = {
5902 {0xa0, 0xe0, 0x001f}, /* 00,1f,e0,cc */ 5922 {0xa0, 0xe0, 0x001f}, /* 00,1f,e0,cc */
5903 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */ 5923 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */
5904 {0xa0, 0x02, 0x009f}, /* 00,9f,02,cc */ 5924 {0xa0, 0x02, 0x009f}, /* 00,9f,02,cc */
5905 {0, 0, 0} 5925 {}
5906}; 5926};
5907 5927
5908static struct usb_action tas5130c_vf0250_Initial[] = { 5928static struct usb_action tas5130c_vf0250_Initial[] = {
@@ -5966,7 +5986,7 @@ static struct usb_action tas5130c_vf0250_Initial[] = {
5966 {0xa0, 0x60, 0x01a8}, /* 01,a8,60,cc, */ 5986 {0xa0, 0x60, 0x01a8}, /* 01,a8,60,cc, */
5967 {0xa0, 0x61, 0x0116}, /* 01,16,61,cc, */ 5987 {0xa0, 0x61, 0x0116}, /* 01,16,61,cc, */
5968 {0xa0, 0x65, 0x0118}, /* 01,18,65,cc */ 5988 {0xa0, 0x65, 0x0118}, /* 01,18,65,cc */
5969 {0, 0, 0} 5989 {}
5970}; 5990};
5971 5991
5972static struct usb_action tas5130c_vf0250_InitialScale[] = { 5992static struct usb_action tas5130c_vf0250_InitialScale[] = {
@@ -6030,7 +6050,7 @@ static struct usb_action tas5130c_vf0250_InitialScale[] = {
6030 {0xa0, 0x60, 0x01a8}, /* 01,a8,60,cc, */ 6050 {0xa0, 0x60, 0x01a8}, /* 01,a8,60,cc, */
6031 {0xa0, 0x61, 0x0116}, /* 01,16,61,cc, */ 6051 {0xa0, 0x61, 0x0116}, /* 01,16,61,cc, */
6032 {0xa0, 0x65, 0x0118}, /* 01,18,65,cc */ 6052 {0xa0, 0x65, 0x0118}, /* 01,18,65,cc */
6033 {0, 0, 0} 6053 {}
6034}; 6054};
6035/* "50HZ" light frequency banding filter */ 6055/* "50HZ" light frequency banding filter */
6036static struct usb_action tas5130c_vf0250_50HZ[] = { 6056static struct usb_action tas5130c_vf0250_50HZ[] = {
@@ -6054,7 +6074,7 @@ static struct usb_action tas5130c_vf0250_50HZ[] = {
6054 {0xa0, 0x58, 0x011d}, /* 01,1d,58,cc, */ 6074 {0xa0, 0x58, 0x011d}, /* 01,1d,58,cc, */
6055 {0xa0, 0x42, 0x0180}, /* 01,80,42,cc, */ 6075 {0xa0, 0x42, 0x0180}, /* 01,80,42,cc, */
6056 {0xa0, 0x78, 0x018d}, /* 01,8d,78,cc */ 6076 {0xa0, 0x78, 0x018d}, /* 01,8d,78,cc */
6057 {0, 0, 0} 6077 {}
6058}; 6078};
6059 6079
6060/* "50HZScale" light frequency banding filter */ 6080/* "50HZScale" light frequency banding filter */
@@ -6079,7 +6099,7 @@ static struct usb_action tas5130c_vf0250_50HZScale[] = {
6079 {0xa0, 0x58, 0x011d}, /* 01,1d,58,cc, */ 6099 {0xa0, 0x58, 0x011d}, /* 01,1d,58,cc, */
6080 {0xa0, 0x42, 0x0180}, /* 01,80,42,cc, */ 6100 {0xa0, 0x42, 0x0180}, /* 01,80,42,cc, */
6081 {0xa0, 0x78, 0x018d}, /* 01,8d,78,cc */ 6101 {0xa0, 0x78, 0x018d}, /* 01,8d,78,cc */
6082 {0, 0, 0} 6102 {}
6083}; 6103};
6084 6104
6085/* "60HZ" light frequency banding filter */ 6105/* "60HZ" light frequency banding filter */
@@ -6104,7 +6124,7 @@ static struct usb_action tas5130c_vf0250_60HZ[] = {
6104 {0xa0, 0x58, 0x011d}, /* 01,1d,58,cc, */ 6124 {0xa0, 0x58, 0x011d}, /* 01,1d,58,cc, */
6105 {0xa0, 0x42, 0x0180}, /* 01,80,42,cc, */ 6125 {0xa0, 0x42, 0x0180}, /* 01,80,42,cc, */
6106 {0xa0, 0x78, 0x018d}, /* 01,8d,78,cc */ 6126 {0xa0, 0x78, 0x018d}, /* 01,8d,78,cc */
6107 {0, 0, 0} 6127 {}
6108}; 6128};
6109 6129
6110/* "60HZScale" light frequency banding ilter */ 6130/* "60HZScale" light frequency banding ilter */
@@ -6129,7 +6149,7 @@ static struct usb_action tas5130c_vf0250_60HZScale[] = {
6129 {0xa0, 0x58, 0x011d}, /* 01,d,58,cc, */ 6149 {0xa0, 0x58, 0x011d}, /* 01,d,58,cc, */
6130 {0xa0, 0x42, 0x0180}, /* 01,80,42,cc, */ 6150 {0xa0, 0x42, 0x0180}, /* 01,80,42,cc, */
6131 {0xa0, 0x78, 0x018d}, /* 01,d,78,cc */ 6151 {0xa0, 0x78, 0x018d}, /* 01,d,78,cc */
6132 {0, 0, 0} 6152 {}
6133}; 6153};
6134 6154
6135/* "NoFliker" light frequency banding flter */ 6155/* "NoFliker" light frequency banding flter */
@@ -6152,7 +6172,7 @@ static struct usb_action tas5130c_vf0250_NoFliker[] = {
6152 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc, */ 6172 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc, */
6153 {0xa0, 0x58, 0x011d}, /* 01,1d,58,cc, */ 6173 {0xa0, 0x58, 0x011d}, /* 01,1d,58,cc, */
6154 {0xa0, 0x03, 0x0180}, /* 01,80,03,cc */ 6174 {0xa0, 0x03, 0x0180}, /* 01,80,03,cc */
6155 {0, 0, 0} 6175 {}
6156}; 6176};
6157 6177
6158/* "NoFlikerScale" light frequency banding filter */ 6178/* "NoFlikerScale" light frequency banding filter */
@@ -6175,7 +6195,7 @@ static struct usb_action tas5130c_vf0250_NoFlikerScale[] = {
6175 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc, */ 6195 {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc, */
6176 {0xa0, 0x58, 0x011d}, /* 01,1d,58,cc, */ 6196 {0xa0, 0x58, 0x011d}, /* 01,1d,58,cc, */
6177 {0xa0, 0x03, 0x0180}, /* 01,80,03,cc */ 6197 {0xa0, 0x03, 0x0180}, /* 01,80,03,cc */
6178 {0, 0, 0} 6198 {}
6179}; 6199};
6180 6200
6181static void reg_r_i(struct usb_device *dev, 6201static void reg_r_i(struct usb_device *dev,
@@ -6325,7 +6345,7 @@ static void setbrightness(struct gspca_dev *gspca_dev)
6325 case SENSOR_PO2030: 6345 case SENSOR_PO2030:
6326 return; 6346 return;
6327 } 6347 }
6328/*fixme: is it really 011d 018d for all other sensors? */ 6348/*fixme: is it really write to 011d and 018d for all other sensors? */
6329 brightness = sd->brightness; 6349 brightness = sd->brightness;
6330 reg_w(gspca_dev->dev, brightness, 0x011d); 6350 reg_w(gspca_dev->dev, brightness, 0x011d);
6331 if (brightness < 0x70) 6351 if (brightness < 0x70)
@@ -6348,20 +6368,7 @@ static void setsharpness(struct gspca_dev *gspca_dev)
6348 {0x10, 0x1e} 6368 {0x10, 0x1e}
6349 }; 6369 };
6350 6370
6351 switch (sd->sensor) { 6371 sharpness = sd->sharpness;
6352 case SENSOR_GC0305:
6353 sharpness = 3;
6354 break;
6355 case SENSOR_OV7620:
6356 sharpness = 2;
6357 break;
6358 case SENSOR_PO2030:
6359 sharpness = 0;
6360 break;
6361 default:
6362 return;
6363 }
6364/*fixme: sharpness set by V4L2_CID_SATURATION?*/
6365 reg_w(dev, sharpness_tb[sharpness][0], 0x01c6); 6372 reg_w(dev, sharpness_tb[sharpness][0], 0x01c6);
6366 reg_r(dev, 0x01c8, &retbyte); 6373 reg_r(dev, 0x01c8, &retbyte);
6367 reg_r(dev, 0x01c9, &retbyte); 6374 reg_r(dev, 0x01c9, &retbyte);
@@ -6411,7 +6418,7 @@ static void setcontrast(struct gspca_dev *gspca_dev)
6411 static __u8 Tgradient_5[16] = 6418 static __u8 Tgradient_5[16] =
6412 {0x37, 0x26, 0x20, 0x1a, 0x14, 0x10, 0x0e, 0x0b, 6419 {0x37, 0x26, 0x20, 0x1a, 0x14, 0x10, 0x0e, 0x0b,
6413 0x09, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x02}; 6420 0x09, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x02};
6414 static __u8 Tgamma_6[16] = /* ?? was gama 5 */ 6421 static __u8 Tgamma_6[16] = /* ?? was gamma 5 */
6415 {0x24, 0x44, 0x64, 0x84, 0x9d, 0xb2, 0xc4, 0xd3, 6422 {0x24, 0x44, 0x64, 0x84, 0x9d, 0xb2, 0xc4, 0xd3,
6416 0xe0, 0xeb, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff}; 6423 0xe0, 0xeb, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff};
6417 static __u8 Tgradient_6[16] = 6424 static __u8 Tgradient_6[16] =
@@ -6425,7 +6432,7 @@ static void setcontrast(struct gspca_dev *gspca_dev)
6425 0, Tgradient_1, Tgradient_2, 6432 0, Tgradient_1, Tgradient_2,
6426 Tgradient_3, Tgradient_4, Tgradient_5, Tgradient_6 6433 Tgradient_3, Tgradient_4, Tgradient_5, Tgradient_6
6427 }; 6434 };
6428#ifdef GSPCA_DEBUG 6435#ifdef VIDEO_ADV_DEBUG
6429 __u8 v[16]; 6436 __u8 v[16];
6430#endif 6437#endif
6431 6438
@@ -6443,7 +6450,7 @@ static void setcontrast(struct gspca_dev *gspca_dev)
6443 else if (g <= 0) 6450 else if (g <= 0)
6444 g = 1; 6451 g = 1;
6445 reg_w(dev, g, 0x0120 + i); /* gamma */ 6452 reg_w(dev, g, 0x0120 + i); /* gamma */
6446#ifdef GSPCA_DEBUG 6453#ifdef VIDEO_ADV_DEBUG
6447 if (gspca_debug & D_CONF) 6454 if (gspca_debug & D_CONF)
6448 v[i] = g; 6455 v[i] = g;
6449#endif 6456#endif
@@ -6463,7 +6470,7 @@ static void setcontrast(struct gspca_dev *gspca_dev)
6463 g = 1; 6470 g = 1;
6464 } 6471 }
6465 reg_w(dev, g, 0x0130 + i); /* gradient */ 6472 reg_w(dev, g, 0x0130 + i); /* gradient */
6466#ifdef GSPCA_DEBUG 6473#ifdef VIDEO_ADV_DEBUG
6467 if (gspca_debug & D_CONF) 6474 if (gspca_debug & D_CONF)
6468 v[i] = g; 6475 v[i] = g;
6469#endif 6476#endif
@@ -6488,7 +6495,7 @@ static void setquality(struct gspca_dev *gspca_dev)
6488 return; 6495 return;
6489 } 6496 }
6490/*fixme: is it really 0008 0007 0018 for all other sensors? */ 6497/*fixme: is it really 0008 0007 0018 for all other sensors? */
6491 quality = sd->qindex & 0x0f; 6498 quality = sd->qindex;
6492 reg_w(dev, quality, 0x0008); 6499 reg_w(dev, quality, 0x0008);
6493 frxt = 0x30; 6500 frxt = 0x30;
6494 reg_w(dev, frxt, 0x0007); 6501 reg_w(dev, frxt, 0x0007);
@@ -6525,25 +6532,25 @@ static int setlightfreq(struct gspca_dev *gspca_dev)
6525 struct usb_action *zc3_freq; 6532 struct usb_action *zc3_freq;
6526 static struct usb_action *freq_tb[SENSOR_MAX][6] = { 6533 static struct usb_action *freq_tb[SENSOR_MAX][6] = {
6527/* SENSOR_CS2102 0 */ 6534/* SENSOR_CS2102 0 */
6528 {cs2102_50HZ, cs2102_50HZScale, 6535 {cs2102_NoFliker, cs2102_NoFlikerScale,
6529 cs2102_60HZ, cs2102_60HZScale, 6536 cs2102_50HZ, cs2102_50HZScale,
6530 cs2102_NoFliker, cs2102_NoFlikerScale}, 6537 cs2102_60HZ, cs2102_60HZScale},
6531/* SENSOR_CS2102K 1 */ 6538/* SENSOR_CS2102K 1 */
6532 {cs2102_50HZ, cs2102_50HZScale, 6539 {cs2102_NoFliker, cs2102_NoFlikerScale,
6533 cs2102_60HZ, cs2102_60HZScale, 6540 cs2102_50HZ, cs2102_50HZScale,
6534 cs2102_NoFliker, cs2102_NoFlikerScale}, 6541 cs2102_60HZ, cs2102_60HZScale},
6535/* SENSOR_GC0305 2 */ 6542/* SENSOR_GC0305 2 */
6536 {gc0305_50HZ, gc0305_50HZ, 6543 {gc0305_NoFliker, gc0305_NoFliker,
6537 gc0305_60HZ, gc0305_60HZ, 6544 gc0305_50HZ, gc0305_50HZ,
6538 gc0305_NoFliker, gc0305_NoFliker}, 6545 gc0305_60HZ, gc0305_60HZ},
6539/* SENSOR_HDCS2020 3 */ 6546/* SENSOR_HDCS2020 3 */
6540 {0, 0, 6547 {0, 0,
6541 0, 0, 6548 0, 0,
6542 0, 0}, 6549 0, 0},
6543/* SENSOR_HDCS2020b 4 */ 6550/* SENSOR_HDCS2020b 4 */
6544 {hdcs2020b_50HZ, hdcs2020b_50HZ, 6551 {hdcs2020b_NoFliker, hdcs2020b_NoFliker,
6545 hdcs2020b_60HZ, hdcs2020b_60HZ, 6552 hdcs2020b_50HZ, hdcs2020b_50HZ,
6546 hdcs2020b_NoFliker, hdcs2020b_NoFliker}, 6553 hdcs2020b_60HZ, hdcs2020b_60HZ},
6547/* SENSOR_HV7131B 5 */ 6554/* SENSOR_HV7131B 5 */
6548 {0, 0, 6555 {0, 0,
6549 0, 0, 6556 0, 0,
@@ -6553,66 +6560,48 @@ static int setlightfreq(struct gspca_dev *gspca_dev)
6553 0, 0, 6560 0, 0,
6554 0, 0}, 6561 0, 0},
6555/* SENSOR_ICM105A 7 */ 6562/* SENSOR_ICM105A 7 */
6556 {icm105a_50HZ, icm105a_50HZScale, 6563 {icm105a_NoFliker, icm105a_NoFlikerScale,
6557 icm105a_60HZ, icm105a_60HZScale, 6564 icm105a_50HZ, icm105a_50HZScale,
6558 icm105a_NoFliker, icm105a_NoFlikerScale}, 6565 icm105a_60HZ, icm105a_60HZScale},
6559/* SENSOR_MC501CB 8 */ 6566/* SENSOR_MC501CB 8 */
6560 {MC501CB_50HZ, MC501CB_50HZScale, 6567 {MC501CB_NoFliker, MC501CB_NoFlikerScale,
6561 MC501CB_60HZ, MC501CB_60HZScale, 6568 MC501CB_50HZ, MC501CB_50HZScale,
6562 MC501CB_NoFliker, MC501CB_NoFlikerScale}, 6569 MC501CB_60HZ, MC501CB_60HZScale},
6563/* SENSOR_OV7620 9 */ 6570/* SENSOR_OV7620 9 */
6564 {OV7620_50HZ, OV7620_50HZ, 6571 {OV7620_NoFliker, OV7620_NoFliker,
6565 OV7620_60HZ, OV7620_60HZ, 6572 OV7620_50HZ, OV7620_50HZ,
6566 OV7620_NoFliker, OV7620_NoFliker}, 6573 OV7620_60HZ, OV7620_60HZ},
6567/* SENSOR_OV7630C 10 */ 6574/* SENSOR_OV7630C 10 */
6568 {0, 0, 6575 {0, 0,
6569 0, 0, 6576 0, 0,
6570 0, 0}, 6577 0, 0},
6571/* SENSOR_free 11 */ 6578/* SENSOR_PAS106 11 */
6572 {0, 0, 6579 {pas106b_NoFliker, pas106b_NoFliker,
6573 0, 0, 6580 pas106b_50HZ, pas106b_50HZ,
6574 0, 0}, 6581 pas106b_60HZ, pas106b_60HZ},
6575/* SENSOR_PAS106 12 */ 6582/* SENSOR_PB0330 12 */
6576 {pas106b_50HZ, pas106b_50HZ, 6583 {pb0330_NoFliker, pb0330_NoFlikerScale,
6577 pas106b_60HZ, pas106b_60HZ, 6584 pb0330_50HZ, pb0330_50HZScale,
6578 pas106b_NoFliker, pas106b_NoFliker}, 6585 pb0330_60HZ, pb0330_60HZScale},
6579/* SENSOR_PB0330 13 */ 6586/* SENSOR_PO2030 13 */
6580 {pb0330_50HZ, pb0330_50HZScale, 6587 {PO2030_NoFliker, PO2030_NoFliker,
6581 pb0330_60HZ, pb0330_60HZScale, 6588 PO2030_50HZ, PO2030_50HZ,
6582 pb0330_NoFliker, pb0330_NoFlikerScale}, 6589 PO2030_60HZ, PO2030_60HZ},
6583/* SENSOR_PO2030 14 */ 6590/* SENSOR_TAS5130CK 14 */
6584 {PO2030_50HZ, PO2030_50HZ, 6591 {tas5130cxx_NoFliker, tas5130cxx_NoFlikerScale,
6585 PO2030_60HZ, PO2030_60HZ, 6592 tas5130cxx_50HZ, tas5130cxx_50HZScale,
6586 PO2030_NoFliker, PO2030_NoFliker}, 6593 tas5130cxx_60HZ, tas5130cxx_60HZScale},
6587/* SENSOR_TAS5130CK 15 */ 6594/* SENSOR_TAS5130CXX 15 */
6588 {tas5130cxx_50HZ, tas5130cxx_50HZScale, 6595 {tas5130cxx_NoFliker, tas5130cxx_NoFlikerScale,
6589 tas5130cxx_60HZ, tas5130cxx_60HZScale, 6596 tas5130cxx_50HZ, tas5130cxx_50HZScale,
6590 tas5130cxx_NoFliker, tas5130cxx_NoFlikerScale}, 6597 tas5130cxx_60HZ, tas5130cxx_60HZScale},
6591/* SENSOR_TAS5130CXX 16 */ 6598/* SENSOR_TAS5130C_VF0250 16 */
6592 {tas5130cxx_50HZ, tas5130cxx_50HZScale, 6599 {tas5130c_vf0250_NoFliker, tas5130c_vf0250_NoFlikerScale,
6593 tas5130cxx_60HZ, tas5130cxx_60HZScale, 6600 tas5130c_vf0250_50HZ, tas5130c_vf0250_50HZScale,
6594 tas5130cxx_NoFliker, tas5130cxx_NoFlikerScale}, 6601 tas5130c_vf0250_60HZ, tas5130c_vf0250_60HZScale},
6595/* SENSOR_TAS5130C_VF0250 17 */
6596 {tas5130c_vf0250_50HZ, tas5130c_vf0250_50HZScale,
6597 tas5130c_vf0250_60HZ, tas5130c_vf0250_60HZScale,
6598 tas5130c_vf0250_NoFliker, tas5130c_vf0250_NoFlikerScale},
6599 }; 6602 };
6600 6603
6601 switch (lightfreq) { 6604 i = sd->lightfreq * 2;
6602 case 50:
6603 i = 0;
6604 break;
6605 case 60:
6606 i = 2;
6607 break;
6608 default:
6609 PDEBUG(D_ERR, "Invalid light freq value %d", lightfreq);
6610 lightfreq = 0; /* set to default filter value */
6611 /* fall thru */
6612 case 0:
6613 i = 4;
6614 break;
6615 }
6616 mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].mode; 6605 mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].mode;
6617 if (!mode) 6606 if (!mode)
6618 i++; /* 640x480 */ 6607 i++; /* 640x480 */
@@ -6622,13 +6611,13 @@ static int setlightfreq(struct gspca_dev *gspca_dev)
6622 switch (sd->sensor) { 6611 switch (sd->sensor) {
6623 case SENSOR_GC0305: 6612 case SENSOR_GC0305:
6624 if (mode /* if 320x240 */ 6613 if (mode /* if 320x240 */
6625 && lightfreq == 50) 6614 && sd->lightfreq == 1) /* and 50Hz */
6626 reg_w(gspca_dev->dev, 0x85, 0x018d); 6615 reg_w(gspca_dev->dev, 0x85, 0x018d);
6627 /* win: 0x80, 0x018d */ 6616 /* win: 0x80, 0x018d */
6628 break; 6617 break;
6629 case SENSOR_OV7620: 6618 case SENSOR_OV7620:
6630 if (!mode) { /* if 640x480 */ 6619 if (!mode) { /* if 640x480 */
6631 if (lightfreq != 0) /* 50 or 60 Hz */ 6620 if (sd->lightfreq != 0) /* and 50 or 60 Hz */
6632 reg_w(gspca_dev->dev, 0x40, 0x0002); 6621 reg_w(gspca_dev->dev, 0x40, 0x0002);
6633 else 6622 else
6634 reg_w(gspca_dev->dev, 0x44, 0x0002); 6623 reg_w(gspca_dev->dev, 0x44, 0x0002);
@@ -6653,9 +6642,9 @@ static void setautogain(struct gspca_dev *gspca_dev)
6653 6642
6654static void send_unknown(struct usb_device *dev, int sensor) 6643static void send_unknown(struct usb_device *dev, int sensor)
6655{ 6644{
6645 reg_w(dev, 0x01, 0x0000); /* led off */
6656 switch (sensor) { 6646 switch (sensor) {
6657 case SENSOR_PAS106: 6647 case SENSOR_PAS106:
6658 reg_w(dev, 0x01, 0x0000);
6659 reg_w(dev, 0x03, 0x003a); 6648 reg_w(dev, 0x03, 0x003a);
6660 reg_w(dev, 0x0c, 0x003b); 6649 reg_w(dev, 0x0c, 0x003b);
6661 reg_w(dev, 0x08, 0x0038); 6650 reg_w(dev, 0x08, 0x0038);
@@ -6664,7 +6653,6 @@ static void send_unknown(struct usb_device *dev, int sensor)
6664 case SENSOR_OV7620: 6653 case SENSOR_OV7620:
6665 case SENSOR_PB0330: 6654 case SENSOR_PB0330:
6666 case SENSOR_PO2030: 6655 case SENSOR_PO2030:
6667 reg_w(dev, 0x01, 0x0000);
6668 reg_w(dev, 0x0d, 0x003a); 6656 reg_w(dev, 0x0d, 0x003a);
6669 reg_w(dev, 0x02, 0x003b); 6657 reg_w(dev, 0x02, 0x003b);
6670 reg_w(dev, 0x00, 0x0038); 6658 reg_w(dev, 0x00, 0x0038);
@@ -6817,7 +6805,7 @@ static int vga_3wr_probe(struct gspca_dev *gspca_dev)
6817 6805
6818/*fixme: lack of 8b=b3 (11,12)-> 10, 8b=e0 (14,15,16)-> 12 found in gspcav1*/ 6806/*fixme: lack of 8b=b3 (11,12)-> 10, 8b=e0 (14,15,16)-> 12 found in gspcav1*/
6819 reg_w(dev, 0x02, 0x0010); 6807 reg_w(dev, 0x02, 0x0010);
6820 reg_r(dev, 0x0010, &retbyte); 6808 reg_r(dev, 0x10, &retbyte);
6821 reg_w(dev, 0x01, 0x0000); 6809 reg_w(dev, 0x01, 0x0000);
6822 reg_w(dev, 0x00, 0x0010); 6810 reg_w(dev, 0x00, 0x0010);
6823 reg_w(dev, 0x01, 0x0001); 6811 reg_w(dev, 0x01, 0x0001);
@@ -6964,7 +6952,7 @@ static int sd_config(struct gspca_dev *gspca_dev,
6964 int sensor; 6952 int sensor;
6965 __u8 bsensor; 6953 __u8 bsensor;
6966 int vga = 1; /* 1: vga, 0: sif */ 6954 int vga = 1; /* 1: vga, 0: sif */
6967 static unsigned char gamma[SENSOR_MAX] = { 6955 static __u8 gamma[SENSOR_MAX] = {
6968 5, /* SENSOR_CS2102 0 */ 6956 5, /* SENSOR_CS2102 0 */
6969 5, /* SENSOR_CS2102K 1 */ 6957 5, /* SENSOR_CS2102K 1 */
6970 4, /* SENSOR_GC0305 2 */ 6958 4, /* SENSOR_GC0305 2 */
@@ -6976,16 +6964,16 @@ static int sd_config(struct gspca_dev *gspca_dev,
6976 4, /* SENSOR_MC501CB 8 */ 6964 4, /* SENSOR_MC501CB 8 */
6977 3, /* SENSOR_OV7620 9 */ 6965 3, /* SENSOR_OV7620 9 */
6978 4, /* SENSOR_OV7630C 10 */ 6966 4, /* SENSOR_OV7630C 10 */
6979 4, /* SENSOR_free 11 */ 6967 4, /* SENSOR_PAS106 11 */
6980 4, /* SENSOR_PAS106 12 */ 6968 4, /* SENSOR_PB0330 12 */
6981 4, /* SENSOR_PB0330 13 */ 6969 4, /* SENSOR_PO2030 13 */
6982 4, /* SENSOR_PO2030 14 */ 6970 4, /* SENSOR_TAS5130CK 14 */
6983 4, /* SENSOR_TAS5130CK 15 */ 6971 4, /* SENSOR_TAS5130CXX 15 */
6984 4, /* SENSOR_TAS5130CXX 16 */ 6972 3, /* SENSOR_TAS5130C_VF0250 16 */
6985 3, /* SENSOR_TAS5130C_VF0250 17 */
6986 }; 6973 };
6987 6974
6988 /* define some sensors from the vendor/product */ 6975 /* define some sensors from the vendor/product */
6976 sd->sharpness = 2;
6989 switch (id->idVendor) { 6977 switch (id->idVendor) {
6990 case 0x041e: /* Creative */ 6978 case 0x041e: /* Creative */
6991 switch (id->idProduct) { 6979 switch (id->idProduct) {
@@ -7055,8 +7043,9 @@ static int sd_config(struct gspca_dev *gspca_dev,
7055 sd->sensor = SENSOR_ICM105A; 7043 sd->sensor = SENSOR_ICM105A;
7056 break; 7044 break;
7057 case 0x0e: 7045 case 0x0e:
7058 PDEBUG(D_PROBE, "Find Sensor PAS202BCB"); 7046 PDEBUG(D_PROBE, "Find Sensor HDCS2020");
7059 sd->sensor = SENSOR_HDCS2020; 7047 sd->sensor = SENSOR_HDCS2020;
7048 sd->sharpness = 1;
7060 break; 7049 break;
7061 case 0x0f: 7050 case 0x0f:
7062 PDEBUG(D_PROBE, "Find Sensor PAS106"); 7051 PDEBUG(D_PROBE, "Find Sensor PAS106");
@@ -7097,6 +7086,7 @@ static int sd_config(struct gspca_dev *gspca_dev,
7097 case 0x2030: 7086 case 0x2030:
7098 PDEBUG(D_PROBE, "Find Sensor PO2030"); 7087 PDEBUG(D_PROBE, "Find Sensor PO2030");
7099 sd->sensor = SENSOR_PO2030; 7088 sd->sensor = SENSOR_PO2030;
7089 sd->sharpness = 0; /* from win traces */
7100 break; 7090 break;
7101 case 0x7620: 7091 case 0x7620:
7102 PDEBUG(D_PROBE, "Find Sensor OV7620"); 7092 PDEBUG(D_PROBE, "Find Sensor OV7620");
@@ -7134,13 +7124,13 @@ static int sd_config(struct gspca_dev *gspca_dev,
7134 sd->qindex = 1; 7124 sd->qindex = 1;
7135 sd->brightness = sd_ctrls[SD_BRIGHTNESS].qctrl.default_value; 7125 sd->brightness = sd_ctrls[SD_BRIGHTNESS].qctrl.default_value;
7136 sd->contrast = sd_ctrls[SD_CONTRAST].qctrl.default_value; 7126 sd->contrast = sd_ctrls[SD_CONTRAST].qctrl.default_value;
7137 sd->autogain = sd_ctrls[SD_AUTOGAIN].qctrl.default_value;
7138 sd->gamma = gamma[(int) sd->sensor]; 7127 sd->gamma = gamma[(int) sd->sensor];
7128 sd->autogain = sd_ctrls[SD_AUTOGAIN].qctrl.default_value;
7129 sd->lightfreq = sd_ctrls[SD_FREQ].qctrl.default_value;
7130 sd->sharpness = sd_ctrls[SD_SHARPNESS].qctrl.default_value;
7139 7131
7140 /* switch the led off */ 7132 /* switch the led off */
7141/*fixme: other sensors? */ 7133 reg_w(gspca_dev->dev, 0x01, 0x0000);
7142 if (sensor == 0x06 || sensor == 0x11)
7143 reg_w(gspca_dev->dev, 0x01, 0x0000);
7144 return 0; 7134 return 0;
7145} 7135}
7146 7136
@@ -7170,15 +7160,14 @@ static void sd_start(struct gspca_dev *gspca_dev)
7170 {MC501CB_InitialScale, MC501CB_Initial}, /* 9 */ 7160 {MC501CB_InitialScale, MC501CB_Initial}, /* 9 */
7171 {OV7620_mode0, OV7620_mode1}, /* 9 */ 7161 {OV7620_mode0, OV7620_mode1}, /* 9 */
7172 {ov7630c_InitialScale, ov7630c_Initial}, /* 10 */ 7162 {ov7630c_InitialScale, ov7630c_Initial}, /* 10 */
7173 {0, 0}, /* 11 */ 7163 {pas106b_InitialScale, pas106b_Initial}, /* 11 */
7174 {pas106b_InitialScale, pas106b_Initial}, /* 12 */ 7164 {pb0330xx_InitialScale, pb0330xx_Initial}, /* 12 */
7175 {pb0330xx_InitialScale, pb0330xx_Initial}, /* 13 */
7176/* or {pb03303x_InitialScale, pb03303x_Initial}, */ 7165/* or {pb03303x_InitialScale, pb03303x_Initial}, */
7177 {PO2030_mode0, PO2030_mode1}, /* 14 */ 7166 {PO2030_mode0, PO2030_mode1}, /* 13 */
7178 {tas5130CK_InitialScale, tas5130CK_Initial}, /* 15 */ 7167 {tas5130CK_InitialScale, tas5130CK_Initial}, /* 14 */
7179 {tas5130cxx_InitialScale, tas5130cxx_Initial}, /* 16 */ 7168 {tas5130cxx_InitialScale, tas5130cxx_Initial}, /* 15 */
7180 {tas5130c_vf0250_InitialScale, tas5130c_vf0250_Initial}, 7169 {tas5130c_vf0250_InitialScale, tas5130c_vf0250_Initial},
7181 /* 17 */ 7170 /* 16 */
7182 }; 7171 };
7183 7172
7184 mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].mode; 7173 mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].mode;
@@ -7324,7 +7313,7 @@ static void sd_close(struct gspca_dev *gspca_dev)
7324 7313
7325static void sd_pkt_scan(struct gspca_dev *gspca_dev, 7314static void sd_pkt_scan(struct gspca_dev *gspca_dev,
7326 struct gspca_frame *frame, 7315 struct gspca_frame *frame,
7327 unsigned char *data, 7316 __u8 *data,
7328 int len) 7317 int len)
7329{ 7318{
7330 7319
@@ -7401,6 +7390,16 @@ static int sd_getautogain(struct gspca_dev *gspca_dev, __s32 *val)
7401 return 0; 7390 return 0;
7402} 7391}
7403 7392
7393static int sd_setgamma(struct gspca_dev *gspca_dev, __s32 val)
7394{
7395 struct sd *sd = (struct sd *) gspca_dev;
7396
7397 sd->gamma = val;
7398 if (gspca_dev->streaming)
7399 setcontrast(gspca_dev);
7400 return 0;
7401}
7402
7404static int sd_getgamma(struct gspca_dev *gspca_dev, __s32 *val) 7403static int sd_getgamma(struct gspca_dev *gspca_dev, __s32 *val)
7405{ 7404{
7406 struct sd *sd = (struct sd *) gspca_dev; 7405 struct sd *sd = (struct sd *) gspca_dev;
@@ -7409,6 +7408,63 @@ static int sd_getgamma(struct gspca_dev *gspca_dev, __s32 *val)
7409 return 0; 7408 return 0;
7410} 7409}
7411 7410
7411static int sd_setfreq(struct gspca_dev *gspca_dev, __s32 val)
7412{
7413 struct sd *sd = (struct sd *) gspca_dev;
7414
7415 sd->lightfreq = val;
7416 if (gspca_dev->streaming)
7417 setlightfreq(gspca_dev);
7418 return 0;
7419}
7420
7421static int sd_getfreq(struct gspca_dev *gspca_dev, __s32 *val)
7422{
7423 struct sd *sd = (struct sd *) gspca_dev;
7424
7425 *val = sd->lightfreq;
7426 return 0;
7427}
7428
7429static int sd_setsharpness(struct gspca_dev *gspca_dev, __s32 val)
7430{
7431 struct sd *sd = (struct sd *) gspca_dev;
7432
7433 sd->sharpness = val;
7434 if (gspca_dev->streaming)
7435 setsharpness(gspca_dev);
7436 return 0;
7437}
7438
7439static int sd_getsharpness(struct gspca_dev *gspca_dev, __s32 *val)
7440{
7441 struct sd *sd = (struct sd *) gspca_dev;
7442
7443 *val = sd->sharpness;
7444 return 0;
7445}
7446
7447static int sd_querymenu(struct gspca_dev *gspca_dev,
7448 struct v4l2_querymenu *menu)
7449{
7450 switch (menu->id) {
7451 case V4L2_CID_POWER_LINE_FREQUENCY:
7452 switch (menu->index) {
7453 case 0: /* V4L2_CID_POWER_LINE_FREQUENCY_DISABLED */
7454 strcpy(menu->name, "NoFliker");
7455 return 0;
7456 case 1: /* V4L2_CID_POWER_LINE_FREQUENCY_50HZ */
7457 strcpy(menu->name, "50 Hz");
7458 return 0;
7459 case 2: /* V4L2_CID_POWER_LINE_FREQUENCY_60HZ */
7460 strcpy(menu->name, "60 Hz");
7461 return 0;
7462 }
7463 break;
7464 }
7465 return -EINVAL;
7466}
7467
7412static struct sd_desc sd_desc = { 7468static struct sd_desc sd_desc = {
7413 .name = MODULE_NAME, 7469 .name = MODULE_NAME,
7414 .ctrls = sd_ctrls, 7470 .ctrls = sd_ctrls,
@@ -7420,6 +7476,7 @@ static struct sd_desc sd_desc = {
7420 .stop0 = sd_stop0, 7476 .stop0 = sd_stop0,
7421 .close = sd_close, 7477 .close = sd_close,
7422 .pkt_scan = sd_pkt_scan, 7478 .pkt_scan = sd_pkt_scan,
7479 .querymenu = sd_querymenu,
7423}; 7480};
7424 7481
7425#define DVNM(name) .driver_info = (kernel_ulong_t) name 7482#define DVNM(name) .driver_info = (kernel_ulong_t) name
@@ -7514,10 +7571,6 @@ static void __exit sd_mod_exit(void)
7514module_init(sd_mod_init); 7571module_init(sd_mod_init);
7515module_exit(sd_mod_exit); 7572module_exit(sd_mod_exit);
7516 7573
7517module_param(lightfreq, int, 0644);
7518MODULE_PARM_DESC(lightfreq,
7519 "Light frequency banding filter: 50, 60 Hz or"
7520 " 0 to NoFliker (default=50)");
7521module_param(force_sensor, int, 0644); 7574module_param(force_sensor, int, 0644);
7522MODULE_PARM_DESC(force_sensor, 7575MODULE_PARM_DESC(force_sensor,
7523 "Force sensor. Only for experts!!!"); 7576 "Force sensor. Only for experts!!!");