aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/gspca/zc3xx.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-12-09 22:50:49 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2009-12-09 22:50:49 -0500
commit3e7468313758913c5e4d372f35b271b96bad1298 (patch)
treeeb612d252a9e2349a1173451cd779beebd18a33e /drivers/media/video/gspca/zc3xx.c
parent6825fbc4cb219f2c98bb7d157915d797cf5cb823 (diff)
parente97f4677961f68e29bd906022ebf60a6df7f530a (diff)
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6: (345 commits) V4L/DVB (13542): ir-keytable: Allow dynamic table change V4L/DVB (13541): atbm8830: replace 64-bit division and floating point usage V4L/DVB (13540): ir-common: Cleanup get key evdev code V4L/DVB (13539): ir-common: add __func__ for debug messages V4L/DVB (13538): ir-common: Use a dynamic keycode table V4L/DVB (13537): ir: Prepare the code for dynamic keycode table allocation V4L/DVB (13536): em28xx: Use the full RC5 code on HVR-950 Remote Controller V4L/DVB (13535): ir-common: Add a hauppauge new table with the complete RC5 code V4L/DVB (13534): ir-common: Remove some unused fields/structs V4L/DVB (13533): ir: use dynamic tables, instead of static ones V4L/DVB (13532): ir-common: Add infrastructure to use a dynamic keycode table V4L/DVB (13531): ir-common: rename the debug routine to allow exporting it V4L/DVB (13458): go7007: subdev conversion V4L/DVB (13457): s2250: subdev conversion V4L/DVB (13456): s2250: Change module structure V4L/DVB (13528): em28xx: add support for em2800 VC211A card em28xx: don't reduce scale to half size for em2800 em28xx: don't load audio modules when AC97 is mis-detected em28xx: em2800 chips support max width of 640 V4L/DVB (13523): dvb-bt8xx: fix compile warning ... Fix up trivial conflicts due to spelling fixes from the trivial tree in Documentation/video4linux/gspca.txt drivers/media/video/cx18/cx18-mailbox.h
Diffstat (limited to 'drivers/media/video/gspca/zc3xx.c')
-rw-r--r--drivers/media/video/gspca/zc3xx.c1470
1 files changed, 527 insertions, 943 deletions
diff --git a/drivers/media/video/gspca/zc3xx.c b/drivers/media/video/gspca/zc3xx.c
index 49c3c1226e0e..69e5dc4fc9de 100644
--- a/drivers/media/video/gspca/zc3xx.c
+++ b/drivers/media/video/gspca/zc3xx.c
@@ -61,17 +61,18 @@ struct sd {
61#define SENSOR_HV7131C 6 61#define SENSOR_HV7131C 6
62#define SENSOR_ICM105A 7 62#define SENSOR_ICM105A 7
63#define SENSOR_MC501CB 8 63#define SENSOR_MC501CB 8
64#define SENSOR_OV7620 9 64#define SENSOR_MI0360SOC 9
65/*#define SENSOR_OV7648 9 - same values */ 65#define SENSOR_OV7620 10
66#define SENSOR_OV7630C 10 66/*#define SENSOR_OV7648 10 - same values */
67#define SENSOR_PAS106 11 67#define SENSOR_OV7630C 11
68#define SENSOR_PAS202B 12 68#define SENSOR_PAS106 12
69#define SENSOR_PB0330 13 69#define SENSOR_PAS202B 13
70#define SENSOR_PO2030 14 70#define SENSOR_PB0330 14 /* (MI0360) */
71#define SENSOR_TAS5130CK 15 71#define SENSOR_PO2030 15
72#define SENSOR_TAS5130CXX 16 72#define SENSOR_TAS5130CK 16
73#define SENSOR_TAS5130C_VF0250 17 73#define SENSOR_TAS5130CXX 17
74#define SENSOR_MAX 18 74#define SENSOR_TAS5130C_VF0250 18
75#define SENSOR_MAX 19
75 unsigned short chip_revision; 76 unsigned short chip_revision;
76 77
77 u8 *jpeg_hdr; 78 u8 *jpeg_hdr;
@@ -420,9 +421,7 @@ static const struct usb_action adcm2700_NoFliker[] = {
420 {0xaa, 0xfe, 0x0010}, /* 00,fe,10,aa */ 421 {0xaa, 0xfe, 0x0010}, /* 00,fe,10,aa */
421 {} 422 {}
422}; 423};
423static const struct usb_action cs2102_Initial[] = { 424static const struct usb_action cs2102_Initial[] = { /* 320x240 */
424 {0xa1, 0x01, 0x0008},
425 {0xa1, 0x01, 0x0008},
426 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 425 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
427 {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 426 {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
428 {0xa0, 0x00, ZC3XX_R010_CMOSSENSORSELECT}, 427 {0xa0, 0x00, ZC3XX_R010_CMOSSENSORSELECT},
@@ -471,88 +470,10 @@ static const struct usb_action cs2102_Initial[] = {
471 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 470 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
472 {0xa0, 0x68, ZC3XX_R18D_YTARGET}, 471 {0xa0, 0x68, ZC3XX_R18D_YTARGET},
473 {0xa0, 0x00, 0x01ad}, 472 {0xa0, 0x00, 0x01ad},
474 {0xa1, 0x01, 0x0002},
475 {0xa1, 0x01, 0x0008},
476 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */
477 {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */
478 {0xa1, 0x01, 0x01c8},
479 {0xa1, 0x01, 0x01c9},
480 {0xa1, 0x01, 0x01ca},
481 {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */
482 {0xa0, 0x24, ZC3XX_R120_GAMMA00}, /* gamma 5 */
483 {0xa0, 0x44, ZC3XX_R121_GAMMA01},
484 {0xa0, 0x64, ZC3XX_R122_GAMMA02},
485 {0xa0, 0x84, ZC3XX_R123_GAMMA03},
486 {0xa0, 0x9d, ZC3XX_R124_GAMMA04},
487 {0xa0, 0xb2, ZC3XX_R125_GAMMA05},
488 {0xa0, 0xc4, ZC3XX_R126_GAMMA06},
489 {0xa0, 0xd3, ZC3XX_R127_GAMMA07},
490 {0xa0, 0xe0, ZC3XX_R128_GAMMA08},
491 {0xa0, 0xeb, ZC3XX_R129_GAMMA09},
492 {0xa0, 0xf4, ZC3XX_R12A_GAMMA0A},
493 {0xa0, 0xfb, ZC3XX_R12B_GAMMA0B},
494 {0xa0, 0xff, ZC3XX_R12C_GAMMA0C},
495 {0xa0, 0xff, ZC3XX_R12D_GAMMA0D},
496 {0xa0, 0xff, ZC3XX_R12E_GAMMA0E},
497 {0xa0, 0xff, ZC3XX_R12F_GAMMA0F},
498 {0xa0, 0x18, ZC3XX_R130_GAMMA10},
499 {0xa0, 0x20, ZC3XX_R131_GAMMA11},
500 {0xa0, 0x20, ZC3XX_R132_GAMMA12},
501 {0xa0, 0x1c, ZC3XX_R133_GAMMA13},
502 {0xa0, 0x16, ZC3XX_R134_GAMMA14},
503 {0xa0, 0x13, ZC3XX_R135_GAMMA15},
504 {0xa0, 0x10, ZC3XX_R136_GAMMA16},
505 {0xa0, 0x0e, ZC3XX_R137_GAMMA17},
506 {0xa0, 0x0b, ZC3XX_R138_GAMMA18},
507 {0xa0, 0x09, ZC3XX_R139_GAMMA19},
508 {0xa0, 0x07, ZC3XX_R13A_GAMMA1A},
509 {0xa0, 0x06, ZC3XX_R13B_GAMMA1B},
510 {0xa0, 0x00, ZC3XX_R13C_GAMMA1C},
511 {0xa0, 0x00, ZC3XX_R13D_GAMMA1D},
512 {0xa0, 0x00, ZC3XX_R13E_GAMMA1E},
513 {0xa0, 0x01, ZC3XX_R13F_GAMMA1F},
514 {0xa0, 0x58, ZC3XX_R10A_RGB00}, /* matrix */
515 {0xa0, 0xf4, ZC3XX_R10B_RGB01},
516 {0xa0, 0xf4, ZC3XX_R10C_RGB02},
517 {0xa0, 0xf4, ZC3XX_R10D_RGB10},
518 {0xa0, 0x58, ZC3XX_R10E_RGB11},
519 {0xa0, 0xf4, ZC3XX_R10F_RGB12},
520 {0xa0, 0xf4, ZC3XX_R110_RGB20},
521 {0xa0, 0xf4, ZC3XX_R111_RGB21},
522 {0xa0, 0x58, ZC3XX_R112_RGB22},
523 {0xa1, 0x01, 0x0180},
524 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
525 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
526 {0xaa, 0x23, 0x0001},
527 {0xaa, 0x24, 0x0055},
528 {0xaa, 0x25, 0x00cc},
529 {0xaa, 0x21, 0x003f},
530 {0xa0, 0x02, ZC3XX_R190_EXPOSURELIMITHIGH},
531 {0xa0, 0xab, ZC3XX_R191_EXPOSURELIMITMID},
532 {0xa0, 0x98, ZC3XX_R192_EXPOSURELIMITLOW},
533 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
534 {0xa0, 0x30, ZC3XX_R196_ANTIFLICKERMID},
535 {0xa0, 0xd4, ZC3XX_R197_ANTIFLICKERLOW},
536 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
537 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
538 {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
539 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
540 {0xa0, 0x39, ZC3XX_R01D_HSYNC_0},
541 {0xa0, 0x70, ZC3XX_R01E_HSYNC_1},
542 {0xa0, 0xb0, ZC3XX_R01F_HSYNC_2},
543 {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
544 {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE},
545 {0xa1, 0x01, 0x0180},
546 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
547 {0xa0, 0x40, ZC3XX_R116_RGAIN},
548 {0xa0, 0x40, ZC3XX_R117_GGAIN},
549 {0xa0, 0x40, ZC3XX_R118_BGAIN},
550 {} 473 {}
551}; 474};
552 475
553static const struct usb_action cs2102_InitialScale[] = { 476static const struct usb_action cs2102_InitialScale[] = { /* 640x480 */
554 {0xa1, 0x01, 0x0008},
555 {0xa1, 0x01, 0x0008},
556 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 477 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
557 {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 478 {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
558 {0xa0, 0x00, ZC3XX_R010_CMOSSENSORSELECT}, 479 {0xa0, 0x00, ZC3XX_R010_CMOSSENSORSELECT},
@@ -601,57 +522,75 @@ static const struct usb_action cs2102_InitialScale[] = {
601 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 522 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
602 {0xa0, 0x68, ZC3XX_R18D_YTARGET}, 523 {0xa0, 0x68, ZC3XX_R18D_YTARGET},
603 {0xa0, 0x00, 0x01ad}, 524 {0xa0, 0x00, 0x01ad},
604 {0xa1, 0x01, 0x0002}, 525 {}
605 {0xa1, 0x01, 0x0008}, 526};
606 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */ 527static const struct usb_action cs2102_50HZ[] = {
607 {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ 528 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
608 {0xa1, 0x01, 0x01c8}, 529 {0xaa, 0x23, 0x0001},
609 {0xa1, 0x01, 0x01c9}, 530 {0xaa, 0x24, 0x005f},
610 {0xa1, 0x01, 0x01ca}, 531 {0xaa, 0x25, 0x0090},
611 {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ 532 {0xaa, 0x21, 0x00dd},
612 {0xa0, 0x24, ZC3XX_R120_GAMMA00}, /* gamma 5 */ 533 {0xa0, 0x02, ZC3XX_R190_EXPOSURELIMITHIGH},
613 {0xa0, 0x44, ZC3XX_R121_GAMMA01}, 534 {0xa0, 0xbf, ZC3XX_R191_EXPOSURELIMITMID},
614 {0xa0, 0x64, ZC3XX_R122_GAMMA02}, 535 {0xa0, 0x20, ZC3XX_R192_EXPOSURELIMITLOW},
615 {0xa0, 0x84, ZC3XX_R123_GAMMA03}, 536 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
616 {0xa0, 0x9d, ZC3XX_R124_GAMMA04}, 537 {0xa0, 0x3a, ZC3XX_R196_ANTIFLICKERMID},
617 {0xa0, 0xb2, ZC3XX_R125_GAMMA05}, 538 {0xa0, 0x98, ZC3XX_R197_ANTIFLICKERLOW},
618 {0xa0, 0xc4, ZC3XX_R126_GAMMA06}, 539 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
619 {0xa0, 0xd3, ZC3XX_R127_GAMMA07}, 540 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
620 {0xa0, 0xe0, ZC3XX_R128_GAMMA08}, 541 {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
621 {0xa0, 0xeb, ZC3XX_R129_GAMMA09}, 542 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
622 {0xa0, 0xf4, ZC3XX_R12A_GAMMA0A}, 543 {0xa0, 0xdd, ZC3XX_R01D_HSYNC_0},
623 {0xa0, 0xfb, ZC3XX_R12B_GAMMA0B}, 544 {0xa0, 0xe4, ZC3XX_R01E_HSYNC_1},
624 {0xa0, 0xff, ZC3XX_R12C_GAMMA0C}, 545 {0xa0, 0xf0, ZC3XX_R01F_HSYNC_2},
625 {0xa0, 0xff, ZC3XX_R12D_GAMMA0D}, 546 {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
626 {0xa0, 0xff, ZC3XX_R12E_GAMMA0E}, 547 {}
627 {0xa0, 0xff, ZC3XX_R12F_GAMMA0F}, 548};
628 {0xa0, 0x18, ZC3XX_R130_GAMMA10}, 549static const struct usb_action cs2102_50HZScale[] = {
629 {0xa0, 0x20, ZC3XX_R131_GAMMA11}, 550 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
630 {0xa0, 0x20, ZC3XX_R132_GAMMA12}, 551 {0xaa, 0x23, 0x0000},
631 {0xa0, 0x1c, ZC3XX_R133_GAMMA13}, 552 {0xaa, 0x24, 0x00af},
632 {0xa0, 0x16, ZC3XX_R134_GAMMA14}, 553 {0xaa, 0x25, 0x00c8},
633 {0xa0, 0x13, ZC3XX_R135_GAMMA15}, 554 {0xaa, 0x21, 0x0068},
634 {0xa0, 0x10, ZC3XX_R136_GAMMA16}, 555 {0xa0, 0x01, ZC3XX_R190_EXPOSURELIMITHIGH},
635 {0xa0, 0x0e, ZC3XX_R137_GAMMA17}, 556 {0xa0, 0x5f, ZC3XX_R191_EXPOSURELIMITMID},
636 {0xa0, 0x0b, ZC3XX_R138_GAMMA18}, 557 {0xa0, 0x90, ZC3XX_R192_EXPOSURELIMITLOW},
637 {0xa0, 0x09, ZC3XX_R139_GAMMA19}, 558 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
638 {0xa0, 0x07, ZC3XX_R13A_GAMMA1A}, 559 {0xa0, 0x1d, ZC3XX_R196_ANTIFLICKERMID},
639 {0xa0, 0x06, ZC3XX_R13B_GAMMA1B}, 560 {0xa0, 0x4c, ZC3XX_R197_ANTIFLICKERLOW},
640 {0xa0, 0x00, ZC3XX_R13C_GAMMA1C}, 561 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
641 {0xa0, 0x00, ZC3XX_R13D_GAMMA1D}, 562 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
642 {0xa0, 0x00, ZC3XX_R13E_GAMMA1E}, 563 {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
643 {0xa0, 0x01, ZC3XX_R13F_GAMMA1F}, 564 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
644 {0xa0, 0x58, ZC3XX_R10A_RGB00}, /* matrix */ 565 {0xa0, 0x68, ZC3XX_R01D_HSYNC_0},
645 {0xa0, 0xf4, ZC3XX_R10B_RGB01}, 566 {0xa0, 0xe3, ZC3XX_R01E_HSYNC_1},
646 {0xa0, 0xf4, ZC3XX_R10C_RGB02}, 567 {0xa0, 0xf0, ZC3XX_R01F_HSYNC_2},
647 {0xa0, 0xf4, ZC3XX_R10D_RGB10}, 568 {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
648 {0xa0, 0x58, ZC3XX_R10E_RGB11}, 569 {}
649 {0xa0, 0xf4, ZC3XX_R10F_RGB12}, 570};
650 {0xa0, 0xf4, ZC3XX_R110_RGB20}, 571static const struct usb_action cs2102_60HZ[] = {
651 {0xa0, 0xf4, ZC3XX_R111_RGB21}, 572 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
652 {0xa0, 0x58, ZC3XX_R112_RGB22}, 573 {0xaa, 0x23, 0x0001},
653 {0xa1, 0x01, 0x0180}, 574 {0xaa, 0x24, 0x0055},
654 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 575 {0xaa, 0x25, 0x00cc},
576 {0xaa, 0x21, 0x003f},
577 {0xa0, 0x02, ZC3XX_R190_EXPOSURELIMITHIGH},
578 {0xa0, 0xab, ZC3XX_R191_EXPOSURELIMITMID},
579 {0xa0, 0x98, ZC3XX_R192_EXPOSURELIMITLOW},
580 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
581 {0xa0, 0x30, ZC3XX_R196_ANTIFLICKERMID},
582 {0xa0, 0xd4, ZC3XX_R197_ANTIFLICKERLOW},
583 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
584 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
585 {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
586 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
587 {0xa0, 0x39, ZC3XX_R01D_HSYNC_0},
588 {0xa0, 0x70, ZC3XX_R01E_HSYNC_1},
589 {0xa0, 0xb0, ZC3XX_R01F_HSYNC_2},
590 {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
591 {}
592};
593static const struct usb_action cs2102_60HZScale[] = {
655 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 594 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
656 {0xaa, 0x23, 0x0000}, 595 {0xaa, 0x23, 0x0000},
657 {0xaa, 0x24, 0x00aa}, 596 {0xaa, 0x24, 0x00aa},
@@ -671,162 +610,50 @@ static const struct usb_action cs2102_InitialScale[] = {
671 {0xa0, 0xa5, ZC3XX_R01E_HSYNC_1}, 610 {0xa0, 0xa5, ZC3XX_R01E_HSYNC_1},
672 {0xa0, 0xf0, ZC3XX_R01F_HSYNC_2}, 611 {0xa0, 0xf0, ZC3XX_R01F_HSYNC_2},
673 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 612 {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
674 {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE},
675 {0xa1, 0x01, 0x0180},
676 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
677 {0xa0, 0x40, ZC3XX_R116_RGAIN},
678 {0xa0, 0x40, ZC3XX_R117_GGAIN},
679 {0xa0, 0x40, ZC3XX_R118_BGAIN},
680 {}
681};
682static const struct usb_action cs2102_50HZ[] = {
683 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
684 {0xaa, 0x0f, 0x008c}, /* 00,0f,8c,aa */
685 {0xaa, 0x03, 0x0005}, /* 00,03,05,aa */
686 {0xaa, 0x04, 0x00ac}, /* 00,04,ac,aa */
687 {0xaa, 0x10, 0x0005}, /* 00,10,05,aa */
688 {0xaa, 0x11, 0x00ac}, /* 00,11,ac,aa */
689 {0xaa, 0x1b, 0x0000}, /* 00,1b,00,aa */
690 {0xaa, 0x1c, 0x0005}, /* 00,1c,05,aa */
691 {0xaa, 0x1d, 0x00ac}, /* 00,1d,ac,aa */
692 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
693 {0xa0, 0x3f, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,3f,cc */
694 {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,f0,cc */
695 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
696 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
697 {0xa0, 0x42, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,42,cc */
698 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
699 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
700 {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */
701 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */
702 {0xa0, 0x8c, ZC3XX_R01D_HSYNC_0}, /* 00,1d,8c,cc */
703 {0xa0, 0xb0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,b0,cc */
704 {0xa0, 0xd0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,d0,cc */
705 {}
706};
707static const struct usb_action cs2102_50HZScale[] = {
708 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
709 {0xaa, 0x0f, 0x0093}, /* 00,0f,93,aa */
710 {0xaa, 0x03, 0x0005}, /* 00,03,05,aa */
711 {0xaa, 0x04, 0x00a1}, /* 00,04,a1,aa */
712 {0xaa, 0x10, 0x0005}, /* 00,10,05,aa */
713 {0xaa, 0x11, 0x00a1}, /* 00,11,a1,aa */
714 {0xaa, 0x1b, 0x0000}, /* 00,1b,00,aa */
715 {0xaa, 0x1c, 0x0005}, /* 00,1c,05,aa */
716 {0xaa, 0x1d, 0x00a1}, /* 00,1d,a1,aa */
717 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
718 {0xa0, 0x3f, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,3f,cc */
719 {0xa0, 0xf7, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,f7,cc */
720 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
721 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
722 {0xa0, 0x83, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,83,cc */
723 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
724 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
725 {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */
726 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */
727 {0xa0, 0x93, ZC3XX_R01D_HSYNC_0}, /* 00,1d,93,cc */
728 {0xa0, 0xb0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,b0,cc */
729 {0xa0, 0xd0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,d0,cc */
730 {}
731};
732static const struct usb_action cs2102_60HZ[] = {
733 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
734 {0xaa, 0x0f, 0x005d}, /* 00,0f,5d,aa */
735 {0xaa, 0x03, 0x0005}, /* 00,03,05,aa */
736 {0xaa, 0x04, 0x00aa}, /* 00,04,aa,aa */
737 {0xaa, 0x10, 0x0005}, /* 00,10,05,aa */
738 {0xaa, 0x11, 0x00aa}, /* 00,11,aa,aa */
739 {0xaa, 0x1b, 0x0000}, /* 00,1b,00,aa */
740 {0xaa, 0x1c, 0x0005}, /* 00,1c,05,aa */
741 {0xaa, 0x1d, 0x00aa}, /* 00,1d,aa,aa */
742 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
743 {0xa0, 0x3f, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,3f,cc */
744 {0xa0, 0xe4, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,e4,cc */
745 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
746 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
747 {0xa0, 0x3a, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,3a,cc */
748 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
749 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
750 {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */
751 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */
752 {0xa0, 0x5d, ZC3XX_R01D_HSYNC_0}, /* 00,1d,5d,cc */
753 {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc */
754 {0xa0, 0xd0, 0x00c8}, /* 00,c8,d0,cc */
755 {}
756};
757static const struct usb_action cs2102_60HZScale[] = {
758 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
759 {0xaa, 0x0f, 0x00b7}, /* 00,0f,b7,aa */
760 {0xaa, 0x03, 0x0005}, /* 00,03,05,aa */
761 {0xaa, 0x04, 0x00be}, /* 00,04,be,aa */
762 {0xaa, 0x10, 0x0005}, /* 00,10,05,aa */
763 {0xaa, 0x11, 0x00be}, /* 00,11,be,aa */
764 {0xaa, 0x1b, 0x0000}, /* 00,1b,00,aa */
765 {0xaa, 0x1c, 0x0005}, /* 00,1c,05,aa */
766 {0xaa, 0x1d, 0x00be}, /* 00,1d,be,aa */
767 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
768 {0xa0, 0x3f, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,3f,cc */
769 {0xa0, 0xfc, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,fc,cc */
770 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
771 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
772 {0xa0, 0x69, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,69,cc */
773 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
774 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
775 {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */
776 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */
777 {0xa0, 0xb7, ZC3XX_R01D_HSYNC_0}, /* 00,1d,b7,cc */
778 {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d0,cc */
779 {0xa0, 0xe8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e8,cc */
780 {} 613 {}
781}; 614};
782static const struct usb_action cs2102_NoFliker[] = { 615static const struct usb_action cs2102_NoFliker[] = {
783 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 616 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
784 {0xaa, 0x0f, 0x0059}, /* 00,0f,59,aa */ 617 {0xaa, 0x23, 0x0001},
785 {0xaa, 0x03, 0x0005}, /* 00,03,05,aa */ 618 {0xaa, 0x24, 0x005f},
786 {0xaa, 0x04, 0x0080}, /* 00,04,80,aa */ 619 {0xaa, 0x25, 0x0000},
787 {0xaa, 0x10, 0x0005}, /* 00,10,05,aa */ 620 {0xaa, 0x21, 0x0001},
788 {0xaa, 0x11, 0x0080}, /* 00,11,80,aa */ 621 {0xa0, 0x02, ZC3XX_R190_EXPOSURELIMITHIGH},
789 {0xaa, 0x1b, 0x0000}, /* 00,1b,00,aa */ 622 {0xa0, 0xbf, ZC3XX_R191_EXPOSURELIMITMID},
790 {0xaa, 0x1c, 0x0005}, /* 00,1c,05,aa */ 623 {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW},
791 {0xaa, 0x1d, 0x0080}, /* 00,1d,80,aa */ 624 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
792 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 625 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
793 {0xa0, 0x3f, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,3f,cc */ 626 {0xa0, 0x80, ZC3XX_R197_ANTIFLICKERLOW},
794 {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,f0,cc */ 627 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
795 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 628 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
796 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 629 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
797 {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */ 630 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
798 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 631 {0xa0, 0x01, ZC3XX_R01D_HSYNC_0},
799 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 632 {0xa0, 0x40, ZC3XX_R01E_HSYNC_1},
800 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 633 {0xa0, 0xa0, ZC3XX_R01F_HSYNC_2},
801 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 634 {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
802 {0xa0, 0x59, ZC3XX_R01D_HSYNC_0}, /* 00,1d,59,cc */
803 {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc */
804 {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c8,cc */
805 {} 635 {}
806}; 636};
807static const struct usb_action cs2102_NoFlikerScale[] = { 637static const struct usb_action cs2102_NoFlikerScale[] = {
808 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 638 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
809 {0xaa, 0x0f, 0x0059}, /* 00,0f,59,aa */ 639 {0xaa, 0x23, 0x0000},
810 {0xaa, 0x03, 0x0005}, /* 00,03,05,aa */ 640 {0xaa, 0x24, 0x00af},
811 {0xaa, 0x04, 0x0080}, /* 00,04,80,aa */ 641 {0xaa, 0x25, 0x0080},
812 {0xaa, 0x10, 0x0005}, /* 00,10,05,aa */ 642 {0xaa, 0x21, 0x0001},
813 {0xaa, 0x11, 0x0080}, /* 00,11,80,aa */ 643 {0xa0, 0x01, ZC3XX_R190_EXPOSURELIMITHIGH},
814 {0xaa, 0x1b, 0x0000}, /* 00,1b,00,aa */ 644 {0xa0, 0x5f, ZC3XX_R191_EXPOSURELIMITMID},
815 {0xaa, 0x1c, 0x0005}, /* 00,1c,05,aa */ 645 {0xa0, 0x80, ZC3XX_R192_EXPOSURELIMITLOW},
816 {0xaa, 0x1d, 0x0080}, /* 00,1d,80,aa */ 646 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
817 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 647 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
818 {0xa0, 0x3f, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,3f,cc */ 648 {0xa0, 0x80, ZC3XX_R197_ANTIFLICKERLOW},
819 {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,f0,cc */ 649 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
820 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 650 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
821 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 651 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
822 {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */ 652 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
823 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 653 {0xa0, 0x01, ZC3XX_R01D_HSYNC_0},
824 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 654 {0xa0, 0x40, ZC3XX_R01E_HSYNC_1},
825 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 655 {0xa0, 0xa0, ZC3XX_R01F_HSYNC_2},
826 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 656 {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
827 {0xa0, 0x59, ZC3XX_R01D_HSYNC_0}, /* 00,1d,59,cc */
828 {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc */
829 {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c8,cc */
830 {} 657 {}
831}; 658};
832 659
@@ -4409,170 +4236,80 @@ static const struct usb_action pas202b_NoFlikerScale[] = {
4409 {} 4236 {}
4410}; 4237};
4411 4238
4412static const struct usb_action pb03303x_Initial[] = { 4239/* mi0360soc and pb0330 from vm30x.inf for 0ac8:301b and 0ac8:303b 07/02/13 */
4240static const struct usb_action mi0360soc_Initial[] = { /* 640x480 */
4413 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 4241 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
4414 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 4242 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
4415 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, 4243 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
4416 {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 4244 {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
4417 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 4245 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
4418 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 4246 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
4419 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 4247 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
4420 {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 4248 {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
4421 {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, /* 8b -> dc */ 4249 {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
4422 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 4250 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
4423 {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 4251 {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, /*jfm: was 03*/
4424 {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 4252/* {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, */
4425 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 4253 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
4426 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 4254 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
4427 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 4255 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
4428 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 4256 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
4429 {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, 4257 {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
4258 {0xdd, 0x00, 0x0200},
4430 {0xaa, 0x01, 0x0001}, 4259 {0xaa, 0x01, 0x0001},
4431 {0xaa, 0x06, 0x0000}, 4260 {0xaa, 0x06, 0x0000},
4432 {0xaa, 0x08, 0x0483}, 4261 {0xaa, 0x08, 0x0483},
4433 {0xaa, 0x01, 0x0004}, 4262 {0xaa, 0x01, 0x0004},
4434 {0xaa, 0x08, 0x0006}, 4263 {0xaa, 0x08, 0x0006},
4435 {0xaa, 0x02, 0x0011}, 4264 {0xaa, 0x02, 0x0011},
4436 {0xaa, 0x03, 0x01e7}, 4265 {0xaa, 0x03, 0x01e5}, /*jfm: was 01e7*/
4437 {0xaa, 0x04, 0x0287}, 4266 {0xaa, 0x04, 0x0285}, /*jfm: was 0287*/
4438 {0xaa, 0x07, 0x3002}, 4267 {0xaa, 0x07, 0x3002},
4439 {0xaa, 0x20, 0x1100}, 4268 {0xaa, 0x20, 0x5100}, /*jfm: was 1100*/
4440 {0xaa, 0x35, 0x0050}, 4269 {0xaa, 0x35, 0x507f}, /*jfm: was 0050*/
4441 {0xaa, 0x30, 0x0005}, 4270 {0xaa, 0x30, 0x0005},
4442 {0xaa, 0x31, 0x0000}, 4271 {0xaa, 0x31, 0x0000},
4443 {0xaa, 0x58, 0x0078}, 4272 {0xaa, 0x58, 0x0078},
4444 {0xaa, 0x62, 0x0411}, 4273 {0xaa, 0x62, 0x0411},
4445 {0xaa, 0x2b, 0x0028}, 4274 {0xaa, 0x2b, 0x0028},
4446 {0xaa, 0x2c, 0x0030}, 4275 {0xaa, 0x2c, 0x007f}, /*jfm: was 0030*/
4447 {0xaa, 0x2d, 0x0030}, 4276 {0xaa, 0x2d, 0x007f}, /*jfm: was 0030*/
4448 {0xaa, 0x2e, 0x0028}, 4277 {0xaa, 0x2e, 0x007f}, /*jfm: was 0030*/
4449 {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, 4278 {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},
4450 {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 4279 {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /*jfm: was 37*/
4451 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 4280 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4452 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 4281 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
4453 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 4282 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
4454 {0xa0, 0x00, 0x01ad}, 4283 {0xa0, 0x09, 0x01ad}, /*jfm: was 00*/
4455 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 4284 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
4456 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 4285 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
4457 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 4286 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
4458 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 4287 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
4459 {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 4288 {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
4460 {0xa0, 0x78, ZC3XX_R18D_YTARGET}, 4289 {0xa0, 0x6c, ZC3XX_R18D_YTARGET}, /* jfm: was 78 */
4461 {0xa0, 0x61, ZC3XX_R116_RGAIN}, 4290 {0xa0, 0x61, ZC3XX_R116_RGAIN},
4462 {0xa0, 0x65, ZC3XX_R118_BGAIN}, 4291 {0xa0, 0x65, ZC3XX_R118_BGAIN},
4463
4464 {0xa1, 0x01, 0x0002},
4465 {0xa0, 0x09, 0x01ad},
4466 {0xa0, 0x15, 0x01ae},
4467 {0xa0, 0x0d, 0x003a},
4468 {0xa0, 0x02, 0x003b},
4469 {0xa0, 0x00, 0x0038},
4470 {0xa0, 0x50, ZC3XX_R10A_RGB00}, /* matrix */
4471 {0xa0, 0xf8, ZC3XX_R10B_RGB01},
4472 {0xa0, 0xf8, ZC3XX_R10C_RGB02},
4473 {0xa0, 0xf8, ZC3XX_R10D_RGB10},
4474 {0xa0, 0x50, ZC3XX_R10E_RGB11},
4475 {0xa0, 0xf8, ZC3XX_R10F_RGB12},
4476 {0xa0, 0xf8, ZC3XX_R110_RGB20},
4477 {0xa0, 0xf8, ZC3XX_R111_RGB21},
4478 {0xa0, 0x50, ZC3XX_R112_RGB22},
4479
4480 {0xa1, 0x01, 0x0008},
4481 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
4482 {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00},
4483 {0xa1, 0x01, 0x01c8},
4484 {0xa1, 0x01, 0x01c9},
4485 {0xa1, 0x01, 0x01ca},
4486 {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */
4487 {0xa0, 0x13, ZC3XX_R120_GAMMA00}, /* gamma 4 */
4488 {0xa0, 0x38, ZC3XX_R121_GAMMA01},
4489 {0xa0, 0x59, ZC3XX_R122_GAMMA02},
4490 {0xa0, 0x79, ZC3XX_R123_GAMMA03},
4491 {0xa0, 0x92, ZC3XX_R124_GAMMA04},
4492 {0xa0, 0xa7, ZC3XX_R125_GAMMA05},
4493 {0xa0, 0xb9, ZC3XX_R126_GAMMA06},
4494 {0xa0, 0xc8, ZC3XX_R127_GAMMA07},
4495 {0xa0, 0xd4, ZC3XX_R128_GAMMA08},
4496 {0xa0, 0xdf, ZC3XX_R129_GAMMA09},
4497 {0xa0, 0xe7, ZC3XX_R12A_GAMMA0A},
4498 {0xa0, 0xee, ZC3XX_R12B_GAMMA0B},
4499 {0xa0, 0xf4, ZC3XX_R12C_GAMMA0C},
4500 {0xa0, 0xf9, ZC3XX_R12D_GAMMA0D},
4501 {0xa0, 0xfc, ZC3XX_R12E_GAMMA0E},
4502 {0xa0, 0xff, ZC3XX_R12F_GAMMA0F},
4503 {0xa0, 0x26, ZC3XX_R130_GAMMA10},
4504 {0xa0, 0x22, ZC3XX_R131_GAMMA11},
4505 {0xa0, 0x20, ZC3XX_R132_GAMMA12},
4506 {0xa0, 0x1c, ZC3XX_R133_GAMMA13},
4507 {0xa0, 0x16, ZC3XX_R134_GAMMA14},
4508 {0xa0, 0x13, ZC3XX_R135_GAMMA15},
4509 {0xa0, 0x10, ZC3XX_R136_GAMMA16},
4510 {0xa0, 0x0d, ZC3XX_R137_GAMMA17},
4511 {0xa0, 0x0b, ZC3XX_R138_GAMMA18},
4512 {0xa0, 0x09, ZC3XX_R139_GAMMA19},
4513 {0xa0, 0x07, ZC3XX_R13A_GAMMA1A},
4514 {0xa0, 0x06, ZC3XX_R13B_GAMMA1B},
4515 {0xa0, 0x05, ZC3XX_R13C_GAMMA1C},
4516 {0xa0, 0x04, ZC3XX_R13D_GAMMA1D},
4517 {0xa0, 0x03, ZC3XX_R13E_GAMMA1E},
4518 {0xa0, 0x02, ZC3XX_R13F_GAMMA1F},
4519 {0xa0, 0x50, ZC3XX_R10A_RGB00}, /* matrix */
4520 {0xa0, 0xf8, ZC3XX_R10B_RGB01},
4521 {0xa0, 0xf8, ZC3XX_R10C_RGB02},
4522 {0xa0, 0xf8, ZC3XX_R10D_RGB10},
4523 {0xa0, 0x50, ZC3XX_R10E_RGB11},
4524 {0xa0, 0xf8, ZC3XX_R10F_RGB12},
4525 {0xa0, 0xf8, ZC3XX_R110_RGB20},
4526 {0xa0, 0xf8, ZC3XX_R111_RGB21},
4527 {0xa0, 0x50, ZC3XX_R112_RGB22},
4528
4529 {0xa1, 0x01, 0x0180},
4530 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4531 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4532 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4533 {0xaa, 0x05, 0x0009},
4534 {0xaa, 0x09, 0x0134},
4535 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4536 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4537 {0xa0, 0xec, ZC3XX_R192_EXPOSURELIMITLOW},
4538 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4539 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4540 {0xa0, 0x9c, ZC3XX_R197_ANTIFLICKERLOW},
4541 {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4542 {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
4543 {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
4544 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
4545 {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
4546 {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1},
4547 {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2},
4548 {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
4549 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4550 {0xa0, 0x09, 0x01ad},
4551 {0xa0, 0x15, 0x01ae},
4552 {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE},
4553 {0xa1, 0x01, 0x0180},
4554 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4555 {} 4292 {}
4556}; 4293};
4557 4294static const struct usb_action mi0360soc_InitialScale[] = { /* 320x240 */
4558static const struct usb_action pb03303x_InitialScale[] = {
4559 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 4295 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
4560 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 4296 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
4561 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, 4297 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
4562 {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 4298 {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
4563 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 4299 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
4564 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 4300 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
4565 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 4301 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
4566 {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 4302 {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
4567 {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, /* 8b -> dc */ 4303 {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
4568 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 4304 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
4569 {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 4305 {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, /*jfm: was 03*/
4570 {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 4306/* {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, */
4571 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 4307 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
4572 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 4308 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
4573 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 4309 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
4574 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 4310 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
4575 {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, 4311 {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
4312 {0xdd, 0x00, 0x0200},
4576 {0xaa, 0x01, 0x0001}, 4313 {0xaa, 0x01, 0x0001},
4577 {0xaa, 0x06, 0x0000}, 4314 {0xaa, 0x06, 0x0000},
4578 {0xaa, 0x08, 0x0483}, 4315 {0xaa, 0x08, 0x0483},
@@ -4582,111 +4319,111 @@ static const struct usb_action pb03303x_InitialScale[] = {
4582 {0xaa, 0x03, 0x01e7}, 4319 {0xaa, 0x03, 0x01e7},
4583 {0xaa, 0x04, 0x0287}, 4320 {0xaa, 0x04, 0x0287},
4584 {0xaa, 0x07, 0x3002}, 4321 {0xaa, 0x07, 0x3002},
4585 {0xaa, 0x20, 0x1100}, 4322 {0xaa, 0x20, 0x5100}, /*jfm: was 1100*/
4586 {0xaa, 0x35, 0x0050}, 4323 {0xaa, 0x35, 0x007f}, /*jfm: was 0050*/
4587 {0xaa, 0x30, 0x0005}, 4324 {0xaa, 0x30, 0x0005},
4588 {0xaa, 0x31, 0x0000}, 4325 {0xaa, 0x31, 0x0000},
4589 {0xaa, 0x58, 0x0078}, 4326 {0xaa, 0x58, 0x0078},
4590 {0xaa, 0x62, 0x0411}, 4327 {0xaa, 0x62, 0x0411},
4591 {0xaa, 0x2b, 0x0028}, 4328 {0xaa, 0x2b, 0x007f}, /*jfm: was 28*/
4592 {0xaa, 0x2c, 0x0030}, 4329 {0xaa, 0x2c, 0x007f}, /*jfm: was 30*/
4593 {0xaa, 0x2d, 0x0030}, 4330 {0xaa, 0x2d, 0x007f}, /*jfm: was 30*/
4594 {0xaa, 0x2e, 0x0028}, 4331 {0xaa, 0x2e, 0x007f}, /*jfm: was 28*/
4595 {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, 4332 {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},
4596 {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 4333 {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /*jfm: was 37*/
4597 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 4334 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4598 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 4335 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
4599 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 4336 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
4600 {0xa0, 0x00, 0x01ad}, 4337 {0xa0, 0x09, 0x01ad}, /*jfm: was 00*/
4601 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 4338 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
4602 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 4339 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
4603 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 4340 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
4604 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 4341 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
4605 {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 4342 {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
4606 {0xa0, 0x78, ZC3XX_R18D_YTARGET}, 4343 {0xa0, 0x6c, ZC3XX_R18D_YTARGET}, /*jfm: was 78*/
4607 {0xa0, 0x61, ZC3XX_R116_RGAIN}, 4344 {0xa0, 0x61, ZC3XX_R116_RGAIN},
4608 {0xa0, 0x65, ZC3XX_R118_BGAIN}, 4345 {0xa0, 0x65, ZC3XX_R118_BGAIN},
4609 4346 {}
4610 {0xa1, 0x01, 0x0002}, 4347};
4611 4348static const struct usb_action mi360soc_AE50HZ[] = {
4612 {0xa0, 0x09, 0x01ad}, 4349 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4613 {0xa0, 0x15, 0x01ae}, 4350 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4614 4351 {0xbb, 0x00, 0x0562},
4615 {0xa0, 0x0d, 0x003a}, 4352 {0xbb, 0x01, 0x09aa},
4616 {0xa0, 0x02, 0x003b}, 4353 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4617 {0xa0, 0x00, 0x0038}, 4354 {0xa0, 0x03, ZC3XX_R191_EXPOSURELIMITMID},
4618 {0xa0, 0x50, ZC3XX_R10A_RGB00}, /* matrix */ 4355 {0xa0, 0x9b, ZC3XX_R192_EXPOSURELIMITLOW},
4619 {0xa0, 0xf8, ZC3XX_R10B_RGB01}, 4356 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4620 {0xa0, 0xf8, ZC3XX_R10C_RGB02}, 4357 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4621 {0xa0, 0xf8, ZC3XX_R10D_RGB10}, 4358 {0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW},
4622 {0xa0, 0x50, ZC3XX_R10E_RGB11}, 4359 {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4623 {0xa0, 0xf8, ZC3XX_R10F_RGB12}, 4360 {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
4624 {0xa0, 0xf8, ZC3XX_R110_RGB20}, 4361 {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
4625 {0xa0, 0xf8, ZC3XX_R111_RGB21}, 4362 {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
4626 {0xa0, 0x50, ZC3XX_R112_RGB22}, 4363 {0xa0, 0x62, ZC3XX_R01D_HSYNC_0},
4627 4364 {0xa0, 0x90, ZC3XX_R01E_HSYNC_1},
4628 {0xa1, 0x01, 0x0008}, 4365 {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2},
4629 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ 4366 {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
4630 {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ 4367 {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
4631 {0xa1, 0x01, 0x01c8}, 4368 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4632 {0xa1, 0x01, 0x01c9}, 4369 {}
4633 {0xa1, 0x01, 0x01ca}, 4370};
4634 {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ 4371static const struct usb_action mi360soc_AE50HZScale[] = {
4635
4636 {0xa0, 0x13, ZC3XX_R120_GAMMA00}, /* gamma 4 */
4637 {0xa0, 0x38, ZC3XX_R121_GAMMA01},
4638 {0xa0, 0x59, ZC3XX_R122_GAMMA02},
4639 {0xa0, 0x79, ZC3XX_R123_GAMMA03},
4640 {0xa0, 0x92, ZC3XX_R124_GAMMA04},
4641 {0xa0, 0xa7, ZC3XX_R125_GAMMA05},
4642 {0xa0, 0xb9, ZC3XX_R126_GAMMA06},
4643 {0xa0, 0xc8, ZC3XX_R127_GAMMA07},
4644 {0xa0, 0xd4, ZC3XX_R128_GAMMA08},
4645 {0xa0, 0xdf, ZC3XX_R129_GAMMA09},
4646 {0xa0, 0xe7, ZC3XX_R12A_GAMMA0A},
4647 {0xa0, 0xee, ZC3XX_R12B_GAMMA0B},
4648 {0xa0, 0xf4, ZC3XX_R12C_GAMMA0C},
4649 {0xa0, 0xf9, ZC3XX_R12D_GAMMA0D},
4650 {0xa0, 0xfc, ZC3XX_R12E_GAMMA0E},
4651 {0xa0, 0xff, ZC3XX_R12F_GAMMA0F},
4652 {0xa0, 0x26, ZC3XX_R130_GAMMA10},
4653 {0xa0, 0x22, ZC3XX_R131_GAMMA11},
4654 {0xa0, 0x20, ZC3XX_R132_GAMMA12},
4655 {0xa0, 0x1c, ZC3XX_R133_GAMMA13},
4656 {0xa0, 0x16, ZC3XX_R134_GAMMA14},
4657 {0xa0, 0x13, ZC3XX_R135_GAMMA15},
4658 {0xa0, 0x10, ZC3XX_R136_GAMMA16},
4659 {0xa0, 0x0d, ZC3XX_R137_GAMMA17},
4660 {0xa0, 0x0b, ZC3XX_R138_GAMMA18},
4661 {0xa0, 0x09, ZC3XX_R139_GAMMA19},
4662 {0xa0, 0x07, ZC3XX_R13A_GAMMA1A},
4663 {0xa0, 0x06, ZC3XX_R13B_GAMMA1B},
4664 {0xa0, 0x05, ZC3XX_R13C_GAMMA1C},
4665 {0xa0, 0x04, ZC3XX_R13D_GAMMA1D},
4666 {0xa0, 0x03, ZC3XX_R13E_GAMMA1E},
4667 {0xa0, 0x02, ZC3XX_R13F_GAMMA1F},
4668 {0xa0, 0x50, ZC3XX_R10A_RGB00}, /* matrix */
4669 {0xa0, 0xf8, ZC3XX_R10B_RGB01},
4670 {0xa0, 0xf8, ZC3XX_R10C_RGB02},
4671 {0xa0, 0xf8, ZC3XX_R10D_RGB10},
4672 {0xa0, 0x50, ZC3XX_R10E_RGB11},
4673 {0xa0, 0xf8, ZC3XX_R10F_RGB12},
4674 {0xa0, 0xf8, ZC3XX_R110_RGB20},
4675 {0xa0, 0xf8, ZC3XX_R111_RGB21},
4676 {0xa0, 0x50, ZC3XX_R112_RGB22},
4677
4678 {0xa1, 0x01, 0x0180},
4679 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 4372 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4373 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4374 {0xbb, 0x00, 0x0509},
4375 {0xbb, 0x01, 0x0934},
4376 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4377 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4378 {0xa0, 0xd2, ZC3XX_R192_EXPOSURELIMITLOW},
4379 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4380 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4381 {0xa0, 0x9a, ZC3XX_R197_ANTIFLICKERLOW},
4382 {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4383 {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
4384 {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
4385 {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
4386 {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
4387 {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1},
4388 {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2},
4389 {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
4390 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4391 {}
4392};
4393static const struct usb_action mi360soc_AE60HZ[] = {
4394 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4395 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4396 {0xbb, 0x00, 0x053d},
4397 {0xbb, 0x01, 0x096e},
4398 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4399 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4400 {0xa0, 0xdd, ZC3XX_R192_EXPOSURELIMITLOW},
4401 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4402 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4403 {0xa0, 0x3d, ZC3XX_R197_ANTIFLICKERLOW},
4404 {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4405 {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
4406 {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
4407 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
4408 {0xa0, 0x62, ZC3XX_R01D_HSYNC_0},
4409 {0xa0, 0x90, ZC3XX_R01E_HSYNC_1},
4410 {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2},
4411 {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
4412 {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
4413 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4414 {}
4415};
4416static const struct usb_action mi360soc_AE60HZScale[] = {
4680 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 4417 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4681 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 4418 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4682 {0xaa, 0x05, 0x0009}, 4419 {0xbb, 0x00, 0x0509},
4683 {0xaa, 0x09, 0x0134}, 4420 {0xbb, 0x01, 0x0983},
4684 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 4421 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4685 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 4422 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4686 {0xa0, 0xec, ZC3XX_R192_EXPOSURELIMITLOW}, 4423 {0xa0, 0x8f, ZC3XX_R192_EXPOSURELIMITLOW},
4687 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 4424 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4688 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 4425 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4689 {0xa0, 0x9c, ZC3XX_R197_ANTIFLICKERLOW}, 4426 {0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW},
4690 {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 4427 {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4691 {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, 4428 {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
4692 {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, 4429 {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
@@ -4696,20 +4433,60 @@ static const struct usb_action pb03303x_InitialScale[] = {
4696 {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2}, 4433 {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2},
4697 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 4434 {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
4698 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 4435 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4699 {0xa0, 0x09, 0x01ad}, 4436 {}
4700 {0xa0, 0x15, 0x01ae}, 4437};
4701 {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE}, 4438static const struct usb_action mi360soc_AENoFliker[] = {
4702 {0xa1, 0x01, 0x0180}, 4439 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4440 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4441 {0xbb, 0x00, 0x0509},
4442 {0xbb, 0x01, 0x0960},
4443 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4444 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4445 {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW},
4446 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4447 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4448 {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW},
4449 {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4450 {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
4451 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
4452 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
4453 {0xa0, 0x09, ZC3XX_R01D_HSYNC_0},
4454 {0xa0, 0x40, ZC3XX_R01E_HSYNC_1},
4455 {0xa0, 0x90, ZC3XX_R01F_HSYNC_2},
4456 {0xa0, 0xe0, ZC3XX_R020_HSYNC_3},
4457 {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
4703 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 4458 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4704 {} 4459 {}
4705}; 4460};
4706static const struct usb_action pb0330xx_Initial[] = { 4461static const struct usb_action mi360soc_AENoFlikerScale[] = {
4707 {0xa1, 0x01, 0x0008}, 4462 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4708 {0xa1, 0x01, 0x0008}, 4463 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4464 {0xbb, 0x00, 0x0534},
4465 {0xbb, 0x02, 0x0960},
4466 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4467 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4468 {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW},
4469 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4470 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4471 {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW},
4472 {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4473 {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
4474 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
4475 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
4476 {0xa0, 0x34, ZC3XX_R01D_HSYNC_0},
4477 {0xa0, 0x60, ZC3XX_R01E_HSYNC_1},
4478 {0xa0, 0x90, ZC3XX_R01F_HSYNC_2},
4479 {0xa0, 0xe0, ZC3XX_R020_HSYNC_3},
4480 {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
4481 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4482 {}
4483};
4484
4485static const struct usb_action pb0330_Initial[] = { /* 640x480 */
4709 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 4486 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
4710 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */ 4487 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */
4711 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, 4488 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
4712 {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 4489 {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
4713 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 4490 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
4714 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 4491 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
4715 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 4492 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
@@ -4721,11 +4498,12 @@ static const struct usb_action pb0330xx_Initial[] = {
4721 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 4498 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
4722 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 4499 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
4723 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 4500 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
4501 {0xdd, 0x00, 0x0200},
4724 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 4502 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4725 {0xaa, 0x01, 0x0006}, 4503 {0xaa, 0x01, 0x0006},
4726 {0xaa, 0x02, 0x0011}, 4504 {0xaa, 0x02, 0x0011},
4727 {0xaa, 0x03, 0x01e7}, 4505 {0xaa, 0x03, 0x01e5}, /*jfm: was 1e7*/
4728 {0xaa, 0x04, 0x0287}, 4506 {0xaa, 0x04, 0x0285}, /*jfm: was 0287*/
4729 {0xaa, 0x06, 0x0003}, 4507 {0xaa, 0x06, 0x0003},
4730 {0xaa, 0x07, 0x3002}, 4508 {0xaa, 0x07, 0x3002},
4731 {0xaa, 0x20, 0x1100}, 4509 {0xaa, 0x20, 0x1100},
@@ -4743,88 +4521,21 @@ static const struct usb_action pb0330xx_Initial[] = {
4743 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 4521 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4744 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 4522 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
4745 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 4523 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
4746 {0xa0, 0x00, 0x01ad}, 4524 {0xa0, 0x09, 0x01ad}, /*jfm: was 00 */
4525 {0xa0, 0x15, 0x01ae},
4747 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 4526 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
4748 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 4527 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
4749 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 4528 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
4750 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 4529 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
4751 {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 4530 {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
4752 {0xa0, 0x6c, ZC3XX_R18D_YTARGET}, 4531 {0xa0, 0x78, ZC3XX_R18D_YTARGET}, /*jfm: was 6c*/
4753 {0xa1, 0x01, 0x0002},
4754 {0xa0, 0x09, 0x01ad},
4755 {0xa0, 0x15, 0x01ae},
4756 {0xa0, 0x00, ZC3XX_R092_I2CADDRESSSELECT},
4757 {0xa0, 0x02, ZC3XX_R090_I2CCOMMAND},
4758 {0xa1, 0x01, 0x0091},
4759 {0xa1, 0x01, 0x0095},
4760 {0xa1, 0x01, 0x0096},
4761 {0xa0, 0x50, ZC3XX_R10A_RGB00}, /* matrix */
4762 {0xa0, 0xf8, ZC3XX_R10B_RGB01},
4763 {0xa0, 0xf8, ZC3XX_R10C_RGB02},
4764 {0xa0, 0xf8, ZC3XX_R10D_RGB10},
4765 {0xa0, 0x50, ZC3XX_R10E_RGB11},
4766 {0xa0, 0xf8, ZC3XX_R10F_RGB12},
4767 {0xa0, 0xf8, ZC3XX_R110_RGB20},
4768 {0xa0, 0xf8, ZC3XX_R111_RGB21},
4769 {0xa0, 0x50, ZC3XX_R112_RGB22},
4770 {0xa1, 0x01, 0x0008},
4771 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */
4772 {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */
4773 {0xa1, 0x01, 0x01c8},
4774 {0xa1, 0x01, 0x01c9},
4775 {0xa1, 0x01, 0x01ca},
4776 {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */
4777
4778 {0xa0, 0x50, ZC3XX_R10A_RGB00}, /* matrix */
4779 {0xa0, 0xf8, ZC3XX_R10B_RGB01},
4780 {0xa0, 0xf8, ZC3XX_R10C_RGB02},
4781 {0xa0, 0xf8, ZC3XX_R10D_RGB10},
4782 {0xa0, 0x50, ZC3XX_R10E_RGB11},
4783 {0xa0, 0xf8, ZC3XX_R10F_RGB12},
4784 {0xa0, 0xf8, ZC3XX_R110_RGB20},
4785 {0xa0, 0xf8, ZC3XX_R111_RGB21},
4786 {0xa0, 0x50, ZC3XX_R112_RGB22},
4787 {0xa1, 0x01, 0x0180},
4788 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4789 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4790 {0xaa, 0x05, 0x0066},
4791 {0xaa, 0x09, 0x02b2},
4792 {0xaa, 0x10, 0x0002},
4793
4794 {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
4795 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4796 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4797 {0xa0, 0x8c, ZC3XX_R192_EXPOSURELIMITLOW},
4798 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4799 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4800 {0xa0, 0x8a, ZC3XX_R197_ANTIFLICKERLOW},
4801 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
4802 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
4803 {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
4804 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
4805 {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
4806 {0xa0, 0xf0, ZC3XX_R01E_HSYNC_1},
4807 {0xa0, 0xf8, ZC3XX_R01F_HSYNC_2},
4808 {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
4809 {0xa0, 0x09, 0x01ad},
4810 {0xa0, 0x15, 0x01ae},
4811 {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE},
4812 {0xa1, 0x01, 0x0180},
4813 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4814 {0xa1, 0x01, 0x0008},
4815 {0xa1, 0x01, 0x0007},
4816/* {0xa0, 0x30, 0x0007}, */
4817/* {0xa0, 0x00, 0x0007}, */
4818 {} 4532 {}
4819}; 4533};
4820 4534static const struct usb_action pb0330_InitialScale[] = { /* 320x240 */
4821static const struct usb_action pb0330xx_InitialScale[] = {
4822 {0xa1, 0x01, 0x0008},
4823 {0xa1, 0x01, 0x0008},
4824 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 4535 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
4825 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */ 4536 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */
4826 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, 4537 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
4827 {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, /* 10 */ 4538 {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
4828 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 4539 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
4829 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 4540 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
4830 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 4541 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
@@ -4836,6 +4547,7 @@ static const struct usb_action pb0330xx_InitialScale[] = {
4836 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 4547 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
4837 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 4548 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
4838 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 4549 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
4550 {0xdd, 0x00, 0x0200},
4839 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 4551 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4840 {0xaa, 0x01, 0x0006}, 4552 {0xaa, 0x01, 0x0006},
4841 {0xaa, 0x02, 0x0011}, 4553 {0xaa, 0x02, 0x0011},
@@ -4858,53 +4570,43 @@ static const struct usb_action pb0330xx_InitialScale[] = {
4858 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 4570 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4859 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 4571 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
4860 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 4572 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
4861 {0xa0, 0x00, 0x01ad}, 4573 {0xa0, 0x09, 0x01ad},
4574 {0xa0, 0x15, 0x01ae},
4862 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 4575 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
4863 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 4576 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
4864 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 4577 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
4865 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 4578 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
4866 {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 4579 {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
4867 {0xa0, 0x6c, ZC3XX_R18D_YTARGET}, 4580 {0xa0, 0x78, ZC3XX_R18D_YTARGET}, /*jfm: was 6c*/
4868 {0xa1, 0x01, 0x0002}, 4581 {}
4869 {0xa0, 0x09, 0x01ad}, 4582};
4870 {0xa0, 0x15, 0x01ae}, 4583static const struct usb_action pb0330_50HZ[] = {
4871 {0xa0, 0x00, ZC3XX_R092_I2CADDRESSSELECT},
4872 {0xa0, 0x02, ZC3XX_R090_I2CCOMMAND},
4873 {0xa1, 0x01, 0x0091},
4874 {0xa1, 0x01, 0x0095},
4875 {0xa1, 0x01, 0x0096},
4876 {0xa0, 0x50, ZC3XX_R10A_RGB00}, /* matrix */
4877 {0xa0, 0xf8, ZC3XX_R10B_RGB01},
4878 {0xa0, 0xf8, ZC3XX_R10C_RGB02},
4879 {0xa0, 0xf8, ZC3XX_R10D_RGB10},
4880 {0xa0, 0x50, ZC3XX_R10E_RGB11},
4881 {0xa0, 0xf8, ZC3XX_R10F_RGB12},
4882 {0xa0, 0xf8, ZC3XX_R110_RGB20},
4883 {0xa0, 0xf8, ZC3XX_R111_RGB21},
4884 {0xa0, 0x50, ZC3XX_R112_RGB22},
4885 {0xa1, 0x01, 0x0008},
4886 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */
4887 {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */
4888 {0xa1, 0x01, 0x01c8},
4889 {0xa1, 0x01, 0x01c9},
4890 {0xa1, 0x01, 0x01ca},
4891 {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */
4892
4893 {0xa0, 0x50, ZC3XX_R10A_RGB00}, /* matrix */
4894 {0xa0, 0xf8, ZC3XX_R10B_RGB01},
4895 {0xa0, 0xf8, ZC3XX_R10C_RGB02},
4896 {0xa0, 0xf8, ZC3XX_R10D_RGB10},
4897 {0xa0, 0x50, ZC3XX_R10E_RGB11},
4898 {0xa0, 0xf8, ZC3XX_R10F_RGB12},
4899 {0xa0, 0xf8, ZC3XX_R110_RGB20},
4900 {0xa0, 0xf8, ZC3XX_R111_RGB21},
4901 {0xa0, 0x50, ZC3XX_R112_RGB22},
4902 {0xa1, 0x01, 0x0180},
4903 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4904 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 4584 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4905 {0xaa, 0x05, 0x0066}, 4585 {0xbb, 0x00, 0x055c},
4906 {0xaa, 0x09, 0x02b2}, 4586 {0xbb, 0x01, 0x09aa},
4907 {0xaa, 0x10, 0x0002}, 4587 {0xbb, 0x00, 0x1001},
4588 {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
4589 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4590 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4591 {0xa0, 0xc4, ZC3XX_R192_EXPOSURELIMITLOW},
4592 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4593 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4594 {0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW},
4595 {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4596 {0xa0, 0x1a, ZC3XX_R18F_AEUNFREEZE},
4597 {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
4598 {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
4599 {0xa0, 0x5c, ZC3XX_R01D_HSYNC_0},
4600 {0xa0, 0x90, ZC3XX_R01E_HSYNC_1},
4601 {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2},
4602 {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
4603 {}
4604};
4605static const struct usb_action pb0330_50HZScale[] = {
4606 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4607 {0xbb, 0x00, 0x0566},
4608 {0xbb, 0x02, 0x09b2},
4609 {0xbb, 0x00, 0x1002},
4908 {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 4610 {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
4909 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 4611 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4910 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 4612 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
@@ -4912,124 +4614,102 @@ static const struct usb_action pb0330xx_InitialScale[] = {
4912 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 4614 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4913 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 4615 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4914 {0xa0, 0x8a, ZC3XX_R197_ANTIFLICKERLOW}, 4616 {0xa0, 0x8a, ZC3XX_R197_ANTIFLICKERLOW},
4915 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 4617 {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4916 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 4618 {0xa0, 0x1a, ZC3XX_R18F_AEUNFREEZE},
4917 {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, 4619 {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
4918 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 4620 {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
4919 {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0}, 4621 {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
4920 {0xa0, 0xf0, ZC3XX_R01E_HSYNC_1}, 4622 {0xa0, 0xf0, ZC3XX_R01E_HSYNC_1},
4921 {0xa0, 0xf8, ZC3XX_R01F_HSYNC_2}, 4623 {0xa0, 0xf8, ZC3XX_R01F_HSYNC_2},
4922 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 4624 {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
4923 {0xa0, 0x09, 0x01ad},
4924 {0xa0, 0x15, 0x01ae},
4925 {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE},
4926 {0xa1, 0x01, 0x0180},
4927 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4928 {0xa1, 0x01, 0x0008},
4929 {0xa1, 0x01, 0x0007},
4930/* {0xa0, 0x30, 0x0007}, */
4931/* {0xa0, 0x00, 0x0007}, */
4932 {}
4933};
4934static const struct usb_action pb0330_50HZ[] = {
4935 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
4936 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,07,cc */
4937 {0xa0, 0xee, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,ee,cc */
4938 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
4939 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
4940 {0xa0, 0x46, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,46,cc */
4941 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
4942 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
4943 {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,0c,cc */
4944 {0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,26,cc */
4945 {0xa0, 0x68, ZC3XX_R01D_HSYNC_0}, /* 00,1d,68,cc */
4946 {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc */
4947 {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c8,cc */
4948 {}
4949};
4950static const struct usb_action pb0330_50HZScale[] = {
4951 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
4952 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
4953 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,07,cc */
4954 {0xa0, 0xa0, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,a0,cc */
4955 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
4956 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
4957 {0xa0, 0x7a, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,7a,cc */
4958 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
4959 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
4960 {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,0c,cc */
4961 {0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,26,cc */
4962 {0xa0, 0xe5, ZC3XX_R01D_HSYNC_0}, /* 00,1d,e5,cc */
4963 {0xa0, 0xf0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,f0,cc */
4964 {0xa0, 0xf8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,f8,cc */
4965 {} 4625 {}
4966}; 4626};
4967static const struct usb_action pb0330_60HZ[] = { 4627static const struct usb_action pb0330_60HZ[] = {
4968 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 4628 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4969 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 4629 {0xbb, 0x00, 0x0535},
4970 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,07,cc */ 4630 {0xbb, 0x01, 0x0974},
4971 {0xa0, 0xdd, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,dd,cc */ 4631 {0xbb, 0x00, 0x1001},
4972 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 4632 {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
4973 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 4633 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4974 {0xa0, 0x3d, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,3d,cc */ 4634 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4975 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 4635 {0xa0, 0xfe, ZC3XX_R192_EXPOSURELIMITLOW},
4976 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 4636 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4977 {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,0c,cc */ 4637 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4978 {0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,26,cc */ 4638 {0xa0, 0x3e, ZC3XX_R197_ANTIFLICKERLOW},
4979 {0xa0, 0x43, ZC3XX_R01D_HSYNC_0}, /* 00,1d,43,cc */ 4639 {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4980 {0xa0, 0x50, ZC3XX_R01E_HSYNC_1}, /* 00,1e,50,cc */ 4640 {0xa0, 0x1a, ZC3XX_R18F_AEUNFREEZE},
4981 {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, /* 00,1f,90,cc */ 4641 {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
4642 {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
4643 {0xa0, 0x35, ZC3XX_R01D_HSYNC_0},
4644 {0xa0, 0x50, ZC3XX_R01E_HSYNC_1},
4645 {0xa0, 0x90, ZC3XX_R01F_HSYNC_2},
4646 {0xa0, 0xd0, ZC3XX_R020_HSYNC_3},
4982 {} 4647 {}
4983}; 4648};
4984static const struct usb_action pb0330_60HZScale[] = { 4649static const struct usb_action pb0330_60HZScale[] = {
4985 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 4650 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4986 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 4651 {0xbb, 0x00, 0x0535},
4987 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,07,cc */ 4652 {0xbb, 0x02, 0x096c},
4988 {0xa0, 0xa0, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,a0,cc */ 4653 {0xbb, 0x00, 0x1002},
4989 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 4654 {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
4990 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 4655 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4991 {0xa0, 0x7a, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,7a,cc */ 4656 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4992 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 4657 {0xa0, 0xc0, ZC3XX_R192_EXPOSURELIMITLOW},
4993 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 4658 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4994 {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,0c,cc */ 4659 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4995 {0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,26,cc */ 4660 {0xa0, 0x7c, ZC3XX_R197_ANTIFLICKERLOW},
4996 {0xa0, 0x41, ZC3XX_R01D_HSYNC_0}, /* 00,1d,41,cc */ 4661 {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4997 {0xa0, 0x50, ZC3XX_R01E_HSYNC_1}, /* 00,1e,50,cc */ 4662 {0xa0, 0x1a, ZC3XX_R18F_AEUNFREEZE},
4998 {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, /* 00,1f,90,cc */ 4663 {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
4664 {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
4665 {0xa0, 0x35, ZC3XX_R01D_HSYNC_0},
4666 {0xa0, 0x50, ZC3XX_R01E_HSYNC_1},
4667 {0xa0, 0x90, ZC3XX_R01F_HSYNC_2},
4668 {0xa0, 0xd0, ZC3XX_R020_HSYNC_3},
4999 {} 4669 {}
5000}; 4670};
5001static const struct usb_action pb0330_NoFliker[] = { 4671static const struct usb_action pb0330_NoFliker[] = {
5002 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 4672 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
5003 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 4673 {0xbb, 0x00, 0x0509},
5004 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,07,cc */ 4674 {0xbb, 0x02, 0x0940},
5005 {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,f0,cc */ 4675 {0xbb, 0x00, 0x1002},
5006 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 4676 {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
5007 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 4677 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
5008 {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */ 4678 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
5009 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 4679 {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW},
5010 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 4680 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
5011 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 4681 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
5012 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 4682 {0xa0, 0x01, ZC3XX_R197_ANTIFLICKERLOW},
5013 {0xa0, 0x09, ZC3XX_R01D_HSYNC_0}, /* 00,1d,09,cc */ 4683 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
5014 {0xa0, 0x40, ZC3XX_R01E_HSYNC_1}, /* 00,1e,40,cc */ 4684 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
5015 {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, /* 00,1f,90,cc */ 4685 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
4686 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
4687 {0xa0, 0x09, ZC3XX_R01D_HSYNC_0},
4688 {0xa0, 0x40, ZC3XX_R01E_HSYNC_1},
4689 {0xa0, 0x90, ZC3XX_R01F_HSYNC_2},
4690 {0xa0, 0xe0, ZC3XX_R020_HSYNC_3},
5016 {} 4691 {}
5017}; 4692};
5018static const struct usb_action pb0330_NoFlikerScale[] = { 4693static const struct usb_action pb0330_NoFlikerScale[] = {
5019 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 4694 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
5020 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 4695 {0xbb, 0x00, 0x0535},
5021 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,07,cc */ 4696 {0xbb, 0x01, 0x0980},
5022 {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,f0,cc */ 4697 {0xbb, 0x00, 0x1001},
5023 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 4698 {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
5024 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 4699 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
5025 {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */ 4700 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
5026 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 4701 {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW},
5027 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 4702 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
5028 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 4703 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
5029 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 4704 {0xa0, 0x01, ZC3XX_R197_ANTIFLICKERLOW},
5030 {0xa0, 0x09, ZC3XX_R01D_HSYNC_0}, /* 00,1d,09,cc */ 4705 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
5031 {0xa0, 0x40, ZC3XX_R01E_HSYNC_1}, /* 00,1e,40,cc */ 4706 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
5032 {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, /* 00,1f,90,cc */ 4707 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
4708 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
4709 {0xa0, 0x35, ZC3XX_R01D_HSYNC_0},
4710 {0xa0, 0x60, ZC3XX_R01E_HSYNC_1},
4711 {0xa0, 0x90, ZC3XX_R01F_HSYNC_2},
4712 {0xa0, 0xe0, ZC3XX_R020_HSYNC_3},
5033 {} 4713 {}
5034}; 4714};
5035 4715
@@ -5655,7 +5335,7 @@ static const struct usb_action tas5130CK_InitialScale[] = {
5655 {} 5335 {}
5656}; 5336};
5657 5337
5658static const struct usb_action tas5130cxx_Initial[] = { 5338static const struct usb_action tas5130cxx_InitialScale[] = { /* 320x240 */
5659 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 5339 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
5660 {0xa0, 0x50, ZC3XX_R002_CLOCKSELECT}, 5340 {0xa0, 0x50, ZC3XX_R002_CLOCKSELECT},
5661 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 5341 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
@@ -5684,74 +5364,19 @@ static const struct usb_action tas5130cxx_Initial[] = {
5684 {0xa0, 0xf7, ZC3XX_R101_SENSORCORRECTION}, 5364 {0xa0, 0xf7, ZC3XX_R101_SENSORCORRECTION},
5685 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 5365 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
5686 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 5366 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
5687 {0xa0, 0x68, ZC3XX_R18D_YTARGET}, 5367 {0xa0, 0x95, ZC3XX_R18D_YTARGET},
5688 {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 5368 {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN},
5689 {0xa0, 0x00, 0x01ad}, 5369 {0xa0, 0x00, 0x01ad},
5690 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 5370 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
5691 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 5371 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
5692 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 5372 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
5693 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 5373 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
5694 {0xa1, 0x01, 0x0002},
5695 {0xa1, 0x01, 0x0008},
5696 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */
5697 {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */
5698 {0xa1, 0x01, 0x01c8},
5699 {0xa1, 0x01, 0x01c9},
5700 {0xa1, 0x01, 0x01ca},
5701 {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */
5702
5703 {0xa0, 0x68, ZC3XX_R10A_RGB00}, /* matrix */
5704 {0xa0, 0xec, ZC3XX_R10B_RGB01},
5705 {0xa0, 0xec, ZC3XX_R10C_RGB02},
5706 {0xa0, 0xec, ZC3XX_R10D_RGB10},
5707 {0xa0, 0x68, ZC3XX_R10E_RGB11},
5708 {0xa0, 0xec, ZC3XX_R10F_RGB12},
5709 {0xa0, 0xec, ZC3XX_R110_RGB20},
5710 {0xa0, 0xec, ZC3XX_R111_RGB21},
5711 {0xa0, 0x68, ZC3XX_R112_RGB22},
5712
5713 {0xa1, 0x01, 0x018d},
5714 {0xa0, 0x90, ZC3XX_R18D_YTARGET}, /* 90 */
5715 {0xa1, 0x01, 0x0180},
5716 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
5717 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
5718
5719 {0xaa, 0xa3, 0x0001},
5720 {0xaa, 0xa4, 0x0077},
5721 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH},
5722 {0xa0, 0x77, ZC3XX_R0A4_EXPOSURETIMELOW},
5723
5724 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 00 */
5725 {0xa0, 0x03, ZC3XX_R191_EXPOSURELIMITMID}, /* 03 */
5726 {0xa0, 0xe8, ZC3XX_R192_EXPOSURELIMITLOW}, /* e8 */
5727 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 0 */
5728 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 0 */
5729 {0xa0, 0x7d, ZC3XX_R197_ANTIFLICKERLOW}, /* 7d */
5730
5731 {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
5732 {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
5733 {0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 08 */
5734 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 24 */
5735 {0xa0, 0xf0, ZC3XX_R01D_HSYNC_0},
5736 {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1},
5737 {0xa0, 0xf8, ZC3XX_R01F_HSYNC_2},
5738 {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
5739 {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH},
5740 {0xa0, 0xc0, ZC3XX_R0A0_MAXXLOW},
5741 {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, /* 50 */
5742 {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE},
5743 {0xa1, 0x01, 0x0180},
5744 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
5745 {} 5374 {}
5746}; 5375};
5747static const struct usb_action tas5130cxx_InitialScale[] = { 5376static const struct usb_action tas5130cxx_Initial[] = { /* 640x480 */
5748/*?? {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, */
5749 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 5377 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
5750 {0xa0, 0x40, ZC3XX_R002_CLOCKSELECT}, 5378 {0xa0, 0x40, ZC3XX_R002_CLOCKSELECT},
5751
5752 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 5379 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
5753 {0xa1, 0x01, 0x0008},
5754
5755 {0xa0, 0x02, ZC3XX_R010_CMOSSENSORSELECT}, 5380 {0xa0, 0x02, ZC3XX_R010_CMOSSENSORSELECT},
5756 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 5381 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
5757 {0xa0, 0x00, ZC3XX_R001_SYSTEMOPERATING}, 5382 {0xa0, 0x00, ZC3XX_R001_SYSTEMOPERATING},
@@ -5775,63 +5400,13 @@ static const struct usb_action tas5130cxx_InitialScale[] = {
5775 {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 5400 {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},
5776 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 5401 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
5777 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 5402 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
5778 {0xa0, 0x68, ZC3XX_R18D_YTARGET}, 5403 {0xa0, 0x95, ZC3XX_R18D_YTARGET},
5779 {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 5404 {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN},
5780 {0xa0, 0x00, 0x01ad}, 5405 {0xa0, 0x00, 0x01ad},
5781 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 5406 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
5782 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 5407 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
5783 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 5408 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
5784 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 5409 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
5785 {0xa1, 0x01, 0x0002},
5786 {0xa1, 0x01, 0x0008},
5787
5788 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
5789 {0xa1, 0x01, 0x0008}, /* clock ? */
5790 {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */
5791 {0xa1, 0x01, 0x01c8},
5792 {0xa1, 0x01, 0x01c9},
5793 {0xa1, 0x01, 0x01ca},
5794 {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */
5795
5796 {0xa0, 0x68, ZC3XX_R10A_RGB00}, /* matrix */
5797 {0xa0, 0xec, ZC3XX_R10B_RGB01},
5798 {0xa0, 0xec, ZC3XX_R10C_RGB02},
5799 {0xa0, 0xec, ZC3XX_R10D_RGB10},
5800 {0xa0, 0x68, ZC3XX_R10E_RGB11},
5801 {0xa0, 0xec, ZC3XX_R10F_RGB12},
5802 {0xa0, 0xec, ZC3XX_R110_RGB20},
5803 {0xa0, 0xec, ZC3XX_R111_RGB21},
5804 {0xa0, 0x68, ZC3XX_R112_RGB22},
5805
5806 {0xa1, 0x01, 0x018d},
5807 {0xa0, 0x90, ZC3XX_R18D_YTARGET},
5808 {0xa1, 0x01, 0x0180},
5809 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
5810 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
5811 {0xaa, 0xa3, 0x0001},
5812 {0xaa, 0xa4, 0x0063},
5813 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH},
5814 {0xa0, 0x63, ZC3XX_R0A4_EXPOSURETIMELOW},
5815 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
5816 {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID},
5817 {0xa0, 0x38, ZC3XX_R192_EXPOSURELIMITLOW},
5818 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
5819 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
5820 {0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW},
5821 {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
5822 {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
5823 {0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF},
5824 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
5825 {0xa0, 0xd3, ZC3XX_R01D_HSYNC_0},
5826 {0xa0, 0xda, ZC3XX_R01E_HSYNC_1},
5827 {0xa0, 0xea, ZC3XX_R01F_HSYNC_2},
5828 {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
5829 {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH},
5830 {0xa0, 0x4c, ZC3XX_R0A0_MAXXLOW},
5831 {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
5832 {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE},
5833 {0xa1, 0x01, 0x0180},
5834 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
5835 {} 5410 {}
5836}; 5411};
5837static const struct usb_action tas5130cxx_50HZ[] = { 5412static const struct usb_action tas5130cxx_50HZ[] = {
@@ -5841,20 +5416,22 @@ static const struct usb_action tas5130cxx_50HZ[] = {
5841 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */ 5416 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */
5842 {0xa0, 0x63, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,63,cc */ 5417 {0xa0, 0x63, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,63,cc */
5843 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 5418 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
5844 {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,02,cc */ 5419 {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID},
5845 {0xa0, 0x38, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,38,cc */ 5420 {0xa0, 0xfe, ZC3XX_R192_EXPOSURELIMITLOW},
5846 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 5421 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
5847 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 5422 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
5848 {0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,47,cc */ 5423 {0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,47,cc */
5849 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 5424 {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
5850 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 5425 {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
5851 {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,0c,cc */ 5426 {0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF},
5852 {0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,26,cc */ 5427 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
5853 {0xa0, 0xd3, ZC3XX_R01D_HSYNC_0}, /* 00,1d,d3,cc */ 5428 {0xa0, 0xd3, ZC3XX_R01D_HSYNC_0}, /* 00,1d,d3,cc */
5854 {0xa0, 0xda, ZC3XX_R01E_HSYNC_1}, /* 00,1e,da,cc */ 5429 {0xa0, 0xda, ZC3XX_R01E_HSYNC_1}, /* 00,1e,da,cc */
5855 {0xa0, 0xea, ZC3XX_R01F_HSYNC_2}, /* 00,1f,ea,cc */ 5430 {0xa0, 0xea, ZC3XX_R01F_HSYNC_2}, /* 00,1f,ea,cc */
5856 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 5431 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
5857 {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */ 5432 {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */
5433 {0xa0, 0x4c, ZC3XX_R0A0_MAXXLOW},
5434 {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
5858 {} 5435 {}
5859}; 5436};
5860static const struct usb_action tas5130cxx_50HZScale[] = { 5437static const struct usb_action tas5130cxx_50HZScale[] = {
@@ -5864,20 +5441,22 @@ static const struct usb_action tas5130cxx_50HZScale[] = {
5864 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */ 5441 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */
5865 {0xa0, 0x77, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,77,cc */ 5442 {0xa0, 0x77, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,77,cc */
5866 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 5443 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
5867 {0xa0, 0x03, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,03,cc */ 5444 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
5868 {0xa0, 0xe8, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,e8,cc */ 5445 {0xa0, 0xd0, ZC3XX_R192_EXPOSURELIMITLOW},
5869 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 5446 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
5870 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 5447 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
5871 {0xa0, 0x7d, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,7d,cc */ 5448 {0xa0, 0x7d, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,7d,cc */
5872 {0xa0, 0x14, ZC3XX_R18C_AEFREEZE}, /* 01,8c,14,cc */ 5449 {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
5873 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 5450 {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
5874 {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,0c,cc */ 5451 {0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF},
5875 {0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,26,cc */ 5452 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
5876 {0xa0, 0xf0, ZC3XX_R01D_HSYNC_0}, /* 00,1d,f0,cc */ 5453 {0xa0, 0xf0, ZC3XX_R01D_HSYNC_0}, /* 00,1d,f0,cc */
5877 {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1}, /* 00,1e,f4,cc */ 5454 {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1}, /* 00,1e,f4,cc */
5878 {0xa0, 0xf8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,f8,cc */ 5455 {0xa0, 0xf8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,f8,cc */
5879 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 5456 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
5880 {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */ 5457 {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */
5458 {0xa0, 0xc0, ZC3XX_R0A0_MAXXLOW},
5459 {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
5881 {} 5460 {}
5882}; 5461};
5883static const struct usb_action tas5130cxx_60HZ[] = { 5462static const struct usb_action tas5130cxx_60HZ[] = {
@@ -5887,20 +5466,22 @@ static const struct usb_action tas5130cxx_60HZ[] = {
5887 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */ 5466 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */
5888 {0xa0, 0x36, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,36,cc */ 5467 {0xa0, 0x36, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,36,cc */
5889 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 5468 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
5890 {0xa0, 0x01, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,01,cc */ 5469 {0xa0, 0x05, ZC3XX_R191_EXPOSURELIMITMID},
5891 {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,f0,cc */ 5470 {0xa0, 0x54, ZC3XX_R192_EXPOSURELIMITLOW},
5892 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 5471 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
5893 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 5472 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
5894 {0xa0, 0x3e, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,3e,cc */ 5473 {0xa0, 0x3e, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,3e,cc */
5895 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 5474 {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
5896 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 5475 {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
5897 {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,0c,cc */ 5476 {0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF},
5898 {0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,26,cc */ 5477 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
5899 {0xa0, 0xca, ZC3XX_R01D_HSYNC_0}, /* 00,1d,ca,cc */ 5478 {0xa0, 0xca, ZC3XX_R01D_HSYNC_0}, /* 00,1d,ca,cc */
5900 {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d0,cc */ 5479 {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d0,cc */
5901 {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */ 5480 {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */
5902 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 5481 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
5903 {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */ 5482 {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */
5483 {0xa0, 0x28, ZC3XX_R0A0_MAXXLOW},
5484 {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
5904 {} 5485 {}
5905}; 5486};
5906static const struct usb_action tas5130cxx_60HZScale[] = { 5487static const struct usb_action tas5130cxx_60HZScale[] = {
@@ -5910,20 +5491,22 @@ static const struct usb_action tas5130cxx_60HZScale[] = {
5910 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */ 5491 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */
5911 {0xa0, 0x77, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,77,cc */ 5492 {0xa0, 0x77, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,77,cc */
5912 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 5493 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
5913 {0xa0, 0x03, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,03,cc */ 5494 {0xa0, 0x09, ZC3XX_R191_EXPOSURELIMITMID},
5914 {0xa0, 0xe8, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,e8,cc */ 5495 {0xa0, 0x47, ZC3XX_R192_EXPOSURELIMITLOW},
5915 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 5496 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
5916 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 5497 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
5917 {0xa0, 0x7d, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,7d,cc */ 5498 {0xa0, 0x7d, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,7d,cc */
5918 {0xa0, 0x14, ZC3XX_R18C_AEFREEZE}, /* 01,8c,14,cc */ 5499 {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
5919 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 5500 {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
5920 {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,0c,cc */ 5501 {0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF},
5921 {0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,26,cc */ 5502 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
5922 {0xa0, 0xc8, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c8,cc */ 5503 {0xa0, 0xc8, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c8,cc */
5923 {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d0,cc */ 5504 {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d0,cc */
5924 {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */ 5505 {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */
5925 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 5506 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
5926 {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */ 5507 {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */
5508 {0xa0, 0x20, ZC3XX_R0A0_MAXXLOW},
5509 {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
5927 {} 5510 {}
5928}; 5511};
5929static const struct usb_action tas5130cxx_NoFliker[] = { 5512static const struct usb_action tas5130cxx_NoFliker[] = {
@@ -5933,13 +5516,13 @@ static const struct usb_action tas5130cxx_NoFliker[] = {
5933 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */ 5516 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */
5934 {0xa0, 0x40, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,40,cc */ 5517 {0xa0, 0x40, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,40,cc */
5935 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 5518 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
5936 {0xa0, 0x01, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,01,cc */ 5519 {0xa0, 0x05, ZC3XX_R191_EXPOSURELIMITMID},
5937 {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,f0,cc */ 5520 {0xa0, 0xa0, ZC3XX_R192_EXPOSURELIMITLOW},
5938 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 5521 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
5939 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 5522 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
5940 {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */ 5523 {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW},
5941 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 5524 {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
5942 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 5525 {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
5943 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 5526 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */
5944 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 5527 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */
5945 {0xa0, 0xbc, ZC3XX_R01D_HSYNC_0}, /* 00,1d,bc,cc */ 5528 {0xa0, 0xbc, ZC3XX_R01D_HSYNC_0}, /* 00,1d,bc,cc */
@@ -5947,6 +5530,8 @@ static const struct usb_action tas5130cxx_NoFliker[] = {
5947 {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */ 5530 {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */
5948 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 5531 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
5949 {0xa0, 0x02, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,02,cc */ 5532 {0xa0, 0x02, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,02,cc */
5533 {0xa0, 0xf0, ZC3XX_R0A0_MAXXLOW},
5534 {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
5950 {} 5535 {}
5951}; 5536};
5952 5537
@@ -5957,13 +5542,13 @@ static const struct usb_action tas5130cxx_NoFlikerScale[] = {
5957 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */ 5542 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */
5958 {0xa0, 0x90, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,90,cc */ 5543 {0xa0, 0x90, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,90,cc */
5959 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 5544 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
5960 {0xa0, 0x03, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,03,cc */ 5545 {0xa0, 0x0a, ZC3XX_R191_EXPOSURELIMITMID},
5961 {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,f0,cc */ 5546 {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW},
5962 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 5547 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
5963 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 5548 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
5964 {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */ 5549 {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW},
5965 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 5550 {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
5966 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 5551 {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
5967 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 5552 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */
5968 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 5553 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */
5969 {0xa0, 0xbc, ZC3XX_R01D_HSYNC_0}, /* 00,1d,bc,cc */ 5554 {0xa0, 0xbc, ZC3XX_R01D_HSYNC_0}, /* 00,1d,bc,cc */
@@ -5971,6 +5556,8 @@ static const struct usb_action tas5130cxx_NoFlikerScale[] = {
5971 {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */ 5556 {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */
5972 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 5557 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
5973 {0xa0, 0x02, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,02,cc */ 5558 {0xa0, 0x02, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,02,cc */
5559 {0xa0, 0xf0, ZC3XX_R0A0_MAXXLOW},
5560 {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
5974 {} 5561 {}
5975}; 5562};
5976 5563
@@ -6303,8 +5890,10 @@ static __u16 i2c_read(struct gspca_dev *gspca_dev,
6303 5890
6304 reg_w_i(gspca_dev->dev, reg, 0x0092); 5891 reg_w_i(gspca_dev->dev, reg, 0x0092);
6305 reg_w_i(gspca_dev->dev, 0x02, 0x0090); /* <- read command */ 5892 reg_w_i(gspca_dev->dev, 0x02, 0x0090); /* <- read command */
6306 msleep(25); 5893 msleep(20);
6307 retbyte = reg_r_i(gspca_dev, 0x0091); /* read status */ 5894 retbyte = reg_r_i(gspca_dev, 0x0091); /* read status */
5895 if (retbyte != 0x00)
5896 err("i2c_r status error %02x", retbyte);
6308 retval = reg_r_i(gspca_dev, 0x0095); /* read Lowbyte */ 5897 retval = reg_r_i(gspca_dev, 0x0095); /* read Lowbyte */
6309 retval |= reg_r_i(gspca_dev, 0x0096) << 8; /* read Hightbyte */ 5898 retval |= reg_r_i(gspca_dev, 0x0096) << 8; /* read Hightbyte */
6310 PDEBUG(D_USBI, "i2c r [%02x] -> %04x (%02x)", 5899 PDEBUG(D_USBI, "i2c r [%02x] -> %04x (%02x)",
@@ -6323,8 +5912,10 @@ static __u8 i2c_write(struct gspca_dev *gspca_dev,
6323 reg_w_i(gspca_dev->dev, valL, 0x93); 5912 reg_w_i(gspca_dev->dev, valL, 0x93);
6324 reg_w_i(gspca_dev->dev, valH, 0x94); 5913 reg_w_i(gspca_dev->dev, valH, 0x94);
6325 reg_w_i(gspca_dev->dev, 0x01, 0x90); /* <- write command */ 5914 reg_w_i(gspca_dev->dev, 0x01, 0x90); /* <- write command */
6326 msleep(15); 5915 msleep(1);
6327 retbyte = reg_r_i(gspca_dev, 0x0091); /* read status */ 5916 retbyte = reg_r_i(gspca_dev, 0x0091); /* read status */
5917 if (retbyte != 0x00)
5918 err("i2c_w status error %02x", retbyte);
6328 PDEBUG(D_USBO, "i2c w [%02x] = %02x%02x (%02x)", 5919 PDEBUG(D_USBO, "i2c w [%02x] = %02x%02x (%02x)",
6329 reg, valH, valL, retbyte); 5920 reg, valH, valL, retbyte);
6330 return retbyte; 5921 return retbyte;
@@ -6359,7 +5950,7 @@ static void usb_exchange(struct gspca_dev *gspca_dev,
6359 break; 5950 break;
6360 } 5951 }
6361 action++; 5952 action++;
6362/* msleep(1); */ 5953 msleep(1);
6363 } 5954 }
6364} 5955}
6365 5956
@@ -6380,11 +5971,13 @@ static void setmatrix(struct gspca_dev *gspca_dev)
6380 {0x4c, 0xf5, 0xff, 0xf9, 0x51, 0xf5, 0xfb, 0xed, 0x5f}; 5971 {0x4c, 0xf5, 0xff, 0xf9, 0x51, 0xf5, 0xfb, 0xed, 0x5f};
6381 static const __u8 po2030_matrix[9] = 5972 static const __u8 po2030_matrix[9] =
6382 {0x60, 0xf0, 0xf0, 0xf0, 0x60, 0xf0, 0xf0, 0xf0, 0x60}; 5973 {0x60, 0xf0, 0xf0, 0xf0, 0x60, 0xf0, 0xf0, 0xf0, 0x60};
5974 static const u8 tas5130c_matrix[9] =
5975 {0x68, 0xec, 0xec, 0xec, 0x68, 0xec, 0xec, 0xec, 0x68};
6383 static const __u8 vf0250_matrix[9] = 5976 static const __u8 vf0250_matrix[9] =
6384 {0x7b, 0xea, 0xea, 0xea, 0x7b, 0xea, 0xea, 0xea, 0x7b}; 5977 {0x7b, 0xea, 0xea, 0xea, 0x7b, 0xea, 0xea, 0xea, 0x7b};
6385 static const __u8 *matrix_tb[SENSOR_MAX] = { 5978 static const __u8 *matrix_tb[SENSOR_MAX] = {
6386 adcm2700_matrix, /* SENSOR_ADCM2700 0 */ 5979 adcm2700_matrix, /* SENSOR_ADCM2700 0 */
6387 NULL, /* SENSOR_CS2102 1 */ 5980 ov7620_matrix, /* SENSOR_CS2102 1 */
6388 NULL, /* SENSOR_CS2102K 2 */ 5981 NULL, /* SENSOR_CS2102K 2 */
6389 gc0305_matrix, /* SENSOR_GC0305 3 */ 5982 gc0305_matrix, /* SENSOR_GC0305 3 */
6390 NULL, /* SENSOR_HDCS2020b 4 */ 5983 NULL, /* SENSOR_HDCS2020b 4 */
@@ -6392,15 +5985,16 @@ static void setmatrix(struct gspca_dev *gspca_dev)
6392 NULL, /* SENSOR_HV7131C 6 */ 5985 NULL, /* SENSOR_HV7131C 6 */
6393 NULL, /* SENSOR_ICM105A 7 */ 5986 NULL, /* SENSOR_ICM105A 7 */
6394 NULL, /* SENSOR_MC501CB 8 */ 5987 NULL, /* SENSOR_MC501CB 8 */
6395 ov7620_matrix, /* SENSOR_OV7620 9 */ 5988 gc0305_matrix, /* SENSOR_MI0360SOC 9 */
6396 NULL, /* SENSOR_OV7630C 10 */ 5989 ov7620_matrix, /* SENSOR_OV7620 10 */
6397 NULL, /* SENSOR_PAS106 11 */ 5990 NULL, /* SENSOR_OV7630C 11 */
6398 pas202b_matrix, /* SENSOR_PAS202B 12 */ 5991 NULL, /* SENSOR_PAS106 12 */
6399 NULL, /* SENSOR_PB0330 13 */ 5992 pas202b_matrix, /* SENSOR_PAS202B 13 */
6400 po2030_matrix, /* SENSOR_PO2030 14 */ 5993 gc0305_matrix, /* SENSOR_PB0330 14 */
6401 NULL, /* SENSOR_TAS5130CK 15 */ 5994 po2030_matrix, /* SENSOR_PO2030 15 */
6402 NULL, /* SENSOR_TAS5130CXX 16 */ 5995 NULL, /* SENSOR_TAS5130CK 16 */
6403 vf0250_matrix, /* SENSOR_TAS5130C_VF0250 17 */ 5996 tas5130c_matrix, /* SENSOR_TAS5130CXX 17 */
5997 vf0250_matrix, /* SENSOR_TAS5130C_VF0250 18 */
6404 }; 5998 };
6405 5999
6406 matrix = matrix_tb[sd->sensor]; 6000 matrix = matrix_tb[sd->sensor];
@@ -6640,39 +6234,43 @@ static int setlightfreq(struct gspca_dev *gspca_dev)
6640 {MC501CB_NoFliker, MC501CB_NoFlikerScale, 6234 {MC501CB_NoFliker, MC501CB_NoFlikerScale,
6641 MC501CB_50HZ, MC501CB_50HZScale, 6235 MC501CB_50HZ, MC501CB_50HZScale,
6642 MC501CB_60HZ, MC501CB_60HZScale}, 6236 MC501CB_60HZ, MC501CB_60HZScale},
6643/* SENSOR_OV7620 9 */ 6237/* SENSOR_MI0360SOC 9 */
6238 {mi360soc_AENoFlikerScale, mi360soc_AENoFliker,
6239 mi360soc_AE50HZScale, mi360soc_AE50HZ,
6240 mi360soc_AE60HZScale, mi360soc_AE60HZ},
6241/* SENSOR_OV7620 10 */
6644 {OV7620_NoFliker, OV7620_NoFliker, 6242 {OV7620_NoFliker, OV7620_NoFliker,
6645 OV7620_50HZ, OV7620_50HZ, 6243 OV7620_50HZ, OV7620_50HZ,
6646 OV7620_60HZ, OV7620_60HZ}, 6244 OV7620_60HZ, OV7620_60HZ},
6647/* SENSOR_OV7630C 10 */ 6245/* SENSOR_OV7630C 11 */
6648 {NULL, NULL, 6246 {NULL, NULL,
6649 NULL, NULL, 6247 NULL, NULL,
6650 NULL, NULL}, 6248 NULL, NULL},
6651/* SENSOR_PAS106 11 */ 6249/* SENSOR_PAS106 12 */
6652 {pas106b_NoFliker, pas106b_NoFliker, 6250 {pas106b_NoFliker, pas106b_NoFliker,
6653 pas106b_50HZ, pas106b_50HZ, 6251 pas106b_50HZ, pas106b_50HZ,
6654 pas106b_60HZ, pas106b_60HZ}, 6252 pas106b_60HZ, pas106b_60HZ},
6655/* SENSOR_PAS202B 12 */ 6253/* SENSOR_PAS202B 13 */
6656 {pas202b_NoFlikerScale, pas202b_NoFliker, 6254 {pas202b_NoFlikerScale, pas202b_NoFliker,
6657 pas202b_50HZScale, pas202b_50HZ, 6255 pas202b_50HZScale, pas202b_50HZ,
6658 pas202b_60HZScale, pas202b_60HZ}, 6256 pas202b_60HZScale, pas202b_60HZ},
6659/* SENSOR_PB0330 13 */ 6257/* SENSOR_PB0330 14 */
6660 {pb0330_NoFliker, pb0330_NoFlikerScale, 6258 {pb0330_NoFlikerScale, pb0330_NoFliker,
6661 pb0330_50HZ, pb0330_50HZScale, 6259 pb0330_50HZScale, pb0330_50HZ,
6662 pb0330_60HZ, pb0330_60HZScale}, 6260 pb0330_60HZScale, pb0330_60HZ},
6663/* SENSOR_PO2030 14 */ 6261/* SENSOR_PO2030 15 */
6664 {PO2030_NoFliker, PO2030_NoFliker, 6262 {PO2030_NoFliker, PO2030_NoFliker,
6665 PO2030_50HZ, PO2030_50HZ, 6263 PO2030_50HZ, PO2030_50HZ,
6666 PO2030_60HZ, PO2030_60HZ}, 6264 PO2030_60HZ, PO2030_60HZ},
6667/* SENSOR_TAS5130CK 15 */ 6265/* SENSOR_TAS5130CK 16 */
6668 {tas5130cxx_NoFliker, tas5130cxx_NoFlikerScale, 6266 {tas5130cxx_NoFlikerScale, tas5130cxx_NoFliker,
6669 tas5130cxx_50HZ, tas5130cxx_50HZScale, 6267 tas5130cxx_50HZScale, tas5130cxx_50HZ,
6670 tas5130cxx_60HZ, tas5130cxx_60HZScale}, 6268 tas5130cxx_60HZScale, tas5130cxx_60HZ},
6671/* SENSOR_TAS5130CXX 16 */ 6269/* SENSOR_TAS5130CXX 17 */
6672 {tas5130cxx_NoFliker, tas5130cxx_NoFlikerScale, 6270 {tas5130cxx_NoFlikerScale, tas5130cxx_NoFliker,
6673 tas5130cxx_50HZ, tas5130cxx_50HZScale, 6271 tas5130cxx_50HZScale, tas5130cxx_50HZ,
6674 tas5130cxx_60HZ, tas5130cxx_60HZScale}, 6272 tas5130cxx_60HZScale, tas5130cxx_60HZ},
6675/* SENSOR_TAS5130C_VF0250 17 */ 6273/* SENSOR_TAS5130C_VF0250 18 */
6676 {tas5130c_vf0250_NoFliker, tas5130c_vf0250_NoFlikerScale, 6274 {tas5130c_vf0250_NoFliker, tas5130c_vf0250_NoFlikerScale,
6677 tas5130c_vf0250_50HZ, tas5130c_vf0250_50HZScale, 6275 tas5130c_vf0250_50HZ, tas5130c_vf0250_50HZScale,
6678 tas5130c_vf0250_60HZ, tas5130c_vf0250_60HZScale}, 6276 tas5130c_vf0250_60HZ, tas5130c_vf0250_60HZScale},
@@ -6729,6 +6327,7 @@ static void send_unknown(struct usb_device *dev, int sensor)
6729 case SENSOR_ADCM2700: 6327 case SENSOR_ADCM2700:
6730 case SENSOR_GC0305: 6328 case SENSOR_GC0305:
6731 case SENSOR_OV7620: 6329 case SENSOR_OV7620:
6330 case SENSOR_MI0360SOC:
6732 case SENSOR_PB0330: 6331 case SENSOR_PB0330:
6733 case SENSOR_PO2030: 6332 case SENSOR_PO2030:
6734 reg_w(dev, 0x0d, 0x003a); 6333 reg_w(dev, 0x0d, 0x003a);
@@ -6820,7 +6419,7 @@ static int vga_2wr_probe(struct gspca_dev *gspca_dev)
6820 start_2wr_probe(dev, 0x0e); /* PAS202BCB */ 6419 start_2wr_probe(dev, 0x0e); /* PAS202BCB */
6821 reg_w(dev, 0x08, 0x008d); 6420 reg_w(dev, 0x08, 0x008d);
6822 i2c_write(gspca_dev, 0x03, 0xaa, 0x00); 6421 i2c_write(gspca_dev, 0x03, 0xaa, 0x00);
6823 msleep(500); 6422 msleep(50);
6824 retword = i2c_read(gspca_dev, 0x03); 6423 retword = i2c_read(gspca_dev, 0x03);
6825 if (retword != 0) 6424 if (retword != 0)
6826 return 0x0e; /* PAS202BCB */ 6425 return 0x0e; /* PAS202BCB */
@@ -6863,7 +6462,8 @@ struct sensor_by_chipset_revision {
6863 __u8 internal_sensor_id; 6462 __u8 internal_sensor_id;
6864}; 6463};
6865static const struct sensor_by_chipset_revision chipset_revision_sensor[] = { 6464static const struct sensor_by_chipset_revision chipset_revision_sensor[] = {
6866 {0xc001, 0x13}, /* MI0360 */ 6465 {0xc000, 0x12}, /* TAS5130C */
6466 {0xc001, 0x13}, /* MI0360SOC */
6867 {0xe001, 0x13}, 6467 {0xe001, 0x13},
6868 {0x8001, 0x13}, 6468 {0x8001, 0x13},
6869 {0x8000, 0x14}, /* CS2102K */ 6469 {0x8000, 0x14}, /* CS2102K */
@@ -6963,7 +6563,6 @@ static int vga_3wr_probe(struct gspca_dev *gspca_dev)
6963 reg_w(dev, 0x01, 0x0001); 6563 reg_w(dev, 0x01, 0x0001);
6964 reg_w(dev, 0xee, 0x008b); 6564 reg_w(dev, 0xee, 0x008b);
6965 reg_w(dev, 0x03, 0x0012); 6565 reg_w(dev, 0x03, 0x0012);
6966/* msleep(150); */
6967 reg_w(dev, 0x01, 0x0012); 6566 reg_w(dev, 0x01, 0x0012);
6968 reg_w(dev, 0x05, 0x0012); 6567 reg_w(dev, 0x05, 0x0012);
6969 retword = i2c_read(gspca_dev, 0x00) << 8; /* ID 0 */ 6568 retword = i2c_read(gspca_dev, 0x00) << 8; /* ID 0 */
@@ -7025,7 +6624,7 @@ static int sd_config(struct gspca_dev *gspca_dev,
7025 int vga = 1; /* 1: vga, 0: sif */ 6624 int vga = 1; /* 1: vga, 0: sif */
7026 static const __u8 gamma[SENSOR_MAX] = { 6625 static const __u8 gamma[SENSOR_MAX] = {
7027 4, /* SENSOR_ADCM2700 0 */ 6626 4, /* SENSOR_ADCM2700 0 */
7028 5, /* SENSOR_CS2102 1 */ 6627 4, /* SENSOR_CS2102 1 */
7029 5, /* SENSOR_CS2102K 2 */ 6628 5, /* SENSOR_CS2102K 2 */
7030 4, /* SENSOR_GC0305 3 */ 6629 4, /* SENSOR_GC0305 3 */
7031 4, /* SENSOR_HDCS2020b 4 */ 6630 4, /* SENSOR_HDCS2020b 4 */
@@ -7033,15 +6632,16 @@ static int sd_config(struct gspca_dev *gspca_dev,
7033 4, /* SENSOR_HV7131C 6 */ 6632 4, /* SENSOR_HV7131C 6 */
7034 4, /* SENSOR_ICM105A 7 */ 6633 4, /* SENSOR_ICM105A 7 */
7035 4, /* SENSOR_MC501CB 8 */ 6634 4, /* SENSOR_MC501CB 8 */
7036 3, /* SENSOR_OV7620 9 */ 6635 4, /* SENSOR_MI0360SOC 9 */
7037 4, /* SENSOR_OV7630C 10 */ 6636 3, /* SENSOR_OV7620 10 */
7038 4, /* SENSOR_PAS106 11 */ 6637 4, /* SENSOR_OV7630C 11 */
7039 4, /* SENSOR_PAS202B 12 */ 6638 4, /* SENSOR_PAS106 12 */
7040 4, /* SENSOR_PB0330 13 */ 6639 4, /* SENSOR_PAS202B 13 */
7041 4, /* SENSOR_PO2030 14 */ 6640 4, /* SENSOR_PB0330 14 */
7042 4, /* SENSOR_TAS5130CK 15 */ 6641 4, /* SENSOR_PO2030 15 */
7043 4, /* SENSOR_TAS5130CXX 16 */ 6642 4, /* SENSOR_TAS5130CK 16 */
7044 3, /* SENSOR_TAS5130C_VF0250 17 */ 6643 3, /* SENSOR_TAS5130CXX 17 */
6644 3, /* SENSOR_TAS5130C_VF0250 18 */
7045 }; 6645 };
7046 6646
7047 /* define some sensors from the vendor/product */ 6647 /* define some sensors from the vendor/product */
@@ -7103,7 +6703,7 @@ static int sd_config(struct gspca_dev *gspca_dev,
7103 break; 6703 break;
7104 case 0x10: 6704 case 0x10:
7105 case 0x12: 6705 case 0x12:
7106 PDEBUG(D_PROBE, "Find Sensor TAS5130"); 6706 PDEBUG(D_PROBE, "Find Sensor TAS5130C");
7107 sd->sensor = SENSOR_TAS5130CXX; 6707 sd->sensor = SENSOR_TAS5130CXX;
7108 break; 6708 break;
7109 case 0x11: 6709 case 0x11:
@@ -7112,9 +6712,9 @@ static int sd_config(struct gspca_dev *gspca_dev,
7112 break; 6712 break;
7113 case 0x13: 6713 case 0x13:
7114 PDEBUG(D_PROBE, 6714 PDEBUG(D_PROBE,
7115 "Find Sensor MI0360. Chip revision %x", 6715 "Find Sensor MI0360SOC. Chip revision %x",
7116 sd->chip_revision); 6716 sd->chip_revision);
7117 sd->sensor = SENSOR_PB0330; 6717 sd->sensor = SENSOR_MI0360SOC;
7118 break; 6718 break;
7119 case 0x14: 6719 case 0x14:
7120 PDEBUG(D_PROBE, 6720 PDEBUG(D_PROBE,
@@ -7228,17 +6828,17 @@ static int sd_start(struct gspca_dev *gspca_dev)
7228 {hv7131cxx_InitialScale, hv7131cxx_Initial}, /* 6 */ 6828 {hv7131cxx_InitialScale, hv7131cxx_Initial}, /* 6 */
7229 {icm105axx_InitialScale, icm105axx_Initial}, /* 7 */ 6829 {icm105axx_InitialScale, icm105axx_Initial}, /* 7 */
7230 {MC501CB_InitialScale, MC501CB_Initial}, /* 8 */ 6830 {MC501CB_InitialScale, MC501CB_Initial}, /* 8 */
7231 {OV7620_mode0, OV7620_mode1}, /* 9 */ 6831 {mi0360soc_Initial, mi0360soc_InitialScale}, /* 9 */
7232 {ov7630c_InitialScale, ov7630c_Initial}, /* 10 */ 6832 {OV7620_mode0, OV7620_mode1}, /* 10 */
7233 {pas106b_InitialScale, pas106b_Initial}, /* 11 */ 6833 {ov7630c_InitialScale, ov7630c_Initial}, /* 11 */
7234 {pas202b_Initial, pas202b_InitialScale}, /* 12 */ 6834 {pas106b_InitialScale, pas106b_Initial}, /* 12 */
7235 {pb0330xx_InitialScale, pb0330xx_Initial}, /* 13 */ 6835 {pas202b_Initial, pas202b_InitialScale}, /* 13 */
7236/* or {pb03303x_InitialScale, pb03303x_Initial}, */ 6836 {pb0330_Initial, pb0330_InitialScale}, /* 14 */
7237 {PO2030_mode0, PO2030_mode1}, /* 14 */ 6837 {PO2030_mode0, PO2030_mode1}, /* 15 */
7238 {tas5130CK_InitialScale, tas5130CK_Initial}, /* 15 */ 6838 {tas5130CK_InitialScale, tas5130CK_Initial}, /* 16 */
7239 {tas5130cxx_InitialScale, tas5130cxx_Initial}, /* 16 */ 6839 {tas5130cxx_Initial, tas5130cxx_InitialScale}, /* 17 */
7240 {tas5130c_vf0250_InitialScale, tas5130c_vf0250_Initial}, 6840 {tas5130c_vf0250_InitialScale, tas5130c_vf0250_Initial},
7241 /* 17 */ 6841 /* 18 */
7242 }; 6842 };
7243 6843
7244 /* create the JPEG header */ 6844 /* create the JPEG header */
@@ -7258,19 +6858,6 @@ static int sd_start(struct gspca_dev *gspca_dev)
7258 case SENSOR_PAS106: 6858 case SENSOR_PAS106:
7259 usb_exchange(gspca_dev, pas106b_Initial_com); 6859 usb_exchange(gspca_dev, pas106b_Initial_com);
7260 break; 6860 break;
7261 case SENSOR_PB0330:
7262 if (mode) {
7263 if (sd->chip_revision == 0xc001
7264 || sd->chip_revision == 0xe001
7265 || sd->chip_revision == 0x8001)
7266 zc3_init = pb03303x_Initial;
7267 } else {
7268 if (sd->chip_revision == 0xc001
7269 || sd->chip_revision == 0xe001
7270 || sd->chip_revision == 0x8001)
7271 zc3_init = pb03303x_InitialScale;
7272 }
7273 break;
7274 } 6861 }
7275 usb_exchange(gspca_dev, zc3_init); 6862 usb_exchange(gspca_dev, zc3_init);
7276 6863
@@ -7310,10 +6897,8 @@ static int sd_start(struct gspca_dev *gspca_dev)
7310 6897
7311 /* set the gamma tables when not set */ 6898 /* set the gamma tables when not set */
7312 switch (sd->sensor) { 6899 switch (sd->sensor) {
7313 case SENSOR_CS2102: /* gamma set in xxx_Initial */ 6900 case SENSOR_CS2102K: /* gamma set in xxx_Initial */
7314 case SENSOR_CS2102K:
7315 case SENSOR_HDCS2020b: 6901 case SENSOR_HDCS2020b:
7316 case SENSOR_PB0330: /* pb with chip_revision - see above */
7317 case SENSOR_OV7630C: 6902 case SENSOR_OV7630C:
7318 case SENSOR_TAS5130CK: 6903 case SENSOR_TAS5130CK:
7319 break; 6904 break;
@@ -7365,7 +6950,7 @@ static int sd_start(struct gspca_dev *gspca_dev)
7365 setautogain(gspca_dev); 6950 setautogain(gspca_dev);
7366 switch (sd->sensor) { 6951 switch (sd->sensor) {
7367 case SENSOR_PO2030: 6952 case SENSOR_PO2030:
7368 msleep(500); 6953 msleep(50);
7369 reg_r(gspca_dev, 0x0008); 6954 reg_r(gspca_dev, 0x0008);
7370 reg_r(gspca_dev, 0x0007); 6955 reg_r(gspca_dev, 0x0007);
7371 /*fall thru*/ 6956 /*fall thru*/
@@ -7389,17 +6974,16 @@ static void sd_stop0(struct gspca_dev *gspca_dev)
7389} 6974}
7390 6975
7391static void sd_pkt_scan(struct gspca_dev *gspca_dev, 6976static void sd_pkt_scan(struct gspca_dev *gspca_dev,
7392 struct gspca_frame *frame, 6977 u8 *data,
7393 __u8 *data,
7394 int len) 6978 int len)
7395{ 6979{
7396 struct sd *sd = (struct sd *) gspca_dev; 6980 struct sd *sd = (struct sd *) gspca_dev;
7397 6981
7398 if (data[0] == 0xff && data[1] == 0xd8) { /* start of frame */ 6982 if (data[0] == 0xff && data[1] == 0xd8) { /* start of frame */
7399 frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, 6983 gspca_frame_add(gspca_dev, LAST_PACKET,
7400 data, 0); 6984 NULL, 0);
7401 /* put the JPEG header in the new frame */ 6985 /* put the JPEG header in the new frame */
7402 gspca_frame_add(gspca_dev, FIRST_PACKET, frame, 6986 gspca_frame_add(gspca_dev, FIRST_PACKET,
7403 sd->jpeg_hdr, JPEG_HDR_SZ); 6987 sd->jpeg_hdr, JPEG_HDR_SZ);
7404 6988
7405 /* remove the webcam's header: 6989 /* remove the webcam's header:
@@ -7411,7 +6995,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
7411 data += 18; 6995 data += 18;
7412 len -= 18; 6996 len -= 18;
7413 } 6997 }
7414 gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len); 6998 gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
7415} 6999}
7416 7000
7417static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) 7001static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val)