aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/gspca/zc3xx.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video/gspca/zc3xx.c')
-rw-r--r--drivers/media/video/gspca/zc3xx.c774
1 files changed, 307 insertions, 467 deletions
diff --git a/drivers/media/video/gspca/zc3xx.c b/drivers/media/video/gspca/zc3xx.c
index 5c9113098e7f..0666038a51b0 100644
--- a/drivers/media/video/gspca/zc3xx.c
+++ b/drivers/media/video/gspca/zc3xx.c
@@ -52,11 +52,16 @@ struct sd {
52#define QUALITY_MAX 80 52#define QUALITY_MAX 80
53#define QUALITY_DEF 70 53#define QUALITY_DEF 70
54 54
55 u8 bridge;
55 u8 sensor; /* Type of image sensor chip */ 56 u8 sensor; /* Type of image sensor chip */
56 u16 chip_revision; 57 u16 chip_revision;
57 58
58 u8 jpeg_hdr[JPEG_HDR_SZ]; 59 u8 jpeg_hdr[JPEG_HDR_SZ];
59}; 60};
61enum bridges {
62 BRIDGE_ZC301,
63 BRIDGE_ZC303,
64};
60enum sensors { 65enum sensors {
61 SENSOR_ADCM2700, 66 SENSOR_ADCM2700,
62 SENSOR_CS2102, 67 SENSOR_CS2102,
@@ -67,14 +72,14 @@ enum sensors {
67 SENSOR_HV7131R, 72 SENSOR_HV7131R,
68 SENSOR_ICM105A, 73 SENSOR_ICM105A,
69 SENSOR_MC501CB, 74 SENSOR_MC501CB,
70 SENSOR_MI0360SOC, /* = MT9V111 */ 75 SENSOR_MT9V111_1, /* (mi360soc) zc301 */
76 SENSOR_MT9V111_3, /* (mi360soc) zc303 */
71 SENSOR_OV7620, /* OV7648 - same values */ 77 SENSOR_OV7620, /* OV7648 - same values */
72 SENSOR_OV7630C, 78 SENSOR_OV7630C,
73 SENSOR_PAS106, 79 SENSOR_PAS106,
74 SENSOR_PAS202B, 80 SENSOR_PAS202B,
75 SENSOR_PB0330, 81 SENSOR_PB0330,
76 SENSOR_PO2030, 82 SENSOR_PO2030,
77 SENSOR_TAS5130CK,
78 SENSOR_TAS5130C, 83 SENSOR_TAS5130C,
79 SENSOR_TAS5130C_VF0250, 84 SENSOR_TAS5130C_VF0250,
80 SENSOR_MAX 85 SENSOR_MAX
@@ -4249,8 +4254,8 @@ static const struct usb_action pas202b_NoFlikerScale[] = {
4249 {} 4254 {}
4250}; 4255};
4251 4256
4252/* mi0360soc and pb0330 from vm30x.inf for 0ac8:301b and 0ac8:303b 07/02/13 */ 4257/* mt9v111 (mi0360soc) and pb0330 from vm30x.inf 0ac8:301b 07/02/13 */
4253static const struct usb_action mi0360soc_Initial[] = { /* 640x480 */ 4258static const struct usb_action mt9v111_1_Initial[] = { /* 640x480 */
4254 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 4259 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
4255 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 4260 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
4256 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, 4261 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
@@ -4261,14 +4266,14 @@ static const struct usb_action mi0360soc_Initial[] = { /* 640x480 */
4261 {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 4266 {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
4262 {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, 4267 {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
4263 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 4268 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
4264 {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, /*jfm: was 03*/ 4269 {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
4265/* {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, */
4266 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 4270 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
4267 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 4271 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
4268 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 4272 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
4269 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 4273 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
4270 {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, 4274 {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
4271 {0xdd, 0x00, 0x0200}, 4275 {0xdd, 0x00, 0x0200},
4276 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4272 {0xaa, 0x01, 0x0001}, 4277 {0xaa, 0x01, 0x0001},
4273 {0xaa, 0x06, 0x0000}, 4278 {0xaa, 0x06, 0x0000},
4274 {0xaa, 0x08, 0x0483}, 4279 {0xaa, 0x08, 0x0483},
@@ -4278,18 +4283,18 @@ static const struct usb_action mi0360soc_Initial[] = { /* 640x480 */
4278 {0xaa, 0x03, 0x01e5}, /*jfm: was 01e7*/ 4283 {0xaa, 0x03, 0x01e5}, /*jfm: was 01e7*/
4279 {0xaa, 0x04, 0x0285}, /*jfm: was 0287*/ 4284 {0xaa, 0x04, 0x0285}, /*jfm: was 0287*/
4280 {0xaa, 0x07, 0x3002}, 4285 {0xaa, 0x07, 0x3002},
4281 {0xaa, 0x20, 0x5100}, /*jfm: was 1100*/ 4286 {0xaa, 0x20, 0x5100},
4282 {0xaa, 0x35, 0x507f}, /*jfm: was 0050*/ 4287 {0xaa, 0x35, 0x507f},
4283 {0xaa, 0x30, 0x0005}, 4288 {0xaa, 0x30, 0x0005},
4284 {0xaa, 0x31, 0x0000}, 4289 {0xaa, 0x31, 0x0000},
4285 {0xaa, 0x58, 0x0078}, 4290 {0xaa, 0x58, 0x0078},
4286 {0xaa, 0x62, 0x0411}, 4291 {0xaa, 0x62, 0x0411},
4287 {0xaa, 0x2b, 0x0028}, 4292 {0xaa, 0x2b, 0x007f},
4288 {0xaa, 0x2c, 0x007f}, /*jfm: was 0030*/ 4293 {0xaa, 0x2c, 0x007f}, /*jfm: was 0030*/
4289 {0xaa, 0x2d, 0x007f}, /*jfm: was 0030*/ 4294 {0xaa, 0x2d, 0x007f}, /*jfm: was 0030*/
4290 {0xaa, 0x2e, 0x007f}, /*jfm: was 0030*/ 4295 {0xaa, 0x2e, 0x007f}, /*jfm: was 0030*/
4291 {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, 4296 {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},
4292 {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /*jfm: was 37*/ 4297 {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION},
4293 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 4298 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4294 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 4299 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
4295 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 4300 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
@@ -4299,12 +4304,12 @@ static const struct usb_action mi0360soc_Initial[] = { /* 640x480 */
4299 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 4304 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
4300 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 4305 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
4301 {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 4306 {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
4302 {0xa0, 0x6c, ZC3XX_R18D_YTARGET}, /* jfm: was 78 */ 4307 {0xa0, 0x6c, ZC3XX_R18D_YTARGET},
4303 {0xa0, 0x61, ZC3XX_R116_RGAIN}, 4308 {0xa0, 0x61, ZC3XX_R116_RGAIN},
4304 {0xa0, 0x65, ZC3XX_R118_BGAIN}, 4309 {0xa0, 0x65, ZC3XX_R118_BGAIN},
4305 {} 4310 {}
4306}; 4311};
4307static const struct usb_action mi0360soc_InitialScale[] = { /* 320x240 */ 4312static const struct usb_action mt9v111_1_InitialScale[] = { /* 320x240 */
4308 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 4313 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
4309 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 4314 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
4310 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, 4315 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
@@ -4315,14 +4320,14 @@ static const struct usb_action mi0360soc_InitialScale[] = { /* 320x240 */
4315 {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 4320 {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
4316 {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, 4321 {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
4317 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 4322 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
4318 {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, /*jfm: was 03*/ 4323 {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
4319/* {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, */
4320 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 4324 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
4321 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 4325 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
4322 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 4326 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
4323 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 4327 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
4324 {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, 4328 {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
4325 {0xdd, 0x00, 0x0200}, 4329 {0xdd, 0x00, 0x0200},
4330 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4326 {0xaa, 0x01, 0x0001}, 4331 {0xaa, 0x01, 0x0001},
4327 {0xaa, 0x06, 0x0000}, 4332 {0xaa, 0x06, 0x0000},
4328 {0xaa, 0x08, 0x0483}, 4333 {0xaa, 0x08, 0x0483},
@@ -4332,7 +4337,7 @@ static const struct usb_action mi0360soc_InitialScale[] = { /* 320x240 */
4332 {0xaa, 0x03, 0x01e7}, 4337 {0xaa, 0x03, 0x01e7},
4333 {0xaa, 0x04, 0x0287}, 4338 {0xaa, 0x04, 0x0287},
4334 {0xaa, 0x07, 0x3002}, 4339 {0xaa, 0x07, 0x3002},
4335 {0xaa, 0x20, 0x5100}, /*jfm: was 1100*/ 4340 {0xaa, 0x20, 0x5100},
4336 {0xaa, 0x35, 0x007f}, /*jfm: was 0050*/ 4341 {0xaa, 0x35, 0x007f}, /*jfm: was 0050*/
4337 {0xaa, 0x30, 0x0005}, 4342 {0xaa, 0x30, 0x0005},
4338 {0xaa, 0x31, 0x0000}, 4343 {0xaa, 0x31, 0x0000},
@@ -4343,7 +4348,7 @@ static const struct usb_action mi0360soc_InitialScale[] = { /* 320x240 */
4343 {0xaa, 0x2d, 0x007f}, /*jfm: was 30*/ 4348 {0xaa, 0x2d, 0x007f}, /*jfm: was 30*/
4344 {0xaa, 0x2e, 0x007f}, /*jfm: was 28*/ 4349 {0xaa, 0x2e, 0x007f}, /*jfm: was 28*/
4345 {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, 4350 {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},
4346 {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /*jfm: was 37*/ 4351 {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION},
4347 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 4352 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4348 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 4353 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
4349 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 4354 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
@@ -4353,12 +4358,12 @@ static const struct usb_action mi0360soc_InitialScale[] = { /* 320x240 */
4353 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 4358 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
4354 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 4359 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
4355 {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 4360 {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
4356 {0xa0, 0x6c, ZC3XX_R18D_YTARGET}, /*jfm: was 78*/ 4361 {0xa0, 0x6c, ZC3XX_R18D_YTARGET},
4357 {0xa0, 0x61, ZC3XX_R116_RGAIN}, 4362 {0xa0, 0x61, ZC3XX_R116_RGAIN},
4358 {0xa0, 0x65, ZC3XX_R118_BGAIN}, 4363 {0xa0, 0x65, ZC3XX_R118_BGAIN},
4359 {} 4364 {}
4360}; 4365};
4361static const struct usb_action mi360soc_AE50HZ[] = { 4366static const struct usb_action mt9v111_1_AE50HZ[] = {
4362 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 4367 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4363 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 4368 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4364 {0xbb, 0x00, 0x0562}, 4369 {0xbb, 0x00, 0x0562},
@@ -4381,7 +4386,7 @@ static const struct usb_action mi360soc_AE50HZ[] = {
4381 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 4386 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4382 {} 4387 {}
4383}; 4388};
4384static const struct usb_action mi360soc_AE50HZScale[] = { 4389static const struct usb_action mt9v111_1_AE50HZScale[] = {
4385 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 4390 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4386 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 4391 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4387 {0xbb, 0x00, 0x0509}, 4392 {0xbb, 0x00, 0x0509},
@@ -4403,11 +4408,11 @@ static const struct usb_action mi360soc_AE50HZScale[] = {
4403 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 4408 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4404 {} 4409 {}
4405}; 4410};
4406static const struct usb_action mi360soc_AE60HZ[] = { 4411static const struct usb_action mt9v111_1_AE60HZ[] = {
4407 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 4412 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4408 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 4413 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4409 {0xbb, 0x00, 0x053d}, 4414 {0xaa, 0x05, 0x003d},
4410 {0xbb, 0x01, 0x096e}, 4415 {0xaa, 0x09, 0x016e},
4411 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 4416 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4412 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 4417 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4413 {0xa0, 0xdd, ZC3XX_R192_EXPOSURELIMITLOW}, 4418 {0xa0, 0xdd, ZC3XX_R192_EXPOSURELIMITLOW},
@@ -4426,7 +4431,7 @@ static const struct usb_action mi360soc_AE60HZ[] = {
4426 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 4431 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4427 {} 4432 {}
4428}; 4433};
4429static const struct usb_action mi360soc_AE60HZScale[] = { 4434static const struct usb_action mt9v111_1_AE60HZScale[] = {
4430 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 4435 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4431 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 4436 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4432 {0xbb, 0x00, 0x0509}, 4437 {0xbb, 0x00, 0x0509},
@@ -4448,7 +4453,7 @@ static const struct usb_action mi360soc_AE60HZScale[] = {
4448 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 4453 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4449 {} 4454 {}
4450}; 4455};
4451static const struct usb_action mi360soc_AENoFliker[] = { 4456static const struct usb_action mt9v111_1_AENoFliker[] = {
4452 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 4457 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4453 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 4458 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4454 {0xbb, 0x00, 0x0509}, 4459 {0xbb, 0x00, 0x0509},
@@ -4471,7 +4476,7 @@ static const struct usb_action mi360soc_AENoFliker[] = {
4471 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 4476 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4472 {} 4477 {}
4473}; 4478};
4474static const struct usb_action mi360soc_AENoFlikerScale[] = { 4479static const struct usb_action mt9v111_1_AENoFlikerScale[] = {
4475 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 4480 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4476 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 4481 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4477 {0xbb, 0x00, 0x0534}, 4482 {0xbb, 0x00, 0x0534},
@@ -4494,6 +4499,251 @@ static const struct usb_action mi360soc_AENoFlikerScale[] = {
4494 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 4499 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4495 {} 4500 {}
4496}; 4501};
4502/* from usbvm303.inf 0ac8:303b 07/03/25 (3 - tas5130c) */
4503static const struct usb_action mt9v111_3_Initial[] = {
4504 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
4505 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
4506 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
4507 {0xa0, 0x04, ZC3XX_R002_CLOCKSELECT},
4508 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
4509 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
4510 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
4511 {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
4512 {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
4513 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
4514 {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
4515 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
4516 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
4517 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
4518 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
4519 {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
4520 {0xdd, 0x00, 0x0200},
4521 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4522 {0xaa, 0x01, 0x0001}, /* select IFP/SOC registers */
4523 {0xaa, 0x06, 0x0000}, /* operating mode control */
4524 {0xaa, 0x08, 0x0483}, /* output format control */
4525 /* H red first, V red or blue first,
4526 * raw Bayer, auto flicker */
4527 {0xaa, 0x01, 0x0004}, /* select sensor core registers */
4528 {0xaa, 0x08, 0x0006}, /* row start */
4529 {0xaa, 0x02, 0x0011}, /* column start */
4530 {0xaa, 0x03, 0x01e5}, /* window height - 1 */
4531 {0xaa, 0x04, 0x0285}, /* window width - 1 */
4532 {0xaa, 0x07, 0x3002}, /* output control */
4533 {0xaa, 0x20, 0x1100}, /* read mode: bits 8 & 12 (?) */
4534 {0xaa, 0x35, 0x007f}, /* global gain */
4535 {0xaa, 0x30, 0x0005},
4536 {0xaa, 0x31, 0x0000},
4537 {0xaa, 0x58, 0x0078},
4538 {0xaa, 0x62, 0x0411},
4539 {0xaa, 0x2b, 0x007f}, /* green1 gain */
4540 {0xaa, 0x2c, 0x007f}, /* blue gain */
4541 {0xaa, 0x2d, 0x007f}, /* red gain */
4542 {0xaa, 0x2e, 0x007f}, /* green2 gain */
4543 {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},
4544 {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},
4545 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4546 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
4547 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
4548 {0xa0, 0x00, 0x01ad},
4549 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
4550 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
4551 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
4552 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
4553 {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
4554 {0xa0, 0x80, ZC3XX_R18D_YTARGET},
4555 {0xa0, 0x61, ZC3XX_R116_RGAIN},
4556 {0xa0, 0x65, ZC3XX_R118_BGAIN},
4557 {}
4558};
4559static const struct usb_action mt9v111_3_InitialScale[] = {
4560 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
4561 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
4562 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
4563 {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
4564 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
4565 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
4566 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
4567 {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
4568 {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
4569 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
4570 {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
4571 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
4572 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
4573 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
4574 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
4575 {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
4576 {0xdd, 0x00, 0x0200},
4577 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4578 {0xaa, 0x01, 0x0001},
4579 {0xaa, 0x06, 0x0000},
4580 {0xaa, 0x08, 0x0483},
4581 {0xaa, 0x01, 0x0004},
4582 {0xaa, 0x08, 0x0006},
4583 {0xaa, 0x02, 0x0011},
4584 {0xaa, 0x03, 0x01e7},
4585 {0xaa, 0x04, 0x0287},
4586 {0xaa, 0x07, 0x3002},
4587 {0xaa, 0x20, 0x1100},
4588 {0xaa, 0x35, 0x007f},
4589 {0xaa, 0x30, 0x0005},
4590 {0xaa, 0x31, 0x0000},
4591 {0xaa, 0x58, 0x0078},
4592 {0xaa, 0x62, 0x0411},
4593 {0xaa, 0x2b, 0x007f},
4594 {0xaa, 0x2c, 0x007f},
4595 {0xaa, 0x2d, 0x007f},
4596 {0xaa, 0x2e, 0x007f},
4597 {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},
4598 {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},
4599 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4600 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
4601 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
4602 {0xa0, 0x00, 0x01ad},
4603 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
4604 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
4605 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
4606 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
4607 {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
4608 {0xa0, 0x80, ZC3XX_R18D_YTARGET},
4609 {0xa0, 0x61, ZC3XX_R116_RGAIN},
4610 {0xa0, 0x65, ZC3XX_R118_BGAIN},
4611 {}
4612};
4613static const struct usb_action mt9v111_3_AE50HZ[] = {
4614 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4615 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4616 {0xaa, 0x05, 0x0009}, /* horizontal blanking */
4617 {0xaa, 0x09, 0x01ce}, /* shutter width */
4618 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4619 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4620 {0xa0, 0xd2, ZC3XX_R192_EXPOSURELIMITLOW},
4621 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4622 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4623 {0xa0, 0x9a, ZC3XX_R197_ANTIFLICKERLOW},
4624 {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4625 {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
4626 {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
4627 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
4628 {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
4629 {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1},
4630 {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2},
4631 {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
4632 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4633 {}
4634};
4635static const struct usb_action mt9v111_3_AE50HZScale[] = {
4636 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4637 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4638 {0xaa, 0x05, 0x0009},
4639 {0xaa, 0x09, 0x01ce},
4640 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4641 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4642 {0xa0, 0xd2, ZC3XX_R192_EXPOSURELIMITLOW},
4643 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4644 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4645 {0xa0, 0x9a, ZC3XX_R197_ANTIFLICKERLOW},
4646 {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4647 {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
4648 {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
4649 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
4650 {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
4651 {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1},
4652 {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2},
4653 {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
4654 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4655 {}
4656};
4657static const struct usb_action mt9v111_3_AE60HZ[] = {
4658 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4659 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4660 {0xaa, 0x05, 0x0009},
4661 {0xaa, 0x09, 0x0083},
4662 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4663 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4664 {0xa0, 0x8f, ZC3XX_R192_EXPOSURELIMITLOW},
4665 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4666 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4667 {0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW},
4668 {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4669 {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
4670 {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
4671 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
4672 {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
4673 {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1},
4674 {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2},
4675 {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
4676 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4677 {}
4678};
4679static const struct usb_action mt9v111_3_AE60HZScale[] = {
4680 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4681 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4682 {0xaa, 0x05, 0x0009},
4683 {0xaa, 0x09, 0x0083},
4684 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4685 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4686 {0xa0, 0x8f, ZC3XX_R192_EXPOSURELIMITLOW},
4687 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4688 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4689 {0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW},
4690 {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4691 {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
4692 {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
4693 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
4694 {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
4695 {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1},
4696 {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2},
4697 {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
4698 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4699 {}
4700};
4701static const struct usb_action mt9v111_3_AENoFliker[] = {
4702 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4703 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4704 {0xaa, 0x05, 0x0034},
4705 {0xaa, 0x09, 0x0260},
4706 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4707 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4708 {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW},
4709 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4710 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4711 {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW},
4712 {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4713 {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
4714 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
4715 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
4716 {0xa0, 0x34, ZC3XX_R01D_HSYNC_0},
4717 {0xa0, 0x60, ZC3XX_R01E_HSYNC_1},
4718 {0xa0, 0x90, ZC3XX_R01F_HSYNC_2},
4719 {0xa0, 0xe0, ZC3XX_R020_HSYNC_3},
4720 {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
4721 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4722 {}
4723};
4724static const struct usb_action mt9v111_3_AENoFlikerScale[] = {
4725 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4726 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4727 {0xaa, 0x05, 0x0034},
4728 {0xaa, 0x09, 0x0260},
4729 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4730 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4731 {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW},
4732 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4733 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4734 {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW},
4735 {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4736 {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
4737 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
4738 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
4739 {0xa0, 0x34, ZC3XX_R01D_HSYNC_0},
4740 {0xa0, 0x60, ZC3XX_R01E_HSYNC_1},
4741 {0xa0, 0x90, ZC3XX_R01F_HSYNC_2},
4742 {0xa0, 0xe0, ZC3XX_R020_HSYNC_3},
4743 {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
4744 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4745 {}
4746};
4497 4747
4498static const struct usb_action pb0330_Initial[] = { /* 640x480 */ 4748static const struct usb_action pb0330_Initial[] = { /* 640x480 */
4499 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 4749 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
@@ -4936,418 +5186,6 @@ static const struct usb_action po2030_NoFliker[] = {
4936 {} 5186 {}
4937}; 5187};
4938 5188
4939/* TEST */
4940static const struct usb_action tas5130cK_InitialScale[] = {
4941 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
4942 {0xa0, 0x01, 0x003b},
4943 {0xa0, 0x0e, 0x003a},
4944 {0xa0, 0x01, 0x0038},
4945 {0xa0, 0x0b, 0x0039},
4946 {0xa0, 0x00, 0x0038},
4947 {0xa0, 0x0b, 0x0039},
4948 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
4949 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
4950 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
4951 {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
4952 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
4953 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
4954 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
4955 {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
4956 {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
4957 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
4958 {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
4959 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
4960 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
4961 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
4962 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
4963 {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
4964 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4965 {0xa0, 0x01, ZC3XX_R092_I2CADDRESSSELECT},
4966 {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
4967 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
4968 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
4969 {0xa0, 0x06, ZC3XX_R092_I2CADDRESSSELECT},
4970 {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
4971 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
4972 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
4973 {0xa0, 0x08, ZC3XX_R092_I2CADDRESSSELECT},
4974 {0xa0, 0x83, ZC3XX_R093_I2CSETVALUE},
4975 {0xa0, 0x04, ZC3XX_R094_I2CWRITEACK},
4976 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
4977 {0xa0, 0x01, ZC3XX_R092_I2CADDRESSSELECT},
4978 {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
4979 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
4980 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
4981 {0xa0, 0x08, ZC3XX_R092_I2CADDRESSSELECT},
4982 {0xa0, 0x06, ZC3XX_R093_I2CSETVALUE},
4983 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
4984 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
4985 {0xa0, 0x02, ZC3XX_R092_I2CADDRESSSELECT},
4986 {0xa0, 0x11, ZC3XX_R093_I2CSETVALUE},
4987 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
4988 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
4989 {0xa0, 0x03, ZC3XX_R092_I2CADDRESSSELECT},
4990 {0xa0, 0xE7, ZC3XX_R093_I2CSETVALUE},
4991 {0xa0, 0x01, ZC3XX_R094_I2CWRITEACK},
4992 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
4993 {0xa0, 0x04, ZC3XX_R092_I2CADDRESSSELECT},
4994 {0xa0, 0x87, ZC3XX_R093_I2CSETVALUE},
4995 {0xa0, 0x02, ZC3XX_R094_I2CWRITEACK},
4996 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
4997 {0xa0, 0x07, ZC3XX_R092_I2CADDRESSSELECT},
4998 {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE},
4999 {0xa0, 0x30, ZC3XX_R094_I2CWRITEACK},
5000 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5001 {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT},
5002 {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
5003 {0xa0, 0x51, ZC3XX_R094_I2CWRITEACK},
5004 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5005 {0xa0, 0x35, ZC3XX_R092_I2CADDRESSSELECT},
5006 {0xa0, 0x7F, ZC3XX_R093_I2CSETVALUE},
5007 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
5008 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5009 {0xa0, 0x30, ZC3XX_R092_I2CADDRESSSELECT},
5010 {0xa0, 0x05, ZC3XX_R093_I2CSETVALUE},
5011 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
5012 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5013 {0xa0, 0x31, ZC3XX_R092_I2CADDRESSSELECT},
5014 {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
5015 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
5016 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5017 {0xa0, 0x58, ZC3XX_R092_I2CADDRESSSELECT},
5018 {0xa0, 0x78, ZC3XX_R093_I2CSETVALUE},
5019 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
5020 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5021 {0xa0, 0x62, ZC3XX_R092_I2CADDRESSSELECT},
5022 {0xa0, 0x11, ZC3XX_R093_I2CSETVALUE},
5023 {0xa0, 0x04, ZC3XX_R094_I2CWRITEACK},
5024 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5025 {0xa0, 0x2B, ZC3XX_R092_I2CADDRESSSELECT},
5026 {0xa0, 0x7f, ZC3XX_R093_I2CSETVALUE},
5027 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
5028 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5029 {0xa0, 0x2c, ZC3XX_R092_I2CADDRESSSELECT},
5030 {0xa0, 0x7f, ZC3XX_R093_I2CSETVALUE},
5031 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
5032 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5033 {0xa0, 0x2D, ZC3XX_R092_I2CADDRESSSELECT},
5034 {0xa0, 0x7f, ZC3XX_R093_I2CSETVALUE},
5035 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
5036 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5037 {0xa0, 0x2e, ZC3XX_R092_I2CADDRESSSELECT},
5038 {0xa0, 0x7f, ZC3XX_R093_I2CSETVALUE},
5039 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
5040 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5041 {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},
5042 {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION},
5043 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
5044 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
5045 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
5046 {0xa0, 0x09, 0x01ad},
5047 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
5048 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
5049 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
5050 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
5051 {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
5052 {0xa0, 0x6c, ZC3XX_R18D_YTARGET},
5053 {0xa0, 0x61, ZC3XX_R116_RGAIN},
5054 {0xa0, 0x65, ZC3XX_R118_BGAIN},
5055 {0xa0, 0x09, 0x01ad},
5056 {0xa0, 0x15, 0x01ae},
5057 {0xa0, 0x4c, ZC3XX_R10A_RGB00}, /* matrix */
5058 {0xa0, 0xf1, ZC3XX_R10B_RGB01},
5059 {0xa0, 0x03, ZC3XX_R10C_RGB02},
5060 {0xa0, 0xfe, ZC3XX_R10D_RGB10},
5061 {0xa0, 0x51, ZC3XX_R10E_RGB11},
5062 {0xa0, 0xf1, ZC3XX_R10F_RGB12},
5063 {0xa0, 0xec, ZC3XX_R110_RGB20},
5064 {0xa0, 0x03, ZC3XX_R111_RGB21},
5065 {0xa0, 0x51, ZC3XX_R112_RGB22},
5066 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
5067 {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */
5068 {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */
5069 {0xa0, 0x38, ZC3XX_R120_GAMMA00}, /* gamma > 5 */
5070 {0xa0, 0x51, ZC3XX_R121_GAMMA01},
5071 {0xa0, 0x6e, ZC3XX_R122_GAMMA02},
5072 {0xa0, 0x8c, ZC3XX_R123_GAMMA03},
5073 {0xa0, 0xa2, ZC3XX_R124_GAMMA04},
5074 {0xa0, 0xb6, ZC3XX_R125_GAMMA05},
5075 {0xa0, 0xc8, ZC3XX_R126_GAMMA06},
5076 {0xa0, 0xd6, ZC3XX_R127_GAMMA07},
5077 {0xa0, 0xe2, ZC3XX_R128_GAMMA08},
5078 {0xa0, 0xed, ZC3XX_R129_GAMMA09},
5079 {0xa0, 0xf5, ZC3XX_R12A_GAMMA0A},
5080 {0xa0, 0xfc, ZC3XX_R12B_GAMMA0B},
5081 {0xa0, 0xff, ZC3XX_R12C_GAMMA0C},
5082 {0xa0, 0xff, ZC3XX_R12D_GAMMA0D},
5083 {0xa0, 0xff, ZC3XX_R12E_GAMMA0E},
5084 {0xa0, 0xff, ZC3XX_R12F_GAMMA0F},
5085 {0xa0, 0x12, ZC3XX_R130_GAMMA10},
5086 {0xa0, 0x1b, ZC3XX_R131_GAMMA11},
5087 {0xa0, 0x1d, ZC3XX_R132_GAMMA12},
5088 {0xa0, 0x1a, ZC3XX_R133_GAMMA13},
5089 {0xa0, 0x15, ZC3XX_R134_GAMMA14},
5090 {0xa0, 0x12, ZC3XX_R135_GAMMA15},
5091 {0xa0, 0x0f, ZC3XX_R136_GAMMA16},
5092 {0xa0, 0x0d, ZC3XX_R137_GAMMA17},
5093 {0xa0, 0x0b, ZC3XX_R138_GAMMA18},
5094 {0xa0, 0x09, ZC3XX_R139_GAMMA19},
5095 {0xa0, 0x07, ZC3XX_R13A_GAMMA1A},
5096 {0xa0, 0x05, ZC3XX_R13B_GAMMA1B},
5097 {0xa0, 0x00, ZC3XX_R13C_GAMMA1C},
5098 {0xa0, 0x00, ZC3XX_R13D_GAMMA1D},
5099 {0xa0, 0x00, ZC3XX_R13E_GAMMA1E},
5100 {0xa0, 0x01, ZC3XX_R13F_GAMMA1F},
5101 {0xa0, 0x4c, ZC3XX_R10A_RGB00}, /* matrix */
5102 {0xa0, 0xf1, ZC3XX_R10B_RGB01},
5103 {0xa0, 0x03, ZC3XX_R10C_RGB02},
5104 {0xa0, 0xfe, ZC3XX_R10D_RGB10},
5105 {0xa0, 0x51, ZC3XX_R10E_RGB11},
5106 {0xa0, 0xf1, ZC3XX_R10F_RGB12},
5107 {0xa0, 0xec, ZC3XX_R110_RGB20},
5108 {0xa0, 0x03, ZC3XX_R111_RGB21},
5109 {0xa0, 0x51, ZC3XX_R112_RGB22},
5110 {0xa0, 0x10, ZC3XX_R180_AUTOCORRECTENABLE},
5111 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
5112 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
5113 {0xa0, 0x05, ZC3XX_R092_I2CADDRESSSELECT},
5114 {0xa0, 0x09, ZC3XX_R093_I2CSETVALUE},
5115 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
5116 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5117 {0xa0, 0x09, ZC3XX_R092_I2CADDRESSSELECT},
5118 {0xa0, 0x34, ZC3XX_R093_I2CSETVALUE},
5119 {0xa0, 0x01, ZC3XX_R094_I2CWRITEACK},
5120 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5121 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
5122 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
5123 {0xa0, 0xd2, ZC3XX_R192_EXPOSURELIMITLOW},
5124 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
5125 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
5126 {0xa0, 0x9a, ZC3XX_R197_ANTIFLICKERLOW},
5127 {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
5128 {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
5129 {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
5130 {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
5131 {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
5132 {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1},
5133 {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2},
5134 {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
5135 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
5136 {0xa0, 0x09, 0x01ad},
5137 {0xa0, 0x15, 0x01ae},
5138 {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE},
5139 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
5140 {}
5141};
5142
5143static const struct usb_action tas5130cK_Initial[] = {
5144 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
5145 {0xa0, 0x01, 0x003b},
5146 {0xa0, 0x0e, 0x003a},
5147 {0xa0, 0x01, 0x0038},
5148 {0xa0, 0x0b, 0x0039},
5149 {0xa0, 0x00, 0x0038},
5150 {0xa0, 0x0b, 0x0039},
5151 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
5152 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
5153 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
5154 {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
5155 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
5156 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
5157 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
5158 {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
5159 {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
5160 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
5161 {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
5162 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
5163 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
5164 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
5165 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
5166 {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
5167 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
5168 {0xa0, 0x01, ZC3XX_R092_I2CADDRESSSELECT},
5169 {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
5170 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
5171 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5172 {0xa0, 0x06, ZC3XX_R092_I2CADDRESSSELECT},
5173 {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
5174 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
5175 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5176 {0xa0, 0x08, ZC3XX_R092_I2CADDRESSSELECT},
5177 {0xa0, 0x83, ZC3XX_R093_I2CSETVALUE},
5178 {0xa0, 0x04, ZC3XX_R094_I2CWRITEACK},
5179 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5180 {0xa0, 0x01, ZC3XX_R092_I2CADDRESSSELECT},
5181 {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
5182 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
5183 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5184 {0xa0, 0x08, ZC3XX_R092_I2CADDRESSSELECT},
5185 {0xa0, 0x06, ZC3XX_R093_I2CSETVALUE},
5186 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
5187 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5188 {0xa0, 0x02, ZC3XX_R092_I2CADDRESSSELECT},
5189 {0xa0, 0x11, ZC3XX_R093_I2CSETVALUE},
5190 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
5191 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5192 {0xa0, 0x03, ZC3XX_R092_I2CADDRESSSELECT},
5193 {0xa0, 0xe5, ZC3XX_R093_I2CSETVALUE},
5194 {0xa0, 0x01, ZC3XX_R094_I2CWRITEACK},
5195 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5196 {0xa0, 0x04, ZC3XX_R092_I2CADDRESSSELECT},
5197 {0xa0, 0x85, ZC3XX_R093_I2CSETVALUE},
5198 {0xa0, 0x02, ZC3XX_R094_I2CWRITEACK},
5199 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5200 {0xa0, 0x07, ZC3XX_R092_I2CADDRESSSELECT},
5201 {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE},
5202 {0xa0, 0x30, ZC3XX_R094_I2CWRITEACK},
5203 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5204 {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT},
5205 {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
5206 {0xa0, 0x51, ZC3XX_R094_I2CWRITEACK},
5207 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5208 {0xa0, 0x35, ZC3XX_R092_I2CADDRESSSELECT},
5209 {0xa0, 0x7F, ZC3XX_R093_I2CSETVALUE},
5210 {0xa0, 0x50, ZC3XX_R094_I2CWRITEACK},
5211 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5212 {0xa0, 0x30, ZC3XX_R092_I2CADDRESSSELECT},
5213 {0xa0, 0x05, ZC3XX_R093_I2CSETVALUE},
5214 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
5215 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5216 {0xa0, 0x31, ZC3XX_R092_I2CADDRESSSELECT},
5217 {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
5218 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
5219 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5220 {0xa0, 0x58, ZC3XX_R092_I2CADDRESSSELECT},
5221 {0xa0, 0x78, ZC3XX_R093_I2CSETVALUE},
5222 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
5223 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5224 {0xa0, 0x62, ZC3XX_R092_I2CADDRESSSELECT},
5225 {0xa0, 0x11, ZC3XX_R093_I2CSETVALUE},
5226 {0xa0, 0x04, ZC3XX_R094_I2CWRITEACK},
5227 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5228 {0xa0, 0x2B, ZC3XX_R092_I2CADDRESSSELECT},
5229 {0xa0, 0x7f, ZC3XX_R093_I2CSETVALUE},
5230 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
5231 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5232 {0xa0, 0x2C, ZC3XX_R092_I2CADDRESSSELECT},
5233 {0xa0, 0x7F, ZC3XX_R093_I2CSETVALUE},
5234 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
5235 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5236 {0xa0, 0x2D, ZC3XX_R092_I2CADDRESSSELECT},
5237 {0xa0, 0x7f, ZC3XX_R093_I2CSETVALUE},
5238 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
5239 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5240 {0xa0, 0x2e, ZC3XX_R092_I2CADDRESSSELECT},
5241 {0xa0, 0x7f, ZC3XX_R093_I2CSETVALUE},
5242 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
5243 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5244 {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},
5245 {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION},
5246 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
5247 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
5248 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
5249 {0xa0, 0x09, 0x01ad},
5250 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
5251 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
5252 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
5253 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
5254 {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
5255 {0xa0, 0x6c, ZC3XX_R18D_YTARGET},
5256 {0xa0, 0x61, ZC3XX_R116_RGAIN},
5257 {0xa0, 0x65, ZC3XX_R118_BGAIN},
5258 {0xa0, 0x09, 0x01ad},
5259 {0xa0, 0x15, 0x01ae},
5260 {0xa0, 0x4c, ZC3XX_R10A_RGB00}, /* matrix */
5261 {0xa0, 0xf1, ZC3XX_R10B_RGB01},
5262 {0xa0, 0x03, ZC3XX_R10C_RGB02},
5263 {0xa0, 0xfe, ZC3XX_R10D_RGB10},
5264 {0xa0, 0x51, ZC3XX_R10E_RGB11},
5265 {0xa0, 0xf1, ZC3XX_R10F_RGB12},
5266 {0xa0, 0xec, ZC3XX_R110_RGB20},
5267 {0xa0, 0x03, ZC3XX_R111_RGB21},
5268 {0xa0, 0x51, ZC3XX_R112_RGB22},
5269 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
5270 {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */
5271 {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */
5272 {0xa0, 0x38, ZC3XX_R120_GAMMA00}, /* gamma > 5 */
5273 {0xa0, 0x51, ZC3XX_R121_GAMMA01},
5274 {0xa0, 0x6e, ZC3XX_R122_GAMMA02},
5275 {0xa0, 0x8c, ZC3XX_R123_GAMMA03},
5276 {0xa0, 0xa2, ZC3XX_R124_GAMMA04},
5277 {0xa0, 0xb6, ZC3XX_R125_GAMMA05},
5278 {0xa0, 0xc8, ZC3XX_R126_GAMMA06},
5279 {0xa0, 0xd6, ZC3XX_R127_GAMMA07},
5280 {0xa0, 0xe2, ZC3XX_R128_GAMMA08},
5281 {0xa0, 0xed, ZC3XX_R129_GAMMA09},
5282 {0xa0, 0xf5, ZC3XX_R12A_GAMMA0A},
5283 {0xa0, 0xfc, ZC3XX_R12B_GAMMA0B},
5284 {0xa0, 0xff, ZC3XX_R12C_GAMMA0C},
5285 {0xa0, 0xff, ZC3XX_R12D_GAMMA0D},
5286 {0xa0, 0xff, ZC3XX_R12E_GAMMA0E},
5287 {0xa0, 0xff, ZC3XX_R12F_GAMMA0F},
5288 {0xa0, 0x12, ZC3XX_R130_GAMMA10},
5289 {0xa0, 0x1b, ZC3XX_R131_GAMMA11},
5290 {0xa0, 0x1d, ZC3XX_R132_GAMMA12},
5291 {0xa0, 0x1a, ZC3XX_R133_GAMMA13},
5292 {0xa0, 0x15, ZC3XX_R134_GAMMA14},
5293 {0xa0, 0x12, ZC3XX_R135_GAMMA15},
5294 {0xa0, 0x0f, ZC3XX_R136_GAMMA16},
5295 {0xa0, 0x0d, ZC3XX_R137_GAMMA17},
5296 {0xa0, 0x0b, ZC3XX_R138_GAMMA18},
5297 {0xa0, 0x09, ZC3XX_R139_GAMMA19},
5298 {0xa0, 0x07, ZC3XX_R13A_GAMMA1A},
5299 {0xa0, 0x05, ZC3XX_R13B_GAMMA1B},
5300 {0xa0, 0x00, ZC3XX_R13C_GAMMA1C},
5301 {0xa0, 0x00, ZC3XX_R13D_GAMMA1D},
5302 {0xa0, 0x00, ZC3XX_R13E_GAMMA1E},
5303 {0xa0, 0x01, ZC3XX_R13F_GAMMA1F},
5304 {0xa0, 0x4c, ZC3XX_R10A_RGB00}, /* matrix */
5305 {0xa0, 0xf1, ZC3XX_R10B_RGB01},
5306 {0xa0, 0x03, ZC3XX_R10C_RGB02},
5307 {0xa0, 0xfe, ZC3XX_R10D_RGB10},
5308 {0xa0, 0x51, ZC3XX_R10E_RGB11},
5309 {0xa0, 0xf1, ZC3XX_R10F_RGB12},
5310 {0xa0, 0xec, ZC3XX_R110_RGB20},
5311 {0xa0, 0x03, ZC3XX_R111_RGB21},
5312 {0xa0, 0x51, ZC3XX_R112_RGB22},
5313 {0xa0, 0x10, ZC3XX_R180_AUTOCORRECTENABLE},
5314 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
5315 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
5316 {0xa0, 0x05, ZC3XX_R092_I2CADDRESSSELECT},
5317 {0xa0, 0x62, ZC3XX_R093_I2CSETVALUE},
5318 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
5319 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5320 {0xa0, 0x09, ZC3XX_R092_I2CADDRESSSELECT},
5321 {0xa0, 0xaa, ZC3XX_R093_I2CSETVALUE},
5322 {0xa0, 0x01, ZC3XX_R094_I2CWRITEACK},
5323 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
5324 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
5325 {0xa0, 0x03, ZC3XX_R191_EXPOSURELIMITMID},
5326 {0xa0, 0x9b, ZC3XX_R192_EXPOSURELIMITLOW},
5327 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
5328 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
5329 {0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW},
5330 {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
5331 {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
5332 {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
5333 {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
5334 {0xa0, 0x62, ZC3XX_R01D_HSYNC_0},
5335 {0xa0, 0x90, ZC3XX_R01E_HSYNC_1},
5336 {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2},
5337 {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
5338 {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
5339 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
5340 {0xa0, 0x09, 0x01ad},
5341 {0xa0, 0x15, 0x01ae},
5342 {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE},
5343 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
5344 {0xa0, 0x30, 0x0007},
5345 {0xa0, 0x02, ZC3XX_R008_CLOCKSETTING},
5346 {0xa0, 0x00, 0x0007},
5347 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
5348 {}
5349};
5350
5351static const struct usb_action tas5130c_InitialScale[] = { /* 320x240 */ 5189static const struct usb_action tas5130c_InitialScale[] = { /* 320x240 */
5352 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 5190 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
5353 {0xa0, 0x50, ZC3XX_R002_CLOCKSELECT}, 5191 {0xa0, 0x50, ZC3XX_R002_CLOCKSELECT},
@@ -6012,14 +5850,14 @@ static void setmatrix(struct gspca_dev *gspca_dev)
6012 [SENSOR_HV7131R] = NULL, 5850 [SENSOR_HV7131R] = NULL,
6013 [SENSOR_ICM105A] = po2030_matrix, 5851 [SENSOR_ICM105A] = po2030_matrix,
6014 [SENSOR_MC501CB] = NULL, 5852 [SENSOR_MC501CB] = NULL,
6015 [SENSOR_MI0360SOC] = gc0305_matrix, 5853 [SENSOR_MT9V111_1] = gc0305_matrix,
5854 [SENSOR_MT9V111_3] = gc0305_matrix,
6016 [SENSOR_OV7620] = ov7620_matrix, 5855 [SENSOR_OV7620] = ov7620_matrix,
6017 [SENSOR_OV7630C] = NULL, 5856 [SENSOR_OV7630C] = NULL,
6018 [SENSOR_PAS106] = NULL, 5857 [SENSOR_PAS106] = NULL,
6019 [SENSOR_PAS202B] = pas202b_matrix, 5858 [SENSOR_PAS202B] = pas202b_matrix,
6020 [SENSOR_PB0330] = gc0305_matrix, 5859 [SENSOR_PB0330] = gc0305_matrix,
6021 [SENSOR_PO2030] = po2030_matrix, 5860 [SENSOR_PO2030] = po2030_matrix,
6022 [SENSOR_TAS5130CK] = NULL,
6023 [SENSOR_TAS5130C] = tas5130c_matrix, 5861 [SENSOR_TAS5130C] = tas5130c_matrix,
6024 [SENSOR_TAS5130C_VF0250] = vf0250_matrix, 5862 [SENSOR_TAS5130C_VF0250] = vf0250_matrix,
6025 }; 5863 };
@@ -6185,10 +6023,14 @@ static void setlightfreq(struct gspca_dev *gspca_dev)
6185 {mc501cb_NoFliker, mc501cb_NoFlikerScale, 6023 {mc501cb_NoFliker, mc501cb_NoFlikerScale,
6186 mc501cb_50HZ, mc501cb_50HZScale, 6024 mc501cb_50HZ, mc501cb_50HZScale,
6187 mc501cb_60HZ, mc501cb_60HZScale}, 6025 mc501cb_60HZ, mc501cb_60HZScale},
6188 [SENSOR_MI0360SOC] = 6026 [SENSOR_MT9V111_1] =
6189 {mi360soc_AENoFliker, mi360soc_AENoFlikerScale, 6027 {mt9v111_1_AENoFliker, mt9v111_1_AENoFlikerScale,
6190 mi360soc_AE50HZ, mi360soc_AE50HZScale, 6028 mt9v111_1_AE50HZ, mt9v111_1_AE50HZScale,
6191 mi360soc_AE60HZ, mi360soc_AE60HZScale}, 6029 mt9v111_1_AE60HZ, mt9v111_1_AE60HZScale},
6030 [SENSOR_MT9V111_3] =
6031 {mt9v111_3_AENoFliker, mt9v111_3_AENoFlikerScale,
6032 mt9v111_3_AE50HZ, mt9v111_3_AE50HZScale,
6033 mt9v111_3_AE60HZ, mt9v111_3_AE60HZScale},
6192 [SENSOR_OV7620] = 6034 [SENSOR_OV7620] =
6193 {ov7620_NoFliker, ov7620_NoFliker, 6035 {ov7620_NoFliker, ov7620_NoFliker,
6194 ov7620_50HZ, ov7620_50HZ, 6036 ov7620_50HZ, ov7620_50HZ,
@@ -6213,10 +6055,6 @@ static void setlightfreq(struct gspca_dev *gspca_dev)
6213 {po2030_NoFliker, po2030_NoFliker, 6055 {po2030_NoFliker, po2030_NoFliker,
6214 po2030_50HZ, po2030_50HZ, 6056 po2030_50HZ, po2030_50HZ,
6215 po2030_60HZ, po2030_60HZ}, 6057 po2030_60HZ, po2030_60HZ},
6216 [SENSOR_TAS5130CK] =
6217 {tas5130c_NoFliker, tas5130c_NoFlikerScale,
6218 tas5130c_50HZ, tas5130c_50HZScale,
6219 tas5130c_60HZ, tas5130c_60HZScale},
6220 [SENSOR_TAS5130C] = 6058 [SENSOR_TAS5130C] =
6221 {tas5130c_NoFliker, tas5130c_NoFlikerScale, 6059 {tas5130c_NoFliker, tas5130c_NoFlikerScale,
6222 tas5130c_50HZ, tas5130c_50HZScale, 6060 tas5130c_50HZ, tas5130c_50HZScale,
@@ -6280,7 +6118,8 @@ static void send_unknown(struct gspca_dev *gspca_dev, int sensor)
6280 case SENSOR_ADCM2700: 6118 case SENSOR_ADCM2700:
6281 case SENSOR_GC0305: 6119 case SENSOR_GC0305:
6282 case SENSOR_OV7620: 6120 case SENSOR_OV7620:
6283 case SENSOR_MI0360SOC: 6121 case SENSOR_MT9V111_1:
6122 case SENSOR_MT9V111_3:
6284 case SENSOR_PB0330: 6123 case SENSOR_PB0330:
6285 case SENSOR_PO2030: 6124 case SENSOR_PO2030:
6286 reg_w(gspca_dev, 0x0d, 0x003a); 6125 reg_w(gspca_dev, 0x0d, 0x003a);
@@ -6424,11 +6263,11 @@ struct sensor_by_chipset_revision {
6424}; 6263};
6425static const struct sensor_by_chipset_revision chipset_revision_sensor[] = { 6264static const struct sensor_by_chipset_revision chipset_revision_sensor[] = {
6426 {0xc000, 0x12}, /* TAS5130C */ 6265 {0xc000, 0x12}, /* TAS5130C */
6427 {0xc001, 0x13}, /* MI0360SOC */ 6266 {0xc001, 0x13}, /* MT9V111 */
6428 {0xe001, 0x13}, 6267 {0xe001, 0x13},
6429 {0x8001, 0x13}, 6268 {0x8001, 0x13},
6430 {0x8000, 0x14}, /* CS2102K */ 6269 {0x8000, 0x14}, /* CS2102K */
6431 {0x8400, 0x15}, /* TAS5130K */ 6270 {0x8400, 0x15}, /* MT9V111 */
6432 {0xe400, 0x15}, 6271 {0xe400, 0x15},
6433}; 6272};
6434 6273
@@ -6580,6 +6419,11 @@ static int sd_config(struct gspca_dev *gspca_dev,
6580{ 6419{
6581 struct sd *sd = (struct sd *) gspca_dev; 6420 struct sd *sd = (struct sd *) gspca_dev;
6582 6421
6422 if (id->idProduct == 0x301b)
6423 sd->bridge = BRIDGE_ZC301;
6424 else
6425 sd->bridge = BRIDGE_ZC303;
6426
6583 /* define some sensors from the vendor/product */ 6427 /* define some sensors from the vendor/product */
6584 sd->sensor = id->driver_info; 6428 sd->sensor = id->driver_info;
6585 6429
@@ -6609,14 +6453,14 @@ static int sd_init(struct gspca_dev *gspca_dev)
6609 [SENSOR_HV7131R] = 4, 6453 [SENSOR_HV7131R] = 4,
6610 [SENSOR_ICM105A] = 4, 6454 [SENSOR_ICM105A] = 4,
6611 [SENSOR_MC501CB] = 4, 6455 [SENSOR_MC501CB] = 4,
6612 [SENSOR_MI0360SOC] = 4, 6456 [SENSOR_MT9V111_1] = 4,
6457 [SENSOR_MT9V111_3] = 4,
6613 [SENSOR_OV7620] = 3, 6458 [SENSOR_OV7620] = 3,
6614 [SENSOR_OV7630C] = 4, 6459 [SENSOR_OV7630C] = 4,
6615 [SENSOR_PAS106] = 4, 6460 [SENSOR_PAS106] = 4,
6616 [SENSOR_PAS202B] = 4, 6461 [SENSOR_PAS202B] = 4,
6617 [SENSOR_PB0330] = 4, 6462 [SENSOR_PB0330] = 4,
6618 [SENSOR_PO2030] = 4, 6463 [SENSOR_PO2030] = 4,
6619 [SENSOR_TAS5130CK] = 4,
6620 [SENSOR_TAS5130C] = 3, 6464 [SENSOR_TAS5130C] = 3,
6621 [SENSOR_TAS5130C_VF0250] = 3, 6465 [SENSOR_TAS5130C_VF0250] = 3,
6622 }; 6466 };
@@ -6630,14 +6474,14 @@ static int sd_init(struct gspca_dev *gspca_dev)
6630 [SENSOR_HV7131R] = 1, 6474 [SENSOR_HV7131R] = 1,
6631 [SENSOR_ICM105A] = 1, 6475 [SENSOR_ICM105A] = 1,
6632 [SENSOR_MC501CB] = 2, 6476 [SENSOR_MC501CB] = 2,
6633 [SENSOR_MI0360SOC] = 1, 6477 [SENSOR_MT9V111_1] = 1,
6478 [SENSOR_MT9V111_3] = 1,
6634 [SENSOR_OV7620] = 2, 6479 [SENSOR_OV7620] = 2,
6635 [SENSOR_OV7630C] = 1, 6480 [SENSOR_OV7630C] = 1,
6636 [SENSOR_PAS106] = 0, 6481 [SENSOR_PAS106] = 0,
6637 [SENSOR_PAS202B] = 1, 6482 [SENSOR_PAS202B] = 1,
6638 [SENSOR_PB0330] = 1, 6483 [SENSOR_PB0330] = 1,
6639 [SENSOR_PO2030] = 1, 6484 [SENSOR_PO2030] = 1,
6640 [SENSOR_TAS5130CK] = 1,
6641 [SENSOR_TAS5130C] = 1, 6485 [SENSOR_TAS5130C] = 1,
6642 [SENSOR_TAS5130C_VF0250] = 1, 6486 [SENSOR_TAS5130C_VF0250] = 1,
6643 }; 6487 };
@@ -6722,10 +6566,13 @@ static int sd_init(struct gspca_dev *gspca_dev)
6722 sd->sensor = SENSOR_HV7131R; 6566 sd->sensor = SENSOR_HV7131R;
6723 break; 6567 break;
6724 case 0x13: 6568 case 0x13:
6569 case 0x15:
6725 PDEBUG(D_PROBE, 6570 PDEBUG(D_PROBE,
6726 "Find Sensor MI0360SOC. Chip revision %x", 6571 "Sensor MT9V111. Chip revision %04x",
6727 sd->chip_revision); 6572 sd->chip_revision);
6728 sd->sensor = SENSOR_MI0360SOC; 6573 sd->sensor = sd->bridge == BRIDGE_ZC301
6574 ? SENSOR_MT9V111_1
6575 : SENSOR_MT9V111_3;
6729 break; 6576 break;
6730 case 0x14: 6577 case 0x14:
6731 PDEBUG(D_PROBE, 6578 PDEBUG(D_PROBE,
@@ -6733,12 +6580,6 @@ static int sd_init(struct gspca_dev *gspca_dev)
6733 sd->chip_revision); 6580 sd->chip_revision);
6734 sd->sensor = SENSOR_CS2102K; 6581 sd->sensor = SENSOR_CS2102K;
6735 break; 6582 break;
6736 case 0x15:
6737 PDEBUG(D_PROBE,
6738 "Find Sensor TAS5130CK?. Chip revision %x",
6739 sd->chip_revision);
6740 sd->sensor = SENSOR_TAS5130CK;
6741 break;
6742 case 0x16: 6583 case 0x16:
6743 PDEBUG(D_PROBE, "Find Sensor ADCM2700"); 6584 PDEBUG(D_PROBE, "Find Sensor ADCM2700");
6744 sd->sensor = SENSOR_ADCM2700; 6585 sd->sensor = SENSOR_ADCM2700;
@@ -6831,8 +6672,10 @@ static int sd_start(struct gspca_dev *gspca_dev)
6831 {icm105a_Initial, icm105a_InitialScale}, 6672 {icm105a_Initial, icm105a_InitialScale},
6832 [SENSOR_MC501CB] = 6673 [SENSOR_MC501CB] =
6833 {mc501cb_Initial, mc501cb_InitialScale}, 6674 {mc501cb_Initial, mc501cb_InitialScale},
6834 [SENSOR_MI0360SOC] = 6675 [SENSOR_MT9V111_1] =
6835 {mi0360soc_Initial, mi0360soc_InitialScale}, 6676 {mt9v111_1_Initial, mt9v111_1_InitialScale},
6677 [SENSOR_MT9V111_3] =
6678 {mt9v111_3_Initial, mt9v111_3_InitialScale},
6836 [SENSOR_OV7620] = 6679 [SENSOR_OV7620] =
6837 {ov7620_Initial, ov7620_InitialScale}, 6680 {ov7620_Initial, ov7620_InitialScale},
6838 [SENSOR_OV7630C] = 6681 [SENSOR_OV7630C] =
@@ -6845,8 +6688,6 @@ static int sd_start(struct gspca_dev *gspca_dev)
6845 {pb0330_Initial, pb0330_InitialScale}, 6688 {pb0330_Initial, pb0330_InitialScale},
6846 [SENSOR_PO2030] = 6689 [SENSOR_PO2030] =
6847 {po2030_Initial, po2030_InitialScale}, 6690 {po2030_Initial, po2030_InitialScale},
6848 [SENSOR_TAS5130CK] =
6849 {tas5130cK_Initial, tas5130cK_InitialScale},
6850 [SENSOR_TAS5130C] = 6691 [SENSOR_TAS5130C] =
6851 {tas5130c_Initial, tas5130c_InitialScale}, 6692 {tas5130c_Initial, tas5130c_InitialScale},
6852 [SENSOR_TAS5130C_VF0250] = 6693 [SENSOR_TAS5130C_VF0250] =
@@ -6916,7 +6757,6 @@ static int sd_start(struct gspca_dev *gspca_dev)
6916 case SENSOR_CS2102K: /* gamma set in xxx_Initial */ 6757 case SENSOR_CS2102K: /* gamma set in xxx_Initial */
6917 case SENSOR_HDCS2020b: 6758 case SENSOR_HDCS2020b:
6918 case SENSOR_OV7630C: 6759 case SENSOR_OV7630C:
6919 case SENSOR_TAS5130CK:
6920 break; 6760 break;
6921 default: 6761 default:
6922 setcontrast(gspca_dev); 6762 setcontrast(gspca_dev);