linux/drivers/media/usb/gspca/nw80x.c
<<
>>
Prefs
   1/*
   2 * DivIO nw80x subdriver
   3 *
   4 * Copyright (C) 2011 Jean-François Moine (http://moinejf.free.fr)
   5 * Copyright (C) 2003 Sylvain Munaut <tnt@246tNt.com>
   6 *                      Kjell Claesson <keyson@users.sourceforge.net>
   7 *
   8 * This program is free software; you can redistribute it and/or modify
   9 * it under the terms of the GNU General Public License as published by
  10 * the Free Software Foundation; either version 2 of the License, or
  11 * any later version.
  12 *
  13 * This program is distributed in the hope that it will be useful,
  14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16 * GNU General Public License for more details.
  17 */
  18
  19#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  20
  21#define MODULE_NAME "nw80x"
  22
  23#include "gspca.h"
  24
  25MODULE_AUTHOR("Jean-Francois Moine <http://moinejf.free.fr>");
  26MODULE_DESCRIPTION("NW80x USB Camera Driver");
  27MODULE_LICENSE("GPL");
  28
  29static int webcam;
  30
  31/* specific webcam descriptor */
  32struct sd {
  33        struct gspca_dev gspca_dev;     /* !! must be the first item */
  34
  35        u32 ae_res;
  36        s8 ag_cnt;
  37#define AG_CNT_START 13
  38        u8 exp_too_low_cnt;
  39        u8 exp_too_high_cnt;
  40
  41        u8 bridge;
  42        u8 webcam;
  43};
  44
  45enum bridges {
  46        BRIDGE_NW800,   /* and et31x110 */
  47        BRIDGE_NW801,
  48        BRIDGE_NW802,
  49};
  50enum webcams {
  51        Generic800,
  52        SpaceCam,       /* Trust 120 SpaceCam */
  53        SpaceCam2,      /* other Trust 120 SpaceCam */
  54        Cvideopro,      /* Conceptronic Video Pro */
  55        Dlink350c,
  56        DS3303u,
  57        Kr651us,
  58        Kritter,
  59        Mustek300,
  60        Proscope,
  61        Twinkle,
  62        DvcV6,
  63        P35u,
  64        Generic802,
  65        NWEBCAMS        /* number of webcams */
  66};
  67
  68static const u8 webcam_chip[NWEBCAMS] = {
  69        [Generic800]    = BRIDGE_NW800, /* 06a5:0000
  70                                         * Typhoon Webcam 100 USB */
  71
  72        [SpaceCam]      = BRIDGE_NW800, /* 06a5:d800
  73                                * Trust SpaceCam120 or SpaceCam100 PORTABLE */
  74
  75        [SpaceCam2]     = BRIDGE_NW800, /* 06a5:d800 - pas106
  76                        * other Trust SpaceCam120 or SpaceCam100 PORTABLE */
  77
  78        [Cvideopro]     = BRIDGE_NW802, /* 06a5:d001
  79                        * Conceptronic Video Pro 'CVIDEOPRO USB Webcam CCD' */
  80
  81        [Dlink350c]     = BRIDGE_NW802, /* 06a5:d001
  82                                         * D-Link NetQam Pro 250plus */
  83
  84        [DS3303u]       = BRIDGE_NW801, /* 06a5:d001
  85                                * Plustek Opticam 500U or ProLink DS3303u */
  86
  87        [Kr651us]       = BRIDGE_NW802, /* 06a5:d001
  88                                         * Panasonic GP-KR651US */
  89
  90        [Kritter]       = BRIDGE_NW802, /* 06a5:d001
  91                                         * iRez Kritter cam */
  92
  93        [Mustek300]     = BRIDGE_NW802, /* 055f:d001
  94                                         * Mustek Wcam 300 mini */
  95
  96        [Proscope]      = BRIDGE_NW802, /* 06a5:d001
  97                                         * Scalar USB Microscope (ProScope) */
  98
  99        [Twinkle]       = BRIDGE_NW800, /* 06a5:d800 - hv7121b? (seems pas106)
 100                                         * Divio Chicony TwinkleCam
 101                                         * DSB-C110 */
 102
 103        [DvcV6]         = BRIDGE_NW802, /* 0502:d001
 104                                         * DVC V6 */
 105
 106        [P35u]          = BRIDGE_NW801, /* 052b:d001, 06a5:d001 and 06be:d001
 107                                         * EZCam Pro p35u */
 108
 109        [Generic802]    = BRIDGE_NW802,
 110};
 111/*
 112 * other webcams:
 113 *      - nw801 046d:d001
 114 *              Logitech QuickCam Pro (dark focus ring)
 115 *      - nw801 0728:d001
 116 *              AVerMedia Camguard
 117 *      - nw??? 06a5:d001
 118 *              D-Link NetQam Pro 250plus
 119 *      - nw800 065a:d800
 120 *              Showcam NGS webcam
 121 *      - nw??? ????:????
 122 *              Sceptre svc300
 123 */
 124
 125/*
 126 * registers
 127 *    nw800/et31x110      nw801           nw802
 128 *      0000..009e      0000..00a1      0000..009e
 129 *      0200..0211         id              id
 130 *      0300..0302         id              id
 131 *      0400..0406        (inex)        0400..0406
 132 *      0500..0505      0500..0506        (inex)
 133 *      0600..061a      0600..0601      0600..0601
 134 *      0800..0814         id              id
 135 *      1000..109c      1000..10a1      1000..109a
 136 */
 137
 138/* resolutions
 139 *      nw800: 320x240, 352x288
 140 *      nw801/802: 320x240, 640x480
 141 */
 142static const struct v4l2_pix_format cif_mode[] = {
 143        {320, 240, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE,
 144                .bytesperline = 320,
 145                .sizeimage = 320 * 240 * 4 / 8,
 146                .colorspace = V4L2_COLORSPACE_JPEG},
 147        {352, 288, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE,
 148                .bytesperline = 352,
 149                .sizeimage = 352 * 288 * 4 / 8,
 150                .colorspace = V4L2_COLORSPACE_JPEG}
 151};
 152static const struct v4l2_pix_format vga_mode[] = {
 153        {320, 240, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE,
 154                .bytesperline = 320,
 155                .sizeimage = 320 * 240 * 4 / 8,
 156                .colorspace = V4L2_COLORSPACE_JPEG},
 157        {640, 480, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE,
 158                .bytesperline = 640,
 159                .sizeimage = 640 * 480 * 3 / 8,
 160                .colorspace = V4L2_COLORSPACE_JPEG},
 161};
 162
 163/*
 164 * The sequences below contain:
 165 *      - 1st and 2nd bytes: either
 166 *              - register number (BE)
 167 *              - I2C0 + i2c address
 168 *      - 3rd byte: data length (=0 for end of sequence)
 169 *      - n bytes: data
 170 */
 171#define I2C0 0xff
 172
 173static const u8 nw800_init[] = {
 174        0x04, 0x05, 0x01, 0x61,
 175        0x04, 0x04, 0x01, 0x01,
 176        0x04, 0x06, 0x01, 0x04,
 177        0x04, 0x04, 0x03, 0x00, 0x00, 0x00,
 178        0x05, 0x05, 0x01, 0x00,
 179        0, 0, 0
 180};
 181static const u8 nw800_start[] = {
 182        0x04, 0x06, 0x01, 0xc0,
 183        0x00, 0x00, 0x40, 0x10, 0x43, 0x00, 0xb4, 0x01, 0x10, 0x00, 0x4f,
 184                          0xef, 0x0e, 0x00, 0x74, 0x01, 0x01, 0x00, 0x19,
 185                          0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
 186                          0x00, 0x01, 0x00, 0x19, 0x00, 0x3e, 0x00, 0x24,
 187                          0x03, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
 188                          0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
 189                          0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
 190                          0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
 191        0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
 192                          0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
 193                          0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
 194                          0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
 195                          0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
 196                          0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
 197                          0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
 198                          0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
 199        0x00, 0x80, 0x1f, 0xa0, 0x48, 0xc3, 0x02, 0x88, 0x0c, 0x68, 0x00,
 200                          0x00, 0x00, 0x00, 0x00, 0xa8, 0x06, 0x00, 0x08,
 201                          0x00, 0x32, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
 202                          0x00, 0x4b, 0x00, 0x76, 0x00, 0x86, 0x00,
 203        0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
 204                          0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
 205                          0x40, 0x20,
 206        0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
 207        0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x61, 0xc0,
 208        0x05, 0x00, 0x06, 0xe8, 0x00, 0x00, 0x00, 0x20, 0x20,
 209        0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 210                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 211                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 212                          0x00, 0x00, 0x00,
 213        0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 214                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 215                          0x00, 0x00, 0x00, 0x00, 0x00,
 216        0x10, 0x00, 0x40, 0x83, 0x02, 0x20, 0x00, 0x13, 0x00, 0x00, 0x00,
 217                          0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
 218                          0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 219                          0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
 220                          0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
 221                          0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
 222                          0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
 223                          0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
 224        0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
 225                          0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
 226                          0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
 227                          0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
 228                          0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
 229                          0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
 230                          0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
 231                          0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
 232        0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
 233                          0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x62,
 234                          0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
 235                          0x01, 0x60, 0x01, 0x00, 0x00,
 236
 237        0x04, 0x04, 0x01, 0xff,
 238        0x04, 0x06, 0x01, 0xc4,
 239
 240        0x04, 0x06, 0x01, 0xc0,
 241        0x00, 0x00, 0x40, 0x10, 0x43, 0x00, 0xb4, 0x01, 0x10, 0x00, 0x4f,
 242                          0xef, 0x0e, 0x00, 0x74, 0x01, 0x01, 0x00, 0x19,
 243                          0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
 244                          0x00, 0x01, 0x00, 0x19, 0x00, 0x3e, 0x00, 0x24,
 245                          0x03, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
 246                          0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
 247                          0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
 248                          0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
 249        0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
 250                          0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
 251                          0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
 252                          0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
 253                          0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
 254                          0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
 255                          0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
 256                          0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
 257        0x00, 0x80, 0x1f, 0xa0, 0x48, 0xc3, 0x02, 0x88, 0x0c, 0x68, 0x00,
 258                          0x00, 0x00, 0x00, 0x00, 0xa8, 0x06, 0x00, 0x08,
 259                          0x00, 0x32, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
 260                          0x00, 0x4b, 0x00, 0x76, 0x00, 0x86, 0x00,
 261        0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
 262                          0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
 263                          0x40, 0x20,
 264        0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
 265        0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x61, 0xc0,
 266        0x05, 0x00, 0x06, 0xe8, 0x00, 0x00, 0x00, 0x20, 0x20,
 267        0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 268                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 269                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 270                          0x00, 0x00, 0x00,
 271        0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 272                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 273                          0x00, 0x00, 0x00, 0x00, 0x00,
 274        0x10, 0x00, 0x40, 0x83, 0x02, 0x20, 0x00, 0x13, 0x00, 0x00, 0x00,
 275                          0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
 276                          0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 277                          0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
 278                          0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
 279                          0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
 280                          0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
 281                          0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
 282        0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
 283                          0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
 284                          0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
 285                          0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
 286                          0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
 287                          0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
 288                          0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
 289                          0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
 290        0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
 291                          0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x62,
 292                          0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
 293                          0x01, 0x60, 0x01, 0x00, 0x00,
 294
 295        0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00,
 296                          0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65,
 297                          0x40,
 298        0x00, 0x80, 0x01, 0xa0,
 299        0x10, 0x1a, 0x01, 0x00,
 300        0x00, 0x91, 0x02, 0x6c, 0x01,
 301        0x00, 0x03, 0x02, 0xc8, 0x01,
 302        0x10, 0x1a, 0x01, 0x00,
 303        0x10, 0x00, 0x01, 0x83,
 304        0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01,
 305                          0x20, 0x01, 0x60, 0x01,
 306        0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
 307        0x10, 0x1b, 0x02, 0x69, 0x00,
 308        0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
 309        0x05, 0x02, 0x01, 0x02,
 310        0x06, 0x00, 0x02, 0x04, 0xd9,
 311        0x05, 0x05, 0x01, 0x20,
 312        0x05, 0x05, 0x01, 0x21,
 313        0x10, 0x0e, 0x01, 0x08,
 314        0x10, 0x41, 0x11, 0x00, 0x08, 0x21, 0x3d, 0x52, 0x63, 0x75, 0x83,
 315                          0x91, 0x9e, 0xaa, 0xb6, 0xc1, 0xcc, 0xd6, 0xe0,
 316                          0xea,
 317        0x10, 0x03, 0x01, 0x00,
 318        0x10, 0x0f, 0x02, 0x13, 0x13,
 319        0x10, 0x03, 0x01, 0x14,
 320        0x10, 0x41, 0x11, 0x00, 0x08, 0x21, 0x3d, 0x52, 0x63, 0x75, 0x83,
 321                          0x91, 0x9e, 0xaa, 0xb6, 0xc1, 0xcc, 0xd6, 0xe0,
 322                          0xea,
 323        0x10, 0x0b, 0x01, 0x14,
 324        0x10, 0x0d, 0x01, 0x20,
 325        0x10, 0x0c, 0x01, 0x34,
 326        0x04, 0x06, 0x01, 0xc3,
 327        0x04, 0x04, 0x01, 0x00,
 328        0x05, 0x02, 0x01, 0x02,
 329        0x06, 0x00, 0x02, 0x00, 0x48,
 330        0x05, 0x05, 0x01, 0x20,
 331        0x05, 0x05, 0x01, 0x21,
 332        0, 0, 0
 333};
 334
 335/* 06a5:d001 - nw801 - Panasonic
 336 *              P35u */
 337static const u8 nw801_start_1[] = {
 338        0x05, 0x06, 0x01, 0x04,
 339        0x00, 0x00, 0x40, 0x0e, 0x00, 0x00, 0xf9, 0x02, 0x11, 0x00, 0x0e,
 340                          0x01, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
 341                          0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
 342                          0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
 343                          0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
 344                          0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
 345                          0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
 346                          0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
 347        0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
 348                          0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
 349                          0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
 350                          0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
 351                          0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
 352                          0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
 353                          0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
 354                          0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
 355        0x00, 0x80, 0x22, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x08, 0x00,
 356                          0x00, 0x00, 0x00, 0x00, 0x69, 0xa8, 0x1f, 0x00,
 357                          0x0d, 0x02, 0x07, 0x00, 0x01, 0x00, 0x19, 0x00,
 358                          0xf2, 0x00, 0x18, 0x06, 0x10, 0x06, 0x10, 0x00,
 359                          0x36, 0x00,
 360        0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
 361                          0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
 362                          0x40, 0x20,
 363        0x03, 0x00, 0x03, 0x00, 0x00, 0x00,
 364        0x05, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
 365        0x06, 0x00, 0x02, 0x09, 0x99,
 366        0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 367                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 368                          0x00, 0x00, 0x00, 0x00, 0x00,
 369        0x10, 0x00, 0x40, 0x22, 0x02, 0x80, 0x00, 0x1e, 0x00, 0x00, 0x00,
 370                          0x00, 0x00, 0x00, 0x0a, 0x15, 0x08, 0x08, 0x0a,
 371                          0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 372                          0x00, 0x01, 0x35, 0xfd, 0x07, 0x3d, 0x00, 0x00,
 373                          0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x14, 0x02,
 374                          0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
 375                          0x40, 0x00, 0x00, 0x00, 0x40, 0x20, 0x10, 0x06,
 376                          0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06, 0xf7,
 377        0x10, 0x40, 0x40, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80, 0x80,
 378                          0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99, 0xa4,
 379                          0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc, 0xcf,
 380                          0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54, 0x64,
 381                          0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2, 0xe2,
 382                          0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
 383                          0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
 384                          0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
 385        0x10, 0x80, 0x22, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
 386                          0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00, 0x00,
 387                          0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x82, 0x02,
 388                          0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40, 0x01,
 389                          0xf0, 0x00,
 390        0, 0, 0,
 391};
 392static const u8 nw801_start_qvga[] = {
 393        0x02, 0x00, 0x10, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
 394                          0x00, 0x78, 0x18, 0x0b, 0x06, 0xa2, 0x86, 0x78,
 395        0x02, 0x0f, 0x01, 0x6b,
 396        0x10, 0x1a, 0x01, 0x15,
 397        0x00, 0x00, 0x01, 0x1e,
 398        0x10, 0x00, 0x01, 0x2f,
 399        0x10, 0x8c, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
 400        0x10, 0x11, 0x08, 0x29, 0x00, 0x18, 0x01, 0x1f, 0x00, 0xd2, 0x00,
 401                                                        /* AE window */
 402        0, 0, 0,
 403};
 404static const u8 nw801_start_vga[] = {
 405        0x02, 0x00, 0x10, 0x78, 0xa0, 0x97, 0x78, 0xa0, 0x00, 0x00, 0x00,
 406                          0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xf0,
 407        0x02, 0x0f, 0x01, 0xd5,
 408        0x10, 0x1a, 0x01, 0x15,
 409        0x00, 0x00, 0x01, 0x0e,
 410        0x10, 0x00, 0x01, 0x22,
 411        0x10, 0x8c, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01,
 412        0x10, 0x11, 0x08, 0x51, 0x00, 0x30, 0x02, 0x3d, 0x00, 0xa4, 0x01,
 413        0, 0, 0,
 414};
 415static const u8 nw801_start_2[] = {
 416        0x10, 0x04, 0x01, 0x1a,
 417        0x10, 0x19, 0x01, 0x09,                         /* clock */
 418        0x10, 0x24, 0x06, 0xc0, 0x00, 0x3f, 0x02, 0x00, 0x01,
 419                                                         /* .. gain .. */
 420        0x00, 0x03, 0x02, 0x92, 0x03,
 421        0x00, 0x1d, 0x04, 0xf2, 0x00, 0x24, 0x07,
 422        0x00, 0x7b, 0x01, 0xcf,
 423        0x10, 0x94, 0x01, 0x07,
 424        0x05, 0x05, 0x01, 0x01,
 425        0x05, 0x04, 0x01, 0x01,
 426        0x10, 0x0e, 0x01, 0x08,
 427        0x10, 0x48, 0x11, 0x00, 0x37, 0x55, 0x6b, 0x7d, 0x8d, 0x9b, 0xa8,
 428                          0xb4, 0xbf, 0xca, 0xd4, 0xdd, 0xe6, 0xef, 0xf0,
 429                          0xf0,
 430        0x10, 0x03, 0x01, 0x00,
 431        0x10, 0x0f, 0x02, 0x0c, 0x0c,
 432        0x10, 0x03, 0x01, 0x08,
 433        0x10, 0x48, 0x11, 0x00, 0x37, 0x55, 0x6b, 0x7d, 0x8d, 0x9b, 0xa8,
 434                          0xb4, 0xbf, 0xca, 0xd4, 0xdd, 0xe6, 0xef, 0xf0,
 435                          0xf0,
 436        0x10, 0x0b, 0x01, 0x0b,
 437        0x10, 0x0d, 0x01, 0x0b,
 438        0x10, 0x0c, 0x01, 0x1f,
 439        0x05, 0x06, 0x01, 0x03,
 440        0, 0, 0
 441};
 442
 443/* nw802 (sharp IR3Y38M?) */
 444static const u8 nw802_start[] = {
 445        0x04, 0x06, 0x01, 0x04,
 446        0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0xf9, 0x02, 0x10, 0x00, 0x4d,
 447                          0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
 448                          0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
 449                          0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
 450                          0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
 451                          0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
 452                          0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
 453                          0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
 454        0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
 455                          0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
 456                          0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
 457                          0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
 458                          0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
 459                          0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
 460                          0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
 461                          0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
 462        0x00, 0x80, 0x1f, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x68, 0x00,
 463                          0x00, 0x00, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
 464                          0x00, 0x0c, 0x02, 0x01, 0x00, 0x16, 0x00, 0x94,
 465                          0x00, 0x10, 0x06, 0x08, 0x00, 0x18, 0x00,
 466        0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
 467                          0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
 468                          0x40, 0x20,
 469        0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
 470        0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
 471        0x06, 0x00, 0x02, 0x09, 0x99,
 472        0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 473                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 474                          0x00, 0x00, 0x00, 0x00, 0x00,
 475        0x10, 0x00, 0x40, 0xa1, 0x02, 0x80, 0x00, 0x1d, 0x00, 0x00, 0x00,
 476                          0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
 477                          0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 478                          0x00, 0x49, 0x13, 0xff, 0x01, 0xc0, 0x00, 0x14,
 479                          0x02, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00,
 480                          0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
 481                          0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
 482                          0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
 483        0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
 484                          0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
 485                          0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
 486                          0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
 487                          0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
 488                          0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
 489                          0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
 490                          0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
 491        0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
 492                          0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x05, 0x82,
 493                          0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
 494                          0x01, 0xf0, 0x00,
 495        0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
 496                          0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
 497                          0x40,
 498        0x10, 0x1a, 0x01, 0x00,
 499        0x10, 0x00, 0x01, 0xad,
 500        0x00, 0x00, 0x01, 0x08,
 501        0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
 502        0x10, 0x1b, 0x02, 0x00, 0x00,
 503        0x10, 0x11, 0x08, 0x51, 0x00, 0xf0, 0x00, 0x3d, 0x00, 0xb4, 0x00,
 504        0x10, 0x1d, 0x08, 0x00, 0xa0, 0x00, 0xa0, 0x00, 0xa0, 0x00, 0xa0,
 505        0x10, 0x0e, 0x01, 0x27,
 506        0x10, 0x41, 0x11, 0x00, 0x0e, 0x35, 0x4f, 0x62, 0x71, 0x7f, 0x8b,
 507                          0x96, 0xa0, 0xa9, 0xb2, 0xbb, 0xc3, 0xca, 0xd2,
 508                          0xd8,
 509        0x10, 0x03, 0x01, 0x00,
 510        0x10, 0x0f, 0x02, 0x14, 0x14,
 511        0x10, 0x03, 0x01, 0x0c,
 512        0x10, 0x41, 0x11, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54, 0x64, 0x74,
 513                          0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2, 0xe2, 0xf1,
 514                          0xff,
 515/*                        0x00, 0x0e, 0x35, 0x4f, 0x62, 0x71, 0x7f, 0x8b,
 516 *                        0x96, 0xa0, 0xa9, 0xb2, 0xbb, 0xc3, 0xca, 0xd2,
 517 *                        0xd8, */
 518        0x10, 0x0b, 0x01, 0x10,
 519        0x10, 0x0d, 0x01, 0x11,
 520        0x10, 0x0c, 0x01, 0x1c,
 521        0x04, 0x06, 0x01, 0x03,
 522        0x04, 0x04, 0x01, 0x00,
 523        0, 0, 0
 524};
 525/* et31x110 - Trust 120 SpaceCam */
 526static const u8 spacecam_init[] = {
 527        0x04, 0x05, 0x01, 0x01,
 528        0x04, 0x04, 0x01, 0x01,
 529        0x04, 0x06, 0x01, 0x04,
 530        0x04, 0x04, 0x03, 0x00, 0x00, 0x00,
 531        0x05, 0x05, 0x01, 0x00,
 532        0, 0, 0
 533};
 534static const u8 spacecam_start[] = {
 535        0x04, 0x06, 0x01, 0x44,
 536        0x00, 0x00, 0x40, 0x10, 0x43, 0x00, 0xb4, 0x01, 0x10, 0x00, 0x4f,
 537                          0xef, 0x0e, 0x00, 0x74, 0x01, 0x01, 0x00, 0x19,
 538                          0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
 539                          0x00, 0x01, 0x00, 0x19, 0x00, 0x3e, 0x00, 0x24,
 540                          0x03, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
 541                          0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
 542                          0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
 543                          0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
 544        0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
 545                          0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
 546                          0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
 547                          0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
 548                          0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
 549                          0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
 550                          0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
 551                          0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
 552        0x00, 0x80, 0x1f, 0xa0, 0x48, 0xc3, 0x02, 0x88, 0x0c, 0x68, 0x00,
 553                          0x00, 0x00, 0x00, 0x00, 0xa8, 0x06, 0x00, 0x08,
 554                          0x00, 0x32, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
 555                          0x00, 0x4b, 0x00, 0x7c, 0x00, 0x80, 0x00,
 556        0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
 557                          0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
 558                          0x40, 0x20,
 559        0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
 560        0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
 561        0x05, 0x00, 0x06, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
 562        0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 563                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 564                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 565                          0x00, 0x00, 0x00,
 566        0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 567                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 568                          0x00, 0x00, 0x00, 0x00, 0x00,
 569        0x10, 0x00, 0x40, 0x83, 0x02, 0x20, 0x00, 0x11, 0x00, 0x00, 0x00,
 570                          0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
 571                          0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 572                          0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
 573                          0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
 574                          0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
 575                          0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
 576                          0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
 577        0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
 578                          0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
 579                          0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
 580                          0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
 581                          0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
 582                          0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
 583                          0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
 584                          0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
 585        0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
 586                          0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x62,
 587                          0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
 588                          0x01, 0x60, 0x01, 0x00, 0x00,
 589        0x04, 0x06, 0x01, 0xc0,
 590        0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
 591        0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00,
 592                          0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65,
 593                          0x40,
 594        0x00, 0x80, 0x01, 0xa0,
 595        0x10, 0x1a, 0x01, 0x00,
 596        0x00, 0x91, 0x02, 0x32, 0x01,
 597        0x00, 0x03, 0x02, 0x08, 0x02,
 598        0x10, 0x00, 0x01, 0x83,
 599        0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01,
 600                          0x20, 0x01, 0x60, 0x01,
 601        0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
 602        0x10, 0x0e, 0x01, 0x08,
 603        0x10, 0x41, 0x11, 0x00, 0x64, 0x99, 0xc0, 0xe2, 0xf9, 0xf9, 0xf9,
 604                          0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
 605                          0xf9,
 606        0x10, 0x03, 0x01, 0x00,
 607        0x10, 0x0f, 0x02, 0x13, 0x13,
 608        0x10, 0x03, 0x01, 0x06,
 609        0x10, 0x41, 0x11, 0x00, 0x64, 0x99, 0xc0, 0xe2, 0xf9, 0xf9, 0xf9,
 610                          0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
 611                          0xf9,
 612        0x10, 0x0b, 0x01, 0x08,
 613        0x10, 0x0d, 0x01, 0x10,
 614        0x10, 0x0c, 0x01, 0x1f,
 615        0x04, 0x06, 0x01, 0xc3,
 616        0x04, 0x05, 0x01, 0x40,
 617        0x04, 0x04, 0x01, 0x40,
 618        0, 0, 0
 619};
 620/* et31x110 - pas106 - other Trust SpaceCam120 */
 621static const u8 spacecam2_start[] = {
 622        0x04, 0x06, 0x01, 0x44,
 623        0x04, 0x06, 0x01, 0x00,
 624        0x00, 0x00, 0x40, 0x14, 0x83, 0x00, 0xba, 0x01, 0x10, 0x00, 0x4f,
 625                          0xef, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0x19,
 626                          0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
 627                          0x00, 0x01, 0x00, 0x19, 0x00, 0x06, 0x00, 0xfc,
 628                          0x01, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
 629                          0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
 630                          0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
 631                          0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
 632        0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
 633                          0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
 634                          0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
 635                          0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
 636                          0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
 637                          0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
 638                          0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
 639                          0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
 640        0x00, 0x80, 0x1f, 0xb8, 0x48, 0x0f, 0x04, 0x88, 0x14, 0x68, 0x00,
 641                          0x00, 0x00, 0x00, 0x00, 0xa8, 0x01, 0x00, 0x03,
 642                          0x00, 0x24, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
 643                          0x00, 0x4b, 0x00, 0x76, 0x00, 0x86, 0x00,
 644        0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
 645                          0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
 646                          0x40, 0x20,
 647        0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
 648        0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x61, 0x00,
 649        0x05, 0x00, 0x06, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
 650        0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 651                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 652                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 653                          0x00, 0x00, 0x00,
 654        0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 655                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 656                          0x00, 0x00, 0x00, 0x00, 0x00,
 657        0x10, 0x00, 0x40, 0x80, 0x02, 0x20, 0x00, 0x13, 0x00, 0x00, 0x00,
 658                          0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
 659                          0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 660                          0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
 661                          0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
 662                          0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
 663                          0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
 664                          0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
 665        0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
 666                          0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
 667                          0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
 668                          0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
 669                          0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
 670                          0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
 671                          0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
 672                          0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
 673        0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
 674                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x62,
 675                          0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
 676                          0x01, 0x60, 0x01, 0x00, 0x00,
 677        0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
 678        0x04, 0x04, 0x01, 0x40,
 679        0x04, 0x04, 0x01, 0x00,
 680        I2C0, 0x40, 0x0c, 0x02, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x05,
 681                          0x00, 0x00, 0x05, 0x05,
 682        I2C0, 0x40, 0x02, 0x11, 0x06,
 683        I2C0, 0x40, 0x02, 0x14, 0x00,
 684        I2C0, 0x40, 0x02, 0x13, 0x01,           /* i2c end */
 685        0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00,
 686                          0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65,
 687                          0x40,
 688        I2C0, 0x40, 0x02, 0x02, 0x0c,           /* pixel clock */
 689        I2C0, 0x40, 0x02, 0x0f, 0x00,
 690        I2C0, 0x40, 0x02, 0x13, 0x01,           /* i2c end */
 691        0x10, 0x00, 0x01, 0x01,
 692        0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01,
 693                          0x20, 0x01, 0x60, 0x01,
 694        I2C0, 0x40, 0x02, 0x05, 0x0f,           /* exposure */
 695        I2C0, 0x40, 0x02, 0x13, 0x01,           /* i2c end */
 696        I2C0, 0x40, 0x07, 0x09, 0x0b, 0x0f, 0x05, 0x05, 0x0f, 0x00,
 697                                                /* gains */
 698        I2C0, 0x40, 0x03, 0x12, 0x04, 0x01,
 699        0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
 700        0x10, 0x0e, 0x01, 0x08,
 701        0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7,
 702                          0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7,
 703                          0xf9,
 704        0x10, 0x03, 0x01, 0x00,
 705        0x10, 0x0f, 0x02, 0x13, 0x13,
 706        0x10, 0x03, 0x01, 0x06,
 707        0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7,
 708                          0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7,
 709                          0xf9,
 710        0x10, 0x0b, 0x01, 0x11,
 711        0x10, 0x0d, 0x01, 0x10,
 712        0x10, 0x0c, 0x01, 0x14,
 713        0x04, 0x06, 0x01, 0x03,
 714        0x04, 0x05, 0x01, 0x61,
 715        0x04, 0x04, 0x01, 0x00,
 716        0, 0, 0
 717};
 718
 719/* nw802 - Conceptronic Video Pro */
 720static const u8 cvideopro_start[] = {
 721        0x04, 0x06, 0x01, 0x04,
 722        0x00, 0x00, 0x40, 0x54, 0x96, 0x98, 0xf9, 0x02, 0x18, 0x00, 0x4c,
 723                          0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
 724                          0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
 725                          0x00, 0x0b, 0x00, 0x1b, 0x00, 0xc8, 0x00, 0xf4,
 726                          0x05, 0xb4, 0x00, 0xcc, 0x00, 0x01, 0x00, 0x01,
 727                          0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
 728                          0x00, 0xa2, 0x00, 0xc6, 0x00, 0x60, 0x00, 0xc6,
 729                          0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
 730        0x00, 0x40, 0x40, 0x00, 0xae, 0x00, 0xd2, 0x00, 0xae, 0x00, 0xd2,
 731                          0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
 732                          0x00, 0xa8, 0x00, 0xc0, 0x00, 0x66, 0x00, 0xc0,
 733                          0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
 734                          0x00, 0x0a, 0x00, 0x54, 0x00, 0x0a, 0x00, 0x54,
 735                          0x00, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
 736                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6,
 737                          0x00, 0x5d, 0x00, 0xc7, 0x00, 0x7e, 0x00, 0x30,
 738        0x00, 0x80, 0x1f, 0x98, 0x43, 0x3f, 0x0d, 0x88, 0x20, 0x80, 0x3f,
 739                          0x47, 0xaf, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
 740                          0x00, 0x0c, 0x02, 0x0c, 0x00, 0x1c, 0x00, 0x94,
 741                          0x00, 0x10, 0x06, 0x24, 0x00, 0x4a, 0x00,
 742        0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
 743                          0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
 744                          0x40, 0x20,
 745        0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
 746        0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00,
 747        0x06, 0x00, 0x02, 0x09, 0x99,
 748        0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 749                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 750                          0x00, 0x00, 0x00, 0x00, 0x00,
 751        0x10, 0x00, 0x40, 0xa0, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
 752                          0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
 753                          0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 754                          0x00, 0x49, 0x13, 0x00, 0x00, 0xe0, 0x00, 0x0c,
 755                          0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
 756                          0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
 757                          0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
 758                          0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
 759        0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
 760                          0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
 761                          0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
 762                          0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
 763                          0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
 764                          0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
 765                          0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
 766                          0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
 767        0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
 768                          0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x05, 0x82,
 769                          0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
 770                          0x01, 0xf0, 0x00,
 771        0x02, 0x00, 0x11, 0x3c, 0x50, 0x8c, 0x3c, 0x50, 0x00, 0x00, 0x00,
 772                          0x00, 0x78, 0x3f, 0x3f, 0x06, 0xf2, 0x8f, 0xf0,
 773                          0x40,
 774        0x10, 0x1a, 0x01, 0x03,
 775        0x10, 0x00, 0x01, 0xac,
 776        0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
 777        0x10, 0x1b, 0x02, 0x3b, 0x01,
 778        0x10, 0x11, 0x08, 0x61, 0x00, 0xe0, 0x00, 0x49, 0x00, 0xa8, 0x00,
 779        0x10, 0x1f, 0x06, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
 780        0x10, 0x1d, 0x02, 0x40, 0x06,
 781        0x10, 0x0e, 0x01, 0x08,
 782        0x10, 0x41, 0x11, 0x00, 0x0f, 0x46, 0x62, 0x76, 0x86, 0x94, 0xa0,
 783                          0xab, 0xb6, 0xbf, 0xc8, 0xcf, 0xd7, 0xdc, 0xdc,
 784                          0xdc,
 785        0x10, 0x03, 0x01, 0x00,
 786        0x10, 0x0f, 0x02, 0x12, 0x12,
 787        0x10, 0x03, 0x01, 0x0c,
 788        0x10, 0x41, 0x11, 0x00, 0x0f, 0x46, 0x62, 0x76, 0x86, 0x94, 0xa0,
 789                          0xab, 0xb6, 0xbf, 0xc8, 0xcf, 0xd7, 0xdc, 0xdc,
 790                          0xdc,
 791        0x10, 0x0b, 0x01, 0x09,
 792        0x10, 0x0d, 0x01, 0x10,
 793        0x10, 0x0c, 0x01, 0x2f,
 794        0x04, 0x06, 0x01, 0x03,
 795        0x04, 0x04, 0x01, 0x00,
 796        0, 0, 0
 797};
 798
 799/* nw802 - D-link dru-350c cam */
 800static const u8 dlink_start[] = {
 801        0x04, 0x06, 0x01, 0x04,
 802        0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x92, 0x03, 0x10, 0x00, 0x4d,
 803                          0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
 804                          0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
 805                          0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
 806                          0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
 807                          0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
 808                          0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
 809                          0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
 810        0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
 811                          0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
 812                          0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
 813                          0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
 814                          0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
 815                          0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
 816                          0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
 817                          0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
 818        0x00, 0x80, 0x1f, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x68, 0x00,
 819                          0x00, 0x00, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
 820                          0x00, 0x0c, 0x02, 0x01, 0x00, 0x16, 0x00, 0x94,
 821                          0x00, 0x10, 0x06, 0x10, 0x00, 0x36, 0x00,
 822        0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
 823                          0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
 824                          0x40, 0x20,
 825        0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
 826        0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
 827        0x06, 0x00, 0x02, 0x09, 0x99,
 828        0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 829                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 830                          0x00, 0x00, 0x00, 0x00, 0x00,
 831        0x10, 0x00, 0x40, 0xa1, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
 832                          0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
 833                          0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 834                          0x00, 0x49, 0x13, 0x00, 0x00, 0xc0, 0x00, 0x14,
 835                          0x02, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00,
 836                          0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
 837                          0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
 838                          0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
 839        0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
 840                          0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
 841                          0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
 842                          0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
 843                          0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
 844                          0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
 845                          0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
 846                          0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
 847        0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
 848                          0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x82,
 849                          0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
 850                          0x01, 0xf0, 0x00,
 851        0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
 852                          0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
 853                          0x40,
 854        0x10, 0x1a, 0x01, 0x00,
 855        0x10, 0x00, 0x01, 0xad,
 856        0x00, 0x00, 0x01, 0x08,
 857        0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
 858        0x10, 0x1b, 0x02, 0x00, 0x00,
 859        0x10, 0x11, 0x08, 0x51, 0x00, 0xf0, 0x00, 0x3d, 0x00, 0xb4, 0x00,
 860        0x10, 0x1d, 0x08, 0x40, 0x06, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
 861        0x10, 0x0e, 0x01, 0x20,
 862        0x10, 0x41, 0x11, 0x00, 0x07, 0x1e, 0x38, 0x4d, 0x60, 0x70, 0x7f,
 863                          0x8e, 0x9b, 0xa8, 0xb4, 0xbf, 0xca, 0xd5, 0xdf,
 864                          0xea,
 865        0x10, 0x03, 0x01, 0x00,
 866        0x10, 0x0f, 0x02, 0x11, 0x11,
 867        0x10, 0x03, 0x01, 0x10,
 868        0x10, 0x41, 0x11, 0x00, 0x07, 0x1e, 0x38, 0x4d, 0x60, 0x70, 0x7f,
 869                          0x8e, 0x9b, 0xa8, 0xb4, 0xbf, 0xca, 0xd5, 0xdf,
 870                          0xea,
 871        0x10, 0x0b, 0x01, 0x19,
 872        0x10, 0x0d, 0x01, 0x10,
 873        0x10, 0x0c, 0x01, 0x1e,
 874        0x04, 0x06, 0x01, 0x03,
 875        0x04, 0x04, 0x01, 0x00,
 876        0, 0, 0
 877};
 878
 879/* 06a5:d001 - nw801 - Sony
 880 *              Plustek Opticam 500U or ProLink DS3303u (Hitachi HD49322BF) */
 881/*fixme: 320x240 only*/
 882static const u8 ds3303_start[] = {
 883        0x05, 0x06, 0x01, 0x04,
 884        0x00, 0x00, 0x40, 0x16, 0x00, 0x00, 0xf9, 0x02, 0x11, 0x00, 0x0e,
 885                          0x01, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
 886                          0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
 887                          0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
 888                          0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
 889                          0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
 890                          0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
 891                          0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
 892        0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
 893                          0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
 894                          0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
 895                          0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
 896                          0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
 897                          0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
 898                          0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
 899                          0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
 900        0x00, 0x80, 0x22, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x08, 0x00,
 901                          0x00, 0x00, 0x00, 0x00, 0xa9, 0xa8, 0x1f, 0x00,
 902                          0x0d, 0x02, 0x07, 0x00, 0x01, 0x00, 0x19, 0x00,
 903                          0xf2, 0x00, 0x18, 0x06, 0x10, 0x06, 0x10, 0x00,
 904                          0x36, 0x00,
 905        0x02, 0x00, 0x12, 0x03, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
 906                          0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0x50,
 907                          0x40, 0x20,
 908        0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
 909        0x05, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00,
 910        0x06, 0x00, 0x02, 0x09, 0x99,
 911        0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 912                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 913                          0x00, 0x00, 0x00, 0x00, 0x00,
 914        0x10, 0x00, 0x40, 0x2f, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
 915                          0x00, 0x00, 0x00, 0x10, 0x1f, 0x10, 0x08, 0x0a,
 916                          0x0a, 0x51, 0x00, 0xf1, 0x00, 0x3c, 0x00, 0xb4,
 917                          0x00, 0x01, 0x15, 0xfd, 0x07, 0x3d, 0x00, 0x00,
 918                          0x00, 0x00, 0x00, 0x00, 0x8c, 0x04, 0x01, 0x20,
 919                          0x02, 0x00, 0x03, 0x00, 0x20, 0x00, 0x00, 0x00,
 920                          0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08, 0x03,
 921                          0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06, 0xf7,
 922        0x10, 0x40, 0x40, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80, 0x80,
 923                          0x00, 0x2d, 0x46, 0x58, 0x67, 0x74, 0x7f, 0x88,
 924                          0x94, 0x9d, 0xa6, 0xae, 0xb5, 0xbd, 0xc4, 0xcb,
 925                          0xd1, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54, 0x64,
 926                          0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2, 0xe2,
 927                          0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
 928                          0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
 929                          0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
 930        0x10, 0x80, 0x22, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
 931                          0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x3f, 0x01,
 932                          0x00, 0x00, 0xef, 0x00, 0x02, 0x0a, 0x82, 0x02,
 933                          0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40, 0x01,
 934                          0xf0, 0x00,
 935
 936        0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
 937                          0x00, 0x78, 0x3f, 0x3f, 0x00, 0xf2, 0x8f, 0x81,
 938                          0x40,
 939        0x10, 0x1a, 0x01, 0x15,
 940        0x10, 0x00, 0x01, 0x2f,
 941        0x10, 0x8c, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
 942        0x10, 0x1b, 0x02, 0x00, 0x00,
 943        0x10, 0x11, 0x08, 0x61, 0x00, 0xe0, 0x00, 0x49, 0x00, 0xa8, 0x00,
 944        0x10, 0x26, 0x06, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
 945        0x10, 0x24, 0x02, 0x40, 0x06,
 946        0x10, 0x0e, 0x01, 0x08,
 947        0x10, 0x48, 0x11, 0x00, 0x15, 0x40, 0x67, 0x84, 0x9d, 0xb2, 0xc6,
 948                          0xd6, 0xe7, 0xf6, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
 949                          0xf9,
 950        0x10, 0x03, 0x01, 0x00,
 951        0x10, 0x0f, 0x02, 0x16, 0x16,
 952        0x10, 0x03, 0x01, 0x0c,
 953        0x10, 0x48, 0x11, 0x00, 0x15, 0x40, 0x67, 0x84, 0x9d, 0xb2, 0xc6,
 954                          0xd6, 0xe7, 0xf6, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
 955                          0xf9,
 956        0x10, 0x0b, 0x01, 0x26,
 957        0x10, 0x0d, 0x01, 0x10,
 958        0x10, 0x0c, 0x01, 0x1c,
 959        0x05, 0x06, 0x01, 0x03,
 960        0x05, 0x04, 0x01, 0x00,
 961        0, 0, 0
 962};
 963
 964/* 06a5:d001 - nw802 - Panasonic
 965 *              GP-KR651US (Philips TDA8786) */
 966static const u8 kr651_start_1[] = {
 967        0x04, 0x06, 0x01, 0x04,
 968        0x00, 0x00, 0x40, 0x44, 0x96, 0x98, 0xf9, 0x02, 0x18, 0x00, 0x48,
 969                          0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
 970                          0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
 971                          0x00, 0x0b, 0x00, 0x1b, 0x00, 0xc8, 0x00, 0xf4,
 972                          0x05, 0xb4, 0x00, 0xcc, 0x00, 0x01, 0x00, 0x01,
 973                          0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
 974                          0x00, 0xa2, 0x00, 0xc6, 0x00, 0x60, 0x00, 0xc6,
 975                          0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
 976        0x00, 0x40, 0x40, 0x00, 0xae, 0x00, 0xd2, 0x00, 0xae, 0x00, 0xd2,
 977                          0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
 978                          0x00, 0xa8, 0x00, 0xc0, 0x00, 0x66, 0x00, 0xc0,
 979                          0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
 980                          0x00, 0x0a, 0x00, 0x54, 0x00, 0x0a, 0x00, 0x54,
 981                          0x00, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
 982                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6,
 983                          0x00, 0x5d, 0x00, 0xc7, 0x00, 0x7e, 0x00, 0x30,
 984        0x00, 0x80, 0x1f, 0x18, 0x43, 0x3f, 0x0d, 0x88, 0x20, 0x80, 0x3f,
 985                          0x47, 0xaf, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
 986                          0x00, 0x0c, 0x02, 0x0c, 0x00, 0x1c, 0x00, 0x94,
 987                          0x00, 0x10, 0x06, 0x24, 0x00, 0x4a, 0x00,
 988        0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
 989                          0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
 990                          0x40, 0x20,
 991        0x03, 0x00, 0x03, 0x02, 0x00, 0x00,
 992        0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
 993        0x06, 0x00, 0x02, 0x09, 0x99,
 994        0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 995                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 996                          0x00, 0x00, 0x00, 0x00, 0x00,
 997        0x10, 0x00, 0x40, 0xa0, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
 998                          0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
 999                          0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1000                          0x00, 0x49, 0x13, 0x00, 0x00, 0xe0, 0x00, 0x0c,
1001                          0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
1002                          0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
1003                          0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
1004                          0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
1005        0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
1006                          0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
1007                          0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
1008                          0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
1009                          0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
1010                          0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
1011                          0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
1012                          0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
1013        0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
1014                          0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x05, 0x82,
1015                          0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
1016                          0x01, 0xf0, 0x00,
1017        0, 0, 0
1018};
1019static const u8 kr651_start_qvga[] = {
1020        0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
1021                          0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
1022                          0x40,
1023        0x10, 0x1a, 0x01, 0x03,
1024        0x10, 0x00, 0x01, 0xac,
1025        0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1026        0x10, 0x1b, 0x02, 0x00, 0x00,
1027        0x10, 0x11, 0x08, 0x29, 0x00, 0x18, 0x01, 0x1f, 0x00, 0xd2, 0x00,
1028        0x10, 0x1d, 0x06, 0xe0, 0x00, 0x0c, 0x00, 0x52, 0x00,
1029        0x10, 0x1d, 0x02, 0x28, 0x01,
1030        0, 0, 0
1031};
1032static const u8 kr651_start_vga[] = {
1033        0x02, 0x00, 0x11, 0x78, 0xa0, 0x8c, 0x78, 0xa0, 0x00, 0x00, 0x00,
1034                          0x00, 0xf0, 0x30, 0x03, 0x01, 0x82, 0x82, 0x98,
1035                          0x80,
1036        0x10, 0x1a, 0x01, 0x03,
1037        0x10, 0x00, 0x01, 0xa0,
1038        0x10, 0x85, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01,
1039        0x10, 0x1b, 0x02, 0x00, 0x00,
1040        0x10, 0x11, 0x08, 0x51, 0x00, 0x30, 0x02, 0x3d, 0x00, 0xa4, 0x01,
1041        0x10, 0x1d, 0x06, 0xe0, 0x00, 0x0c, 0x00, 0x52, 0x00,
1042        0x10, 0x1d, 0x02, 0x68, 0x00,
1043};
1044static const u8 kr651_start_2[] = {
1045        0x10, 0x0e, 0x01, 0x08,
1046        0x10, 0x41, 0x11, 0x00, 0x11, 0x3c, 0x5c, 0x74, 0x88, 0x99, 0xa8,
1047                          0xb7, 0xc4, 0xd0, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
1048                          0xdc,
1049        0x10, 0x03, 0x01, 0x00,
1050        0x10, 0x0f, 0x02, 0x0c, 0x0c,
1051        0x10, 0x03, 0x01, 0x0c,
1052        0x10, 0x41, 0x11, 0x00, 0x11, 0x3c, 0x5c, 0x74, 0x88, 0x99, 0xa8,
1053                          0xb7, 0xc4, 0xd0, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
1054                          0xdc,
1055        0x10, 0x0b, 0x01, 0x10,
1056        0x10, 0x0d, 0x01, 0x10,
1057        0x10, 0x0c, 0x01, 0x2d,
1058        0x04, 0x06, 0x01, 0x03,
1059        0x04, 0x04, 0x01, 0x00,
1060        0, 0, 0
1061};
1062
1063/* nw802 - iRez Kritter cam */
1064static const u8 kritter_start[] = {
1065        0x04, 0x06, 0x01, 0x06,
1066        0x00, 0x00, 0x40, 0x44, 0x96, 0x98, 0x94, 0x03, 0x18, 0x00, 0x48,
1067                          0x0f, 0x1e, 0x00, 0x0c, 0x02, 0x01, 0x00, 0x19,
1068                          0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
1069                          0x00, 0x0b, 0x00, 0x1b, 0x00, 0x0a, 0x01, 0x28,
1070                          0x07, 0xb4, 0x00, 0xcc, 0x00, 0x01, 0x00, 0x01,
1071                          0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1072                          0x00, 0xa2, 0x00, 0xc6, 0x00, 0x60, 0x00, 0xc6,
1073                          0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1074        0x00, 0x40, 0x40, 0x00, 0xae, 0x00, 0xd2, 0x00, 0xae, 0x00, 0xd2,
1075                          0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1076                          0x00, 0xa8, 0x00, 0xc0, 0x00, 0x66, 0x00, 0xc0,
1077                          0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1078                          0x00, 0x0a, 0x00, 0x54, 0x00, 0x0a, 0x00, 0x54,
1079                          0x00, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
1080                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6,
1081                          0x00, 0x5d, 0x00, 0x0e, 0x00, 0x7e, 0x00, 0x30,
1082        0x00, 0x80, 0x1f, 0x18, 0x43, 0x3f, 0x0d, 0x88, 0x20, 0x80, 0x3f,
1083                          0x47, 0xaf, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
1084                          0x00, 0x0b, 0x02, 0x0c, 0x00, 0x1c, 0x00, 0x94,
1085                          0x00, 0x10, 0x06, 0x24, 0x00, 0x4a, 0x00,
1086        0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
1087                          0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
1088                          0x40, 0x20,
1089        0x03, 0x00, 0x03, 0x02, 0x00, 0x00,
1090        0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00,
1091        0x06, 0x00, 0x02, 0x09, 0x99,
1092        0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1093                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1094                          0x00, 0x00, 0x00, 0x00, 0x00,
1095        0x10, 0x00, 0x40, 0xa0, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
1096                          0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
1097                          0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1098                          0x00, 0x49, 0x13, 0x00, 0x00, 0xe0, 0x00, 0x0c,
1099                          0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
1100                          0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
1101                          0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
1102                          0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
1103        0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
1104                          0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
1105                          0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
1106                          0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
1107                          0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
1108                          0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
1109                          0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
1110                          0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
1111        0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
1112                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x82,
1113                          0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
1114                          0x01, 0xf0, 0x00,
1115        0x02, 0x00, 0x11, 0x3c, 0x50, 0x8c, 0x3c, 0x50, 0x00, 0x00, 0x00,
1116                          0x00, 0x78, 0x3f, 0x3f, 0x06, 0xf2, 0x8f, 0xf0,
1117                          0x40,
1118        0x10, 0x1a, 0x01, 0x03,
1119        0x10, 0x00, 0x01, 0xaf,
1120        0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1121        0x10, 0x1b, 0x02, 0x3b, 0x01,
1122        0x10, 0x11, 0x08, 0x61, 0x00, 0xe0, 0x00, 0x49, 0x00, 0xa8, 0x00,
1123        0x10, 0x1d, 0x06, 0xe0, 0x00, 0x0c, 0x00, 0x52, 0x00,
1124        0x10, 0x1d, 0x02, 0x00, 0x00,
1125        0x10, 0x0e, 0x01, 0x08,
1126        0x10, 0x41, 0x11, 0x00, 0x0d, 0x36, 0x4e, 0x60, 0x6f, 0x7b, 0x86,
1127                          0x90, 0x98, 0xa1, 0xa9, 0xb1, 0xb7, 0xbe, 0xc4,
1128                          0xcb,
1129        0x10, 0x03, 0x01, 0x00,
1130        0x10, 0x0f, 0x02, 0x0d, 0x0d,
1131        0x10, 0x03, 0x01, 0x02,
1132        0x10, 0x41, 0x11, 0x00, 0x0d, 0x36, 0x4e, 0x60, 0x6f, 0x7b, 0x86,
1133                          0x90, 0x98, 0xa1, 0xa9, 0xb1, 0xb7, 0xbe, 0xc4,
1134                          0xcb,
1135        0x10, 0x0b, 0x01, 0x17,
1136        0x10, 0x0d, 0x01, 0x10,
1137        0x10, 0x0c, 0x01, 0x1e,
1138        0x04, 0x06, 0x01, 0x03,
1139        0x04, 0x04, 0x01, 0x00,
1140        0, 0, 0
1141};
1142
1143/* nw802 - Mustek Wcam 300 mini */
1144static const u8 mustek_start[] = {
1145        0x04, 0x06, 0x01, 0x04,
1146        0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x92, 0x03, 0x10, 0x00, 0x4d,
1147                          0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
1148                          0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
1149                          0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
1150                          0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
1151                          0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
1152                          0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
1153                          0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
1154        0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
1155                          0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
1156                          0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
1157                          0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
1158                          0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
1159                          0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
1160                          0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
1161                          0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
1162        0x00, 0x80, 0x1f, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x68, 0x00,
1163                          0x00, 0x00, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
1164                          0x00, 0x0c, 0x02, 0x01, 0x00, 0x16, 0x00, 0x94,
1165                          0x00, 0x10, 0x06, 0xfc, 0x05, 0x0c, 0x06,
1166        0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
1167                          0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
1168                          0x40, 0x20,
1169        0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
1170        0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
1171        0x06, 0x00, 0x02, 0x09, 0x99,
1172        0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1173                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1174                          0x00, 0x00, 0x00, 0x00, 0x00,
1175        0x10, 0x00, 0x40, 0xa1, 0x02, 0x80, 0x00, 0x13, 0x00, 0x00, 0x00,
1176                          0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
1177                          0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1178                          0x00, 0x49, 0x13, 0x00, 0x00, 0xc0, 0x00, 0x14,
1179                          0x02, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00,
1180                          0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
1181                          0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
1182                          0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
1183        0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
1184                          0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
1185                          0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
1186                          0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
1187                          0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
1188                          0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
1189                          0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
1190                          0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
1191        0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
1192                          0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x01, 0x82,
1193                          0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
1194                          0x01, 0xf0, 0x00,
1195        0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
1196                          0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
1197                          0x40,
1198        0x10, 0x1a, 0x01, 0x00,
1199        0x10, 0x00, 0x01, 0xad,
1200        0x00, 0x00, 0x01, 0x08,
1201        0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1202        0x10, 0x1b, 0x02, 0x00, 0x00,
1203        0x10, 0x11, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1204        0x10, 0x1d, 0x08, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
1205        0x10, 0x0e, 0x01, 0x0f,
1206        0x10, 0x41, 0x11, 0x00, 0x0f, 0x29, 0x4a, 0x64, 0x7a, 0x8c, 0x9e,
1207                          0xad, 0xba, 0xc7, 0xd3, 0xde, 0xe8, 0xf1, 0xf9,
1208                          0xff,
1209        0x10, 0x0f, 0x02, 0x11, 0x11,
1210        0x10, 0x03, 0x01, 0x0c,
1211        0x10, 0x41, 0x11, 0x00, 0x0f, 0x29, 0x4a, 0x64, 0x7a, 0x8c, 0x9e,
1212                          0xad, 0xba, 0xc7, 0xd3, 0xde, 0xe8, 0xf1, 0xf9,
1213                          0xff,
1214        0x10, 0x0b, 0x01, 0x1c,
1215        0x10, 0x0d, 0x01, 0x1a,
1216        0x10, 0x0c, 0x01, 0x34,
1217        0x04, 0x05, 0x01, 0x61,
1218        0x04, 0x04, 0x01, 0x40,
1219        0x04, 0x06, 0x01, 0x03,
1220        0, 0, 0
1221};
1222
1223/* nw802 - Scope USB Microscope M2 (ProScope) (Hitachi HD49322BF) */
1224static const u8 proscope_init[] = {
1225        0x04, 0x05, 0x01, 0x21,
1226        0x04, 0x04, 0x01, 0x01,
1227        0, 0, 0
1228};
1229static const u8 proscope_start_1[] = {
1230        0x04, 0x06, 0x01, 0x04,
1231        0x00, 0x00, 0x40, 0x10, 0x01, 0x00, 0xf9, 0x02, 0x10, 0x00, 0x04,
1232                          0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
1233                          0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
1234                          0x00, 0x08, 0x00, 0x17, 0x00, 0xce, 0x00, 0xf4,
1235                          0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
1236                          0x00, 0xce, 0x00, 0xf8, 0x03, 0x3e, 0x00, 0x86,
1237                          0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
1238                          0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
1239        0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0xb6,
1240                          0x00, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
1241                          0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
1242                          0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
1243                          0x00, 0xf6, 0x03, 0x34, 0x04, 0xf6, 0x03, 0x34,
1244                          0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
1245                          0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xe8,
1246                          0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
1247        0x00, 0x80, 0x1f, 0xb4, 0x6f, 0x1f, 0x0f, 0x08, 0x20, 0xa8, 0x00,
1248                          0x00, 0x00, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
1249                          0x00, 0x0c, 0x02, 0x01, 0x00, 0x19, 0x00, 0x94,
1250                          0x00, 0x10, 0x06, 0x10, 0x00, 0x36, 0x00,
1251        0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
1252                          0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
1253                          0x40, 0x20,
1254        0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
1255        0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
1256        0x06, 0x00, 0x02, 0x09, 0x99,
1257        0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1258                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1259                          0x00, 0x00, 0x00, 0x00, 0x00,
1260        0x10, 0x00, 0x40, 0xad, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
1261                          0x00, 0x00, 0x00, 0x10, 0x1f, 0x10, 0x08, 0x0a,
1262                          0x0a, 0x51, 0x00, 0xf1, 0x00, 0x3c, 0x00, 0xb4,
1263                          0x00, 0x49, 0x13, 0x00, 0x00, 0x8c, 0x04, 0x01,
1264                          0x20, 0x02, 0x00, 0x03, 0x00, 0x20, 0x00, 0x00,
1265                          0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
1266                          0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
1267                          0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
1268        0x10, 0x40, 0x40, 0x80, 0x00, 0x2d, 0x46, 0x58, 0x67, 0x74, 0x7f,
1269                          0x88, 0x94, 0x9d, 0xa6, 0xae, 0xb5, 0xbd, 0xc4,
1270                          0xcb, 0xd1, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
1271                          0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
1272                          0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
1273                          0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
1274                          0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
1275                          0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
1276        0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x3f,
1277                          0x01, 0x00, 0x00, 0xef, 0x00, 0x09, 0x05, 0x82,
1278                          0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
1279                          0x01, 0xf0, 0x00,
1280        0, 0, 0
1281};
1282static const u8 proscope_start_qvga[] = {
1283        0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
1284                          0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
1285                          0x40,
1286        0x10, 0x1a, 0x01, 0x06,
1287        0x00, 0x03, 0x02, 0xf9, 0x02,
1288        0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1289        0x10, 0x1b, 0x02, 0x00, 0x00,
1290        0x10, 0x11, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1291        0x10, 0x1d, 0x08, 0xc0, 0x0d, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
1292        0x10, 0x0e, 0x01, 0x10,
1293        0, 0, 0
1294};
1295static const u8 proscope_start_vga[] = {
1296        0x00, 0x03, 0x02, 0xf9, 0x02,
1297        0x10, 0x85, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01,
1298        0x02, 0x00, 0x11, 0x78, 0xa0, 0x8c, 0x78, 0xa0, 0x00, 0x00, 0x00,
1299                          0x00, 0xf0, 0x16, 0x00, 0x00, 0x82, 0x84, 0x00,
1300                          0x80,
1301        0x10, 0x1a, 0x01, 0x06,
1302        0x10, 0x00, 0x01, 0xa1,
1303        0x10, 0x1b, 0x02, 0x00, 0x00,
1304        0x10, 0x1d, 0x08, 0xc0, 0x0d, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
1305        0x10, 0x11, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01,
1306        0x10, 0x0e, 0x01, 0x10,
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, 0x03, 0x01, 0x00,
1311        0, 0, 0
1312};
1313static const u8 proscope_start_2[] = {
1314        0x10, 0x0f, 0x02, 0x0c, 0x0c,
1315        0x10, 0x03, 0x01, 0x0c,
1316        0x10, 0x41, 0x11, 0x00, 0x10, 0x51, 0x6e, 0x83, 0x93, 0xa1, 0xae,
1317                          0xb9, 0xc3, 0xcc, 0xd4, 0xdd, 0xe4, 0xeb, 0xf2,
1318                          0xf9,
1319        0x10, 0x0b, 0x01, 0x0b,
1320        0x10, 0x0d, 0x01, 0x10,
1321        0x10, 0x0c, 0x01, 0x1b,
1322        0x04, 0x06, 0x01, 0x03,
1323        0x04, 0x05, 0x01, 0x21,
1324        0x04, 0x04, 0x01, 0x00,
1325        0, 0, 0
1326};
1327
1328/* nw800 - hv7121b? (seems pas106) - Divio Chicony TwinkleCam */
1329static const u8 twinkle_start[] = {
1330        0x04, 0x06, 0x01, 0x44,
1331        0x04, 0x06, 0x01, 0x00,
1332        0x00, 0x00, 0x40, 0x14, 0x83, 0x00, 0xba, 0x01, 0x10, 0x00, 0x4f,
1333                          0xef, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0x19,
1334                          0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
1335                          0x00, 0x01, 0x00, 0x19, 0x00, 0x06, 0x00, 0xfc,
1336                          0x01, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
1337                          0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
1338                          0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
1339                          0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
1340        0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
1341                          0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
1342                          0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
1343                          0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
1344                          0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
1345                          0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
1346                          0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
1347                          0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
1348        0x00, 0x80, 0x1f, 0xb8, 0x48, 0x0f, 0x04, 0x88, 0x14, 0x68, 0x00,
1349                          0x00, 0x00, 0x00, 0x00, 0xa8, 0x01, 0x00, 0x03,
1350                          0x00, 0x24, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
1351                          0x00, 0x4b, 0x00, 0x76, 0x00, 0x86, 0x00,
1352        0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
1353                          0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
1354                          0x40, 0x20,
1355        0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
1356        0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x61, 0x00,
1357        0x05, 0x00, 0x06, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
1358        0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1359                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1360                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1361                          0x00, 0x00, 0x00,
1362        0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1363                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1364                          0x00, 0x00, 0x00, 0x00, 0x00,
1365        0x10, 0x00, 0x40, 0x80, 0x02, 0x20, 0x00, 0x11, 0x00, 0x00, 0x00,
1366                          0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x08,
1367                          0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1368                          0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
1369                          0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
1370                          0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
1371                          0x03, 0x00, 0x00, 0x10, 0x00, 0x20, 0x10, 0x06,
1372                          0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x00, 0x80,
1373        0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
1374                          0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
1375                          0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
1376                          0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
1377                          0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
1378                          0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
1379                          0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
1380                          0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
1381        0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
1382                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x62,
1383                          0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
1384                          0x01, 0x60, 0x01, 0x00, 0x00,
1385
1386        0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
1387        0x04, 0x04, 0x01, 0x10,
1388        0x04, 0x04, 0x01, 0x00,
1389        0x04, 0x05, 0x01, 0x61,
1390        0x04, 0x04, 0x01, 0x01,
1391        I2C0, 0x40, 0x0c, 0x02, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x00,
1392                          0x00, 0x00, 0x00, 0x0a,
1393        I2C0, 0x40, 0x02, 0x11, 0x06,
1394        I2C0, 0x40, 0x02, 0x14, 0x00,
1395        I2C0, 0x40, 0x02, 0x13, 0x01,           /* i2c end */
1396        I2C0, 0x40, 0x02, 0x07, 0x01,
1397        0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00,
1398                          0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65,
1399                          0x40,
1400        I2C0, 0x40, 0x02, 0x02, 0x0c,
1401        I2C0, 0x40, 0x02, 0x13, 0x01,
1402        0x10, 0x00, 0x01, 0x01,
1403        0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01,
1404                          0x20, 0x01, 0x60, 0x01,
1405        I2C0, 0x40, 0x02, 0x05, 0x0f,
1406        I2C0, 0x40, 0x02, 0x13, 0x01,
1407        I2C0, 0x40, 0x08, 0x08, 0x04, 0x0b, 0x01, 0x01, 0x02, 0x00, 0x17,
1408        I2C0, 0x40, 0x03, 0x12, 0x00, 0x01,
1409        0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
1410        I2C0, 0x40, 0x02, 0x12, 0x00,
1411        I2C0, 0x40, 0x02, 0x0e, 0x00,
1412        I2C0, 0x40, 0x02, 0x11, 0x06,
1413        0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7,
1414                          0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7,
1415                          0xf9,
1416        0x10, 0x03, 0x01, 0x00,
1417        0x10, 0x0f, 0x02, 0x0c, 0x0c,
1418        0x10, 0x03, 0x01, 0x06,
1419        0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7,
1420                          0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7,
1421                          0xf9,
1422        0x10, 0x0b, 0x01, 0x19,
1423        0x10, 0x0d, 0x01, 0x10,
1424        0x10, 0x0c, 0x01, 0x0d,
1425        0x04, 0x06, 0x01, 0x03,
1426        0x04, 0x05, 0x01, 0x61,
1427        0x04, 0x04, 0x01, 0x41,
1428        0, 0, 0
1429};
1430
1431/* nw802 dvc-v6 */
1432static const u8 dvcv6_start[] = {
1433        0x04, 0x06, 0x01, 0x06,
1434        0x00, 0x00, 0x40, 0x54, 0x96, 0x98, 0xf9, 0x02, 0x18, 0x00, 0x4c,
1435                          0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
1436                          0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
1437                          0x00, 0x0b, 0x00, 0x1b, 0x00, 0xc8, 0x00, 0xf4,
1438                          0x05, 0xb4, 0x00, 0xcc, 0x00, 0x01, 0x00, 0x01,
1439                          0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1440                          0x00, 0xa2, 0x00, 0xc6, 0x00, 0x60, 0x00, 0xc6,
1441                          0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1442        0x00, 0x40, 0x40, 0x00, 0xae, 0x00, 0xd2, 0x00, 0xae, 0x00, 0xd2,
1443                          0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1444                          0x00, 0xa8, 0x00, 0xc0, 0x00, 0x66, 0x00, 0xc0,
1445                          0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1446                          0x00, 0x0a, 0x00, 0x54, 0x00, 0x0a, 0x00, 0x54,
1447                          0x00, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
1448                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6,
1449                          0x00, 0x5d, 0x00, 0xc7, 0x00, 0x7e, 0x00, 0x30,
1450        0x00, 0x80, 0x1f, 0x98, 0x43, 0x3f, 0x0d, 0x88, 0x20, 0x80, 0x3f,
1451                          0x47, 0xaf, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
1452                          0x00, 0x0c, 0x02, 0x0c, 0x00, 0x1c, 0x00, 0x94,
1453                          0x00, 0x10, 0x06, 0x24, 0x00, 0x4a, 0x00,
1454        0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
1455                          0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
1456                          0x40, 0x20,
1457        0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
1458        0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00,
1459        0x06, 0x00, 0x02, 0x09, 0x99,
1460        0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1461                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1462                          0x00, 0x00, 0x00, 0x00, 0x00,
1463        0x10, 0x00, 0x40, 0xa0, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
1464                          0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
1465                          0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1466                          0x00, 0x49, 0x13, 0x00, 0x00, 0xe0, 0x00, 0x0c,
1467                          0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
1468                          0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
1469                          0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
1470                          0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
1471        0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
1472                          0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
1473                          0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
1474                          0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
1475                          0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
1476                          0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
1477                          0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
1478                          0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
1479        0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
1480                          0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x05, 0x82,
1481                          0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
1482                          0x01, 0xf0, 0x00,
1483        0x00, 0x03, 0x02, 0x94, 0x03,
1484        0x00, 0x1d, 0x04, 0x0a, 0x01, 0x28, 0x07,
1485        0x00, 0x7b, 0x02, 0xe0, 0x00,
1486        0x10, 0x8d, 0x01, 0x00,
1487        0x00, 0x09, 0x04, 0x1e, 0x00, 0x0c, 0x02,
1488        0x00, 0x91, 0x02, 0x0b, 0x02,
1489        0x10, 0x00, 0x01, 0xaf,
1490        0x02, 0x00, 0x11, 0x3c, 0x50, 0x8f, 0x3c, 0x50, 0x00, 0x00, 0x00,
1491                          0x00, 0x78, 0x3f, 0x3f, 0x06, 0xf2, 0x8f, 0xf0,
1492                          0x40,
1493        0x10, 0x1a, 0x01, 0x02,
1494        0x10, 0x00, 0x01, 0xaf,
1495        0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1496        0x10, 0x1b, 0x02, 0x07, 0x01,
1497        0x10, 0x11, 0x08, 0x61, 0x00, 0xe0, 0x00, 0x49, 0x00, 0xa8, 0x00,
1498        0x10, 0x1f, 0x06, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
1499        0x10, 0x1d, 0x02, 0x40, 0x06,
1500        0x10, 0x0e, 0x01, 0x08,
1501        0x10, 0x41, 0x11, 0x00, 0x0f, 0x54, 0x6f, 0x82, 0x91, 0x9f, 0xaa,
1502                          0xb4, 0xbd, 0xc5, 0xcd, 0xd5, 0xdb, 0xdc, 0xdc,
1503                          0xdc,
1504        0x10, 0x03, 0x01, 0x00,
1505        0x10, 0x0f, 0x02, 0x12, 0x12,
1506        0x10, 0x03, 0x01, 0x11,
1507        0x10, 0x41, 0x11, 0x00, 0x0f, 0x54, 0x6f, 0x82, 0x91, 0x9f, 0xaa,
1508                          0xb4, 0xbd, 0xc5, 0xcd, 0xd5, 0xdb, 0xdc, 0xdc,
1509                          0xdc,
1510        0x10, 0x0b, 0x01, 0x16,
1511        0x10, 0x0d, 0x01, 0x10,
1512        0x10, 0x0c, 0x01, 0x1a,
1513        0x04, 0x06, 0x01, 0x03,
1514        0x04, 0x04, 0x01, 0x00,
1515};
1516
1517static const u8 *webcam_start[] = {
1518        [Generic800] = nw800_start,
1519        [SpaceCam] = spacecam_start,
1520        [SpaceCam2] = spacecam2_start,
1521        [Cvideopro] = cvideopro_start,
1522        [Dlink350c] = dlink_start,
1523        [DS3303u] = ds3303_start,
1524        [Kr651us] = kr651_start_1,
1525        [Kritter] = kritter_start,
1526        [Mustek300] = mustek_start,
1527        [Proscope] = proscope_start_1,
1528        [Twinkle] = twinkle_start,
1529        [DvcV6] = dvcv6_start,
1530        [P35u] = nw801_start_1,
1531        [Generic802] = nw802_start,
1532};
1533
1534/* -- write a register -- */
1535static void reg_w(struct gspca_dev *gspca_dev,
1536                        u16 index,
1537                        const u8 *data,
1538                        int len)
1539{
1540        struct usb_device *dev = gspca_dev->dev;
1541        int ret;
1542
1543        if (gspca_dev->usb_err < 0)
1544                return;
1545        if (len == 1)
1546                PDEBUG(D_USBO, "SET 00 0000 %04x %02x", index, *data);
1547        else
1548                PDEBUG(D_USBO, "SET 00 0000 %04x %02x %02x ...",
1549                                index, *data, data[1]);
1550        memcpy(gspca_dev->usb_buf, data, len);
1551        ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
1552                        0x00,
1553                        USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
1554                        0x00,           /* value */
1555                        index,
1556                        gspca_dev->usb_buf,
1557                        len,
1558                        500);
1559        if (ret < 0) {
1560                pr_err("reg_w err %d\n", ret);
1561                gspca_dev->usb_err = ret;
1562        }
1563}
1564
1565/* -- read registers in usb_buf -- */
1566static void reg_r(struct gspca_dev *gspca_dev,
1567                        u16 index,
1568                        int len)
1569{
1570        struct usb_device *dev = gspca_dev->dev;
1571        int ret;
1572
1573        if (gspca_dev->usb_err < 0)
1574                return;
1575        ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
1576                        0x00,
1577                        USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
1578                        0x00, index,
1579                        gspca_dev->usb_buf, len, 500);
1580        if (ret < 0) {
1581                pr_err("reg_r err %d\n", ret);
1582                gspca_dev->usb_err = ret;
1583                return;
1584        }
1585        if (len == 1)
1586                PDEBUG(D_USBI, "GET 00 0000 %04x %02x",
1587                                index, gspca_dev->usb_buf[0]);
1588        else
1589                PDEBUG(D_USBI, "GET 00 0000 %04x %02x %02x ..",
1590                                index, gspca_dev->usb_buf[0],
1591                                gspca_dev->usb_buf[1]);
1592}
1593
1594static void i2c_w(struct gspca_dev *gspca_dev,
1595                        u8 i2c_addr,
1596                        const u8 *data,
1597                        int len)
1598{
1599        u8 val[2];
1600        int i;
1601
1602        reg_w(gspca_dev, 0x0600, data + 1, len - 1);
1603        reg_w(gspca_dev, 0x0600, data, len);
1604        val[0] = len;
1605        val[1] = i2c_addr;
1606        reg_w(gspca_dev, 0x0502, val, 2);
1607        val[0] = 0x01;
1608        reg_w(gspca_dev, 0x0501, val, 1);
1609        for (i = 5; --i >= 0; ) {
1610                msleep(4);
1611                reg_r(gspca_dev, 0x0505, 1);
1612                if (gspca_dev->usb_err < 0)
1613                        return;
1614                if (gspca_dev->usb_buf[0] == 0)
1615                        return;
1616        }
1617        gspca_dev->usb_err = -ETIME;
1618}
1619
1620static void reg_w_buf(struct gspca_dev *gspca_dev,
1621                        const u8 *cmd)
1622{
1623        u16 reg;
1624        int len;
1625
1626        for (;;) {
1627                reg = *cmd++ << 8;
1628                reg += *cmd++;
1629                len = *cmd++;
1630                if (len == 0)
1631                        break;
1632                if (cmd[-3] != I2C0)
1633                        reg_w(gspca_dev, reg, cmd, len);
1634                else
1635                        i2c_w(gspca_dev, reg, cmd, len);
1636                cmd += len;
1637        }
1638}
1639
1640static int swap_bits(int v)
1641{
1642        int r, i;
1643
1644        r = 0;
1645        for (i = 0; i < 8; i++) {
1646                r <<= 1;
1647                if (v & 1)
1648                        r++;
1649                v >>= 1;
1650        }
1651        return r;
1652}
1653
1654static void setgain(struct gspca_dev *gspca_dev, u8 val)
1655{
1656        struct sd *sd = (struct sd *) gspca_dev;
1657        u8 v[2];
1658
1659        switch (sd->webcam) {
1660        case P35u:
1661                reg_w(gspca_dev, 0x1026, &val, 1);
1662                break;
1663        case Kr651us:
1664                /* 0 - 253 */
1665                val = swap_bits(val);
1666                v[0] = val << 3;
1667                v[1] = val >> 5;
1668                reg_w(gspca_dev, 0x101d, v, 2); /* SIF reg0/1 (AGC) */
1669                break;
1670        }
1671}
1672
1673static void setexposure(struct gspca_dev *gspca_dev, s32 val)
1674{
1675        struct sd *sd = (struct sd *) gspca_dev;
1676        u8 v[2];
1677
1678        switch (sd->webcam) {
1679        case P35u:
1680                v[0] = ((9 - val) << 3) | 0x01;
1681                reg_w(gspca_dev, 0x1019, v, 1);
1682                break;
1683        case Cvideopro:
1684        case DvcV6:
1685        case Kritter:
1686        case Kr651us:
1687                v[0] = val;
1688                v[1] = val >> 8;
1689                reg_w(gspca_dev, 0x101b, v, 2);
1690                break;
1691        }
1692}
1693
1694static void setautogain(struct gspca_dev *gspca_dev, s32 val)
1695{
1696        struct sd *sd = (struct sd *) gspca_dev;
1697        int w, h;
1698
1699        if (!val) {
1700                sd->ag_cnt = -1;
1701                return;
1702        }
1703        sd->ag_cnt = AG_CNT_START;
1704
1705        reg_r(gspca_dev, 0x1004, 1);
1706        if (gspca_dev->usb_buf[0] & 0x04) {     /* if AE_FULL_FRM */
1707                sd->ae_res = gspca_dev->pixfmt.width * gspca_dev->pixfmt.height;
1708        } else {                                /* get the AE window size */
1709                reg_r(gspca_dev, 0x1011, 8);
1710                w = (gspca_dev->usb_buf[1] << 8) + gspca_dev->usb_buf[0]
1711                  - (gspca_dev->usb_buf[3] << 8) - gspca_dev->usb_buf[2];
1712                h = (gspca_dev->usb_buf[5] << 8) + gspca_dev->usb_buf[4]
1713                  - (gspca_dev->usb_buf[7] << 8) - gspca_dev->usb_buf[6];
1714                sd->ae_res = h * w;
1715                if (sd->ae_res == 0)
1716                        sd->ae_res = gspca_dev->pixfmt.width *
1717                                        gspca_dev->pixfmt.height;
1718        }
1719}
1720
1721static int nw802_test_reg(struct gspca_dev *gspca_dev,
1722                        u16 index,
1723                        u8 value)
1724{
1725        /* write the value */
1726        reg_w(gspca_dev, index, &value, 1);
1727
1728        /* read it */
1729        reg_r(gspca_dev, index, 1);
1730
1731        return gspca_dev->usb_buf[0] == value;
1732}
1733
1734/* this function is called at probe time */
1735static int sd_config(struct gspca_dev *gspca_dev,
1736                        const struct usb_device_id *id)
1737{
1738        struct sd *sd = (struct sd *) gspca_dev;
1739
1740        if ((unsigned) webcam >= NWEBCAMS)
1741                webcam = 0;
1742        sd->webcam = webcam;
1743        gspca_dev->cam.needs_full_bandwidth = 1;
1744        sd->ag_cnt = -1;
1745
1746        /*
1747         * Autodetect sequence inspired from some log.
1748         * We try to detect what registers exist or not.
1749         * If 0x0500 does not exist => NW802
1750         * If it does, test 0x109b. If it doesn't exist,
1751         * then it's a NW801. Else, a NW800
1752         * If a et31x110 (nw800 and 06a5:d800)
1753         *      get the sensor ID
1754         */
1755        if (!nw802_test_reg(gspca_dev, 0x0500, 0x55)) {
1756                sd->bridge = BRIDGE_NW802;
1757                if (sd->webcam == Generic800)
1758                        sd->webcam = Generic802;
1759        } else if (!nw802_test_reg(gspca_dev, 0x109b, 0xaa)) {
1760                sd->bridge = BRIDGE_NW801;
1761                if (sd->webcam == Generic800)
1762                        sd->webcam = P35u;
1763        } else if (id->idVendor == 0x06a5 && id->idProduct == 0xd800) {
1764                reg_r(gspca_dev, 0x0403, 1);            /* GPIO */
1765                PDEBUG(D_PROBE, "et31x110 sensor type %02x",
1766                                gspca_dev->usb_buf[0]);
1767                switch (gspca_dev->usb_buf[0] >> 1) {
1768                case 0x00:                              /* ?? */
1769                        if (sd->webcam == Generic800)
1770                                sd->webcam = SpaceCam;
1771                        break;
1772                case 0x01:                              /* Hynix? */
1773                        if (sd->webcam == Generic800)
1774                                sd->webcam = Twinkle;
1775                        break;
1776                case 0x0a:                              /* Pixart */
1777                        if (sd->webcam == Generic800)
1778                                sd->webcam = SpaceCam2;
1779                        break;
1780                }
1781        }
1782        if (webcam_chip[sd->webcam] != sd->bridge) {
1783                pr_err("Bad webcam type %d for NW80%d\n",
1784                       sd->webcam, sd->bridge);
1785                gspca_dev->usb_err = -ENODEV;
1786                return gspca_dev->usb_err;
1787        }
1788        PDEBUG(D_PROBE, "Bridge nw80%d - type: %d", sd->bridge, sd->webcam);
1789
1790        if (sd->bridge == BRIDGE_NW800) {
1791                switch (sd->webcam) {
1792                case DS3303u:
1793                        gspca_dev->cam.cam_mode = cif_mode;     /* qvga */
1794                        break;
1795                default:
1796                        gspca_dev->cam.cam_mode = &cif_mode[1]; /* cif */
1797                        break;
1798                }
1799                gspca_dev->cam.nmodes = 1;
1800        } else {
1801                gspca_dev->cam.cam_mode = vga_mode;
1802                switch (sd->webcam) {
1803                case Kr651us:
1804                case Proscope:
1805                case P35u:
1806                        gspca_dev->cam.nmodes = ARRAY_SIZE(vga_mode);
1807                        break;
1808                default:
1809                        gspca_dev->cam.nmodes = 1;      /* qvga only */
1810                        break;
1811                }
1812        }
1813
1814        return gspca_dev->usb_err;
1815}
1816
1817/* this function is called at probe and resume time */
1818static int sd_init(struct gspca_dev *gspca_dev)
1819{
1820        struct sd *sd = (struct sd *) gspca_dev;
1821
1822        switch (sd->bridge) {
1823        case BRIDGE_NW800:
1824                switch (sd->webcam) {
1825                case SpaceCam:
1826                        reg_w_buf(gspca_dev, spacecam_init);
1827                        break;
1828                default:
1829                        reg_w_buf(gspca_dev, nw800_init);
1830                        break;
1831                }
1832                break;
1833        default:
1834                switch (sd->webcam) {
1835                case Mustek300:
1836                case P35u:
1837                case Proscope:
1838                        reg_w_buf(gspca_dev, proscope_init);
1839                        break;
1840                }
1841                break;
1842        }
1843        return gspca_dev->usb_err;
1844}
1845
1846/* -- start the camera -- */
1847static int sd_start(struct gspca_dev *gspca_dev)
1848{
1849        struct sd *sd = (struct sd *) gspca_dev;
1850        const u8 *cmd;
1851
1852        cmd = webcam_start[sd->webcam];
1853        reg_w_buf(gspca_dev, cmd);
1854        switch (sd->webcam) {
1855        case P35u:
1856                if (gspca_dev->pixfmt.width == 320)
1857                        reg_w_buf(gspca_dev, nw801_start_qvga);
1858                else
1859                        reg_w_buf(gspca_dev, nw801_start_vga);
1860                reg_w_buf(gspca_dev, nw801_start_2);
1861                break;
1862        case Kr651us:
1863                if (gspca_dev->pixfmt.width == 320)
1864                        reg_w_buf(gspca_dev, kr651_start_qvga);
1865                else
1866                        reg_w_buf(gspca_dev, kr651_start_vga);
1867                reg_w_buf(gspca_dev, kr651_start_2);
1868                break;
1869        case Proscope:
1870                if (gspca_dev->pixfmt.width == 320)
1871                        reg_w_buf(gspca_dev, proscope_start_qvga);
1872                else
1873                        reg_w_buf(gspca_dev, proscope_start_vga);
1874                reg_w_buf(gspca_dev, proscope_start_2);
1875                break;
1876        }
1877
1878        sd->exp_too_high_cnt = 0;
1879        sd->exp_too_low_cnt = 0;
1880        return gspca_dev->usb_err;
1881}
1882
1883static void sd_stopN(struct gspca_dev *gspca_dev)
1884{
1885        struct sd *sd = (struct sd *) gspca_dev;
1886        u8 value;
1887
1888        /* 'go' off */
1889        if (sd->bridge != BRIDGE_NW801) {
1890                value = 0x02;
1891                reg_w(gspca_dev, 0x0406, &value, 1);
1892        }
1893
1894        /* LED off */
1895        switch (sd->webcam) {
1896        case Cvideopro:
1897        case Kr651us:
1898        case DvcV6:
1899        case Kritter:
1900                value = 0xff;
1901                break;
1902        case Dlink350c:
1903                value = 0x21;
1904                break;
1905        case SpaceCam:
1906        case SpaceCam2:
1907        case Proscope:
1908        case Twinkle:
1909                value = 0x01;
1910                break;
1911        default:
1912                return;
1913        }
1914        reg_w(gspca_dev, 0x0404, &value, 1);
1915}
1916
1917static void sd_pkt_scan(struct gspca_dev *gspca_dev,
1918                        u8 *data,                       /* isoc packet */
1919                        int len)                        /* iso packet length */
1920{
1921        /*
1922         * frame header = '00 00 hh ww ss xx ff ff'
1923         * with:
1924         *      - 'hh': height / 4
1925         *      - 'ww': width / 4
1926         *      - 'ss': frame sequence number c0..dd
1927         */
1928        if (data[0] == 0x00 && data[1] == 0x00
1929         && data[6] == 0xff && data[7] == 0xff) {
1930                gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0);
1931                gspca_frame_add(gspca_dev, FIRST_PACKET, data + 8, len - 8);
1932        } else {
1933                gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
1934        }
1935}
1936
1937static void do_autogain(struct gspca_dev *gspca_dev)
1938{
1939        struct sd *sd = (struct sd *) gspca_dev;
1940        int luma;
1941
1942        if (sd->ag_cnt < 0)
1943                return;
1944        if (--sd->ag_cnt >= 0)
1945                return;
1946        sd->ag_cnt = AG_CNT_START;
1947
1948        /* get the average luma */
1949        reg_r(gspca_dev, sd->bridge == BRIDGE_NW801 ? 0x080d : 0x080c, 4);
1950        luma = (gspca_dev->usb_buf[3] << 24) + (gspca_dev->usb_buf[2] << 16)
1951                + (gspca_dev->usb_buf[1] << 8) + gspca_dev->usb_buf[0];
1952        luma /= sd->ae_res;
1953
1954        switch (sd->webcam) {
1955        case P35u:
1956                gspca_coarse_grained_expo_autogain(gspca_dev, luma, 100, 5);
1957                break;
1958        default:
1959                gspca_expo_autogain(gspca_dev, luma, 100, 5, 230, 0);
1960                break;
1961        }
1962}
1963
1964
1965static int sd_s_ctrl(struct v4l2_ctrl *ctrl)
1966{
1967        struct gspca_dev *gspca_dev =
1968                container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
1969
1970        gspca_dev->usb_err = 0;
1971
1972        if (!gspca_dev->streaming)
1973                return 0;
1974
1975        switch (ctrl->id) {
1976        /* autogain/gain/exposure control cluster */
1977        case V4L2_CID_AUTOGAIN:
1978                if (ctrl->is_new)
1979                        setautogain(gspca_dev, ctrl->val);
1980                if (!ctrl->val) {
1981                        if (gspca_dev->gain->is_new)
1982                                setgain(gspca_dev, gspca_dev->gain->val);
1983                        if (gspca_dev->exposure->is_new)
1984                                setexposure(gspca_dev,
1985                                            gspca_dev->exposure->val);
1986                }
1987                break;
1988        /* Some webcams only have exposure, so handle that separately from the
1989           autogain/gain/exposure cluster in the previous case. */
1990        case V4L2_CID_EXPOSURE:
1991                setexposure(gspca_dev, gspca_dev->exposure->val);
1992                break;
1993        }
1994        return gspca_dev->usb_err;
1995}
1996
1997static const struct v4l2_ctrl_ops sd_ctrl_ops = {
1998        .s_ctrl = sd_s_ctrl,
1999};
2000
2001static int sd_init_controls(struct gspca_dev *gspca_dev)
2002{
2003        struct sd *sd = (struct sd *)gspca_dev;
2004        struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler;
2005
2006        gspca_dev->vdev.ctrl_handler = hdl;
2007        v4l2_ctrl_handler_init(hdl, 3);
2008        switch (sd->webcam) {
2009        case P35u:
2010                gspca_dev->autogain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2011                        V4L2_CID_AUTOGAIN, 0, 1, 1, 1);
2012                /* For P35u choose coarse expo auto gain function gain minimum,
2013                 * to avoid a large settings jump the first auto adjustment */
2014                gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2015                        V4L2_CID_GAIN, 0, 127, 1, 127 / 5 * 2);
2016                gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2017                        V4L2_CID_EXPOSURE, 0, 9, 1, 9);
2018                break;
2019        case Kr651us:
2020                gspca_dev->autogain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2021                        V4L2_CID_AUTOGAIN, 0, 1, 1, 1);
2022                gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2023                        V4L2_CID_GAIN, 0, 253, 1, 128);
2024                /* fall through */
2025        case Cvideopro:
2026        case DvcV6:
2027        case Kritter:
2028                gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2029                        V4L2_CID_EXPOSURE, 0, 315, 1, 150);
2030                break;
2031        default:
2032                break;
2033        }
2034
2035        if (hdl->error) {
2036                pr_err("Could not initialize controls\n");
2037                return hdl->error;
2038        }
2039        if (gspca_dev->autogain)
2040                v4l2_ctrl_auto_cluster(3, &gspca_dev->autogain, 0, false);
2041        return 0;
2042}
2043
2044/* sub-driver description */
2045static const struct sd_desc sd_desc = {
2046        .name = MODULE_NAME,
2047        .config = sd_config,
2048        .init = sd_init,
2049        .init_controls = sd_init_controls,
2050        .start = sd_start,
2051        .stopN = sd_stopN,
2052        .pkt_scan = sd_pkt_scan,
2053        .dq_callback = do_autogain,
2054};
2055
2056/* -- module initialisation -- */
2057static const struct usb_device_id device_table[] = {
2058        {USB_DEVICE(0x046d, 0xd001)},
2059        {USB_DEVICE(0x0502, 0xd001)},
2060        {USB_DEVICE(0x052b, 0xd001)},
2061        {USB_DEVICE(0x055f, 0xd001)},
2062        {USB_DEVICE(0x06a5, 0x0000)},
2063        {USB_DEVICE(0x06a5, 0xd001)},
2064        {USB_DEVICE(0x06a5, 0xd800)},
2065        {USB_DEVICE(0x06be, 0xd001)},
2066        {USB_DEVICE(0x0728, 0xd001)},
2067        {}
2068};
2069MODULE_DEVICE_TABLE(usb, device_table);
2070
2071/* -- device connect -- */
2072static int sd_probe(struct usb_interface *intf,
2073                        const struct usb_device_id *id)
2074{
2075        return gspca_dev_probe(intf, id, &sd_desc, sizeof(struct sd),
2076                                THIS_MODULE);
2077}
2078
2079static struct usb_driver sd_driver = {
2080        .name = MODULE_NAME,
2081        .id_table = device_table,
2082        .probe = sd_probe,
2083        .disconnect = gspca_disconnect,
2084#ifdef CONFIG_PM
2085        .suspend = gspca_suspend,
2086        .resume = gspca_resume,
2087        .reset_resume = gspca_resume,
2088#endif
2089};
2090
2091module_usb_driver(sd_driver);
2092
2093module_param(webcam, int, 0644);
2094MODULE_PARM_DESC(webcam,
2095        "Webcam type\n"
2096        "0: generic\n"
2097        "1: Trust 120 SpaceCam\n"
2098        "2: other Trust 120 SpaceCam\n"
2099        "3: Conceptronic Video Pro\n"
2100        "4: D-link dru-350c\n"
2101        "5: Plustek Opticam 500U\n"
2102        "6: Panasonic GP-KR651US\n"
2103        "7: iRez Kritter\n"
2104        "8: Mustek Wcam 300 mini\n"
2105        "9: Scalar USB Microscope M2 (Proscope)\n"
2106        "10: Divio Chicony TwinkleCam\n"
2107        "11: DVC-V6\n");
2108