Hi,

Kertesz Laszlo wrote:

> The program that accessed the webcam could not be stopped with its own menu
> options and eventually froze  (kill -9 made it a zombie).
> Additionally the camera does not unregister (the /dev/video0 device is
> there) if plugged out and all usb hotplugging ceases to work

Reproducible?

Please attach full "dmesg" output from booting.

Does the attached patch help?  (See [1] or the corresponding page from
the debian-kernel-handbook package for hints on testing a patched
kernel.)

Thanks,
Jonathan

[1] http://kernel-handbook.alioth.debian.org/ch-common-tasks.html
From: Jean-François Moine <moin...@free.fr>
Date: Wed, 30 Nov 2011 06:48:38 -0300
Subject: [media] gspca - zc3xx: Bad initialization of zc305/gc0303

commit 885f3cad982eabbc85c2ab052bc44453e4aca6d3 upstream.

Signed-off-by: Jean-François Moine <moin...@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mche...@redhat.com>
Signed-off-by: Jonathan Nieder <jrnie...@gmail.com>
---
 drivers/media/video/gspca/zc3xx.c |  187 +++++++++++++++++--------------------
 1 files changed, 87 insertions(+), 100 deletions(-)

diff --git a/drivers/media/video/gspca/zc3xx.c 
b/drivers/media/video/gspca/zc3xx.c
index 30ea1e479492..1048468023c1 100644
--- a/drivers/media/video/gspca/zc3xx.c
+++ b/drivers/media/video/gspca/zc3xx.c
@@ -5381,12 +5381,12 @@ static const struct usb_action tas5130c_NoFlikerScale[] 
= {
        {}
 };
 
-static const struct usb_action gc0303_InitialScale[] = {
+/* from usbvm305.inf 0ac8:305b 07/06/15 (3 - tas5130c) */
+static const struct usb_action gc0303_Initial[] = {
        {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},         /* 00,00,01,cc, */
        {0xa0, 0x02, ZC3XX_R008_CLOCKSETTING},          /* 00,08,02,cc, */
        {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},      /* 00,10,01,cc, */
-       {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},           /* 00,02,00,cc,
-                                                        * 0<->10 */
+       {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
        {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, */
@@ -5405,29 +5405,22 @@ static const struct usb_action gc0303_InitialScale[] = {
                                                         * 6<->8 */
        {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},            /* 00,87,10,cc, */
        {0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR},         /* 00,8b,98,cc, */
-       {0xaa, 0x1b, 0x0024},           /* 00,1b,24,aa, */
-       {0xdd, 0x00, 0x0080},           /* 00,00,80,dd, */
-       {0xaa, 0x1b, 0x0000},           /* 00,1b,00,aa, */
-       {0xaa, 0x13, 0x0002},           /* 00,13,02,aa, */
-       {0xaa, 0x15, 0x0004},           /* 00,15,04,aa */
-/*??   {0xaa, 0x01, 0x0000}, */
        {0xaa, 0x01, 0x0000},
        {0xaa, 0x1a, 0x0000},           /* 00,1a,00,aa, */
        {0xaa, 0x1c, 0x0017},           /* 00,1c,17,aa, */
+       {0xaa, 0x1b, 0x0000},
        {0xa0, 0x82, ZC3XX_R086_EXPTIMEHIGH},           /* 00,86,82,cc, */
        {0xa0, 0x83, ZC3XX_R087_EXPTIMEMID},            /* 00,87,83,cc, */
        {0xa0, 0x84, ZC3XX_R088_EXPTIMELOW},            /* 00,88,84,cc, */
        {0xaa, 0x05, 0x0010},           /* 00,05,10,aa, */
-       {0xaa, 0x0a, 0x0000},           /* 00,0a,00,aa, */
-       {0xaa, 0x0b, 0x00a0},           /* 00,0b,a0,aa, */
-       {0xaa, 0x0c, 0x0000},           /* 00,0c,00,aa, */
-       {0xaa, 0x0d, 0x00a0},           /* 00,0d,a0,aa, */
-       {0xaa, 0x0e, 0x0000},           /* 00,0e,00,aa, */
-       {0xaa, 0x0f, 0x00a0},           /* 00,0f,a0,aa, */
-       {0xaa, 0x10, 0x0000},           /* 00,10,00,aa, */
-       {0xaa, 0x11, 0x00a0},           /* 00,11,a0,aa, */
-/*??   {0xa0, 0x00, 0x0039},
-       {0xa1, 0x01, 0x0037}, */
+       {0xaa, 0x0a, 0x0002},
+       {0xaa, 0x0b, 0x0000},
+       {0xaa, 0x0c, 0x0002},
+       {0xaa, 0x0d, 0x0000},
+       {0xaa, 0x0e, 0x0002},
+       {0xaa, 0x0f, 0x0000},
+       {0xaa, 0x10, 0x0002},
+       {0xaa, 0x11, 0x0000},
        {0xaa, 0x16, 0x0001},           /* 00,16,01,aa, */
        {0xaa, 0x17, 0x00e8},           /* 00,17,e6,aa, (e6 -> e8) */
        {0xaa, 0x18, 0x0002},           /* 00,18,02,aa, */
@@ -5442,17 +5435,18 @@ static const struct usb_action gc0303_InitialScale[] = {
        {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},           /* 01,cb,13,cc, */
        {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},        /* 02,50,08,cc, */
        {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},          /* 03,01,08,cc, */
-       {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},           /* 01,a8,60,cc, */
+       {0xa0, 0x58, ZC3XX_R1A8_DIGITALGAIN},
        {0xa0, 0x61, ZC3XX_R116_RGAIN},                 /* 01,16,61,cc, */
        {0xa0, 0x65, ZC3XX_R118_BGAIN},                 /* 01,18,65,cc */
+       {0xaa, 0x1b, 0x0000},
        {}
 };
 
-static const struct usb_action gc0303_Initial[] = {
+static const struct usb_action gc0303_InitialScale[] = {
        {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},         /* 00,00,01,cc, */
        {0xa0, 0x02, ZC3XX_R008_CLOCKSETTING},          /* 00,08,02,cc, */
        {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},      /* 00,10,01,cc, */
-       {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},           /* 00,02,10,cc, */
+       {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
        {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, */
@@ -5471,34 +5465,26 @@ static const struct usb_action gc0303_Initial[] = {
                                                         * 8<->6 */
        {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},            /* 00,87,10,cc, */
        {0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR},         /* 00,8b,98,cc, */
-       {0xaa, 0x1b, 0x0024},           /* 00,1b,24,aa, */
-       {0xdd, 0x00, 0x0080},           /* 00,00,80,dd, */
-       {0xaa, 0x1b, 0x0000},           /* 00,1b,00,aa, */
-       {0xaa, 0x13, 0x0002},           /* 00,13,02,aa, */
-       {0xaa, 0x15, 0x0004},           /* 00,15,04,aa */
-/*??   {0xaa, 0x01, 0x0000}, */
        {0xaa, 0x01, 0x0000},
        {0xaa, 0x1a, 0x0000},           /* 00,1a,00,aa, */
        {0xaa, 0x1c, 0x0017},           /* 00,1c,17,aa, */
+       {0xaa, 0x1b, 0x0000},
        {0xa0, 0x82, ZC3XX_R086_EXPTIMEHIGH},   /* 00,86,82,cc, */
        {0xa0, 0x83, ZC3XX_R087_EXPTIMEMID},    /* 00,87,83,cc, */
        {0xa0, 0x84, ZC3XX_R088_EXPTIMELOW},    /* 00,88,84,cc, */
        {0xaa, 0x05, 0x0010},           /* 00,05,10,aa, */
-       {0xaa, 0x0a, 0x0000},           /* 00,0a,00,aa, */
-       {0xaa, 0x0b, 0x00a0},           /* 00,0b,a0,aa, */
-       {0xaa, 0x0c, 0x0000},           /* 00,0c,00,aa, */
-       {0xaa, 0x0d, 0x00a0},           /* 00,0d,a0,aa, */
-       {0xaa, 0x0e, 0x0000},           /* 00,0e,00,aa, */
-       {0xaa, 0x0f, 0x00a0},           /* 00,0f,a0,aa, */
-       {0xaa, 0x10, 0x0000},           /* 00,10,00,aa, */
-       {0xaa, 0x11, 0x00a0},           /* 00,11,a0,aa, */
-/*??   {0xa0, 0x00, 0x0039},
-       {0xa1, 0x01, 0x0037}, */
+       {0xaa, 0x0a, 0x0001},
+       {0xaa, 0x0b, 0x0000},
+       {0xaa, 0x0c, 0x0001},
+       {0xaa, 0x0d, 0x0000},
+       {0xaa, 0x0e, 0x0001},
+       {0xaa, 0x0f, 0x0000},
+       {0xaa, 0x10, 0x0001},
+       {0xaa, 0x11, 0x0000},
        {0xaa, 0x16, 0x0001},           /* 00,16,01,aa, */
        {0xaa, 0x17, 0x00e8},           /* 00,17,e6,aa (e6 -> e8) */
        {0xaa, 0x18, 0x0002},           /* 00,18,02,aa, */
        {0xaa, 0x19, 0x0088},           /* 00,19,88,aa, */
-       {0xaa, 0x20, 0x0020},           /* 00,20,20,aa, */
        {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION},      /* 01,01,b7,cc, */
        {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},      /* 00,12,05,cc, */
        {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},         /* 01,00,0d,cc, */
@@ -5508,36 +5494,37 @@ static const struct usb_action gc0303_Initial[] = {
        {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},           /* 01,cb,13,cc, */
        {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},        /* 02,50,08,cc, */
        {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},          /* 03,01,08,cc, */
-       {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},           /* 01,a8,60,cc, */
+       {0xa0, 0x58, ZC3XX_R1A8_DIGITALGAIN},
        {0xa0, 0x61, ZC3XX_R116_RGAIN},         /* 01,16,61,cc, */
        {0xa0, 0x65, ZC3XX_R118_BGAIN},         /* 01,18,65,cc */
+       {0xaa, 0x1b, 0x0000},
        {}
 };
-static const struct usb_action gc0303_50HZScale[] = {
+static const struct usb_action gc0303_50HZ[] = {
        {0xaa, 0x82, 0x0000},           /* 00,82,00,aa */
        {0xaa, 0x83, 0x0001},           /* 00,83,01,aa */
-       {0xaa, 0x84, 0x00aa},           /* 00,84,aa,aa */
+       {0xaa, 0x84, 0x0063},
        {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},     /* 01,90,00,cc, */
        {0xa0, 0x06, ZC3XX_R191_EXPOSURELIMITMID},      /* 01,91,0d,cc, */
        {0xa0, 0xa8, ZC3XX_R192_EXPOSURELIMITLOW},      /* 01,92,50,cc, */
        {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},       /* 01,95,00,cc, */
        {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},        /* 01,96,00,cc, */
-       {0xa0, 0x8e, ZC3XX_R197_ANTIFLICKERLOW},        /* 01,97,47,cc, */
+       {0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW},        /* 01,97,47,cc, */
        {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},              /* 01,8c,0e,cc, */
        {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE},            /* 01,8f,15,cc, */
        {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},      /* 01,a9,10,cc, */
-       {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},       /* 01,aa,24,cc, */
+       {0xa0, 0x48, ZC3XX_R1AA_DIGITALGAINSTEP},
        {0xa0, 0x62, ZC3XX_R01D_HSYNC_0},               /* 00,1d,62,cc, */
        {0xa0, 0x90, ZC3XX_R01E_HSYNC_1},               /* 00,1e,90,cc, */
        {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2},               /* 00,1f,c8,cc, */
        {0xa0, 0xff, ZC3XX_R020_HSYNC_3},               /* 00,20,ff,cc, */
        {0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN},            /* 01,1d,58,cc, */
        {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},     /* 01,80,42,cc, */
-       {0xa0, 0x78, ZC3XX_R18D_YTARGET},               /* 01,8d,78,cc */
+       {0xa0, 0x7f, ZC3XX_R18D_YTARGET},
        {}
 };
 
-static const struct usb_action gc0303_50HZ[] = {
+static const struct usb_action gc0303_50HZScale[] = {
        {0xaa, 0x82, 0x0000},           /* 00,82,00,aa */
        {0xaa, 0x83, 0x0003},           /* 00,83,03,aa */
        {0xaa, 0x84, 0x0054},           /* 00,84,54,aa */
@@ -5550,45 +5537,45 @@ static const struct usb_action gc0303_50HZ[] = {
        {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},              /* 01,8c,0e,cc, */
        {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE},            /* 01,8f,15,cc, */
        {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},      /* 01,a9,10,cc, */
-       {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},       /* 01,aa,24,cc, */
+       {0xa0, 0x48, ZC3XX_R1AA_DIGITALGAINSTEP},       /* 01,aa,24,cc, */
        {0xa0, 0x62, ZC3XX_R01D_HSYNC_0},               /* 00,1d,62,cc, */
        {0xa0, 0x90, ZC3XX_R01E_HSYNC_1},               /* 00,1e,90,cc, */
        {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2},               /* 00,1f,c8,cc, */
        {0xa0, 0xff, ZC3XX_R020_HSYNC_3},               /* 00,20,ff,cc, */
        {0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN},            /* 01,1d,58,cc, */
        {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},     /* 01,80,42,cc, */
-       {0xa0, 0x78, ZC3XX_R18D_YTARGET},               /* 01,8d,78,cc */
-       {}
-};
-
-static const struct usb_action gc0303_60HZScale[] = {
-       {0xaa, 0x82, 0x0000},           /* 00,82,00,aa */
-       {0xaa, 0x83, 0x0001},           /* 00,83,01,aa */
-       {0xaa, 0x84, 0x0062},           /* 00,84,62,aa */
-       {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},     /* 01,90,00,cc, */
-       {0xa0, 0x05, ZC3XX_R191_EXPOSURELIMITMID},      /* 01,91,05,cc, */
-       {0xa0, 0x88, ZC3XX_R192_EXPOSURELIMITLOW},      /* 01,92,88,cc, */
-       {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},       /* 01,95,00,cc, */
-       {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},        /* 01,96,00,cc, */
-       {0xa0, 0x3b, ZC3XX_R197_ANTIFLICKERLOW},        /* 01,97,3b,cc, */
-       {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},              /* 01,8c,0e,cc, */
-       {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE},            /* 01,8f,15,cc, */
-       {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},      /* 01,a9,10,cc, */
-       {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},       /* 01,aa,24,cc, */
-       {0xa0, 0x62, ZC3XX_R01D_HSYNC_0},               /* 00,1d,62,cc, */
-       {0xa0, 0x90, ZC3XX_R01E_HSYNC_1},               /* 00,1e,90,cc, */
-       {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2},               /* 00,1f,c8,cc, */
-       {0xa0, 0xff, ZC3XX_R020_HSYNC_3},               /* 00,20,ff,cc, */
-       {0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN},            /* 01,1d,58,cc, */
-       {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},     /* 01,80,42,cc, */
-       {0xa0, 0x78, ZC3XX_R18D_YTARGET},               /* 01,8d,78,cc */
+       {0xa0, 0x7f, ZC3XX_R18D_YTARGET},
        {}
 };
 
 static const struct usb_action gc0303_60HZ[] = {
        {0xaa, 0x82, 0x0000},           /* 00,82,00,aa */
-       {0xaa, 0x83, 0x0002},           /* 00,83,02,aa */
-       {0xaa, 0x84, 0x00c4},           /* 00,84,c4,aa */
+       {0xaa, 0x83, 0x0000},
+       {0xaa, 0x84, 0x003b},
+       {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},     /* 01,90,00,cc, */
+       {0xa0, 0x05, ZC3XX_R191_EXPOSURELIMITMID},      /* 01,91,05,cc, */
+       {0xa0, 0x88, ZC3XX_R192_EXPOSURELIMITLOW},      /* 01,92,88,cc, */
+       {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},       /* 01,95,00,cc, */
+       {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},        /* 01,96,00,cc, */
+       {0xa0, 0x3b, ZC3XX_R197_ANTIFLICKERLOW},        /* 01,97,3b,cc, */
+       {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},              /* 01,8c,0e,cc, */
+       {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE},            /* 01,8f,15,cc, */
+       {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},      /* 01,a9,10,cc, */
+       {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},       /* 01,aa,24,cc, */
+       {0xa0, 0x62, ZC3XX_R01D_HSYNC_0},               /* 00,1d,62,cc, */
+       {0xa0, 0x90, ZC3XX_R01E_HSYNC_1},               /* 00,1e,90,cc, */
+       {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2},               /* 00,1f,c8,cc, */
+       {0xa0, 0xff, ZC3XX_R020_HSYNC_3},               /* 00,20,ff,cc, */
+       {0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN},            /* 01,1d,58,cc, */
+       {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},     /* 01,80,42,cc, */
+       {0xa0, 0x80, ZC3XX_R18D_YTARGET},
+       {}
+};
+
+static const struct usb_action gc0303_60HZScale[] = {
+       {0xaa, 0x82, 0x0000},           /* 00,82,00,aa */
+       {0xaa, 0x83, 0x0000},
+       {0xaa, 0x84, 0x0076},
        {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},     /* 01,90,00,cc, */
        {0xa0, 0x0b, ZC3XX_R191_EXPOSURELIMITMID},      /* 01,1,0b,cc, */
        {0xa0, 0x10, ZC3XX_R192_EXPOSURELIMITLOW},      /* 01,2,10,cc, */
@@ -5605,29 +5592,7 @@ static const struct usb_action gc0303_60HZ[] = {
        {0xa0, 0xff, ZC3XX_R020_HSYNC_3},               /* 00,0,ff,cc, */
        {0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN},            /* 01,d,58,cc, */
        {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},     /* 01,80,42,cc, */
-       {0xa0, 0x78, ZC3XX_R18D_YTARGET},               /* 01,d,78,cc */
-       {}
-};
-
-static const struct usb_action gc0303_NoFlikerScale[] = {
-       {0xa0, 0x0c, ZC3XX_R100_OPERATIONMODE},         /* 01,00,0c,cc, */
-       {0xaa, 0x82, 0x0000},           /* 00,82,00,aa */
-       {0xaa, 0x83, 0x0000},           /* 00,83,00,aa */
-       {0xaa, 0x84, 0x0020},           /* 00,84,20,aa */
-       {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},     /* 01,0,00,cc, */
-       {0xa0, 0x05, ZC3XX_R191_EXPOSURELIMITMID},      /* 01,91,05,cc, */
-       {0xa0, 0x88, ZC3XX_R192_EXPOSURELIMITLOW},      /* 01,92,88,cc, */
-       {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},       /* 01,95,00,cc, */
-       {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},        /* 01,96,00,cc, */
-       {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW},        /* 01,97,10,cc, */
-       {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},              /* 01,8c,0e,cc, */
-       {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE},            /* 01,8f,15,cc, */
-       {0xa0, 0x62, ZC3XX_R01D_HSYNC_0},               /* 00,1d,62,cc, */
-       {0xa0, 0x90, ZC3XX_R01E_HSYNC_1},               /* 00,1e,90,cc, */
-       {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2},               /* 00,1f,c8,cc, */
-       {0xa0, 0xff, ZC3XX_R020_HSYNC_3},               /* 00,20,ff,cc, */
-       {0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN},            /* 01,1d,58,cc, */
-       {0xa0, 0x03, ZC3XX_R180_AUTOCORRECTENABLE},     /* 01,80,03,cc */
+       {0xa0, 0x80, ZC3XX_R18D_YTARGET},
        {}
 };
 
@@ -5636,9 +5601,31 @@ static const struct usb_action gc0303_NoFliker[] = {
        {0xaa, 0x82, 0x0000},           /* 00,82,00,aa */
        {0xaa, 0x83, 0x0000},           /* 00,83,00,aa */
        {0xaa, 0x84, 0x0020},           /* 00,84,20,aa */
+       {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},     /* 01,0,00,cc, */
+       {0xa0, 0x00, ZC3XX_R191_EXPOSURELIMITMID},
+       {0xa0, 0x48, ZC3XX_R192_EXPOSURELIMITLOW},
+       {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},       /* 01,95,00,cc, */
+       {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},        /* 01,96,00,cc, */
+       {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW},        /* 01,97,10,cc, */
+       {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},              /* 01,8c,0e,cc, */
+       {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE},            /* 01,8f,15,cc, */
+       {0xa0, 0x62, ZC3XX_R01D_HSYNC_0},               /* 00,1d,62,cc, */
+       {0xa0, 0x90, ZC3XX_R01E_HSYNC_1},               /* 00,1e,90,cc, */
+       {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2},               /* 00,1f,c8,cc, */
+       {0xa0, 0xff, ZC3XX_R020_HSYNC_3},               /* 00,20,ff,cc, */
+       {0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN},            /* 01,1d,58,cc, */
+       {0xa0, 0x03, ZC3XX_R180_AUTOCORRECTENABLE},     /* 01,80,03,cc */
+       {}
+};
+
+static const struct usb_action gc0303_NoFlikerScale[] = {
+       {0xa0, 0x0c, ZC3XX_R100_OPERATIONMODE},         /* 01,00,0c,cc, */
+       {0xaa, 0x82, 0x0000},           /* 00,82,00,aa */
+       {0xaa, 0x83, 0x0000},           /* 00,83,00,aa */
+       {0xaa, 0x84, 0x0020},           /* 00,84,20,aa */
        {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},     /* 01,90,00,cc, */
-       {0xa0, 0x0b, ZC3XX_R191_EXPOSURELIMITMID},      /* 01,91,0b,cc, */
-       {0xa0, 0x10, ZC3XX_R192_EXPOSURELIMITLOW},      /* 01,92,10,cc, */
+       {0xa0, 0x00, ZC3XX_R191_EXPOSURELIMITMID},
+       {0xa0, 0x48, ZC3XX_R192_EXPOSURELIMITLOW},
        {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},       /* 01,95,00,cc, */
        {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},        /* 01,96,00,cc, */
        {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW},        /* 01,97,10,cc, */
@@ -5809,7 +5796,7 @@ static void setmatrix(struct gspca_dev *gspca_dev)
        static const u8 tas5130c_matrix[9] =
                {0x68, 0xec, 0xec, 0xec, 0x68, 0xec, 0xec, 0xec, 0x68};
        static const u8 gc0303_matrix[9] =
-               {0x7b, 0xea, 0xea, 0xea, 0x7b, 0xea, 0xea, 0xea, 0x7b};
+               {0x6c, 0xea, 0xea, 0xea, 0x6c, 0xea, 0xea, 0xea, 0x6c};
        static const u8 *matrix_tb[SENSOR_MAX] = {
                [SENSOR_ADCM2700] =     adcm2700_matrix,
                [SENSOR_CS2102] =       ov7620_matrix,
-- 
1.7.9

Reply via email to