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