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