aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video
diff options
context:
space:
mode:
authorJean-Francois Moine <moinejf@free.fr>2009-10-07 04:24:19 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-12-05 15:40:49 -0500
commit013db7575bdfb57d295e9a27186f52c7547ef2d2 (patch)
tree7735a2d7daabec618fcacf2a775079c057b0c285 /drivers/media/video
parente0d49e2d3ae3cd887b7999c4227c04008d2a02c4 (diff)
V4L/DVB (13193): gspca - zc3xx.c: Change init sequences of sensor tas5130c.
Signed-off-by: Jean-Francois Moine <moinejf@free.fr> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video')
-rw-r--r--drivers/media/video/gspca/zc3xx.c228
1 files changed, 69 insertions, 159 deletions
diff --git a/drivers/media/video/gspca/zc3xx.c b/drivers/media/video/gspca/zc3xx.c
index e544630757c8..0aa87d2958a0 100644
--- a/drivers/media/video/gspca/zc3xx.c
+++ b/drivers/media/video/gspca/zc3xx.c
@@ -5481,7 +5481,7 @@ static const struct usb_action tas5130CK_InitialScale[] = {
5481 {} 5481 {}
5482}; 5482};
5483 5483
5484static const struct usb_action tas5130cxx_Initial[] = { 5484static const struct usb_action tas5130cxx_InitialScale[] = { /* 320x240 */
5485 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 5485 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
5486 {0xa0, 0x50, ZC3XX_R002_CLOCKSELECT}, 5486 {0xa0, 0x50, ZC3XX_R002_CLOCKSELECT},
5487 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 5487 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
@@ -5510,74 +5510,19 @@ static const struct usb_action tas5130cxx_Initial[] = {
5510 {0xa0, 0xf7, ZC3XX_R101_SENSORCORRECTION}, 5510 {0xa0, 0xf7, ZC3XX_R101_SENSORCORRECTION},
5511 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 5511 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
5512 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 5512 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
5513 {0xa0, 0x68, ZC3XX_R18D_YTARGET}, 5513 {0xa0, 0x95, ZC3XX_R18D_YTARGET},
5514 {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 5514 {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN},
5515 {0xa0, 0x00, 0x01ad}, 5515 {0xa0, 0x00, 0x01ad},
5516 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 5516 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
5517 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 5517 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
5518 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 5518 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
5519 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 5519 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
5520 {0xa1, 0x01, 0x0002},
5521 {0xa1, 0x01, 0x0008},
5522 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */
5523 {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */
5524 {0xa1, 0x01, 0x01c8},
5525 {0xa1, 0x01, 0x01c9},
5526 {0xa1, 0x01, 0x01ca},
5527 {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */
5528
5529 {0xa0, 0x68, ZC3XX_R10A_RGB00}, /* matrix */
5530 {0xa0, 0xec, ZC3XX_R10B_RGB01},
5531 {0xa0, 0xec, ZC3XX_R10C_RGB02},
5532 {0xa0, 0xec, ZC3XX_R10D_RGB10},
5533 {0xa0, 0x68, ZC3XX_R10E_RGB11},
5534 {0xa0, 0xec, ZC3XX_R10F_RGB12},
5535 {0xa0, 0xec, ZC3XX_R110_RGB20},
5536 {0xa0, 0xec, ZC3XX_R111_RGB21},
5537 {0xa0, 0x68, ZC3XX_R112_RGB22},
5538
5539 {0xa1, 0x01, 0x018d},
5540 {0xa0, 0x90, ZC3XX_R18D_YTARGET}, /* 90 */
5541 {0xa1, 0x01, 0x0180},
5542 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
5543 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
5544
5545 {0xaa, 0xa3, 0x0001},
5546 {0xaa, 0xa4, 0x0077},
5547 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH},
5548 {0xa0, 0x77, ZC3XX_R0A4_EXPOSURETIMELOW},
5549
5550 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 00 */
5551 {0xa0, 0x03, ZC3XX_R191_EXPOSURELIMITMID}, /* 03 */
5552 {0xa0, 0xe8, ZC3XX_R192_EXPOSURELIMITLOW}, /* e8 */
5553 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 0 */
5554 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 0 */
5555 {0xa0, 0x7d, ZC3XX_R197_ANTIFLICKERLOW}, /* 7d */
5556
5557 {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
5558 {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
5559 {0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 08 */
5560 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 24 */
5561 {0xa0, 0xf0, ZC3XX_R01D_HSYNC_0},
5562 {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1},
5563 {0xa0, 0xf8, ZC3XX_R01F_HSYNC_2},
5564 {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
5565 {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH},
5566 {0xa0, 0xc0, ZC3XX_R0A0_MAXXLOW},
5567 {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, /* 50 */
5568 {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE},
5569 {0xa1, 0x01, 0x0180},
5570 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
5571 {} 5520 {}
5572}; 5521};
5573static const struct usb_action tas5130cxx_InitialScale[] = { 5522static const struct usb_action tas5130cxx_Initial[] = { /* 640x480 */
5574/*?? {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, */
5575 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 5523 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
5576 {0xa0, 0x40, ZC3XX_R002_CLOCKSELECT}, 5524 {0xa0, 0x40, ZC3XX_R002_CLOCKSELECT},
5577
5578 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 5525 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
5579 {0xa1, 0x01, 0x0008},
5580
5581 {0xa0, 0x02, ZC3XX_R010_CMOSSENSORSELECT}, 5526 {0xa0, 0x02, ZC3XX_R010_CMOSSENSORSELECT},
5582 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 5527 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
5583 {0xa0, 0x00, ZC3XX_R001_SYSTEMOPERATING}, 5528 {0xa0, 0x00, ZC3XX_R001_SYSTEMOPERATING},
@@ -5601,63 +5546,13 @@ static const struct usb_action tas5130cxx_InitialScale[] = {
5601 {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 5546 {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},
5602 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 5547 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
5603 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 5548 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
5604 {0xa0, 0x68, ZC3XX_R18D_YTARGET}, 5549 {0xa0, 0x95, ZC3XX_R18D_YTARGET},
5605 {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 5550 {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN},
5606 {0xa0, 0x00, 0x01ad}, 5551 {0xa0, 0x00, 0x01ad},
5607 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 5552 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
5608 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 5553 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
5609 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 5554 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
5610 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 5555 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
5611 {0xa1, 0x01, 0x0002},
5612 {0xa1, 0x01, 0x0008},
5613
5614 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
5615 {0xa1, 0x01, 0x0008}, /* clock ? */
5616 {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */
5617 {0xa1, 0x01, 0x01c8},
5618 {0xa1, 0x01, 0x01c9},
5619 {0xa1, 0x01, 0x01ca},
5620 {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */
5621
5622 {0xa0, 0x68, ZC3XX_R10A_RGB00}, /* matrix */
5623 {0xa0, 0xec, ZC3XX_R10B_RGB01},
5624 {0xa0, 0xec, ZC3XX_R10C_RGB02},
5625 {0xa0, 0xec, ZC3XX_R10D_RGB10},
5626 {0xa0, 0x68, ZC3XX_R10E_RGB11},
5627 {0xa0, 0xec, ZC3XX_R10F_RGB12},
5628 {0xa0, 0xec, ZC3XX_R110_RGB20},
5629 {0xa0, 0xec, ZC3XX_R111_RGB21},
5630 {0xa0, 0x68, ZC3XX_R112_RGB22},
5631
5632 {0xa1, 0x01, 0x018d},
5633 {0xa0, 0x90, ZC3XX_R18D_YTARGET},
5634 {0xa1, 0x01, 0x0180},
5635 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
5636 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
5637 {0xaa, 0xa3, 0x0001},
5638 {0xaa, 0xa4, 0x0063},
5639 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH},
5640 {0xa0, 0x63, ZC3XX_R0A4_EXPOSURETIMELOW},
5641 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
5642 {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID},
5643 {0xa0, 0x38, ZC3XX_R192_EXPOSURELIMITLOW},
5644 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
5645 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
5646 {0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW},
5647 {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
5648 {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
5649 {0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF},
5650 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
5651 {0xa0, 0xd3, ZC3XX_R01D_HSYNC_0},
5652 {0xa0, 0xda, ZC3XX_R01E_HSYNC_1},
5653 {0xa0, 0xea, ZC3XX_R01F_HSYNC_2},
5654 {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
5655 {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH},
5656 {0xa0, 0x4c, ZC3XX_R0A0_MAXXLOW},
5657 {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
5658 {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE},
5659 {0xa1, 0x01, 0x0180},
5660 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
5661 {} 5556 {}
5662}; 5557};
5663static const struct usb_action tas5130cxx_50HZ[] = { 5558static const struct usb_action tas5130cxx_50HZ[] = {
@@ -5667,20 +5562,22 @@ static const struct usb_action tas5130cxx_50HZ[] = {
5667 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */ 5562 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */
5668 {0xa0, 0x63, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,63,cc */ 5563 {0xa0, 0x63, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,63,cc */
5669 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 5564 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
5670 {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,02,cc */ 5565 {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID},
5671 {0xa0, 0x38, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,38,cc */ 5566 {0xa0, 0xfe, ZC3XX_R192_EXPOSURELIMITLOW},
5672 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 5567 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
5673 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 5568 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
5674 {0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,47,cc */ 5569 {0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,47,cc */
5675 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 5570 {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
5676 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 5571 {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
5677 {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,0c,cc */ 5572 {0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF},
5678 {0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,26,cc */ 5573 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
5679 {0xa0, 0xd3, ZC3XX_R01D_HSYNC_0}, /* 00,1d,d3,cc */ 5574 {0xa0, 0xd3, ZC3XX_R01D_HSYNC_0}, /* 00,1d,d3,cc */
5680 {0xa0, 0xda, ZC3XX_R01E_HSYNC_1}, /* 00,1e,da,cc */ 5575 {0xa0, 0xda, ZC3XX_R01E_HSYNC_1}, /* 00,1e,da,cc */
5681 {0xa0, 0xea, ZC3XX_R01F_HSYNC_2}, /* 00,1f,ea,cc */ 5576 {0xa0, 0xea, ZC3XX_R01F_HSYNC_2}, /* 00,1f,ea,cc */
5682 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 5577 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
5683 {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */ 5578 {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */
5579 {0xa0, 0x4c, ZC3XX_R0A0_MAXXLOW},
5580 {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
5684 {} 5581 {}
5685}; 5582};
5686static const struct usb_action tas5130cxx_50HZScale[] = { 5583static const struct usb_action tas5130cxx_50HZScale[] = {
@@ -5690,20 +5587,22 @@ static const struct usb_action tas5130cxx_50HZScale[] = {
5690 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */ 5587 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */
5691 {0xa0, 0x77, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,77,cc */ 5588 {0xa0, 0x77, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,77,cc */
5692 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 5589 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
5693 {0xa0, 0x03, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,03,cc */ 5590 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
5694 {0xa0, 0xe8, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,e8,cc */ 5591 {0xa0, 0xd0, ZC3XX_R192_EXPOSURELIMITLOW},
5695 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 5592 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
5696 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 5593 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
5697 {0xa0, 0x7d, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,7d,cc */ 5594 {0xa0, 0x7d, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,7d,cc */
5698 {0xa0, 0x14, ZC3XX_R18C_AEFREEZE}, /* 01,8c,14,cc */ 5595 {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
5699 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 5596 {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
5700 {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,0c,cc */ 5597 {0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF},
5701 {0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,26,cc */ 5598 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
5702 {0xa0, 0xf0, ZC3XX_R01D_HSYNC_0}, /* 00,1d,f0,cc */ 5599 {0xa0, 0xf0, ZC3XX_R01D_HSYNC_0}, /* 00,1d,f0,cc */
5703 {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1}, /* 00,1e,f4,cc */ 5600 {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1}, /* 00,1e,f4,cc */
5704 {0xa0, 0xf8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,f8,cc */ 5601 {0xa0, 0xf8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,f8,cc */
5705 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 5602 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
5706 {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */ 5603 {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */
5604 {0xa0, 0xc0, ZC3XX_R0A0_MAXXLOW},
5605 {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
5707 {} 5606 {}
5708}; 5607};
5709static const struct usb_action tas5130cxx_60HZ[] = { 5608static const struct usb_action tas5130cxx_60HZ[] = {
@@ -5713,20 +5612,22 @@ static const struct usb_action tas5130cxx_60HZ[] = {
5713 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */ 5612 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */
5714 {0xa0, 0x36, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,36,cc */ 5613 {0xa0, 0x36, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,36,cc */
5715 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 5614 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
5716 {0xa0, 0x01, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,01,cc */ 5615 {0xa0, 0x05, ZC3XX_R191_EXPOSURELIMITMID},
5717 {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,f0,cc */ 5616 {0xa0, 0x54, ZC3XX_R192_EXPOSURELIMITLOW},
5718 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 5617 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
5719 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 5618 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
5720 {0xa0, 0x3e, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,3e,cc */ 5619 {0xa0, 0x3e, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,3e,cc */
5721 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 5620 {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
5722 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 5621 {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
5723 {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,0c,cc */ 5622 {0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF},
5724 {0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,26,cc */ 5623 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
5725 {0xa0, 0xca, ZC3XX_R01D_HSYNC_0}, /* 00,1d,ca,cc */ 5624 {0xa0, 0xca, ZC3XX_R01D_HSYNC_0}, /* 00,1d,ca,cc */
5726 {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d0,cc */ 5625 {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d0,cc */
5727 {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */ 5626 {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */
5728 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 5627 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
5729 {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */ 5628 {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */
5629 {0xa0, 0x28, ZC3XX_R0A0_MAXXLOW},
5630 {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
5730 {} 5631 {}
5731}; 5632};
5732static const struct usb_action tas5130cxx_60HZScale[] = { 5633static const struct usb_action tas5130cxx_60HZScale[] = {
@@ -5736,20 +5637,22 @@ static const struct usb_action tas5130cxx_60HZScale[] = {
5736 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */ 5637 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */
5737 {0xa0, 0x77, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,77,cc */ 5638 {0xa0, 0x77, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,77,cc */
5738 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 5639 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
5739 {0xa0, 0x03, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,03,cc */ 5640 {0xa0, 0x09, ZC3XX_R191_EXPOSURELIMITMID},
5740 {0xa0, 0xe8, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,e8,cc */ 5641 {0xa0, 0x47, ZC3XX_R192_EXPOSURELIMITLOW},
5741 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 5642 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
5742 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 5643 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
5743 {0xa0, 0x7d, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,7d,cc */ 5644 {0xa0, 0x7d, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,7d,cc */
5744 {0xa0, 0x14, ZC3XX_R18C_AEFREEZE}, /* 01,8c,14,cc */ 5645 {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
5745 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 5646 {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
5746 {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,0c,cc */ 5647 {0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF},
5747 {0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,26,cc */ 5648 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
5748 {0xa0, 0xc8, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c8,cc */ 5649 {0xa0, 0xc8, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c8,cc */
5749 {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d0,cc */ 5650 {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d0,cc */
5750 {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */ 5651 {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */
5751 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 5652 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
5752 {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */ 5653 {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */
5654 {0xa0, 0x20, ZC3XX_R0A0_MAXXLOW},
5655 {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
5753 {} 5656 {}
5754}; 5657};
5755static const struct usb_action tas5130cxx_NoFliker[] = { 5658static const struct usb_action tas5130cxx_NoFliker[] = {
@@ -5759,13 +5662,13 @@ static const struct usb_action tas5130cxx_NoFliker[] = {
5759 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */ 5662 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */
5760 {0xa0, 0x40, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,40,cc */ 5663 {0xa0, 0x40, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,40,cc */
5761 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 5664 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
5762 {0xa0, 0x01, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,01,cc */ 5665 {0xa0, 0x05, ZC3XX_R191_EXPOSURELIMITMID},
5763 {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,f0,cc */ 5666 {0xa0, 0xa0, ZC3XX_R192_EXPOSURELIMITLOW},
5764 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 5667 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
5765 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 5668 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
5766 {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */ 5669 {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW},
5767 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 5670 {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
5768 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 5671 {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
5769 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 5672 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */
5770 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 5673 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */
5771 {0xa0, 0xbc, ZC3XX_R01D_HSYNC_0}, /* 00,1d,bc,cc */ 5674 {0xa0, 0xbc, ZC3XX_R01D_HSYNC_0}, /* 00,1d,bc,cc */
@@ -5773,6 +5676,8 @@ static const struct usb_action tas5130cxx_NoFliker[] = {
5773 {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */ 5676 {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */
5774 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 5677 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
5775 {0xa0, 0x02, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,02,cc */ 5678 {0xa0, 0x02, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,02,cc */
5679 {0xa0, 0xf0, ZC3XX_R0A0_MAXXLOW},
5680 {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
5776 {} 5681 {}
5777}; 5682};
5778 5683
@@ -5783,13 +5688,13 @@ static const struct usb_action tas5130cxx_NoFlikerScale[] = {
5783 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */ 5688 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */
5784 {0xa0, 0x90, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,90,cc */ 5689 {0xa0, 0x90, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,90,cc */
5785 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 5690 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
5786 {0xa0, 0x03, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,03,cc */ 5691 {0xa0, 0x0a, ZC3XX_R191_EXPOSURELIMITMID},
5787 {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,f0,cc */ 5692 {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW},
5788 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 5693 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
5789 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 5694 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
5790 {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */ 5695 {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW},
5791 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 5696 {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
5792 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 5697 {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
5793 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 5698 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */
5794 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 5699 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */
5795 {0xa0, 0xbc, ZC3XX_R01D_HSYNC_0}, /* 00,1d,bc,cc */ 5700 {0xa0, 0xbc, ZC3XX_R01D_HSYNC_0}, /* 00,1d,bc,cc */
@@ -5797,6 +5702,8 @@ static const struct usb_action tas5130cxx_NoFlikerScale[] = {
5797 {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */ 5702 {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */
5798 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 5703 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
5799 {0xa0, 0x02, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,02,cc */ 5704 {0xa0, 0x02, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,02,cc */
5705 {0xa0, 0xf0, ZC3XX_R0A0_MAXXLOW},
5706 {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
5800 {} 5707 {}
5801}; 5708};
5802 5709
@@ -6206,6 +6113,8 @@ static void setmatrix(struct gspca_dev *gspca_dev)
6206 {0x4c, 0xf5, 0xff, 0xf9, 0x51, 0xf5, 0xfb, 0xed, 0x5f}; 6113 {0x4c, 0xf5, 0xff, 0xf9, 0x51, 0xf5, 0xfb, 0xed, 0x5f};
6207 static const __u8 po2030_matrix[9] = 6114 static const __u8 po2030_matrix[9] =
6208 {0x60, 0xf0, 0xf0, 0xf0, 0x60, 0xf0, 0xf0, 0xf0, 0x60}; 6115 {0x60, 0xf0, 0xf0, 0xf0, 0x60, 0xf0, 0xf0, 0xf0, 0x60};
6116 static const u8 tas5130c_matrix[9] =
6117 {0x68, 0xec, 0xec, 0xec, 0x68, 0xec, 0xec, 0xec, 0x68};
6209 static const __u8 vf0250_matrix[9] = 6118 static const __u8 vf0250_matrix[9] =
6210 {0x7b, 0xea, 0xea, 0xea, 0x7b, 0xea, 0xea, 0xea, 0x7b}; 6119 {0x7b, 0xea, 0xea, 0xea, 0x7b, 0xea, 0xea, 0xea, 0x7b};
6211 static const __u8 *matrix_tb[SENSOR_MAX] = { 6120 static const __u8 *matrix_tb[SENSOR_MAX] = {
@@ -6225,7 +6134,7 @@ static void setmatrix(struct gspca_dev *gspca_dev)
6225 NULL, /* SENSOR_PB0330 13 */ 6134 NULL, /* SENSOR_PB0330 13 */
6226 po2030_matrix, /* SENSOR_PO2030 14 */ 6135 po2030_matrix, /* SENSOR_PO2030 14 */
6227 NULL, /* SENSOR_TAS5130CK 15 */ 6136 NULL, /* SENSOR_TAS5130CK 15 */
6228 NULL, /* SENSOR_TAS5130CXX 16 */ 6137 tas5130c_matrix, /* SENSOR_TAS5130CXX 16 */
6229 vf0250_matrix, /* SENSOR_TAS5130C_VF0250 17 */ 6138 vf0250_matrix, /* SENSOR_TAS5130C_VF0250 17 */
6230 }; 6139 };
6231 6140
@@ -6491,13 +6400,13 @@ static int setlightfreq(struct gspca_dev *gspca_dev)
6491 PO2030_50HZ, PO2030_50HZ, 6400 PO2030_50HZ, PO2030_50HZ,
6492 PO2030_60HZ, PO2030_60HZ}, 6401 PO2030_60HZ, PO2030_60HZ},
6493/* SENSOR_TAS5130CK 15 */ 6402/* SENSOR_TAS5130CK 15 */
6494 {tas5130cxx_NoFliker, tas5130cxx_NoFlikerScale, 6403 {tas5130cxx_NoFlikerScale, tas5130cxx_NoFliker,
6495 tas5130cxx_50HZ, tas5130cxx_50HZScale, 6404 tas5130cxx_50HZScale, tas5130cxx_50HZ,
6496 tas5130cxx_60HZ, tas5130cxx_60HZScale}, 6405 tas5130cxx_60HZScale, tas5130cxx_60HZ},
6497/* SENSOR_TAS5130CXX 16 */ 6406/* SENSOR_TAS5130CXX 16 */
6498 {tas5130cxx_NoFliker, tas5130cxx_NoFlikerScale, 6407 {tas5130cxx_NoFlikerScale, tas5130cxx_NoFliker,
6499 tas5130cxx_50HZ, tas5130cxx_50HZScale, 6408 tas5130cxx_50HZScale, tas5130cxx_50HZ,
6500 tas5130cxx_60HZ, tas5130cxx_60HZScale}, 6409 tas5130cxx_60HZScale, tas5130cxx_60HZ},
6501/* SENSOR_TAS5130C_VF0250 17 */ 6410/* SENSOR_TAS5130C_VF0250 17 */
6502 {tas5130c_vf0250_NoFliker, tas5130c_vf0250_NoFlikerScale, 6411 {tas5130c_vf0250_NoFliker, tas5130c_vf0250_NoFlikerScale,
6503 tas5130c_vf0250_50HZ, tas5130c_vf0250_50HZScale, 6412 tas5130c_vf0250_50HZ, tas5130c_vf0250_50HZScale,
@@ -6689,6 +6598,7 @@ struct sensor_by_chipset_revision {
6689 __u8 internal_sensor_id; 6598 __u8 internal_sensor_id;
6690}; 6599};
6691static const struct sensor_by_chipset_revision chipset_revision_sensor[] = { 6600static const struct sensor_by_chipset_revision chipset_revision_sensor[] = {
6601 {0xc000, 0x12}, /* TAS5130C */
6692 {0xc001, 0x13}, /* MI0360 */ 6602 {0xc001, 0x13}, /* MI0360 */
6693 {0xe001, 0x13}, 6603 {0xe001, 0x13},
6694 {0x8001, 0x13}, 6604 {0x8001, 0x13},
@@ -6866,7 +6776,7 @@ static int sd_config(struct gspca_dev *gspca_dev,
6866 4, /* SENSOR_PB0330 13 */ 6776 4, /* SENSOR_PB0330 13 */
6867 4, /* SENSOR_PO2030 14 */ 6777 4, /* SENSOR_PO2030 14 */
6868 4, /* SENSOR_TAS5130CK 15 */ 6778 4, /* SENSOR_TAS5130CK 15 */
6869 4, /* SENSOR_TAS5130CXX 16 */ 6779 3, /* SENSOR_TAS5130CXX 16 */
6870 3, /* SENSOR_TAS5130C_VF0250 17 */ 6780 3, /* SENSOR_TAS5130C_VF0250 17 */
6871 }; 6781 };
6872 6782
@@ -6929,7 +6839,7 @@ static int sd_config(struct gspca_dev *gspca_dev,
6929 break; 6839 break;
6930 case 0x10: 6840 case 0x10:
6931 case 0x12: 6841 case 0x12:
6932 PDEBUG(D_PROBE, "Find Sensor TAS5130"); 6842 PDEBUG(D_PROBE, "Find Sensor TAS5130C");
6933 sd->sensor = SENSOR_TAS5130CXX; 6843 sd->sensor = SENSOR_TAS5130CXX;
6934 break; 6844 break;
6935 case 0x11: 6845 case 0x11:
@@ -7062,7 +6972,7 @@ static int sd_start(struct gspca_dev *gspca_dev)
7062/* or {pb03303x_InitialScale, pb03303x_Initial}, */ 6972/* or {pb03303x_InitialScale, pb03303x_Initial}, */
7063 {PO2030_mode0, PO2030_mode1}, /* 14 */ 6973 {PO2030_mode0, PO2030_mode1}, /* 14 */
7064 {tas5130CK_InitialScale, tas5130CK_Initial}, /* 15 */ 6974 {tas5130CK_InitialScale, tas5130CK_Initial}, /* 15 */
7065 {tas5130cxx_InitialScale, tas5130cxx_Initial}, /* 16 */ 6975 {tas5130cxx_Initial, tas5130cxx_InitialScale}, /* 16 */
7066 {tas5130c_vf0250_InitialScale, tas5130c_vf0250_Initial}, 6976 {tas5130c_vf0250_InitialScale, tas5130c_vf0250_Initial},
7067 /* 17 */ 6977 /* 17 */
7068 }; 6978 };