162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * DivIO nw80x subdriver
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2011 Jean-François Moine (http://moinejf.free.fr)
662306a36Sopenharmony_ci * Copyright (C) 2003 Sylvain Munaut <tnt@246tNt.com>
762306a36Sopenharmony_ci *			Kjell Claesson <keyson@users.sourceforge.net>
862306a36Sopenharmony_ci */
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#define MODULE_NAME "nw80x"
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#include "gspca.h"
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ciMODULE_AUTHOR("Jean-Francois Moine <http://moinejf.free.fr>");
1762306a36Sopenharmony_ciMODULE_DESCRIPTION("NW80x USB Camera Driver");
1862306a36Sopenharmony_ciMODULE_LICENSE("GPL");
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_cistatic int webcam;
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci/* specific webcam descriptor */
2362306a36Sopenharmony_cistruct sd {
2462306a36Sopenharmony_ci	struct gspca_dev gspca_dev;	/* !! must be the first item */
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci	u32 ae_res;
2762306a36Sopenharmony_ci	s8 ag_cnt;
2862306a36Sopenharmony_ci#define AG_CNT_START 13
2962306a36Sopenharmony_ci	u8 exp_too_low_cnt;
3062306a36Sopenharmony_ci	u8 exp_too_high_cnt;
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci	u8 bridge;
3362306a36Sopenharmony_ci	u8 webcam;
3462306a36Sopenharmony_ci};
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_cienum bridges {
3762306a36Sopenharmony_ci	BRIDGE_NW800,	/* and et31x110 */
3862306a36Sopenharmony_ci	BRIDGE_NW801,
3962306a36Sopenharmony_ci	BRIDGE_NW802,
4062306a36Sopenharmony_ci};
4162306a36Sopenharmony_cienum webcams {
4262306a36Sopenharmony_ci	Generic800,
4362306a36Sopenharmony_ci	SpaceCam,	/* Trust 120 SpaceCam */
4462306a36Sopenharmony_ci	SpaceCam2,	/* other Trust 120 SpaceCam */
4562306a36Sopenharmony_ci	Cvideopro,	/* Conceptronic Video Pro */
4662306a36Sopenharmony_ci	Dlink350c,
4762306a36Sopenharmony_ci	DS3303u,
4862306a36Sopenharmony_ci	Kr651us,
4962306a36Sopenharmony_ci	Kritter,
5062306a36Sopenharmony_ci	Mustek300,
5162306a36Sopenharmony_ci	Proscope,
5262306a36Sopenharmony_ci	Twinkle,
5362306a36Sopenharmony_ci	DvcV6,
5462306a36Sopenharmony_ci	P35u,
5562306a36Sopenharmony_ci	Generic802,
5662306a36Sopenharmony_ci	NWEBCAMS	/* number of webcams */
5762306a36Sopenharmony_ci};
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_cistatic const u8 webcam_chip[NWEBCAMS] = {
6062306a36Sopenharmony_ci	[Generic800]	= BRIDGE_NW800,	/* 06a5:0000
6162306a36Sopenharmony_ci					 * Typhoon Webcam 100 USB */
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci	[SpaceCam]	= BRIDGE_NW800,	/* 06a5:d800
6462306a36Sopenharmony_ci				* Trust SpaceCam120 or SpaceCam100 PORTABLE */
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci	[SpaceCam2]	= BRIDGE_NW800,	/* 06a5:d800 - pas106
6762306a36Sopenharmony_ci			* other Trust SpaceCam120 or SpaceCam100 PORTABLE */
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ci	[Cvideopro]	= BRIDGE_NW802,	/* 06a5:d001
7062306a36Sopenharmony_ci			* Conceptronic Video Pro 'CVIDEOPRO USB Webcam CCD' */
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci	[Dlink350c]	= BRIDGE_NW802,	/* 06a5:d001
7362306a36Sopenharmony_ci					 * D-Link NetQam Pro 250plus */
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ci	[DS3303u]	= BRIDGE_NW801,	/* 06a5:d001
7662306a36Sopenharmony_ci				* Plustek Opticam 500U or ProLink DS3303u */
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_ci	[Kr651us]	= BRIDGE_NW802,	/* 06a5:d001
7962306a36Sopenharmony_ci					 * Panasonic GP-KR651US */
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ci	[Kritter]	= BRIDGE_NW802,	/* 06a5:d001
8262306a36Sopenharmony_ci					 * iRez Kritter cam */
8362306a36Sopenharmony_ci
8462306a36Sopenharmony_ci	[Mustek300]	= BRIDGE_NW802,	/* 055f:d001
8562306a36Sopenharmony_ci					 * Mustek Wcam 300 mini */
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ci	[Proscope]	= BRIDGE_NW802,	/* 06a5:d001
8862306a36Sopenharmony_ci					 * Scalar USB Microscope (ProScope) */
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_ci	[Twinkle]	= BRIDGE_NW800,	/* 06a5:d800 - hv7121b? (seems pas106)
9162306a36Sopenharmony_ci					 * Divio Chicony TwinkleCam
9262306a36Sopenharmony_ci					 * DSB-C110 */
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ci	[DvcV6]		= BRIDGE_NW802,	/* 0502:d001
9562306a36Sopenharmony_ci					 * DVC V6 */
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_ci	[P35u]		= BRIDGE_NW801,	/* 052b:d001, 06a5:d001 and 06be:d001
9862306a36Sopenharmony_ci					 * EZCam Pro p35u */
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_ci	[Generic802]	= BRIDGE_NW802,
10162306a36Sopenharmony_ci};
10262306a36Sopenharmony_ci/*
10362306a36Sopenharmony_ci * other webcams:
10462306a36Sopenharmony_ci *	- nw801 046d:d001
10562306a36Sopenharmony_ci *		Logitech QuickCam Pro (dark focus ring)
10662306a36Sopenharmony_ci *	- nw801 0728:d001
10762306a36Sopenharmony_ci *		AVerMedia Camguard
10862306a36Sopenharmony_ci *	- nw??? 06a5:d001
10962306a36Sopenharmony_ci *		D-Link NetQam Pro 250plus
11062306a36Sopenharmony_ci *	- nw800 065a:d800
11162306a36Sopenharmony_ci *		Showcam NGS webcam
11262306a36Sopenharmony_ci *	- nw??? ????:????
11362306a36Sopenharmony_ci *		Sceptre svc300
11462306a36Sopenharmony_ci */
11562306a36Sopenharmony_ci
11662306a36Sopenharmony_ci/*
11762306a36Sopenharmony_ci * registers
11862306a36Sopenharmony_ci *    nw800/et31x110	  nw801		  nw802
11962306a36Sopenharmony_ci *	0000..009e	0000..00a1	0000..009e
12062306a36Sopenharmony_ci *	0200..0211	   id		   id
12162306a36Sopenharmony_ci *	0300..0302	   id		   id
12262306a36Sopenharmony_ci *	0400..0406	  (inex)	0400..0406
12362306a36Sopenharmony_ci *	0500..0505	0500..0506	  (inex)
12462306a36Sopenharmony_ci *	0600..061a	0600..0601	0600..0601
12562306a36Sopenharmony_ci *	0800..0814	   id		   id
12662306a36Sopenharmony_ci *	1000..109c	1000..10a1	1000..109a
12762306a36Sopenharmony_ci */
12862306a36Sopenharmony_ci
12962306a36Sopenharmony_ci/* resolutions
13062306a36Sopenharmony_ci *	nw800: 320x240, 352x288
13162306a36Sopenharmony_ci *	nw801/802: 320x240, 640x480
13262306a36Sopenharmony_ci */
13362306a36Sopenharmony_cistatic const struct v4l2_pix_format cif_mode[] = {
13462306a36Sopenharmony_ci	{320, 240, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE,
13562306a36Sopenharmony_ci		.bytesperline = 320,
13662306a36Sopenharmony_ci		.sizeimage = 320 * 240 * 4 / 8,
13762306a36Sopenharmony_ci		.colorspace = V4L2_COLORSPACE_JPEG},
13862306a36Sopenharmony_ci	{352, 288, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE,
13962306a36Sopenharmony_ci		.bytesperline = 352,
14062306a36Sopenharmony_ci		.sizeimage = 352 * 288 * 4 / 8,
14162306a36Sopenharmony_ci		.colorspace = V4L2_COLORSPACE_JPEG}
14262306a36Sopenharmony_ci};
14362306a36Sopenharmony_cistatic const struct v4l2_pix_format vga_mode[] = {
14462306a36Sopenharmony_ci	{320, 240, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE,
14562306a36Sopenharmony_ci		.bytesperline = 320,
14662306a36Sopenharmony_ci		.sizeimage = 320 * 240 * 4 / 8,
14762306a36Sopenharmony_ci		.colorspace = V4L2_COLORSPACE_JPEG},
14862306a36Sopenharmony_ci	{640, 480, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE,
14962306a36Sopenharmony_ci		.bytesperline = 640,
15062306a36Sopenharmony_ci		.sizeimage = 640 * 480 * 3 / 8,
15162306a36Sopenharmony_ci		.colorspace = V4L2_COLORSPACE_JPEG},
15262306a36Sopenharmony_ci};
15362306a36Sopenharmony_ci
15462306a36Sopenharmony_ci/*
15562306a36Sopenharmony_ci * The sequences below contain:
15662306a36Sopenharmony_ci *	- 1st and 2nd bytes: either
15762306a36Sopenharmony_ci *		- register number (BE)
15862306a36Sopenharmony_ci *		- I2C0 + i2c address
15962306a36Sopenharmony_ci *	- 3rd byte: data length (=0 for end of sequence)
16062306a36Sopenharmony_ci *	- n bytes: data
16162306a36Sopenharmony_ci */
16262306a36Sopenharmony_ci#define I2C0 0xff
16362306a36Sopenharmony_ci
16462306a36Sopenharmony_cistatic const u8 nw800_init[] = {
16562306a36Sopenharmony_ci	0x04, 0x05, 0x01, 0x61,
16662306a36Sopenharmony_ci	0x04, 0x04, 0x01, 0x01,
16762306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0x04,
16862306a36Sopenharmony_ci	0x04, 0x04, 0x03, 0x00, 0x00, 0x00,
16962306a36Sopenharmony_ci	0x05, 0x05, 0x01, 0x00,
17062306a36Sopenharmony_ci	0, 0, 0
17162306a36Sopenharmony_ci};
17262306a36Sopenharmony_cistatic const u8 nw800_start[] = {
17362306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0xc0,
17462306a36Sopenharmony_ci	0x00, 0x00, 0x40, 0x10, 0x43, 0x00, 0xb4, 0x01, 0x10, 0x00, 0x4f,
17562306a36Sopenharmony_ci			  0xef, 0x0e, 0x00, 0x74, 0x01, 0x01, 0x00, 0x19,
17662306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
17762306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x19, 0x00, 0x3e, 0x00, 0x24,
17862306a36Sopenharmony_ci			  0x03, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
17962306a36Sopenharmony_ci			  0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
18062306a36Sopenharmony_ci			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
18162306a36Sopenharmony_ci			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
18262306a36Sopenharmony_ci	0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
18362306a36Sopenharmony_ci			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
18462306a36Sopenharmony_ci			  0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
18562306a36Sopenharmony_ci			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
18662306a36Sopenharmony_ci			  0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
18762306a36Sopenharmony_ci			  0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
18862306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
18962306a36Sopenharmony_ci			  0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
19062306a36Sopenharmony_ci	0x00, 0x80, 0x1f, 0xa0, 0x48, 0xc3, 0x02, 0x88, 0x0c, 0x68, 0x00,
19162306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0xa8, 0x06, 0x00, 0x08,
19262306a36Sopenharmony_ci			  0x00, 0x32, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
19362306a36Sopenharmony_ci			  0x00, 0x4b, 0x00, 0x76, 0x00, 0x86, 0x00,
19462306a36Sopenharmony_ci	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
19562306a36Sopenharmony_ci			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
19662306a36Sopenharmony_ci			  0x40, 0x20,
19762306a36Sopenharmony_ci	0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
19862306a36Sopenharmony_ci	0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x61, 0xc0,
19962306a36Sopenharmony_ci	0x05, 0x00, 0x06, 0xe8, 0x00, 0x00, 0x00, 0x20, 0x20,
20062306a36Sopenharmony_ci	0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
20162306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
20262306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
20362306a36Sopenharmony_ci			  0x00, 0x00, 0x00,
20462306a36Sopenharmony_ci	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
20562306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
20662306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00,
20762306a36Sopenharmony_ci	0x10, 0x00, 0x40, 0x83, 0x02, 0x20, 0x00, 0x13, 0x00, 0x00, 0x00,
20862306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
20962306a36Sopenharmony_ci			  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
21062306a36Sopenharmony_ci			  0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
21162306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
21262306a36Sopenharmony_ci			  0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
21362306a36Sopenharmony_ci			  0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
21462306a36Sopenharmony_ci			  0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
21562306a36Sopenharmony_ci	0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
21662306a36Sopenharmony_ci			  0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
21762306a36Sopenharmony_ci			  0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
21862306a36Sopenharmony_ci			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
21962306a36Sopenharmony_ci			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
22062306a36Sopenharmony_ci			  0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
22162306a36Sopenharmony_ci			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
22262306a36Sopenharmony_ci			  0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
22362306a36Sopenharmony_ci	0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
22462306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x62,
22562306a36Sopenharmony_ci			  0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
22662306a36Sopenharmony_ci			  0x01, 0x60, 0x01, 0x00, 0x00,
22762306a36Sopenharmony_ci
22862306a36Sopenharmony_ci	0x04, 0x04, 0x01, 0xff,
22962306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0xc4,
23062306a36Sopenharmony_ci
23162306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0xc0,
23262306a36Sopenharmony_ci	0x00, 0x00, 0x40, 0x10, 0x43, 0x00, 0xb4, 0x01, 0x10, 0x00, 0x4f,
23362306a36Sopenharmony_ci			  0xef, 0x0e, 0x00, 0x74, 0x01, 0x01, 0x00, 0x19,
23462306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
23562306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x19, 0x00, 0x3e, 0x00, 0x24,
23662306a36Sopenharmony_ci			  0x03, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
23762306a36Sopenharmony_ci			  0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
23862306a36Sopenharmony_ci			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
23962306a36Sopenharmony_ci			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
24062306a36Sopenharmony_ci	0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
24162306a36Sopenharmony_ci			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
24262306a36Sopenharmony_ci			  0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
24362306a36Sopenharmony_ci			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
24462306a36Sopenharmony_ci			  0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
24562306a36Sopenharmony_ci			  0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
24662306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
24762306a36Sopenharmony_ci			  0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
24862306a36Sopenharmony_ci	0x00, 0x80, 0x1f, 0xa0, 0x48, 0xc3, 0x02, 0x88, 0x0c, 0x68, 0x00,
24962306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0xa8, 0x06, 0x00, 0x08,
25062306a36Sopenharmony_ci			  0x00, 0x32, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
25162306a36Sopenharmony_ci			  0x00, 0x4b, 0x00, 0x76, 0x00, 0x86, 0x00,
25262306a36Sopenharmony_ci	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
25362306a36Sopenharmony_ci			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
25462306a36Sopenharmony_ci			  0x40, 0x20,
25562306a36Sopenharmony_ci	0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
25662306a36Sopenharmony_ci	0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x61, 0xc0,
25762306a36Sopenharmony_ci	0x05, 0x00, 0x06, 0xe8, 0x00, 0x00, 0x00, 0x20, 0x20,
25862306a36Sopenharmony_ci	0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
25962306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
26062306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
26162306a36Sopenharmony_ci			  0x00, 0x00, 0x00,
26262306a36Sopenharmony_ci	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
26362306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
26462306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00,
26562306a36Sopenharmony_ci	0x10, 0x00, 0x40, 0x83, 0x02, 0x20, 0x00, 0x13, 0x00, 0x00, 0x00,
26662306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
26762306a36Sopenharmony_ci			  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
26862306a36Sopenharmony_ci			  0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
26962306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
27062306a36Sopenharmony_ci			  0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
27162306a36Sopenharmony_ci			  0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
27262306a36Sopenharmony_ci			  0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
27362306a36Sopenharmony_ci	0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
27462306a36Sopenharmony_ci			  0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
27562306a36Sopenharmony_ci			  0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
27662306a36Sopenharmony_ci			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
27762306a36Sopenharmony_ci			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
27862306a36Sopenharmony_ci			  0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
27962306a36Sopenharmony_ci			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
28062306a36Sopenharmony_ci			  0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
28162306a36Sopenharmony_ci	0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
28262306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x62,
28362306a36Sopenharmony_ci			  0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
28462306a36Sopenharmony_ci			  0x01, 0x60, 0x01, 0x00, 0x00,
28562306a36Sopenharmony_ci
28662306a36Sopenharmony_ci	0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00,
28762306a36Sopenharmony_ci			  0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65,
28862306a36Sopenharmony_ci			  0x40,
28962306a36Sopenharmony_ci	0x00, 0x80, 0x01, 0xa0,
29062306a36Sopenharmony_ci	0x10, 0x1a, 0x01, 0x00,
29162306a36Sopenharmony_ci	0x00, 0x91, 0x02, 0x6c, 0x01,
29262306a36Sopenharmony_ci	0x00, 0x03, 0x02, 0xc8, 0x01,
29362306a36Sopenharmony_ci	0x10, 0x1a, 0x01, 0x00,
29462306a36Sopenharmony_ci	0x10, 0x00, 0x01, 0x83,
29562306a36Sopenharmony_ci	0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01,
29662306a36Sopenharmony_ci			  0x20, 0x01, 0x60, 0x01,
29762306a36Sopenharmony_ci	0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
29862306a36Sopenharmony_ci	0x10, 0x1b, 0x02, 0x69, 0x00,
29962306a36Sopenharmony_ci	0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
30062306a36Sopenharmony_ci	0x05, 0x02, 0x01, 0x02,
30162306a36Sopenharmony_ci	0x06, 0x00, 0x02, 0x04, 0xd9,
30262306a36Sopenharmony_ci	0x05, 0x05, 0x01, 0x20,
30362306a36Sopenharmony_ci	0x05, 0x05, 0x01, 0x21,
30462306a36Sopenharmony_ci	0x10, 0x0e, 0x01, 0x08,
30562306a36Sopenharmony_ci	0x10, 0x41, 0x11, 0x00, 0x08, 0x21, 0x3d, 0x52, 0x63, 0x75, 0x83,
30662306a36Sopenharmony_ci			  0x91, 0x9e, 0xaa, 0xb6, 0xc1, 0xcc, 0xd6, 0xe0,
30762306a36Sopenharmony_ci			  0xea,
30862306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x00,
30962306a36Sopenharmony_ci	0x10, 0x0f, 0x02, 0x13, 0x13,
31062306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x14,
31162306a36Sopenharmony_ci	0x10, 0x41, 0x11, 0x00, 0x08, 0x21, 0x3d, 0x52, 0x63, 0x75, 0x83,
31262306a36Sopenharmony_ci			  0x91, 0x9e, 0xaa, 0xb6, 0xc1, 0xcc, 0xd6, 0xe0,
31362306a36Sopenharmony_ci			  0xea,
31462306a36Sopenharmony_ci	0x10, 0x0b, 0x01, 0x14,
31562306a36Sopenharmony_ci	0x10, 0x0d, 0x01, 0x20,
31662306a36Sopenharmony_ci	0x10, 0x0c, 0x01, 0x34,
31762306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0xc3,
31862306a36Sopenharmony_ci	0x04, 0x04, 0x01, 0x00,
31962306a36Sopenharmony_ci	0x05, 0x02, 0x01, 0x02,
32062306a36Sopenharmony_ci	0x06, 0x00, 0x02, 0x00, 0x48,
32162306a36Sopenharmony_ci	0x05, 0x05, 0x01, 0x20,
32262306a36Sopenharmony_ci	0x05, 0x05, 0x01, 0x21,
32362306a36Sopenharmony_ci	0, 0, 0
32462306a36Sopenharmony_ci};
32562306a36Sopenharmony_ci
32662306a36Sopenharmony_ci/* 06a5:d001 - nw801 - Panasonic
32762306a36Sopenharmony_ci *		P35u */
32862306a36Sopenharmony_cistatic const u8 nw801_start_1[] = {
32962306a36Sopenharmony_ci	0x05, 0x06, 0x01, 0x04,
33062306a36Sopenharmony_ci	0x00, 0x00, 0x40, 0x0e, 0x00, 0x00, 0xf9, 0x02, 0x11, 0x00, 0x0e,
33162306a36Sopenharmony_ci			  0x01, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
33262306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
33362306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
33462306a36Sopenharmony_ci			  0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
33562306a36Sopenharmony_ci			  0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
33662306a36Sopenharmony_ci			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
33762306a36Sopenharmony_ci			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
33862306a36Sopenharmony_ci	0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
33962306a36Sopenharmony_ci			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
34062306a36Sopenharmony_ci			  0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
34162306a36Sopenharmony_ci			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
34262306a36Sopenharmony_ci			  0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
34362306a36Sopenharmony_ci			  0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
34462306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
34562306a36Sopenharmony_ci			  0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
34662306a36Sopenharmony_ci	0x00, 0x80, 0x22, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x08, 0x00,
34762306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x69, 0xa8, 0x1f, 0x00,
34862306a36Sopenharmony_ci			  0x0d, 0x02, 0x07, 0x00, 0x01, 0x00, 0x19, 0x00,
34962306a36Sopenharmony_ci			  0xf2, 0x00, 0x18, 0x06, 0x10, 0x06, 0x10, 0x00,
35062306a36Sopenharmony_ci			  0x36, 0x00,
35162306a36Sopenharmony_ci	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
35262306a36Sopenharmony_ci			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
35362306a36Sopenharmony_ci			  0x40, 0x20,
35462306a36Sopenharmony_ci	0x03, 0x00, 0x03, 0x00, 0x00, 0x00,
35562306a36Sopenharmony_ci	0x05, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
35662306a36Sopenharmony_ci	0x06, 0x00, 0x02, 0x09, 0x99,
35762306a36Sopenharmony_ci	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35862306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35962306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00,
36062306a36Sopenharmony_ci	0x10, 0x00, 0x40, 0x22, 0x02, 0x80, 0x00, 0x1e, 0x00, 0x00, 0x00,
36162306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x0a, 0x15, 0x08, 0x08, 0x0a,
36262306a36Sopenharmony_ci			  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
36362306a36Sopenharmony_ci			  0x00, 0x01, 0x35, 0xfd, 0x07, 0x3d, 0x00, 0x00,
36462306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x14, 0x02,
36562306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
36662306a36Sopenharmony_ci			  0x40, 0x00, 0x00, 0x00, 0x40, 0x20, 0x10, 0x06,
36762306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06, 0xf7,
36862306a36Sopenharmony_ci	0x10, 0x40, 0x40, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80, 0x80,
36962306a36Sopenharmony_ci			  0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99, 0xa4,
37062306a36Sopenharmony_ci			  0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc, 0xcf,
37162306a36Sopenharmony_ci			  0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54, 0x64,
37262306a36Sopenharmony_ci			  0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2, 0xe2,
37362306a36Sopenharmony_ci			  0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
37462306a36Sopenharmony_ci			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
37562306a36Sopenharmony_ci			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
37662306a36Sopenharmony_ci	0x10, 0x80, 0x22, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
37762306a36Sopenharmony_ci			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00, 0x00,
37862306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x82, 0x02,
37962306a36Sopenharmony_ci			  0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40, 0x01,
38062306a36Sopenharmony_ci			  0xf0, 0x00,
38162306a36Sopenharmony_ci	0, 0, 0,
38262306a36Sopenharmony_ci};
38362306a36Sopenharmony_cistatic const u8 nw801_start_qvga[] = {
38462306a36Sopenharmony_ci	0x02, 0x00, 0x10, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
38562306a36Sopenharmony_ci			  0x00, 0x78, 0x18, 0x0b, 0x06, 0xa2, 0x86, 0x78,
38662306a36Sopenharmony_ci	0x02, 0x0f, 0x01, 0x6b,
38762306a36Sopenharmony_ci	0x10, 0x1a, 0x01, 0x15,
38862306a36Sopenharmony_ci	0x00, 0x00, 0x01, 0x1e,
38962306a36Sopenharmony_ci	0x10, 0x00, 0x01, 0x2f,
39062306a36Sopenharmony_ci	0x10, 0x8c, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
39162306a36Sopenharmony_ci	0x10, 0x11, 0x08, 0x29, 0x00, 0x18, 0x01, 0x1f, 0x00, 0xd2, 0x00,
39262306a36Sopenharmony_ci							/* AE window */
39362306a36Sopenharmony_ci	0, 0, 0,
39462306a36Sopenharmony_ci};
39562306a36Sopenharmony_cistatic const u8 nw801_start_vga[] = {
39662306a36Sopenharmony_ci	0x02, 0x00, 0x10, 0x78, 0xa0, 0x97, 0x78, 0xa0, 0x00, 0x00, 0x00,
39762306a36Sopenharmony_ci			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xf0,
39862306a36Sopenharmony_ci	0x02, 0x0f, 0x01, 0xd5,
39962306a36Sopenharmony_ci	0x10, 0x1a, 0x01, 0x15,
40062306a36Sopenharmony_ci	0x00, 0x00, 0x01, 0x0e,
40162306a36Sopenharmony_ci	0x10, 0x00, 0x01, 0x22,
40262306a36Sopenharmony_ci	0x10, 0x8c, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01,
40362306a36Sopenharmony_ci	0x10, 0x11, 0x08, 0x51, 0x00, 0x30, 0x02, 0x3d, 0x00, 0xa4, 0x01,
40462306a36Sopenharmony_ci	0, 0, 0,
40562306a36Sopenharmony_ci};
40662306a36Sopenharmony_cistatic const u8 nw801_start_2[] = {
40762306a36Sopenharmony_ci	0x10, 0x04, 0x01, 0x1a,
40862306a36Sopenharmony_ci	0x10, 0x19, 0x01, 0x09,				/* clock */
40962306a36Sopenharmony_ci	0x10, 0x24, 0x06, 0xc0, 0x00, 0x3f, 0x02, 0x00, 0x01,
41062306a36Sopenharmony_ci							 /* .. gain .. */
41162306a36Sopenharmony_ci	0x00, 0x03, 0x02, 0x92, 0x03,
41262306a36Sopenharmony_ci	0x00, 0x1d, 0x04, 0xf2, 0x00, 0x24, 0x07,
41362306a36Sopenharmony_ci	0x00, 0x7b, 0x01, 0xcf,
41462306a36Sopenharmony_ci	0x10, 0x94, 0x01, 0x07,
41562306a36Sopenharmony_ci	0x05, 0x05, 0x01, 0x01,
41662306a36Sopenharmony_ci	0x05, 0x04, 0x01, 0x01,
41762306a36Sopenharmony_ci	0x10, 0x0e, 0x01, 0x08,
41862306a36Sopenharmony_ci	0x10, 0x48, 0x11, 0x00, 0x37, 0x55, 0x6b, 0x7d, 0x8d, 0x9b, 0xa8,
41962306a36Sopenharmony_ci			  0xb4, 0xbf, 0xca, 0xd4, 0xdd, 0xe6, 0xef, 0xf0,
42062306a36Sopenharmony_ci			  0xf0,
42162306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x00,
42262306a36Sopenharmony_ci	0x10, 0x0f, 0x02, 0x0c, 0x0c,
42362306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x08,
42462306a36Sopenharmony_ci	0x10, 0x48, 0x11, 0x00, 0x37, 0x55, 0x6b, 0x7d, 0x8d, 0x9b, 0xa8,
42562306a36Sopenharmony_ci			  0xb4, 0xbf, 0xca, 0xd4, 0xdd, 0xe6, 0xef, 0xf0,
42662306a36Sopenharmony_ci			  0xf0,
42762306a36Sopenharmony_ci	0x10, 0x0b, 0x01, 0x0b,
42862306a36Sopenharmony_ci	0x10, 0x0d, 0x01, 0x0b,
42962306a36Sopenharmony_ci	0x10, 0x0c, 0x01, 0x1f,
43062306a36Sopenharmony_ci	0x05, 0x06, 0x01, 0x03,
43162306a36Sopenharmony_ci	0, 0, 0
43262306a36Sopenharmony_ci};
43362306a36Sopenharmony_ci
43462306a36Sopenharmony_ci/* nw802 (sharp IR3Y38M?) */
43562306a36Sopenharmony_cistatic const u8 nw802_start[] = {
43662306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0x04,
43762306a36Sopenharmony_ci	0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0xf9, 0x02, 0x10, 0x00, 0x4d,
43862306a36Sopenharmony_ci			  0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
43962306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
44062306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
44162306a36Sopenharmony_ci			  0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
44262306a36Sopenharmony_ci			  0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
44362306a36Sopenharmony_ci			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
44462306a36Sopenharmony_ci			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
44562306a36Sopenharmony_ci	0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
44662306a36Sopenharmony_ci			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
44762306a36Sopenharmony_ci			  0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
44862306a36Sopenharmony_ci			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
44962306a36Sopenharmony_ci			  0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
45062306a36Sopenharmony_ci			  0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
45162306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
45262306a36Sopenharmony_ci			  0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
45362306a36Sopenharmony_ci	0x00, 0x80, 0x1f, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x68, 0x00,
45462306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
45562306a36Sopenharmony_ci			  0x00, 0x0c, 0x02, 0x01, 0x00, 0x16, 0x00, 0x94,
45662306a36Sopenharmony_ci			  0x00, 0x10, 0x06, 0x08, 0x00, 0x18, 0x00,
45762306a36Sopenharmony_ci	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
45862306a36Sopenharmony_ci			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
45962306a36Sopenharmony_ci			  0x40, 0x20,
46062306a36Sopenharmony_ci	0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
46162306a36Sopenharmony_ci	0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
46262306a36Sopenharmony_ci	0x06, 0x00, 0x02, 0x09, 0x99,
46362306a36Sopenharmony_ci	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
46462306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
46562306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00,
46662306a36Sopenharmony_ci	0x10, 0x00, 0x40, 0xa1, 0x02, 0x80, 0x00, 0x1d, 0x00, 0x00, 0x00,
46762306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
46862306a36Sopenharmony_ci			  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
46962306a36Sopenharmony_ci			  0x00, 0x49, 0x13, 0xff, 0x01, 0xc0, 0x00, 0x14,
47062306a36Sopenharmony_ci			  0x02, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00,
47162306a36Sopenharmony_ci			  0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
47262306a36Sopenharmony_ci			  0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
47362306a36Sopenharmony_ci			  0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
47462306a36Sopenharmony_ci	0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
47562306a36Sopenharmony_ci			  0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
47662306a36Sopenharmony_ci			  0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
47762306a36Sopenharmony_ci			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
47862306a36Sopenharmony_ci			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
47962306a36Sopenharmony_ci			  0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
48062306a36Sopenharmony_ci			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
48162306a36Sopenharmony_ci			  0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
48262306a36Sopenharmony_ci	0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
48362306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x05, 0x82,
48462306a36Sopenharmony_ci			  0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
48562306a36Sopenharmony_ci			  0x01, 0xf0, 0x00,
48662306a36Sopenharmony_ci	0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
48762306a36Sopenharmony_ci			  0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
48862306a36Sopenharmony_ci			  0x40,
48962306a36Sopenharmony_ci	0x10, 0x1a, 0x01, 0x00,
49062306a36Sopenharmony_ci	0x10, 0x00, 0x01, 0xad,
49162306a36Sopenharmony_ci	0x00, 0x00, 0x01, 0x08,
49262306a36Sopenharmony_ci	0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
49362306a36Sopenharmony_ci	0x10, 0x1b, 0x02, 0x00, 0x00,
49462306a36Sopenharmony_ci	0x10, 0x11, 0x08, 0x51, 0x00, 0xf0, 0x00, 0x3d, 0x00, 0xb4, 0x00,
49562306a36Sopenharmony_ci	0x10, 0x1d, 0x08, 0x00, 0xa0, 0x00, 0xa0, 0x00, 0xa0, 0x00, 0xa0,
49662306a36Sopenharmony_ci	0x10, 0x0e, 0x01, 0x27,
49762306a36Sopenharmony_ci	0x10, 0x41, 0x11, 0x00, 0x0e, 0x35, 0x4f, 0x62, 0x71, 0x7f, 0x8b,
49862306a36Sopenharmony_ci			  0x96, 0xa0, 0xa9, 0xb2, 0xbb, 0xc3, 0xca, 0xd2,
49962306a36Sopenharmony_ci			  0xd8,
50062306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x00,
50162306a36Sopenharmony_ci	0x10, 0x0f, 0x02, 0x14, 0x14,
50262306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x0c,
50362306a36Sopenharmony_ci	0x10, 0x41, 0x11, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54, 0x64, 0x74,
50462306a36Sopenharmony_ci			  0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2, 0xe2, 0xf1,
50562306a36Sopenharmony_ci			  0xff,
50662306a36Sopenharmony_ci/*			  0x00, 0x0e, 0x35, 0x4f, 0x62, 0x71, 0x7f, 0x8b,
50762306a36Sopenharmony_ci *			  0x96, 0xa0, 0xa9, 0xb2, 0xbb, 0xc3, 0xca, 0xd2,
50862306a36Sopenharmony_ci *			  0xd8,	*/
50962306a36Sopenharmony_ci	0x10, 0x0b, 0x01, 0x10,
51062306a36Sopenharmony_ci	0x10, 0x0d, 0x01, 0x11,
51162306a36Sopenharmony_ci	0x10, 0x0c, 0x01, 0x1c,
51262306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0x03,
51362306a36Sopenharmony_ci	0x04, 0x04, 0x01, 0x00,
51462306a36Sopenharmony_ci	0, 0, 0
51562306a36Sopenharmony_ci};
51662306a36Sopenharmony_ci/* et31x110 - Trust 120 SpaceCam */
51762306a36Sopenharmony_cistatic const u8 spacecam_init[] = {
51862306a36Sopenharmony_ci	0x04, 0x05, 0x01, 0x01,
51962306a36Sopenharmony_ci	0x04, 0x04, 0x01, 0x01,
52062306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0x04,
52162306a36Sopenharmony_ci	0x04, 0x04, 0x03, 0x00, 0x00, 0x00,
52262306a36Sopenharmony_ci	0x05, 0x05, 0x01, 0x00,
52362306a36Sopenharmony_ci	0, 0, 0
52462306a36Sopenharmony_ci};
52562306a36Sopenharmony_cistatic const u8 spacecam_start[] = {
52662306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0x44,
52762306a36Sopenharmony_ci	0x00, 0x00, 0x40, 0x10, 0x43, 0x00, 0xb4, 0x01, 0x10, 0x00, 0x4f,
52862306a36Sopenharmony_ci			  0xef, 0x0e, 0x00, 0x74, 0x01, 0x01, 0x00, 0x19,
52962306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
53062306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x19, 0x00, 0x3e, 0x00, 0x24,
53162306a36Sopenharmony_ci			  0x03, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
53262306a36Sopenharmony_ci			  0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
53362306a36Sopenharmony_ci			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
53462306a36Sopenharmony_ci			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
53562306a36Sopenharmony_ci	0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
53662306a36Sopenharmony_ci			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
53762306a36Sopenharmony_ci			  0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
53862306a36Sopenharmony_ci			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
53962306a36Sopenharmony_ci			  0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
54062306a36Sopenharmony_ci			  0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
54162306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
54262306a36Sopenharmony_ci			  0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
54362306a36Sopenharmony_ci	0x00, 0x80, 0x1f, 0xa0, 0x48, 0xc3, 0x02, 0x88, 0x0c, 0x68, 0x00,
54462306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0xa8, 0x06, 0x00, 0x08,
54562306a36Sopenharmony_ci			  0x00, 0x32, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
54662306a36Sopenharmony_ci			  0x00, 0x4b, 0x00, 0x7c, 0x00, 0x80, 0x00,
54762306a36Sopenharmony_ci	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
54862306a36Sopenharmony_ci			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
54962306a36Sopenharmony_ci			  0x40, 0x20,
55062306a36Sopenharmony_ci	0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
55162306a36Sopenharmony_ci	0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
55262306a36Sopenharmony_ci	0x05, 0x00, 0x06, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
55362306a36Sopenharmony_ci	0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
55462306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
55562306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
55662306a36Sopenharmony_ci			  0x00, 0x00, 0x00,
55762306a36Sopenharmony_ci	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
55862306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
55962306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00,
56062306a36Sopenharmony_ci	0x10, 0x00, 0x40, 0x83, 0x02, 0x20, 0x00, 0x11, 0x00, 0x00, 0x00,
56162306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
56262306a36Sopenharmony_ci			  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
56362306a36Sopenharmony_ci			  0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
56462306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
56562306a36Sopenharmony_ci			  0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
56662306a36Sopenharmony_ci			  0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
56762306a36Sopenharmony_ci			  0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
56862306a36Sopenharmony_ci	0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
56962306a36Sopenharmony_ci			  0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
57062306a36Sopenharmony_ci			  0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
57162306a36Sopenharmony_ci			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
57262306a36Sopenharmony_ci			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
57362306a36Sopenharmony_ci			  0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
57462306a36Sopenharmony_ci			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
57562306a36Sopenharmony_ci			  0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
57662306a36Sopenharmony_ci	0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
57762306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x62,
57862306a36Sopenharmony_ci			  0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
57962306a36Sopenharmony_ci			  0x01, 0x60, 0x01, 0x00, 0x00,
58062306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0xc0,
58162306a36Sopenharmony_ci	0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
58262306a36Sopenharmony_ci	0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00,
58362306a36Sopenharmony_ci			  0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65,
58462306a36Sopenharmony_ci			  0x40,
58562306a36Sopenharmony_ci	0x00, 0x80, 0x01, 0xa0,
58662306a36Sopenharmony_ci	0x10, 0x1a, 0x01, 0x00,
58762306a36Sopenharmony_ci	0x00, 0x91, 0x02, 0x32, 0x01,
58862306a36Sopenharmony_ci	0x00, 0x03, 0x02, 0x08, 0x02,
58962306a36Sopenharmony_ci	0x10, 0x00, 0x01, 0x83,
59062306a36Sopenharmony_ci	0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01,
59162306a36Sopenharmony_ci			  0x20, 0x01, 0x60, 0x01,
59262306a36Sopenharmony_ci	0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
59362306a36Sopenharmony_ci	0x10, 0x0e, 0x01, 0x08,
59462306a36Sopenharmony_ci	0x10, 0x41, 0x11, 0x00, 0x64, 0x99, 0xc0, 0xe2, 0xf9, 0xf9, 0xf9,
59562306a36Sopenharmony_ci			  0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
59662306a36Sopenharmony_ci			  0xf9,
59762306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x00,
59862306a36Sopenharmony_ci	0x10, 0x0f, 0x02, 0x13, 0x13,
59962306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x06,
60062306a36Sopenharmony_ci	0x10, 0x41, 0x11, 0x00, 0x64, 0x99, 0xc0, 0xe2, 0xf9, 0xf9, 0xf9,
60162306a36Sopenharmony_ci			  0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
60262306a36Sopenharmony_ci			  0xf9,
60362306a36Sopenharmony_ci	0x10, 0x0b, 0x01, 0x08,
60462306a36Sopenharmony_ci	0x10, 0x0d, 0x01, 0x10,
60562306a36Sopenharmony_ci	0x10, 0x0c, 0x01, 0x1f,
60662306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0xc3,
60762306a36Sopenharmony_ci	0x04, 0x05, 0x01, 0x40,
60862306a36Sopenharmony_ci	0x04, 0x04, 0x01, 0x40,
60962306a36Sopenharmony_ci	0, 0, 0
61062306a36Sopenharmony_ci};
61162306a36Sopenharmony_ci/* et31x110 - pas106 - other Trust SpaceCam120 */
61262306a36Sopenharmony_cistatic const u8 spacecam2_start[] = {
61362306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0x44,
61462306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0x00,
61562306a36Sopenharmony_ci	0x00, 0x00, 0x40, 0x14, 0x83, 0x00, 0xba, 0x01, 0x10, 0x00, 0x4f,
61662306a36Sopenharmony_ci			  0xef, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0x19,
61762306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
61862306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x19, 0x00, 0x06, 0x00, 0xfc,
61962306a36Sopenharmony_ci			  0x01, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
62062306a36Sopenharmony_ci			  0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
62162306a36Sopenharmony_ci			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
62262306a36Sopenharmony_ci			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
62362306a36Sopenharmony_ci	0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
62462306a36Sopenharmony_ci			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
62562306a36Sopenharmony_ci			  0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
62662306a36Sopenharmony_ci			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
62762306a36Sopenharmony_ci			  0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
62862306a36Sopenharmony_ci			  0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
62962306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
63062306a36Sopenharmony_ci			  0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
63162306a36Sopenharmony_ci	0x00, 0x80, 0x1f, 0xb8, 0x48, 0x0f, 0x04, 0x88, 0x14, 0x68, 0x00,
63262306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0xa8, 0x01, 0x00, 0x03,
63362306a36Sopenharmony_ci			  0x00, 0x24, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
63462306a36Sopenharmony_ci			  0x00, 0x4b, 0x00, 0x76, 0x00, 0x86, 0x00,
63562306a36Sopenharmony_ci	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
63662306a36Sopenharmony_ci			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
63762306a36Sopenharmony_ci			  0x40, 0x20,
63862306a36Sopenharmony_ci	0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
63962306a36Sopenharmony_ci	0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x61, 0x00,
64062306a36Sopenharmony_ci	0x05, 0x00, 0x06, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
64162306a36Sopenharmony_ci	0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
64262306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
64362306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
64462306a36Sopenharmony_ci			  0x00, 0x00, 0x00,
64562306a36Sopenharmony_ci	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
64662306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
64762306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00,
64862306a36Sopenharmony_ci	0x10, 0x00, 0x40, 0x80, 0x02, 0x20, 0x00, 0x13, 0x00, 0x00, 0x00,
64962306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
65062306a36Sopenharmony_ci			  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
65162306a36Sopenharmony_ci			  0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
65262306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
65362306a36Sopenharmony_ci			  0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
65462306a36Sopenharmony_ci			  0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
65562306a36Sopenharmony_ci			  0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
65662306a36Sopenharmony_ci	0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
65762306a36Sopenharmony_ci			  0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
65862306a36Sopenharmony_ci			  0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
65962306a36Sopenharmony_ci			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
66062306a36Sopenharmony_ci			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
66162306a36Sopenharmony_ci			  0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
66262306a36Sopenharmony_ci			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
66362306a36Sopenharmony_ci			  0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
66462306a36Sopenharmony_ci	0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
66562306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x62,
66662306a36Sopenharmony_ci			  0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
66762306a36Sopenharmony_ci			  0x01, 0x60, 0x01, 0x00, 0x00,
66862306a36Sopenharmony_ci	0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
66962306a36Sopenharmony_ci	0x04, 0x04, 0x01, 0x40,
67062306a36Sopenharmony_ci	0x04, 0x04, 0x01, 0x00,
67162306a36Sopenharmony_ci	I2C0, 0x40, 0x0c, 0x02, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x05,
67262306a36Sopenharmony_ci			  0x00, 0x00, 0x05, 0x05,
67362306a36Sopenharmony_ci	I2C0, 0x40, 0x02, 0x11, 0x06,
67462306a36Sopenharmony_ci	I2C0, 0x40, 0x02, 0x14, 0x00,
67562306a36Sopenharmony_ci	I2C0, 0x40, 0x02, 0x13, 0x01,		/* i2c end */
67662306a36Sopenharmony_ci	0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00,
67762306a36Sopenharmony_ci			  0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65,
67862306a36Sopenharmony_ci			  0x40,
67962306a36Sopenharmony_ci	I2C0, 0x40, 0x02, 0x02, 0x0c,		/* pixel clock */
68062306a36Sopenharmony_ci	I2C0, 0x40, 0x02, 0x0f, 0x00,
68162306a36Sopenharmony_ci	I2C0, 0x40, 0x02, 0x13, 0x01,		/* i2c end */
68262306a36Sopenharmony_ci	0x10, 0x00, 0x01, 0x01,
68362306a36Sopenharmony_ci	0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01,
68462306a36Sopenharmony_ci			  0x20, 0x01, 0x60, 0x01,
68562306a36Sopenharmony_ci	I2C0, 0x40, 0x02, 0x05, 0x0f,		/* exposure */
68662306a36Sopenharmony_ci	I2C0, 0x40, 0x02, 0x13, 0x01,		/* i2c end */
68762306a36Sopenharmony_ci	I2C0, 0x40, 0x07, 0x09, 0x0b, 0x0f, 0x05, 0x05, 0x0f, 0x00,
68862306a36Sopenharmony_ci						/* gains */
68962306a36Sopenharmony_ci	I2C0, 0x40, 0x03, 0x12, 0x04, 0x01,
69062306a36Sopenharmony_ci	0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
69162306a36Sopenharmony_ci	0x10, 0x0e, 0x01, 0x08,
69262306a36Sopenharmony_ci	0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7,
69362306a36Sopenharmony_ci			  0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7,
69462306a36Sopenharmony_ci			  0xf9,
69562306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x00,
69662306a36Sopenharmony_ci	0x10, 0x0f, 0x02, 0x13, 0x13,
69762306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x06,
69862306a36Sopenharmony_ci	0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7,
69962306a36Sopenharmony_ci			  0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7,
70062306a36Sopenharmony_ci			  0xf9,
70162306a36Sopenharmony_ci	0x10, 0x0b, 0x01, 0x11,
70262306a36Sopenharmony_ci	0x10, 0x0d, 0x01, 0x10,
70362306a36Sopenharmony_ci	0x10, 0x0c, 0x01, 0x14,
70462306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0x03,
70562306a36Sopenharmony_ci	0x04, 0x05, 0x01, 0x61,
70662306a36Sopenharmony_ci	0x04, 0x04, 0x01, 0x00,
70762306a36Sopenharmony_ci	0, 0, 0
70862306a36Sopenharmony_ci};
70962306a36Sopenharmony_ci
71062306a36Sopenharmony_ci/* nw802 - Conceptronic Video Pro */
71162306a36Sopenharmony_cistatic const u8 cvideopro_start[] = {
71262306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0x04,
71362306a36Sopenharmony_ci	0x00, 0x00, 0x40, 0x54, 0x96, 0x98, 0xf9, 0x02, 0x18, 0x00, 0x4c,
71462306a36Sopenharmony_ci			  0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
71562306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
71662306a36Sopenharmony_ci			  0x00, 0x0b, 0x00, 0x1b, 0x00, 0xc8, 0x00, 0xf4,
71762306a36Sopenharmony_ci			  0x05, 0xb4, 0x00, 0xcc, 0x00, 0x01, 0x00, 0x01,
71862306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
71962306a36Sopenharmony_ci			  0x00, 0xa2, 0x00, 0xc6, 0x00, 0x60, 0x00, 0xc6,
72062306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
72162306a36Sopenharmony_ci	0x00, 0x40, 0x40, 0x00, 0xae, 0x00, 0xd2, 0x00, 0xae, 0x00, 0xd2,
72262306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
72362306a36Sopenharmony_ci			  0x00, 0xa8, 0x00, 0xc0, 0x00, 0x66, 0x00, 0xc0,
72462306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
72562306a36Sopenharmony_ci			  0x00, 0x0a, 0x00, 0x54, 0x00, 0x0a, 0x00, 0x54,
72662306a36Sopenharmony_ci			  0x00, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
72762306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6,
72862306a36Sopenharmony_ci			  0x00, 0x5d, 0x00, 0xc7, 0x00, 0x7e, 0x00, 0x30,
72962306a36Sopenharmony_ci	0x00, 0x80, 0x1f, 0x98, 0x43, 0x3f, 0x0d, 0x88, 0x20, 0x80, 0x3f,
73062306a36Sopenharmony_ci			  0x47, 0xaf, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
73162306a36Sopenharmony_ci			  0x00, 0x0c, 0x02, 0x0c, 0x00, 0x1c, 0x00, 0x94,
73262306a36Sopenharmony_ci			  0x00, 0x10, 0x06, 0x24, 0x00, 0x4a, 0x00,
73362306a36Sopenharmony_ci	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
73462306a36Sopenharmony_ci			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
73562306a36Sopenharmony_ci			  0x40, 0x20,
73662306a36Sopenharmony_ci	0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
73762306a36Sopenharmony_ci	0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00,
73862306a36Sopenharmony_ci	0x06, 0x00, 0x02, 0x09, 0x99,
73962306a36Sopenharmony_ci	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
74062306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
74162306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00,
74262306a36Sopenharmony_ci	0x10, 0x00, 0x40, 0xa0, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
74362306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
74462306a36Sopenharmony_ci			  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
74562306a36Sopenharmony_ci			  0x00, 0x49, 0x13, 0x00, 0x00, 0xe0, 0x00, 0x0c,
74662306a36Sopenharmony_ci			  0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
74762306a36Sopenharmony_ci			  0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
74862306a36Sopenharmony_ci			  0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
74962306a36Sopenharmony_ci			  0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
75062306a36Sopenharmony_ci	0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
75162306a36Sopenharmony_ci			  0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
75262306a36Sopenharmony_ci			  0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
75362306a36Sopenharmony_ci			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
75462306a36Sopenharmony_ci			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
75562306a36Sopenharmony_ci			  0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
75662306a36Sopenharmony_ci			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
75762306a36Sopenharmony_ci			  0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
75862306a36Sopenharmony_ci	0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
75962306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x05, 0x82,
76062306a36Sopenharmony_ci			  0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
76162306a36Sopenharmony_ci			  0x01, 0xf0, 0x00,
76262306a36Sopenharmony_ci	0x02, 0x00, 0x11, 0x3c, 0x50, 0x8c, 0x3c, 0x50, 0x00, 0x00, 0x00,
76362306a36Sopenharmony_ci			  0x00, 0x78, 0x3f, 0x3f, 0x06, 0xf2, 0x8f, 0xf0,
76462306a36Sopenharmony_ci			  0x40,
76562306a36Sopenharmony_ci	0x10, 0x1a, 0x01, 0x03,
76662306a36Sopenharmony_ci	0x10, 0x00, 0x01, 0xac,
76762306a36Sopenharmony_ci	0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
76862306a36Sopenharmony_ci	0x10, 0x1b, 0x02, 0x3b, 0x01,
76962306a36Sopenharmony_ci	0x10, 0x11, 0x08, 0x61, 0x00, 0xe0, 0x00, 0x49, 0x00, 0xa8, 0x00,
77062306a36Sopenharmony_ci	0x10, 0x1f, 0x06, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
77162306a36Sopenharmony_ci	0x10, 0x1d, 0x02, 0x40, 0x06,
77262306a36Sopenharmony_ci	0x10, 0x0e, 0x01, 0x08,
77362306a36Sopenharmony_ci	0x10, 0x41, 0x11, 0x00, 0x0f, 0x46, 0x62, 0x76, 0x86, 0x94, 0xa0,
77462306a36Sopenharmony_ci			  0xab, 0xb6, 0xbf, 0xc8, 0xcf, 0xd7, 0xdc, 0xdc,
77562306a36Sopenharmony_ci			  0xdc,
77662306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x00,
77762306a36Sopenharmony_ci	0x10, 0x0f, 0x02, 0x12, 0x12,
77862306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x0c,
77962306a36Sopenharmony_ci	0x10, 0x41, 0x11, 0x00, 0x0f, 0x46, 0x62, 0x76, 0x86, 0x94, 0xa0,
78062306a36Sopenharmony_ci			  0xab, 0xb6, 0xbf, 0xc8, 0xcf, 0xd7, 0xdc, 0xdc,
78162306a36Sopenharmony_ci			  0xdc,
78262306a36Sopenharmony_ci	0x10, 0x0b, 0x01, 0x09,
78362306a36Sopenharmony_ci	0x10, 0x0d, 0x01, 0x10,
78462306a36Sopenharmony_ci	0x10, 0x0c, 0x01, 0x2f,
78562306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0x03,
78662306a36Sopenharmony_ci	0x04, 0x04, 0x01, 0x00,
78762306a36Sopenharmony_ci	0, 0, 0
78862306a36Sopenharmony_ci};
78962306a36Sopenharmony_ci
79062306a36Sopenharmony_ci/* nw802 - D-link dru-350c cam */
79162306a36Sopenharmony_cistatic const u8 dlink_start[] = {
79262306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0x04,
79362306a36Sopenharmony_ci	0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x92, 0x03, 0x10, 0x00, 0x4d,
79462306a36Sopenharmony_ci			  0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
79562306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
79662306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
79762306a36Sopenharmony_ci			  0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
79862306a36Sopenharmony_ci			  0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
79962306a36Sopenharmony_ci			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
80062306a36Sopenharmony_ci			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
80162306a36Sopenharmony_ci	0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
80262306a36Sopenharmony_ci			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
80362306a36Sopenharmony_ci			  0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
80462306a36Sopenharmony_ci			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
80562306a36Sopenharmony_ci			  0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
80662306a36Sopenharmony_ci			  0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
80762306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
80862306a36Sopenharmony_ci			  0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
80962306a36Sopenharmony_ci	0x00, 0x80, 0x1f, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x68, 0x00,
81062306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
81162306a36Sopenharmony_ci			  0x00, 0x0c, 0x02, 0x01, 0x00, 0x16, 0x00, 0x94,
81262306a36Sopenharmony_ci			  0x00, 0x10, 0x06, 0x10, 0x00, 0x36, 0x00,
81362306a36Sopenharmony_ci	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
81462306a36Sopenharmony_ci			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
81562306a36Sopenharmony_ci			  0x40, 0x20,
81662306a36Sopenharmony_ci	0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
81762306a36Sopenharmony_ci	0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
81862306a36Sopenharmony_ci	0x06, 0x00, 0x02, 0x09, 0x99,
81962306a36Sopenharmony_ci	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
82062306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
82162306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00,
82262306a36Sopenharmony_ci	0x10, 0x00, 0x40, 0xa1, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
82362306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
82462306a36Sopenharmony_ci			  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
82562306a36Sopenharmony_ci			  0x00, 0x49, 0x13, 0x00, 0x00, 0xc0, 0x00, 0x14,
82662306a36Sopenharmony_ci			  0x02, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00,
82762306a36Sopenharmony_ci			  0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
82862306a36Sopenharmony_ci			  0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
82962306a36Sopenharmony_ci			  0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
83062306a36Sopenharmony_ci	0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
83162306a36Sopenharmony_ci			  0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
83262306a36Sopenharmony_ci			  0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
83362306a36Sopenharmony_ci			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
83462306a36Sopenharmony_ci			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
83562306a36Sopenharmony_ci			  0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
83662306a36Sopenharmony_ci			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
83762306a36Sopenharmony_ci			  0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
83862306a36Sopenharmony_ci	0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
83962306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x82,
84062306a36Sopenharmony_ci			  0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
84162306a36Sopenharmony_ci			  0x01, 0xf0, 0x00,
84262306a36Sopenharmony_ci	0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
84362306a36Sopenharmony_ci			  0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
84462306a36Sopenharmony_ci			  0x40,
84562306a36Sopenharmony_ci	0x10, 0x1a, 0x01, 0x00,
84662306a36Sopenharmony_ci	0x10, 0x00, 0x01, 0xad,
84762306a36Sopenharmony_ci	0x00, 0x00, 0x01, 0x08,
84862306a36Sopenharmony_ci	0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
84962306a36Sopenharmony_ci	0x10, 0x1b, 0x02, 0x00, 0x00,
85062306a36Sopenharmony_ci	0x10, 0x11, 0x08, 0x51, 0x00, 0xf0, 0x00, 0x3d, 0x00, 0xb4, 0x00,
85162306a36Sopenharmony_ci	0x10, 0x1d, 0x08, 0x40, 0x06, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
85262306a36Sopenharmony_ci	0x10, 0x0e, 0x01, 0x20,
85362306a36Sopenharmony_ci	0x10, 0x41, 0x11, 0x00, 0x07, 0x1e, 0x38, 0x4d, 0x60, 0x70, 0x7f,
85462306a36Sopenharmony_ci			  0x8e, 0x9b, 0xa8, 0xb4, 0xbf, 0xca, 0xd5, 0xdf,
85562306a36Sopenharmony_ci			  0xea,
85662306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x00,
85762306a36Sopenharmony_ci	0x10, 0x0f, 0x02, 0x11, 0x11,
85862306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x10,
85962306a36Sopenharmony_ci	0x10, 0x41, 0x11, 0x00, 0x07, 0x1e, 0x38, 0x4d, 0x60, 0x70, 0x7f,
86062306a36Sopenharmony_ci			  0x8e, 0x9b, 0xa8, 0xb4, 0xbf, 0xca, 0xd5, 0xdf,
86162306a36Sopenharmony_ci			  0xea,
86262306a36Sopenharmony_ci	0x10, 0x0b, 0x01, 0x19,
86362306a36Sopenharmony_ci	0x10, 0x0d, 0x01, 0x10,
86462306a36Sopenharmony_ci	0x10, 0x0c, 0x01, 0x1e,
86562306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0x03,
86662306a36Sopenharmony_ci	0x04, 0x04, 0x01, 0x00,
86762306a36Sopenharmony_ci	0, 0, 0
86862306a36Sopenharmony_ci};
86962306a36Sopenharmony_ci
87062306a36Sopenharmony_ci/* 06a5:d001 - nw801 - Sony
87162306a36Sopenharmony_ci *		Plustek Opticam 500U or ProLink DS3303u (Hitachi HD49322BF) */
87262306a36Sopenharmony_ci/*fixme: 320x240 only*/
87362306a36Sopenharmony_cistatic const u8 ds3303_start[] = {
87462306a36Sopenharmony_ci	0x05, 0x06, 0x01, 0x04,
87562306a36Sopenharmony_ci	0x00, 0x00, 0x40, 0x16, 0x00, 0x00, 0xf9, 0x02, 0x11, 0x00, 0x0e,
87662306a36Sopenharmony_ci			  0x01, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
87762306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
87862306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
87962306a36Sopenharmony_ci			  0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
88062306a36Sopenharmony_ci			  0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
88162306a36Sopenharmony_ci			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
88262306a36Sopenharmony_ci			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
88362306a36Sopenharmony_ci	0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
88462306a36Sopenharmony_ci			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
88562306a36Sopenharmony_ci			  0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
88662306a36Sopenharmony_ci			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
88762306a36Sopenharmony_ci			  0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
88862306a36Sopenharmony_ci			  0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
88962306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
89062306a36Sopenharmony_ci			  0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
89162306a36Sopenharmony_ci	0x00, 0x80, 0x22, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x08, 0x00,
89262306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0xa9, 0xa8, 0x1f, 0x00,
89362306a36Sopenharmony_ci			  0x0d, 0x02, 0x07, 0x00, 0x01, 0x00, 0x19, 0x00,
89462306a36Sopenharmony_ci			  0xf2, 0x00, 0x18, 0x06, 0x10, 0x06, 0x10, 0x00,
89562306a36Sopenharmony_ci			  0x36, 0x00,
89662306a36Sopenharmony_ci	0x02, 0x00, 0x12, 0x03, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
89762306a36Sopenharmony_ci			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0x50,
89862306a36Sopenharmony_ci			  0x40, 0x20,
89962306a36Sopenharmony_ci	0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
90062306a36Sopenharmony_ci	0x05, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00,
90162306a36Sopenharmony_ci	0x06, 0x00, 0x02, 0x09, 0x99,
90262306a36Sopenharmony_ci	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
90362306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
90462306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00,
90562306a36Sopenharmony_ci	0x10, 0x00, 0x40, 0x2f, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
90662306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x10, 0x1f, 0x10, 0x08, 0x0a,
90762306a36Sopenharmony_ci			  0x0a, 0x51, 0x00, 0xf1, 0x00, 0x3c, 0x00, 0xb4,
90862306a36Sopenharmony_ci			  0x00, 0x01, 0x15, 0xfd, 0x07, 0x3d, 0x00, 0x00,
90962306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x8c, 0x04, 0x01, 0x20,
91062306a36Sopenharmony_ci			  0x02, 0x00, 0x03, 0x00, 0x20, 0x00, 0x00, 0x00,
91162306a36Sopenharmony_ci			  0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08, 0x03,
91262306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06, 0xf7,
91362306a36Sopenharmony_ci	0x10, 0x40, 0x40, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80, 0x80,
91462306a36Sopenharmony_ci			  0x00, 0x2d, 0x46, 0x58, 0x67, 0x74, 0x7f, 0x88,
91562306a36Sopenharmony_ci			  0x94, 0x9d, 0xa6, 0xae, 0xb5, 0xbd, 0xc4, 0xcb,
91662306a36Sopenharmony_ci			  0xd1, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54, 0x64,
91762306a36Sopenharmony_ci			  0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2, 0xe2,
91862306a36Sopenharmony_ci			  0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
91962306a36Sopenharmony_ci			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
92062306a36Sopenharmony_ci			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
92162306a36Sopenharmony_ci	0x10, 0x80, 0x22, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
92262306a36Sopenharmony_ci			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x3f, 0x01,
92362306a36Sopenharmony_ci			  0x00, 0x00, 0xef, 0x00, 0x02, 0x0a, 0x82, 0x02,
92462306a36Sopenharmony_ci			  0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40, 0x01,
92562306a36Sopenharmony_ci			  0xf0, 0x00,
92662306a36Sopenharmony_ci
92762306a36Sopenharmony_ci	0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
92862306a36Sopenharmony_ci			  0x00, 0x78, 0x3f, 0x3f, 0x00, 0xf2, 0x8f, 0x81,
92962306a36Sopenharmony_ci			  0x40,
93062306a36Sopenharmony_ci	0x10, 0x1a, 0x01, 0x15,
93162306a36Sopenharmony_ci	0x10, 0x00, 0x01, 0x2f,
93262306a36Sopenharmony_ci	0x10, 0x8c, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
93362306a36Sopenharmony_ci	0x10, 0x1b, 0x02, 0x00, 0x00,
93462306a36Sopenharmony_ci	0x10, 0x11, 0x08, 0x61, 0x00, 0xe0, 0x00, 0x49, 0x00, 0xa8, 0x00,
93562306a36Sopenharmony_ci	0x10, 0x26, 0x06, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
93662306a36Sopenharmony_ci	0x10, 0x24, 0x02, 0x40, 0x06,
93762306a36Sopenharmony_ci	0x10, 0x0e, 0x01, 0x08,
93862306a36Sopenharmony_ci	0x10, 0x48, 0x11, 0x00, 0x15, 0x40, 0x67, 0x84, 0x9d, 0xb2, 0xc6,
93962306a36Sopenharmony_ci			  0xd6, 0xe7, 0xf6, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
94062306a36Sopenharmony_ci			  0xf9,
94162306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x00,
94262306a36Sopenharmony_ci	0x10, 0x0f, 0x02, 0x16, 0x16,
94362306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x0c,
94462306a36Sopenharmony_ci	0x10, 0x48, 0x11, 0x00, 0x15, 0x40, 0x67, 0x84, 0x9d, 0xb2, 0xc6,
94562306a36Sopenharmony_ci			  0xd6, 0xe7, 0xf6, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
94662306a36Sopenharmony_ci			  0xf9,
94762306a36Sopenharmony_ci	0x10, 0x0b, 0x01, 0x26,
94862306a36Sopenharmony_ci	0x10, 0x0d, 0x01, 0x10,
94962306a36Sopenharmony_ci	0x10, 0x0c, 0x01, 0x1c,
95062306a36Sopenharmony_ci	0x05, 0x06, 0x01, 0x03,
95162306a36Sopenharmony_ci	0x05, 0x04, 0x01, 0x00,
95262306a36Sopenharmony_ci	0, 0, 0
95362306a36Sopenharmony_ci};
95462306a36Sopenharmony_ci
95562306a36Sopenharmony_ci/* 06a5:d001 - nw802 - Panasonic
95662306a36Sopenharmony_ci *		GP-KR651US (Philips TDA8786) */
95762306a36Sopenharmony_cistatic const u8 kr651_start_1[] = {
95862306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0x04,
95962306a36Sopenharmony_ci	0x00, 0x00, 0x40, 0x44, 0x96, 0x98, 0xf9, 0x02, 0x18, 0x00, 0x48,
96062306a36Sopenharmony_ci			  0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
96162306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
96262306a36Sopenharmony_ci			  0x00, 0x0b, 0x00, 0x1b, 0x00, 0xc8, 0x00, 0xf4,
96362306a36Sopenharmony_ci			  0x05, 0xb4, 0x00, 0xcc, 0x00, 0x01, 0x00, 0x01,
96462306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
96562306a36Sopenharmony_ci			  0x00, 0xa2, 0x00, 0xc6, 0x00, 0x60, 0x00, 0xc6,
96662306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
96762306a36Sopenharmony_ci	0x00, 0x40, 0x40, 0x00, 0xae, 0x00, 0xd2, 0x00, 0xae, 0x00, 0xd2,
96862306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
96962306a36Sopenharmony_ci			  0x00, 0xa8, 0x00, 0xc0, 0x00, 0x66, 0x00, 0xc0,
97062306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
97162306a36Sopenharmony_ci			  0x00, 0x0a, 0x00, 0x54, 0x00, 0x0a, 0x00, 0x54,
97262306a36Sopenharmony_ci			  0x00, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
97362306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6,
97462306a36Sopenharmony_ci			  0x00, 0x5d, 0x00, 0xc7, 0x00, 0x7e, 0x00, 0x30,
97562306a36Sopenharmony_ci	0x00, 0x80, 0x1f, 0x18, 0x43, 0x3f, 0x0d, 0x88, 0x20, 0x80, 0x3f,
97662306a36Sopenharmony_ci			  0x47, 0xaf, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
97762306a36Sopenharmony_ci			  0x00, 0x0c, 0x02, 0x0c, 0x00, 0x1c, 0x00, 0x94,
97862306a36Sopenharmony_ci			  0x00, 0x10, 0x06, 0x24, 0x00, 0x4a, 0x00,
97962306a36Sopenharmony_ci	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
98062306a36Sopenharmony_ci			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
98162306a36Sopenharmony_ci			  0x40, 0x20,
98262306a36Sopenharmony_ci	0x03, 0x00, 0x03, 0x02, 0x00, 0x00,
98362306a36Sopenharmony_ci	0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
98462306a36Sopenharmony_ci	0x06, 0x00, 0x02, 0x09, 0x99,
98562306a36Sopenharmony_ci	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
98662306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
98762306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00,
98862306a36Sopenharmony_ci	0x10, 0x00, 0x40, 0xa0, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
98962306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
99062306a36Sopenharmony_ci			  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
99162306a36Sopenharmony_ci			  0x00, 0x49, 0x13, 0x00, 0x00, 0xe0, 0x00, 0x0c,
99262306a36Sopenharmony_ci			  0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
99362306a36Sopenharmony_ci			  0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
99462306a36Sopenharmony_ci			  0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
99562306a36Sopenharmony_ci			  0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
99662306a36Sopenharmony_ci	0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
99762306a36Sopenharmony_ci			  0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
99862306a36Sopenharmony_ci			  0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
99962306a36Sopenharmony_ci			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
100062306a36Sopenharmony_ci			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
100162306a36Sopenharmony_ci			  0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
100262306a36Sopenharmony_ci			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
100362306a36Sopenharmony_ci			  0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
100462306a36Sopenharmony_ci	0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
100562306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x05, 0x82,
100662306a36Sopenharmony_ci			  0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
100762306a36Sopenharmony_ci			  0x01, 0xf0, 0x00,
100862306a36Sopenharmony_ci	0, 0, 0
100962306a36Sopenharmony_ci};
101062306a36Sopenharmony_cistatic const u8 kr651_start_qvga[] = {
101162306a36Sopenharmony_ci	0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
101262306a36Sopenharmony_ci			  0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
101362306a36Sopenharmony_ci			  0x40,
101462306a36Sopenharmony_ci	0x10, 0x1a, 0x01, 0x03,
101562306a36Sopenharmony_ci	0x10, 0x00, 0x01, 0xac,
101662306a36Sopenharmony_ci	0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
101762306a36Sopenharmony_ci	0x10, 0x1b, 0x02, 0x00, 0x00,
101862306a36Sopenharmony_ci	0x10, 0x11, 0x08, 0x29, 0x00, 0x18, 0x01, 0x1f, 0x00, 0xd2, 0x00,
101962306a36Sopenharmony_ci	0x10, 0x1d, 0x06, 0xe0, 0x00, 0x0c, 0x00, 0x52, 0x00,
102062306a36Sopenharmony_ci	0x10, 0x1d, 0x02, 0x28, 0x01,
102162306a36Sopenharmony_ci	0, 0, 0
102262306a36Sopenharmony_ci};
102362306a36Sopenharmony_cistatic const u8 kr651_start_vga[] = {
102462306a36Sopenharmony_ci	0x02, 0x00, 0x11, 0x78, 0xa0, 0x8c, 0x78, 0xa0, 0x00, 0x00, 0x00,
102562306a36Sopenharmony_ci			  0x00, 0xf0, 0x30, 0x03, 0x01, 0x82, 0x82, 0x98,
102662306a36Sopenharmony_ci			  0x80,
102762306a36Sopenharmony_ci	0x10, 0x1a, 0x01, 0x03,
102862306a36Sopenharmony_ci	0x10, 0x00, 0x01, 0xa0,
102962306a36Sopenharmony_ci	0x10, 0x85, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01,
103062306a36Sopenharmony_ci	0x10, 0x1b, 0x02, 0x00, 0x00,
103162306a36Sopenharmony_ci	0x10, 0x11, 0x08, 0x51, 0x00, 0x30, 0x02, 0x3d, 0x00, 0xa4, 0x01,
103262306a36Sopenharmony_ci	0x10, 0x1d, 0x06, 0xe0, 0x00, 0x0c, 0x00, 0x52, 0x00,
103362306a36Sopenharmony_ci	0x10, 0x1d, 0x02, 0x68, 0x00,
103462306a36Sopenharmony_ci};
103562306a36Sopenharmony_cistatic const u8 kr651_start_2[] = {
103662306a36Sopenharmony_ci	0x10, 0x0e, 0x01, 0x08,
103762306a36Sopenharmony_ci	0x10, 0x41, 0x11, 0x00, 0x11, 0x3c, 0x5c, 0x74, 0x88, 0x99, 0xa8,
103862306a36Sopenharmony_ci			  0xb7, 0xc4, 0xd0, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
103962306a36Sopenharmony_ci			  0xdc,
104062306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x00,
104162306a36Sopenharmony_ci	0x10, 0x0f, 0x02, 0x0c, 0x0c,
104262306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x0c,
104362306a36Sopenharmony_ci	0x10, 0x41, 0x11, 0x00, 0x11, 0x3c, 0x5c, 0x74, 0x88, 0x99, 0xa8,
104462306a36Sopenharmony_ci			  0xb7, 0xc4, 0xd0, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
104562306a36Sopenharmony_ci			  0xdc,
104662306a36Sopenharmony_ci	0x10, 0x0b, 0x01, 0x10,
104762306a36Sopenharmony_ci	0x10, 0x0d, 0x01, 0x10,
104862306a36Sopenharmony_ci	0x10, 0x0c, 0x01, 0x2d,
104962306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0x03,
105062306a36Sopenharmony_ci	0x04, 0x04, 0x01, 0x00,
105162306a36Sopenharmony_ci	0, 0, 0
105262306a36Sopenharmony_ci};
105362306a36Sopenharmony_ci
105462306a36Sopenharmony_ci/* nw802 - iRez Kritter cam */
105562306a36Sopenharmony_cistatic const u8 kritter_start[] = {
105662306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0x06,
105762306a36Sopenharmony_ci	0x00, 0x00, 0x40, 0x44, 0x96, 0x98, 0x94, 0x03, 0x18, 0x00, 0x48,
105862306a36Sopenharmony_ci			  0x0f, 0x1e, 0x00, 0x0c, 0x02, 0x01, 0x00, 0x19,
105962306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
106062306a36Sopenharmony_ci			  0x00, 0x0b, 0x00, 0x1b, 0x00, 0x0a, 0x01, 0x28,
106162306a36Sopenharmony_ci			  0x07, 0xb4, 0x00, 0xcc, 0x00, 0x01, 0x00, 0x01,
106262306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
106362306a36Sopenharmony_ci			  0x00, 0xa2, 0x00, 0xc6, 0x00, 0x60, 0x00, 0xc6,
106462306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
106562306a36Sopenharmony_ci	0x00, 0x40, 0x40, 0x00, 0xae, 0x00, 0xd2, 0x00, 0xae, 0x00, 0xd2,
106662306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
106762306a36Sopenharmony_ci			  0x00, 0xa8, 0x00, 0xc0, 0x00, 0x66, 0x00, 0xc0,
106862306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
106962306a36Sopenharmony_ci			  0x00, 0x0a, 0x00, 0x54, 0x00, 0x0a, 0x00, 0x54,
107062306a36Sopenharmony_ci			  0x00, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
107162306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6,
107262306a36Sopenharmony_ci			  0x00, 0x5d, 0x00, 0x0e, 0x00, 0x7e, 0x00, 0x30,
107362306a36Sopenharmony_ci	0x00, 0x80, 0x1f, 0x18, 0x43, 0x3f, 0x0d, 0x88, 0x20, 0x80, 0x3f,
107462306a36Sopenharmony_ci			  0x47, 0xaf, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
107562306a36Sopenharmony_ci			  0x00, 0x0b, 0x02, 0x0c, 0x00, 0x1c, 0x00, 0x94,
107662306a36Sopenharmony_ci			  0x00, 0x10, 0x06, 0x24, 0x00, 0x4a, 0x00,
107762306a36Sopenharmony_ci	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
107862306a36Sopenharmony_ci			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
107962306a36Sopenharmony_ci			  0x40, 0x20,
108062306a36Sopenharmony_ci	0x03, 0x00, 0x03, 0x02, 0x00, 0x00,
108162306a36Sopenharmony_ci	0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00,
108262306a36Sopenharmony_ci	0x06, 0x00, 0x02, 0x09, 0x99,
108362306a36Sopenharmony_ci	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
108462306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
108562306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00,
108662306a36Sopenharmony_ci	0x10, 0x00, 0x40, 0xa0, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
108762306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
108862306a36Sopenharmony_ci			  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
108962306a36Sopenharmony_ci			  0x00, 0x49, 0x13, 0x00, 0x00, 0xe0, 0x00, 0x0c,
109062306a36Sopenharmony_ci			  0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
109162306a36Sopenharmony_ci			  0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
109262306a36Sopenharmony_ci			  0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
109362306a36Sopenharmony_ci			  0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
109462306a36Sopenharmony_ci	0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
109562306a36Sopenharmony_ci			  0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
109662306a36Sopenharmony_ci			  0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
109762306a36Sopenharmony_ci			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
109862306a36Sopenharmony_ci			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
109962306a36Sopenharmony_ci			  0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
110062306a36Sopenharmony_ci			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
110162306a36Sopenharmony_ci			  0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
110262306a36Sopenharmony_ci	0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
110362306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x82,
110462306a36Sopenharmony_ci			  0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
110562306a36Sopenharmony_ci			  0x01, 0xf0, 0x00,
110662306a36Sopenharmony_ci	0x02, 0x00, 0x11, 0x3c, 0x50, 0x8c, 0x3c, 0x50, 0x00, 0x00, 0x00,
110762306a36Sopenharmony_ci			  0x00, 0x78, 0x3f, 0x3f, 0x06, 0xf2, 0x8f, 0xf0,
110862306a36Sopenharmony_ci			  0x40,
110962306a36Sopenharmony_ci	0x10, 0x1a, 0x01, 0x03,
111062306a36Sopenharmony_ci	0x10, 0x00, 0x01, 0xaf,
111162306a36Sopenharmony_ci	0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
111262306a36Sopenharmony_ci	0x10, 0x1b, 0x02, 0x3b, 0x01,
111362306a36Sopenharmony_ci	0x10, 0x11, 0x08, 0x61, 0x00, 0xe0, 0x00, 0x49, 0x00, 0xa8, 0x00,
111462306a36Sopenharmony_ci	0x10, 0x1d, 0x06, 0xe0, 0x00, 0x0c, 0x00, 0x52, 0x00,
111562306a36Sopenharmony_ci	0x10, 0x1d, 0x02, 0x00, 0x00,
111662306a36Sopenharmony_ci	0x10, 0x0e, 0x01, 0x08,
111762306a36Sopenharmony_ci	0x10, 0x41, 0x11, 0x00, 0x0d, 0x36, 0x4e, 0x60, 0x6f, 0x7b, 0x86,
111862306a36Sopenharmony_ci			  0x90, 0x98, 0xa1, 0xa9, 0xb1, 0xb7, 0xbe, 0xc4,
111962306a36Sopenharmony_ci			  0xcb,
112062306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x00,
112162306a36Sopenharmony_ci	0x10, 0x0f, 0x02, 0x0d, 0x0d,
112262306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x02,
112362306a36Sopenharmony_ci	0x10, 0x41, 0x11, 0x00, 0x0d, 0x36, 0x4e, 0x60, 0x6f, 0x7b, 0x86,
112462306a36Sopenharmony_ci			  0x90, 0x98, 0xa1, 0xa9, 0xb1, 0xb7, 0xbe, 0xc4,
112562306a36Sopenharmony_ci			  0xcb,
112662306a36Sopenharmony_ci	0x10, 0x0b, 0x01, 0x17,
112762306a36Sopenharmony_ci	0x10, 0x0d, 0x01, 0x10,
112862306a36Sopenharmony_ci	0x10, 0x0c, 0x01, 0x1e,
112962306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0x03,
113062306a36Sopenharmony_ci	0x04, 0x04, 0x01, 0x00,
113162306a36Sopenharmony_ci	0, 0, 0
113262306a36Sopenharmony_ci};
113362306a36Sopenharmony_ci
113462306a36Sopenharmony_ci/* nw802 - Mustek Wcam 300 mini */
113562306a36Sopenharmony_cistatic const u8 mustek_start[] = {
113662306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0x04,
113762306a36Sopenharmony_ci	0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x92, 0x03, 0x10, 0x00, 0x4d,
113862306a36Sopenharmony_ci			  0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
113962306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
114062306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
114162306a36Sopenharmony_ci			  0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
114262306a36Sopenharmony_ci			  0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
114362306a36Sopenharmony_ci			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
114462306a36Sopenharmony_ci			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
114562306a36Sopenharmony_ci	0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
114662306a36Sopenharmony_ci			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
114762306a36Sopenharmony_ci			  0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
114862306a36Sopenharmony_ci			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
114962306a36Sopenharmony_ci			  0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
115062306a36Sopenharmony_ci			  0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
115162306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
115262306a36Sopenharmony_ci			  0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
115362306a36Sopenharmony_ci	0x00, 0x80, 0x1f, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x68, 0x00,
115462306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
115562306a36Sopenharmony_ci			  0x00, 0x0c, 0x02, 0x01, 0x00, 0x16, 0x00, 0x94,
115662306a36Sopenharmony_ci			  0x00, 0x10, 0x06, 0xfc, 0x05, 0x0c, 0x06,
115762306a36Sopenharmony_ci	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
115862306a36Sopenharmony_ci			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
115962306a36Sopenharmony_ci			  0x40, 0x20,
116062306a36Sopenharmony_ci	0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
116162306a36Sopenharmony_ci	0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
116262306a36Sopenharmony_ci	0x06, 0x00, 0x02, 0x09, 0x99,
116362306a36Sopenharmony_ci	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
116462306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
116562306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00,
116662306a36Sopenharmony_ci	0x10, 0x00, 0x40, 0xa1, 0x02, 0x80, 0x00, 0x13, 0x00, 0x00, 0x00,
116762306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
116862306a36Sopenharmony_ci			  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
116962306a36Sopenharmony_ci			  0x00, 0x49, 0x13, 0x00, 0x00, 0xc0, 0x00, 0x14,
117062306a36Sopenharmony_ci			  0x02, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00,
117162306a36Sopenharmony_ci			  0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
117262306a36Sopenharmony_ci			  0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
117362306a36Sopenharmony_ci			  0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
117462306a36Sopenharmony_ci	0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
117562306a36Sopenharmony_ci			  0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
117662306a36Sopenharmony_ci			  0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
117762306a36Sopenharmony_ci			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
117862306a36Sopenharmony_ci			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
117962306a36Sopenharmony_ci			  0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
118062306a36Sopenharmony_ci			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
118162306a36Sopenharmony_ci			  0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
118262306a36Sopenharmony_ci	0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
118362306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x01, 0x82,
118462306a36Sopenharmony_ci			  0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
118562306a36Sopenharmony_ci			  0x01, 0xf0, 0x00,
118662306a36Sopenharmony_ci	0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
118762306a36Sopenharmony_ci			  0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
118862306a36Sopenharmony_ci			  0x40,
118962306a36Sopenharmony_ci	0x10, 0x1a, 0x01, 0x00,
119062306a36Sopenharmony_ci	0x10, 0x00, 0x01, 0xad,
119162306a36Sopenharmony_ci	0x00, 0x00, 0x01, 0x08,
119262306a36Sopenharmony_ci	0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
119362306a36Sopenharmony_ci	0x10, 0x1b, 0x02, 0x00, 0x00,
119462306a36Sopenharmony_ci	0x10, 0x11, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
119562306a36Sopenharmony_ci	0x10, 0x1d, 0x08, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
119662306a36Sopenharmony_ci	0x10, 0x0e, 0x01, 0x0f,
119762306a36Sopenharmony_ci	0x10, 0x41, 0x11, 0x00, 0x0f, 0x29, 0x4a, 0x64, 0x7a, 0x8c, 0x9e,
119862306a36Sopenharmony_ci			  0xad, 0xba, 0xc7, 0xd3, 0xde, 0xe8, 0xf1, 0xf9,
119962306a36Sopenharmony_ci			  0xff,
120062306a36Sopenharmony_ci	0x10, 0x0f, 0x02, 0x11, 0x11,
120162306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x0c,
120262306a36Sopenharmony_ci	0x10, 0x41, 0x11, 0x00, 0x0f, 0x29, 0x4a, 0x64, 0x7a, 0x8c, 0x9e,
120362306a36Sopenharmony_ci			  0xad, 0xba, 0xc7, 0xd3, 0xde, 0xe8, 0xf1, 0xf9,
120462306a36Sopenharmony_ci			  0xff,
120562306a36Sopenharmony_ci	0x10, 0x0b, 0x01, 0x1c,
120662306a36Sopenharmony_ci	0x10, 0x0d, 0x01, 0x1a,
120762306a36Sopenharmony_ci	0x10, 0x0c, 0x01, 0x34,
120862306a36Sopenharmony_ci	0x04, 0x05, 0x01, 0x61,
120962306a36Sopenharmony_ci	0x04, 0x04, 0x01, 0x40,
121062306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0x03,
121162306a36Sopenharmony_ci	0, 0, 0
121262306a36Sopenharmony_ci};
121362306a36Sopenharmony_ci
121462306a36Sopenharmony_ci/* nw802 - Scope USB Microscope M2 (ProScope) (Hitachi HD49322BF) */
121562306a36Sopenharmony_cistatic const u8 proscope_init[] = {
121662306a36Sopenharmony_ci	0x04, 0x05, 0x01, 0x21,
121762306a36Sopenharmony_ci	0x04, 0x04, 0x01, 0x01,
121862306a36Sopenharmony_ci	0, 0, 0
121962306a36Sopenharmony_ci};
122062306a36Sopenharmony_cistatic const u8 proscope_start_1[] = {
122162306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0x04,
122262306a36Sopenharmony_ci	0x00, 0x00, 0x40, 0x10, 0x01, 0x00, 0xf9, 0x02, 0x10, 0x00, 0x04,
122362306a36Sopenharmony_ci			  0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
122462306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
122562306a36Sopenharmony_ci			  0x00, 0x08, 0x00, 0x17, 0x00, 0xce, 0x00, 0xf4,
122662306a36Sopenharmony_ci			  0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
122762306a36Sopenharmony_ci			  0x00, 0xce, 0x00, 0xf8, 0x03, 0x3e, 0x00, 0x86,
122862306a36Sopenharmony_ci			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
122962306a36Sopenharmony_ci			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
123062306a36Sopenharmony_ci	0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0xb6,
123162306a36Sopenharmony_ci			  0x00, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
123262306a36Sopenharmony_ci			  0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
123362306a36Sopenharmony_ci			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
123462306a36Sopenharmony_ci			  0x00, 0xf6, 0x03, 0x34, 0x04, 0xf6, 0x03, 0x34,
123562306a36Sopenharmony_ci			  0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
123662306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xe8,
123762306a36Sopenharmony_ci			  0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
123862306a36Sopenharmony_ci	0x00, 0x80, 0x1f, 0xb4, 0x6f, 0x1f, 0x0f, 0x08, 0x20, 0xa8, 0x00,
123962306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
124062306a36Sopenharmony_ci			  0x00, 0x0c, 0x02, 0x01, 0x00, 0x19, 0x00, 0x94,
124162306a36Sopenharmony_ci			  0x00, 0x10, 0x06, 0x10, 0x00, 0x36, 0x00,
124262306a36Sopenharmony_ci	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
124362306a36Sopenharmony_ci			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
124462306a36Sopenharmony_ci			  0x40, 0x20,
124562306a36Sopenharmony_ci	0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
124662306a36Sopenharmony_ci	0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
124762306a36Sopenharmony_ci	0x06, 0x00, 0x02, 0x09, 0x99,
124862306a36Sopenharmony_ci	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
124962306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
125062306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00,
125162306a36Sopenharmony_ci	0x10, 0x00, 0x40, 0xad, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
125262306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x10, 0x1f, 0x10, 0x08, 0x0a,
125362306a36Sopenharmony_ci			  0x0a, 0x51, 0x00, 0xf1, 0x00, 0x3c, 0x00, 0xb4,
125462306a36Sopenharmony_ci			  0x00, 0x49, 0x13, 0x00, 0x00, 0x8c, 0x04, 0x01,
125562306a36Sopenharmony_ci			  0x20, 0x02, 0x00, 0x03, 0x00, 0x20, 0x00, 0x00,
125662306a36Sopenharmony_ci			  0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
125762306a36Sopenharmony_ci			  0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
125862306a36Sopenharmony_ci			  0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
125962306a36Sopenharmony_ci	0x10, 0x40, 0x40, 0x80, 0x00, 0x2d, 0x46, 0x58, 0x67, 0x74, 0x7f,
126062306a36Sopenharmony_ci			  0x88, 0x94, 0x9d, 0xa6, 0xae, 0xb5, 0xbd, 0xc4,
126162306a36Sopenharmony_ci			  0xcb, 0xd1, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
126262306a36Sopenharmony_ci			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
126362306a36Sopenharmony_ci			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
126462306a36Sopenharmony_ci			  0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
126562306a36Sopenharmony_ci			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
126662306a36Sopenharmony_ci			  0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
126762306a36Sopenharmony_ci	0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x3f,
126862306a36Sopenharmony_ci			  0x01, 0x00, 0x00, 0xef, 0x00, 0x09, 0x05, 0x82,
126962306a36Sopenharmony_ci			  0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
127062306a36Sopenharmony_ci			  0x01, 0xf0, 0x00,
127162306a36Sopenharmony_ci	0, 0, 0
127262306a36Sopenharmony_ci};
127362306a36Sopenharmony_cistatic const u8 proscope_start_qvga[] = {
127462306a36Sopenharmony_ci	0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
127562306a36Sopenharmony_ci			  0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
127662306a36Sopenharmony_ci			  0x40,
127762306a36Sopenharmony_ci	0x10, 0x1a, 0x01, 0x06,
127862306a36Sopenharmony_ci	0x00, 0x03, 0x02, 0xf9, 0x02,
127962306a36Sopenharmony_ci	0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
128062306a36Sopenharmony_ci	0x10, 0x1b, 0x02, 0x00, 0x00,
128162306a36Sopenharmony_ci	0x10, 0x11, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
128262306a36Sopenharmony_ci	0x10, 0x1d, 0x08, 0xc0, 0x0d, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
128362306a36Sopenharmony_ci	0x10, 0x0e, 0x01, 0x10,
128462306a36Sopenharmony_ci	0, 0, 0
128562306a36Sopenharmony_ci};
128662306a36Sopenharmony_cistatic const u8 proscope_start_vga[] = {
128762306a36Sopenharmony_ci	0x00, 0x03, 0x02, 0xf9, 0x02,
128862306a36Sopenharmony_ci	0x10, 0x85, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01,
128962306a36Sopenharmony_ci	0x02, 0x00, 0x11, 0x78, 0xa0, 0x8c, 0x78, 0xa0, 0x00, 0x00, 0x00,
129062306a36Sopenharmony_ci			  0x00, 0xf0, 0x16, 0x00, 0x00, 0x82, 0x84, 0x00,
129162306a36Sopenharmony_ci			  0x80,
129262306a36Sopenharmony_ci	0x10, 0x1a, 0x01, 0x06,
129362306a36Sopenharmony_ci	0x10, 0x00, 0x01, 0xa1,
129462306a36Sopenharmony_ci	0x10, 0x1b, 0x02, 0x00, 0x00,
129562306a36Sopenharmony_ci	0x10, 0x1d, 0x08, 0xc0, 0x0d, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
129662306a36Sopenharmony_ci	0x10, 0x11, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01,
129762306a36Sopenharmony_ci	0x10, 0x0e, 0x01, 0x10,
129862306a36Sopenharmony_ci	0x10, 0x41, 0x11, 0x00, 0x10, 0x51, 0x6e, 0x83, 0x93, 0xa1, 0xae,
129962306a36Sopenharmony_ci			  0xb9, 0xc3, 0xcc, 0xd4, 0xdd, 0xe4, 0xeb, 0xf2,
130062306a36Sopenharmony_ci			  0xf9,
130162306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x00,
130262306a36Sopenharmony_ci	0, 0, 0
130362306a36Sopenharmony_ci};
130462306a36Sopenharmony_cistatic const u8 proscope_start_2[] = {
130562306a36Sopenharmony_ci	0x10, 0x0f, 0x02, 0x0c, 0x0c,
130662306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x0c,
130762306a36Sopenharmony_ci	0x10, 0x41, 0x11, 0x00, 0x10, 0x51, 0x6e, 0x83, 0x93, 0xa1, 0xae,
130862306a36Sopenharmony_ci			  0xb9, 0xc3, 0xcc, 0xd4, 0xdd, 0xe4, 0xeb, 0xf2,
130962306a36Sopenharmony_ci			  0xf9,
131062306a36Sopenharmony_ci	0x10, 0x0b, 0x01, 0x0b,
131162306a36Sopenharmony_ci	0x10, 0x0d, 0x01, 0x10,
131262306a36Sopenharmony_ci	0x10, 0x0c, 0x01, 0x1b,
131362306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0x03,
131462306a36Sopenharmony_ci	0x04, 0x05, 0x01, 0x21,
131562306a36Sopenharmony_ci	0x04, 0x04, 0x01, 0x00,
131662306a36Sopenharmony_ci	0, 0, 0
131762306a36Sopenharmony_ci};
131862306a36Sopenharmony_ci
131962306a36Sopenharmony_ci/* nw800 - hv7121b? (seems pas106) - Divio Chicony TwinkleCam */
132062306a36Sopenharmony_cistatic const u8 twinkle_start[] = {
132162306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0x44,
132262306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0x00,
132362306a36Sopenharmony_ci	0x00, 0x00, 0x40, 0x14, 0x83, 0x00, 0xba, 0x01, 0x10, 0x00, 0x4f,
132462306a36Sopenharmony_ci			  0xef, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0x19,
132562306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
132662306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x19, 0x00, 0x06, 0x00, 0xfc,
132762306a36Sopenharmony_ci			  0x01, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
132862306a36Sopenharmony_ci			  0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
132962306a36Sopenharmony_ci			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
133062306a36Sopenharmony_ci			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
133162306a36Sopenharmony_ci	0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
133262306a36Sopenharmony_ci			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
133362306a36Sopenharmony_ci			  0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
133462306a36Sopenharmony_ci			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
133562306a36Sopenharmony_ci			  0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
133662306a36Sopenharmony_ci			  0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
133762306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
133862306a36Sopenharmony_ci			  0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
133962306a36Sopenharmony_ci	0x00, 0x80, 0x1f, 0xb8, 0x48, 0x0f, 0x04, 0x88, 0x14, 0x68, 0x00,
134062306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0xa8, 0x01, 0x00, 0x03,
134162306a36Sopenharmony_ci			  0x00, 0x24, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
134262306a36Sopenharmony_ci			  0x00, 0x4b, 0x00, 0x76, 0x00, 0x86, 0x00,
134362306a36Sopenharmony_ci	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
134462306a36Sopenharmony_ci			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
134562306a36Sopenharmony_ci			  0x40, 0x20,
134662306a36Sopenharmony_ci	0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
134762306a36Sopenharmony_ci	0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x61, 0x00,
134862306a36Sopenharmony_ci	0x05, 0x00, 0x06, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
134962306a36Sopenharmony_ci	0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
135062306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
135162306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
135262306a36Sopenharmony_ci			  0x00, 0x00, 0x00,
135362306a36Sopenharmony_ci	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
135462306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
135562306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00,
135662306a36Sopenharmony_ci	0x10, 0x00, 0x40, 0x80, 0x02, 0x20, 0x00, 0x11, 0x00, 0x00, 0x00,
135762306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x08,
135862306a36Sopenharmony_ci			  0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
135962306a36Sopenharmony_ci			  0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
136062306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
136162306a36Sopenharmony_ci			  0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
136262306a36Sopenharmony_ci			  0x03, 0x00, 0x00, 0x10, 0x00, 0x20, 0x10, 0x06,
136362306a36Sopenharmony_ci			  0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x00, 0x80,
136462306a36Sopenharmony_ci	0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
136562306a36Sopenharmony_ci			  0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
136662306a36Sopenharmony_ci			  0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
136762306a36Sopenharmony_ci			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
136862306a36Sopenharmony_ci			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
136962306a36Sopenharmony_ci			  0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
137062306a36Sopenharmony_ci			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
137162306a36Sopenharmony_ci			  0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
137262306a36Sopenharmony_ci	0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
137362306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x62,
137462306a36Sopenharmony_ci			  0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
137562306a36Sopenharmony_ci			  0x01, 0x60, 0x01, 0x00, 0x00,
137662306a36Sopenharmony_ci
137762306a36Sopenharmony_ci	0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
137862306a36Sopenharmony_ci	0x04, 0x04, 0x01, 0x10,
137962306a36Sopenharmony_ci	0x04, 0x04, 0x01, 0x00,
138062306a36Sopenharmony_ci	0x04, 0x05, 0x01, 0x61,
138162306a36Sopenharmony_ci	0x04, 0x04, 0x01, 0x01,
138262306a36Sopenharmony_ci	I2C0, 0x40, 0x0c, 0x02, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x00,
138362306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x0a,
138462306a36Sopenharmony_ci	I2C0, 0x40, 0x02, 0x11, 0x06,
138562306a36Sopenharmony_ci	I2C0, 0x40, 0x02, 0x14, 0x00,
138662306a36Sopenharmony_ci	I2C0, 0x40, 0x02, 0x13, 0x01,		/* i2c end */
138762306a36Sopenharmony_ci	I2C0, 0x40, 0x02, 0x07, 0x01,
138862306a36Sopenharmony_ci	0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00,
138962306a36Sopenharmony_ci			  0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65,
139062306a36Sopenharmony_ci			  0x40,
139162306a36Sopenharmony_ci	I2C0, 0x40, 0x02, 0x02, 0x0c,
139262306a36Sopenharmony_ci	I2C0, 0x40, 0x02, 0x13, 0x01,
139362306a36Sopenharmony_ci	0x10, 0x00, 0x01, 0x01,
139462306a36Sopenharmony_ci	0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01,
139562306a36Sopenharmony_ci			  0x20, 0x01, 0x60, 0x01,
139662306a36Sopenharmony_ci	I2C0, 0x40, 0x02, 0x05, 0x0f,
139762306a36Sopenharmony_ci	I2C0, 0x40, 0x02, 0x13, 0x01,
139862306a36Sopenharmony_ci	I2C0, 0x40, 0x08, 0x08, 0x04, 0x0b, 0x01, 0x01, 0x02, 0x00, 0x17,
139962306a36Sopenharmony_ci	I2C0, 0x40, 0x03, 0x12, 0x00, 0x01,
140062306a36Sopenharmony_ci	0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
140162306a36Sopenharmony_ci	I2C0, 0x40, 0x02, 0x12, 0x00,
140262306a36Sopenharmony_ci	I2C0, 0x40, 0x02, 0x0e, 0x00,
140362306a36Sopenharmony_ci	I2C0, 0x40, 0x02, 0x11, 0x06,
140462306a36Sopenharmony_ci	0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7,
140562306a36Sopenharmony_ci			  0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7,
140662306a36Sopenharmony_ci			  0xf9,
140762306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x00,
140862306a36Sopenharmony_ci	0x10, 0x0f, 0x02, 0x0c, 0x0c,
140962306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x06,
141062306a36Sopenharmony_ci	0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7,
141162306a36Sopenharmony_ci			  0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7,
141262306a36Sopenharmony_ci			  0xf9,
141362306a36Sopenharmony_ci	0x10, 0x0b, 0x01, 0x19,
141462306a36Sopenharmony_ci	0x10, 0x0d, 0x01, 0x10,
141562306a36Sopenharmony_ci	0x10, 0x0c, 0x01, 0x0d,
141662306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0x03,
141762306a36Sopenharmony_ci	0x04, 0x05, 0x01, 0x61,
141862306a36Sopenharmony_ci	0x04, 0x04, 0x01, 0x41,
141962306a36Sopenharmony_ci	0, 0, 0
142062306a36Sopenharmony_ci};
142162306a36Sopenharmony_ci
142262306a36Sopenharmony_ci/* nw802 dvc-v6 */
142362306a36Sopenharmony_cistatic const u8 dvcv6_start[] = {
142462306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0x06,
142562306a36Sopenharmony_ci	0x00, 0x00, 0x40, 0x54, 0x96, 0x98, 0xf9, 0x02, 0x18, 0x00, 0x4c,
142662306a36Sopenharmony_ci			  0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
142762306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
142862306a36Sopenharmony_ci			  0x00, 0x0b, 0x00, 0x1b, 0x00, 0xc8, 0x00, 0xf4,
142962306a36Sopenharmony_ci			  0x05, 0xb4, 0x00, 0xcc, 0x00, 0x01, 0x00, 0x01,
143062306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
143162306a36Sopenharmony_ci			  0x00, 0xa2, 0x00, 0xc6, 0x00, 0x60, 0x00, 0xc6,
143262306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
143362306a36Sopenharmony_ci	0x00, 0x40, 0x40, 0x00, 0xae, 0x00, 0xd2, 0x00, 0xae, 0x00, 0xd2,
143462306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
143562306a36Sopenharmony_ci			  0x00, 0xa8, 0x00, 0xc0, 0x00, 0x66, 0x00, 0xc0,
143662306a36Sopenharmony_ci			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
143762306a36Sopenharmony_ci			  0x00, 0x0a, 0x00, 0x54, 0x00, 0x0a, 0x00, 0x54,
143862306a36Sopenharmony_ci			  0x00, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
143962306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6,
144062306a36Sopenharmony_ci			  0x00, 0x5d, 0x00, 0xc7, 0x00, 0x7e, 0x00, 0x30,
144162306a36Sopenharmony_ci	0x00, 0x80, 0x1f, 0x98, 0x43, 0x3f, 0x0d, 0x88, 0x20, 0x80, 0x3f,
144262306a36Sopenharmony_ci			  0x47, 0xaf, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
144362306a36Sopenharmony_ci			  0x00, 0x0c, 0x02, 0x0c, 0x00, 0x1c, 0x00, 0x94,
144462306a36Sopenharmony_ci			  0x00, 0x10, 0x06, 0x24, 0x00, 0x4a, 0x00,
144562306a36Sopenharmony_ci	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
144662306a36Sopenharmony_ci			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
144762306a36Sopenharmony_ci			  0x40, 0x20,
144862306a36Sopenharmony_ci	0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
144962306a36Sopenharmony_ci	0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00,
145062306a36Sopenharmony_ci	0x06, 0x00, 0x02, 0x09, 0x99,
145162306a36Sopenharmony_ci	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
145262306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
145362306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00,
145462306a36Sopenharmony_ci	0x10, 0x00, 0x40, 0xa0, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
145562306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
145662306a36Sopenharmony_ci			  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
145762306a36Sopenharmony_ci			  0x00, 0x49, 0x13, 0x00, 0x00, 0xe0, 0x00, 0x0c,
145862306a36Sopenharmony_ci			  0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
145962306a36Sopenharmony_ci			  0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
146062306a36Sopenharmony_ci			  0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
146162306a36Sopenharmony_ci			  0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
146262306a36Sopenharmony_ci	0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
146362306a36Sopenharmony_ci			  0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
146462306a36Sopenharmony_ci			  0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
146562306a36Sopenharmony_ci			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
146662306a36Sopenharmony_ci			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
146762306a36Sopenharmony_ci			  0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
146862306a36Sopenharmony_ci			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
146962306a36Sopenharmony_ci			  0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
147062306a36Sopenharmony_ci	0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
147162306a36Sopenharmony_ci			  0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x05, 0x82,
147262306a36Sopenharmony_ci			  0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
147362306a36Sopenharmony_ci			  0x01, 0xf0, 0x00,
147462306a36Sopenharmony_ci	0x00, 0x03, 0x02, 0x94, 0x03,
147562306a36Sopenharmony_ci	0x00, 0x1d, 0x04, 0x0a, 0x01, 0x28, 0x07,
147662306a36Sopenharmony_ci	0x00, 0x7b, 0x02, 0xe0, 0x00,
147762306a36Sopenharmony_ci	0x10, 0x8d, 0x01, 0x00,
147862306a36Sopenharmony_ci	0x00, 0x09, 0x04, 0x1e, 0x00, 0x0c, 0x02,
147962306a36Sopenharmony_ci	0x00, 0x91, 0x02, 0x0b, 0x02,
148062306a36Sopenharmony_ci	0x10, 0x00, 0x01, 0xaf,
148162306a36Sopenharmony_ci	0x02, 0x00, 0x11, 0x3c, 0x50, 0x8f, 0x3c, 0x50, 0x00, 0x00, 0x00,
148262306a36Sopenharmony_ci			  0x00, 0x78, 0x3f, 0x3f, 0x06, 0xf2, 0x8f, 0xf0,
148362306a36Sopenharmony_ci			  0x40,
148462306a36Sopenharmony_ci	0x10, 0x1a, 0x01, 0x02,
148562306a36Sopenharmony_ci	0x10, 0x00, 0x01, 0xaf,
148662306a36Sopenharmony_ci	0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
148762306a36Sopenharmony_ci	0x10, 0x1b, 0x02, 0x07, 0x01,
148862306a36Sopenharmony_ci	0x10, 0x11, 0x08, 0x61, 0x00, 0xe0, 0x00, 0x49, 0x00, 0xa8, 0x00,
148962306a36Sopenharmony_ci	0x10, 0x1f, 0x06, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
149062306a36Sopenharmony_ci	0x10, 0x1d, 0x02, 0x40, 0x06,
149162306a36Sopenharmony_ci	0x10, 0x0e, 0x01, 0x08,
149262306a36Sopenharmony_ci	0x10, 0x41, 0x11, 0x00, 0x0f, 0x54, 0x6f, 0x82, 0x91, 0x9f, 0xaa,
149362306a36Sopenharmony_ci			  0xb4, 0xbd, 0xc5, 0xcd, 0xd5, 0xdb, 0xdc, 0xdc,
149462306a36Sopenharmony_ci			  0xdc,
149562306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x00,
149662306a36Sopenharmony_ci	0x10, 0x0f, 0x02, 0x12, 0x12,
149762306a36Sopenharmony_ci	0x10, 0x03, 0x01, 0x11,
149862306a36Sopenharmony_ci	0x10, 0x41, 0x11, 0x00, 0x0f, 0x54, 0x6f, 0x82, 0x91, 0x9f, 0xaa,
149962306a36Sopenharmony_ci			  0xb4, 0xbd, 0xc5, 0xcd, 0xd5, 0xdb, 0xdc, 0xdc,
150062306a36Sopenharmony_ci			  0xdc,
150162306a36Sopenharmony_ci	0x10, 0x0b, 0x01, 0x16,
150262306a36Sopenharmony_ci	0x10, 0x0d, 0x01, 0x10,
150362306a36Sopenharmony_ci	0x10, 0x0c, 0x01, 0x1a,
150462306a36Sopenharmony_ci	0x04, 0x06, 0x01, 0x03,
150562306a36Sopenharmony_ci	0x04, 0x04, 0x01, 0x00,
150662306a36Sopenharmony_ci};
150762306a36Sopenharmony_ci
150862306a36Sopenharmony_cistatic const u8 *webcam_start[] = {
150962306a36Sopenharmony_ci	[Generic800] = nw800_start,
151062306a36Sopenharmony_ci	[SpaceCam] = spacecam_start,
151162306a36Sopenharmony_ci	[SpaceCam2] = spacecam2_start,
151262306a36Sopenharmony_ci	[Cvideopro] = cvideopro_start,
151362306a36Sopenharmony_ci	[Dlink350c] = dlink_start,
151462306a36Sopenharmony_ci	[DS3303u] = ds3303_start,
151562306a36Sopenharmony_ci	[Kr651us] = kr651_start_1,
151662306a36Sopenharmony_ci	[Kritter] = kritter_start,
151762306a36Sopenharmony_ci	[Mustek300] = mustek_start,
151862306a36Sopenharmony_ci	[Proscope] = proscope_start_1,
151962306a36Sopenharmony_ci	[Twinkle] = twinkle_start,
152062306a36Sopenharmony_ci	[DvcV6] = dvcv6_start,
152162306a36Sopenharmony_ci	[P35u] = nw801_start_1,
152262306a36Sopenharmony_ci	[Generic802] = nw802_start,
152362306a36Sopenharmony_ci};
152462306a36Sopenharmony_ci
152562306a36Sopenharmony_ci/* -- write a register -- */
152662306a36Sopenharmony_cistatic void reg_w(struct gspca_dev *gspca_dev,
152762306a36Sopenharmony_ci			u16 index,
152862306a36Sopenharmony_ci			const u8 *data,
152962306a36Sopenharmony_ci			int len)
153062306a36Sopenharmony_ci{
153162306a36Sopenharmony_ci	struct usb_device *dev = gspca_dev->dev;
153262306a36Sopenharmony_ci	int ret;
153362306a36Sopenharmony_ci
153462306a36Sopenharmony_ci	if (gspca_dev->usb_err < 0)
153562306a36Sopenharmony_ci		return;
153662306a36Sopenharmony_ci	if (len == 1)
153762306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_USBO, "SET 00 0000 %04x %02x\n",
153862306a36Sopenharmony_ci			  index, *data);
153962306a36Sopenharmony_ci	else
154062306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_USBO, "SET 00 0000 %04x %02x %02x ...\n",
154162306a36Sopenharmony_ci			  index, *data, data[1]);
154262306a36Sopenharmony_ci	memcpy(gspca_dev->usb_buf, data, len);
154362306a36Sopenharmony_ci	ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
154462306a36Sopenharmony_ci			0x00,
154562306a36Sopenharmony_ci			USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
154662306a36Sopenharmony_ci			0x00,		/* value */
154762306a36Sopenharmony_ci			index,
154862306a36Sopenharmony_ci			gspca_dev->usb_buf,
154962306a36Sopenharmony_ci			len,
155062306a36Sopenharmony_ci			500);
155162306a36Sopenharmony_ci	if (ret < 0) {
155262306a36Sopenharmony_ci		pr_err("reg_w err %d\n", ret);
155362306a36Sopenharmony_ci		gspca_dev->usb_err = ret;
155462306a36Sopenharmony_ci	}
155562306a36Sopenharmony_ci}
155662306a36Sopenharmony_ci
155762306a36Sopenharmony_ci/* -- read registers in usb_buf -- */
155862306a36Sopenharmony_cistatic void reg_r(struct gspca_dev *gspca_dev,
155962306a36Sopenharmony_ci			u16 index,
156062306a36Sopenharmony_ci			int len)
156162306a36Sopenharmony_ci{
156262306a36Sopenharmony_ci	struct usb_device *dev = gspca_dev->dev;
156362306a36Sopenharmony_ci	int ret;
156462306a36Sopenharmony_ci
156562306a36Sopenharmony_ci	if (gspca_dev->usb_err < 0)
156662306a36Sopenharmony_ci		return;
156762306a36Sopenharmony_ci	ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
156862306a36Sopenharmony_ci			0x00,
156962306a36Sopenharmony_ci			USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
157062306a36Sopenharmony_ci			0x00, index,
157162306a36Sopenharmony_ci			gspca_dev->usb_buf, len, 500);
157262306a36Sopenharmony_ci	if (ret < 0) {
157362306a36Sopenharmony_ci		pr_err("reg_r err %d\n", ret);
157462306a36Sopenharmony_ci		gspca_dev->usb_err = ret;
157562306a36Sopenharmony_ci		/*
157662306a36Sopenharmony_ci		 * Make sure the buffer is zeroed to avoid uninitialized
157762306a36Sopenharmony_ci		 * values.
157862306a36Sopenharmony_ci		 */
157962306a36Sopenharmony_ci		memset(gspca_dev->usb_buf, 0, USB_BUF_SZ);
158062306a36Sopenharmony_ci		return;
158162306a36Sopenharmony_ci	}
158262306a36Sopenharmony_ci	if (len == 1)
158362306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_USBI, "GET 00 0000 %04x %02x\n",
158462306a36Sopenharmony_ci			  index, gspca_dev->usb_buf[0]);
158562306a36Sopenharmony_ci	else
158662306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_USBI, "GET 00 0000 %04x %02x %02x ..\n",
158762306a36Sopenharmony_ci			  index, gspca_dev->usb_buf[0],
158862306a36Sopenharmony_ci			  gspca_dev->usb_buf[1]);
158962306a36Sopenharmony_ci}
159062306a36Sopenharmony_ci
159162306a36Sopenharmony_cistatic void i2c_w(struct gspca_dev *gspca_dev,
159262306a36Sopenharmony_ci			u8 i2c_addr,
159362306a36Sopenharmony_ci			const u8 *data,
159462306a36Sopenharmony_ci			int len)
159562306a36Sopenharmony_ci{
159662306a36Sopenharmony_ci	u8 val[2];
159762306a36Sopenharmony_ci	int i;
159862306a36Sopenharmony_ci
159962306a36Sopenharmony_ci	reg_w(gspca_dev, 0x0600, data + 1, len - 1);
160062306a36Sopenharmony_ci	reg_w(gspca_dev, 0x0600, data, len);
160162306a36Sopenharmony_ci	val[0] = len;
160262306a36Sopenharmony_ci	val[1] = i2c_addr;
160362306a36Sopenharmony_ci	reg_w(gspca_dev, 0x0502, val, 2);
160462306a36Sopenharmony_ci	val[0] = 0x01;
160562306a36Sopenharmony_ci	reg_w(gspca_dev, 0x0501, val, 1);
160662306a36Sopenharmony_ci	for (i = 5; --i >= 0; ) {
160762306a36Sopenharmony_ci		msleep(4);
160862306a36Sopenharmony_ci		reg_r(gspca_dev, 0x0505, 1);
160962306a36Sopenharmony_ci		if (gspca_dev->usb_err < 0)
161062306a36Sopenharmony_ci			return;
161162306a36Sopenharmony_ci		if (gspca_dev->usb_buf[0] == 0)
161262306a36Sopenharmony_ci			return;
161362306a36Sopenharmony_ci	}
161462306a36Sopenharmony_ci	gspca_dev->usb_err = -ETIME;
161562306a36Sopenharmony_ci}
161662306a36Sopenharmony_ci
161762306a36Sopenharmony_cistatic void reg_w_buf(struct gspca_dev *gspca_dev,
161862306a36Sopenharmony_ci			const u8 *cmd)
161962306a36Sopenharmony_ci{
162062306a36Sopenharmony_ci	u16 reg;
162162306a36Sopenharmony_ci	int len;
162262306a36Sopenharmony_ci
162362306a36Sopenharmony_ci	for (;;) {
162462306a36Sopenharmony_ci		reg = *cmd++ << 8;
162562306a36Sopenharmony_ci		reg += *cmd++;
162662306a36Sopenharmony_ci		len = *cmd++;
162762306a36Sopenharmony_ci		if (len == 0)
162862306a36Sopenharmony_ci			break;
162962306a36Sopenharmony_ci		if (cmd[-3] != I2C0)
163062306a36Sopenharmony_ci			reg_w(gspca_dev, reg, cmd, len);
163162306a36Sopenharmony_ci		else
163262306a36Sopenharmony_ci			i2c_w(gspca_dev, reg, cmd, len);
163362306a36Sopenharmony_ci		cmd += len;
163462306a36Sopenharmony_ci	}
163562306a36Sopenharmony_ci}
163662306a36Sopenharmony_ci
163762306a36Sopenharmony_cistatic int swap_bits(int v)
163862306a36Sopenharmony_ci{
163962306a36Sopenharmony_ci	int r, i;
164062306a36Sopenharmony_ci
164162306a36Sopenharmony_ci	r = 0;
164262306a36Sopenharmony_ci	for (i = 0; i < 8; i++) {
164362306a36Sopenharmony_ci		r <<= 1;
164462306a36Sopenharmony_ci		if (v & 1)
164562306a36Sopenharmony_ci			r++;
164662306a36Sopenharmony_ci		v >>= 1;
164762306a36Sopenharmony_ci	}
164862306a36Sopenharmony_ci	return r;
164962306a36Sopenharmony_ci}
165062306a36Sopenharmony_ci
165162306a36Sopenharmony_cistatic void setgain(struct gspca_dev *gspca_dev, u8 val)
165262306a36Sopenharmony_ci{
165362306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
165462306a36Sopenharmony_ci	u8 v[2];
165562306a36Sopenharmony_ci
165662306a36Sopenharmony_ci	switch (sd->webcam) {
165762306a36Sopenharmony_ci	case P35u:
165862306a36Sopenharmony_ci		reg_w(gspca_dev, 0x1026, &val, 1);
165962306a36Sopenharmony_ci		break;
166062306a36Sopenharmony_ci	case Kr651us:
166162306a36Sopenharmony_ci		/* 0 - 253 */
166262306a36Sopenharmony_ci		val = swap_bits(val);
166362306a36Sopenharmony_ci		v[0] = val << 3;
166462306a36Sopenharmony_ci		v[1] = val >> 5;
166562306a36Sopenharmony_ci		reg_w(gspca_dev, 0x101d, v, 2);	/* SIF reg0/1 (AGC) */
166662306a36Sopenharmony_ci		break;
166762306a36Sopenharmony_ci	}
166862306a36Sopenharmony_ci}
166962306a36Sopenharmony_ci
167062306a36Sopenharmony_cistatic void setexposure(struct gspca_dev *gspca_dev, s32 val)
167162306a36Sopenharmony_ci{
167262306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
167362306a36Sopenharmony_ci	u8 v[2];
167462306a36Sopenharmony_ci
167562306a36Sopenharmony_ci	switch (sd->webcam) {
167662306a36Sopenharmony_ci	case P35u:
167762306a36Sopenharmony_ci		v[0] = ((9 - val) << 3) | 0x01;
167862306a36Sopenharmony_ci		reg_w(gspca_dev, 0x1019, v, 1);
167962306a36Sopenharmony_ci		break;
168062306a36Sopenharmony_ci	case Cvideopro:
168162306a36Sopenharmony_ci	case DvcV6:
168262306a36Sopenharmony_ci	case Kritter:
168362306a36Sopenharmony_ci	case Kr651us:
168462306a36Sopenharmony_ci		v[0] = val;
168562306a36Sopenharmony_ci		v[1] = val >> 8;
168662306a36Sopenharmony_ci		reg_w(gspca_dev, 0x101b, v, 2);
168762306a36Sopenharmony_ci		break;
168862306a36Sopenharmony_ci	}
168962306a36Sopenharmony_ci}
169062306a36Sopenharmony_ci
169162306a36Sopenharmony_cistatic void setautogain(struct gspca_dev *gspca_dev, s32 val)
169262306a36Sopenharmony_ci{
169362306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
169462306a36Sopenharmony_ci	int w, h;
169562306a36Sopenharmony_ci
169662306a36Sopenharmony_ci	if (!val) {
169762306a36Sopenharmony_ci		sd->ag_cnt = -1;
169862306a36Sopenharmony_ci		return;
169962306a36Sopenharmony_ci	}
170062306a36Sopenharmony_ci	sd->ag_cnt = AG_CNT_START;
170162306a36Sopenharmony_ci
170262306a36Sopenharmony_ci	reg_r(gspca_dev, 0x1004, 1);
170362306a36Sopenharmony_ci	if (gspca_dev->usb_buf[0] & 0x04) {	/* if AE_FULL_FRM */
170462306a36Sopenharmony_ci		sd->ae_res = gspca_dev->pixfmt.width * gspca_dev->pixfmt.height;
170562306a36Sopenharmony_ci	} else {				/* get the AE window size */
170662306a36Sopenharmony_ci		reg_r(gspca_dev, 0x1011, 8);
170762306a36Sopenharmony_ci		w = (gspca_dev->usb_buf[1] << 8) + gspca_dev->usb_buf[0]
170862306a36Sopenharmony_ci		  - (gspca_dev->usb_buf[3] << 8) - gspca_dev->usb_buf[2];
170962306a36Sopenharmony_ci		h = (gspca_dev->usb_buf[5] << 8) + gspca_dev->usb_buf[4]
171062306a36Sopenharmony_ci		  - (gspca_dev->usb_buf[7] << 8) - gspca_dev->usb_buf[6];
171162306a36Sopenharmony_ci		sd->ae_res = h * w;
171262306a36Sopenharmony_ci		if (sd->ae_res == 0)
171362306a36Sopenharmony_ci			sd->ae_res = gspca_dev->pixfmt.width *
171462306a36Sopenharmony_ci					gspca_dev->pixfmt.height;
171562306a36Sopenharmony_ci	}
171662306a36Sopenharmony_ci}
171762306a36Sopenharmony_ci
171862306a36Sopenharmony_cistatic int nw802_test_reg(struct gspca_dev *gspca_dev,
171962306a36Sopenharmony_ci			u16 index,
172062306a36Sopenharmony_ci			u8 value)
172162306a36Sopenharmony_ci{
172262306a36Sopenharmony_ci	/* write the value */
172362306a36Sopenharmony_ci	reg_w(gspca_dev, index, &value, 1);
172462306a36Sopenharmony_ci
172562306a36Sopenharmony_ci	/* read it */
172662306a36Sopenharmony_ci	reg_r(gspca_dev, index, 1);
172762306a36Sopenharmony_ci
172862306a36Sopenharmony_ci	return gspca_dev->usb_buf[0] == value;
172962306a36Sopenharmony_ci}
173062306a36Sopenharmony_ci
173162306a36Sopenharmony_ci/* this function is called at probe time */
173262306a36Sopenharmony_cistatic int sd_config(struct gspca_dev *gspca_dev,
173362306a36Sopenharmony_ci			const struct usb_device_id *id)
173462306a36Sopenharmony_ci{
173562306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
173662306a36Sopenharmony_ci
173762306a36Sopenharmony_ci	if ((unsigned) webcam >= NWEBCAMS)
173862306a36Sopenharmony_ci		webcam = 0;
173962306a36Sopenharmony_ci	sd->webcam = webcam;
174062306a36Sopenharmony_ci	gspca_dev->cam.needs_full_bandwidth = 1;
174162306a36Sopenharmony_ci	sd->ag_cnt = -1;
174262306a36Sopenharmony_ci
174362306a36Sopenharmony_ci	/*
174462306a36Sopenharmony_ci	 * Autodetect sequence inspired from some log.
174562306a36Sopenharmony_ci	 * We try to detect what registers exist or not.
174662306a36Sopenharmony_ci	 * If 0x0500 does not exist => NW802
174762306a36Sopenharmony_ci	 * If it does, test 0x109b. If it doesn't exist,
174862306a36Sopenharmony_ci	 * then it's a NW801. Else, a NW800
174962306a36Sopenharmony_ci	 * If a et31x110 (nw800 and 06a5:d800)
175062306a36Sopenharmony_ci	 *	get the sensor ID
175162306a36Sopenharmony_ci	 */
175262306a36Sopenharmony_ci	if (!nw802_test_reg(gspca_dev, 0x0500, 0x55)) {
175362306a36Sopenharmony_ci		sd->bridge = BRIDGE_NW802;
175462306a36Sopenharmony_ci		if (sd->webcam == Generic800)
175562306a36Sopenharmony_ci			sd->webcam = Generic802;
175662306a36Sopenharmony_ci	} else if (!nw802_test_reg(gspca_dev, 0x109b, 0xaa)) {
175762306a36Sopenharmony_ci		sd->bridge = BRIDGE_NW801;
175862306a36Sopenharmony_ci		if (sd->webcam == Generic800)
175962306a36Sopenharmony_ci			sd->webcam = P35u;
176062306a36Sopenharmony_ci	} else if (id->idVendor == 0x06a5 && id->idProduct == 0xd800) {
176162306a36Sopenharmony_ci		reg_r(gspca_dev, 0x0403, 1);		/* GPIO */
176262306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_PROBE, "et31x110 sensor type %02x\n",
176362306a36Sopenharmony_ci			  gspca_dev->usb_buf[0]);
176462306a36Sopenharmony_ci		switch (gspca_dev->usb_buf[0] >> 1) {
176562306a36Sopenharmony_ci		case 0x00:				/* ?? */
176662306a36Sopenharmony_ci			if (sd->webcam == Generic800)
176762306a36Sopenharmony_ci				sd->webcam = SpaceCam;
176862306a36Sopenharmony_ci			break;
176962306a36Sopenharmony_ci		case 0x01:				/* Hynix? */
177062306a36Sopenharmony_ci			if (sd->webcam == Generic800)
177162306a36Sopenharmony_ci				sd->webcam = Twinkle;
177262306a36Sopenharmony_ci			break;
177362306a36Sopenharmony_ci		case 0x0a:				/* Pixart */
177462306a36Sopenharmony_ci			if (sd->webcam == Generic800)
177562306a36Sopenharmony_ci				sd->webcam = SpaceCam2;
177662306a36Sopenharmony_ci			break;
177762306a36Sopenharmony_ci		}
177862306a36Sopenharmony_ci	}
177962306a36Sopenharmony_ci	if (webcam_chip[sd->webcam] != sd->bridge) {
178062306a36Sopenharmony_ci		pr_err("Bad webcam type %d for NW80%d\n",
178162306a36Sopenharmony_ci		       sd->webcam, sd->bridge);
178262306a36Sopenharmony_ci		gspca_dev->usb_err = -ENODEV;
178362306a36Sopenharmony_ci		return gspca_dev->usb_err;
178462306a36Sopenharmony_ci	}
178562306a36Sopenharmony_ci	gspca_dbg(gspca_dev, D_PROBE, "Bridge nw80%d - type: %d\n",
178662306a36Sopenharmony_ci		  sd->bridge, sd->webcam);
178762306a36Sopenharmony_ci
178862306a36Sopenharmony_ci	if (sd->bridge == BRIDGE_NW800) {
178962306a36Sopenharmony_ci		switch (sd->webcam) {
179062306a36Sopenharmony_ci		case DS3303u:
179162306a36Sopenharmony_ci			gspca_dev->cam.cam_mode = cif_mode;	/* qvga */
179262306a36Sopenharmony_ci			break;
179362306a36Sopenharmony_ci		default:
179462306a36Sopenharmony_ci			gspca_dev->cam.cam_mode = &cif_mode[1];	/* cif */
179562306a36Sopenharmony_ci			break;
179662306a36Sopenharmony_ci		}
179762306a36Sopenharmony_ci		gspca_dev->cam.nmodes = 1;
179862306a36Sopenharmony_ci	} else {
179962306a36Sopenharmony_ci		gspca_dev->cam.cam_mode = vga_mode;
180062306a36Sopenharmony_ci		switch (sd->webcam) {
180162306a36Sopenharmony_ci		case Kr651us:
180262306a36Sopenharmony_ci		case Proscope:
180362306a36Sopenharmony_ci		case P35u:
180462306a36Sopenharmony_ci			gspca_dev->cam.nmodes = ARRAY_SIZE(vga_mode);
180562306a36Sopenharmony_ci			break;
180662306a36Sopenharmony_ci		default:
180762306a36Sopenharmony_ci			gspca_dev->cam.nmodes = 1;	/* qvga only */
180862306a36Sopenharmony_ci			break;
180962306a36Sopenharmony_ci		}
181062306a36Sopenharmony_ci	}
181162306a36Sopenharmony_ci
181262306a36Sopenharmony_ci	return gspca_dev->usb_err;
181362306a36Sopenharmony_ci}
181462306a36Sopenharmony_ci
181562306a36Sopenharmony_ci/* this function is called at probe and resume time */
181662306a36Sopenharmony_cistatic int sd_init(struct gspca_dev *gspca_dev)
181762306a36Sopenharmony_ci{
181862306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
181962306a36Sopenharmony_ci
182062306a36Sopenharmony_ci	switch (sd->bridge) {
182162306a36Sopenharmony_ci	case BRIDGE_NW800:
182262306a36Sopenharmony_ci		switch (sd->webcam) {
182362306a36Sopenharmony_ci		case SpaceCam:
182462306a36Sopenharmony_ci			reg_w_buf(gspca_dev, spacecam_init);
182562306a36Sopenharmony_ci			break;
182662306a36Sopenharmony_ci		default:
182762306a36Sopenharmony_ci			reg_w_buf(gspca_dev, nw800_init);
182862306a36Sopenharmony_ci			break;
182962306a36Sopenharmony_ci		}
183062306a36Sopenharmony_ci		break;
183162306a36Sopenharmony_ci	default:
183262306a36Sopenharmony_ci		switch (sd->webcam) {
183362306a36Sopenharmony_ci		case Mustek300:
183462306a36Sopenharmony_ci		case P35u:
183562306a36Sopenharmony_ci		case Proscope:
183662306a36Sopenharmony_ci			reg_w_buf(gspca_dev, proscope_init);
183762306a36Sopenharmony_ci			break;
183862306a36Sopenharmony_ci		}
183962306a36Sopenharmony_ci		break;
184062306a36Sopenharmony_ci	}
184162306a36Sopenharmony_ci	return gspca_dev->usb_err;
184262306a36Sopenharmony_ci}
184362306a36Sopenharmony_ci
184462306a36Sopenharmony_ci/* -- start the camera -- */
184562306a36Sopenharmony_cistatic int sd_start(struct gspca_dev *gspca_dev)
184662306a36Sopenharmony_ci{
184762306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
184862306a36Sopenharmony_ci	const u8 *cmd;
184962306a36Sopenharmony_ci
185062306a36Sopenharmony_ci	cmd = webcam_start[sd->webcam];
185162306a36Sopenharmony_ci	reg_w_buf(gspca_dev, cmd);
185262306a36Sopenharmony_ci	switch (sd->webcam) {
185362306a36Sopenharmony_ci	case P35u:
185462306a36Sopenharmony_ci		if (gspca_dev->pixfmt.width == 320)
185562306a36Sopenharmony_ci			reg_w_buf(gspca_dev, nw801_start_qvga);
185662306a36Sopenharmony_ci		else
185762306a36Sopenharmony_ci			reg_w_buf(gspca_dev, nw801_start_vga);
185862306a36Sopenharmony_ci		reg_w_buf(gspca_dev, nw801_start_2);
185962306a36Sopenharmony_ci		break;
186062306a36Sopenharmony_ci	case Kr651us:
186162306a36Sopenharmony_ci		if (gspca_dev->pixfmt.width == 320)
186262306a36Sopenharmony_ci			reg_w_buf(gspca_dev, kr651_start_qvga);
186362306a36Sopenharmony_ci		else
186462306a36Sopenharmony_ci			reg_w_buf(gspca_dev, kr651_start_vga);
186562306a36Sopenharmony_ci		reg_w_buf(gspca_dev, kr651_start_2);
186662306a36Sopenharmony_ci		break;
186762306a36Sopenharmony_ci	case Proscope:
186862306a36Sopenharmony_ci		if (gspca_dev->pixfmt.width == 320)
186962306a36Sopenharmony_ci			reg_w_buf(gspca_dev, proscope_start_qvga);
187062306a36Sopenharmony_ci		else
187162306a36Sopenharmony_ci			reg_w_buf(gspca_dev, proscope_start_vga);
187262306a36Sopenharmony_ci		reg_w_buf(gspca_dev, proscope_start_2);
187362306a36Sopenharmony_ci		break;
187462306a36Sopenharmony_ci	}
187562306a36Sopenharmony_ci
187662306a36Sopenharmony_ci	sd->exp_too_high_cnt = 0;
187762306a36Sopenharmony_ci	sd->exp_too_low_cnt = 0;
187862306a36Sopenharmony_ci	return gspca_dev->usb_err;
187962306a36Sopenharmony_ci}
188062306a36Sopenharmony_ci
188162306a36Sopenharmony_cistatic void sd_stopN(struct gspca_dev *gspca_dev)
188262306a36Sopenharmony_ci{
188362306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
188462306a36Sopenharmony_ci	u8 value;
188562306a36Sopenharmony_ci
188662306a36Sopenharmony_ci	/* 'go' off */
188762306a36Sopenharmony_ci	if (sd->bridge != BRIDGE_NW801) {
188862306a36Sopenharmony_ci		value = 0x02;
188962306a36Sopenharmony_ci		reg_w(gspca_dev, 0x0406, &value, 1);
189062306a36Sopenharmony_ci	}
189162306a36Sopenharmony_ci
189262306a36Sopenharmony_ci	/* LED off */
189362306a36Sopenharmony_ci	switch (sd->webcam) {
189462306a36Sopenharmony_ci	case Cvideopro:
189562306a36Sopenharmony_ci	case Kr651us:
189662306a36Sopenharmony_ci	case DvcV6:
189762306a36Sopenharmony_ci	case Kritter:
189862306a36Sopenharmony_ci		value = 0xff;
189962306a36Sopenharmony_ci		break;
190062306a36Sopenharmony_ci	case Dlink350c:
190162306a36Sopenharmony_ci		value = 0x21;
190262306a36Sopenharmony_ci		break;
190362306a36Sopenharmony_ci	case SpaceCam:
190462306a36Sopenharmony_ci	case SpaceCam2:
190562306a36Sopenharmony_ci	case Proscope:
190662306a36Sopenharmony_ci	case Twinkle:
190762306a36Sopenharmony_ci		value = 0x01;
190862306a36Sopenharmony_ci		break;
190962306a36Sopenharmony_ci	default:
191062306a36Sopenharmony_ci		return;
191162306a36Sopenharmony_ci	}
191262306a36Sopenharmony_ci	reg_w(gspca_dev, 0x0404, &value, 1);
191362306a36Sopenharmony_ci}
191462306a36Sopenharmony_ci
191562306a36Sopenharmony_cistatic void sd_pkt_scan(struct gspca_dev *gspca_dev,
191662306a36Sopenharmony_ci			u8 *data,			/* isoc packet */
191762306a36Sopenharmony_ci			int len)			/* iso packet length */
191862306a36Sopenharmony_ci{
191962306a36Sopenharmony_ci	/*
192062306a36Sopenharmony_ci	 * frame header = '00 00 hh ww ss xx ff ff'
192162306a36Sopenharmony_ci	 * with:
192262306a36Sopenharmony_ci	 *	- 'hh': height / 4
192362306a36Sopenharmony_ci	 *	- 'ww': width / 4
192462306a36Sopenharmony_ci	 *	- 'ss': frame sequence number c0..dd
192562306a36Sopenharmony_ci	 */
192662306a36Sopenharmony_ci	if (data[0] == 0x00 && data[1] == 0x00
192762306a36Sopenharmony_ci	 && data[6] == 0xff && data[7] == 0xff) {
192862306a36Sopenharmony_ci		gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0);
192962306a36Sopenharmony_ci		gspca_frame_add(gspca_dev, FIRST_PACKET, data + 8, len - 8);
193062306a36Sopenharmony_ci	} else {
193162306a36Sopenharmony_ci		gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
193262306a36Sopenharmony_ci	}
193362306a36Sopenharmony_ci}
193462306a36Sopenharmony_ci
193562306a36Sopenharmony_cistatic void do_autogain(struct gspca_dev *gspca_dev)
193662306a36Sopenharmony_ci{
193762306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
193862306a36Sopenharmony_ci	int luma;
193962306a36Sopenharmony_ci
194062306a36Sopenharmony_ci	if (sd->ag_cnt < 0)
194162306a36Sopenharmony_ci		return;
194262306a36Sopenharmony_ci	if (--sd->ag_cnt >= 0)
194362306a36Sopenharmony_ci		return;
194462306a36Sopenharmony_ci	sd->ag_cnt = AG_CNT_START;
194562306a36Sopenharmony_ci
194662306a36Sopenharmony_ci	/* get the average luma */
194762306a36Sopenharmony_ci	reg_r(gspca_dev, sd->bridge == BRIDGE_NW801 ? 0x080d : 0x080c, 4);
194862306a36Sopenharmony_ci	luma = (gspca_dev->usb_buf[3] << 24) + (gspca_dev->usb_buf[2] << 16)
194962306a36Sopenharmony_ci		+ (gspca_dev->usb_buf[1] << 8) + gspca_dev->usb_buf[0];
195062306a36Sopenharmony_ci	luma /= sd->ae_res;
195162306a36Sopenharmony_ci
195262306a36Sopenharmony_ci	switch (sd->webcam) {
195362306a36Sopenharmony_ci	case P35u:
195462306a36Sopenharmony_ci		gspca_coarse_grained_expo_autogain(gspca_dev, luma, 100, 5);
195562306a36Sopenharmony_ci		break;
195662306a36Sopenharmony_ci	default:
195762306a36Sopenharmony_ci		gspca_expo_autogain(gspca_dev, luma, 100, 5, 230, 0);
195862306a36Sopenharmony_ci		break;
195962306a36Sopenharmony_ci	}
196062306a36Sopenharmony_ci}
196162306a36Sopenharmony_ci
196262306a36Sopenharmony_ci
196362306a36Sopenharmony_cistatic int sd_s_ctrl(struct v4l2_ctrl *ctrl)
196462306a36Sopenharmony_ci{
196562306a36Sopenharmony_ci	struct gspca_dev *gspca_dev =
196662306a36Sopenharmony_ci		container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
196762306a36Sopenharmony_ci
196862306a36Sopenharmony_ci	gspca_dev->usb_err = 0;
196962306a36Sopenharmony_ci
197062306a36Sopenharmony_ci	if (!gspca_dev->streaming)
197162306a36Sopenharmony_ci		return 0;
197262306a36Sopenharmony_ci
197362306a36Sopenharmony_ci	switch (ctrl->id) {
197462306a36Sopenharmony_ci	/* autogain/gain/exposure control cluster */
197562306a36Sopenharmony_ci	case V4L2_CID_AUTOGAIN:
197662306a36Sopenharmony_ci		if (ctrl->is_new)
197762306a36Sopenharmony_ci			setautogain(gspca_dev, ctrl->val);
197862306a36Sopenharmony_ci		if (!ctrl->val) {
197962306a36Sopenharmony_ci			if (gspca_dev->gain->is_new)
198062306a36Sopenharmony_ci				setgain(gspca_dev, gspca_dev->gain->val);
198162306a36Sopenharmony_ci			if (gspca_dev->exposure->is_new)
198262306a36Sopenharmony_ci				setexposure(gspca_dev,
198362306a36Sopenharmony_ci					    gspca_dev->exposure->val);
198462306a36Sopenharmony_ci		}
198562306a36Sopenharmony_ci		break;
198662306a36Sopenharmony_ci	/* Some webcams only have exposure, so handle that separately from the
198762306a36Sopenharmony_ci	   autogain/gain/exposure cluster in the previous case. */
198862306a36Sopenharmony_ci	case V4L2_CID_EXPOSURE:
198962306a36Sopenharmony_ci		setexposure(gspca_dev, gspca_dev->exposure->val);
199062306a36Sopenharmony_ci		break;
199162306a36Sopenharmony_ci	}
199262306a36Sopenharmony_ci	return gspca_dev->usb_err;
199362306a36Sopenharmony_ci}
199462306a36Sopenharmony_ci
199562306a36Sopenharmony_cistatic const struct v4l2_ctrl_ops sd_ctrl_ops = {
199662306a36Sopenharmony_ci	.s_ctrl = sd_s_ctrl,
199762306a36Sopenharmony_ci};
199862306a36Sopenharmony_ci
199962306a36Sopenharmony_cistatic int sd_init_controls(struct gspca_dev *gspca_dev)
200062306a36Sopenharmony_ci{
200162306a36Sopenharmony_ci	struct sd *sd = (struct sd *)gspca_dev;
200262306a36Sopenharmony_ci	struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler;
200362306a36Sopenharmony_ci
200462306a36Sopenharmony_ci	gspca_dev->vdev.ctrl_handler = hdl;
200562306a36Sopenharmony_ci	v4l2_ctrl_handler_init(hdl, 3);
200662306a36Sopenharmony_ci	switch (sd->webcam) {
200762306a36Sopenharmony_ci	case P35u:
200862306a36Sopenharmony_ci		gspca_dev->autogain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
200962306a36Sopenharmony_ci			V4L2_CID_AUTOGAIN, 0, 1, 1, 1);
201062306a36Sopenharmony_ci		/* For P35u choose coarse expo auto gain function gain minimum,
201162306a36Sopenharmony_ci		 * to avoid a large settings jump the first auto adjustment */
201262306a36Sopenharmony_ci		gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
201362306a36Sopenharmony_ci			V4L2_CID_GAIN, 0, 127, 1, 127 / 5 * 2);
201462306a36Sopenharmony_ci		gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
201562306a36Sopenharmony_ci			V4L2_CID_EXPOSURE, 0, 9, 1, 9);
201662306a36Sopenharmony_ci		break;
201762306a36Sopenharmony_ci	case Kr651us:
201862306a36Sopenharmony_ci		gspca_dev->autogain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
201962306a36Sopenharmony_ci			V4L2_CID_AUTOGAIN, 0, 1, 1, 1);
202062306a36Sopenharmony_ci		gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
202162306a36Sopenharmony_ci			V4L2_CID_GAIN, 0, 253, 1, 128);
202262306a36Sopenharmony_ci		fallthrough;
202362306a36Sopenharmony_ci	case Cvideopro:
202462306a36Sopenharmony_ci	case DvcV6:
202562306a36Sopenharmony_ci	case Kritter:
202662306a36Sopenharmony_ci		gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
202762306a36Sopenharmony_ci			V4L2_CID_EXPOSURE, 0, 315, 1, 150);
202862306a36Sopenharmony_ci		break;
202962306a36Sopenharmony_ci	default:
203062306a36Sopenharmony_ci		break;
203162306a36Sopenharmony_ci	}
203262306a36Sopenharmony_ci
203362306a36Sopenharmony_ci	if (hdl->error) {
203462306a36Sopenharmony_ci		pr_err("Could not initialize controls\n");
203562306a36Sopenharmony_ci		return hdl->error;
203662306a36Sopenharmony_ci	}
203762306a36Sopenharmony_ci	if (gspca_dev->autogain)
203862306a36Sopenharmony_ci		v4l2_ctrl_auto_cluster(3, &gspca_dev->autogain, 0, false);
203962306a36Sopenharmony_ci	return 0;
204062306a36Sopenharmony_ci}
204162306a36Sopenharmony_ci
204262306a36Sopenharmony_ci/* sub-driver description */
204362306a36Sopenharmony_cistatic const struct sd_desc sd_desc = {
204462306a36Sopenharmony_ci	.name = MODULE_NAME,
204562306a36Sopenharmony_ci	.config = sd_config,
204662306a36Sopenharmony_ci	.init = sd_init,
204762306a36Sopenharmony_ci	.init_controls = sd_init_controls,
204862306a36Sopenharmony_ci	.start = sd_start,
204962306a36Sopenharmony_ci	.stopN = sd_stopN,
205062306a36Sopenharmony_ci	.pkt_scan = sd_pkt_scan,
205162306a36Sopenharmony_ci	.dq_callback = do_autogain,
205262306a36Sopenharmony_ci};
205362306a36Sopenharmony_ci
205462306a36Sopenharmony_ci/* -- module initialisation -- */
205562306a36Sopenharmony_cistatic const struct usb_device_id device_table[] = {
205662306a36Sopenharmony_ci	{USB_DEVICE(0x046d, 0xd001)},
205762306a36Sopenharmony_ci	{USB_DEVICE(0x0502, 0xd001)},
205862306a36Sopenharmony_ci	{USB_DEVICE(0x052b, 0xd001)},
205962306a36Sopenharmony_ci	{USB_DEVICE(0x055f, 0xd001)},
206062306a36Sopenharmony_ci	{USB_DEVICE(0x06a5, 0x0000)},
206162306a36Sopenharmony_ci	{USB_DEVICE(0x06a5, 0xd001)},
206262306a36Sopenharmony_ci	{USB_DEVICE(0x06a5, 0xd800)},
206362306a36Sopenharmony_ci	{USB_DEVICE(0x06be, 0xd001)},
206462306a36Sopenharmony_ci	{USB_DEVICE(0x0728, 0xd001)},
206562306a36Sopenharmony_ci	{}
206662306a36Sopenharmony_ci};
206762306a36Sopenharmony_ciMODULE_DEVICE_TABLE(usb, device_table);
206862306a36Sopenharmony_ci
206962306a36Sopenharmony_ci/* -- device connect -- */
207062306a36Sopenharmony_cistatic int sd_probe(struct usb_interface *intf,
207162306a36Sopenharmony_ci			const struct usb_device_id *id)
207262306a36Sopenharmony_ci{
207362306a36Sopenharmony_ci	return gspca_dev_probe(intf, id, &sd_desc, sizeof(struct sd),
207462306a36Sopenharmony_ci				THIS_MODULE);
207562306a36Sopenharmony_ci}
207662306a36Sopenharmony_ci
207762306a36Sopenharmony_cistatic struct usb_driver sd_driver = {
207862306a36Sopenharmony_ci	.name = MODULE_NAME,
207962306a36Sopenharmony_ci	.id_table = device_table,
208062306a36Sopenharmony_ci	.probe = sd_probe,
208162306a36Sopenharmony_ci	.disconnect = gspca_disconnect,
208262306a36Sopenharmony_ci#ifdef CONFIG_PM
208362306a36Sopenharmony_ci	.suspend = gspca_suspend,
208462306a36Sopenharmony_ci	.resume = gspca_resume,
208562306a36Sopenharmony_ci	.reset_resume = gspca_resume,
208662306a36Sopenharmony_ci#endif
208762306a36Sopenharmony_ci};
208862306a36Sopenharmony_ci
208962306a36Sopenharmony_cimodule_usb_driver(sd_driver);
209062306a36Sopenharmony_ci
209162306a36Sopenharmony_cimodule_param(webcam, int, 0644);
209262306a36Sopenharmony_ciMODULE_PARM_DESC(webcam,
209362306a36Sopenharmony_ci	"Webcam type\n"
209462306a36Sopenharmony_ci	"0: generic\n"
209562306a36Sopenharmony_ci	"1: Trust 120 SpaceCam\n"
209662306a36Sopenharmony_ci	"2: other Trust 120 SpaceCam\n"
209762306a36Sopenharmony_ci	"3: Conceptronic Video Pro\n"
209862306a36Sopenharmony_ci	"4: D-link dru-350c\n"
209962306a36Sopenharmony_ci	"5: Plustek Opticam 500U\n"
210062306a36Sopenharmony_ci	"6: Panasonic GP-KR651US\n"
210162306a36Sopenharmony_ci	"7: iRez Kritter\n"
210262306a36Sopenharmony_ci	"8: Mustek Wcam 300 mini\n"
210362306a36Sopenharmony_ci	"9: Scalar USB Microscope M2 (Proscope)\n"
210462306a36Sopenharmony_ci	"10: Divio Chicony TwinkleCam\n"
210562306a36Sopenharmony_ci	"11: DVC-V6\n");
2106