V4L/DVB: gspca - zc3xx: Redefine the exchanges of sensor mt9v111 (mi0360soc)
authorJean-François Moine <moinejf@free.fr>
Wed, 4 Aug 2010 10:25:12 +0000 (07:25 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 9 Aug 2010 02:43:02 +0000 (23:43 -0300)
The exchanges for sensor mt9v111 are different with bridges zc301 and zc303.
The exchanges for the bridge zc303 were those of the bad named tas5130ck.
These mt9v111 exchanges have been adjusted from the ms-Windows public files
vm30x.inf (for 0ac8:301b) and usbvm303.inf (for 0ac8:303b).

Signed-off-by: Jean-François Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/gspca/zc3xx.c

index 5c91130..0666038 100644 (file)
@@ -52,11 +52,16 @@ struct sd {
 #define QUALITY_MAX 80
 #define QUALITY_DEF 70
 
+       u8 bridge;
        u8 sensor;              /* Type of image sensor chip */
        u16 chip_revision;
 
        u8 jpeg_hdr[JPEG_HDR_SZ];
 };
+enum bridges {
+       BRIDGE_ZC301,
+       BRIDGE_ZC303,
+};
 enum sensors {
        SENSOR_ADCM2700,
        SENSOR_CS2102,
@@ -67,14 +72,14 @@ enum sensors {
        SENSOR_HV7131R,
        SENSOR_ICM105A,
        SENSOR_MC501CB,
-       SENSOR_MI0360SOC,       /* = MT9V111 */
+       SENSOR_MT9V111_1,       /* (mi360soc) zc301 */
+       SENSOR_MT9V111_3,       /* (mi360soc) zc303 */
        SENSOR_OV7620,          /* OV7648 - same values */
        SENSOR_OV7630C,
        SENSOR_PAS106,
        SENSOR_PAS202B,
        SENSOR_PB0330,
        SENSOR_PO2030,
-       SENSOR_TAS5130CK,
        SENSOR_TAS5130C,
        SENSOR_TAS5130C_VF0250,
        SENSOR_MAX
@@ -4249,8 +4254,8 @@ static const struct usb_action pas202b_NoFlikerScale[] = {
        {}
 };
 
-/* mi0360soc and pb0330 from vm30x.inf for 0ac8:301b and 0ac8:303b 07/02/13 */
-static const struct usb_action mi0360soc_Initial[] = { /* 640x480 */
+/* mt9v111 (mi0360soc) and pb0330 from vm30x.inf 0ac8:301b 07/02/13 */
+static const struct usb_action mt9v111_1_Initial[] = { /* 640x480 */
        {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
        {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
        {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
@@ -4261,14 +4266,14 @@ static const struct usb_action mi0360soc_Initial[] = {  /* 640x480 */
        {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
        {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
        {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
-       {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},      /*jfm: was 03*/
-/*     {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, */
+       {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
        {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
        {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
        {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
        {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
        {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
        {0xdd, 0x00, 0x0200},
+       {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
        {0xaa, 0x01, 0x0001},
        {0xaa, 0x06, 0x0000},
        {0xaa, 0x08, 0x0483},
@@ -4278,18 +4283,18 @@ static const struct usb_action mi0360soc_Initial[] = {  /* 640x480 */
        {0xaa, 0x03, 0x01e5},                   /*jfm: was 01e7*/
        {0xaa, 0x04, 0x0285},                   /*jfm: was 0287*/
        {0xaa, 0x07, 0x3002},
-       {0xaa, 0x20, 0x5100},                   /*jfm: was 1100*/
-       {0xaa, 0x35, 0x507f},                   /*jfm: was 0050*/
+       {0xaa, 0x20, 0x5100},
+       {0xaa, 0x35, 0x507f},
        {0xaa, 0x30, 0x0005},
        {0xaa, 0x31, 0x0000},
        {0xaa, 0x58, 0x0078},
        {0xaa, 0x62, 0x0411},
-       {0xaa, 0x2b, 0x0028},
+       {0xaa, 0x2b, 0x007f},
        {0xaa, 0x2c, 0x007f},                   /*jfm: was 0030*/
        {0xaa, 0x2d, 0x007f},                   /*jfm: was 0030*/
        {0xaa, 0x2e, 0x007f},                   /*jfm: was 0030*/
        {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},
-       {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /*jfm: was 37*/
+       {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION},
        {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
        {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
        {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
@@ -4299,12 +4304,12 @@ static const struct usb_action mi0360soc_Initial[] = {  /* 640x480 */
        {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
        {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
        {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
-       {0xa0, 0x6c, ZC3XX_R18D_YTARGET},       /* jfm: was 78 */
+       {0xa0, 0x6c, ZC3XX_R18D_YTARGET},
        {0xa0, 0x61, ZC3XX_R116_RGAIN},
        {0xa0, 0x65, ZC3XX_R118_BGAIN},
        {}
 };
-static const struct usb_action mi0360soc_InitialScale[] = {    /* 320x240 */
+static const struct usb_action mt9v111_1_InitialScale[] = {    /* 320x240 */
        {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
        {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
        {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
@@ -4315,14 +4320,14 @@ static const struct usb_action mi0360soc_InitialScale[] = {     /* 320x240 */
        {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
        {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
        {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
-       {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},      /*jfm: was 03*/
-/*     {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, */
+       {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
        {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
        {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
        {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
        {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
        {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
        {0xdd, 0x00, 0x0200},
+       {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
        {0xaa, 0x01, 0x0001},
        {0xaa, 0x06, 0x0000},
        {0xaa, 0x08, 0x0483},
@@ -4332,7 +4337,7 @@ static const struct usb_action mi0360soc_InitialScale[] = {       /* 320x240 */
        {0xaa, 0x03, 0x01e7},
        {0xaa, 0x04, 0x0287},
        {0xaa, 0x07, 0x3002},
-       {0xaa, 0x20, 0x5100},                   /*jfm: was 1100*/
+       {0xaa, 0x20, 0x5100},
        {0xaa, 0x35, 0x007f},                   /*jfm: was 0050*/
        {0xaa, 0x30, 0x0005},
        {0xaa, 0x31, 0x0000},
@@ -4343,7 +4348,7 @@ static const struct usb_action mi0360soc_InitialScale[] = {       /* 320x240 */
        {0xaa, 0x2d, 0x007f},                   /*jfm: was 30*/
        {0xaa, 0x2e, 0x007f},                   /*jfm: was 28*/
        {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},
-       {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION},      /*jfm: was 37*/
+       {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION},
        {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
        {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
        {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
@@ -4353,12 +4358,12 @@ static const struct usb_action mi0360soc_InitialScale[] = {     /* 320x240 */
        {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
        {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
        {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
-       {0xa0, 0x6c, ZC3XX_R18D_YTARGET},       /*jfm: was 78*/
+       {0xa0, 0x6c, ZC3XX_R18D_YTARGET},
        {0xa0, 0x61, ZC3XX_R116_RGAIN},
        {0xa0, 0x65, ZC3XX_R118_BGAIN},
        {}
 };
-static const struct usb_action mi360soc_AE50HZ[] = {
+static const struct usb_action mt9v111_1_AE50HZ[] = {
        {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
        {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
        {0xbb, 0x00, 0x0562},
@@ -4381,7 +4386,7 @@ static const struct usb_action mi360soc_AE50HZ[] = {
        {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
        {}
 };
-static const struct usb_action mi360soc_AE50HZScale[] = {
+static const struct usb_action mt9v111_1_AE50HZScale[] = {
        {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
        {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
        {0xbb, 0x00, 0x0509},
@@ -4403,11 +4408,11 @@ static const struct usb_action mi360soc_AE50HZScale[] = {
        {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
        {}
 };
-static const struct usb_action mi360soc_AE60HZ[] = {
+static const struct usb_action mt9v111_1_AE60HZ[] = {
        {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
        {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
-       {0xbb, 0x00, 0x053d},
-       {0xbb, 0x01, 0x096e},
+       {0xaa, 0x05, 0x003d},
+       {0xaa, 0x09, 0x016e},
        {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
        {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
        {0xa0, 0xdd, ZC3XX_R192_EXPOSURELIMITLOW},
@@ -4426,7 +4431,7 @@ static const struct usb_action mi360soc_AE60HZ[] = {
        {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
        {}
 };
-static const struct usb_action mi360soc_AE60HZScale[] = {
+static const struct usb_action mt9v111_1_AE60HZScale[] = {
        {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
        {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
        {0xbb, 0x00, 0x0509},
@@ -4448,7 +4453,7 @@ static const struct usb_action mi360soc_AE60HZScale[] = {
        {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
        {}
 };
-static const struct usb_action mi360soc_AENoFliker[] = {
+static const struct usb_action mt9v111_1_AENoFliker[] = {
        {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
        {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
        {0xbb, 0x00, 0x0509},
@@ -4471,7 +4476,7 @@ static const struct usb_action mi360soc_AENoFliker[] = {
        {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
        {}
 };
-static const struct usb_action mi360soc_AENoFlikerScale[] = {
+static const struct usb_action mt9v111_1_AENoFlikerScale[] = {
        {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
        {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
        {0xbb, 0x00, 0x0534},
@@ -4494,6 +4499,251 @@ static const struct usb_action mi360soc_AENoFlikerScale[] = {
        {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
        {}
 };
+/* from usbvm303.inf 0ac8:303b 07/03/25 (3 - tas5130c) */
+static const struct usb_action mt9v111_3_Initial[] = {
+       {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
+       {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
+       {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
+       {0xa0, 0x04, ZC3XX_R002_CLOCKSELECT},
+       {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
+       {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
+       {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
+       {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
+       {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
+       {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
+       {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
+       {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
+       {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
+       {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
+       {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
+       {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
+       {0xdd, 0x00, 0x0200},
+       {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
+       {0xaa, 0x01, 0x0001},           /* select IFP/SOC registers */
+       {0xaa, 0x06, 0x0000},           /* operating mode control */
+       {0xaa, 0x08, 0x0483},           /* output format control */
+                                       /* H red first, V red or blue first,
+                                        * raw Bayer, auto flicker */
+       {0xaa, 0x01, 0x0004},           /* select sensor core registers */
+       {0xaa, 0x08, 0x0006},           /* row start */
+       {0xaa, 0x02, 0x0011},           /* column start */
+       {0xaa, 0x03, 0x01e5},           /* window height - 1 */
+       {0xaa, 0x04, 0x0285},           /* window width - 1 */
+       {0xaa, 0x07, 0x3002},           /* output control */
+       {0xaa, 0x20, 0x1100},           /* read mode: bits 8 & 12 (?) */
+       {0xaa, 0x35, 0x007f},           /* global gain */
+       {0xaa, 0x30, 0x0005},
+       {0xaa, 0x31, 0x0000},
+       {0xaa, 0x58, 0x0078},
+       {0xaa, 0x62, 0x0411},
+       {0xaa, 0x2b, 0x007f},           /* green1 gain */
+       {0xaa, 0x2c, 0x007f},           /* blue gain */
+       {0xaa, 0x2d, 0x007f},           /* red gain */
+       {0xaa, 0x2e, 0x007f},           /* green2 gain */
+       {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},
+       {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},
+       {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
+       {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
+       {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
+       {0xa0, 0x00, 0x01ad},
+       {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
+       {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
+       {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
+       {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
+       {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
+       {0xa0, 0x80, ZC3XX_R18D_YTARGET},
+       {0xa0, 0x61, ZC3XX_R116_RGAIN},
+       {0xa0, 0x65, ZC3XX_R118_BGAIN},
+       {}
+};
+static const struct usb_action mt9v111_3_InitialScale[] = {
+       {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
+       {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
+       {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
+       {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
+       {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
+       {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
+       {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
+       {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
+       {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
+       {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
+       {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
+       {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
+       {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
+       {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
+       {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
+       {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
+       {0xdd, 0x00, 0x0200},
+       {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
+       {0xaa, 0x01, 0x0001},
+       {0xaa, 0x06, 0x0000},
+       {0xaa, 0x08, 0x0483},
+       {0xaa, 0x01, 0x0004},
+       {0xaa, 0x08, 0x0006},
+       {0xaa, 0x02, 0x0011},
+       {0xaa, 0x03, 0x01e7},
+       {0xaa, 0x04, 0x0287},
+       {0xaa, 0x07, 0x3002},
+       {0xaa, 0x20, 0x1100},
+       {0xaa, 0x35, 0x007f},
+       {0xaa, 0x30, 0x0005},
+       {0xaa, 0x31, 0x0000},
+       {0xaa, 0x58, 0x0078},
+       {0xaa, 0x62, 0x0411},
+       {0xaa, 0x2b, 0x007f},
+       {0xaa, 0x2c, 0x007f},
+       {0xaa, 0x2d, 0x007f},
+       {0xaa, 0x2e, 0x007f},
+       {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},
+       {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},
+       {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
+       {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
+       {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
+       {0xa0, 0x00, 0x01ad},
+       {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
+       {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
+       {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
+       {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
+       {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
+       {0xa0, 0x80, ZC3XX_R18D_YTARGET},
+       {0xa0, 0x61, ZC3XX_R116_RGAIN},
+       {0xa0, 0x65, ZC3XX_R118_BGAIN},
+       {}
+};
+static const struct usb_action mt9v111_3_AE50HZ[] = {
+       {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
+       {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
+       {0xaa, 0x05, 0x0009},           /* horizontal blanking */
+       {0xaa, 0x09, 0x01ce},           /* shutter width */
+       {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
+       {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
+       {0xa0, 0xd2, ZC3XX_R192_EXPOSURELIMITLOW},
+       {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
+       {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
+       {0xa0, 0x9a, ZC3XX_R197_ANTIFLICKERLOW},
+       {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
+       {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
+       {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
+       {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
+       {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
+       {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1},
+       {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2},
+       {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
+       {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
+       {}
+};
+static const struct usb_action mt9v111_3_AE50HZScale[] = {
+       {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
+       {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
+       {0xaa, 0x05, 0x0009},
+       {0xaa, 0x09, 0x01ce},
+       {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
+       {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
+       {0xa0, 0xd2, ZC3XX_R192_EXPOSURELIMITLOW},
+       {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
+       {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
+       {0xa0, 0x9a, ZC3XX_R197_ANTIFLICKERLOW},
+       {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
+       {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
+       {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
+       {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
+       {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
+       {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1},
+       {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2},
+       {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
+       {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
+       {}
+};
+static const struct usb_action mt9v111_3_AE60HZ[] = {
+       {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
+       {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
+       {0xaa, 0x05, 0x0009},
+       {0xaa, 0x09, 0x0083},
+       {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
+       {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
+       {0xa0, 0x8f, ZC3XX_R192_EXPOSURELIMITLOW},
+       {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
+       {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
+       {0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW},
+       {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
+       {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
+       {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
+       {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
+       {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
+       {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1},
+       {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2},
+       {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
+       {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
+       {}
+};
+static const struct usb_action mt9v111_3_AE60HZScale[] = {
+       {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
+       {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
+       {0xaa, 0x05, 0x0009},
+       {0xaa, 0x09, 0x0083},
+       {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
+       {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
+       {0xa0, 0x8f, ZC3XX_R192_EXPOSURELIMITLOW},
+       {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
+       {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
+       {0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW},
+       {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
+       {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
+       {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
+       {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
+       {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
+       {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1},
+       {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2},
+       {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
+       {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
+       {}
+};
+static const struct usb_action mt9v111_3_AENoFliker[] = {
+       {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
+       {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
+       {0xaa, 0x05, 0x0034},
+       {0xaa, 0x09, 0x0260},
+       {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
+       {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
+       {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW},
+       {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
+       {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
+       {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW},
+       {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
+       {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
+       {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
+       {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
+       {0xa0, 0x34, ZC3XX_R01D_HSYNC_0},
+       {0xa0, 0x60, ZC3XX_R01E_HSYNC_1},
+       {0xa0, 0x90, ZC3XX_R01F_HSYNC_2},
+       {0xa0, 0xe0, ZC3XX_R020_HSYNC_3},
+       {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
+       {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
+       {}
+};
+static const struct usb_action mt9v111_3_AENoFlikerScale[] = {
+       {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
+       {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
+       {0xaa, 0x05, 0x0034},
+       {0xaa, 0x09, 0x0260},
+       {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
+       {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
+       {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW},
+       {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
+       {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
+       {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW},
+       {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
+       {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
+       {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
+       {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
+       {0xa0, 0x34, ZC3XX_R01D_HSYNC_0},
+       {0xa0, 0x60, ZC3XX_R01E_HSYNC_1},
+       {0xa0, 0x90, ZC3XX_R01F_HSYNC_2},
+       {0xa0, 0xe0, ZC3XX_R020_HSYNC_3},
+       {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
+       {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
+       {}
+};
 
 static const struct usb_action pb0330_Initial[] = {    /* 640x480 */
        {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
@@ -4936,418 +5186,6 @@ static const struct usb_action po2030_NoFliker[] = {
        {}
 };
 
-/* TEST */
-static const struct usb_action tas5130cK_InitialScale[] = {
-       {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
-       {0xa0, 0x01, 0x003b},
-       {0xa0, 0x0e, 0x003a},
-       {0xa0, 0x01, 0x0038},
-       {0xa0, 0x0b, 0x0039},
-       {0xa0, 0x00, 0x0038},
-       {0xa0, 0x0b, 0x0039},
-       {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
-       {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
-       {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
-       {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
-       {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
-       {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
-       {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
-       {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
-       {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
-       {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
-       {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
-       {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
-       {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
-       {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
-       {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
-       {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
-       {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
-       {0xa0, 0x01, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x06, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x08, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x83, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x04, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x01, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x08, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x06, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x02, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x11, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x03, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0xE7, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x01, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x04, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x87, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x02, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x07, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x30, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x51, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x35, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x7F, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x30, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x05, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x31, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x58, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x78, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x62, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x11, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x04, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x2B, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x7f, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x2c, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x7f, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x2D, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x7f, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x2e, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x7f, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},
-       {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION},
-       {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
-       {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
-       {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
-       {0xa0, 0x09, 0x01ad},
-       {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
-       {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
-       {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
-       {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
-       {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
-       {0xa0, 0x6c, ZC3XX_R18D_YTARGET},
-       {0xa0, 0x61, ZC3XX_R116_RGAIN},
-       {0xa0, 0x65, ZC3XX_R118_BGAIN},
-       {0xa0, 0x09, 0x01ad},
-       {0xa0, 0x15, 0x01ae},
-       {0xa0, 0x4c, ZC3XX_R10A_RGB00}, /* matrix */
-       {0xa0, 0xf1, ZC3XX_R10B_RGB01},
-       {0xa0, 0x03, ZC3XX_R10C_RGB02},
-       {0xa0, 0xfe, ZC3XX_R10D_RGB10},
-       {0xa0, 0x51, ZC3XX_R10E_RGB11},
-       {0xa0, 0xf1, ZC3XX_R10F_RGB12},
-       {0xa0, 0xec, ZC3XX_R110_RGB20},
-       {0xa0, 0x03, ZC3XX_R111_RGB21},
-       {0xa0, 0x51, ZC3XX_R112_RGB22},
-       {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
-       {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00},   /* sharpness+ */
-       {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05},   /* sharpness- */
-       {0xa0, 0x38, ZC3XX_R120_GAMMA00},       /* gamma > 5 */
-       {0xa0, 0x51, ZC3XX_R121_GAMMA01},
-       {0xa0, 0x6e, ZC3XX_R122_GAMMA02},
-       {0xa0, 0x8c, ZC3XX_R123_GAMMA03},
-       {0xa0, 0xa2, ZC3XX_R124_GAMMA04},
-       {0xa0, 0xb6, ZC3XX_R125_GAMMA05},
-       {0xa0, 0xc8, ZC3XX_R126_GAMMA06},
-       {0xa0, 0xd6, ZC3XX_R127_GAMMA07},
-       {0xa0, 0xe2, ZC3XX_R128_GAMMA08},
-       {0xa0, 0xed, ZC3XX_R129_GAMMA09},
-       {0xa0, 0xf5, ZC3XX_R12A_GAMMA0A},
-       {0xa0, 0xfc, ZC3XX_R12B_GAMMA0B},
-       {0xa0, 0xff, ZC3XX_R12C_GAMMA0C},
-       {0xa0, 0xff, ZC3XX_R12D_GAMMA0D},
-       {0xa0, 0xff, ZC3XX_R12E_GAMMA0E},
-       {0xa0, 0xff, ZC3XX_R12F_GAMMA0F},
-       {0xa0, 0x12, ZC3XX_R130_GAMMA10},
-       {0xa0, 0x1b, ZC3XX_R131_GAMMA11},
-       {0xa0, 0x1d, ZC3XX_R132_GAMMA12},
-       {0xa0, 0x1a, ZC3XX_R133_GAMMA13},
-       {0xa0, 0x15, ZC3XX_R134_GAMMA14},
-       {0xa0, 0x12, ZC3XX_R135_GAMMA15},
-       {0xa0, 0x0f, ZC3XX_R136_GAMMA16},
-       {0xa0, 0x0d, ZC3XX_R137_GAMMA17},
-       {0xa0, 0x0b, ZC3XX_R138_GAMMA18},
-       {0xa0, 0x09, ZC3XX_R139_GAMMA19},
-       {0xa0, 0x07, ZC3XX_R13A_GAMMA1A},
-       {0xa0, 0x05, ZC3XX_R13B_GAMMA1B},
-       {0xa0, 0x00, ZC3XX_R13C_GAMMA1C},
-       {0xa0, 0x00, ZC3XX_R13D_GAMMA1D},
-       {0xa0, 0x00, ZC3XX_R13E_GAMMA1E},
-       {0xa0, 0x01, ZC3XX_R13F_GAMMA1F},
-       {0xa0, 0x4c, ZC3XX_R10A_RGB00}, /* matrix */
-       {0xa0, 0xf1, ZC3XX_R10B_RGB01},
-       {0xa0, 0x03, ZC3XX_R10C_RGB02},
-       {0xa0, 0xfe, ZC3XX_R10D_RGB10},
-       {0xa0, 0x51, ZC3XX_R10E_RGB11},
-       {0xa0, 0xf1, ZC3XX_R10F_RGB12},
-       {0xa0, 0xec, ZC3XX_R110_RGB20},
-       {0xa0, 0x03, ZC3XX_R111_RGB21},
-       {0xa0, 0x51, ZC3XX_R112_RGB22},
-       {0xa0, 0x10, ZC3XX_R180_AUTOCORRECTENABLE},
-       {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
-       {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
-       {0xa0, 0x05, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x09, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x09, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x34, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x01, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
-       {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
-       {0xa0, 0xd2, ZC3XX_R192_EXPOSURELIMITLOW},
-       {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
-       {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
-       {0xa0, 0x9a, ZC3XX_R197_ANTIFLICKERLOW},
-       {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
-       {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
-       {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
-       {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
-       {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
-       {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1},
-       {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2},
-       {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
-       {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
-       {0xa0, 0x09, 0x01ad},
-       {0xa0, 0x15, 0x01ae},
-       {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE},
-       {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
-       {}
-};
-
-static const struct usb_action tas5130cK_Initial[] = {
-       {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
-       {0xa0, 0x01, 0x003b},
-       {0xa0, 0x0e, 0x003a},
-       {0xa0, 0x01, 0x0038},
-       {0xa0, 0x0b, 0x0039},
-       {0xa0, 0x00, 0x0038},
-       {0xa0, 0x0b, 0x0039},
-       {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
-       {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
-       {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
-       {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
-       {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
-       {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
-       {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
-       {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
-       {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
-       {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
-       {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
-       {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
-       {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
-       {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
-       {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
-       {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
-       {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
-       {0xa0, 0x01, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x06, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x08, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x83, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x04, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x01, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x08, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x06, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x02, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x11, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x03, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0xe5, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x01, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x04, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x85, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x02, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x07, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x30, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x51, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x35, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x7F, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x50, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x30, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x05, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x31, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x58, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x78, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x62, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x11, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x04, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x2B, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x7f, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x2C, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x7F, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x2D, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x7f, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x2e, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x7f, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},
-       {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION},
-       {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
-       {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
-       {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
-       {0xa0, 0x09, 0x01ad},
-       {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
-       {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
-       {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
-       {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
-       {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
-       {0xa0, 0x6c, ZC3XX_R18D_YTARGET},
-       {0xa0, 0x61, ZC3XX_R116_RGAIN},
-       {0xa0, 0x65, ZC3XX_R118_BGAIN},
-       {0xa0, 0x09, 0x01ad},
-       {0xa0, 0x15, 0x01ae},
-       {0xa0, 0x4c, ZC3XX_R10A_RGB00}, /* matrix */
-       {0xa0, 0xf1, ZC3XX_R10B_RGB01},
-       {0xa0, 0x03, ZC3XX_R10C_RGB02},
-       {0xa0, 0xfe, ZC3XX_R10D_RGB10},
-       {0xa0, 0x51, ZC3XX_R10E_RGB11},
-       {0xa0, 0xf1, ZC3XX_R10F_RGB12},
-       {0xa0, 0xec, ZC3XX_R110_RGB20},
-       {0xa0, 0x03, ZC3XX_R111_RGB21},
-       {0xa0, 0x51, ZC3XX_R112_RGB22},
-       {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
-       {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00},   /* sharpness+ */
-       {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05},   /* sharpness- */
-       {0xa0, 0x38, ZC3XX_R120_GAMMA00},       /* gamma > 5 */
-       {0xa0, 0x51, ZC3XX_R121_GAMMA01},
-       {0xa0, 0x6e, ZC3XX_R122_GAMMA02},
-       {0xa0, 0x8c, ZC3XX_R123_GAMMA03},
-       {0xa0, 0xa2, ZC3XX_R124_GAMMA04},
-       {0xa0, 0xb6, ZC3XX_R125_GAMMA05},
-       {0xa0, 0xc8, ZC3XX_R126_GAMMA06},
-       {0xa0, 0xd6, ZC3XX_R127_GAMMA07},
-       {0xa0, 0xe2, ZC3XX_R128_GAMMA08},
-       {0xa0, 0xed, ZC3XX_R129_GAMMA09},
-       {0xa0, 0xf5, ZC3XX_R12A_GAMMA0A},
-       {0xa0, 0xfc, ZC3XX_R12B_GAMMA0B},
-       {0xa0, 0xff, ZC3XX_R12C_GAMMA0C},
-       {0xa0, 0xff, ZC3XX_R12D_GAMMA0D},
-       {0xa0, 0xff, ZC3XX_R12E_GAMMA0E},
-       {0xa0, 0xff, ZC3XX_R12F_GAMMA0F},
-       {0xa0, 0x12, ZC3XX_R130_GAMMA10},
-       {0xa0, 0x1b, ZC3XX_R131_GAMMA11},
-       {0xa0, 0x1d, ZC3XX_R132_GAMMA12},
-       {0xa0, 0x1a, ZC3XX_R133_GAMMA13},
-       {0xa0, 0x15, ZC3XX_R134_GAMMA14},
-       {0xa0, 0x12, ZC3XX_R135_GAMMA15},
-       {0xa0, 0x0f, ZC3XX_R136_GAMMA16},
-       {0xa0, 0x0d, ZC3XX_R137_GAMMA17},
-       {0xa0, 0x0b, ZC3XX_R138_GAMMA18},
-       {0xa0, 0x09, ZC3XX_R139_GAMMA19},
-       {0xa0, 0x07, ZC3XX_R13A_GAMMA1A},
-       {0xa0, 0x05, ZC3XX_R13B_GAMMA1B},
-       {0xa0, 0x00, ZC3XX_R13C_GAMMA1C},
-       {0xa0, 0x00, ZC3XX_R13D_GAMMA1D},
-       {0xa0, 0x00, ZC3XX_R13E_GAMMA1E},
-       {0xa0, 0x01, ZC3XX_R13F_GAMMA1F},
-       {0xa0, 0x4c, ZC3XX_R10A_RGB00}, /* matrix */
-       {0xa0, 0xf1, ZC3XX_R10B_RGB01},
-       {0xa0, 0x03, ZC3XX_R10C_RGB02},
-       {0xa0, 0xfe, ZC3XX_R10D_RGB10},
-       {0xa0, 0x51, ZC3XX_R10E_RGB11},
-       {0xa0, 0xf1, ZC3XX_R10F_RGB12},
-       {0xa0, 0xec, ZC3XX_R110_RGB20},
-       {0xa0, 0x03, ZC3XX_R111_RGB21},
-       {0xa0, 0x51, ZC3XX_R112_RGB22},
-       {0xa0, 0x10, ZC3XX_R180_AUTOCORRECTENABLE},
-       {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
-       {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
-       {0xa0, 0x05, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0x62, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x09, ZC3XX_R092_I2CADDRESSSELECT},
-       {0xa0, 0xaa, ZC3XX_R093_I2CSETVALUE},
-       {0xa0, 0x01, ZC3XX_R094_I2CWRITEACK},
-       {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
-       {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
-       {0xa0, 0x03, ZC3XX_R191_EXPOSURELIMITMID},
-       {0xa0, 0x9b, ZC3XX_R192_EXPOSURELIMITLOW},
-       {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
-       {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
-       {0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW},
-       {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
-       {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
-       {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
-       {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
-       {0xa0, 0x62, ZC3XX_R01D_HSYNC_0},
-       {0xa0, 0x90, ZC3XX_R01E_HSYNC_1},
-       {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2},
-       {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
-       {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
-       {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
-       {0xa0, 0x09, 0x01ad},
-       {0xa0, 0x15, 0x01ae},
-       {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE},
-       {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
-       {0xa0, 0x30, 0x0007},
-       {0xa0, 0x02, ZC3XX_R008_CLOCKSETTING},
-       {0xa0, 0x00, 0x0007},
-       {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
-       {}
-};
-
 static const struct usb_action tas5130c_InitialScale[] = {     /* 320x240 */
        {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
        {0xa0, 0x50, ZC3XX_R002_CLOCKSELECT},
@@ -6012,14 +5850,14 @@ static void setmatrix(struct gspca_dev *gspca_dev)
                [SENSOR_HV7131R] =      NULL,
                [SENSOR_ICM105A] =      po2030_matrix,
                [SENSOR_MC501CB] =      NULL,
-               [SENSOR_MI0360SOC] =    gc0305_matrix,
+               [SENSOR_MT9V111_1] =    gc0305_matrix,
+               [SENSOR_MT9V111_3] =    gc0305_matrix,
                [SENSOR_OV7620] =       ov7620_matrix,
                [SENSOR_OV7630C] =      NULL,
                [SENSOR_PAS106] =       NULL,
                [SENSOR_PAS202B] =      pas202b_matrix,
                [SENSOR_PB0330] =       gc0305_matrix,
                [SENSOR_PO2030] =       po2030_matrix,
-               [SENSOR_TAS5130CK] =    NULL,
                [SENSOR_TAS5130C] =     tas5130c_matrix,
                [SENSOR_TAS5130C_VF0250] = vf0250_matrix,
        };
@@ -6185,10 +6023,14 @@ static void setlightfreq(struct gspca_dev *gspca_dev)
                {mc501cb_NoFliker, mc501cb_NoFlikerScale,
                 mc501cb_50HZ, mc501cb_50HZScale,
                 mc501cb_60HZ, mc501cb_60HZScale},
-       [SENSOR_MI0360SOC] =
-               {mi360soc_AENoFliker, mi360soc_AENoFlikerScale,
-                mi360soc_AE50HZ, mi360soc_AE50HZScale,
-                mi360soc_AE60HZ, mi360soc_AE60HZScale},
+       [SENSOR_MT9V111_1] =
+               {mt9v111_1_AENoFliker, mt9v111_1_AENoFlikerScale,
+                mt9v111_1_AE50HZ, mt9v111_1_AE50HZScale,
+                mt9v111_1_AE60HZ, mt9v111_1_AE60HZScale},
+       [SENSOR_MT9V111_3] =
+               {mt9v111_3_AENoFliker, mt9v111_3_AENoFlikerScale,
+                mt9v111_3_AE50HZ, mt9v111_3_AE50HZScale,
+                mt9v111_3_AE60HZ, mt9v111_3_AE60HZScale},
        [SENSOR_OV7620] =
                {ov7620_NoFliker, ov7620_NoFliker,
                 ov7620_50HZ, ov7620_50HZ,
@@ -6213,10 +6055,6 @@ static void setlightfreq(struct gspca_dev *gspca_dev)
                {po2030_NoFliker, po2030_NoFliker,
                 po2030_50HZ, po2030_50HZ,
                 po2030_60HZ, po2030_60HZ},
-       [SENSOR_TAS5130CK] =
-               {tas5130c_NoFliker, tas5130c_NoFlikerScale,
-                tas5130c_50HZ, tas5130c_50HZScale,
-                tas5130c_60HZ, tas5130c_60HZScale},
        [SENSOR_TAS5130C] =
                {tas5130c_NoFliker, tas5130c_NoFlikerScale,
                 tas5130c_50HZ, tas5130c_50HZScale,
@@ -6280,7 +6118,8 @@ static void send_unknown(struct gspca_dev *gspca_dev, int sensor)
        case SENSOR_ADCM2700:
        case SENSOR_GC0305:
        case SENSOR_OV7620:
-       case SENSOR_MI0360SOC:
+       case SENSOR_MT9V111_1:
+       case SENSOR_MT9V111_3:
        case SENSOR_PB0330:
        case SENSOR_PO2030:
                reg_w(gspca_dev, 0x0d, 0x003a);
@@ -6424,11 +6263,11 @@ struct sensor_by_chipset_revision {
 };
 static const struct sensor_by_chipset_revision chipset_revision_sensor[] = {
        {0xc000, 0x12},         /* TAS5130C */
-       {0xc001, 0x13},         /* MI0360SOC */
+       {0xc001, 0x13},         /* MT9V111 */
        {0xe001, 0x13},
        {0x8001, 0x13},
        {0x8000, 0x14},         /* CS2102K */
-       {0x8400, 0x15},         /* TAS5130K */
+       {0x8400, 0x15},         /* MT9V111 */
        {0xe400, 0x15},
 };
 
@@ -6580,6 +6419,11 @@ static int sd_config(struct gspca_dev *gspca_dev,
 {
        struct sd *sd = (struct sd *) gspca_dev;
 
+       if (id->idProduct == 0x301b)
+               sd->bridge = BRIDGE_ZC301;
+       else
+               sd->bridge = BRIDGE_ZC303;
+
        /* define some sensors from the vendor/product */
        sd->sensor = id->driver_info;
 
@@ -6609,14 +6453,14 @@ static int sd_init(struct gspca_dev *gspca_dev)
                [SENSOR_HV7131R] =      4,
                [SENSOR_ICM105A] =      4,
                [SENSOR_MC501CB] =      4,
-               [SENSOR_MI0360SOC] =    4,
+               [SENSOR_MT9V111_1] =    4,
+               [SENSOR_MT9V111_3] =    4,
                [SENSOR_OV7620] =       3,
                [SENSOR_OV7630C] =      4,
                [SENSOR_PAS106] =       4,
                [SENSOR_PAS202B] =      4,
                [SENSOR_PB0330] =       4,
                [SENSOR_PO2030] =       4,
-               [SENSOR_TAS5130CK] =    4,
                [SENSOR_TAS5130C] =     3,
                [SENSOR_TAS5130C_VF0250] = 3,
        };
@@ -6630,14 +6474,14 @@ static int sd_init(struct gspca_dev *gspca_dev)
                [SENSOR_HV7131R] =      1,
                [SENSOR_ICM105A] =      1,
                [SENSOR_MC501CB] =      2,
-               [SENSOR_MI0360SOC] =    1,
+               [SENSOR_MT9V111_1] =    1,
+               [SENSOR_MT9V111_3] =    1,
                [SENSOR_OV7620] =       2,
                [SENSOR_OV7630C] =      1,
                [SENSOR_PAS106] =       0,
                [SENSOR_PAS202B] =      1,
                [SENSOR_PB0330] =       1,
                [SENSOR_PO2030] =       1,
-               [SENSOR_TAS5130CK] =    1,
                [SENSOR_TAS5130C] =     1,
                [SENSOR_TAS5130C_VF0250] = 1,
        };
@@ -6722,10 +6566,13 @@ static int sd_init(struct gspca_dev *gspca_dev)
                        sd->sensor = SENSOR_HV7131R;
                        break;
                case 0x13:
+               case 0x15:
                        PDEBUG(D_PROBE,
-                               "Find Sensor MI0360SOC. Chip revision %x",
+                               "Sensor MT9V111. Chip revision %04x",
                                sd->chip_revision);
-                       sd->sensor = SENSOR_MI0360SOC;
+                       sd->sensor = sd->bridge == BRIDGE_ZC301
+                                       ? SENSOR_MT9V111_1
+                                       : SENSOR_MT9V111_3;
                        break;
                case 0x14:
                        PDEBUG(D_PROBE,
@@ -6733,12 +6580,6 @@ static int sd_init(struct gspca_dev *gspca_dev)
                                sd->chip_revision);
                        sd->sensor = SENSOR_CS2102K;
                        break;
-               case 0x15:
-                       PDEBUG(D_PROBE,
-                               "Find Sensor TAS5130CK?. Chip revision %x",
-                               sd->chip_revision);
-                       sd->sensor = SENSOR_TAS5130CK;
-                       break;
                case 0x16:
                        PDEBUG(D_PROBE, "Find Sensor ADCM2700");
                        sd->sensor = SENSOR_ADCM2700;
@@ -6831,8 +6672,10 @@ static int sd_start(struct gspca_dev *gspca_dev)
                        {icm105a_Initial, icm105a_InitialScale},
        [SENSOR_MC501CB] =
                        {mc501cb_Initial, mc501cb_InitialScale},
-       [SENSOR_MI0360SOC] =
-                       {mi0360soc_Initial, mi0360soc_InitialScale},
+       [SENSOR_MT9V111_1] =
+                       {mt9v111_1_Initial, mt9v111_1_InitialScale},
+       [SENSOR_MT9V111_3] =
+                       {mt9v111_3_Initial, mt9v111_3_InitialScale},
        [SENSOR_OV7620] =
                        {ov7620_Initial, ov7620_InitialScale},
        [SENSOR_OV7630C] =
@@ -6845,8 +6688,6 @@ static int sd_start(struct gspca_dev *gspca_dev)
                        {pb0330_Initial, pb0330_InitialScale},
        [SENSOR_PO2030] =
                        {po2030_Initial, po2030_InitialScale},
-       [SENSOR_TAS5130CK] =
-                       {tas5130cK_Initial, tas5130cK_InitialScale},
        [SENSOR_TAS5130C] =
                        {tas5130c_Initial, tas5130c_InitialScale},
        [SENSOR_TAS5130C_VF0250] =
@@ -6916,7 +6757,6 @@ static int sd_start(struct gspca_dev *gspca_dev)
        case SENSOR_CS2102K:            /* gamma set in xxx_Initial */
        case SENSOR_HDCS2020b:
        case SENSOR_OV7630C:
-       case SENSOR_TAS5130CK:
                break;
        default:
                setcontrast(gspca_dev);