Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-or-later
0002 /*
0003  * DivIO nw80x subdriver
0004  *
0005  * Copyright (C) 2011 Jean-François Moine (http://moinejf.free.fr)
0006  * Copyright (C) 2003 Sylvain Munaut <tnt@246tNt.com>
0007  *          Kjell Claesson <keyson@users.sourceforge.net>
0008  */
0009 
0010 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
0011 
0012 #define MODULE_NAME "nw80x"
0013 
0014 #include "gspca.h"
0015 
0016 MODULE_AUTHOR("Jean-Francois Moine <http://moinejf.free.fr>");
0017 MODULE_DESCRIPTION("NW80x USB Camera Driver");
0018 MODULE_LICENSE("GPL");
0019 
0020 static int webcam;
0021 
0022 /* specific webcam descriptor */
0023 struct sd {
0024     struct gspca_dev gspca_dev; /* !! must be the first item */
0025 
0026     u32 ae_res;
0027     s8 ag_cnt;
0028 #define AG_CNT_START 13
0029     u8 exp_too_low_cnt;
0030     u8 exp_too_high_cnt;
0031 
0032     u8 bridge;
0033     u8 webcam;
0034 };
0035 
0036 enum bridges {
0037     BRIDGE_NW800,   /* and et31x110 */
0038     BRIDGE_NW801,
0039     BRIDGE_NW802,
0040 };
0041 enum webcams {
0042     Generic800,
0043     SpaceCam,   /* Trust 120 SpaceCam */
0044     SpaceCam2,  /* other Trust 120 SpaceCam */
0045     Cvideopro,  /* Conceptronic Video Pro */
0046     Dlink350c,
0047     DS3303u,
0048     Kr651us,
0049     Kritter,
0050     Mustek300,
0051     Proscope,
0052     Twinkle,
0053     DvcV6,
0054     P35u,
0055     Generic802,
0056     NWEBCAMS    /* number of webcams */
0057 };
0058 
0059 static const u8 webcam_chip[NWEBCAMS] = {
0060     [Generic800]    = BRIDGE_NW800, /* 06a5:0000
0061                      * Typhoon Webcam 100 USB */
0062 
0063     [SpaceCam]  = BRIDGE_NW800, /* 06a5:d800
0064                 * Trust SpaceCam120 or SpaceCam100 PORTABLE */
0065 
0066     [SpaceCam2] = BRIDGE_NW800, /* 06a5:d800 - pas106
0067             * other Trust SpaceCam120 or SpaceCam100 PORTABLE */
0068 
0069     [Cvideopro] = BRIDGE_NW802, /* 06a5:d001
0070             * Conceptronic Video Pro 'CVIDEOPRO USB Webcam CCD' */
0071 
0072     [Dlink350c] = BRIDGE_NW802, /* 06a5:d001
0073                      * D-Link NetQam Pro 250plus */
0074 
0075     [DS3303u]   = BRIDGE_NW801, /* 06a5:d001
0076                 * Plustek Opticam 500U or ProLink DS3303u */
0077 
0078     [Kr651us]   = BRIDGE_NW802, /* 06a5:d001
0079                      * Panasonic GP-KR651US */
0080 
0081     [Kritter]   = BRIDGE_NW802, /* 06a5:d001
0082                      * iRez Kritter cam */
0083 
0084     [Mustek300] = BRIDGE_NW802, /* 055f:d001
0085                      * Mustek Wcam 300 mini */
0086 
0087     [Proscope]  = BRIDGE_NW802, /* 06a5:d001
0088                      * Scalar USB Microscope (ProScope) */
0089 
0090     [Twinkle]   = BRIDGE_NW800, /* 06a5:d800 - hv7121b? (seems pas106)
0091                      * Divio Chicony TwinkleCam
0092                      * DSB-C110 */
0093 
0094     [DvcV6]     = BRIDGE_NW802, /* 0502:d001
0095                      * DVC V6 */
0096 
0097     [P35u]      = BRIDGE_NW801, /* 052b:d001, 06a5:d001 and 06be:d001
0098                      * EZCam Pro p35u */
0099 
0100     [Generic802]    = BRIDGE_NW802,
0101 };
0102 /*
0103  * other webcams:
0104  *  - nw801 046d:d001
0105  *      Logitech QuickCam Pro (dark focus ring)
0106  *  - nw801 0728:d001
0107  *      AVerMedia Camguard
0108  *  - nw??? 06a5:d001
0109  *      D-Link NetQam Pro 250plus
0110  *  - nw800 065a:d800
0111  *      Showcam NGS webcam
0112  *  - nw??? ????:????
0113  *      Sceptre svc300
0114  */
0115 
0116 /*
0117  * registers
0118  *    nw800/et31x110      nw801       nw802
0119  *  0000..009e  0000..00a1  0000..009e
0120  *  0200..0211     id          id
0121  *  0300..0302     id          id
0122  *  0400..0406    (inex)    0400..0406
0123  *  0500..0505  0500..0506    (inex)
0124  *  0600..061a  0600..0601  0600..0601
0125  *  0800..0814     id          id
0126  *  1000..109c  1000..10a1  1000..109a
0127  */
0128 
0129 /* resolutions
0130  *  nw800: 320x240, 352x288
0131  *  nw801/802: 320x240, 640x480
0132  */
0133 static const struct v4l2_pix_format cif_mode[] = {
0134     {320, 240, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE,
0135         .bytesperline = 320,
0136         .sizeimage = 320 * 240 * 4 / 8,
0137         .colorspace = V4L2_COLORSPACE_JPEG},
0138     {352, 288, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE,
0139         .bytesperline = 352,
0140         .sizeimage = 352 * 288 * 4 / 8,
0141         .colorspace = V4L2_COLORSPACE_JPEG}
0142 };
0143 static const struct v4l2_pix_format vga_mode[] = {
0144     {320, 240, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE,
0145         .bytesperline = 320,
0146         .sizeimage = 320 * 240 * 4 / 8,
0147         .colorspace = V4L2_COLORSPACE_JPEG},
0148     {640, 480, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE,
0149         .bytesperline = 640,
0150         .sizeimage = 640 * 480 * 3 / 8,
0151         .colorspace = V4L2_COLORSPACE_JPEG},
0152 };
0153 
0154 /*
0155  * The sequences below contain:
0156  *  - 1st and 2nd bytes: either
0157  *      - register number (BE)
0158  *      - I2C0 + i2c address
0159  *  - 3rd byte: data length (=0 for end of sequence)
0160  *  - n bytes: data
0161  */
0162 #define I2C0 0xff
0163 
0164 static const u8 nw800_init[] = {
0165     0x04, 0x05, 0x01, 0x61,
0166     0x04, 0x04, 0x01, 0x01,
0167     0x04, 0x06, 0x01, 0x04,
0168     0x04, 0x04, 0x03, 0x00, 0x00, 0x00,
0169     0x05, 0x05, 0x01, 0x00,
0170     0, 0, 0
0171 };
0172 static const u8 nw800_start[] = {
0173     0x04, 0x06, 0x01, 0xc0,
0174     0x00, 0x00, 0x40, 0x10, 0x43, 0x00, 0xb4, 0x01, 0x10, 0x00, 0x4f,
0175               0xef, 0x0e, 0x00, 0x74, 0x01, 0x01, 0x00, 0x19,
0176               0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
0177               0x00, 0x01, 0x00, 0x19, 0x00, 0x3e, 0x00, 0x24,
0178               0x03, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
0179               0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
0180               0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
0181               0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
0182     0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0183               0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0184               0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0185               0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0186               0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
0187               0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
0188               0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
0189               0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
0190     0x00, 0x80, 0x1f, 0xa0, 0x48, 0xc3, 0x02, 0x88, 0x0c, 0x68, 0x00,
0191               0x00, 0x00, 0x00, 0x00, 0xa8, 0x06, 0x00, 0x08,
0192               0x00, 0x32, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
0193               0x00, 0x4b, 0x00, 0x76, 0x00, 0x86, 0x00,
0194     0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
0195               0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
0196               0x40, 0x20,
0197     0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
0198     0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x61, 0xc0,
0199     0x05, 0x00, 0x06, 0xe8, 0x00, 0x00, 0x00, 0x20, 0x20,
0200     0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0201               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0202               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0203               0x00, 0x00, 0x00,
0204     0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0205               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0206               0x00, 0x00, 0x00, 0x00, 0x00,
0207     0x10, 0x00, 0x40, 0x83, 0x02, 0x20, 0x00, 0x13, 0x00, 0x00, 0x00,
0208               0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
0209               0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0210               0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
0211               0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
0212               0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
0213               0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
0214               0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
0215     0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
0216               0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
0217               0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
0218               0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
0219               0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
0220               0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
0221               0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
0222               0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
0223     0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
0224               0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x62,
0225               0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
0226               0x01, 0x60, 0x01, 0x00, 0x00,
0227 
0228     0x04, 0x04, 0x01, 0xff,
0229     0x04, 0x06, 0x01, 0xc4,
0230 
0231     0x04, 0x06, 0x01, 0xc0,
0232     0x00, 0x00, 0x40, 0x10, 0x43, 0x00, 0xb4, 0x01, 0x10, 0x00, 0x4f,
0233               0xef, 0x0e, 0x00, 0x74, 0x01, 0x01, 0x00, 0x19,
0234               0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
0235               0x00, 0x01, 0x00, 0x19, 0x00, 0x3e, 0x00, 0x24,
0236               0x03, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
0237               0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
0238               0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
0239               0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
0240     0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0241               0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0242               0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0243               0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0244               0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
0245               0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
0246               0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
0247               0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
0248     0x00, 0x80, 0x1f, 0xa0, 0x48, 0xc3, 0x02, 0x88, 0x0c, 0x68, 0x00,
0249               0x00, 0x00, 0x00, 0x00, 0xa8, 0x06, 0x00, 0x08,
0250               0x00, 0x32, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
0251               0x00, 0x4b, 0x00, 0x76, 0x00, 0x86, 0x00,
0252     0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
0253               0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
0254               0x40, 0x20,
0255     0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
0256     0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x61, 0xc0,
0257     0x05, 0x00, 0x06, 0xe8, 0x00, 0x00, 0x00, 0x20, 0x20,
0258     0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0259               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0260               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0261               0x00, 0x00, 0x00,
0262     0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0263               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0264               0x00, 0x00, 0x00, 0x00, 0x00,
0265     0x10, 0x00, 0x40, 0x83, 0x02, 0x20, 0x00, 0x13, 0x00, 0x00, 0x00,
0266               0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
0267               0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0268               0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
0269               0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
0270               0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
0271               0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
0272               0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
0273     0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
0274               0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
0275               0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
0276               0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
0277               0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
0278               0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
0279               0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
0280               0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
0281     0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
0282               0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x62,
0283               0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
0284               0x01, 0x60, 0x01, 0x00, 0x00,
0285 
0286     0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00,
0287               0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65,
0288               0x40,
0289     0x00, 0x80, 0x01, 0xa0,
0290     0x10, 0x1a, 0x01, 0x00,
0291     0x00, 0x91, 0x02, 0x6c, 0x01,
0292     0x00, 0x03, 0x02, 0xc8, 0x01,
0293     0x10, 0x1a, 0x01, 0x00,
0294     0x10, 0x00, 0x01, 0x83,
0295     0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01,
0296               0x20, 0x01, 0x60, 0x01,
0297     0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
0298     0x10, 0x1b, 0x02, 0x69, 0x00,
0299     0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
0300     0x05, 0x02, 0x01, 0x02,
0301     0x06, 0x00, 0x02, 0x04, 0xd9,
0302     0x05, 0x05, 0x01, 0x20,
0303     0x05, 0x05, 0x01, 0x21,
0304     0x10, 0x0e, 0x01, 0x08,
0305     0x10, 0x41, 0x11, 0x00, 0x08, 0x21, 0x3d, 0x52, 0x63, 0x75, 0x83,
0306               0x91, 0x9e, 0xaa, 0xb6, 0xc1, 0xcc, 0xd6, 0xe0,
0307               0xea,
0308     0x10, 0x03, 0x01, 0x00,
0309     0x10, 0x0f, 0x02, 0x13, 0x13,
0310     0x10, 0x03, 0x01, 0x14,
0311     0x10, 0x41, 0x11, 0x00, 0x08, 0x21, 0x3d, 0x52, 0x63, 0x75, 0x83,
0312               0x91, 0x9e, 0xaa, 0xb6, 0xc1, 0xcc, 0xd6, 0xe0,
0313               0xea,
0314     0x10, 0x0b, 0x01, 0x14,
0315     0x10, 0x0d, 0x01, 0x20,
0316     0x10, 0x0c, 0x01, 0x34,
0317     0x04, 0x06, 0x01, 0xc3,
0318     0x04, 0x04, 0x01, 0x00,
0319     0x05, 0x02, 0x01, 0x02,
0320     0x06, 0x00, 0x02, 0x00, 0x48,
0321     0x05, 0x05, 0x01, 0x20,
0322     0x05, 0x05, 0x01, 0x21,
0323     0, 0, 0
0324 };
0325 
0326 /* 06a5:d001 - nw801 - Panasonic
0327  *      P35u */
0328 static const u8 nw801_start_1[] = {
0329     0x05, 0x06, 0x01, 0x04,
0330     0x00, 0x00, 0x40, 0x0e, 0x00, 0x00, 0xf9, 0x02, 0x11, 0x00, 0x0e,
0331               0x01, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
0332               0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
0333               0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
0334               0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
0335               0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
0336               0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
0337               0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
0338     0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0339               0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0340               0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0341               0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0342               0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
0343               0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
0344               0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
0345               0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
0346     0x00, 0x80, 0x22, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x08, 0x00,
0347               0x00, 0x00, 0x00, 0x00, 0x69, 0xa8, 0x1f, 0x00,
0348               0x0d, 0x02, 0x07, 0x00, 0x01, 0x00, 0x19, 0x00,
0349               0xf2, 0x00, 0x18, 0x06, 0x10, 0x06, 0x10, 0x00,
0350               0x36, 0x00,
0351     0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
0352               0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
0353               0x40, 0x20,
0354     0x03, 0x00, 0x03, 0x00, 0x00, 0x00,
0355     0x05, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
0356     0x06, 0x00, 0x02, 0x09, 0x99,
0357     0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0358               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0359               0x00, 0x00, 0x00, 0x00, 0x00,
0360     0x10, 0x00, 0x40, 0x22, 0x02, 0x80, 0x00, 0x1e, 0x00, 0x00, 0x00,
0361               0x00, 0x00, 0x00, 0x0a, 0x15, 0x08, 0x08, 0x0a,
0362               0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0363               0x00, 0x01, 0x35, 0xfd, 0x07, 0x3d, 0x00, 0x00,
0364               0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x14, 0x02,
0365               0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0366               0x40, 0x00, 0x00, 0x00, 0x40, 0x20, 0x10, 0x06,
0367               0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06, 0xf7,
0368     0x10, 0x40, 0x40, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80, 0x80,
0369               0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99, 0xa4,
0370               0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc, 0xcf,
0371               0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54, 0x64,
0372               0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2, 0xe2,
0373               0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
0374               0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
0375               0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
0376     0x10, 0x80, 0x22, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
0377               0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00, 0x00,
0378               0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x82, 0x02,
0379               0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40, 0x01,
0380               0xf0, 0x00,
0381     0, 0, 0,
0382 };
0383 static const u8 nw801_start_qvga[] = {
0384     0x02, 0x00, 0x10, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
0385               0x00, 0x78, 0x18, 0x0b, 0x06, 0xa2, 0x86, 0x78,
0386     0x02, 0x0f, 0x01, 0x6b,
0387     0x10, 0x1a, 0x01, 0x15,
0388     0x00, 0x00, 0x01, 0x1e,
0389     0x10, 0x00, 0x01, 0x2f,
0390     0x10, 0x8c, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
0391     0x10, 0x11, 0x08, 0x29, 0x00, 0x18, 0x01, 0x1f, 0x00, 0xd2, 0x00,
0392                             /* AE window */
0393     0, 0, 0,
0394 };
0395 static const u8 nw801_start_vga[] = {
0396     0x02, 0x00, 0x10, 0x78, 0xa0, 0x97, 0x78, 0xa0, 0x00, 0x00, 0x00,
0397               0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xf0,
0398     0x02, 0x0f, 0x01, 0xd5,
0399     0x10, 0x1a, 0x01, 0x15,
0400     0x00, 0x00, 0x01, 0x0e,
0401     0x10, 0x00, 0x01, 0x22,
0402     0x10, 0x8c, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01,
0403     0x10, 0x11, 0x08, 0x51, 0x00, 0x30, 0x02, 0x3d, 0x00, 0xa4, 0x01,
0404     0, 0, 0,
0405 };
0406 static const u8 nw801_start_2[] = {
0407     0x10, 0x04, 0x01, 0x1a,
0408     0x10, 0x19, 0x01, 0x09,             /* clock */
0409     0x10, 0x24, 0x06, 0xc0, 0x00, 0x3f, 0x02, 0x00, 0x01,
0410                              /* .. gain .. */
0411     0x00, 0x03, 0x02, 0x92, 0x03,
0412     0x00, 0x1d, 0x04, 0xf2, 0x00, 0x24, 0x07,
0413     0x00, 0x7b, 0x01, 0xcf,
0414     0x10, 0x94, 0x01, 0x07,
0415     0x05, 0x05, 0x01, 0x01,
0416     0x05, 0x04, 0x01, 0x01,
0417     0x10, 0x0e, 0x01, 0x08,
0418     0x10, 0x48, 0x11, 0x00, 0x37, 0x55, 0x6b, 0x7d, 0x8d, 0x9b, 0xa8,
0419               0xb4, 0xbf, 0xca, 0xd4, 0xdd, 0xe6, 0xef, 0xf0,
0420               0xf0,
0421     0x10, 0x03, 0x01, 0x00,
0422     0x10, 0x0f, 0x02, 0x0c, 0x0c,
0423     0x10, 0x03, 0x01, 0x08,
0424     0x10, 0x48, 0x11, 0x00, 0x37, 0x55, 0x6b, 0x7d, 0x8d, 0x9b, 0xa8,
0425               0xb4, 0xbf, 0xca, 0xd4, 0xdd, 0xe6, 0xef, 0xf0,
0426               0xf0,
0427     0x10, 0x0b, 0x01, 0x0b,
0428     0x10, 0x0d, 0x01, 0x0b,
0429     0x10, 0x0c, 0x01, 0x1f,
0430     0x05, 0x06, 0x01, 0x03,
0431     0, 0, 0
0432 };
0433 
0434 /* nw802 (sharp IR3Y38M?) */
0435 static const u8 nw802_start[] = {
0436     0x04, 0x06, 0x01, 0x04,
0437     0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0xf9, 0x02, 0x10, 0x00, 0x4d,
0438               0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
0439               0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
0440               0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
0441               0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
0442               0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
0443               0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
0444               0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
0445     0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0446               0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0447               0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0448               0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0449               0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
0450               0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
0451               0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
0452               0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
0453     0x00, 0x80, 0x1f, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x68, 0x00,
0454               0x00, 0x00, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
0455               0x00, 0x0c, 0x02, 0x01, 0x00, 0x16, 0x00, 0x94,
0456               0x00, 0x10, 0x06, 0x08, 0x00, 0x18, 0x00,
0457     0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
0458               0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
0459               0x40, 0x20,
0460     0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
0461     0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
0462     0x06, 0x00, 0x02, 0x09, 0x99,
0463     0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0464               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0465               0x00, 0x00, 0x00, 0x00, 0x00,
0466     0x10, 0x00, 0x40, 0xa1, 0x02, 0x80, 0x00, 0x1d, 0x00, 0x00, 0x00,
0467               0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
0468               0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0469               0x00, 0x49, 0x13, 0xff, 0x01, 0xc0, 0x00, 0x14,
0470               0x02, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00,
0471               0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
0472               0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
0473               0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
0474     0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
0475               0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
0476               0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
0477               0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
0478               0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
0479               0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
0480               0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
0481               0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
0482     0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
0483               0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x05, 0x82,
0484               0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
0485               0x01, 0xf0, 0x00,
0486     0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
0487               0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
0488               0x40,
0489     0x10, 0x1a, 0x01, 0x00,
0490     0x10, 0x00, 0x01, 0xad,
0491     0x00, 0x00, 0x01, 0x08,
0492     0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
0493     0x10, 0x1b, 0x02, 0x00, 0x00,
0494     0x10, 0x11, 0x08, 0x51, 0x00, 0xf0, 0x00, 0x3d, 0x00, 0xb4, 0x00,
0495     0x10, 0x1d, 0x08, 0x00, 0xa0, 0x00, 0xa0, 0x00, 0xa0, 0x00, 0xa0,
0496     0x10, 0x0e, 0x01, 0x27,
0497     0x10, 0x41, 0x11, 0x00, 0x0e, 0x35, 0x4f, 0x62, 0x71, 0x7f, 0x8b,
0498               0x96, 0xa0, 0xa9, 0xb2, 0xbb, 0xc3, 0xca, 0xd2,
0499               0xd8,
0500     0x10, 0x03, 0x01, 0x00,
0501     0x10, 0x0f, 0x02, 0x14, 0x14,
0502     0x10, 0x03, 0x01, 0x0c,
0503     0x10, 0x41, 0x11, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54, 0x64, 0x74,
0504               0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2, 0xe2, 0xf1,
0505               0xff,
0506 /*            0x00, 0x0e, 0x35, 0x4f, 0x62, 0x71, 0x7f, 0x8b,
0507  *            0x96, 0xa0, 0xa9, 0xb2, 0xbb, 0xc3, 0xca, 0xd2,
0508  *            0xd8, */
0509     0x10, 0x0b, 0x01, 0x10,
0510     0x10, 0x0d, 0x01, 0x11,
0511     0x10, 0x0c, 0x01, 0x1c,
0512     0x04, 0x06, 0x01, 0x03,
0513     0x04, 0x04, 0x01, 0x00,
0514     0, 0, 0
0515 };
0516 /* et31x110 - Trust 120 SpaceCam */
0517 static const u8 spacecam_init[] = {
0518     0x04, 0x05, 0x01, 0x01,
0519     0x04, 0x04, 0x01, 0x01,
0520     0x04, 0x06, 0x01, 0x04,
0521     0x04, 0x04, 0x03, 0x00, 0x00, 0x00,
0522     0x05, 0x05, 0x01, 0x00,
0523     0, 0, 0
0524 };
0525 static const u8 spacecam_start[] = {
0526     0x04, 0x06, 0x01, 0x44,
0527     0x00, 0x00, 0x40, 0x10, 0x43, 0x00, 0xb4, 0x01, 0x10, 0x00, 0x4f,
0528               0xef, 0x0e, 0x00, 0x74, 0x01, 0x01, 0x00, 0x19,
0529               0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
0530               0x00, 0x01, 0x00, 0x19, 0x00, 0x3e, 0x00, 0x24,
0531               0x03, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
0532               0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
0533               0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
0534               0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
0535     0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0536               0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0537               0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0538               0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0539               0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
0540               0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
0541               0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
0542               0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
0543     0x00, 0x80, 0x1f, 0xa0, 0x48, 0xc3, 0x02, 0x88, 0x0c, 0x68, 0x00,
0544               0x00, 0x00, 0x00, 0x00, 0xa8, 0x06, 0x00, 0x08,
0545               0x00, 0x32, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
0546               0x00, 0x4b, 0x00, 0x7c, 0x00, 0x80, 0x00,
0547     0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
0548               0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
0549               0x40, 0x20,
0550     0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
0551     0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
0552     0x05, 0x00, 0x06, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0553     0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0554               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0555               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0556               0x00, 0x00, 0x00,
0557     0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0558               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0559               0x00, 0x00, 0x00, 0x00, 0x00,
0560     0x10, 0x00, 0x40, 0x83, 0x02, 0x20, 0x00, 0x11, 0x00, 0x00, 0x00,
0561               0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
0562               0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0563               0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
0564               0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
0565               0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
0566               0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
0567               0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
0568     0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
0569               0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
0570               0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
0571               0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
0572               0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
0573               0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
0574               0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
0575               0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
0576     0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
0577               0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x62,
0578               0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
0579               0x01, 0x60, 0x01, 0x00, 0x00,
0580     0x04, 0x06, 0x01, 0xc0,
0581     0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
0582     0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00,
0583               0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65,
0584               0x40,
0585     0x00, 0x80, 0x01, 0xa0,
0586     0x10, 0x1a, 0x01, 0x00,
0587     0x00, 0x91, 0x02, 0x32, 0x01,
0588     0x00, 0x03, 0x02, 0x08, 0x02,
0589     0x10, 0x00, 0x01, 0x83,
0590     0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01,
0591               0x20, 0x01, 0x60, 0x01,
0592     0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
0593     0x10, 0x0e, 0x01, 0x08,
0594     0x10, 0x41, 0x11, 0x00, 0x64, 0x99, 0xc0, 0xe2, 0xf9, 0xf9, 0xf9,
0595               0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
0596               0xf9,
0597     0x10, 0x03, 0x01, 0x00,
0598     0x10, 0x0f, 0x02, 0x13, 0x13,
0599     0x10, 0x03, 0x01, 0x06,
0600     0x10, 0x41, 0x11, 0x00, 0x64, 0x99, 0xc0, 0xe2, 0xf9, 0xf9, 0xf9,
0601               0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
0602               0xf9,
0603     0x10, 0x0b, 0x01, 0x08,
0604     0x10, 0x0d, 0x01, 0x10,
0605     0x10, 0x0c, 0x01, 0x1f,
0606     0x04, 0x06, 0x01, 0xc3,
0607     0x04, 0x05, 0x01, 0x40,
0608     0x04, 0x04, 0x01, 0x40,
0609     0, 0, 0
0610 };
0611 /* et31x110 - pas106 - other Trust SpaceCam120 */
0612 static const u8 spacecam2_start[] = {
0613     0x04, 0x06, 0x01, 0x44,
0614     0x04, 0x06, 0x01, 0x00,
0615     0x00, 0x00, 0x40, 0x14, 0x83, 0x00, 0xba, 0x01, 0x10, 0x00, 0x4f,
0616               0xef, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0x19,
0617               0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
0618               0x00, 0x01, 0x00, 0x19, 0x00, 0x06, 0x00, 0xfc,
0619               0x01, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
0620               0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
0621               0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
0622               0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
0623     0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0624               0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0625               0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0626               0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0627               0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
0628               0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
0629               0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
0630               0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
0631     0x00, 0x80, 0x1f, 0xb8, 0x48, 0x0f, 0x04, 0x88, 0x14, 0x68, 0x00,
0632               0x00, 0x00, 0x00, 0x00, 0xa8, 0x01, 0x00, 0x03,
0633               0x00, 0x24, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
0634               0x00, 0x4b, 0x00, 0x76, 0x00, 0x86, 0x00,
0635     0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
0636               0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
0637               0x40, 0x20,
0638     0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
0639     0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x61, 0x00,
0640     0x05, 0x00, 0x06, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0641     0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0642               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0643               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0644               0x00, 0x00, 0x00,
0645     0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0646               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0647               0x00, 0x00, 0x00, 0x00, 0x00,
0648     0x10, 0x00, 0x40, 0x80, 0x02, 0x20, 0x00, 0x13, 0x00, 0x00, 0x00,
0649               0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
0650               0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0651               0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
0652               0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
0653               0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
0654               0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
0655               0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
0656     0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
0657               0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
0658               0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
0659               0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
0660               0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
0661               0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
0662               0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
0663               0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
0664     0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
0665               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x62,
0666               0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
0667               0x01, 0x60, 0x01, 0x00, 0x00,
0668     0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
0669     0x04, 0x04, 0x01, 0x40,
0670     0x04, 0x04, 0x01, 0x00,
0671     I2C0, 0x40, 0x0c, 0x02, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x05,
0672               0x00, 0x00, 0x05, 0x05,
0673     I2C0, 0x40, 0x02, 0x11, 0x06,
0674     I2C0, 0x40, 0x02, 0x14, 0x00,
0675     I2C0, 0x40, 0x02, 0x13, 0x01,       /* i2c end */
0676     0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00,
0677               0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65,
0678               0x40,
0679     I2C0, 0x40, 0x02, 0x02, 0x0c,       /* pixel clock */
0680     I2C0, 0x40, 0x02, 0x0f, 0x00,
0681     I2C0, 0x40, 0x02, 0x13, 0x01,       /* i2c end */
0682     0x10, 0x00, 0x01, 0x01,
0683     0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01,
0684               0x20, 0x01, 0x60, 0x01,
0685     I2C0, 0x40, 0x02, 0x05, 0x0f,       /* exposure */
0686     I2C0, 0x40, 0x02, 0x13, 0x01,       /* i2c end */
0687     I2C0, 0x40, 0x07, 0x09, 0x0b, 0x0f, 0x05, 0x05, 0x0f, 0x00,
0688                         /* gains */
0689     I2C0, 0x40, 0x03, 0x12, 0x04, 0x01,
0690     0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
0691     0x10, 0x0e, 0x01, 0x08,
0692     0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7,
0693               0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7,
0694               0xf9,
0695     0x10, 0x03, 0x01, 0x00,
0696     0x10, 0x0f, 0x02, 0x13, 0x13,
0697     0x10, 0x03, 0x01, 0x06,
0698     0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7,
0699               0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7,
0700               0xf9,
0701     0x10, 0x0b, 0x01, 0x11,
0702     0x10, 0x0d, 0x01, 0x10,
0703     0x10, 0x0c, 0x01, 0x14,
0704     0x04, 0x06, 0x01, 0x03,
0705     0x04, 0x05, 0x01, 0x61,
0706     0x04, 0x04, 0x01, 0x00,
0707     0, 0, 0
0708 };
0709 
0710 /* nw802 - Conceptronic Video Pro */
0711 static const u8 cvideopro_start[] = {
0712     0x04, 0x06, 0x01, 0x04,
0713     0x00, 0x00, 0x40, 0x54, 0x96, 0x98, 0xf9, 0x02, 0x18, 0x00, 0x4c,
0714               0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
0715               0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
0716               0x00, 0x0b, 0x00, 0x1b, 0x00, 0xc8, 0x00, 0xf4,
0717               0x05, 0xb4, 0x00, 0xcc, 0x00, 0x01, 0x00, 0x01,
0718               0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0719               0x00, 0xa2, 0x00, 0xc6, 0x00, 0x60, 0x00, 0xc6,
0720               0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0721     0x00, 0x40, 0x40, 0x00, 0xae, 0x00, 0xd2, 0x00, 0xae, 0x00, 0xd2,
0722               0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0723               0x00, 0xa8, 0x00, 0xc0, 0x00, 0x66, 0x00, 0xc0,
0724               0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0725               0x00, 0x0a, 0x00, 0x54, 0x00, 0x0a, 0x00, 0x54,
0726               0x00, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
0727               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6,
0728               0x00, 0x5d, 0x00, 0xc7, 0x00, 0x7e, 0x00, 0x30,
0729     0x00, 0x80, 0x1f, 0x98, 0x43, 0x3f, 0x0d, 0x88, 0x20, 0x80, 0x3f,
0730               0x47, 0xaf, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
0731               0x00, 0x0c, 0x02, 0x0c, 0x00, 0x1c, 0x00, 0x94,
0732               0x00, 0x10, 0x06, 0x24, 0x00, 0x4a, 0x00,
0733     0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
0734               0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
0735               0x40, 0x20,
0736     0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
0737     0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00,
0738     0x06, 0x00, 0x02, 0x09, 0x99,
0739     0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0740               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0741               0x00, 0x00, 0x00, 0x00, 0x00,
0742     0x10, 0x00, 0x40, 0xa0, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
0743               0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
0744               0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0745               0x00, 0x49, 0x13, 0x00, 0x00, 0xe0, 0x00, 0x0c,
0746               0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
0747               0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
0748               0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
0749               0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
0750     0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
0751               0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
0752               0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
0753               0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
0754               0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
0755               0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
0756               0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
0757               0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
0758     0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
0759               0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x05, 0x82,
0760               0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
0761               0x01, 0xf0, 0x00,
0762     0x02, 0x00, 0x11, 0x3c, 0x50, 0x8c, 0x3c, 0x50, 0x00, 0x00, 0x00,
0763               0x00, 0x78, 0x3f, 0x3f, 0x06, 0xf2, 0x8f, 0xf0,
0764               0x40,
0765     0x10, 0x1a, 0x01, 0x03,
0766     0x10, 0x00, 0x01, 0xac,
0767     0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
0768     0x10, 0x1b, 0x02, 0x3b, 0x01,
0769     0x10, 0x11, 0x08, 0x61, 0x00, 0xe0, 0x00, 0x49, 0x00, 0xa8, 0x00,
0770     0x10, 0x1f, 0x06, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
0771     0x10, 0x1d, 0x02, 0x40, 0x06,
0772     0x10, 0x0e, 0x01, 0x08,
0773     0x10, 0x41, 0x11, 0x00, 0x0f, 0x46, 0x62, 0x76, 0x86, 0x94, 0xa0,
0774               0xab, 0xb6, 0xbf, 0xc8, 0xcf, 0xd7, 0xdc, 0xdc,
0775               0xdc,
0776     0x10, 0x03, 0x01, 0x00,
0777     0x10, 0x0f, 0x02, 0x12, 0x12,
0778     0x10, 0x03, 0x01, 0x0c,
0779     0x10, 0x41, 0x11, 0x00, 0x0f, 0x46, 0x62, 0x76, 0x86, 0x94, 0xa0,
0780               0xab, 0xb6, 0xbf, 0xc8, 0xcf, 0xd7, 0xdc, 0xdc,
0781               0xdc,
0782     0x10, 0x0b, 0x01, 0x09,
0783     0x10, 0x0d, 0x01, 0x10,
0784     0x10, 0x0c, 0x01, 0x2f,
0785     0x04, 0x06, 0x01, 0x03,
0786     0x04, 0x04, 0x01, 0x00,
0787     0, 0, 0
0788 };
0789 
0790 /* nw802 - D-link dru-350c cam */
0791 static const u8 dlink_start[] = {
0792     0x04, 0x06, 0x01, 0x04,
0793     0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x92, 0x03, 0x10, 0x00, 0x4d,
0794               0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
0795               0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
0796               0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
0797               0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
0798               0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
0799               0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
0800               0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
0801     0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0802               0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0803               0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0804               0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0805               0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
0806               0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
0807               0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
0808               0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
0809     0x00, 0x80, 0x1f, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x68, 0x00,
0810               0x00, 0x00, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
0811               0x00, 0x0c, 0x02, 0x01, 0x00, 0x16, 0x00, 0x94,
0812               0x00, 0x10, 0x06, 0x10, 0x00, 0x36, 0x00,
0813     0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
0814               0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
0815               0x40, 0x20,
0816     0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
0817     0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
0818     0x06, 0x00, 0x02, 0x09, 0x99,
0819     0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0820               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0821               0x00, 0x00, 0x00, 0x00, 0x00,
0822     0x10, 0x00, 0x40, 0xa1, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
0823               0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
0824               0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0825               0x00, 0x49, 0x13, 0x00, 0x00, 0xc0, 0x00, 0x14,
0826               0x02, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00,
0827               0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
0828               0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
0829               0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
0830     0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
0831               0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
0832               0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
0833               0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
0834               0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
0835               0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
0836               0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
0837               0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
0838     0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
0839               0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x82,
0840               0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
0841               0x01, 0xf0, 0x00,
0842     0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
0843               0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
0844               0x40,
0845     0x10, 0x1a, 0x01, 0x00,
0846     0x10, 0x00, 0x01, 0xad,
0847     0x00, 0x00, 0x01, 0x08,
0848     0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
0849     0x10, 0x1b, 0x02, 0x00, 0x00,
0850     0x10, 0x11, 0x08, 0x51, 0x00, 0xf0, 0x00, 0x3d, 0x00, 0xb4, 0x00,
0851     0x10, 0x1d, 0x08, 0x40, 0x06, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
0852     0x10, 0x0e, 0x01, 0x20,
0853     0x10, 0x41, 0x11, 0x00, 0x07, 0x1e, 0x38, 0x4d, 0x60, 0x70, 0x7f,
0854               0x8e, 0x9b, 0xa8, 0xb4, 0xbf, 0xca, 0xd5, 0xdf,
0855               0xea,
0856     0x10, 0x03, 0x01, 0x00,
0857     0x10, 0x0f, 0x02, 0x11, 0x11,
0858     0x10, 0x03, 0x01, 0x10,
0859     0x10, 0x41, 0x11, 0x00, 0x07, 0x1e, 0x38, 0x4d, 0x60, 0x70, 0x7f,
0860               0x8e, 0x9b, 0xa8, 0xb4, 0xbf, 0xca, 0xd5, 0xdf,
0861               0xea,
0862     0x10, 0x0b, 0x01, 0x19,
0863     0x10, 0x0d, 0x01, 0x10,
0864     0x10, 0x0c, 0x01, 0x1e,
0865     0x04, 0x06, 0x01, 0x03,
0866     0x04, 0x04, 0x01, 0x00,
0867     0, 0, 0
0868 };
0869 
0870 /* 06a5:d001 - nw801 - Sony
0871  *      Plustek Opticam 500U or ProLink DS3303u (Hitachi HD49322BF) */
0872 /*fixme: 320x240 only*/
0873 static const u8 ds3303_start[] = {
0874     0x05, 0x06, 0x01, 0x04,
0875     0x00, 0x00, 0x40, 0x16, 0x00, 0x00, 0xf9, 0x02, 0x11, 0x00, 0x0e,
0876               0x01, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
0877               0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
0878               0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
0879               0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
0880               0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
0881               0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
0882               0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
0883     0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0884               0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0885               0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0886               0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0887               0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
0888               0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
0889               0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
0890               0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
0891     0x00, 0x80, 0x22, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x08, 0x00,
0892               0x00, 0x00, 0x00, 0x00, 0xa9, 0xa8, 0x1f, 0x00,
0893               0x0d, 0x02, 0x07, 0x00, 0x01, 0x00, 0x19, 0x00,
0894               0xf2, 0x00, 0x18, 0x06, 0x10, 0x06, 0x10, 0x00,
0895               0x36, 0x00,
0896     0x02, 0x00, 0x12, 0x03, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
0897               0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0x50,
0898               0x40, 0x20,
0899     0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
0900     0x05, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00,
0901     0x06, 0x00, 0x02, 0x09, 0x99,
0902     0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0903               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0904               0x00, 0x00, 0x00, 0x00, 0x00,
0905     0x10, 0x00, 0x40, 0x2f, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
0906               0x00, 0x00, 0x00, 0x10, 0x1f, 0x10, 0x08, 0x0a,
0907               0x0a, 0x51, 0x00, 0xf1, 0x00, 0x3c, 0x00, 0xb4,
0908               0x00, 0x01, 0x15, 0xfd, 0x07, 0x3d, 0x00, 0x00,
0909               0x00, 0x00, 0x00, 0x00, 0x8c, 0x04, 0x01, 0x20,
0910               0x02, 0x00, 0x03, 0x00, 0x20, 0x00, 0x00, 0x00,
0911               0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08, 0x03,
0912               0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06, 0xf7,
0913     0x10, 0x40, 0x40, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80, 0x80,
0914               0x00, 0x2d, 0x46, 0x58, 0x67, 0x74, 0x7f, 0x88,
0915               0x94, 0x9d, 0xa6, 0xae, 0xb5, 0xbd, 0xc4, 0xcb,
0916               0xd1, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54, 0x64,
0917               0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2, 0xe2,
0918               0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
0919               0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
0920               0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
0921     0x10, 0x80, 0x22, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
0922               0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x3f, 0x01,
0923               0x00, 0x00, 0xef, 0x00, 0x02, 0x0a, 0x82, 0x02,
0924               0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40, 0x01,
0925               0xf0, 0x00,
0926 
0927     0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
0928               0x00, 0x78, 0x3f, 0x3f, 0x00, 0xf2, 0x8f, 0x81,
0929               0x40,
0930     0x10, 0x1a, 0x01, 0x15,
0931     0x10, 0x00, 0x01, 0x2f,
0932     0x10, 0x8c, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
0933     0x10, 0x1b, 0x02, 0x00, 0x00,
0934     0x10, 0x11, 0x08, 0x61, 0x00, 0xe0, 0x00, 0x49, 0x00, 0xa8, 0x00,
0935     0x10, 0x26, 0x06, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
0936     0x10, 0x24, 0x02, 0x40, 0x06,
0937     0x10, 0x0e, 0x01, 0x08,
0938     0x10, 0x48, 0x11, 0x00, 0x15, 0x40, 0x67, 0x84, 0x9d, 0xb2, 0xc6,
0939               0xd6, 0xe7, 0xf6, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
0940               0xf9,
0941     0x10, 0x03, 0x01, 0x00,
0942     0x10, 0x0f, 0x02, 0x16, 0x16,
0943     0x10, 0x03, 0x01, 0x0c,
0944     0x10, 0x48, 0x11, 0x00, 0x15, 0x40, 0x67, 0x84, 0x9d, 0xb2, 0xc6,
0945               0xd6, 0xe7, 0xf6, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
0946               0xf9,
0947     0x10, 0x0b, 0x01, 0x26,
0948     0x10, 0x0d, 0x01, 0x10,
0949     0x10, 0x0c, 0x01, 0x1c,
0950     0x05, 0x06, 0x01, 0x03,
0951     0x05, 0x04, 0x01, 0x00,
0952     0, 0, 0
0953 };
0954 
0955 /* 06a5:d001 - nw802 - Panasonic
0956  *      GP-KR651US (Philips TDA8786) */
0957 static const u8 kr651_start_1[] = {
0958     0x04, 0x06, 0x01, 0x04,
0959     0x00, 0x00, 0x40, 0x44, 0x96, 0x98, 0xf9, 0x02, 0x18, 0x00, 0x48,
0960               0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
0961               0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
0962               0x00, 0x0b, 0x00, 0x1b, 0x00, 0xc8, 0x00, 0xf4,
0963               0x05, 0xb4, 0x00, 0xcc, 0x00, 0x01, 0x00, 0x01,
0964               0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0965               0x00, 0xa2, 0x00, 0xc6, 0x00, 0x60, 0x00, 0xc6,
0966               0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0967     0x00, 0x40, 0x40, 0x00, 0xae, 0x00, 0xd2, 0x00, 0xae, 0x00, 0xd2,
0968               0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0969               0x00, 0xa8, 0x00, 0xc0, 0x00, 0x66, 0x00, 0xc0,
0970               0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0971               0x00, 0x0a, 0x00, 0x54, 0x00, 0x0a, 0x00, 0x54,
0972               0x00, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
0973               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6,
0974               0x00, 0x5d, 0x00, 0xc7, 0x00, 0x7e, 0x00, 0x30,
0975     0x00, 0x80, 0x1f, 0x18, 0x43, 0x3f, 0x0d, 0x88, 0x20, 0x80, 0x3f,
0976               0x47, 0xaf, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
0977               0x00, 0x0c, 0x02, 0x0c, 0x00, 0x1c, 0x00, 0x94,
0978               0x00, 0x10, 0x06, 0x24, 0x00, 0x4a, 0x00,
0979     0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
0980               0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
0981               0x40, 0x20,
0982     0x03, 0x00, 0x03, 0x02, 0x00, 0x00,
0983     0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
0984     0x06, 0x00, 0x02, 0x09, 0x99,
0985     0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0986               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0987               0x00, 0x00, 0x00, 0x00, 0x00,
0988     0x10, 0x00, 0x40, 0xa0, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
0989               0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
0990               0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0991               0x00, 0x49, 0x13, 0x00, 0x00, 0xe0, 0x00, 0x0c,
0992               0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
0993               0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
0994               0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
0995               0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
0996     0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
0997               0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
0998               0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
0999               0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
1000               0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
1001               0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
1002               0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
1003               0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
1004     0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
1005               0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x05, 0x82,
1006               0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
1007               0x01, 0xf0, 0x00,
1008     0, 0, 0
1009 };
1010 static const u8 kr651_start_qvga[] = {
1011     0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
1012               0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
1013               0x40,
1014     0x10, 0x1a, 0x01, 0x03,
1015     0x10, 0x00, 0x01, 0xac,
1016     0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1017     0x10, 0x1b, 0x02, 0x00, 0x00,
1018     0x10, 0x11, 0x08, 0x29, 0x00, 0x18, 0x01, 0x1f, 0x00, 0xd2, 0x00,
1019     0x10, 0x1d, 0x06, 0xe0, 0x00, 0x0c, 0x00, 0x52, 0x00,
1020     0x10, 0x1d, 0x02, 0x28, 0x01,
1021     0, 0, 0
1022 };
1023 static const u8 kr651_start_vga[] = {
1024     0x02, 0x00, 0x11, 0x78, 0xa0, 0x8c, 0x78, 0xa0, 0x00, 0x00, 0x00,
1025               0x00, 0xf0, 0x30, 0x03, 0x01, 0x82, 0x82, 0x98,
1026               0x80,
1027     0x10, 0x1a, 0x01, 0x03,
1028     0x10, 0x00, 0x01, 0xa0,
1029     0x10, 0x85, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01,
1030     0x10, 0x1b, 0x02, 0x00, 0x00,
1031     0x10, 0x11, 0x08, 0x51, 0x00, 0x30, 0x02, 0x3d, 0x00, 0xa4, 0x01,
1032     0x10, 0x1d, 0x06, 0xe0, 0x00, 0x0c, 0x00, 0x52, 0x00,
1033     0x10, 0x1d, 0x02, 0x68, 0x00,
1034 };
1035 static const u8 kr651_start_2[] = {
1036     0x10, 0x0e, 0x01, 0x08,
1037     0x10, 0x41, 0x11, 0x00, 0x11, 0x3c, 0x5c, 0x74, 0x88, 0x99, 0xa8,
1038               0xb7, 0xc4, 0xd0, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
1039               0xdc,
1040     0x10, 0x03, 0x01, 0x00,
1041     0x10, 0x0f, 0x02, 0x0c, 0x0c,
1042     0x10, 0x03, 0x01, 0x0c,
1043     0x10, 0x41, 0x11, 0x00, 0x11, 0x3c, 0x5c, 0x74, 0x88, 0x99, 0xa8,
1044               0xb7, 0xc4, 0xd0, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
1045               0xdc,
1046     0x10, 0x0b, 0x01, 0x10,
1047     0x10, 0x0d, 0x01, 0x10,
1048     0x10, 0x0c, 0x01, 0x2d,
1049     0x04, 0x06, 0x01, 0x03,
1050     0x04, 0x04, 0x01, 0x00,
1051     0, 0, 0
1052 };
1053 
1054 /* nw802 - iRez Kritter cam */
1055 static const u8 kritter_start[] = {
1056     0x04, 0x06, 0x01, 0x06,
1057     0x00, 0x00, 0x40, 0x44, 0x96, 0x98, 0x94, 0x03, 0x18, 0x00, 0x48,
1058               0x0f, 0x1e, 0x00, 0x0c, 0x02, 0x01, 0x00, 0x19,
1059               0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
1060               0x00, 0x0b, 0x00, 0x1b, 0x00, 0x0a, 0x01, 0x28,
1061               0x07, 0xb4, 0x00, 0xcc, 0x00, 0x01, 0x00, 0x01,
1062               0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1063               0x00, 0xa2, 0x00, 0xc6, 0x00, 0x60, 0x00, 0xc6,
1064               0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1065     0x00, 0x40, 0x40, 0x00, 0xae, 0x00, 0xd2, 0x00, 0xae, 0x00, 0xd2,
1066               0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1067               0x00, 0xa8, 0x00, 0xc0, 0x00, 0x66, 0x00, 0xc0,
1068               0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1069               0x00, 0x0a, 0x00, 0x54, 0x00, 0x0a, 0x00, 0x54,
1070               0x00, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
1071               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6,
1072               0x00, 0x5d, 0x00, 0x0e, 0x00, 0x7e, 0x00, 0x30,
1073     0x00, 0x80, 0x1f, 0x18, 0x43, 0x3f, 0x0d, 0x88, 0x20, 0x80, 0x3f,
1074               0x47, 0xaf, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
1075               0x00, 0x0b, 0x02, 0x0c, 0x00, 0x1c, 0x00, 0x94,
1076               0x00, 0x10, 0x06, 0x24, 0x00, 0x4a, 0x00,
1077     0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
1078               0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
1079               0x40, 0x20,
1080     0x03, 0x00, 0x03, 0x02, 0x00, 0x00,
1081     0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00,
1082     0x06, 0x00, 0x02, 0x09, 0x99,
1083     0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1084               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1085               0x00, 0x00, 0x00, 0x00, 0x00,
1086     0x10, 0x00, 0x40, 0xa0, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
1087               0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
1088               0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1089               0x00, 0x49, 0x13, 0x00, 0x00, 0xe0, 0x00, 0x0c,
1090               0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
1091               0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
1092               0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
1093               0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
1094     0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
1095               0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
1096               0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
1097               0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
1098               0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
1099               0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
1100               0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
1101               0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
1102     0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
1103               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x82,
1104               0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
1105               0x01, 0xf0, 0x00,
1106     0x02, 0x00, 0x11, 0x3c, 0x50, 0x8c, 0x3c, 0x50, 0x00, 0x00, 0x00,
1107               0x00, 0x78, 0x3f, 0x3f, 0x06, 0xf2, 0x8f, 0xf0,
1108               0x40,
1109     0x10, 0x1a, 0x01, 0x03,
1110     0x10, 0x00, 0x01, 0xaf,
1111     0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1112     0x10, 0x1b, 0x02, 0x3b, 0x01,
1113     0x10, 0x11, 0x08, 0x61, 0x00, 0xe0, 0x00, 0x49, 0x00, 0xa8, 0x00,
1114     0x10, 0x1d, 0x06, 0xe0, 0x00, 0x0c, 0x00, 0x52, 0x00,
1115     0x10, 0x1d, 0x02, 0x00, 0x00,
1116     0x10, 0x0e, 0x01, 0x08,
1117     0x10, 0x41, 0x11, 0x00, 0x0d, 0x36, 0x4e, 0x60, 0x6f, 0x7b, 0x86,
1118               0x90, 0x98, 0xa1, 0xa9, 0xb1, 0xb7, 0xbe, 0xc4,
1119               0xcb,
1120     0x10, 0x03, 0x01, 0x00,
1121     0x10, 0x0f, 0x02, 0x0d, 0x0d,
1122     0x10, 0x03, 0x01, 0x02,
1123     0x10, 0x41, 0x11, 0x00, 0x0d, 0x36, 0x4e, 0x60, 0x6f, 0x7b, 0x86,
1124               0x90, 0x98, 0xa1, 0xa9, 0xb1, 0xb7, 0xbe, 0xc4,
1125               0xcb,
1126     0x10, 0x0b, 0x01, 0x17,
1127     0x10, 0x0d, 0x01, 0x10,
1128     0x10, 0x0c, 0x01, 0x1e,
1129     0x04, 0x06, 0x01, 0x03,
1130     0x04, 0x04, 0x01, 0x00,
1131     0, 0, 0
1132 };
1133 
1134 /* nw802 - Mustek Wcam 300 mini */
1135 static const u8 mustek_start[] = {
1136     0x04, 0x06, 0x01, 0x04,
1137     0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x92, 0x03, 0x10, 0x00, 0x4d,
1138               0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
1139               0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
1140               0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
1141               0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
1142               0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
1143               0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
1144               0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
1145     0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
1146               0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
1147               0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
1148               0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
1149               0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
1150               0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
1151               0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
1152               0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
1153     0x00, 0x80, 0x1f, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x68, 0x00,
1154               0x00, 0x00, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
1155               0x00, 0x0c, 0x02, 0x01, 0x00, 0x16, 0x00, 0x94,
1156               0x00, 0x10, 0x06, 0xfc, 0x05, 0x0c, 0x06,
1157     0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
1158               0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
1159               0x40, 0x20,
1160     0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
1161     0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
1162     0x06, 0x00, 0x02, 0x09, 0x99,
1163     0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1164               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1165               0x00, 0x00, 0x00, 0x00, 0x00,
1166     0x10, 0x00, 0x40, 0xa1, 0x02, 0x80, 0x00, 0x13, 0x00, 0x00, 0x00,
1167               0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
1168               0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1169               0x00, 0x49, 0x13, 0x00, 0x00, 0xc0, 0x00, 0x14,
1170               0x02, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00,
1171               0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
1172               0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
1173               0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
1174     0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
1175               0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
1176               0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
1177               0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
1178               0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
1179               0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
1180               0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
1181               0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
1182     0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
1183               0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x01, 0x82,
1184               0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
1185               0x01, 0xf0, 0x00,
1186     0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
1187               0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
1188               0x40,
1189     0x10, 0x1a, 0x01, 0x00,
1190     0x10, 0x00, 0x01, 0xad,
1191     0x00, 0x00, 0x01, 0x08,
1192     0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1193     0x10, 0x1b, 0x02, 0x00, 0x00,
1194     0x10, 0x11, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1195     0x10, 0x1d, 0x08, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
1196     0x10, 0x0e, 0x01, 0x0f,
1197     0x10, 0x41, 0x11, 0x00, 0x0f, 0x29, 0x4a, 0x64, 0x7a, 0x8c, 0x9e,
1198               0xad, 0xba, 0xc7, 0xd3, 0xde, 0xe8, 0xf1, 0xf9,
1199               0xff,
1200     0x10, 0x0f, 0x02, 0x11, 0x11,
1201     0x10, 0x03, 0x01, 0x0c,
1202     0x10, 0x41, 0x11, 0x00, 0x0f, 0x29, 0x4a, 0x64, 0x7a, 0x8c, 0x9e,
1203               0xad, 0xba, 0xc7, 0xd3, 0xde, 0xe8, 0xf1, 0xf9,
1204               0xff,
1205     0x10, 0x0b, 0x01, 0x1c,
1206     0x10, 0x0d, 0x01, 0x1a,
1207     0x10, 0x0c, 0x01, 0x34,
1208     0x04, 0x05, 0x01, 0x61,
1209     0x04, 0x04, 0x01, 0x40,
1210     0x04, 0x06, 0x01, 0x03,
1211     0, 0, 0
1212 };
1213 
1214 /* nw802 - Scope USB Microscope M2 (ProScope) (Hitachi HD49322BF) */
1215 static const u8 proscope_init[] = {
1216     0x04, 0x05, 0x01, 0x21,
1217     0x04, 0x04, 0x01, 0x01,
1218     0, 0, 0
1219 };
1220 static const u8 proscope_start_1[] = {
1221     0x04, 0x06, 0x01, 0x04,
1222     0x00, 0x00, 0x40, 0x10, 0x01, 0x00, 0xf9, 0x02, 0x10, 0x00, 0x04,
1223               0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
1224               0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
1225               0x00, 0x08, 0x00, 0x17, 0x00, 0xce, 0x00, 0xf4,
1226               0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
1227               0x00, 0xce, 0x00, 0xf8, 0x03, 0x3e, 0x00, 0x86,
1228               0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
1229               0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
1230     0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0xb6,
1231               0x00, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
1232               0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
1233               0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
1234               0x00, 0xf6, 0x03, 0x34, 0x04, 0xf6, 0x03, 0x34,
1235               0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
1236               0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xe8,
1237               0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
1238     0x00, 0x80, 0x1f, 0xb4, 0x6f, 0x1f, 0x0f, 0x08, 0x20, 0xa8, 0x00,
1239               0x00, 0x00, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
1240               0x00, 0x0c, 0x02, 0x01, 0x00, 0x19, 0x00, 0x94,
1241               0x00, 0x10, 0x06, 0x10, 0x00, 0x36, 0x00,
1242     0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
1243               0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
1244               0x40, 0x20,
1245     0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
1246     0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
1247     0x06, 0x00, 0x02, 0x09, 0x99,
1248     0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1249               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1250               0x00, 0x00, 0x00, 0x00, 0x00,
1251     0x10, 0x00, 0x40, 0xad, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
1252               0x00, 0x00, 0x00, 0x10, 0x1f, 0x10, 0x08, 0x0a,
1253               0x0a, 0x51, 0x00, 0xf1, 0x00, 0x3c, 0x00, 0xb4,
1254               0x00, 0x49, 0x13, 0x00, 0x00, 0x8c, 0x04, 0x01,
1255               0x20, 0x02, 0x00, 0x03, 0x00, 0x20, 0x00, 0x00,
1256               0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
1257               0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
1258               0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
1259     0x10, 0x40, 0x40, 0x80, 0x00, 0x2d, 0x46, 0x58, 0x67, 0x74, 0x7f,
1260               0x88, 0x94, 0x9d, 0xa6, 0xae, 0xb5, 0xbd, 0xc4,
1261               0xcb, 0xd1, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
1262               0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
1263               0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
1264               0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
1265               0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
1266               0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
1267     0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x3f,
1268               0x01, 0x00, 0x00, 0xef, 0x00, 0x09, 0x05, 0x82,
1269               0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
1270               0x01, 0xf0, 0x00,
1271     0, 0, 0
1272 };
1273 static const u8 proscope_start_qvga[] = {
1274     0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
1275               0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
1276               0x40,
1277     0x10, 0x1a, 0x01, 0x06,
1278     0x00, 0x03, 0x02, 0xf9, 0x02,
1279     0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1280     0x10, 0x1b, 0x02, 0x00, 0x00,
1281     0x10, 0x11, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1282     0x10, 0x1d, 0x08, 0xc0, 0x0d, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
1283     0x10, 0x0e, 0x01, 0x10,
1284     0, 0, 0
1285 };
1286 static const u8 proscope_start_vga[] = {
1287     0x00, 0x03, 0x02, 0xf9, 0x02,
1288     0x10, 0x85, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01,
1289     0x02, 0x00, 0x11, 0x78, 0xa0, 0x8c, 0x78, 0xa0, 0x00, 0x00, 0x00,
1290               0x00, 0xf0, 0x16, 0x00, 0x00, 0x82, 0x84, 0x00,
1291               0x80,
1292     0x10, 0x1a, 0x01, 0x06,
1293     0x10, 0x00, 0x01, 0xa1,
1294     0x10, 0x1b, 0x02, 0x00, 0x00,
1295     0x10, 0x1d, 0x08, 0xc0, 0x0d, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
1296     0x10, 0x11, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01,
1297     0x10, 0x0e, 0x01, 0x10,
1298     0x10, 0x41, 0x11, 0x00, 0x10, 0x51, 0x6e, 0x83, 0x93, 0xa1, 0xae,
1299               0xb9, 0xc3, 0xcc, 0xd4, 0xdd, 0xe4, 0xeb, 0xf2,
1300               0xf9,
1301     0x10, 0x03, 0x01, 0x00,
1302     0, 0, 0
1303 };
1304 static const u8 proscope_start_2[] = {
1305     0x10, 0x0f, 0x02, 0x0c, 0x0c,
1306     0x10, 0x03, 0x01, 0x0c,
1307     0x10, 0x41, 0x11, 0x00, 0x10, 0x51, 0x6e, 0x83, 0x93, 0xa1, 0xae,
1308               0xb9, 0xc3, 0xcc, 0xd4, 0xdd, 0xe4, 0xeb, 0xf2,
1309               0xf9,
1310     0x10, 0x0b, 0x01, 0x0b,
1311     0x10, 0x0d, 0x01, 0x10,
1312     0x10, 0x0c, 0x01, 0x1b,
1313     0x04, 0x06, 0x01, 0x03,
1314     0x04, 0x05, 0x01, 0x21,
1315     0x04, 0x04, 0x01, 0x00,
1316     0, 0, 0
1317 };
1318 
1319 /* nw800 - hv7121b? (seems pas106) - Divio Chicony TwinkleCam */
1320 static const u8 twinkle_start[] = {
1321     0x04, 0x06, 0x01, 0x44,
1322     0x04, 0x06, 0x01, 0x00,
1323     0x00, 0x00, 0x40, 0x14, 0x83, 0x00, 0xba, 0x01, 0x10, 0x00, 0x4f,
1324               0xef, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0x19,
1325               0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
1326               0x00, 0x01, 0x00, 0x19, 0x00, 0x06, 0x00, 0xfc,
1327               0x01, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
1328               0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
1329               0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
1330               0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
1331     0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
1332               0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
1333               0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
1334               0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
1335               0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
1336               0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
1337               0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
1338               0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
1339     0x00, 0x80, 0x1f, 0xb8, 0x48, 0x0f, 0x04, 0x88, 0x14, 0x68, 0x00,
1340               0x00, 0x00, 0x00, 0x00, 0xa8, 0x01, 0x00, 0x03,
1341               0x00, 0x24, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
1342               0x00, 0x4b, 0x00, 0x76, 0x00, 0x86, 0x00,
1343     0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
1344               0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
1345               0x40, 0x20,
1346     0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
1347     0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x61, 0x00,
1348     0x05, 0x00, 0x06, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
1349     0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1350               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1351               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1352               0x00, 0x00, 0x00,
1353     0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1354               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1355               0x00, 0x00, 0x00, 0x00, 0x00,
1356     0x10, 0x00, 0x40, 0x80, 0x02, 0x20, 0x00, 0x11, 0x00, 0x00, 0x00,
1357               0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x08,
1358               0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1359               0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
1360               0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
1361               0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
1362               0x03, 0x00, 0x00, 0x10, 0x00, 0x20, 0x10, 0x06,
1363               0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x00, 0x80,
1364     0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
1365               0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
1366               0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
1367               0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
1368               0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
1369               0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
1370               0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
1371               0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
1372     0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
1373               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x62,
1374               0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
1375               0x01, 0x60, 0x01, 0x00, 0x00,
1376 
1377     0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
1378     0x04, 0x04, 0x01, 0x10,
1379     0x04, 0x04, 0x01, 0x00,
1380     0x04, 0x05, 0x01, 0x61,
1381     0x04, 0x04, 0x01, 0x01,
1382     I2C0, 0x40, 0x0c, 0x02, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x00,
1383               0x00, 0x00, 0x00, 0x0a,
1384     I2C0, 0x40, 0x02, 0x11, 0x06,
1385     I2C0, 0x40, 0x02, 0x14, 0x00,
1386     I2C0, 0x40, 0x02, 0x13, 0x01,       /* i2c end */
1387     I2C0, 0x40, 0x02, 0x07, 0x01,
1388     0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00,
1389               0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65,
1390               0x40,
1391     I2C0, 0x40, 0x02, 0x02, 0x0c,
1392     I2C0, 0x40, 0x02, 0x13, 0x01,
1393     0x10, 0x00, 0x01, 0x01,
1394     0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01,
1395               0x20, 0x01, 0x60, 0x01,
1396     I2C0, 0x40, 0x02, 0x05, 0x0f,
1397     I2C0, 0x40, 0x02, 0x13, 0x01,
1398     I2C0, 0x40, 0x08, 0x08, 0x04, 0x0b, 0x01, 0x01, 0x02, 0x00, 0x17,
1399     I2C0, 0x40, 0x03, 0x12, 0x00, 0x01,
1400     0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
1401     I2C0, 0x40, 0x02, 0x12, 0x00,
1402     I2C0, 0x40, 0x02, 0x0e, 0x00,
1403     I2C0, 0x40, 0x02, 0x11, 0x06,
1404     0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7,
1405               0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7,
1406               0xf9,
1407     0x10, 0x03, 0x01, 0x00,
1408     0x10, 0x0f, 0x02, 0x0c, 0x0c,
1409     0x10, 0x03, 0x01, 0x06,
1410     0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7,
1411               0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7,
1412               0xf9,
1413     0x10, 0x0b, 0x01, 0x19,
1414     0x10, 0x0d, 0x01, 0x10,
1415     0x10, 0x0c, 0x01, 0x0d,
1416     0x04, 0x06, 0x01, 0x03,
1417     0x04, 0x05, 0x01, 0x61,
1418     0x04, 0x04, 0x01, 0x41,
1419     0, 0, 0
1420 };
1421 
1422 /* nw802 dvc-v6 */
1423 static const u8 dvcv6_start[] = {
1424     0x04, 0x06, 0x01, 0x06,
1425     0x00, 0x00, 0x40, 0x54, 0x96, 0x98, 0xf9, 0x02, 0x18, 0x00, 0x4c,
1426               0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
1427               0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
1428               0x00, 0x0b, 0x00, 0x1b, 0x00, 0xc8, 0x00, 0xf4,
1429               0x05, 0xb4, 0x00, 0xcc, 0x00, 0x01, 0x00, 0x01,
1430               0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1431               0x00, 0xa2, 0x00, 0xc6, 0x00, 0x60, 0x00, 0xc6,
1432               0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1433     0x00, 0x40, 0x40, 0x00, 0xae, 0x00, 0xd2, 0x00, 0xae, 0x00, 0xd2,
1434               0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1435               0x00, 0xa8, 0x00, 0xc0, 0x00, 0x66, 0x00, 0xc0,
1436               0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1437               0x00, 0x0a, 0x00, 0x54, 0x00, 0x0a, 0x00, 0x54,
1438               0x00, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
1439               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6,
1440               0x00, 0x5d, 0x00, 0xc7, 0x00, 0x7e, 0x00, 0x30,
1441     0x00, 0x80, 0x1f, 0x98, 0x43, 0x3f, 0x0d, 0x88, 0x20, 0x80, 0x3f,
1442               0x47, 0xaf, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
1443               0x00, 0x0c, 0x02, 0x0c, 0x00, 0x1c, 0x00, 0x94,
1444               0x00, 0x10, 0x06, 0x24, 0x00, 0x4a, 0x00,
1445     0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
1446               0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
1447               0x40, 0x20,
1448     0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
1449     0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00,
1450     0x06, 0x00, 0x02, 0x09, 0x99,
1451     0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1452               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1453               0x00, 0x00, 0x00, 0x00, 0x00,
1454     0x10, 0x00, 0x40, 0xa0, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
1455               0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
1456               0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1457               0x00, 0x49, 0x13, 0x00, 0x00, 0xe0, 0x00, 0x0c,
1458               0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
1459               0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
1460               0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
1461               0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
1462     0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
1463               0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
1464               0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
1465               0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
1466               0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
1467               0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
1468               0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
1469               0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
1470     0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
1471               0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x05, 0x82,
1472               0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
1473               0x01, 0xf0, 0x00,
1474     0x00, 0x03, 0x02, 0x94, 0x03,
1475     0x00, 0x1d, 0x04, 0x0a, 0x01, 0x28, 0x07,
1476     0x00, 0x7b, 0x02, 0xe0, 0x00,
1477     0x10, 0x8d, 0x01, 0x00,
1478     0x00, 0x09, 0x04, 0x1e, 0x00, 0x0c, 0x02,
1479     0x00, 0x91, 0x02, 0x0b, 0x02,
1480     0x10, 0x00, 0x01, 0xaf,
1481     0x02, 0x00, 0x11, 0x3c, 0x50, 0x8f, 0x3c, 0x50, 0x00, 0x00, 0x00,
1482               0x00, 0x78, 0x3f, 0x3f, 0x06, 0xf2, 0x8f, 0xf0,
1483               0x40,
1484     0x10, 0x1a, 0x01, 0x02,
1485     0x10, 0x00, 0x01, 0xaf,
1486     0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1487     0x10, 0x1b, 0x02, 0x07, 0x01,
1488     0x10, 0x11, 0x08, 0x61, 0x00, 0xe0, 0x00, 0x49, 0x00, 0xa8, 0x00,
1489     0x10, 0x1f, 0x06, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
1490     0x10, 0x1d, 0x02, 0x40, 0x06,
1491     0x10, 0x0e, 0x01, 0x08,
1492     0x10, 0x41, 0x11, 0x00, 0x0f, 0x54, 0x6f, 0x82, 0x91, 0x9f, 0xaa,
1493               0xb4, 0xbd, 0xc5, 0xcd, 0xd5, 0xdb, 0xdc, 0xdc,
1494               0xdc,
1495     0x10, 0x03, 0x01, 0x00,
1496     0x10, 0x0f, 0x02, 0x12, 0x12,
1497     0x10, 0x03, 0x01, 0x11,
1498     0x10, 0x41, 0x11, 0x00, 0x0f, 0x54, 0x6f, 0x82, 0x91, 0x9f, 0xaa,
1499               0xb4, 0xbd, 0xc5, 0xcd, 0xd5, 0xdb, 0xdc, 0xdc,
1500               0xdc,
1501     0x10, 0x0b, 0x01, 0x16,
1502     0x10, 0x0d, 0x01, 0x10,
1503     0x10, 0x0c, 0x01, 0x1a,
1504     0x04, 0x06, 0x01, 0x03,
1505     0x04, 0x04, 0x01, 0x00,
1506 };
1507 
1508 static const u8 *webcam_start[] = {
1509     [Generic800] = nw800_start,
1510     [SpaceCam] = spacecam_start,
1511     [SpaceCam2] = spacecam2_start,
1512     [Cvideopro] = cvideopro_start,
1513     [Dlink350c] = dlink_start,
1514     [DS3303u] = ds3303_start,
1515     [Kr651us] = kr651_start_1,
1516     [Kritter] = kritter_start,
1517     [Mustek300] = mustek_start,
1518     [Proscope] = proscope_start_1,
1519     [Twinkle] = twinkle_start,
1520     [DvcV6] = dvcv6_start,
1521     [P35u] = nw801_start_1,
1522     [Generic802] = nw802_start,
1523 };
1524 
1525 /* -- write a register -- */
1526 static void reg_w(struct gspca_dev *gspca_dev,
1527             u16 index,
1528             const u8 *data,
1529             int len)
1530 {
1531     struct usb_device *dev = gspca_dev->dev;
1532     int ret;
1533 
1534     if (gspca_dev->usb_err < 0)
1535         return;
1536     if (len == 1)
1537         gspca_dbg(gspca_dev, D_USBO, "SET 00 0000 %04x %02x\n",
1538               index, *data);
1539     else
1540         gspca_dbg(gspca_dev, D_USBO, "SET 00 0000 %04x %02x %02x ...\n",
1541               index, *data, data[1]);
1542     memcpy(gspca_dev->usb_buf, data, len);
1543     ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
1544             0x00,
1545             USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
1546             0x00,       /* value */
1547             index,
1548             gspca_dev->usb_buf,
1549             len,
1550             500);
1551     if (ret < 0) {
1552         pr_err("reg_w err %d\n", ret);
1553         gspca_dev->usb_err = ret;
1554     }
1555 }
1556 
1557 /* -- read registers in usb_buf -- */
1558 static void reg_r(struct gspca_dev *gspca_dev,
1559             u16 index,
1560             int len)
1561 {
1562     struct usb_device *dev = gspca_dev->dev;
1563     int ret;
1564 
1565     if (gspca_dev->usb_err < 0)
1566         return;
1567     ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
1568             0x00,
1569             USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
1570             0x00, index,
1571             gspca_dev->usb_buf, len, 500);
1572     if (ret < 0) {
1573         pr_err("reg_r err %d\n", ret);
1574         gspca_dev->usb_err = ret;
1575         /*
1576          * Make sure the buffer is zeroed to avoid uninitialized
1577          * values.
1578          */
1579         memset(gspca_dev->usb_buf, 0, USB_BUF_SZ);
1580         return;
1581     }
1582     if (len == 1)
1583         gspca_dbg(gspca_dev, D_USBI, "GET 00 0000 %04x %02x\n",
1584               index, gspca_dev->usb_buf[0]);
1585     else
1586         gspca_dbg(gspca_dev, D_USBI, "GET 00 0000 %04x %02x %02x ..\n",
1587               index, gspca_dev->usb_buf[0],
1588               gspca_dev->usb_buf[1]);
1589 }
1590 
1591 static void i2c_w(struct gspca_dev *gspca_dev,
1592             u8 i2c_addr,
1593             const u8 *data,
1594             int len)
1595 {
1596     u8 val[2];
1597     int i;
1598 
1599     reg_w(gspca_dev, 0x0600, data + 1, len - 1);
1600     reg_w(gspca_dev, 0x0600, data, len);
1601     val[0] = len;
1602     val[1] = i2c_addr;
1603     reg_w(gspca_dev, 0x0502, val, 2);
1604     val[0] = 0x01;
1605     reg_w(gspca_dev, 0x0501, val, 1);
1606     for (i = 5; --i >= 0; ) {
1607         msleep(4);
1608         reg_r(gspca_dev, 0x0505, 1);
1609         if (gspca_dev->usb_err < 0)
1610             return;
1611         if (gspca_dev->usb_buf[0] == 0)
1612             return;
1613     }
1614     gspca_dev->usb_err = -ETIME;
1615 }
1616 
1617 static void reg_w_buf(struct gspca_dev *gspca_dev,
1618             const u8 *cmd)
1619 {
1620     u16 reg;
1621     int len;
1622 
1623     for (;;) {
1624         reg = *cmd++ << 8;
1625         reg += *cmd++;
1626         len = *cmd++;
1627         if (len == 0)
1628             break;
1629         if (cmd[-3] != I2C0)
1630             reg_w(gspca_dev, reg, cmd, len);
1631         else
1632             i2c_w(gspca_dev, reg, cmd, len);
1633         cmd += len;
1634     }
1635 }
1636 
1637 static int swap_bits(int v)
1638 {
1639     int r, i;
1640 
1641     r = 0;
1642     for (i = 0; i < 8; i++) {
1643         r <<= 1;
1644         if (v & 1)
1645             r++;
1646         v >>= 1;
1647     }
1648     return r;
1649 }
1650 
1651 static void setgain(struct gspca_dev *gspca_dev, u8 val)
1652 {
1653     struct sd *sd = (struct sd *) gspca_dev;
1654     u8 v[2];
1655 
1656     switch (sd->webcam) {
1657     case P35u:
1658         reg_w(gspca_dev, 0x1026, &val, 1);
1659         break;
1660     case Kr651us:
1661         /* 0 - 253 */
1662         val = swap_bits(val);
1663         v[0] = val << 3;
1664         v[1] = val >> 5;
1665         reg_w(gspca_dev, 0x101d, v, 2); /* SIF reg0/1 (AGC) */
1666         break;
1667     }
1668 }
1669 
1670 static void setexposure(struct gspca_dev *gspca_dev, s32 val)
1671 {
1672     struct sd *sd = (struct sd *) gspca_dev;
1673     u8 v[2];
1674 
1675     switch (sd->webcam) {
1676     case P35u:
1677         v[0] = ((9 - val) << 3) | 0x01;
1678         reg_w(gspca_dev, 0x1019, v, 1);
1679         break;
1680     case Cvideopro:
1681     case DvcV6:
1682     case Kritter:
1683     case Kr651us:
1684         v[0] = val;
1685         v[1] = val >> 8;
1686         reg_w(gspca_dev, 0x101b, v, 2);
1687         break;
1688     }
1689 }
1690 
1691 static void setautogain(struct gspca_dev *gspca_dev, s32 val)
1692 {
1693     struct sd *sd = (struct sd *) gspca_dev;
1694     int w, h;
1695 
1696     if (!val) {
1697         sd->ag_cnt = -1;
1698         return;
1699     }
1700     sd->ag_cnt = AG_CNT_START;
1701 
1702     reg_r(gspca_dev, 0x1004, 1);
1703     if (gspca_dev->usb_buf[0] & 0x04) { /* if AE_FULL_FRM */
1704         sd->ae_res = gspca_dev->pixfmt.width * gspca_dev->pixfmt.height;
1705     } else {                /* get the AE window size */
1706         reg_r(gspca_dev, 0x1011, 8);
1707         w = (gspca_dev->usb_buf[1] << 8) + gspca_dev->usb_buf[0]
1708           - (gspca_dev->usb_buf[3] << 8) - gspca_dev->usb_buf[2];
1709         h = (gspca_dev->usb_buf[5] << 8) + gspca_dev->usb_buf[4]
1710           - (gspca_dev->usb_buf[7] << 8) - gspca_dev->usb_buf[6];
1711         sd->ae_res = h * w;
1712         if (sd->ae_res == 0)
1713             sd->ae_res = gspca_dev->pixfmt.width *
1714                     gspca_dev->pixfmt.height;
1715     }
1716 }
1717 
1718 static int nw802_test_reg(struct gspca_dev *gspca_dev,
1719             u16 index,
1720             u8 value)
1721 {
1722     /* write the value */
1723     reg_w(gspca_dev, index, &value, 1);
1724 
1725     /* read it */
1726     reg_r(gspca_dev, index, 1);
1727 
1728     return gspca_dev->usb_buf[0] == value;
1729 }
1730 
1731 /* this function is called at probe time */
1732 static int sd_config(struct gspca_dev *gspca_dev,
1733             const struct usb_device_id *id)
1734 {
1735     struct sd *sd = (struct sd *) gspca_dev;
1736 
1737     if ((unsigned) webcam >= NWEBCAMS)
1738         webcam = 0;
1739     sd->webcam = webcam;
1740     gspca_dev->cam.needs_full_bandwidth = 1;
1741     sd->ag_cnt = -1;
1742 
1743     /*
1744      * Autodetect sequence inspired from some log.
1745      * We try to detect what registers exist or not.
1746      * If 0x0500 does not exist => NW802
1747      * If it does, test 0x109b. If it doesn't exist,
1748      * then it's a NW801. Else, a NW800
1749      * If a et31x110 (nw800 and 06a5:d800)
1750      *  get the sensor ID
1751      */
1752     if (!nw802_test_reg(gspca_dev, 0x0500, 0x55)) {
1753         sd->bridge = BRIDGE_NW802;
1754         if (sd->webcam == Generic800)
1755             sd->webcam = Generic802;
1756     } else if (!nw802_test_reg(gspca_dev, 0x109b, 0xaa)) {
1757         sd->bridge = BRIDGE_NW801;
1758         if (sd->webcam == Generic800)
1759             sd->webcam = P35u;
1760     } else if (id->idVendor == 0x06a5 && id->idProduct == 0xd800) {
1761         reg_r(gspca_dev, 0x0403, 1);        /* GPIO */
1762         gspca_dbg(gspca_dev, D_PROBE, "et31x110 sensor type %02x\n",
1763               gspca_dev->usb_buf[0]);
1764         switch (gspca_dev->usb_buf[0] >> 1) {
1765         case 0x00:              /* ?? */
1766             if (sd->webcam == Generic800)
1767                 sd->webcam = SpaceCam;
1768             break;
1769         case 0x01:              /* Hynix? */
1770             if (sd->webcam == Generic800)
1771                 sd->webcam = Twinkle;
1772             break;
1773         case 0x0a:              /* Pixart */
1774             if (sd->webcam == Generic800)
1775                 sd->webcam = SpaceCam2;
1776             break;
1777         }
1778     }
1779     if (webcam_chip[sd->webcam] != sd->bridge) {
1780         pr_err("Bad webcam type %d for NW80%d\n",
1781                sd->webcam, sd->bridge);
1782         gspca_dev->usb_err = -ENODEV;
1783         return gspca_dev->usb_err;
1784     }
1785     gspca_dbg(gspca_dev, D_PROBE, "Bridge nw80%d - type: %d\n",
1786           sd->bridge, sd->webcam);
1787 
1788     if (sd->bridge == BRIDGE_NW800) {
1789         switch (sd->webcam) {
1790         case DS3303u:
1791             gspca_dev->cam.cam_mode = cif_mode; /* qvga */
1792             break;
1793         default:
1794             gspca_dev->cam.cam_mode = &cif_mode[1]; /* cif */
1795             break;
1796         }
1797         gspca_dev->cam.nmodes = 1;
1798     } else {
1799         gspca_dev->cam.cam_mode = vga_mode;
1800         switch (sd->webcam) {
1801         case Kr651us:
1802         case Proscope:
1803         case P35u:
1804             gspca_dev->cam.nmodes = ARRAY_SIZE(vga_mode);
1805             break;
1806         default:
1807             gspca_dev->cam.nmodes = 1;  /* qvga only */
1808             break;
1809         }
1810     }
1811 
1812     return gspca_dev->usb_err;
1813 }
1814 
1815 /* this function is called at probe and resume time */
1816 static int sd_init(struct gspca_dev *gspca_dev)
1817 {
1818     struct sd *sd = (struct sd *) gspca_dev;
1819 
1820     switch (sd->bridge) {
1821     case BRIDGE_NW800:
1822         switch (sd->webcam) {
1823         case SpaceCam:
1824             reg_w_buf(gspca_dev, spacecam_init);
1825             break;
1826         default:
1827             reg_w_buf(gspca_dev, nw800_init);
1828             break;
1829         }
1830         break;
1831     default:
1832         switch (sd->webcam) {
1833         case Mustek300:
1834         case P35u:
1835         case Proscope:
1836             reg_w_buf(gspca_dev, proscope_init);
1837             break;
1838         }
1839         break;
1840     }
1841     return gspca_dev->usb_err;
1842 }
1843 
1844 /* -- start the camera -- */
1845 static int sd_start(struct gspca_dev *gspca_dev)
1846 {
1847     struct sd *sd = (struct sd *) gspca_dev;
1848     const u8 *cmd;
1849 
1850     cmd = webcam_start[sd->webcam];
1851     reg_w_buf(gspca_dev, cmd);
1852     switch (sd->webcam) {
1853     case P35u:
1854         if (gspca_dev->pixfmt.width == 320)
1855             reg_w_buf(gspca_dev, nw801_start_qvga);
1856         else
1857             reg_w_buf(gspca_dev, nw801_start_vga);
1858         reg_w_buf(gspca_dev, nw801_start_2);
1859         break;
1860     case Kr651us:
1861         if (gspca_dev->pixfmt.width == 320)
1862             reg_w_buf(gspca_dev, kr651_start_qvga);
1863         else
1864             reg_w_buf(gspca_dev, kr651_start_vga);
1865         reg_w_buf(gspca_dev, kr651_start_2);
1866         break;
1867     case Proscope:
1868         if (gspca_dev->pixfmt.width == 320)
1869             reg_w_buf(gspca_dev, proscope_start_qvga);
1870         else
1871             reg_w_buf(gspca_dev, proscope_start_vga);
1872         reg_w_buf(gspca_dev, proscope_start_2);
1873         break;
1874     }
1875 
1876     sd->exp_too_high_cnt = 0;
1877     sd->exp_too_low_cnt = 0;
1878     return gspca_dev->usb_err;
1879 }
1880 
1881 static void sd_stopN(struct gspca_dev *gspca_dev)
1882 {
1883     struct sd *sd = (struct sd *) gspca_dev;
1884     u8 value;
1885 
1886     /* 'go' off */
1887     if (sd->bridge != BRIDGE_NW801) {
1888         value = 0x02;
1889         reg_w(gspca_dev, 0x0406, &value, 1);
1890     }
1891 
1892     /* LED off */
1893     switch (sd->webcam) {
1894     case Cvideopro:
1895     case Kr651us:
1896     case DvcV6:
1897     case Kritter:
1898         value = 0xff;
1899         break;
1900     case Dlink350c:
1901         value = 0x21;
1902         break;
1903     case SpaceCam:
1904     case SpaceCam2:
1905     case Proscope:
1906     case Twinkle:
1907         value = 0x01;
1908         break;
1909     default:
1910         return;
1911     }
1912     reg_w(gspca_dev, 0x0404, &value, 1);
1913 }
1914 
1915 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
1916             u8 *data,           /* isoc packet */
1917             int len)            /* iso packet length */
1918 {
1919     /*
1920      * frame header = '00 00 hh ww ss xx ff ff'
1921      * with:
1922      *  - 'hh': height / 4
1923      *  - 'ww': width / 4
1924      *  - 'ss': frame sequence number c0..dd
1925      */
1926     if (data[0] == 0x00 && data[1] == 0x00
1927      && data[6] == 0xff && data[7] == 0xff) {
1928         gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0);
1929         gspca_frame_add(gspca_dev, FIRST_PACKET, data + 8, len - 8);
1930     } else {
1931         gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
1932     }
1933 }
1934 
1935 static void do_autogain(struct gspca_dev *gspca_dev)
1936 {
1937     struct sd *sd = (struct sd *) gspca_dev;
1938     int luma;
1939 
1940     if (sd->ag_cnt < 0)
1941         return;
1942     if (--sd->ag_cnt >= 0)
1943         return;
1944     sd->ag_cnt = AG_CNT_START;
1945 
1946     /* get the average luma */
1947     reg_r(gspca_dev, sd->bridge == BRIDGE_NW801 ? 0x080d : 0x080c, 4);
1948     luma = (gspca_dev->usb_buf[3] << 24) + (gspca_dev->usb_buf[2] << 16)
1949         + (gspca_dev->usb_buf[1] << 8) + gspca_dev->usb_buf[0];
1950     luma /= sd->ae_res;
1951 
1952     switch (sd->webcam) {
1953     case P35u:
1954         gspca_coarse_grained_expo_autogain(gspca_dev, luma, 100, 5);
1955         break;
1956     default:
1957         gspca_expo_autogain(gspca_dev, luma, 100, 5, 230, 0);
1958         break;
1959     }
1960 }
1961 
1962 
1963 static int sd_s_ctrl(struct v4l2_ctrl *ctrl)
1964 {
1965     struct gspca_dev *gspca_dev =
1966         container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
1967 
1968     gspca_dev->usb_err = 0;
1969 
1970     if (!gspca_dev->streaming)
1971         return 0;
1972 
1973     switch (ctrl->id) {
1974     /* autogain/gain/exposure control cluster */
1975     case V4L2_CID_AUTOGAIN:
1976         if (ctrl->is_new)
1977             setautogain(gspca_dev, ctrl->val);
1978         if (!ctrl->val) {
1979             if (gspca_dev->gain->is_new)
1980                 setgain(gspca_dev, gspca_dev->gain->val);
1981             if (gspca_dev->exposure->is_new)
1982                 setexposure(gspca_dev,
1983                         gspca_dev->exposure->val);
1984         }
1985         break;
1986     /* Some webcams only have exposure, so handle that separately from the
1987        autogain/gain/exposure cluster in the previous case. */
1988     case V4L2_CID_EXPOSURE:
1989         setexposure(gspca_dev, gspca_dev->exposure->val);
1990         break;
1991     }
1992     return gspca_dev->usb_err;
1993 }
1994 
1995 static const struct v4l2_ctrl_ops sd_ctrl_ops = {
1996     .s_ctrl = sd_s_ctrl,
1997 };
1998 
1999 static int sd_init_controls(struct gspca_dev *gspca_dev)
2000 {
2001     struct sd *sd = (struct sd *)gspca_dev;
2002     struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler;
2003 
2004     gspca_dev->vdev.ctrl_handler = hdl;
2005     v4l2_ctrl_handler_init(hdl, 3);
2006     switch (sd->webcam) {
2007     case P35u:
2008         gspca_dev->autogain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2009             V4L2_CID_AUTOGAIN, 0, 1, 1, 1);
2010         /* For P35u choose coarse expo auto gain function gain minimum,
2011          * to avoid a large settings jump the first auto adjustment */
2012         gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2013             V4L2_CID_GAIN, 0, 127, 1, 127 / 5 * 2);
2014         gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2015             V4L2_CID_EXPOSURE, 0, 9, 1, 9);
2016         break;
2017     case Kr651us:
2018         gspca_dev->autogain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2019             V4L2_CID_AUTOGAIN, 0, 1, 1, 1);
2020         gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2021             V4L2_CID_GAIN, 0, 253, 1, 128);
2022         fallthrough;
2023     case Cvideopro:
2024     case DvcV6:
2025     case Kritter:
2026         gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2027             V4L2_CID_EXPOSURE, 0, 315, 1, 150);
2028         break;
2029     default:
2030         break;
2031     }
2032 
2033     if (hdl->error) {
2034         pr_err("Could not initialize controls\n");
2035         return hdl->error;
2036     }
2037     if (gspca_dev->autogain)
2038         v4l2_ctrl_auto_cluster(3, &gspca_dev->autogain, 0, false);
2039     return 0;
2040 }
2041 
2042 /* sub-driver description */
2043 static const struct sd_desc sd_desc = {
2044     .name = MODULE_NAME,
2045     .config = sd_config,
2046     .init = sd_init,
2047     .init_controls = sd_init_controls,
2048     .start = sd_start,
2049     .stopN = sd_stopN,
2050     .pkt_scan = sd_pkt_scan,
2051     .dq_callback = do_autogain,
2052 };
2053 
2054 /* -- module initialisation -- */
2055 static const struct usb_device_id device_table[] = {
2056     {USB_DEVICE(0x046d, 0xd001)},
2057     {USB_DEVICE(0x0502, 0xd001)},
2058     {USB_DEVICE(0x052b, 0xd001)},
2059     {USB_DEVICE(0x055f, 0xd001)},
2060     {USB_DEVICE(0x06a5, 0x0000)},
2061     {USB_DEVICE(0x06a5, 0xd001)},
2062     {USB_DEVICE(0x06a5, 0xd800)},
2063     {USB_DEVICE(0x06be, 0xd001)},
2064     {USB_DEVICE(0x0728, 0xd001)},
2065     {}
2066 };
2067 MODULE_DEVICE_TABLE(usb, device_table);
2068 
2069 /* -- device connect -- */
2070 static int sd_probe(struct usb_interface *intf,
2071             const struct usb_device_id *id)
2072 {
2073     return gspca_dev_probe(intf, id, &sd_desc, sizeof(struct sd),
2074                 THIS_MODULE);
2075 }
2076 
2077 static struct usb_driver sd_driver = {
2078     .name = MODULE_NAME,
2079     .id_table = device_table,
2080     .probe = sd_probe,
2081     .disconnect = gspca_disconnect,
2082 #ifdef CONFIG_PM
2083     .suspend = gspca_suspend,
2084     .resume = gspca_resume,
2085     .reset_resume = gspca_resume,
2086 #endif
2087 };
2088 
2089 module_usb_driver(sd_driver);
2090 
2091 module_param(webcam, int, 0644);
2092 MODULE_PARM_DESC(webcam,
2093     "Webcam type\n"
2094     "0: generic\n"
2095     "1: Trust 120 SpaceCam\n"
2096     "2: other Trust 120 SpaceCam\n"
2097     "3: Conceptronic Video Pro\n"
2098     "4: D-link dru-350c\n"
2099     "5: Plustek Opticam 500U\n"
2100     "6: Panasonic GP-KR651US\n"
2101     "7: iRez Kritter\n"
2102     "8: Mustek Wcam 300 mini\n"
2103     "9: Scalar USB Microscope M2 (Proscope)\n"
2104     "10: Divio Chicony TwinkleCam\n"
2105     "11: DVC-V6\n");