The patch number 13896 was added via Jean-Francois Moine <moin...@free.fr>
to http://linuxtv.org/hg/v4l-dvb master development tree.

Kernel patches in this development tree may be modified to be backward
compatible with older kernels. Compatibility modifications will be
removed before inclusion into the mainstream Kernel

If anyone has any objections, please let us know by sending a message to:
        Linux Media Mailing List <linux-me...@vger.kernel.org>

------

From: Jean-Francois Moine  <moin...@free.fr>
gspca - zc3xx: Adjust the pas202b exchanges.


- adapt the start sequences from the info file of the ms-win driver
  of the webcams 046d:08a2/046d:08aa (lvWIMv.inf)
- disable the brightness for this sensor

Priority: normal

Signed-off-by: Jean-Francois Moine <moin...@free.fr>


---

 linux/drivers/media/video/gspca/zc3xx.c |  157 +++++++++++++-----------
 1 file changed, 87 insertions(+), 70 deletions(-)

diff -r b978912adcaa -r aa0e795c6db3 linux/drivers/media/video/gspca/zc3xx.c
--- a/linux/drivers/media/video/gspca/zc3xx.c   Mon Jan 04 19:54:59 2010 +0100
+++ b/linux/drivers/media/video/gspca/zc3xx.c   Mon Jan 04 20:09:47 2010 +0100
@@ -4001,10 +4001,10 @@
        {}
 };
 
-/* from usbvm31b.inf */
+/* from lvWIMv.inf 046d:08a2/:08aa 2007/06/03 */
 static const struct usb_action pas202b_Initial[] = {   /* 640x480 */
        {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},         /* 00,00,01,cc */
-       {0xa0, 0x00, ZC3XX_R008_CLOCKSETTING},          /* 00,08,00,cc */
+       {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
        {0xa0, 0x0e, ZC3XX_R010_CMOSSENSORSELECT},      /* 00,10,0e,cc */
        {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},           /* 00,02,00,cc */
        {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},        /* 00,03,02,cc */
@@ -4029,7 +4029,7 @@
        {0xaa, 0x09, 0x0006},                           /* 00,09,06,aa */
        {0xaa, 0x0a, 0x0001},                           /* 00,0a,01,aa */
        {0xaa, 0x0b, 0x0001},                           /* 00,0b,01,aa */
-       {0xaa, 0x0c, 0x0008},                           /* 00,0c,08,aa */
+       {0xaa, 0x0c, 0x0006},
        {0xaa, 0x0d, 0x0000},                           /* 00,0d,00,aa */
        {0xaa, 0x10, 0x0000},                           /* 00,10,00,aa */
        {0xaa, 0x12, 0x0005},                           /* 00,12,05,aa */
@@ -4048,13 +4048,13 @@
 };
 static const struct usb_action pas202b_InitialScale[] = {      /* 320x240 */
        {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},         /* 00,00,01,cc */
-       {0xa0, 0x00, ZC3XX_R008_CLOCKSETTING},          /* 00,08,00,cc */
+       {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
        {0xa0, 0x0e, ZC3XX_R010_CMOSSENSORSELECT},      /* 00,10,0e,cc */
        {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},           /* 00,02,10,cc */
        {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},        /* 00,03,02,cc */
        {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},         /* 00,04,80,cc */
        {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},       /* 00,05,01,cc */
-       {0xa0, 0xd0, ZC3XX_R006_FRAMEHEIGHTLOW},        /* 00,06,d0,cc */
+       {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
        {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},       /* 00,01,01,cc */
        {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},      /* 00,12,03,cc */
        {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},      /* 00,12,01,cc */
@@ -4064,7 +4064,7 @@
        {0xa0, 0x08, ZC3XX_R11A_FIRSTYLOW},             /* 01,1a,08,cc */
        {0xa0, 0x02, ZC3XX_R11C_FIRSTXLOW},             /* 01,1c,02,cc */
        {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH},         /* 00,9b,01,cc */
-       {0xa0, 0xd8, ZC3XX_R09C_WINHEIGHTLOW},          /* 00,9c,d8,cc */
+       {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW},
        {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH},          /* 00,9d,02,cc */
        {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW},           /* 00,9e,88,cc */
        {0xaa, 0x02, 0x0002},                           /* 00,02,02,aa */
@@ -4073,7 +4073,7 @@
        {0xaa, 0x09, 0x0006},                           /* 00,09,06,aa */
        {0xaa, 0x0a, 0x0001},                           /* 00,0a,01,aa */
        {0xaa, 0x0b, 0x0001},                           /* 00,0b,01,aa */
-       {0xaa, 0x0c, 0x0008},                           /* 00,0c,08,aa */
+       {0xaa, 0x0c, 0x0006},
        {0xaa, 0x0d, 0x0000},                           /* 00,0d,00,aa */
        {0xaa, 0x10, 0x0000},                           /* 00,10,00,aa */
        {0xaa, 0x12, 0x0005},                           /* 00,12,05,aa */
@@ -4088,6 +4088,8 @@
        {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},        /* 02,50,08,cc */
        {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},          /* 03,01,08,cc */
        {0xa0, 0x70, ZC3XX_R18D_YTARGET},               /* 01,8d,70,cc */
+       {0xa0, 0xff, ZC3XX_R097_WINYSTARTHIGH},
+       {0xa0, 0xfe, ZC3XX_R098_WINYSTARTLOW},
        {}
 };
 static const struct usb_action pas202b_50HZ[] = {
@@ -4095,22 +4097,22 @@
        {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID},            /* 00,87,20,cc */
        {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW},            /* 00,88,21,cc */
        {0xaa, 0x20, 0x0002},                           /* 00,20,02,aa */
-       {0xaa, 0x21, 0x0068},                           /* 00,21,68,aa */
+       {0xaa, 0x21, 0x001b},
        {0xaa, 0x03, 0x0044},                           /* 00,03,44,aa */
-       {0xaa, 0x04, 0x0009},                           /* 00,04,09,aa */
-       {0xaa, 0x05, 0x0028},                           /* 00,05,28,aa */
+       {0xaa, 0x04, 0x0008},
+       {0xaa, 0x05, 0x001b},
        {0xaa, 0x0e, 0x0001},                           /* 00,0e,01,aa */
        {0xaa, 0x0f, 0x0000},                           /* 00,0f,00,aa */
-       {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},      /* 01,a9,14,cc */
-       {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},       /* 01,aa,24,cc */
-       {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},     /* 01,90,00,cc */
-       {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},      /* 01,91,07,cc */
-       {0xa0, 0xd2, ZC3XX_R192_EXPOSURELIMITLOW},      /* 01,92,d2,cc */
+       {0xa0, 0x1c, ZC3XX_R1A9_DIGITALLIMITDIFF},
+       {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},       /* 01,aa,24,cc */
+       {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},     /* 01,90,00,cc */
+       {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID},
+       {0xa0, 0x1b, ZC3XX_R192_EXPOSURELIMITLOW},
        {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},       /* 01,95,00,cc */
        {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},        /* 01,96,00,cc */
        {0xa0, 0x4d, ZC3XX_R197_ANTIFLICKERLOW},        /* 01,97,4d,cc */
-       {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},              /* 01,8c,10,cc */
-       {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},            /* 01,8f,20,cc */
+       {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
+       {0xa0, 0x1b, ZC3XX_R18F_AEUNFREEZE},
        {0xa0, 0x44, ZC3XX_R01D_HSYNC_0},               /* 00,1d,44,cc */
        {0xa0, 0x6f, ZC3XX_R01E_HSYNC_1},               /* 00,1e,6f,cc */
        {0xa0, 0xad, ZC3XX_R01F_HSYNC_2},               /* 00,1f,ad,cc */
@@ -4123,23 +4125,23 @@
        {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},         /* 00,19,00,cc */
        {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID},            /* 00,87,20,cc */
        {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW},            /* 00,88,21,cc */
-       {0xaa, 0x20, 0x0002},                           /* 00,20,02,aa */
-       {0xaa, 0x21, 0x006c},                           /* 00,21,6c,aa */
+       {0xaa, 0x20, 0x0004},
+       {0xaa, 0x21, 0x003d},
        {0xaa, 0x03, 0x0041},                           /* 00,03,41,aa */
-       {0xaa, 0x04, 0x0009},                           /* 00,04,09,aa */
-       {0xaa, 0x05, 0x002c},                           /* 00,05,2c,aa */
+       {0xaa, 0x04, 0x0010},
+       {0xaa, 0x05, 0x003d},
        {0xaa, 0x0e, 0x0001},                           /* 00,0e,01,aa */
        {0xaa, 0x0f, 0x0000},                           /* 00,0f,00,aa */
-       {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},      /* 01,a9,14,cc */
-       {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},       /* 01,aa,24,cc */
-       {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},     /* 01,90,00,cc */
-       {0xa0, 0x0f, ZC3XX_R191_EXPOSURELIMITMID},      /* 01,91,0f,cc */
-       {0xa0, 0xbe, ZC3XX_R192_EXPOSURELIMITLOW},      /* 01,92,be,cc */
+       {0xa0, 0x1c, ZC3XX_R1A9_DIGITALLIMITDIFF},
+       {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},       /* 01,aa,24,cc */
+       {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},     /* 01,90,00,cc */
+       {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID},
+       {0xa0, 0x3d, ZC3XX_R192_EXPOSURELIMITLOW},
        {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},       /* 01,95,00,cc */
        {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},        /* 01,96,00,cc */
        {0xa0, 0x9b, ZC3XX_R197_ANTIFLICKERLOW},        /* 01,97,9b,cc */
-       {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},              /* 01,8c,10,cc */
-       {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},            /* 01,8f,20,cc */
+       {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
+       {0xa0, 0x1b, ZC3XX_R18F_AEUNFREEZE},
        {0xa0, 0x41, ZC3XX_R01D_HSYNC_0},               /* 00,1d,41,cc */
        {0xa0, 0x6f, ZC3XX_R01E_HSYNC_1},               /* 00,1e,6f,cc */
        {0xa0, 0xad, ZC3XX_R01F_HSYNC_2},               /* 00,1f,ad,cc */
@@ -4159,16 +4161,16 @@
        {0xaa, 0x05, 0x0000},                           /* 00,05,00,aa */
        {0xaa, 0x0e, 0x0001},                           /* 00,0e,01,aa */
        {0xaa, 0x0f, 0x0000},                           /* 00,0f,00,aa */
-       {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},      /* 01,a9,14,cc */
-       {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},       /* 01,aa,24,cc */
-       {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},     /* 01,90,00,cc */
-       {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},      /* 01,91,07,cc */
-       {0xa0, 0xc0, ZC3XX_R192_EXPOSURELIMITLOW},      /* 01,92,c0,cc */
+       {0xa0, 0x1c, ZC3XX_R1A9_DIGITALLIMITDIFF},
+       {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},       /* 01,aa,24,cc */
+       {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},     /* 01,90,00,cc */
+       {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID},
+       {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW},
        {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},       /* 01,95,00,cc */
        {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},        /* 01,96,00,cc */
        {0xa0, 0x40, ZC3XX_R197_ANTIFLICKERLOW},        /* 01,97,40,cc */
-       {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},              /* 01,8c,10,cc */
-       {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},            /* 01,8f,20,cc */
+       {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
+       {0xa0, 0x1b, ZC3XX_R18F_AEUNFREEZE},
        {0xa0, 0x45, ZC3XX_R01D_HSYNC_0},               /* 00,1d,45,cc */
        {0xa0, 0x8e, ZC3XX_R01E_HSYNC_1},               /* 00,1e,8e,cc */
        {0xa0, 0xc1, ZC3XX_R01F_HSYNC_2},               /* 00,1f,c1,cc */
@@ -4181,23 +4183,23 @@
        {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},         /* 00,19,00,cc */
        {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID},            /* 00,87,20,cc */
        {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW},            /* 00,88,21,cc */
-       {0xaa, 0x20, 0x0002},                           /* 00,20,02,aa */
-       {0xaa, 0x21, 0x0004},                           /* 00,21,04,aa */
+       {0xaa, 0x20, 0x0004},
+       {0xaa, 0x21, 0x0008},
        {0xaa, 0x03, 0x0042},                           /* 00,03,42,aa */
-       {0xaa, 0x04, 0x0008},                           /* 00,04,08,aa */
-       {0xaa, 0x05, 0x0004},                           /* 00,05,04,aa */
+       {0xaa, 0x04, 0x0010},
+       {0xaa, 0x05, 0x0008},
        {0xaa, 0x0e, 0x0001},                           /* 00,0e,01,aa */
        {0xaa, 0x0f, 0x0000},                           /* 00,0f,00,aa */
-       {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},      /* 01,a9,14,cc */
-       {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},       /* 01,aa,24,cc */
-       {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},     /* 01,90,00,cc */
-       {0xa0, 0x0f, ZC3XX_R191_EXPOSURELIMITMID},      /* 01,91,0f,cc */
-       {0xa0, 0x9f, ZC3XX_R192_EXPOSURELIMITLOW},      /* 01,92,9f,cc */
+       {0xa0, 0x1c, ZC3XX_R1A9_DIGITALLIMITDIFF},
+       {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},       /* 01,aa,24,cc */
+       {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},     /* 01,90,00,cc */
+       {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID},
+       {0xa0, 0x08, ZC3XX_R192_EXPOSURELIMITLOW},
        {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},       /* 01,95,00,cc */
        {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},        /* 01,96,00,cc */
        {0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW},        /* 01,97,81,cc */
-       {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},              /* 01,8c,10,cc */
-       {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},            /* 01,8f,20,cc */
+       {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
+       {0xa0, 0x1b, ZC3XX_R18F_AEUNFREEZE},
        {0xa0, 0x42, ZC3XX_R01D_HSYNC_0},               /* 00,1d,42,cc */
        {0xa0, 0x6f, ZC3XX_R01E_HSYNC_1},               /* 00,1e,6f,cc */
        {0xa0, 0xaf, ZC3XX_R01F_HSYNC_2},               /* 00,1f,af,cc */
@@ -4211,22 +4213,22 @@
        {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID},            /* 00,87,20,cc */
        {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW},            /* 00,88,21,cc */
        {0xaa, 0x20, 0x0002},                           /* 00,20,02,aa */
-       {0xaa, 0x21, 0x0020},                           /* 00,21,20,aa */
+       {0xaa, 0x21, 0x0006},
        {0xaa, 0x03, 0x0040},                           /* 00,03,40,aa */
        {0xaa, 0x04, 0x0008},                           /* 00,04,08,aa */
-       {0xaa, 0x05, 0x0020},                           /* 00,05,20,aa */
+       {0xaa, 0x05, 0x0006},
        {0xaa, 0x0e, 0x0001},                           /* 00,0e,01,aa */
        {0xaa, 0x0f, 0x0000},                           /* 00,0f,00,aa */
        {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},     /* 01,90,00,cc */
-       {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},      /* 01,91,07,cc */
-       {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW},      /* 01,92,f0,cc */
-       {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},       /* 01,95,00,cc */
-       {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},        /* 01,96,00,cc */
-       {0xa0, 0x02, ZC3XX_R197_ANTIFLICKERLOW},        /* 01,97,02,cc */
+       {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID},
+       {0xa0, 0x06, ZC3XX_R192_EXPOSURELIMITLOW},
+       {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},       /* 01,95,00,cc */
+       {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},        /* 01,96,00,cc */
+       {0xa0, 0x01, ZC3XX_R197_ANTIFLICKERLOW},
        {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},              /* 01,8c,10,cc */
        {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},            /* 01,8f,20,cc */
        {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},      /* 01,a9,00,cc */
-       {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},       /* 01,aa,00,cc */
+       {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
        {0xa0, 0x40, ZC3XX_R01D_HSYNC_0},               /* 00,1d,40,cc */
        {0xa0, 0x60, ZC3XX_R01E_HSYNC_1},               /* 00,1e,60,cc */
        {0xa0, 0x90, ZC3XX_R01F_HSYNC_2},               /* 00,1f,90,cc */
@@ -4239,23 +4241,23 @@
        {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},         /* 00,19,00,cc */
        {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID},            /* 00,87,20,cc */
        {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW},            /* 00,88,21,cc */
-       {0xaa, 0x20, 0x0002},                           /* 00,20,02,aa */
-       {0xaa, 0x21, 0x0010},                           /* 00,21,10,aa */
+       {0xaa, 0x20, 0x0004},
+       {0xaa, 0x21, 0x000c},
        {0xaa, 0x03, 0x0040},                           /* 00,03,40,aa */
-       {0xaa, 0x04, 0x0008},                           /* 00,04,08,aa */
-       {0xaa, 0x05, 0x0010},                           /* 00,05,10,aa */
+       {0xaa, 0x04, 0x0010},
+       {0xaa, 0x05, 0x000c},
        {0xaa, 0x0e, 0x0001},                           /* 00,0e,01,aa */
        {0xaa, 0x0f, 0x0000},                           /* 00,0f,00,aa */
        {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},     /* 01,90,00,cc */
-       {0xa0, 0x0f, ZC3XX_R191_EXPOSURELIMITMID},      /* 01,91,0f,cc */
-       {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW},      /* 01,92,f0,cc */
+       {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID},
+       {0xa0, 0x0c, ZC3XX_R192_EXPOSURELIMITLOW},
        {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},       /* 01,95,00,cc */
        {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},        /* 01,96,00,cc */
        {0xa0, 0x02, ZC3XX_R197_ANTIFLICKERLOW},        /* 01,97,02,cc */
        {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},              /* 01,8c,10,cc */
        {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},            /* 01,8f,20,cc */
        {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},      /* 01,a9,00,cc */
-       {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},       /* 01,aa,00,cc */
+       {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
        {0xa0, 0x40, ZC3XX_R01D_HSYNC_0},               /* 00,1d,40,cc */
        {0xa0, 0x60, ZC3XX_R01E_HSYNC_1},               /* 00,1e,60,cc */
        {0xa0, 0x90, ZC3XX_R01F_HSYNC_2},               /* 00,1f,90,cc */
@@ -6040,6 +6042,7 @@
        switch (sd->sensor) {
        case SENSOR_GC0305:
        case SENSOR_OV7620:
+       case SENSOR_PAS202B:
        case SENSOR_PO2030:
                return;
        }
@@ -6144,6 +6147,7 @@
        case SENSOR_GC0305:
        case SENSOR_HV7131B:
        case SENSOR_OV7620:
+       case SENSOR_PAS202B:
        case SENSOR_PO2030:
                return;
        }
@@ -6276,6 +6280,9 @@
                                        reg_w(gspca_dev->dev, 0x44, 0x0002);
                        }
                        break;
+               case SENSOR_PAS202B:
+                       reg_w(gspca_dev->dev, 0x00, 0x01a7);
+                       break;
                }
        }
        return 0;
@@ -6312,6 +6319,12 @@
                reg_w(dev, 0x02, 0x003b);
                reg_w(dev, 0x00, 0x0038);
                break;
+       case SENSOR_PAS202B:
+               reg_w(dev, 0x03, 0x003b);
+               reg_w(dev, 0x0c, 0x003a);
+               reg_w(dev, 0x0b, 0x0039);
+               reg_w(dev, 0x0b, 0x0038);
+               break;
        }
 }
 
@@ -6399,8 +6412,10 @@
        i2c_write(gspca_dev, 0x03, 0xaa, 0x00);
        msleep(50);
        retword = i2c_read(gspca_dev, 0x03);
-       if (retword != 0)
+       if (retword != 0) {
+               send_unknown(dev, SENSOR_PAS202B);
                return 0x0e;                    /* PAS202BCB */
+       }
 
        start_2wr_probe(dev, 0x02);             /* TAS5130C */
        i2c_write(gspca_dev, 0x01, 0xaa, 0x00);
@@ -6788,6 +6803,7 @@
        switch (sd->sensor) {
        case SENSOR_GC0305:
        case SENSOR_OV7620:
+       case SENSOR_PAS202B:
        case SENSOR_PO2030:
                gspca_dev->ctrl_dis = (1 << BRIGHTNESS_IDX);
                break;
@@ -6876,6 +6892,11 @@
                reg_w(dev, 0x02, 0x003b);
                reg_w(dev, 0x00, 0x0038);
                break;
+       case SENSOR_PAS202B:
+               reg_w(dev, 0x03, 0x003b);
+               reg_w(dev, 0x0c, 0x003a);
+               reg_w(dev, 0x0b, 0x0039);
+               break;
        }
 
        setmatrix(gspca_dev);
@@ -6887,10 +6908,6 @@
                reg_w(dev, 0x00, 0x0008);
                break;
        case SENSOR_PAS202B:
-#if 0/*fixme*/
-               reg_r(gspca_dev, ZC3XX_R002_CLOCKSELECT);
-               /* fall thru */
-#endif
        case SENSOR_GC0305:
        case SENSOR_TAS5130CXX:
                reg_r(gspca_dev, 0x0008);
@@ -6958,13 +6975,13 @@
        switch (sd->sensor) {
        case SENSOR_PO2030:
                msleep(50);
-               reg_r(gspca_dev, 0x0008);
-               reg_r(gspca_dev, 0x0007);
-               /*fall thru*/
-       case SENSOR_PAS202B:
                reg_w(dev, 0x00, 0x0007);       /* (from win traces) */
                reg_w(dev, 0x02, ZC3XX_R008_CLOCKSETTING);
                break;
+       case SENSOR_PAS202B:
+               reg_w(dev, 0x32, 0x0007);       /* (from win traces) */
+               reg_w(dev, 0x02, ZC3XX_R008_CLOCKSETTING);
+               break;
        }
        return 0;
 }


---

Patch is available at: 
http://linuxtv.org/hg/v4l-dvb/rev/aa0e795c6db35268756914d4c8682f3a2234ad2b

_______________________________________________
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to