提交 ce5b2acc 编写于 作者: J Jean-François Moine 提交者: Mauro Carvalho Chehab

[media] gspca - nw80x: New subdriver for Divio based webcams

[mchehab@redhat.com: Fix a few CodingStyle issues]
Tested-by: NKjell Claesson <kjell.claesson@epost.tidanet.se>
Tested-by: NHans de Goede <hdegoede@redhat.com>
Signed-off-by: NJean-François Moine <moinejf@free.fr>
Signed-off-by: NMauro Carvalho Chehab <mchehab@redhat.com>
上级 59929cef
......@@ -103,6 +103,7 @@ spca561 046d:092d Logitech QC Elch2
spca561 046d:092e Logitech QC Elch2
spca561 046d:092f Logitech QuickCam Express Plus
sunplus 046d:0960 Logitech ClickSmart 420
nw80x 046d:d001 Logitech QuickCam Pro (dark focus ring)
sunplus 0471:0322 Philips DMVC1300K
zc3xx 0471:0325 Philips SPC 200 NC
zc3xx 0471:0326 Philips SPC 300 NC
......@@ -150,10 +151,12 @@ sunplus 04fc:5330 Digitrex 2110
sunplus 04fc:5360 Sunplus Generic
spca500 04fc:7333 PalmPixDC85
sunplus 04fc:ffff Pure DigitalDakota
nw80x 0502:d001 DVC V6
spca501 0506:00df 3Com HomeConnect Lite
sunplus 052b:1507 Megapixel 5 Pretec DC-1007
sunplus 052b:1513 Megapix V4
sunplus 052b:1803 MegaImage VI
nw80x 052b:d001 EZCam Pro p35u
tv8532 0545:808b Veo Stingray
tv8532 0545:8333 Veo Stingray
sunplus 0546:3155 Polaroid PDC3070
......@@ -177,6 +180,7 @@ sunplus 055f:c530 Mustek Gsmart LCD 3
sunplus 055f:c540 Gsmart D30
sunplus 055f:c630 Mustek MDC4000
sunplus 055f:c650 Mustek MDC5500Z
nw80x 055f:d001 Mustek Wcam 300 mini
zc3xx 055f:d003 Mustek WCam300A
zc3xx 055f:d004 Mustek WCam300 AN
conex 0572:0041 Creative Notebook cx11646
......@@ -195,8 +199,12 @@ gl860 05e3:0503 Genesys Logic PC Camera
gl860 05e3:f191 Genesys Logic PC Camera
spca561 060b:a001 Maxell Compact Pc PM3
zc3xx 0698:2003 CTX M730V built in
nw80x 06a5:0000 Typhoon Webcam 100 USB
nw80x 06a5:d001 Divio based webcams
nw80x 06a5:d800 Divio Chicony TwinkleCam, Trust SpaceCam
spca500 06bd:0404 Agfa CL20
spca500 06be:0800 Optimedia
nw80x 06be:d001 EZCam Pro p35u
sunplus 06d6:0031 Trust 610 LCD PowerC@m Zoom
spca506 06e1:a190 ADS Instant VCD
ov534 06f8:3002 Hercules Blog Webcam
......@@ -204,6 +212,7 @@ ov534_9 06f8:3003 Hercules Dualpix HD Weblog
sonixj 06f8:3004 Hercules Classic Silver
sonixj 06f8:3008 Hercules Deluxe Optical Glass
pac7302 06f8:3009 Hercules Classic Link
nw80x 0728:d001 AVerMedia Camguard
spca508 0733:0110 ViewQuest VQ110
spca501 0733:0401 Intel Create and Share
spca501 0733:0402 ViewQuest M318B
......
......@@ -104,6 +104,15 @@ config USB_GSPCA_MR97310A
To compile this driver as a module, choose M here: the
module will be called gspca_mr97310a.
config USB_GSPCA_NW80X
tristate "Divio based (NW80x) USB Camera Driver"
depends on VIDEO_V4L2 && USB_GSPCA
help
Say Y here if you want support for cameras based on the NW80x chips.
To compile this driver as a module, choose M here: the
module will be called gspca_nw80x.
config USB_GSPCA_OV519
tristate "OV51x / OVFX2 / W996xCF USB Camera Driver"
depends on VIDEO_V4L2 && USB_GSPCA
......
......@@ -8,6 +8,7 @@ obj-$(CONFIG_USB_GSPCA_JEILINJ) += gspca_jeilinj.o
obj-$(CONFIG_USB_GSPCA_KONICA) += gspca_konica.o
obj-$(CONFIG_USB_GSPCA_MARS) += gspca_mars.o
obj-$(CONFIG_USB_GSPCA_MR97310A) += gspca_mr97310a.o
obj-$(CONFIG_USB_GSPCA_NW80X) += gspca_nw80x.o
obj-$(CONFIG_USB_GSPCA_OV519) += gspca_ov519.o
obj-$(CONFIG_USB_GSPCA_OV534) += gspca_ov534.o
obj-$(CONFIG_USB_GSPCA_OV534_9) += gspca_ov534_9.o
......@@ -48,6 +49,7 @@ gspca_jeilinj-objs := jeilinj.o
gspca_konica-objs := konica.o
gspca_mars-objs := mars.o
gspca_mr97310a-objs := mr97310a.o
gspca_nw80x-objs := nw80x.o
gspca_ov519-objs := ov519.o
gspca_ov534-objs := ov534.o
gspca_ov534_9-objs := ov534_9.o
......
/*
* DivIO nw80x subdriver
*
* Copyright (C) 2011 Jean-François Moine (http://moinejf.free.fr)
* Copyright (C) 2003 Sylvain Munaut <tnt@246tNt.com>
* Kjell Claesson <keyson@users.sourceforge.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#define MODULE_NAME "nw80x"
#include "gspca.h"
MODULE_AUTHOR("Jean-Francois Moine <http://moinejf.free.fr>");
MODULE_DESCRIPTION("NW80x USB Camera Driver");
MODULE_LICENSE("GPL");
static int webcam;
/* controls */
enum e_ctrl {
GAIN,
EXPOSURE,
AUTOGAIN,
NCTRLS /* number of controls */
};
/* specific webcam descriptor */
struct sd {
struct gspca_dev gspca_dev; /* !! must be the first item */
struct gspca_ctrl ctrls[NCTRLS];
u32 ae_res;
s8 ag_cnt;
#define AG_CNT_START 13
u8 bridge;
u8 webcam;
};
enum bridges {
BRIDGE_NW800, /* et31x110 */
BRIDGE_NW801,
BRIDGE_NW802,
};
enum webcams {
Generic800,
SpaceCam, /* Trust 120 SpaceCam */
SpaceCam2, /* other Trust 120 SpaceCam */
Cvideopro, /* Conceptronic Video Pro */
Dlink350c,
DS3303u,
Kr651us,
Kritter,
Mustek300,
Proscope,
Twinkle,
DsbC110,
DvcV6,
P35u,
Generic802,
NWEBCAMS /* number of webcams */
};
/*
- webcams:
- Typhoon Webcam 100 USB (06a5:0000)
nw800
- Trust SpaceCam120 or SpaceCam100 PORTABLE (06a5:d800)
nw801 SpaceCam.init
or trust_space.init if no LED (?)
- Divio Chicony TwinkleCam (06a5:d800) ?
nw800 Twinkle.init
- Plustek Opticam 500U or ProLink DS3303u
nw801 DS3303u.init
- Logitech QuickCam Pro (dark focus ring) (046d:d001)
nw801
- EZCam Pro p35u (052b:d001, 06a5:d001 and 06be:d001)
nw801 - sensor Sharp IR3Y38M
- AVerMedia Camguard (0728:d001)
nw801
- Panasonic GP-KR651US (06a5:d001)
nw802 kr651us.init
- iRez Kritter cam
nw802 kritter.init
- D-link dru-350c cam
nw802 d-link-350c.init
- The Scope USB Microscope M2 (ProScope)
= Divio ProLink DS3303u WebCam (06a5:d001)
= Scalar USB Microscope M2 (Proscope)
nw802 proscope.init
- Conceptronic Video Pro 'CVIDEOPRO USB Webcam CCD' (06a5:d001)
nw802 cvideopro.init
- Mustek Wcam 300 mini
nw802 mustek_300_mini.init
- D-Link NetQam Pro 250plus (06a5:d001)
- Showcam NGS webcam (065a:d800)
- sceptre svc300
- DSB-C110 (06a5:d800)
et31x110
- DVC V6 (0502:d001)
nw802
- registers
nw800/et31x110 nw801 nw802
0000..009e 0000..00a1 0000..009e
0200..0211 id id
0300..0302 id id
0400..0406 (inex) 0400..0406
0500..0505 0500..0506 (inex)
0600..061a 0600..0601 0600..0601
0800..0814 id id
1000..109c 1000..10a1 1000..109a
080c: luma (nw800/nw802)
080d: luma (nw801)
1004: LUT (?)
100b: R gain (0..63)
100c: B gain
100d: G gain
100e: Y gain
100f: U gain
1010: V gain
1019: clock (nw801 - bit 0x08: indoor/outdoor)
101b: shutter 1 (0..255)
101c: shutter 2
1026: BP = gain (nw801)
1041, 1052, 1063, 1074: LUT base (nw802)
1048, 1059, 106a, 107b: LUT base (nw801)
- resolutions
nw800 352x288
nw801/nw802 320x240 - 640x480
*/
static const struct v4l2_pix_format sif_mode[] = {
{352, 288, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE,
.bytesperline = 352,
.sizeimage = 352 * 288 * 4 / 8,
.colorspace = V4L2_COLORSPACE_JPEG}
};
static const struct v4l2_pix_format vga_mode[] = {
{320, 240, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE,
.bytesperline = 320,
.sizeimage = 320 * 240 * 4 / 8,
.colorspace = V4L2_COLORSPACE_JPEG},
{640, 480, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE,
.bytesperline = 640,
.sizeimage = 640 * 480 * 3 / 8,
.colorspace = V4L2_COLORSPACE_JPEG},
};
/*
* The sequences below contain:
* - 1st and 2nd bytes: either
* - register number (BE)
* - I2C0 + i2c address
* - 3rd byte: data length (=0 for end of sequence)
* - n bytes: data
*/
#define I2C0 0xff
static const u8 nw800_init[] = {
0x05, 0x00, 0x01, 0x55,
0x10, 0x9b, 0x01, 0xaa,
0x05, 0x02, 0x01, 0x02,
0x06, 0x00, 0x02, 0x04, 0xd9,
0x05, 0x05, 0x01, 0x00,
0x05, 0x05, 0x01, 0x01,
0x04, 0x06, 0x01, 0x04,
0x04, 0x06, 0x01, 0xc0,
0x00, 0x00, 0x40, 0x10, 0x43, 0x00, 0xb4, 0x01, 0x10, 0x00, 0x4f,
0xef, 0x0e, 0x00, 0x74, 0x01, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0x3e, 0x00, 0x24,
0x03, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
0x00, 0x80, 0x1f, 0xa0, 0x48, 0xc3, 0x02, 0x88, 0x0c, 0x68, 0x00,
0x00, 0x00, 0x00, 0x00, 0xa8, 0x06, 0x00, 0x08,
0x00, 0x32, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
0x00, 0x4b, 0x00, 0x76, 0x00, 0x86, 0x00,
0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
0x40, 0x20,
0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x61, 0xc0,
0x05, 0x00, 0x06, 0xe8, 0x00, 0x00, 0x00, 0x20, 0x20,
0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00,
0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x40, 0x83, 0x02, 0x20, 0x00, 0x13, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x62,
0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
0x01, 0x60, 0x01, 0x00, 0x00,
0x04, 0x04, 0x01, 0xff,
0x04, 0x06, 0x01, 0xc4,
0x04, 0x06, 0x01, 0xc0,
0x00, 0x00, 0x40, 0x10, 0x43, 0x00, 0xb4, 0x01, 0x10, 0x00, 0x4f,
0xef, 0x0e, 0x00, 0x74, 0x01, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0x3e, 0x00, 0x24,
0x03, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
0x00, 0x80, 0x1f, 0xa0, 0x48, 0xc3, 0x02, 0x88, 0x0c, 0x68, 0x00,
0x00, 0x00, 0x00, 0x00, 0xa8, 0x06, 0x00, 0x08,
0x00, 0x32, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
0x00, 0x4b, 0x00, 0x76, 0x00, 0x86, 0x00,
0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
0x40, 0x20,
0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x61, 0xc0,
0x05, 0x00, 0x06, 0xe8, 0x00, 0x00, 0x00, 0x20, 0x20,
0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00,
0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x40, 0x83, 0x02, 0x20, 0x00, 0x13, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x62,
0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
0x01, 0x60, 0x01, 0x00, 0x00,
0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00,
0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65,
0x40,
0x00, 0x80, 0x01, 0xa0,
0x10, 0x1a, 0x01, 0x00,
0x00, 0x91, 0x02, 0x6c, 0x01,
0x00, 0x03, 0x02, 0xc8, 0x01,
0x10, 0x1a, 0x01, 0x00,
0x10, 0x00, 0x01, 0x83,
0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01,
0x20, 0x01, 0x60, 0x01,
0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
0x10, 0x1b, 0x02, 0x69, 0x00,
0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
0x05, 0x02, 0x01, 0x02,
0x06, 0x00, 0x02, 0x04, 0xd9,
0x05, 0x05, 0x01, 0x20,
0x05, 0x05, 0x01, 0x21,
0x10, 0x0e, 0x01, 0x08,
0x10, 0x41, 0x11, 0x00, 0x08, 0x21, 0x3d, 0x52, 0x63, 0x75, 0x83,
0x91, 0x9e, 0xaa, 0xb6, 0xc1, 0xcc, 0xd6, 0xe0,
0xea,
0x10, 0x03, 0x01, 0x00,
0x10, 0x0f, 0x02, 0x13, 0x13,
0x10, 0x03, 0x01, 0x14,
0x10, 0x41, 0x11, 0x00, 0x08, 0x21, 0x3d, 0x52, 0x63, 0x75, 0x83,
0x91, 0x9e, 0xaa, 0xb6, 0xc1, 0xcc, 0xd6, 0xe0,
0xea,
0x10, 0x0b, 0x01, 0x14,
0x10, 0x0d, 0x01, 0x20,
0x10, 0x0c, 0x01, 0x34,
0x04, 0x06, 0x01, 0xc3,
0x04, 0x04, 0x01, 0x00,
0x05, 0x02, 0x01, 0x02,
0x06, 0x00, 0x02, 0x00, 0x48,
0x05, 0x05, 0x01, 0x20,
0x05, 0x05, 0x01, 0x21,
0, 0, 0
};
/* 06a5:d001 - nw801 - p35u */
static const u8 nw801_init_1[] = {
0x05, 0x06, 0x01, 0x04,
0x00, 0x00, 0x40, 0x0e, 0x00, 0x00, 0xf9, 0x02, 0x11, 0x00, 0x0e,
0x01, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
0x00, 0x80, 0x22, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x08, 0x00,
0x00, 0x00, 0x00, 0x00, 0x69, 0xa8, 0x1f, 0x00,
0x0d, 0x02, 0x07, 0x00, 0x01, 0x00, 0x19, 0x00,
0xf2, 0x00, 0x18, 0x06, 0x10, 0x06, 0x10, 0x00,
0x36, 0x00,
0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
0x40, 0x20,
0x03, 0x00, 0x03, 0x00, 0x00, 0x00,
0x05, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x00, 0x02, 0x09, 0x99,
0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x40, 0x22, 0x02, 0x80, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0a, 0x15, 0x08, 0x08, 0x0a,
0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x35, 0xfd, 0x07, 0x3d, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x14, 0x02,
0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x40, 0x20, 0x10, 0x06,
0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06, 0xf7,
0x10, 0x40, 0x40, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80, 0x80,
0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99, 0xa4,
0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc, 0xcf,
0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54, 0x64,
0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2, 0xe2,
0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
0x10, 0x80, 0x22, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x82, 0x02,
0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40, 0x01,
0xf0, 0x00,
0, 0, 0,
};
static const u8 nw801_init_qvga[] = {
0x02, 0x00, 0x10, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
0x00, 0x78, 0x18, 0x0b, 0x06, 0xa2, 0x86, 0x78,
0x02, 0x0f, 0x01, 0x6b,
0x10, 0x1a, 0x01, 0x15,
0x00, 0x00, 0x01, 0x1e,
0x10, 0x00, 0x01, 0x2f,
0x10, 0x8c, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
0x10, 0x11, 0x08, 0x29, 0x00, 0x18, 0x01, 0x1f, 0x00, 0xd2, 0x00,
/* AE window */
0, 0, 0,
};
static const u8 nw801_init_vga[] = {
0x02, 0x00, 0x10, 0x78, 0xa0, 0x97, 0x78, 0xa0, 0x00, 0x00, 0x00,
0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xf0,
0x02, 0x0f, 0x01, 0xd5,
0x10, 0x1a, 0x01, 0x15,
0x00, 0x00, 0x01, 0x0e,
0x10, 0x00, 0x01, 0x22,
0x10, 0x8c, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01,
0x10, 0x11, 0x08, 0x51, 0x00, 0x30, 0x02, 0x3d, 0x00, 0xa4, 0x01,
0, 0, 0,
};
static const u8 nw801_init_2[] = {
0x10, 0x04, 0x01, 0x1a,
0x10, 0x19, 0x01, 0x09, /* clock */
0x10, 0x24, 0x06, 0xc0, 0x00, 0x3f, 0x02, 0x00, 0x01,
/* .. gain .. */
0x00, 0x03, 0x02, 0x92, 0x03,
0x00, 0x1d, 0x04, 0xf2, 0x00, 0x24, 0x07,
0x00, 0x7b, 0x01, 0xcf,
0x10, 0x94, 0x01, 0x07,
0x05, 0x05, 0x01, 0x01,
0x05, 0x04, 0x01, 0x01,
0x10, 0x0e, 0x01, 0x08,
0x10, 0x48, 0x11, 0x00, 0x37, 0x55, 0x6b, 0x7d, 0x8d, 0x9b, 0xa8,
0xb4, 0xbf, 0xca, 0xd4, 0xdd, 0xe6, 0xef, 0xf0,
0xf0,
0x10, 0x03, 0x01, 0x00,
0x10, 0x0f, 0x02, 0x0c, 0x0c,
0x10, 0x03, 0x01, 0x08,
0x10, 0x48, 0x11, 0x00, 0x37, 0x55, 0x6b, 0x7d, 0x8d, 0x9b, 0xa8,
0xb4, 0xbf, 0xca, 0xd4, 0xdd, 0xe6, 0xef, 0xf0,
0xf0,
0x10, 0x0b, 0x01, 0x0b,
0x10, 0x0d, 0x01, 0x0b,
0x10, 0x0c, 0x01, 0x1f,
0x05, 0x06, 0x01, 0x03,
0, 0, 0
};
/* nw802 (sharp IR3Y38M?) */
static const u8 nw802_init[] = {
0x04, 0x06, 0x01, 0x04,
0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0xf9, 0x02, 0x10, 0x00, 0x4d,
0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
0x00, 0x80, 0x1f, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x68, 0x00,
0x00, 0x00, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
0x00, 0x0c, 0x02, 0x01, 0x00, 0x16, 0x00, 0x94,
0x00, 0x10, 0x06, 0x08, 0x00, 0x18, 0x00,
0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
0x40, 0x20,
0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
0x06, 0x00, 0x02, 0x09, 0x99,
0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x40, 0xa1, 0x02, 0x80, 0x00, 0x1d, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x49, 0x13, 0xff, 0x01, 0xc0, 0x00, 0x14,
0x02, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00,
0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x05, 0x82,
0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
0x01, 0xf0, 0x00,
0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
0x40,
0x10, 0x1a, 0x01, 0x00,
0x10, 0x00, 0x01, 0xad,
0x00, 0x00, 0x01, 0x08,
0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
0x10, 0x1b, 0x02, 0x00, 0x00,
0x10, 0x11, 0x08, 0x51, 0x00, 0xf0, 0x00, 0x3d, 0x00, 0xb4, 0x00,
0x10, 0x1d, 0x08, 0x00, 0xa0, 0x00, 0xa0, 0x00, 0xa0, 0x00, 0xa0,
0x10, 0x0e, 0x01, 0x27,
0x10, 0x41, 0x11, 0x00, 0x0e, 0x35, 0x4f, 0x62, 0x71, 0x7f, 0x8b,
0x96, 0xa0, 0xa9, 0xb2, 0xbb, 0xc3, 0xca, 0xd2,
0xd8,
0x10, 0x03, 0x01, 0x00,
0x10, 0x0f, 0x02, 0x14, 0x14,
0x10, 0x03, 0x01, 0x0c,
0x10, 0x41, 0x11, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54, 0x64, 0x74,
0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2, 0xe2, 0xf1,
0xff,
/* 0x00, 0x0e, 0x35, 0x4f, 0x62, 0x71, 0x7f, 0x8b,
* 0x96, 0xa0, 0xa9, 0xb2, 0xbb, 0xc3, 0xca, 0xd2,
* 0xd8, */
0x10, 0x0b, 0x01, 0x10,
0x10, 0x0d, 0x01, 0x11,
0x10, 0x0c, 0x01, 0x1c,
0x04, 0x06, 0x01, 0x03,
0x04, 0x04, 0x01, 0x00,
0, 0, 0
};
/* et31x110 - Trust 120 SpaceCam */
static const u8 spacecam_init[] = {
/*fixme: at connection time*/
0x04, 0x05, 0x01, 0x01,
0x04, 0x04, 0x01, 0x01,
0x04, 0x06, 0x01, 0x04,
0x04, 0x04, 0x03, 0x00, 0x00, 0x00,
0x05, 0x05, 0x01, 0x00,
/*fixme: add 300ms delay?*/
/*fixme: at capture start time*/
0x04, 0x06, 0x01, 0x44,
0x00, 0x00, 0x40, 0x10, 0x43, 0x00, 0xb4, 0x01, 0x10, 0x00, 0x4f,
0xef, 0x0e, 0x00, 0x74, 0x01, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0x3e, 0x00, 0x24,
0x03, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
0x00, 0x80, 0x1f, 0xa0, 0x48, 0xc3, 0x02, 0x88, 0x0c, 0x68, 0x00,
0x00, 0x00, 0x00, 0x00, 0xa8, 0x06, 0x00, 0x08,
0x00, 0x32, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
0x00, 0x4b, 0x00, 0x7c, 0x00, 0x80, 0x00,
0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
0x40, 0x20,
0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
0x05, 0x00, 0x06, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00,
0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x40, 0x83, 0x02, 0x20, 0x00, 0x11, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x62,
0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
0x01, 0x60, 0x01, 0x00, 0x00,
0x04, 0x06, 0x01, 0xc0,
0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00,
0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65,
0x40,
0x00, 0x80, 0x01, 0xa0,
0x10, 0x1a, 0x01, 0x00,
0x00, 0x91, 0x02, 0x32, 0x01,
0x00, 0x03, 0x02, 0x08, 0x02,
0x10, 0x00, 0x01, 0x83,
0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01,
0x20, 0x01, 0x60, 0x01,
0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
0x10, 0x0e, 0x01, 0x08,
0x10, 0x41, 0x11, 0x00, 0x64, 0x99, 0xc0, 0xe2, 0xf9, 0xf9, 0xf9,
0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
0xf9,
0x10, 0x03, 0x01, 0x00,
0x10, 0x0f, 0x02, 0x13, 0x13,
0x10, 0x03, 0x01, 0x06,
0x10, 0x41, 0x11, 0x00, 0x64, 0x99, 0xc0, 0xe2, 0xf9, 0xf9, 0xf9,
0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
0xf9,
0x10, 0x0b, 0x01, 0x08,
0x10, 0x0d, 0x01, 0x10,
0x10, 0x0c, 0x01, 0x1f,
0x04, 0x06, 0x01, 0xc3,
0x04, 0x05, 0x01, 0x40,
0x04, 0x04, 0x01, 0x40,
0, 0, 0
};
/* et31x110 - other Trust SpaceCam120 */
static const u8 spacecam2_init[] = {
0x04, 0x05, 0x01, 0x61,
0x04, 0x04, 0x01, 0x01,
0x04, 0x06, 0x01, 0x04,
0x04, 0x04, 0x03, 0x00, 0x00, 0x00,
0x05, 0x05, 0x01, 0x00,
0x04, 0x06, 0x01, 0x44,
0x04, 0x06, 0x01, 0x00,
0x00, 0x00, 0x40, 0x14, 0x83, 0x00, 0xba, 0x01, 0x10, 0x00, 0x4f,
0xef, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0x06, 0x00, 0xfc,
0x01, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
0x00, 0x80, 0x1f, 0xb8, 0x48, 0x0f, 0x04, 0x88, 0x14, 0x68, 0x00,
0x00, 0x00, 0x00, 0x00, 0xa8, 0x01, 0x00, 0x03,
0x00, 0x24, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
0x00, 0x4b, 0x00, 0x76, 0x00, 0x86, 0x00,
0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
0x40, 0x20,
0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x61, 0x00,
0x05, 0x00, 0x06, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00,
0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x40, 0x80, 0x02, 0x20, 0x00, 0x13, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x62,
0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
0x01, 0x60, 0x01, 0x00, 0x00,
0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
0x04, 0x04, 0x01, 0x40,
0x04, 0x04, 0x01, 0x00,
#if 1
I2C0, 0x40, 0x0c, 0x02, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x05,
0x00, 0x00, 0x05, 0x05,
I2C0, 0x40, 0x02, 0x11, 0x06,
I2C0, 0x40, 0x02, 0x14, 0x00,
I2C0, 0x40, 0x02, 0x13, 0x01,
#else
0x06, 0x00, 0x0b, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00,
0x00, 0x05, 0x05,
0x06, 0x00, 0x0c, 0x02, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x05,
0x00, 0x00, 0x05, 0x05,
0x05, 0x02, 0x02, 0x0c, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x01, 0x06,
0x06, 0x00, 0x02, 0x11, 0x06,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x01, 0x00,
0x06, 0x00, 0x02, 0x14, 0x00,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x01, 0x01,
0x06, 0x00, 0x02, 0x13, 0x01,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
#endif
0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00,
0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65,
0x40,
#if 1
I2C0, 0x40, 0x02, 0x02, 0x0c,
I2C0, 0x40, 0x02, 0x0f, 0x00,
I2C0, 0x40, 0x02, 0x13, 0x01,
#else
0x06, 0x00, 0x01, 0x0c,
0x06, 0x00, 0x02, 0x02, 0x0c,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x01, 0x00,
0x06, 0x00, 0x02, 0x0f, 0x00,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x01, 0x01,
0x06, 0x00, 0x02, 0x13, 0x01,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
#endif
0x10, 0x00, 0x01, 0x01,
0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01,
0x20, 0x01, 0x60, 0x01,
#if 1
I2C0, 0x40, 0x02, 0x05, 0x0f,
I2C0, 0x40, 0x02, 0x13, 0x01,
I2C0, 0x40, 0x07, 0x09, 0x0b, 0x0f, 0x05, 0x05, 0x0f, 0x00,
I2C0, 0x40, 0x03, 0x12, 0x04, 0x01,
#else
0x06, 0x00, 0x01, 0x0f,
0x06, 0x00, 0x02, 0x05, 0x0f,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x01, 0x01,
0x06, 0x00, 0x02, 0x13, 0x01,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x06, 0x0b, 0x0f, 0x05, 0x05, 0x0f, 0x00,
0x06, 0x00, 0x07, 0x09, 0x0b, 0x0f, 0x05, 0x05, 0x0f, 0x00,
0x05, 0x02, 0x02, 0x07, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x02, 0x04, 0x01,
0x06, 0x00, 0x03, 0x12, 0x04, 0x01,
0x05, 0x02, 0x02, 0x03, 0x40,
0x05, 0x05, 0x01, 0x01,
#endif
0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
0x10, 0x0e, 0x01, 0x08,
0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7,
0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7,
0xf9,
0x10, 0x03, 0x01, 0x00,
0x10, 0x0f, 0x02, 0x13, 0x13,
0x10, 0x03, 0x01, 0x06,
0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7,
0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7,
0xf9,
0x10, 0x0b, 0x01, 0x11,
0x10, 0x0d, 0x01, 0x10,
0x10, 0x0c, 0x01, 0x14,
0x04, 0x06, 0x01, 0x03,
0x04, 0x05, 0x01, 0x61,
0x04, 0x04, 0x01, 0x00,
0, 0, 0
};
/* nw802 - Conceptronic Video Pro */
static const u8 cvideopro_init[] = {
0x04, 0x06, 0x01, 0x04,
0x00, 0x00, 0x40, 0x54, 0x96, 0x98, 0xf9, 0x02, 0x18, 0x00, 0x4c,
0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
0x00, 0x0b, 0x00, 0x1b, 0x00, 0xc8, 0x00, 0xf4,
0x05, 0xb4, 0x00, 0xcc, 0x00, 0x01, 0x00, 0x01,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0xa2, 0x00, 0xc6, 0x00, 0x60, 0x00, 0xc6,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x40, 0x40, 0x00, 0xae, 0x00, 0xd2, 0x00, 0xae, 0x00, 0xd2,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0xa8, 0x00, 0xc0, 0x00, 0x66, 0x00, 0xc0,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x0a, 0x00, 0x54, 0x00, 0x0a, 0x00, 0x54,
0x00, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6,
0x00, 0x5d, 0x00, 0xc7, 0x00, 0x7e, 0x00, 0x30,
0x00, 0x80, 0x1f, 0x98, 0x43, 0x3f, 0x0d, 0x88, 0x20, 0x80, 0x3f,
0x47, 0xaf, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
0x00, 0x0c, 0x02, 0x0c, 0x00, 0x1c, 0x00, 0x94,
0x00, 0x10, 0x06, 0x24, 0x00, 0x4a, 0x00,
0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
0x40, 0x20,
0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00,
0x06, 0x00, 0x02, 0x09, 0x99,
0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x40, 0xa0, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x49, 0x13, 0x00, 0x00, 0xe0, 0x00, 0x0c,
0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x05, 0x82,
0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
0x01, 0xf0, 0x00,
0x02, 0x00, 0x11, 0x3c, 0x50, 0x8c, 0x3c, 0x50, 0x00, 0x00, 0x00,
0x00, 0x78, 0x3f, 0x3f, 0x06, 0xf2, 0x8f, 0xf0,
0x40,
0x10, 0x1a, 0x01, 0x03,
0x10, 0x00, 0x01, 0xac,
0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
0x10, 0x1b, 0x02, 0x3b, 0x01,
0x10, 0x11, 0x08, 0x61, 0x00, 0xe0, 0x00, 0x49, 0x00, 0xa8, 0x00,
0x10, 0x1f, 0x06, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
0x10, 0x1d, 0x02, 0x40, 0x06,
0x10, 0x0e, 0x01, 0x08,
0x10, 0x41, 0x11, 0x00, 0x0f, 0x46, 0x62, 0x76, 0x86, 0x94, 0xa0,
0xab, 0xb6, 0xbf, 0xc8, 0xcf, 0xd7, 0xdc, 0xdc,
0xdc,
0x10, 0x03, 0x01, 0x00,
0x10, 0x0f, 0x02, 0x12, 0x12,
0x10, 0x03, 0x01, 0x0c,
0x10, 0x41, 0x11, 0x00, 0x0f, 0x46, 0x62, 0x76, 0x86, 0x94, 0xa0,
0xab, 0xb6, 0xbf, 0xc8, 0xcf, 0xd7, 0xdc, 0xdc,
0xdc,
0x10, 0x0b, 0x01, 0x09,
0x10, 0x0d, 0x01, 0x10,
0x10, 0x0c, 0x01, 0x2f,
0x04, 0x06, 0x01, 0x03,
0x04, 0x04, 0x01, 0x00,
0, 0, 0
};
/* nw802 - D-link dru-350c cam */
static const u8 dlink_init[] = {
0x04, 0x06, 0x01, 0x04,
0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x92, 0x03, 0x10, 0x00, 0x4d,
/* 0xf9, 0x02, = nb pixels per line */
0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
0x00, 0x80, 0x1f, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x68, 0x00,
0x00, 0x00, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
0x00, 0x0c, 0x02, 0x01, 0x00, 0x16, 0x00, 0x94,
/* 0x19, v index of clamping pulse */
0x00, 0x10, 0x06, 0x10, 0x00, 0x36, 0x00,
0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
0x40, 0x20,
0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
0x06, 0x00, 0x02, 0x09, 0x99,
0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x40, 0xa1, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x49, 0x13, 0x00, 0x00, 0xc0, 0x00, 0x14,
0x02, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00,
0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x82,
0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
0x01, 0xf0, 0x00,
/* 0x00, 0x03, 0x02, 0x92, 0x03, = nb of pixels per line */
0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
0x40,
0x10, 0x1a, 0x01, 0x00,
0x10, 0x00, 0x01, 0xad,
0x00, 0x00, 0x01, 0x08,
0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
0x10, 0x1b, 0x02, 0x00, 0x00,
0x10, 0x11, 0x08, 0x51, 0x00, 0xf0, 0x00, 0x3d, 0x00, 0xb4, 0x00,
0x10, 0x1d, 0x08, 0x40, 0x06, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
0x10, 0x0e, 0x01, 0x20,
0x10, 0x41, 0x11, 0x00, 0x07, 0x1e, 0x38, 0x4d, 0x60, 0x70, 0x7f,
0x8e, 0x9b, 0xa8, 0xb4, 0xbf, 0xca, 0xd5, 0xdf,
0xea,
0x10, 0x03, 0x01, 0x00,
0x10, 0x0f, 0x02, 0x11, 0x11,
0x10, 0x03, 0x01, 0x10,
0x10, 0x41, 0x11, 0x00, 0x07, 0x1e, 0x38, 0x4d, 0x60, 0x70, 0x7f,
0x8e, 0x9b, 0xa8, 0xb4, 0xbf, 0xca, 0xd5, 0xdf,
0xea,
0x10, 0x0b, 0x01, 0x19,
0x10, 0x0d, 0x01, 0x10,
0x10, 0x0c, 0x01, 0x1e,
0x04, 0x06, 0x01, 0x03,
0x04, 0x04, 0x01, 0x00,
0, 0, 0
};
/* nw801 - Plustek Opticam 500U or ProLink DS3303u (Hitachi HD49322BF) */
static const u8 ds330_init[] = {
0x05, 0x06, 0x01, 0x04,
0x00, 0x00, 0x40, 0x16, 0x00, 0x00, 0xf9, 0x02, 0x11, 0x00, 0x0e,
0x01, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
0x00, 0x80, 0x22, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x08, 0x00,
0x00, 0x00, 0x00, 0x00, 0xa9, 0xa8, 0x1f, 0x00,
0x0d, 0x02, 0x07, 0x00, 0x01, 0x00, 0x19, 0x00,
0xf2, 0x00, 0x18, 0x06, 0x10, 0x06, 0x10, 0x00,
0x36, 0x00,
0x02, 0x00, 0x12, 0x03, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0x50,
0x40, 0x20,
0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
0x05, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00,
0x06, 0x00, 0x02, 0x09, 0x99,
0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x40, 0x2f, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x1f, 0x10, 0x08, 0x0a,
0x0a, 0x51, 0x00, 0xf1, 0x00, 0x3c, 0x00, 0xb4,
0x00, 0x01, 0x15, 0xfd, 0x07, 0x3d, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x8c, 0x04, 0x01, 0x20,
0x02, 0x00, 0x03, 0x00, 0x20, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08, 0x03,
0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06, 0xf7,
0x10, 0x40, 0x40, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80, 0x80,
0x00, 0x2d, 0x46, 0x58, 0x67, 0x74, 0x7f, 0x88,
0x94, 0x9d, 0xa6, 0xae, 0xb5, 0xbd, 0xc4, 0xcb,
0xd1, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54, 0x64,
0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2, 0xe2,
0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
0x10, 0x80, 0x22, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x3f, 0x01,
0x00, 0x00, 0xef, 0x00, 0x02, 0x0a, 0x82, 0x02,
0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40, 0x01,
0xf0, 0x00,
0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
0x00, 0x78, 0x3f, 0x3f, 0x00, 0xf2, 0x8f, 0x81,
0x40,
0x10, 0x1a, 0x01, 0x15,
0x10, 0x00, 0x01, 0x2f,
0x10, 0x8c, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
0x10, 0x1b, 0x02, 0x00, 0x00,
0x10, 0x11, 0x08, 0x61, 0x00, 0xe0, 0x00, 0x49, 0x00, 0xa8, 0x00,
0x10, 0x26, 0x06, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
0x10, 0x24, 0x02, 0x40, 0x06,
0x10, 0x0e, 0x01, 0x08,
0x10, 0x48, 0x11, 0x00, 0x15, 0x40, 0x67, 0x84, 0x9d, 0xb2, 0xc6,
0xd6, 0xe7, 0xf6, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
0xf9,
0x10, 0x03, 0x01, 0x00,
0x10, 0x0f, 0x02, 0x16, 0x16,
0x10, 0x03, 0x01, 0x0c,
0x10, 0x48, 0x11, 0x00, 0x15, 0x40, 0x67, 0x84, 0x9d, 0xb2, 0xc6,
0xd6, 0xe7, 0xf6, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
0xf9,
0x10, 0x0b, 0x01, 0x26,
0x10, 0x0d, 0x01, 0x10,
0x10, 0x0c, 0x01, 0x1c,
0x05, 0x06, 0x01, 0x03,
0x05, 0x04, 0x01, 0x00,
0, 0, 0
};
/* 06a5:d001 - nw802 - Panasonic GP-KR651US (Philips TDA8786) */
static const u8 kr651_init_1[] = {
0x04, 0x06, 0x01, 0x04,
0x00, 0x00, 0x40, 0x44, 0x96, 0x98, 0xf9, 0x02, 0x18, 0x00, 0x48,
0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
0x00, 0x0b, 0x00, 0x1b, 0x00, 0xc8, 0x00, 0xf4,
0x05, 0xb4, 0x00, 0xcc, 0x00, 0x01, 0x00, 0x01,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0xa2, 0x00, 0xc6, 0x00, 0x60, 0x00, 0xc6,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x40, 0x40, 0x00, 0xae, 0x00, 0xd2, 0x00, 0xae, 0x00, 0xd2,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0xa8, 0x00, 0xc0, 0x00, 0x66, 0x00, 0xc0,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x0a, 0x00, 0x54, 0x00, 0x0a, 0x00, 0x54,
0x00, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6,
0x00, 0x5d, 0x00, 0xc7, 0x00, 0x7e, 0x00, 0x30,
0x00, 0x80, 0x1f, 0x18, 0x43, 0x3f, 0x0d, 0x88, 0x20, 0x80, 0x3f,
0x47, 0xaf, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
0x00, 0x0c, 0x02, 0x0c, 0x00, 0x1c, 0x00, 0x94,
0x00, 0x10, 0x06, 0x24, 0x00, 0x4a, 0x00,
0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
0x40, 0x20,
0x03, 0x00, 0x03, 0x02, 0x00, 0x00,
0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
0x06, 0x00, 0x02, 0x09, 0x99,
0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x40, 0xa0, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x49, 0x13, 0x00, 0x00, 0xe0, 0x00, 0x0c,
0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x05, 0x82,
0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
0x01, 0xf0, 0x00,
0, 0, 0
};
static const u8 kr651_init_qvga[] = {
0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
0x40,
0x10, 0x1a, 0x01, 0x03,
0x10, 0x00, 0x01, 0xac,
0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
0x10, 0x1b, 0x02, 0x00, 0x00,
0x10, 0x11, 0x08, 0x29, 0x00, 0x18, 0x01, 0x1f, 0x00, 0xd2, 0x00,
0x10, 0x1d, 0x06, 0xe0, 0x00, 0x0c, 0x00, 0x52, 0x00,
0x10, 0x1d, 0x02, 0x28, 0x01,
0, 0, 0
};
static const u8 kr651_init_vga[] = {
0x02, 0x00, 0x11, 0x78, 0xa0, 0x8c, 0x78, 0xa0, 0x00, 0x00, 0x00,
0x00, 0xf0, 0x30, 0x03, 0x01, 0x82, 0x82, 0x98,
0x80,
0x10, 0x1a, 0x01, 0x03,
0x10, 0x00, 0x01, 0xa0,
0x10, 0x85, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01,
0x10, 0x1b, 0x02, 0x00, 0x00,
0x10, 0x11, 0x08, 0x51, 0x00, 0x30, 0x02, 0x3d, 0x00, 0xa4, 0x01,
0x10, 0x1d, 0x06, 0xe0, 0x00, 0x0c, 0x00, 0x52, 0x00,
0x10, 0x1d, 0x02, 0x68, 0x00,
};
static const u8 kr651_init_2[] = {
0x10, 0x0e, 0x01, 0x08,
0x10, 0x41, 0x11, 0x00, 0x11, 0x3c, 0x5c, 0x74, 0x88, 0x99, 0xa8,
0xb7, 0xc4, 0xd0, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
0xdc,
0x10, 0x03, 0x01, 0x00,
0x10, 0x0f, 0x02, 0x0c, 0x0c,
0x10, 0x03, 0x01, 0x0c,
0x10, 0x41, 0x11, 0x00, 0x11, 0x3c, 0x5c, 0x74, 0x88, 0x99, 0xa8,
0xb7, 0xc4, 0xd0, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
0xdc,
0x10, 0x0b, 0x01, 0x10,
0x10, 0x0d, 0x01, 0x10,
0x10, 0x0c, 0x01, 0x2d,
0x04, 0x06, 0x01, 0x03,
0x04, 0x04, 0x01, 0x00,
0, 0, 0
};
/* nw802 - iRez Kritter cam */
static const u8 kritter_init[] = {
0x04, 0x06, 0x01, 0x06,
0x00, 0x00, 0x40, 0x44, 0x96, 0x98, 0x94, 0x03, 0x18, 0x00, 0x48,
0x0f, 0x1e, 0x00, 0x0c, 0x02, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
0x00, 0x0b, 0x00, 0x1b, 0x00, 0x0a, 0x01, 0x28,
0x07, 0xb4, 0x00, 0xcc, 0x00, 0x01, 0x00, 0x01,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0xa2, 0x00, 0xc6, 0x00, 0x60, 0x00, 0xc6,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x40, 0x40, 0x00, 0xae, 0x00, 0xd2, 0x00, 0xae, 0x00, 0xd2,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0xa8, 0x00, 0xc0, 0x00, 0x66, 0x00, 0xc0,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x0a, 0x00, 0x54, 0x00, 0x0a, 0x00, 0x54,
0x00, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6,
0x00, 0x5d, 0x00, 0x0e, 0x00, 0x7e, 0x00, 0x30,
0x00, 0x80, 0x1f, 0x18, 0x43, 0x3f, 0x0d, 0x88, 0x20, 0x80, 0x3f,
0x47, 0xaf, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
0x00, 0x0b, 0x02, 0x0c, 0x00, 0x1c, 0x00, 0x94,
0x00, 0x10, 0x06, 0x24, 0x00, 0x4a, 0x00,
0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
0x40, 0x20,
0x03, 0x00, 0x03, 0x02, 0x00, 0x00,
0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00,
0x06, 0x00, 0x02, 0x09, 0x99,
0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x40, 0xa0, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x49, 0x13, 0x00, 0x00, 0xe0, 0x00, 0x0c,
0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x82,
0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
0x01, 0xf0, 0x00,
0x02, 0x00, 0x11, 0x3c, 0x50, 0x8c, 0x3c, 0x50, 0x00, 0x00, 0x00,
0x00, 0x78, 0x3f, 0x3f, 0x06, 0xf2, 0x8f, 0xf0,
0x40,
0x10, 0x1a, 0x01, 0x03,
0x10, 0x00, 0x01, 0xaf,
0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
0x10, 0x1b, 0x02, 0x3b, 0x01,
0x10, 0x11, 0x08, 0x61, 0x00, 0xe0, 0x00, 0x49, 0x00, 0xa8, 0x00,
0x10, 0x1d, 0x06, 0xe0, 0x00, 0x0c, 0x00, 0x52, 0x00,
0x10, 0x1d, 0x02, 0x00, 0x00,
0x10, 0x0e, 0x01, 0x08,
0x10, 0x41, 0x11, 0x00, 0x0d, 0x36, 0x4e, 0x60, 0x6f, 0x7b, 0x86,
0x90, 0x98, 0xa1, 0xa9, 0xb1, 0xb7, 0xbe, 0xc4,
0xcb,
0x10, 0x03, 0x01, 0x00,
0x10, 0x0f, 0x02, 0x0d, 0x0d,
0x10, 0x03, 0x01, 0x02,
0x10, 0x41, 0x11, 0x00, 0x0d, 0x36, 0x4e, 0x60, 0x6f, 0x7b, 0x86,
0x90, 0x98, 0xa1, 0xa9, 0xb1, 0xb7, 0xbe, 0xc4,
0xcb,
0x10, 0x0b, 0x01, 0x17,
0x10, 0x0d, 0x01, 0x10,
0x10, 0x0c, 0x01, 0x1e,
0x04, 0x06, 0x01, 0x03,
0x04, 0x04, 0x01, 0x00,
0, 0, 0
};
/* nw802 - Mustek Wcam 300 mini */
static const u8 mustek_init[] = {
0x04, 0x06, 0x01, 0x04,
0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x92, 0x03, 0x10, 0x00, 0x4d,
0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
0x00, 0x80, 0x1f, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x68, 0x00,
0x00, 0x00, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
0x00, 0x0c, 0x02, 0x01, 0x00, 0x16, 0x00, 0x94,
0x00, 0x10, 0x06, 0xfc, 0x05, 0x0c, 0x06,
0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
0x40, 0x20,
0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
0x06, 0x00, 0x02, 0x09, 0x99,
0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x40, 0xa1, 0x02, 0x80, 0x00, 0x13, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x49, 0x13, 0x00, 0x00, 0xc0, 0x00, 0x14,
0x02, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00,
0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x01, 0x82,
0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
0x01, 0xf0, 0x00,
0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
0x40,
0x10, 0x1a, 0x01, 0x00,
0x10, 0x00, 0x01, 0xad,
0x00, 0x00, 0x01, 0x08,
0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
0x10, 0x1b, 0x02, 0x00, 0x00,
0x10, 0x11, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
0x10, 0x1d, 0x08, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
0x10, 0x0e, 0x01, 0x0f,
0x10, 0x41, 0x11, 0x00, 0x0f, 0x29, 0x4a, 0x64, 0x7a, 0x8c, 0x9e,
0xad, 0xba, 0xc7, 0xd3, 0xde, 0xe8, 0xf1, 0xf9,
0xff,
0x10, 0x0f, 0x02, 0x11, 0x11,
0x10, 0x03, 0x01, 0x0c,
0x10, 0x41, 0x11, 0x00, 0x0f, 0x29, 0x4a, 0x64, 0x7a, 0x8c, 0x9e,
0xad, 0xba, 0xc7, 0xd3, 0xde, 0xe8, 0xf1, 0xf9,
0xff,
0x10, 0x0b, 0x01, 0x1c,
0x10, 0x0d, 0x01, 0x1a,
0x10, 0x0c, 0x01, 0x34,
0x04, 0x05, 0x01, 0x61,
0x04, 0x04, 0x01, 0x40,
0x04, 0x06, 0x01, 0x03,
0, 0, 0
};
/* nw802 - Scope USB Microscope M2 (ProScope) (Hitachi HD49322BF) */
static const u8 proscope_init_1[] = {
0x04, 0x05, 0x01, 0x21,
0x04, 0x04, 0x01, 0x01,
0x04, 0x06, 0x01, 0x04,
0x00, 0x00, 0x40, 0x10, 0x01, 0x00, 0xf9, 0x02, 0x10, 0x00, 0x04,
0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
0x00, 0x08, 0x00, 0x17, 0x00, 0xce, 0x00, 0xf4,
0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
0x00, 0xce, 0x00, 0xf8, 0x03, 0x3e, 0x00, 0x86,
0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0xb6,
0x00, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0x00, 0xf6, 0x03, 0x34, 0x04, 0xf6, 0x03, 0x34,
0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xe8,
0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
0x00, 0x80, 0x1f, 0xb4, 0x6f, 0x1f, 0x0f, 0x08, 0x20, 0xa8, 0x00,
0x00, 0x00, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
0x00, 0x0c, 0x02, 0x01, 0x00, 0x19, 0x00, 0x94,
0x00, 0x10, 0x06, 0x10, 0x00, 0x36, 0x00,
0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
0x40, 0x20,
0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
0x06, 0x00, 0x02, 0x09, 0x99,
0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x40, 0xad, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x1f, 0x10, 0x08, 0x0a,
0x0a, 0x51, 0x00, 0xf1, 0x00, 0x3c, 0x00, 0xb4,
0x00, 0x49, 0x13, 0x00, 0x00, 0x8c, 0x04, 0x01,
0x20, 0x02, 0x00, 0x03, 0x00, 0x20, 0x00, 0x00,
0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
0x10, 0x40, 0x40, 0x80, 0x00, 0x2d, 0x46, 0x58, 0x67, 0x74, 0x7f,
0x88, 0x94, 0x9d, 0xa6, 0xae, 0xb5, 0xbd, 0xc4,
0xcb, 0xd1, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x3f,
0x01, 0x00, 0x00, 0xef, 0x00, 0x09, 0x05, 0x82,
0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
0x01, 0xf0, 0x00,
0, 0, 0
};
static const u8 proscope_init_qvga[] = {
0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
0x40,
0x10, 0x1a, 0x01, 0x06,
0x00, 0x03, 0x02, 0xf9, 0x02,
0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
0x10, 0x1b, 0x02, 0x00, 0x00,
0x10, 0x11, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
0x10, 0x1d, 0x08, 0xc0, 0x0d, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
0x10, 0x0e, 0x01, 0x10,
0, 0, 0
};
static const u8 proscope_init_vga[] = {
0x00, 0x03, 0x02, 0xf9, 0x02,
0x10, 0x85, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01,
0x02, 0x00, 0x11, 0x78, 0xa0, 0x8c, 0x78, 0xa0, 0x00, 0x00, 0x00,
0x00, 0xf0, 0x16, 0x00, 0x00, 0x82, 0x84, 0x00,
0x80,
0x10, 0x1a, 0x01, 0x06,
0x10, 0x00, 0x01, 0xa1,
0x10, 0x1b, 0x02, 0x00, 0x00,
0x10, 0x1d, 0x08, 0xc0, 0x0d, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
0x10, 0x11, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01,
0x10, 0x0e, 0x01, 0x10,
0x10, 0x41, 0x11, 0x00, 0x10, 0x51, 0x6e, 0x83, 0x93, 0xa1, 0xae,
0xb9, 0xc3, 0xcc, 0xd4, 0xdd, 0xe4, 0xeb, 0xf2,
0xf9,
0x10, 0x03, 0x01, 0x00,
0, 0, 0
};
static const u8 proscope_init_2[] = {
0x10, 0x0f, 0x02, 0x0c, 0x0c,
0x10, 0x03, 0x01, 0x0c,
0x10, 0x41, 0x11, 0x00, 0x10, 0x51, 0x6e, 0x83, 0x93, 0xa1, 0xae,
0xb9, 0xc3, 0xcc, 0xd4, 0xdd, 0xe4, 0xeb, 0xf2,
0xf9,
0x10, 0x0b, 0x01, 0x0b,
0x10, 0x0d, 0x01, 0x10,
0x10, 0x0c, 0x01, 0x1b,
0x04, 0x06, 0x01, 0x03,
0x04, 0x05, 0x01, 0x21,
0x04, 0x04, 0x01, 0x00,
0, 0, 0
};
/* nw800 - Divio Chicony TwinkleCam */
static const u8 twinkle_init[] = {
0x04, 0x05, 0x01, 0x61,
0x04, 0x04, 0x01, 0x01,
0x04, 0x06, 0x01, 0x04,
0x04, 0x04, 0x03, 0x00, 0x00, 0x00,
0x05, 0x05, 0x01, 0x00,
0x04, 0x06, 0x01, 0x44,
0x04, 0x06, 0x01, 0x00,
0x00, 0x00, 0x40, 0x14, 0x83, 0x00, 0xba, 0x01, 0x10, 0x00, 0x4f,
0xef, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0x06, 0x00, 0xfc,
0x01, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
0x00, 0x80, 0x1f, 0xb8, 0x48, 0x0f, 0x04, 0x88, 0x14, 0x68, 0x00,
0x00, 0x00, 0x00, 0x00, 0xa8, 0x01, 0x00, 0x03,
0x00, 0x24, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
0x00, 0x4b, 0x00, 0x76, 0x00, 0x86, 0x00,
0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
0x40, 0x20,
0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x61, 0x00,
0x05, 0x00, 0x06, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00,
0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x40, 0x80, 0x02, 0x20, 0x00, 0x11, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x08,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
0x03, 0x00, 0x00, 0x10, 0x00, 0x20, 0x10, 0x06,
0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x00, 0x80,
0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x62,
0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
0x01, 0x60, 0x01, 0x00, 0x00,
0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
/*320 3f ef, 0x00 */
0x04, 0x04, 0x01, 0x10,
0x04, 0x04, 0x01, 0x00,
0x04, 0x05, 0x01, 0x61,
0x04, 0x04, 0x01, 0x01,
#if 1
I2C0, 0x40, 0x0c, 0x02, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0a,
I2C0, 0x40, 0x02, 0x11, 0x06,
I2C0, 0x40, 0x02, 0x14, 0x00,
I2C0, 0x40, 0x02, 0x13, 0x01,
I2C0, 0x40, 0x02, 0x07, 0x01,
#else
0x06, 0x00, 0x0b, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0a,
0x06, 0x00, 0x0c, 0x02, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0a,
0x05, 0x02, 0x02, 0x0c, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x01, 0x06,
0x06, 0x00, 0x02, 0x11, 0x06,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x01, 0x00,
0x06, 0x00, 0x02, 0x14, 0x00,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x01, 0x01,
0x06, 0x00, 0x02, 0x13, 0x01,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x01, 0x01,
0x06, 0x00, 0x02, 0x07, 0x01,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
#endif
0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00,
/* 320 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00, */
0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65,
/* 320 0x00, 0x78, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x5c, */
0x40,
#if 1
I2C0, 0x40, 0x02, 0x02, 0x0c,
I2C0, 0x40, 0x02, 0x13, 0x01,
#else
0x06, 0x00, 0x01, 0x0c,
0x06, 0x00, 0x02, 0x02, 0x0c,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x01, 0x01,
0x06, 0x00, 0x02, 0x13, 0x01,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
#endif
0x10, 0x00, 0x01, 0x01,
0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01,
0x20, 0x01, 0x60, 0x01,
/* 320 0xf0, 0x00, 0x40, 0x01, */
#if 1
I2C0, 0x40, 0x02, 0x05, 0x0f,
I2C0, 0x40, 0x02, 0x13, 0x01,
I2C0, 0x40, 0x08, 0x08, 0x04, 0x0b, 0x01, 0x01, 0x02, 0x00, 0x17,
I2C0, 0x40, 0x03, 0x12, 0x00, 0x01,
#else
0x06, 0x00, 0x01, 0x0f,
0x06, 0x00, 0x02, 0x05, 0x0f,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x01, 0x01,
0x06, 0x00, 0x02, 0x13, 0x01,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x07, 0x04, 0x0b, 0x01, 0x01, 0x02, 0x00, 0x17,
0x06, 0x00, 0x08, 0x08, 0x04, 0x0b, 0x01, 0x01, 0x02, 0x00, 0x17,
0x05, 0x02, 0x02, 0x08, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x02, 0x00, 0x01,
0x06, 0x00, 0x03, 0x12, 0x00, 0x01,
0x05, 0x02, 0x02, 0x03, 0x40,
0x05, 0x05, 0x01, 0x01,
#endif
0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
/* 320 3f ef */
#if 1
I2C0, 0x40, 0x02, 0x12, 0x00,
I2C0, 0x40, 0x02, 0x0e, 0x00,
I2C0, 0x40, 0x02, 0x11, 0x06,
#else
0x06, 0x00, 0x01, 0x00,
0x06, 0x00, 0x02, 0x12, 0x00,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x01, 0x00,
0x06, 0x00, 0x02, 0x0e, 0x00,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x01, 0x06,
0x06, 0x00, 0x02, 0x11, 0x06,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
#endif
0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7,
0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7,
0xf9,
0x10, 0x03, 0x01, 0x00,
0x10, 0x0f, 0x02, 0x0c, 0x0c,
0x10, 0x03, 0x01, 0x06,
0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7,
0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7,
0xf9,
0x10, 0x0b, 0x01, 0x19,
0x10, 0x0d, 0x01, 0x10,
0x10, 0x0c, 0x01, 0x0d,
0x04, 0x06, 0x01, 0x03,
0x04, 0x05, 0x01, 0x61,
0x04, 0x04, 0x01, 0x41,
0, 0, 0
};
/* et31x110 DSB-C110 */
static const u8 dsbc110_init[] = {
0x04, 0x05, 0x01, 0x61,
0x04, 0x04, 0x01, 0x01,
0x04, 0x06, 0x01, 0x04,
0x04, 0x04, 0x03, 0x00, 0x00, 0x00,
0x05, 0x05, 0x01, 0x00,
0x04, 0x06, 0x01, 0x44,
0x04, 0x06, 0x01, 0x00,
0x00, 0x00, 0x40, 0x14, 0x83, 0x00, 0xba, 0x01, 0x10, 0x00, 0x4f,
0xef, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0x06, 0x00, 0xfc,
0x01, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
0x00, 0x80, 0x1f, 0xb8, 0x48, 0x0f, 0x04, 0x88, 0x14, 0x68, 0x00,
0x00, 0x00, 0x00, 0x00, 0xa8, 0x01, 0x00, 0x03,
0x00, 0x24, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
0x00, 0x4b, 0x00, 0x76, 0x00, 0x86, 0x00,
0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
0x40, 0x20,
0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x61, 0x00,
0x05, 0x00, 0x06, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00,
0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x40, 0x80, 0x02, 0x20, 0x00, 0x11, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x08,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
0x03, 0x00, 0x00, 0x10, 0x00, 0x20, 0x10, 0x06,
0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x00, 0x80,
0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x62,
0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
0x01, 0x60, 0x01, 0x00, 0x00,
0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
0x04, 0x04, 0x01, 0x10,
0x04, 0x04, 0x01, 0x00,
0x04, 0x05, 0x01, 0x61,
0x04, 0x04, 0x01, 0x01,
#if 1
I2C0, 0x40, 0x0c, 0x02, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0a,
I2C0, 0x40, 0x02, 0x11, 0x06,
I2C0, 0x40, 0x02, 0x14, 0x00,
I2C0, 0x40, 0x02, 0x13, 0x01,
I2C0, 0x40, 0x02, 0x07, 0x01,
#else
0x06, 0x00, 0x0b, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0a,
0x06, 0x00, 0x0c, 0x02, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0a,
0x05, 0x02, 0x02, 0x0c, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x01, 0x06,
0x06, 0x00, 0x02, 0x11, 0x06,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x01, 0x00,
0x06, 0x00, 0x02, 0x14, 0x00,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x01, 0x01,
0x06, 0x00, 0x02, 0x13, 0x01,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x01, 0x01,
0x06, 0x00, 0x02, 0x07, 0x01,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
#endif
0x02, 0x00, 0x11, 0x3c, 0x50, 0x8c, 0x3c, 0x50, 0x00, 0x00, 0x00,
0x00, 0x78, 0x3f, 0x3f, 0x06, 0xf2, 0x8f, 0xe4,
0x40,
#if 1
I2C0, 0x40, 0x02, 0x02, 0x0c,
I2C0, 0x40, 0x02, 0x13, 0x01,
#else
0x06, 0x00, 0x01, 0x1c,
0x06, 0x00, 0x02, 0x02, 0x1c,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x01, 0x01,
0x06, 0x00, 0x02, 0x13, 0x01,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
#endif
0x10, 0x00, 0x01, 0x01,
0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01,
0xf0, 0x00, 0x40, 0x01,
#if 1
I2C0, 0x40, 0x02, 0x05, 0x23,
I2C0, 0x40, 0x02, 0x13, 0x01,
I2C0, 0x40, 0x08, 0x08, 0x04, 0x0b, 0x01, 0x01, 0x02, 0x00, 0x00,
I2C0, 0x40, 0x03, 0x12, 0x00, 0x01,
#else
0x06, 0x00, 0x01, 0x24,
0x06, 0x00, 0x02, 0x05, 0x24,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x01, 0x01,
0x06, 0x00, 0x02, 0x13, 0x01,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x07, 0x06, 0x0b, 0x01, 0x01, 0x02, 0x00, 0x00,
0x06, 0x00, 0x08, 0x08, 0x06, 0x0b, 0x01, 0x01, 0x02, 0x00, 0x00,
0x05, 0x02, 0x02, 0x08, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x02, 0x00, 0x01,
0x06, 0x00, 0x03, 0x12, 0x00, 0x01,
0x05, 0x02, 0x02, 0x03, 0x40,
0x05, 0x05, 0x01, 0x01,
#endif
0x10, 0x11, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
#if 1
I2C0, 0x40, 0x02, 0x12, 0x00,
I2C0, 0x40, 0x02, 0x0e, 0x00,
I2C0, 0x40, 0x02, 0x11, 0x06,
#else
0x06, 0x00, 0x01, 0x00,
0x06, 0x00, 0x02, 0x12, 0x00,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x01, 0x00,
0x06, 0x00, 0x02, 0x0e, 0x00,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
0x06, 0x00, 0x01, 0x06,
0x06, 0x00, 0x02, 0x11, 0x06,
0x05, 0x02, 0x02, 0x02, 0x40,
0x05, 0x05, 0x01, 0x01,
#endif
0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7,
0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7,
0xf9,
0x10, 0x03, 0x01, 0x00,
0x10, 0x0f, 0x02, 0x0c, 0x0c,
0x10, 0x03, 0x01, 0x06,
0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7,
0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7,
0xf9,
0x10, 0x0b, 0x01, 0x14,
0x10, 0x0d, 0x01, 0x10,
0x10, 0x0c, 0x01, 0x1d,
0x04, 0x06, 0x01, 0x03,
0x04, 0x05, 0x01, 0x61,
0x04, 0x04, 0x01, 0x41,
};
/* nw802 dvc-v6 */
static const u8 dvcv6_init[] = {
0x04, 0x06, 0x01, 0x06,
0x00, 0x00, 0x40, 0x54, 0x96, 0x98, 0xf9, 0x02, 0x18, 0x00, 0x4c,
0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
0x00, 0x0b, 0x00, 0x1b, 0x00, 0xc8, 0x00, 0xf4,
0x05, 0xb4, 0x00, 0xcc, 0x00, 0x01, 0x00, 0x01,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0xa2, 0x00, 0xc6, 0x00, 0x60, 0x00, 0xc6,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x40, 0x40, 0x00, 0xae, 0x00, 0xd2, 0x00, 0xae, 0x00, 0xd2,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0xa8, 0x00, 0xc0, 0x00, 0x66, 0x00, 0xc0,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x0a, 0x00, 0x54, 0x00, 0x0a, 0x00, 0x54,
0x00, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6,
0x00, 0x5d, 0x00, 0xc7, 0x00, 0x7e, 0x00, 0x30,
0x00, 0x80, 0x1f, 0x98, 0x43, 0x3f, 0x0d, 0x88, 0x20, 0x80, 0x3f,
0x47, 0xaf, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
0x00, 0x0c, 0x02, 0x0c, 0x00, 0x1c, 0x00, 0x94,
0x00, 0x10, 0x06, 0x24, 0x00, 0x4a, 0x00,
0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
0x40, 0x20,
0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00,
0x06, 0x00, 0x02, 0x09, 0x99,
0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x40, 0xa0, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x49, 0x13, 0x00, 0x00, 0xe0, 0x00, 0x0c,
0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x05, 0x82,
0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
0x01, 0xf0, 0x00,
0x00, 0x03, 0x02, 0x94, 0x03,
0x00, 0x1d, 0x04, 0x0a, 0x01, 0x28, 0x07,
0x00, 0x7b, 0x02, 0xe0, 0x00,
0x10, 0x8d, 0x01, 0x00,
0x00, 0x09, 0x04, 0x1e, 0x00, 0x0c, 0x02,
0x00, 0x91, 0x02, 0x0b, 0x02,
0x10, 0x00, 0x01, 0xaf,
0x02, 0x00, 0x11, 0x3c, 0x50, 0x8f, 0x3c, 0x50, 0x00, 0x00, 0x00,
0x00, 0x78, 0x3f, 0x3f, 0x06, 0xf2, 0x8f, 0xf0,
0x40,
0x10, 0x1a, 0x01, 0x02,
0x10, 0x00, 0x01, 0xaf,
0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
0x10, 0x1b, 0x02, 0x07, 0x01,
0x10, 0x11, 0x08, 0x61, 0x00, 0xe0, 0x00, 0x49, 0x00, 0xa8, 0x00,
0x10, 0x1f, 0x06, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
0x10, 0x1d, 0x02, 0x40, 0x06,
0x10, 0x0e, 0x01, 0x08,
0x10, 0x41, 0x11, 0x00, 0x0f, 0x54, 0x6f, 0x82, 0x91, 0x9f, 0xaa,
0xb4, 0xbd, 0xc5, 0xcd, 0xd5, 0xdb, 0xdc, 0xdc,
0xdc,
0x10, 0x03, 0x01, 0x00,
0x10, 0x0f, 0x02, 0x12, 0x12,
0x10, 0x03, 0x01, 0x11,
0x10, 0x41, 0x11, 0x00, 0x0f, 0x54, 0x6f, 0x82, 0x91, 0x9f, 0xaa,
0xb4, 0xbd, 0xc5, 0xcd, 0xd5, 0xdb, 0xdc, 0xdc,
0xdc,
0x10, 0x0b, 0x01, 0x16,
0x10, 0x0d, 0x01, 0x10,
0x10, 0x0c, 0x01, 0x1a,
0x04, 0x06, 0x01, 0x03,
0x04, 0x04, 0x01, 0x00,
};
static const u8 *webcam_init[] = {
[Generic800] = nw800_init,
[SpaceCam] = spacecam_init,
[SpaceCam2] = spacecam2_init,
[Cvideopro] = cvideopro_init,
[Dlink350c] = dlink_init,
[DS3303u] = ds330_init,
[Kr651us] = kr651_init_1,
[Kritter] = kritter_init,
[Mustek300] = mustek_init,
[Proscope] = proscope_init_1,
[Twinkle] = twinkle_init,
[DsbC110] = dsbc110_init,
[DvcV6] = dvcv6_init,
[P35u] = nw801_init_1,
[Generic802] = nw802_init,
};
/* -- write a register -- */
static void reg_w(struct gspca_dev *gspca_dev,
u16 index,
const u8 *data,
int len)
{
struct usb_device *dev = gspca_dev->dev;
int ret;
if (gspca_dev->usb_err < 0)
return;
if (len == 1)
PDEBUG(D_USBO, "SET 00 0000 %04x %02x", index, *data);
else
PDEBUG(D_USBO, "SET 00 0000 %04x %02x %02x ...",
index, *data, data[1]);
memcpy(gspca_dev->usb_buf, data, len);
ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
0x00,
USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
0x00, /* value */
index,
gspca_dev->usb_buf,
len,
500);
if (ret < 0) {
err("reg_w err %d", ret);
gspca_dev->usb_err = ret;
}
}
/* -- read registers in usb_buf -- */
static void reg_r(struct gspca_dev *gspca_dev,
u16 index,
int len)
{
struct usb_device *dev = gspca_dev->dev;
int ret;
if (gspca_dev->usb_err < 0)
return;
ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
0x00,
USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
0x00, index,
gspca_dev->usb_buf, len, 500);
if (ret < 0) {
err("reg_r err %d", ret);
gspca_dev->usb_err = ret;
return;
}
if (len == 1)
PDEBUG(D_USBI, "GET 00 0000 %04x %02x",
index, gspca_dev->usb_buf[0]);
else
PDEBUG(D_USBI, "GET 00 0000 %04x %02x %02x ..",
index, gspca_dev->usb_buf[0],
gspca_dev->usb_buf[1]);
}
static void i2c_w(struct gspca_dev *gspca_dev,
u8 i2c_addr,
const u8 *data,
int len)
{
u8 val[2];
int i;
reg_w(gspca_dev, 0x0600, data + 1, len - 1);
reg_w(gspca_dev, 0x0600, data, len);
val[0] = len;
val[1] = i2c_addr;
reg_w(gspca_dev, 0x0502, val, 2);
val[0] = 0x01;
reg_w(gspca_dev, 0x0501, val, 1);
for (i = 5; --i >= 0; ) {
msleep(4);
reg_r(gspca_dev, 0x0505, 1);
if (gspca_dev->usb_err < 0)
return;
if (gspca_dev->usb_buf[0] == 0)
return;
}
gspca_dev->usb_err = -ETIME;
}
static void reg_w_buf(struct gspca_dev *gspca_dev,
const u8 *cmd)
{
u16 reg;
int len;
for (;;) {
reg = *cmd++ << 8;
reg += *cmd++;
len = *cmd++;
if (len == 0)
break;
if (cmd[-3] != I2C0)
reg_w(gspca_dev, reg, cmd, len);
else
i2c_w(gspca_dev, reg & 0xff, cmd, len);
cmd += len;
}
}
static int swap_6bits(int v)
{
int r, i;
r = 0;
for (i = 0; i < 6; i++) {
r <<= 1;
if (v & 1)
r++;
v >>= 1;
}
return r;
}
static void setgain(struct gspca_dev *gspca_dev)
{
struct sd *sd = (struct sd *) gspca_dev;
u8 val, v[2];
val = sd->ctrls[GAIN].val >> 1; /* 0 - 63 -> 0 - 31 */
reg_w(gspca_dev, 0x100e, &val, 1); /* AE Y gain */
switch (sd->webcam) {
case P35u:
/* Note the control goes from 0-255 not 0-127, but anything
above 127 just means amplifying noise */
val = sd->ctrls[GAIN].val << 1; /* 0 - 63 -> 0 - 127 */
reg_w(gspca_dev, 0x1026, &val, 1);
break;
case Kr651us:
/* 0 - 63 -> 0 - 0x37 */
val = (sd->ctrls[GAIN].val * 0x37) / 63;
val = swap_6bits(val);
v[0] = val << 3;
v[1] = val >> 5;
reg_w(gspca_dev, 0x101d, v, 2); /* SIF reg0/1 (AGC) */
break;
}
}
static void setexposure(struct gspca_dev *gspca_dev)
{
struct sd *sd = (struct sd *) gspca_dev;
u8 v[2];
switch (sd->webcam) {
case P35u:
v[0] = (sd->ctrls[EXPOSURE].val << 3) | 0x01;
reg_w(gspca_dev, 0x1019, v, 1);
break;
case Kr651us:
v[0] = sd->ctrls[EXPOSURE].val;
v[1] = sd->ctrls[EXPOSURE].val >> 8;
reg_w(gspca_dev, 0x101b, v, 2);
break;
}
}
static void setautogain(struct gspca_dev *gspca_dev)
{
struct sd *sd = (struct sd *) gspca_dev;
int w, h;
if (gspca_dev->ctrl_dis & (1 << AUTOGAIN))
return;
if (!sd->ctrls[AUTOGAIN].val) {
sd->ag_cnt = -1;
return;
}
sd->ag_cnt = AG_CNT_START;
reg_r(gspca_dev, 0x1004, 1);
if (gspca_dev->usb_buf[0] & 0x04) { /* if AE_FULL_FRM */
sd->ae_res = gspca_dev->width * gspca_dev->height;
} else { /* get the AE window size */
reg_r(gspca_dev, 0x1011, 8);
w = (gspca_dev->usb_buf[1] << 8) + gspca_dev->usb_buf[0]
- (gspca_dev->usb_buf[3] << 8) - gspca_dev->usb_buf[2];
h = (gspca_dev->usb_buf[5] << 8) + gspca_dev->usb_buf[4]
- (gspca_dev->usb_buf[7] << 8) - gspca_dev->usb_buf[6];
sd->ae_res = h * w;
if (sd->ae_res == 0)
sd->ae_res = gspca_dev->width * gspca_dev->height;
}
}
/* this function is called at probe time */
static int sd_config(struct gspca_dev *gspca_dev,
const struct usb_device_id *id)
{
struct sd *sd = (struct sd *) gspca_dev;
if ((unsigned) webcam >= NWEBCAMS)
webcam = 0;
sd->webcam = webcam;
gspca_dev->cam.reverse_alts = 1;
gspca_dev->cam.ctrls = sd->ctrls;
sd->ag_cnt = -1;
return 0;
}
static int nw802_test_reg(struct gspca_dev *gspca_dev,
u16 index,
u8 value)
{
/* write the value */
reg_w(gspca_dev, index, &value, 1);
/* read it */
reg_r(gspca_dev, index, 1);
return gspca_dev->usb_buf[0] == value;
}
/* this function is called at probe and resume time */
static int sd_init(struct gspca_dev *gspca_dev)
{
struct sd *sd = (struct sd *) gspca_dev;
/*
* Autodetect sequence inspired from some log.
* We try to detect what registers exist or not.
* If 0x0500 does not exist => NW802
* If it does, test 0x109b. If it doesn't exist,
* then it's a NW801. Else, a NW800
*/
if (!nw802_test_reg(gspca_dev, 0x0500, 0x55)) {
sd->bridge = BRIDGE_NW802;
if (sd->webcam == Generic800)
sd->webcam = Generic802;
} else if (!nw802_test_reg(gspca_dev, 0x109b, 0xaa)) {
sd->bridge = BRIDGE_NW801;
if (sd->webcam == Generic800)
sd->webcam = P35u;
}
PDEBUG(D_PROBE, "Bridge nw80%d", sd->bridge);
if (sd->bridge == BRIDGE_NW800) {
gspca_dev->cam.cam_mode = sif_mode;
gspca_dev->cam.nmodes = ARRAY_SIZE(sif_mode);
} else {
gspca_dev->cam.cam_mode = vga_mode;
switch (sd->webcam) {
case Generic802:
case Kr651us:
case Proscope:
case P35u:
gspca_dev->cam.nmodes = ARRAY_SIZE(vga_mode);
break;
default:
gspca_dev->cam.nmodes = 1; /* qvga only */
break;
}
}
switch (sd->webcam) {
case P35u:
/* sd->ctrls[EXPOSURE].min = 0;
* sd->ctrls[EXPOSURE].max = 9;
* sd->ctrls[EXPOSURE].def = 1; */
break;
case Kr651us:
/* sd->ctrls[EXPOSURE].min = 0; */
sd->ctrls[EXPOSURE].max = 315;
sd->ctrls[EXPOSURE].def = 150;
break;
default:
gspca_dev->ctrl_dis = ~(1 << GAIN);
break;
}
return gspca_dev->usb_err;
}
/* -- start the camera -- */
static int sd_start(struct gspca_dev *gspca_dev)
{
struct sd *sd = (struct sd *) gspca_dev;
const u8 *cmd;
cmd = webcam_init[sd->webcam];
reg_w_buf(gspca_dev, cmd);
switch (sd->webcam) {
case P35u:
if (gspca_dev->width == 320)
reg_w_buf(gspca_dev, nw801_init_qvga);
else
reg_w_buf(gspca_dev, nw801_init_vga);
reg_w_buf(gspca_dev, nw801_init_2);
break;
case Kr651us:
if (gspca_dev->width == 320)
reg_w_buf(gspca_dev, kr651_init_qvga);
else
reg_w_buf(gspca_dev, kr651_init_vga);
reg_w_buf(gspca_dev, kr651_init_2);
break;
case Proscope:
if (gspca_dev->width == 320)
reg_w_buf(gspca_dev, proscope_init_qvga);
else
reg_w_buf(gspca_dev, proscope_init_vga);
reg_w_buf(gspca_dev, proscope_init_2);
break;
}
setgain(gspca_dev);
setexposure(gspca_dev);
setautogain(gspca_dev);
return gspca_dev->usb_err;
}
static void sd_stopN(struct gspca_dev *gspca_dev)
{
struct sd *sd = (struct sd *) gspca_dev;
u8 value;
/* 'go' off */
if (sd->bridge != BRIDGE_NW801) {
value = 0x02;
reg_w(gspca_dev, 0x0406, &value, 1);
}
/* LED off */
switch (sd->webcam) {
case Cvideopro:
case Kr651us:
case DvcV6:
case Kritter:
value = 0xff;
break;
case Dlink350c:
value = 0x21;
break;
case SpaceCam:
case SpaceCam2:
case Proscope:
case Twinkle:
value = 0x01;
break;
default:
return;
}
reg_w(gspca_dev, 0x0404, &value, 1);
}
static void sd_pkt_scan(struct gspca_dev *gspca_dev,
u8 *data, /* isoc packet */
int len) /* iso packet length */
{
/*
* frame header = '00 00 hh ww ss xx ff ff'
* with:
* - 'hh': height / 4
* - 'ww': width / 4
* - 'ss': frame sequence number c0..dd
*/
if (data[0] == 0x00 && data[1] == 0x00
&& data[6] == 0xff && data[7] == 0xff) {
gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0);
gspca_frame_add(gspca_dev, FIRST_PACKET, data + 8, len - 8);
} else {
gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
}
}
static int sd_setautogain(struct gspca_dev *gspca_dev, __s32 val)
{
struct sd *sd = (struct sd *) gspca_dev;
sd->ctrls[AUTOGAIN].val = val;
if (val)
gspca_dev->ctrl_inac = (1 << GAIN) | (1 << EXPOSURE);
else
gspca_dev->ctrl_inac = 0;
if (gspca_dev->streaming)
setautogain(gspca_dev);
return gspca_dev->usb_err;
}
static void do_autogain(struct gspca_dev *gspca_dev)
{
struct sd *sd = (struct sd *) gspca_dev;
int luma;
int gain, shutter;
if (sd->ag_cnt < 0)
return;
if (--sd->ag_cnt >= 0)
return;
sd->ag_cnt = AG_CNT_START;
/* get the average luma */
reg_r(gspca_dev, sd->bridge == BRIDGE_NW801 ? 0x080d : 0x080c, 4);
luma = (gspca_dev->usb_buf[3] << 24) + (gspca_dev->usb_buf[2] << 16)
+ (gspca_dev->usb_buf[1] << 8) + gspca_dev->usb_buf[0];
luma /= sd->ae_res;
if (sd->webcam == P35u) {
u8 clock;
if (luma > 92 && luma < 108)
return; /* fine */
clock = sd->ctrls[EXPOSURE].val;
gain = sd->ctrls[GAIN].val;
if (luma < 100) {
if (luma < 70 && clock > 0)
clock--;
if (gain > 98 && clock > 0)
clock--;
if (gain <= 50)
gain += 3;
} else {
if (luma > 150 && clock < 9)
clock++;
if (gain < 12 && clock < 9)
clock++;
if (gain >= 5)
gain -= 3;
}
if (gain != sd->ctrls[GAIN].val) {
sd->ctrls[GAIN].val = gain;
setgain(gspca_dev);
}
if (clock != sd->ctrls[EXPOSURE].val) {
sd->ctrls[EXPOSURE].val = clock;
setexposure(gspca_dev);
}
return;
}
/* kr651us */
if (luma > 95 && luma < 105)
return; /* fine */
gain = sd->ctrls[GAIN].val;
shutter = sd->ctrls[EXPOSURE].val;
if (luma < 100) {
if (shutter > 0) {
if (luma < 85 && shutter > 50)
shutter -= 50;
else
shutter--;
} else if (gain < 63) {
if (luma < 85 && gain < 53)
gain += 10;
else
gain++;
}
} else {
if (gain > 0) {
if (luma > 115 && gain > 10)
gain -= 10;
else
gain--;
} else if (shutter < 316) { /* max 0x13b */
if (luma > 115 && shutter < 266)
shutter += 50;
else
shutter++;
}
}
if (gain != sd->ctrls[GAIN].val) {
sd->ctrls[GAIN].val = gain;
setgain(gspca_dev);
}
if (shutter != sd->ctrls[EXPOSURE].val) {
sd->ctrls[EXPOSURE].val = shutter;
setexposure(gspca_dev);
}
}
/* V4L2 controls supported by the driver */
static const struct ctrl sd_ctrls[NCTRLS] = {
[GAIN] = {
{
.id = V4L2_CID_GAIN,
.type = V4L2_CTRL_TYPE_INTEGER,
.name = "Gain",
.minimum = 0,
.maximum = 63,
.step = 1,
.default_value = 16
},
.set_control = setgain
},
[EXPOSURE] = {
{
.id = V4L2_CID_EXPOSURE,
.type = V4L2_CTRL_TYPE_INTEGER,
.name = "Exposure",
.minimum = 0,
.maximum = 9,
.step = 1,
.default_value = 1
},
.set_control = setexposure
},
[AUTOGAIN] = {
{
.id = V4L2_CID_AUTOGAIN,
.type = V4L2_CTRL_TYPE_BOOLEAN,
.name = "Auto Gain",
.minimum = 0,
.maximum = 1,
.step = 1,
.default_value = 1,
.flags = V4L2_CTRL_FLAG_UPDATE
},
.set = sd_setautogain
},
};
/* sub-driver description */
static const struct sd_desc sd_desc = {
.name = MODULE_NAME,
.ctrls = sd_ctrls,
.nctrls = ARRAY_SIZE(sd_ctrls),
.config = sd_config,
.init = sd_init,
.start = sd_start,
.stopN = sd_stopN,
.pkt_scan = sd_pkt_scan,
.dq_callback = do_autogain,
};
/* -- module initialisation -- */
static const struct usb_device_id device_table[] = {
{USB_DEVICE(0x046d, 0xd001)},
{USB_DEVICE(0x0502, 0xd001)},
{USB_DEVICE(0x052b, 0xd001)},
{USB_DEVICE(0x055f, 0xd001)},
{USB_DEVICE(0x06a5, 0x0000)},
{USB_DEVICE(0x06a5, 0xd001)},
{USB_DEVICE(0x06a5, 0xd800)},
{USB_DEVICE(0x06be, 0xd001)},
{USB_DEVICE(0x0728, 0xd001)},
{}
};
MODULE_DEVICE_TABLE(usb, device_table);
/* -- device connect -- */
static int sd_probe(struct usb_interface *intf,
const struct usb_device_id *id)
{
return gspca_dev_probe(intf, id, &sd_desc, sizeof(struct sd),
THIS_MODULE);
}
static struct usb_driver sd_driver = {
.name = MODULE_NAME,
.id_table = device_table,
.probe = sd_probe,
.disconnect = gspca_disconnect,
#ifdef CONFIG_PM
.suspend = gspca_suspend,
.resume = gspca_resume,
#endif
};
/* -- module insert / remove -- */
static int __init sd_mod_init(void)
{
return usb_register(&sd_driver);
}
static void __exit sd_mod_exit(void)
{
usb_deregister(&sd_driver);
}
module_init(sd_mod_init);
module_exit(sd_mod_exit);
module_param(webcam, int, 0644);
MODULE_PARM_DESC(webcam,
"Webcam type\n"
"0: generic\n"
"1: Trust 120 SpaceCam\n"
"2: other Trust 120 SpaceCam\n"
"3: Conceptronic Video Pro\n"
"4: D-link dru-350c\n"
"5: Plustek Opticam 500U\n"
"6: Panasonic GP-KR651US\n"
"7: iRez Kritter\n"
"8: Mustek Wcam 300 mini\n"
"9: Scalar USB Microscope M2 (Proscope)\n"
"10: Divio Chicony TwinkleCam\n"
"11: DSB-C110\n"
"12: DVC-V6\n");
......@@ -396,6 +396,7 @@ struct v4l2_pix_format {
#define V4L2_PIX_FMT_TM6000 v4l2_fourcc('T', 'M', '6', '0') /* tm5600/tm60x0 */
#define V4L2_PIX_FMT_CIT_YYVYUY v4l2_fourcc('C', 'I', 'T', 'V') /* one line of Y then 1 line of VYUY */
#define V4L2_PIX_FMT_KONICA420 v4l2_fourcc('K', 'O', 'N', 'I') /* YUV420 planar in blocks of 256 pixels */
#define V4L2_PIX_FMT_JPGL v4l2_fourcc('J', 'P', 'G', 'L') /* JPEG-Lite */
/*
* F O R M A T E N U M E R A T I O N
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册