oleavr-rgl-a500-mini-linux-.../drivers/media/platform/sunxi-vfe/device/s5k4ec.c
Ole André Vadla Ravnås 169c65d57e Initial commit
2022-05-07 01:01:45 +02:00

6300 lines
214 KiB
C
Executable file
Raw Permalink Blame History

/*
* A V4L2 driver for samsung s5k4ec cameras.
*
*/
#include <linux/init.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/i2c.h>
#include <linux/delay.h>
#include <linux/videodev2.h>
#include <linux/clk.h>
#include <media/v4l2-device.h>
#include <media/v4l2-chip-ident.h>
#include <media/v4l2-mediabus.h>
#include <linux/io.h>
#include "camera.h"
#include "sensor_helper.h"
MODULE_AUTHOR("raymonxiu");
MODULE_DESCRIPTION("A low-level driver for samsung s5k4ec sensors");
MODULE_LICENSE("GPL");
//for internel driver debug
#define DEV_DBG_EN 0
#if(DEV_DBG_EN == 1)
#define vfe_dev_dbg(x,arg...) printk("[OV5640]"x,##arg)
#else
#define vfe_dev_dbg(x,arg...)
#endif
#define vfe_dev_err(x,arg...) printk("[OV5640]"x,##arg)
#define vfe_dev_print(x,arg...) printk("[OV5640]"x,##arg)
#define LOG_ERR_RET(x) { \
int ret; \
ret = x; \
if(ret < 0) {\
vfe_dev_err("error at %s\n",__func__); \
return ret; \
} \
}
//define module timing
#define MCLK (24*1000*1000)
#define VREF_POL V4L2_MBUS_VSYNC_ACTIVE_HIGH
#define HREF_POL V4L2_MBUS_HSYNC_ACTIVE_HIGH
#define CLK_POL V4L2_MBUS_PCLK_SAMPLE_RISING
#define V4L2_IDENT_SENSOR 0x4ec
#define CONTINUEOUS_AF
#define AF_WIN_NEW_COORD
unsigned int coarse_af_pd=0;
/*
* Our nominal (default) frame rate.
*/
#define SENSOR_FRAME_RATE 30
/*
* The s5k4ec sits on i2c with ID 0x5a
*/
#define I2C_ADDR 0x5a
#define SENSOR_NAME "s5k4ec"
/* Registers */
static int sensor_s_band_filter(struct v4l2_subdev *sd,
enum v4l2_power_line_frequency value);
/*
* Information we maintain about a known sensor.
*/
struct sensor_format_struct; /* coming later */
struct cfg_array { /* coming later */
struct regval_list * regs;
int size;
};
static inline struct sensor_info *to_state(struct v4l2_subdev *sd)
{
return container_of(sd, struct sensor_info, sd);
}
/*
* The default register settings
*
*/
static struct regval_list sensor_default_regs[] = {
//==================================================================================
// 00.History
//==================================================================================
//2010 : EVT1.1
//20110429 : LSI CSE Standard
//20110728 : Sequence Changed
//20110728 : ESD Check Register Address Changed
//20110829 : TnP Changed by S.Y.Lee
//20120104 : init Parm Update sequence changed
//20120201 : Flash<73><68> <20>ֺ<EFBFBD><D6BA><EFBFBD> Green Noise <20><><EFBFBD><EFBFBD> setting
//20120228 : Add Brightness Block
//==================================================================================
//==================================================================================
// 01.Start Setting
//==================================================================================
{0xFCFC, 0xD000},
{0x0010, 0x0001}, //S/W Reset
{0x1030, 0x0000}, //contint_host_int
{0x0014, 0x0001}, //sw_load_complete - Release CORE (Arm) from reset state
{0xffff, 0x0010}, //Delay 10ms
//==================================================================================
// 02.ETC Setting
//==================================================================================
{0x0028, 0xD000}, //Driving Current
{0x002A, 0x1082},
{0x0f12, 0x0000}, //cregs_d0_d4_cd10 //D4[9:8], D3[7:6], D2[5:4], D1[3:2], D0[1:0]
{0x002A, 0x1084},
{0x0f12, 0x0000}, //cregs_d5_d9_cd10 //D9[9:8], D8[7:6], D7[5:4], D6[3:2], D5[1:0]
{0x002A, 0x1088},
{0x0f12, 0x0000}, //cregs_clks_output_cd10 //SDA[11:10], SCL[9:8], PCLK[7:6], VSYNC[3:2], HSYNC[1:0]
//==================================================================================
// 03.Analog Setting1 & ASP Control
//==================================================================================
//This register is for FACTORY ONLY.
//If you change it without prior notification
//YOU are RESPONSIBLE for the FAILURE that will happen in the future
{0x0028, 0xD000},
{0x002A, 0x007A},
{0x0f12, 0x0000},
{0x002A, 0xE406}, //[7]f_ladlc_en [6:5]f max [4]fadlc_en [3:2]L max [1]ladlc_en [0]adlc_ch_sel
{0x0F12, 0x0092},
{0x002A, 0xE410},
{0x0F12, 0x3804}, //[15:8]fadlc_filter_co_b, [7:0]fadlc_filter_co_a
{0x002A, 0xE41A},
{0x0F12, 0x0010},
{0x002A, 0xE420},
{0x0F12, 0x0003}, //adlc_fadlc_filter_refresh
{0x0F12, 0x0060}, //adlc_filter_level_diff_threshold
{0x002A, 0xE42E},
{0x0F12, 0x0004}, //dithered l-ADLC(4bit)
{0x002A, 0xF400},
{0x0F12, 0x5A3C}, //[15:8]stx_width, [7:0]dstx_width
{0x0F12, 0x0023}, //[14]binning_test [13]gain_mode [11:12]row_id [10]cfpn_test [9]pd_pix [8]teg_en, [7]adc_res, [6]smp_en, [5]ldb_en, [4]ld_en, [3]clp_en [2]srx_en, [1]dshut_en, [0]dcds_en
{0x0F12, 0x8080}, //CDS option
{0x0F12, 0x03AF}, //[11:6]rst_mx, [5:0]sig_mx
{0x0F12, 0x000A}, //Avg mode
{0x0F12, 0xAA54}, //x1~x1.49:No MS, x1.5~x3.99:MS2, x4~x16:MS4
{0x0F12, 0x0040}, //RMP option [6]1: RES gain
{0x0F12, 0x464E}, //[14]msoff_en, [13:8]off_rst, [7:0]adc_sat
{0x0F12, 0x0240}, //bist_sig_width_e
{0x0F12, 0x0240}, //bist_sig_width_o
{0x0F12, 0x0040}, //[9]dbs_bist_en, [8:0]bist_rst_width
{0x0F12, 0x1000}, //[15]aac_en, [14]GCLK_DIV2_EN, [13:10]dl_cont [9:8]dbs_mode, [7:0]dbs_option
{0x0F12, 0x55FF}, //bias [15:12]pix, [11:8]pix_bst [7:4]comp2, [3:0]comp1
{0x0F12, 0xD000}, //[15:8]clp_lvl, [7:0]ref_option, [5]pix_bst_en
{0x0F12, 0x0010}, //[7:0]monit
{0x0F12, 0x0202}, //[15:8]dbr_tune_tgsl, [7:0]dbr_tune_pix
{0x0F12, 0x0401}, //[15:8]dbr_tune_ntg, [7:0]dbr_tune_rg
{0x0F12, 0x0022}, //[15:8]reg_option, [7:4]rosc_tune_ncp, [3:0]rosc_tune_cp
{0x0F12, 0x0088}, //PD [8]inrush_ctrl, [7]fblv, [6]reg_ntg, [5]reg_tgsl, [4]reg_rg, [3]reg_pix, [2]ncp_rosc, [1]cp_rosc, [0]cp
{0x0F12, 0x009F}, //[9]capa_ctrl_en, [8:7]fb_lv, [6:5]dbr_clk_sel, [4:0]cp_capa
{0x0F12, 0x0000}, //[15:0]blst_en_cintr
{0x0F12, 0x1800}, //[11]blst_en, [10]rfpn_test, [9]sl_off, [8]tx_off, [7:0]rdv_option
{0x0F12, 0x0088}, //[15:0]pmg_reg_tune
{0x0F12, 0x0000}, //[15:1]analog_dummy, [0]pd_reg_test
{0x0F12, 0x2428}, //[13:11]srx_gap1, [10:8]srx_gap0, [7:0]stx_gap
{0x0F12, 0x0000}, //[0]atx_option
{0x0F12, 0x03EE}, //aig_avg_half
{0x0F12, 0x0000}, //[0]hvs_test_reg
{0x0F12, 0x0000}, //[0]dbus_bist_auto
{0x0F12, 0x0000}, //[7:0]dbr_option
{0x002A, 0xF552},
{0x0F12, 0x0708}, //[7:0]lat_st, [15:8]lat_width
{0x0F12, 0x080C}, //[7:0]hold_st, [15:8]hold_width
//=================================================================================
// 04.Trap and Patch
//=================================================================================
// Start of Patch data
{0x0028, 0x7000},
{0x002A, 0x3AF8},
{0x0F12, 0xB5F8}, // 70003AF8
{0x0F12, 0x4B44}, // 70003AFA
{0x0F12, 0x4944}, // 70003AFC
{0x0F12, 0x4845}, // 70003AFE
{0x0F12, 0x2200}, // 70003B00
{0x0F12, 0xC008}, // 70003B02
{0x0F12, 0x6001}, // 70003B04
{0x0F12, 0x4944}, // 70003B06
{0x0F12, 0x4844}, // 70003B08
{0x0F12, 0x2401}, // 70003B0A
{0x0F12, 0xF000}, // 70003B0C
{0x0F12, 0xFCA4}, // 70003B0E
{0x0F12, 0x4943}, // 70003B10
{0x0F12, 0x4844}, // 70003B12
{0x0F12, 0x2702}, // 70003B14
{0x0F12, 0x0022}, // 70003B16
{0x0F12, 0xF000}, // 70003B18
{0x0F12, 0xFC9E}, // 70003B1A
{0x0F12, 0x0260}, // 70003B1C
{0x0F12, 0x4C42}, // 70003B1E
{0x0F12, 0x8020}, // 70003B20
{0x0F12, 0x2600}, // 70003B22
{0x0F12, 0x8066}, // 70003B24
{0x0F12, 0x4941}, // 70003B26
{0x0F12, 0x4841}, // 70003B28
{0x0F12, 0x6041}, // 70003B2A
{0x0F12, 0x4941}, // 70003B2C
{0x0F12, 0x4842}, // 70003B2E
{0x0F12, 0x003A}, // 70003B30
{0x0F12, 0x2503}, // 70003B32
{0x0F12, 0xF000}, // 70003B34
{0x0F12, 0xFC90}, // 70003B36
{0x0F12, 0x483D}, // 70003B38
{0x0F12, 0x4940}, // 70003B3A
{0x0F12, 0x30C0}, // 70003B3C
{0x0F12, 0x63C1}, // 70003B3E
{0x0F12, 0x4F3B}, // 70003B40
{0x0F12, 0x483F}, // 70003B42
{0x0F12, 0x3F80}, // 70003B44
{0x0F12, 0x6438}, // 70003B46
{0x0F12, 0x483E}, // 70003B48
{0x0F12, 0x493F}, // 70003B4A
{0x0F12, 0x6388}, // 70003B4C
{0x0F12, 0x002A}, // 70003B4E
{0x0F12, 0x493E}, // 70003B50
{0x0F12, 0x483F}, // 70003B52
{0x0F12, 0x2504}, // 70003B54
{0x0F12, 0xF000}, // 70003B56
{0x0F12, 0xFC7F}, // 70003B58
{0x0F12, 0x002A}, // 70003B5A
{0x0F12, 0x493D}, // 70003B5C
{0x0F12, 0x483E}, // 70003B5E
{0x0F12, 0x2505}, // 70003B60
{0x0F12, 0xF000}, // 70003B62
{0x0F12, 0xF8A7}, // 70003B64
{0x0F12, 0x483C}, // 70003B66
{0x0F12, 0x002A}, // 70003B68
{0x0F12, 0x493C}, // 70003B6A
{0x0F12, 0x2506}, // 70003B6C
{0x0F12, 0x1D80}, // 70003B6E
{0x0F12, 0xF000}, // 70003B70
{0x0F12, 0xF8A0}, // 70003B72
{0x0F12, 0x4838}, // 70003B74
{0x0F12, 0x002A}, // 70003B76
{0x0F12, 0x4939}, // 70003B78
{0x0F12, 0x2507}, // 70003B7A
{0x0F12, 0x300C}, // 70003B7C
{0x0F12, 0xF000}, // 70003B7E
{0x0F12, 0xF899}, // 70003B80
{0x0F12, 0x4835}, // 70003B82
{0x0F12, 0x002A}, // 70003B84
{0x0F12, 0x4937}, // 70003B86
{0x0F12, 0x2508}, // 70003B88
{0x0F12, 0x3010}, // 70003B8A
{0x0F12, 0xF000}, // 70003B8C
{0x0F12, 0xF892}, // 70003B8E
{0x0F12, 0x002A}, // 70003B90
{0x0F12, 0x4935}, // 70003B92
{0x0F12, 0x4835}, // 70003B94
{0x0F12, 0x2509}, // 70003B96
{0x0F12, 0xF000}, // 70003B98
{0x0F12, 0xFC5E}, // 70003B9A
{0x0F12, 0x002A}, // 70003B9C
{0x0F12, 0x4934}, // 70003B9E
{0x0F12, 0x4834}, // 70003BA0
{0x0F12, 0x250A}, // 70003BA2
{0x0F12, 0xF000}, // 70003BA4
{0x0F12, 0xFC58}, // 70003BA6
{0x0F12, 0x002A}, // 70003BA8
{0x0F12, 0x4933}, // 70003BAA
{0x0F12, 0x4833}, // 70003BAC
{0x0F12, 0x250B}, // 70003BAE
{0x0F12, 0xF000}, // 70003BB0
{0x0F12, 0xFC52}, // 70003BB2
{0x0F12, 0x002A}, // 70003BB4
{0x0F12, 0x4932}, // 70003BB6
{0x0F12, 0x4832}, // 70003BB8
{0x0F12, 0x250C}, // 70003BBA
{0x0F12, 0xF000}, // 70003BBC
{0x0F12, 0xFC4C}, // 70003BBE
{0x0F12, 0x002A}, // 70003BC0
{0x0F12, 0x4931}, // 70003BC2
{0x0F12, 0x4831}, // 70003BC4
{0x0F12, 0x250D}, // 70003BC6
{0x0F12, 0xF000}, // 70003BC8
{0x0F12, 0xFC46}, // 70003BCA
{0x0F12, 0x002A}, // 70003BCC
{0x0F12, 0x4930}, // 70003BCE
{0x0F12, 0x4830}, // 70003BD0
{0x0F12, 0x250E}, // 70003BD2
{0x0F12, 0xF000}, // 70003BD4
{0x0F12, 0xFC40}, // 70003BD6
{0x0F12, 0x002A}, // 70003BD8
{0x0F12, 0x492F}, // 70003BDA
{0x0F12, 0x482F}, // 70003BDC
{0x0F12, 0x250F}, // 70003BDE
{0x0F12, 0xF000}, // 70003BE0
{0x0F12, 0xFC3A}, // 70003BE2
{0x0F12, 0x8626}, // 70003BE4
{0x0F12, 0x20FF}, // 70003BE6
{0x0F12, 0x1C40}, // 70003BE8
{0x0F12, 0x8660}, // 70003BEA
{0x0F12, 0x482C}, // 70003BEC
{0x0F12, 0x64F8}, // 70003BEE
{0x0F12, 0x492C}, // 70003BF0
{0x0F12, 0x482D}, // 70003BF2
{0x0F12, 0x2410}, // 70003BF4
{0x0F12, 0x002A}, // 70003BF6
{0x0F12, 0xF000}, // 70003BF8
{0x0F12, 0xFC2E}, // 70003BFA
{0x0F12, 0x492B}, // 70003BFC
{0x0F12, 0x482C}, // 70003BFE
{0x0F12, 0x0022}, // 70003C00
{0x0F12, 0xF000}, // 70003C02
{0x0F12, 0xFC29}, // 70003C04
{0x0F12, 0xBCF8}, // 70003C06
{0x0F12, 0xBC08}, // 70003C08
{0x0F12, 0x4718}, // 70003C0A
{0x0F12, 0x019C}, // 70003C0C
{0x0F12, 0x4EC2}, // 70003C0E
{0x0F12, 0x73FF}, // 70003C10
{0x0F12, 0x0000}, // 70003C12
{0x0F12, 0x1F90}, // 70003C14
{0x0F12, 0x7000}, // 70003C16
{0x0F12, 0x3CCD}, // 70003C18
{0x0F12, 0x7000}, // 70003C1A
{0x0F12, 0xE38B}, // 70003C1C
{0x0F12, 0x0000}, // 70003C1E
{0x0F12, 0x3D05}, // 70003C20
{0x0F12, 0x7000}, // 70003C22
{0x0F12, 0xC3B1}, // 70003C24
{0x0F12, 0x0000}, // 70003C26
{0x0F12, 0x4780}, // 70003C28
{0x0F12, 0x7000}, // 70003C2A
{0x0F12, 0x3D63}, // 70003C2C
{0x0F12, 0x7000}, // 70003C2E
{0x0F12, 0x0080}, // 70003C30
{0x0F12, 0x7000}, // 70003C32
{0x0F12, 0x3D9F}, // 70003C34
{0x0F12, 0x7000}, // 70003C36
{0x0F12, 0xB49D}, // 70003C38
{0x0F12, 0x0000}, // 70003C3A
{0x0F12, 0x3E4B}, // 70003C3C
{0x0F12, 0x7000}, // 70003C3E
{0x0F12, 0x3DFF}, // 70003C40
{0x0F12, 0x7000}, // 70003C42
{0x0F12, 0xFFFF}, // 70003C44
{0x0F12, 0x00FF}, // 70003C46
{0x0F12, 0x17E0}, // 70003C48
{0x0F12, 0x7000}, // 70003C4A
{0x0F12, 0x3FC7}, // 70003C4C
{0x0F12, 0x7000}, // 70003C4E
{0x0F12, 0x053D}, // 70003C50
{0x0F12, 0x0000}, // 70003C52
{0x0F12, 0x0000}, // 70003C54
{0x0F12, 0x0A89}, // 70003C56
{0x0F12, 0x6CD2}, // 70003C58
{0x0F12, 0x0000}, // 70003C5A
{0x0F12, 0x02C9}, // 70003C5C
{0x0F12, 0x0000}, // 70003C5E
{0x0F12, 0x0000}, // 70003C60
{0x0F12, 0x0A9A}, // 70003C62
{0x0F12, 0x0000}, // 70003C64
{0x0F12, 0x02D2}, // 70003C66
{0x0F12, 0x4015}, // 70003C68
{0x0F12, 0x7000}, // 70003C6A
{0x0F12, 0x9E65}, // 70003C6C
{0x0F12, 0x0000}, // 70003C6E
{0x0F12, 0x4089}, // 70003C70
{0x0F12, 0x7000}, // 70003C72
{0x0F12, 0x7C49}, // 70003C74
{0x0F12, 0x0000}, // 70003C76
{0x0F12, 0x40FD}, // 70003C78
{0x0F12, 0x7000}, // 70003C7A
{0x0F12, 0x7C63}, // 70003C7C
{0x0F12, 0x0000}, // 70003C7E
{0x0F12, 0x4119}, // 70003C80
{0x0F12, 0x7000}, // 70003C82
{0x0F12, 0x8F01}, // 70003C84
{0x0F12, 0x0000}, // 70003C86
{0x0F12, 0x41BB}, // 70003C88
{0x0F12, 0x7000}, // 70003C8A
{0x0F12, 0x7F3F}, // 70003C8C
{0x0F12, 0x0000}, // 70003C8E
{0x0F12, 0x4249}, // 70003C90
{0x0F12, 0x7000}, // 70003C92
{0x0F12, 0x98C5}, // 70003C94
{0x0F12, 0x0000}, // 70003C96
{0x0F12, 0x43B5}, // 70003C98
{0x0F12, 0x7000}, // 70003C9A
{0x0F12, 0x6099}, // 70003C9C
{0x0F12, 0x0000}, // 70003C9E
{0x0F12, 0x430F}, // 70003CA0
{0x0F12, 0x7000}, // 70003CA2
{0x0F12, 0x4365}, // 70003CA4
{0x0F12, 0x7000}, // 70003CA6
{0x0F12, 0xA70B}, // 70003CA8
{0x0F12, 0x0000}, // 70003CAA
{0x0F12, 0x4387}, // 70003CAC
{0x0F12, 0x7000}, // 70003CAE
{0x0F12, 0x400D}, // 70003CB0
{0x0F12, 0x0000}, // 70003CB2
{0x0F12, 0xB570}, // 70003CB4
{0x0F12, 0x000C}, // 70003CB6
{0x0F12, 0x0015}, // 70003CB8
{0x0F12, 0x0029}, // 70003CBA
{0x0F12, 0xF000}, // 70003CBC
{0x0F12, 0xFBD4}, // 70003CBE
{0x0F12, 0x49F8}, // 70003CC0
{0x0F12, 0x00A8}, // 70003CC2
{0x0F12, 0x500C}, // 70003CC4
{0x0F12, 0xBC70}, // 70003CC6
{0x0F12, 0xBC08}, // 70003CC8
{0x0F12, 0x4718}, // 70003CCA
{0x0F12, 0x6808}, // 70003CCC
{0x0F12, 0x0400}, // 70003CCE
{0x0F12, 0x0C00}, // 70003CD0
{0x0F12, 0x6849}, // 70003CD2
{0x0F12, 0x0409}, // 70003CD4
{0x0F12, 0x0C09}, // 70003CD6
{0x0F12, 0x4AF3}, // 70003CD8
{0x0F12, 0x8992}, // 70003CDA
{0x0F12, 0x2A00}, // 70003CDC
{0x0F12, 0xD00D}, // 70003CDE
{0x0F12, 0x2300}, // 70003CE0
{0x0F12, 0x1A89}, // 70003CE2
{0x0F12, 0xD400}, // 70003CE4
{0x0F12, 0x000B}, // 70003CE6
{0x0F12, 0x0419}, // 70003CE8
{0x0F12, 0x0C09}, // 70003CEA
{0x0F12, 0x23FF}, // 70003CEC
{0x0F12, 0x33C1}, // 70003CEE
{0x0F12, 0x1810}, // 70003CF0
{0x0F12, 0x4298}, // 70003CF2
{0x0F12, 0xD800}, // 70003CF4
{0x0F12, 0x0003}, // 70003CF6
{0x0F12, 0x0418}, // 70003CF8
{0x0F12, 0x0C00}, // 70003CFA
{0x0F12, 0x4AEB}, // 70003CFC
{0x0F12, 0x8150}, // 70003CFE
{0x0F12, 0x8191}, // 70003D00
{0x0F12, 0x4770}, // 70003D02
{0x0F12, 0xB5F3}, // 70003D04
{0x0F12, 0x0004}, // 70003D06
{0x0F12, 0xB081}, // 70003D08
{0x0F12, 0x9802}, // 70003D0A
{0x0F12, 0x6800}, // 70003D0C
{0x0F12, 0x0600}, // 70003D0E
{0x0F12, 0x0E00}, // 70003D10
{0x0F12, 0x2201}, // 70003D12
{0x0F12, 0x0015}, // 70003D14
{0x0F12, 0x0021}, // 70003D16
{0x0F12, 0x3910}, // 70003D18
{0x0F12, 0x408A}, // 70003D1A
{0x0F12, 0x40A5}, // 70003D1C
{0x0F12, 0x4FE4}, // 70003D1E
{0x0F12, 0x0016}, // 70003D20
{0x0F12, 0x2C10}, // 70003D22
{0x0F12, 0xDA03}, // 70003D24
{0x0F12, 0x8839}, // 70003D26
{0x0F12, 0x43A9}, // 70003D28
{0x0F12, 0x8039}, // 70003D2A
{0x0F12, 0xE002}, // 70003D2C
{0x0F12, 0x8879}, // 70003D2E
{0x0F12, 0x43B1}, // 70003D30
{0x0F12, 0x8079}, // 70003D32
{0x0F12, 0xF000}, // 70003D34
{0x0F12, 0xFBA0}, // 70003D36
{0x0F12, 0x2C10}, // 70003D38
{0x0F12, 0xDA03}, // 70003D3A
{0x0F12, 0x8839}, // 70003D3C
{0x0F12, 0x4329}, // 70003D3E
{0x0F12, 0x8039}, // 70003D40
{0x0F12, 0xE002}, // 70003D42
{0x0F12, 0x8879}, // 70003D44
{0x0F12, 0x4331}, // 70003D46
{0x0F12, 0x8079}, // 70003D48
{0x0F12, 0x49DA}, // 70003D4A
{0x0F12, 0x8809}, // 70003D4C
{0x0F12, 0x2900}, // 70003D4E
{0x0F12, 0xD102}, // 70003D50
{0x0F12, 0xF000}, // 70003D52
{0x0F12, 0xFB99}, // 70003D54
{0x0F12, 0x2000}, // 70003D56
{0x0F12, 0x9902}, // 70003D58
{0x0F12, 0x6008}, // 70003D5A
{0x0F12, 0xBCFE}, // 70003D5C
{0x0F12, 0xBC08}, // 70003D5E
{0x0F12, 0x4718}, // 70003D60
{0x0F12, 0xB538}, // 70003D62
{0x0F12, 0x9C04}, // 70003D64
{0x0F12, 0x0015}, // 70003D66
{0x0F12, 0x002A}, // 70003D68
{0x0F12, 0x9400}, // 70003D6A
{0x0F12, 0xF000}, // 70003D6C
{0x0F12, 0xFB94}, // 70003D6E
{0x0F12, 0x4AD1}, // 70003D70
{0x0F12, 0x8811}, // 70003D72
{0x0F12, 0x2900}, // 70003D74
{0x0F12, 0xD00F}, // 70003D76
{0x0F12, 0x8820}, // 70003D78
{0x0F12, 0x4281}, // 70003D7A
{0x0F12, 0xD20C}, // 70003D7C
{0x0F12, 0x8861}, // 70003D7E
{0x0F12, 0x8853}, // 70003D80
{0x0F12, 0x4299}, // 70003D82
{0x0F12, 0xD200}, // 70003D84
{0x0F12, 0x1E40}, // 70003D86
{0x0F12, 0x0400}, // 70003D88
{0x0F12, 0x0C00}, // 70003D8A
{0x0F12, 0x8020}, // 70003D8C
{0x0F12, 0x8851}, // 70003D8E
{0x0F12, 0x8061}, // 70003D90
{0x0F12, 0x4368}, // 70003D92
{0x0F12, 0x1840}, // 70003D94
{0x0F12, 0x6060}, // 70003D96
{0x0F12, 0xBC38}, // 70003D98
{0x0F12, 0xBC08}, // 70003D9A
{0x0F12, 0x4718}, // 70003D9C
{0x0F12, 0xB5F8}, // 70003D9E
{0x0F12, 0x0004}, // 70003DA0
{0x0F12, 0x6808}, // 70003DA2
{0x0F12, 0x0400}, // 70003DA4
{0x0F12, 0x0C00}, // 70003DA6
{0x0F12, 0x2201}, // 70003DA8
{0x0F12, 0x0015}, // 70003DAA
{0x0F12, 0x0021}, // 70003DAC
{0x0F12, 0x3910}, // 70003DAE
{0x0F12, 0x408A}, // 70003DB0
{0x0F12, 0x40A5}, // 70003DB2
{0x0F12, 0x4FBE}, // 70003DB4
{0x0F12, 0x0016}, // 70003DB6
{0x0F12, 0x2C10}, // 70003DB8
{0x0F12, 0xDA03}, // 70003DBA
{0x0F12, 0x8839}, // 70003DBC
{0x0F12, 0x43A9}, // 70003DBE
{0x0F12, 0x8039}, // 70003DC0
{0x0F12, 0xE002}, // 70003DC2
{0x0F12, 0x8879}, // 70003DC4
{0x0F12, 0x43B1}, // 70003DC6
{0x0F12, 0x8079}, // 70003DC8
{0x0F12, 0xF000}, // 70003DCA
{0x0F12, 0xFB6D}, // 70003DCC
{0x0F12, 0x2C10}, // 70003DCE
{0x0F12, 0xDA03}, // 70003DD0
{0x0F12, 0x8838}, // 70003DD2
{0x0F12, 0x4328}, // 70003DD4
{0x0F12, 0x8038}, // 70003DD6
{0x0F12, 0xE002}, // 70003DD8
{0x0F12, 0x8878}, // 70003DDA
{0x0F12, 0x4330}, // 70003DDC
{0x0F12, 0x8078}, // 70003DDE
{0x0F12, 0x48B6}, // 70003DE0
{0x0F12, 0x8800}, // 70003DE2
{0x0F12, 0x0400}, // 70003DE4
{0x0F12, 0xD507}, // 70003DE6
{0x0F12, 0x4BB5}, // 70003DE8
{0x0F12, 0x7819}, // 70003DEA
{0x0F12, 0x4AB5}, // 70003DEC
{0x0F12, 0x7810}, // 70003DEE
{0x0F12, 0x7018}, // 70003DF0
{0x0F12, 0x7011}, // 70003DF2
{0x0F12, 0x49B4}, // 70003DF4
{0x0F12, 0x8188}, // 70003DF6
{0x0F12, 0xBCF8}, // 70003DF8
{0x0F12, 0xBC08}, // 70003DFA
{0x0F12, 0x4718}, // 70003DFC
{0x0F12, 0xB538}, // 70003DFE
{0x0F12, 0x48B2}, // 70003E00
{0x0F12, 0x4669}, // 70003E02
{0x0F12, 0xF000}, // 70003E04
{0x0F12, 0xFB58}, // 70003E06
{0x0F12, 0x48B1}, // 70003E08
{0x0F12, 0x49B0}, // 70003E0A
{0x0F12, 0x69C2}, // 70003E0C
{0x0F12, 0x2400}, // 70003E0E
{0x0F12, 0x31A8}, // 70003E10
{0x0F12, 0x2A00}, // 70003E12
{0x0F12, 0xD008}, // 70003E14
{0x0F12, 0x61C4}, // 70003E16
{0x0F12, 0x684A}, // 70003E18
{0x0F12, 0x6242}, // 70003E1A
{0x0F12, 0x6282}, // 70003E1C
{0x0F12, 0x466B}, // 70003E1E
{0x0F12, 0x881A}, // 70003E20
{0x0F12, 0x6302}, // 70003E22
{0x0F12, 0x885A}, // 70003E24
{0x0F12, 0x6342}, // 70003E26
{0x0F12, 0x6A02}, // 70003E28
{0x0F12, 0x2A00}, // 70003E2A
{0x0F12, 0xD00A}, // 70003E2C
{0x0F12, 0x6204}, // 70003E2E
{0x0F12, 0x6849}, // 70003E30
{0x0F12, 0x6281}, // 70003E32
{0x0F12, 0x466B}, // 70003E34
{0x0F12, 0x8819}, // 70003E36
{0x0F12, 0x6301}, // 70003E38
{0x0F12, 0x8859}, // 70003E3A
{0x0F12, 0x6341}, // 70003E3C
{0x0F12, 0x49A5}, // 70003E3E
{0x0F12, 0x88C9}, // 70003E40
{0x0F12, 0x63C1}, // 70003E42
{0x0F12, 0xF000}, // 70003E44
{0x0F12, 0xFB40}, // 70003E46
{0x0F12, 0xE7A6}, // 70003E48
{0x0F12, 0xB5F0}, // 70003E4A
{0x0F12, 0xB08B}, // 70003E4C
{0x0F12, 0x20FF}, // 70003E4E
{0x0F12, 0x1C40}, // 70003E50
{0x0F12, 0x49A1}, // 70003E52
{0x0F12, 0x89CC}, // 70003E54
{0x0F12, 0x4E9E}, // 70003E56
{0x0F12, 0x6AB1}, // 70003E58
{0x0F12, 0x4284}, // 70003E5A
{0x0F12, 0xD101}, // 70003E5C
{0x0F12, 0x489F}, // 70003E5E
{0x0F12, 0x6081}, // 70003E60
{0x0F12, 0x6A70}, // 70003E62
{0x0F12, 0x0200}, // 70003E64
{0x0F12, 0xF000}, // 70003E66
{0x0F12, 0xFB37}, // 70003E68
{0x0F12, 0x0400}, // 70003E6A
{0x0F12, 0x0C00}, // 70003E6C
{0x0F12, 0x4A96}, // 70003E6E
{0x0F12, 0x8A11}, // 70003E70
{0x0F12, 0x9109}, // 70003E72
{0x0F12, 0x2101}, // 70003E74
{0x0F12, 0x0349}, // 70003E76
{0x0F12, 0x4288}, // 70003E78
{0x0F12, 0xD200}, // 70003E7A
{0x0F12, 0x0001}, // 70003E7C
{0x0F12, 0x4A92}, // 70003E7E
{0x0F12, 0x8211}, // 70003E80
{0x0F12, 0x4D97}, // 70003E82
{0x0F12, 0x8829}, // 70003E84
{0x0F12, 0x9108}, // 70003E86
{0x0F12, 0x4A8B}, // 70003E88
{0x0F12, 0x2303}, // 70003E8A
{0x0F12, 0x3222}, // 70003E8C
{0x0F12, 0x1F91}, // 70003E8E
{0x0F12, 0xF000}, // 70003E90
{0x0F12, 0xFB28}, // 70003E92
{0x0F12, 0x8028}, // 70003E94
{0x0F12, 0x488E}, // 70003E96
{0x0F12, 0x4987}, // 70003E98
{0x0F12, 0x6BC2}, // 70003E9A
{0x0F12, 0x6AC0}, // 70003E9C
{0x0F12, 0x4282}, // 70003E9E
{0x0F12, 0xD201}, // 70003EA0
{0x0F12, 0x8CC8}, // 70003EA2
{0x0F12, 0x8028}, // 70003EA4
{0x0F12, 0x88E8}, // 70003EA6
{0x0F12, 0x9007}, // 70003EA8
{0x0F12, 0x2240}, // 70003EAA
{0x0F12, 0x4310}, // 70003EAC
{0x0F12, 0x80E8}, // 70003EAE
{0x0F12, 0x2000}, // 70003EB0
{0x0F12, 0x0041}, // 70003EB2
{0x0F12, 0x194B}, // 70003EB4
{0x0F12, 0x001E}, // 70003EB6
{0x0F12, 0x3680}, // 70003EB8
{0x0F12, 0x8BB2}, // 70003EBA
{0x0F12, 0xAF04}, // 70003EBC
{0x0F12, 0x527A}, // 70003EBE
{0x0F12, 0x4A7D}, // 70003EC0
{0x0F12, 0x188A}, // 70003EC2
{0x0F12, 0x8897}, // 70003EC4
{0x0F12, 0x83B7}, // 70003EC6
{0x0F12, 0x33A0}, // 70003EC8
{0x0F12, 0x891F}, // 70003ECA
{0x0F12, 0xAE01}, // 70003ECC
{0x0F12, 0x5277}, // 70003ECE
{0x0F12, 0x8A11}, // 70003ED0
{0x0F12, 0x8119}, // 70003ED2
{0x0F12, 0x1C40}, // 70003ED4
{0x0F12, 0x0400}, // 70003ED6
{0x0F12, 0x0C00}, // 70003ED8
{0x0F12, 0x2806}, // 70003EDA
{0x0F12, 0xD3E9}, // 70003EDC
{0x0F12, 0xF000}, // 70003EDE
{0x0F12, 0xFB09}, // 70003EE0
{0x0F12, 0xF000}, // 70003EE2
{0x0F12, 0xFB0F}, // 70003EE4
{0x0F12, 0x4F79}, // 70003EE6
{0x0F12, 0x37A8}, // 70003EE8
{0x0F12, 0x2800}, // 70003EEA
{0x0F12, 0xD10A}, // 70003EEC
{0x0F12, 0x1FE0}, // 70003EEE
{0x0F12, 0x38FD}, // 70003EF0
{0x0F12, 0xD001}, // 70003EF2
{0x0F12, 0x1CC0}, // 70003EF4
{0x0F12, 0xD105}, // 70003EF6
{0x0F12, 0x4874}, // 70003EF8
{0x0F12, 0x8829}, // 70003EFA
{0x0F12, 0x3818}, // 70003EFC
{0x0F12, 0x6840}, // 70003EFE
{0x0F12, 0x4348}, // 70003F00
{0x0F12, 0x6078}, // 70003F02
{0x0F12, 0x4972}, // 70003F04
{0x0F12, 0x6878}, // 70003F06
{0x0F12, 0x6B89}, // 70003F08
{0x0F12, 0x4288}, // 70003F0A
{0x0F12, 0xD300}, // 70003F0C
{0x0F12, 0x0008}, // 70003F0E
{0x0F12, 0x6078}, // 70003F10
{0x0F12, 0x2000}, // 70003F12
{0x0F12, 0x0041}, // 70003F14
{0x0F12, 0xAA04}, // 70003F16
{0x0F12, 0x5A53}, // 70003F18
{0x0F12, 0x194A}, // 70003F1A
{0x0F12, 0x269C}, // 70003F1C
{0x0F12, 0x52B3}, // 70003F1E
{0x0F12, 0xAB01}, // 70003F20
{0x0F12, 0x5A59}, // 70003F22
{0x0F12, 0x32A0}, // 70003F24
{0x0F12, 0x8111}, // 70003F26
{0x0F12, 0x1C40}, // 70003F28
{0x0F12, 0x0400}, // 70003F2A
{0x0F12, 0x0C00}, // 70003F2C
{0x0F12, 0x2806}, // 70003F2E
{0x0F12, 0xD3F0}, // 70003F30
{0x0F12, 0x4965}, // 70003F32
{0x0F12, 0x9809}, // 70003F34
{0x0F12, 0x8208}, // 70003F36
{0x0F12, 0x9808}, // 70003F38
{0x0F12, 0x8028}, // 70003F3A
{0x0F12, 0x9807}, // 70003F3C
{0x0F12, 0x80E8}, // 70003F3E
{0x0F12, 0x1FE0}, // 70003F40
{0x0F12, 0x38FD}, // 70003F42
{0x0F12, 0xD13B}, // 70003F44
{0x0F12, 0x4D64}, // 70003F46
{0x0F12, 0x89E8}, // 70003F48
{0x0F12, 0x1FC1}, // 70003F4A
{0x0F12, 0x39FF}, // 70003F4C
{0x0F12, 0xD136}, // 70003F4E
{0x0F12, 0x4C5F}, // 70003F50
{0x0F12, 0x8AE0}, // 70003F52
{0x0F12, 0xF000}, // 70003F54
{0x0F12, 0xFADE}, // 70003F56
{0x0F12, 0x0006}, // 70003F58
{0x0F12, 0x8B20}, // 70003F5A
{0x0F12, 0xF000}, // 70003F5C
{0x0F12, 0xFAE2}, // 70003F5E
{0x0F12, 0x9000}, // 70003F60
{0x0F12, 0x6AA1}, // 70003F62
{0x0F12, 0x6878}, // 70003F64
{0x0F12, 0x1809}, // 70003F66
{0x0F12, 0x0200}, // 70003F68
{0x0F12, 0xF000}, // 70003F6A
{0x0F12, 0xFAB5}, // 70003F6C
{0x0F12, 0x0400}, // 70003F6E
{0x0F12, 0x0C00}, // 70003F70
{0x0F12, 0x0022}, // 70003F72
{0x0F12, 0x3246}, // 70003F74
{0x0F12, 0x0011}, // 70003F76
{0x0F12, 0x310A}, // 70003F78
{0x0F12, 0x2305}, // 70003F7A
{0x0F12, 0xF000}, // 70003F7C
{0x0F12, 0xFAB2}, // 70003F7E
{0x0F12, 0x66E8}, // 70003F80
{0x0F12, 0x6B23}, // 70003F82
{0x0F12, 0x0002}, // 70003F84
{0x0F12, 0x0031}, // 70003F86
{0x0F12, 0x0018}, // 70003F88
{0x0F12, 0xF000}, // 70003F8A
{0x0F12, 0xFAD3}, // 70003F8C
{0x0F12, 0x466B}, // 70003F8E
{0x0F12, 0x8518}, // 70003F90
{0x0F12, 0x6EEA}, // 70003F92
{0x0F12, 0x6B60}, // 70003F94
{0x0F12, 0x9900}, // 70003F96
{0x0F12, 0xF000}, // 70003F98
{0x0F12, 0xFACC}, // 70003F9A
{0x0F12, 0x466B}, // 70003F9C
{0x0F12, 0x8558}, // 70003F9E
{0x0F12, 0x0029}, // 70003FA0
{0x0F12, 0x980A}, // 70003FA2
{0x0F12, 0x3170}, // 70003FA4
{0x0F12, 0xF000}, // 70003FA6
{0x0F12, 0xFACD}, // 70003FA8
{0x0F12, 0x0028}, // 70003FAA
{0x0F12, 0x3060}, // 70003FAC
{0x0F12, 0x8A02}, // 70003FAE
{0x0F12, 0x4946}, // 70003FB0
{0x0F12, 0x3128}, // 70003FB2
{0x0F12, 0x808A}, // 70003FB4
{0x0F12, 0x8A42}, // 70003FB6
{0x0F12, 0x80CA}, // 70003FB8
{0x0F12, 0x8A80}, // 70003FBA
{0x0F12, 0x8108}, // 70003FBC
{0x0F12, 0xB00B}, // 70003FBE
{0x0F12, 0xBCF0}, // 70003FC0
{0x0F12, 0xBC08}, // 70003FC2
{0x0F12, 0x4718}, // 70003FC4
{0x0F12, 0xB570}, // 70003FC6
{0x0F12, 0x2400}, // 70003FC8
{0x0F12, 0x4D46}, // 70003FCA
{0x0F12, 0x4846}, // 70003FCC
{0x0F12, 0x8881}, // 70003FCE
{0x0F12, 0x4846}, // 70003FD0
{0x0F12, 0x8041}, // 70003FD2
{0x0F12, 0x2101}, // 70003FD4
{0x0F12, 0x8001}, // 70003FD6
{0x0F12, 0xF000}, // 70003FD8
{0x0F12, 0xFABC}, // 70003FDA
{0x0F12, 0x4842}, // 70003FDC
{0x0F12, 0x3820}, // 70003FDE
{0x0F12, 0x8BC0}, // 70003FE0
{0x0F12, 0xF000}, // 70003FE2
{0x0F12, 0xFABF}, // 70003FE4
{0x0F12, 0x4B42}, // 70003FE6
{0x0F12, 0x220D}, // 70003FE8
{0x0F12, 0x0712}, // 70003FEA
{0x0F12, 0x18A8}, // 70003FEC
{0x0F12, 0x8806}, // 70003FEE
{0x0F12, 0x00E1}, // 70003FF0
{0x0F12, 0x18C9}, // 70003FF2
{0x0F12, 0x81CE}, // 70003FF4
{0x0F12, 0x8846}, // 70003FF6
{0x0F12, 0x818E}, // 70003FF8
{0x0F12, 0x8886}, // 70003FFA
{0x0F12, 0x824E}, // 70003FFC
{0x0F12, 0x88C0}, // 70003FFE
{0x0F12, 0x8208}, // 70004000
{0x0F12, 0x3508}, // 70004002
{0x0F12, 0x042D}, // 70004004
{0x0F12, 0x0C2D}, // 70004006
{0x0F12, 0x1C64}, // 70004008
{0x0F12, 0x0424}, // 7000400A
{0x0F12, 0x0C24}, // 7000400C
{0x0F12, 0x2C07}, // 7000400E
{0x0F12, 0xD3EC}, // 70004010
{0x0F12, 0xE658}, // 70004012
{0x0F12, 0xB510}, // 70004014
{0x0F12, 0x4834}, // 70004016
{0x0F12, 0x4C34}, // 70004018
{0x0F12, 0x88C0}, // 7000401A
{0x0F12, 0x8060}, // 7000401C
{0x0F12, 0x2001}, // 7000401E
{0x0F12, 0x8020}, // 70004020
{0x0F12, 0x4831}, // 70004022
{0x0F12, 0x3820}, // 70004024
{0x0F12, 0x8BC0}, // 70004026
{0x0F12, 0xF000}, // 70004028
{0x0F12, 0xFA9C}, // 7000402A
{0x0F12, 0x88E0}, // 7000402C
{0x0F12, 0x4A31}, // 7000402E
{0x0F12, 0x2800}, // 70004030
{0x0F12, 0xD003}, // 70004032
{0x0F12, 0x4930}, // 70004034
{0x0F12, 0x8849}, // 70004036
{0x0F12, 0x2900}, // 70004038
{0x0F12, 0xD009}, // 7000403A
{0x0F12, 0x2001}, // 7000403C
{0x0F12, 0x03C0}, // 7000403E
{0x0F12, 0x8050}, // 70004040
{0x0F12, 0x80D0}, // 70004042
{0x0F12, 0x2000}, // 70004044
{0x0F12, 0x8090}, // 70004046
{0x0F12, 0x8110}, // 70004048
{0x0F12, 0xBC10}, // 7000404A
{0x0F12, 0xBC08}, // 7000404C
{0x0F12, 0x4718}, // 7000404E
{0x0F12, 0x8050}, // 70004050
{0x0F12, 0x8920}, // 70004052
{0x0F12, 0x80D0}, // 70004054
{0x0F12, 0x8960}, // 70004056
{0x0F12, 0x0400}, // 70004058
{0x0F12, 0x1400}, // 7000405A
{0x0F12, 0x8090}, // 7000405C
{0x0F12, 0x89A1}, // 7000405E
{0x0F12, 0x0409}, // 70004060
{0x0F12, 0x1409}, // 70004062
{0x0F12, 0x8111}, // 70004064
{0x0F12, 0x89E3}, // 70004066
{0x0F12, 0x8A24}, // 70004068
{0x0F12, 0x2B00}, // 7000406A
{0x0F12, 0xD104}, // 7000406C
{0x0F12, 0x17C3}, // 7000406E
{0x0F12, 0x0F5B}, // 70004070
{0x0F12, 0x1818}, // 70004072
{0x0F12, 0x10C0}, // 70004074
{0x0F12, 0x8090}, // 70004076
{0x0F12, 0x2C00}, // 70004078
{0x0F12, 0xD1E6}, // 7000407A
{0x0F12, 0x17C8}, // 7000407C
{0x0F12, 0x0F40}, // 7000407E
{0x0F12, 0x1840}, // 70004080
{0x0F12, 0x10C0}, // 70004082
{0x0F12, 0x8110}, // 70004084
{0x0F12, 0xE7E0}, // 70004086
{0x0F12, 0xB510}, // 70004088
{0x0F12, 0x000C}, // 7000408A
{0x0F12, 0x4919}, // 7000408C
{0x0F12, 0x2204}, // 7000408E
{0x0F12, 0x6820}, // 70004090
{0x0F12, 0x5E8A}, // 70004092
{0x0F12, 0x0140}, // 70004094
{0x0F12, 0x1A80}, // 70004096
{0x0F12, 0x0280}, // 70004098
{0x0F12, 0x8849}, // 7000409A
{0x0F12, 0xF000}, // 7000409C
{0x0F12, 0xFA6A}, // 7000409E
{0x0F12, 0x6020}, // 700040A0
{0x0F12, 0xE7D2}, // 700040A2
{0x0F12, 0x38D4}, // 700040A4
{0x0F12, 0x7000}, // 700040A6
{0x0F12, 0x17D0}, // 700040A8
{0x0F12, 0x7000}, // 700040AA
{0x0F12, 0x5000}, // 700040AC
{0x0F12, 0xD000}, // 700040AE
{0x0F12, 0x1100}, // 700040B0
{0x0F12, 0xD000}, // 700040B2
{0x0F12, 0x171A}, // 700040B4
{0x0F12, 0x7000}, // 700040B6
{0x0F12, 0x4780}, // 700040B8
{0x0F12, 0x7000}, // 700040BA
{0x0F12, 0x2FCA}, // 700040BC
{0x0F12, 0x7000}, // 700040BE
{0x0F12, 0x2FC5}, // 700040C0
{0x0F12, 0x7000}, // 700040C2
{0x0F12, 0x2FC6}, // 700040C4
{0x0F12, 0x7000}, // 700040C6
{0x0F12, 0x2ED8}, // 700040C8
{0x0F12, 0x7000}, // 700040CA
{0x0F12, 0x2BD0}, // 700040CC
{0x0F12, 0x7000}, // 700040CE
{0x0F12, 0x17E0}, // 700040D0
{0x0F12, 0x7000}, // 700040D2
{0x0F12, 0x2DE8}, // 700040D4
{0x0F12, 0x7000}, // 700040D6
{0x0F12, 0x37E0}, // 700040D8
{0x0F12, 0x7000}, // 700040DA
{0x0F12, 0x210C}, // 700040DC
{0x0F12, 0x7000}, // 700040DE
{0x0F12, 0x1484}, // 700040E0
{0x0F12, 0x7000}, // 700040E2
{0x0F12, 0xA006}, // 700040E4
{0x0F12, 0x0000}, // 700040E6
{0x0F12, 0x0724}, // 700040E8
{0x0F12, 0x7000}, // 700040EA
{0x0F12, 0xA000}, // 700040EC
{0x0F12, 0xD000}, // 700040EE
{0x0F12, 0x2270}, // 700040F0
{0x0F12, 0x7000}, // 700040F2
{0x0F12, 0x2558}, // 700040F4
{0x0F12, 0x7000}, // 700040F6
{0x0F12, 0x146C}, // 700040F8
{0x0F12, 0x7000}, // 700040FA
{0x0F12, 0xB510}, // 700040FC
{0x0F12, 0x000C}, // 700040FE
{0x0F12, 0x49C7}, // 70004100
{0x0F12, 0x2208}, // 70004102
{0x0F12, 0x6820}, // 70004104
{0x0F12, 0x5E8A}, // 70004106
{0x0F12, 0x0140}, // 70004108
{0x0F12, 0x1A80}, // 7000410A
{0x0F12, 0x0280}, // 7000410C
{0x0F12, 0x88C9}, // 7000410E
{0x0F12, 0xF000}, // 70004110
{0x0F12, 0xFA30}, // 70004112
{0x0F12, 0x6020}, // 70004114
{0x0F12, 0xE798}, // 70004116
{0x0F12, 0xB5FE}, // 70004118
{0x0F12, 0x000C}, // 7000411A
{0x0F12, 0x6825}, // 7000411C
{0x0F12, 0x6866}, // 7000411E
{0x0F12, 0x68A0}, // 70004120
{0x0F12, 0x9001}, // 70004122
{0x0F12, 0x68E7}, // 70004124
{0x0F12, 0x1BA8}, // 70004126
{0x0F12, 0x42B5}, // 70004128
{0x0F12, 0xDA00}, // 7000412A
{0x0F12, 0x1B70}, // 7000412C
{0x0F12, 0x9000}, // 7000412E
{0x0F12, 0x49BB}, // 70004130
{0x0F12, 0x48BC}, // 70004132
{0x0F12, 0x884A}, // 70004134
{0x0F12, 0x8843}, // 70004136
{0x0F12, 0x435A}, // 70004138
{0x0F12, 0x2304}, // 7000413A
{0x0F12, 0x5ECB}, // 7000413C
{0x0F12, 0x0A92}, // 7000413E
{0x0F12, 0x18D2}, // 70004140
{0x0F12, 0x02D2}, // 70004142
{0x0F12, 0x0C12}, // 70004144
{0x0F12, 0x88CB}, // 70004146
{0x0F12, 0x8880}, // 70004148
{0x0F12, 0x4343}, // 7000414A
{0x0F12, 0x0A98}, // 7000414C
{0x0F12, 0x2308}, // 7000414E
{0x0F12, 0x5ECB}, // 70004150
{0x0F12, 0x18C0}, // 70004152
{0x0F12, 0x02C0}, // 70004154
{0x0F12, 0x0C00}, // 70004156
{0x0F12, 0x0411}, // 70004158
{0x0F12, 0x0400}, // 7000415A
{0x0F12, 0x1409}, // 7000415C
{0x0F12, 0x1400}, // 7000415E
{0x0F12, 0x1A08}, // 70004160
{0x0F12, 0x49B0}, // 70004162
{0x0F12, 0x39E0}, // 70004164
{0x0F12, 0x6148}, // 70004166
{0x0F12, 0x9801}, // 70004168
{0x0F12, 0x3040}, // 7000416A
{0x0F12, 0x7880}, // 7000416C
{0x0F12, 0x2800}, // 7000416E
{0x0F12, 0xD103}, // 70004170
{0x0F12, 0x9801}, // 70004172
{0x0F12, 0x0029}, // 70004174
{0x0F12, 0xF000}, // 70004176
{0x0F12, 0xFA03}, // 70004178
{0x0F12, 0x8839}, // 7000417A
{0x0F12, 0x9800}, // 7000417C
{0x0F12, 0x4281}, // 7000417E
{0x0F12, 0xD814}, // 70004180
{0x0F12, 0x8879}, // 70004182
{0x0F12, 0x9800}, // 70004184
{0x0F12, 0x4281}, // 70004186
{0x0F12, 0xD20C}, // 70004188
{0x0F12, 0x9801}, // 7000418A
{0x0F12, 0x0029}, // 7000418C
{0x0F12, 0xF000}, // 7000418E
{0x0F12, 0xF9FF}, // 70004190
{0x0F12, 0x9801}, // 70004192
{0x0F12, 0x0029}, // 70004194
{0x0F12, 0xF000}, // 70004196
{0x0F12, 0xF9FB}, // 70004198
{0x0F12, 0x9801}, // 7000419A
{0x0F12, 0x0029}, // 7000419C
{0x0F12, 0xF000}, // 7000419E
{0x0F12, 0xF9F7}, // 700041A0
{0x0F12, 0xE003}, // 700041A2
{0x0F12, 0x9801}, // 700041A4
{0x0F12, 0x0029}, // 700041A6
{0x0F12, 0xF000}, // 700041A8
{0x0F12, 0xF9F2}, // 700041AA
{0x0F12, 0x9801}, // 700041AC
{0x0F12, 0x0032}, // 700041AE
{0x0F12, 0x0039}, // 700041B0
{0x0F12, 0xF000}, // 700041B2
{0x0F12, 0xF9F5}, // 700041B4
{0x0F12, 0x6020}, // 700041B6
{0x0F12, 0xE5D0}, // 700041B8
{0x0F12, 0xB57C}, // 700041BA
{0x0F12, 0x489A}, // 700041BC
{0x0F12, 0xA901}, // 700041BE
{0x0F12, 0x0004}, // 700041C0
{0x0F12, 0xF000}, // 700041C2
{0x0F12, 0xF979}, // 700041C4
{0x0F12, 0x466B}, // 700041C6
{0x0F12, 0x88D9}, // 700041C8
{0x0F12, 0x8898}, // 700041CA
{0x0F12, 0x4B95}, // 700041CC
{0x0F12, 0x3346}, // 700041CE
{0x0F12, 0x1E9A}, // 700041D0
{0x0F12, 0xF000}, // 700041D2
{0x0F12, 0xF9ED}, // 700041D4
{0x0F12, 0x4894}, // 700041D6
{0x0F12, 0x4992}, // 700041D8
{0x0F12, 0x3812}, // 700041DA
{0x0F12, 0x3140}, // 700041DC
{0x0F12, 0x8A42}, // 700041DE
{0x0F12, 0x888B}, // 700041E0
{0x0F12, 0x18D2}, // 700041E2
{0x0F12, 0x8242}, // 700041E4
{0x0F12, 0x8AC2}, // 700041E6
{0x0F12, 0x88C9}, // 700041E8
{0x0F12, 0x1851}, // 700041EA
{0x0F12, 0x82C1}, // 700041EC
{0x0F12, 0x0020}, // 700041EE
{0x0F12, 0x4669}, // 700041F0
{0x0F12, 0xF000}, // 700041F2
{0x0F12, 0xF961}, // 700041F4
{0x0F12, 0x488D}, // 700041F6
{0x0F12, 0x214D}, // 700041F8
{0x0F12, 0x8301}, // 700041FA
{0x0F12, 0x2196}, // 700041FC
{0x0F12, 0x8381}, // 700041FE
{0x0F12, 0x211D}, // 70004200
{0x0F12, 0x3020}, // 70004202
{0x0F12, 0x8001}, // 70004204
{0x0F12, 0xF000}, // 70004206
{0x0F12, 0xF9DB}, // 70004208
{0x0F12, 0xF000}, // 7000420A
{0x0F12, 0xF9E1}, // 7000420C
{0x0F12, 0x4888}, // 7000420E
{0x0F12, 0x4C88}, // 70004210
{0x0F12, 0x6E00}, // 70004212
{0x0F12, 0x60E0}, // 70004214
{0x0F12, 0x466B}, // 70004216
{0x0F12, 0x8818}, // 70004218
{0x0F12, 0x8859}, // 7000421A
{0x0F12, 0x0025}, // 7000421C
{0x0F12, 0x1A40}, // 7000421E
{0x0F12, 0x3540}, // 70004220
{0x0F12, 0x61A8}, // 70004222
{0x0F12, 0x487F}, // 70004224
{0x0F12, 0x9900}, // 70004226
{0x0F12, 0x3060}, // 70004228
{0x0F12, 0xF000}, // 7000422A
{0x0F12, 0xF9D9}, // 7000422C
{0x0F12, 0x466B}, // 7000422E
{0x0F12, 0x8819}, // 70004230
{0x0F12, 0x1DE0}, // 70004232
{0x0F12, 0x30F9}, // 70004234
{0x0F12, 0x8741}, // 70004236
{0x0F12, 0x8859}, // 70004238
{0x0F12, 0x8781}, // 7000423A
{0x0F12, 0x2000}, // 7000423C
{0x0F12, 0x71A0}, // 7000423E
{0x0F12, 0x74A8}, // 70004240
{0x0F12, 0xBC7C}, // 70004242
{0x0F12, 0xBC08}, // 70004244
{0x0F12, 0x4718}, // 70004246
{0x0F12, 0xB5F8}, // 70004248
{0x0F12, 0x0005}, // 7000424A
{0x0F12, 0x6808}, // 7000424C
{0x0F12, 0x0400}, // 7000424E
{0x0F12, 0x0C00}, // 70004250
{0x0F12, 0x684A}, // 70004252
{0x0F12, 0x0412}, // 70004254
{0x0F12, 0x0C12}, // 70004256
{0x0F12, 0x688E}, // 70004258
{0x0F12, 0x68CC}, // 7000425A
{0x0F12, 0x4970}, // 7000425C
{0x0F12, 0x884B}, // 7000425E
{0x0F12, 0x4343}, // 70004260
{0x0F12, 0x0A98}, // 70004262
{0x0F12, 0x2304}, // 70004264
{0x0F12, 0x5ECB}, // 70004266
{0x0F12, 0x18C0}, // 70004268
{0x0F12, 0x02C0}, // 7000426A
{0x0F12, 0x0C00}, // 7000426C
{0x0F12, 0x88CB}, // 7000426E
{0x0F12, 0x4353}, // 70004270
{0x0F12, 0x0A9A}, // 70004272
{0x0F12, 0x2308}, // 70004274
{0x0F12, 0x5ECB}, // 70004276
{0x0F12, 0x18D1}, // 70004278
{0x0F12, 0x02C9}, // 7000427A
{0x0F12, 0x0C09}, // 7000427C
{0x0F12, 0x2701}, // 7000427E
{0x0F12, 0x003A}, // 70004280
{0x0F12, 0x40AA}, // 70004282
{0x0F12, 0x9200}, // 70004284
{0x0F12, 0x002A}, // 70004286
{0x0F12, 0x3A10}, // 70004288
{0x0F12, 0x4097}, // 7000428A
{0x0F12, 0x2D10}, // 7000428C
{0x0F12, 0xDA06}, // 7000428E
{0x0F12, 0x4A69}, // 70004290
{0x0F12, 0x9B00}, // 70004292
{0x0F12, 0x8812}, // 70004294
{0x0F12, 0x439A}, // 70004296
{0x0F12, 0x4B67}, // 70004298
{0x0F12, 0x801A}, // 7000429A
{0x0F12, 0xE003}, // 7000429C
{0x0F12, 0x4B66}, // 7000429E
{0x0F12, 0x885A}, // 700042A0
{0x0F12, 0x43BA}, // 700042A2
{0x0F12, 0x805A}, // 700042A4
{0x0F12, 0x0023}, // 700042A6
{0x0F12, 0x0032}, // 700042A8
{0x0F12, 0xF000}, // 700042AA
{0x0F12, 0xF981}, // 700042AC
{0x0F12, 0x2D10}, // 700042AE
{0x0F12, 0xDA05}, // 700042B0
{0x0F12, 0x4961}, // 700042B2
{0x0F12, 0x9A00}, // 700042B4
{0x0F12, 0x8808}, // 700042B6
{0x0F12, 0x4310}, // 700042B8
{0x0F12, 0x8008}, // 700042BA
{0x0F12, 0xE003}, // 700042BC
{0x0F12, 0x485E}, // 700042BE
{0x0F12, 0x8841}, // 700042C0
{0x0F12, 0x4339}, // 700042C2
{0x0F12, 0x8041}, // 700042C4
{0x0F12, 0x4D5B}, // 700042C6
{0x0F12, 0x2000}, // 700042C8
{0x0F12, 0x3580}, // 700042CA
{0x0F12, 0x88AA}, // 700042CC
{0x0F12, 0x5E30}, // 700042CE
{0x0F12, 0x2100}, // 700042D0
{0x0F12, 0xF000}, // 700042D2
{0x0F12, 0xF98D}, // 700042D4
{0x0F12, 0x8030}, // 700042D6
{0x0F12, 0x2000}, // 700042D8
{0x0F12, 0x88AA}, // 700042DA
{0x0F12, 0x5E20}, // 700042DC
{0x0F12, 0x2100}, // 700042DE
{0x0F12, 0xF000}, // 700042E0
{0x0F12, 0xF986}, // 700042E2
{0x0F12, 0x8020}, // 700042E4
{0x0F12, 0xE587}, // 700042E6
{0x0F12, 0xB510}, // 700042E8
{0x0F12, 0xF000}, // 700042EA
{0x0F12, 0xF989}, // 700042EC
{0x0F12, 0x4A53}, // 700042EE
{0x0F12, 0x8D50}, // 700042F0
{0x0F12, 0x2800}, // 700042F2
{0x0F12, 0xD007}, // 700042F4
{0x0F12, 0x494E}, // 700042F6
{0x0F12, 0x31C0}, // 700042F8
{0x0F12, 0x684B}, // 700042FA
{0x0F12, 0x4950}, // 700042FC
{0x0F12, 0x4283}, // 700042FE
{0x0F12, 0xD202}, // 70004300
{0x0F12, 0x8D90}, // 70004302
{0x0F12, 0x81C8}, // 70004304
{0x0F12, 0xE6A0}, // 70004306
{0x0F12, 0x8DD0}, // 70004308
{0x0F12, 0x81C8}, // 7000430A
{0x0F12, 0xE69D}, // 7000430C
{0x0F12, 0xB5F8}, // 7000430E
{0x0F12, 0xF000}, // 70004310
{0x0F12, 0xF97E}, // 70004312
{0x0F12, 0x4D49}, // 70004314
{0x0F12, 0x8E28}, // 70004316
{0x0F12, 0x2800}, // 70004318
{0x0F12, 0xD01F}, // 7000431A
{0x0F12, 0x4E49}, // 7000431C
{0x0F12, 0x4844}, // 7000431E
{0x0F12, 0x68B4}, // 70004320
{0x0F12, 0x6800}, // 70004322
{0x0F12, 0x4284}, // 70004324
{0x0F12, 0xD903}, // 70004326
{0x0F12, 0x1A21}, // 70004328
{0x0F12, 0x0849}, // 7000432A
{0x0F12, 0x1847}, // 7000432C
{0x0F12, 0xE006}, // 7000432E
{0x0F12, 0x4284}, // 70004330
{0x0F12, 0xD203}, // 70004332
{0x0F12, 0x1B01}, // 70004334
{0x0F12, 0x0849}, // 70004336
{0x0F12, 0x1A47}, // 70004338
{0x0F12, 0xE000}, // 7000433A
{0x0F12, 0x0027}, // 7000433C
{0x0F12, 0x0020}, // 7000433E
{0x0F12, 0x493B}, // 70004340
{0x0F12, 0x3120}, // 70004342
{0x0F12, 0x7A0C}, // 70004344
{0x0F12, 0x2C00}, // 70004346
{0x0F12, 0xD004}, // 70004348
{0x0F12, 0x0200}, // 7000434A
{0x0F12, 0x0039}, // 7000434C
{0x0F12, 0xF000}, // 7000434E
{0x0F12, 0xF8C3}, // 70004350
{0x0F12, 0x8668}, // 70004352
{0x0F12, 0x2C00}, // 70004354
{0x0F12, 0xD000}, // 70004356
{0x0F12, 0x60B7}, // 70004358
{0x0F12, 0xE54D}, // 7000435A
{0x0F12, 0x20FF}, // 7000435C
{0x0F12, 0x1C40}, // 7000435E
{0x0F12, 0x8668}, // 70004360
{0x0F12, 0xE549}, // 70004362
{0x0F12, 0xB510}, // 70004364
{0x0F12, 0x000C}, // 70004366
{0x0F12, 0x6820}, // 70004368
{0x0F12, 0x0400}, // 7000436A
{0x0F12, 0x0C00}, // 7000436C
{0x0F12, 0x4933}, // 7000436E
{0x0F12, 0x8E0A}, // 70004370
{0x0F12, 0x2A00}, // 70004372
{0x0F12, 0xD003}, // 70004374
{0x0F12, 0x8E49}, // 70004376
{0x0F12, 0x0200}, // 70004378
{0x0F12, 0xF000}, // 7000437A
{0x0F12, 0xF8AD}, // 7000437C
{0x0F12, 0x6020}, // 7000437E
{0x0F12, 0x0400}, // 70004380
{0x0F12, 0x0C00}, // 70004382
{0x0F12, 0xE661}, // 70004384
{0x0F12, 0xB570}, // 70004386
{0x0F12, 0x680C}, // 70004388
{0x0F12, 0x4D2F}, // 7000438A
{0x0F12, 0x0020}, // 7000438C
{0x0F12, 0x6F29}, // 7000438E
{0x0F12, 0xF000}, // 70004390
{0x0F12, 0xF946}, // 70004392
{0x0F12, 0x6F69}, // 70004394
{0x0F12, 0x1D20}, // 70004396
{0x0F12, 0xF000}, // 70004398
{0x0F12, 0xF942}, // 7000439A
{0x0F12, 0x4827}, // 7000439C
{0x0F12, 0x8E00}, // 7000439E
{0x0F12, 0x2800}, // 700043A0
{0x0F12, 0xD006}, // 700043A2
{0x0F12, 0x4922}, // 700043A4
{0x0F12, 0x2214}, // 700043A6
{0x0F12, 0x3168}, // 700043A8
{0x0F12, 0x0008}, // 700043AA
{0x0F12, 0x383C}, // 700043AC
{0x0F12, 0xF000}, // 700043AE
{0x0F12, 0xF93F}, // 700043B0
{0x0F12, 0xE488}, // 700043B2
{0x0F12, 0xB5F8}, // 700043B4
{0x0F12, 0x0004}, // 700043B6
{0x0F12, 0x4D24}, // 700043B8
{0x0F12, 0x8B68}, // 700043BA
{0x0F12, 0x2800}, // 700043BC
{0x0F12, 0xD012}, // 700043BE
{0x0F12, 0x4823}, // 700043C0
{0x0F12, 0x8A00}, // 700043C2
{0x0F12, 0x06C0}, // 700043C4
{0x0F12, 0xD50E}, // 700043C6
{0x0F12, 0x4822}, // 700043C8
{0x0F12, 0x7800}, // 700043CA
{0x0F12, 0x2800}, // 700043CC
{0x0F12, 0xD00A}, // 700043CE
{0x0F12, 0x481D}, // 700043D0
{0x0F12, 0x6FC1}, // 700043D2
{0x0F12, 0x2000}, // 700043D4
{0x0F12, 0xF000}, // 700043D6
{0x0F12, 0xF923}, // 700043D8
{0x0F12, 0x8B28}, // 700043DA
{0x0F12, 0x2201}, // 700043DC
{0x0F12, 0x2180}, // 700043DE
{0x0F12, 0xF000}, // 700043E0
{0x0F12, 0xF92C}, // 700043E2
{0x0F12, 0x8328}, // 700043E4
{0x0F12, 0x2101}, // 700043E6
{0x0F12, 0x000D}, // 700043E8
{0x0F12, 0x0020}, // 700043EA
{0x0F12, 0x3810}, // 700043EC
{0x0F12, 0x4081}, // 700043EE
{0x0F12, 0x40A5}, // 700043F0
{0x0F12, 0x4F11}, // 700043F2
{0x0F12, 0x000E}, // 700043F4
{0x0F12, 0x2C10}, // 700043F6
{0x0F12, 0xDA03}, // 700043F8
{0x0F12, 0x8838}, // 700043FA
{0x0F12, 0x43A8}, // 700043FC
{0x0F12, 0x8038}, // 700043FE
{0x0F12, 0xE002}, // 70004400
{0x0F12, 0x8878}, // 70004402
{0x0F12, 0x43B0}, // 70004404
{0x0F12, 0x8078}, // 70004406
{0x0F12, 0xF000}, // 70004408
{0x0F12, 0xF920}, // 7000440A
{0x0F12, 0x2C10}, // 7000440C
{0x0F12, 0xDA03}, // 7000440E
{0x0F12, 0x8838}, // 70004410
{0x0F12, 0x4328}, // 70004412
{0x0F12, 0x8038}, // 70004414
{0x0F12, 0xE4EF}, // 70004416
{0x0F12, 0x8878}, // 70004418
{0x0F12, 0x4330}, // 7000441A
{0x0F12, 0x8078}, // 7000441C
{0x0F12, 0xE4EB}, // 7000441E
{0x0F12, 0x2558}, // 70004420
{0x0F12, 0x7000}, // 70004422
{0x0F12, 0x2AB8}, // 70004424
{0x0F12, 0x7000}, // 70004426
{0x0F12, 0x145E}, // 70004428
{0x0F12, 0x7000}, // 7000442A
{0x0F12, 0x2698}, // 7000442C
{0x0F12, 0x7000}, // 7000442E
{0x0F12, 0x2BB8}, // 70004430
{0x0F12, 0x7000}, // 70004432
{0x0F12, 0x2998}, // 70004434
{0x0F12, 0x7000}, // 70004436
{0x0F12, 0x1100}, // 70004438
{0x0F12, 0xD000}, // 7000443A
{0x0F12, 0x4780}, // 7000443C
{0x0F12, 0x7000}, // 7000443E
{0x0F12, 0xE200}, // 70004440
{0x0F12, 0xD000}, // 70004442
{0x0F12, 0x210C}, // 70004444
{0x0F12, 0x7000}, // 70004446
{0x0F12, 0x0000}, // 70004448
{0x0F12, 0x7000}, // 7000444A
{0x0F12, 0x308C}, // 7000444C
{0x0F12, 0x7000}, // 7000444E
{0x0F12, 0xB040}, // 70004450
{0x0F12, 0xD000}, // 70004452
{0x0F12, 0x3858}, // 70004454
{0x0F12, 0x7000}, // 70004456
{0x0F12, 0x4778}, // 70004458
{0x0F12, 0x46C0}, // 7000445A
{0x0F12, 0xC000}, // 7000445C
{0x0F12, 0xE59F}, // 7000445E
{0x0F12, 0xFF1C}, // 70004460
{0x0F12, 0xE12F}, // 70004462
{0x0F12, 0x1789}, // 70004464
{0x0F12, 0x0001}, // 70004466
{0x0F12, 0x4778}, // 70004468
{0x0F12, 0x46C0}, // 7000446A
{0x0F12, 0xC000}, // 7000446C
{0x0F12, 0xE59F}, // 7000446E
{0x0F12, 0xFF1C}, // 70004470
{0x0F12, 0xE12F}, // 70004472
{0x0F12, 0x16F1}, // 70004474
{0x0F12, 0x0001}, // 70004476
{0x0F12, 0x4778}, // 70004478
{0x0F12, 0x46C0}, // 7000447A
{0x0F12, 0xC000}, // 7000447C
{0x0F12, 0xE59F}, // 7000447E
{0x0F12, 0xFF1C}, // 70004480
{0x0F12, 0xE12F}, // 70004482
{0x0F12, 0xC3B1}, // 70004484
{0x0F12, 0x0000}, // 70004486
{0x0F12, 0x4778}, // 70004488
{0x0F12, 0x46C0}, // 7000448A
{0x0F12, 0xC000}, // 7000448C
{0x0F12, 0xE59F}, // 7000448E
{0x0F12, 0xFF1C}, // 70004490
{0x0F12, 0xE12F}, // 70004492
{0x0F12, 0xC36D}, // 70004494
{0x0F12, 0x0000}, // 70004496
{0x0F12, 0x4778}, // 70004498
{0x0F12, 0x46C0}, // 7000449A
{0x0F12, 0xC000}, // 7000449C
{0x0F12, 0xE59F}, // 7000449E
{0x0F12, 0xFF1C}, // 700044A0
{0x0F12, 0xE12F}, // 700044A2
{0x0F12, 0xF6D7}, // 700044A4
{0x0F12, 0x0000}, // 700044A6
{0x0F12, 0x4778}, // 700044A8
{0x0F12, 0x46C0}, // 700044AA
{0x0F12, 0xC000}, // 700044AC
{0x0F12, 0xE59F}, // 700044AE
{0x0F12, 0xFF1C}, // 700044B0
{0x0F12, 0xE12F}, // 700044B2
{0x0F12, 0xB49D}, // 700044B4
{0x0F12, 0x0000}, // 700044B6
{0x0F12, 0x4778}, // 700044B8
{0x0F12, 0x46C0}, // 700044BA
{0x0F12, 0xC000}, // 700044BC
{0x0F12, 0xE59F}, // 700044BE
{0x0F12, 0xFF1C}, // 700044C0
{0x0F12, 0xE12F}, // 700044C2
{0x0F12, 0x7EDF}, // 700044C4
{0x0F12, 0x0000}, // 700044C6
{0x0F12, 0x4778}, // 700044C8
{0x0F12, 0x46C0}, // 700044CA
{0x0F12, 0xC000}, // 700044CC
{0x0F12, 0xE59F}, // 700044CE
{0x0F12, 0xFF1C}, // 700044D0
{0x0F12, 0xE12F}, // 700044D2
{0x0F12, 0x448D}, // 700044D4
{0x0F12, 0x0000}, // 700044D6
{0x0F12, 0x4778}, // 700044D8
{0x0F12, 0x46C0}, // 700044DA
{0x0F12, 0xF004}, // 700044DC
{0x0F12, 0xE51F}, // 700044DE
{0x0F12, 0x29EC}, // 700044E0
{0x0F12, 0x0001}, // 700044E2
{0x0F12, 0x4778}, // 700044E4
{0x0F12, 0x46C0}, // 700044E6
{0x0F12, 0xC000}, // 700044E8
{0x0F12, 0xE59F}, // 700044EA
{0x0F12, 0xFF1C}, // 700044EC
{0x0F12, 0xE12F}, // 700044EE
{0x0F12, 0x2EF1}, // 700044F0
{0x0F12, 0x0000}, // 700044F2
{0x0F12, 0x4778}, // 700044F4
{0x0F12, 0x46C0}, // 700044F6
{0x0F12, 0xC000}, // 700044F8
{0x0F12, 0xE59F}, // 700044FA
{0x0F12, 0xFF1C}, // 700044FC
{0x0F12, 0xE12F}, // 700044FE
{0x0F12, 0xEE03}, // 70004500
{0x0F12, 0x0000}, // 70004502
{0x0F12, 0x4778}, // 70004504
{0x0F12, 0x46C0}, // 70004506
{0x0F12, 0xC000}, // 70004508
{0x0F12, 0xE59F}, // 7000450A
{0x0F12, 0xFF1C}, // 7000450C
{0x0F12, 0xE12F}, // 7000450E
{0x0F12, 0xA58B}, // 70004510
{0x0F12, 0x0000}, // 70004512
{0x0F12, 0x4778}, // 70004514
{0x0F12, 0x46C0}, // 70004516
{0x0F12, 0xC000}, // 70004518
{0x0F12, 0xE59F}, // 7000451A
{0x0F12, 0xFF1C}, // 7000451C
{0x0F12, 0xE12F}, // 7000451E
{0x0F12, 0x7C49}, // 70004520
{0x0F12, 0x0000}, // 70004522
{0x0F12, 0x4778}, // 70004524
{0x0F12, 0x46C0}, // 70004526
{0x0F12, 0xC000}, // 70004528
{0x0F12, 0xE59F}, // 7000452A
{0x0F12, 0xFF1C}, // 7000452C
{0x0F12, 0xE12F}, // 7000452E
{0x0F12, 0x7C63}, // 70004530
{0x0F12, 0x0000}, // 70004532
{0x0F12, 0x4778}, // 70004534
{0x0F12, 0x46C0}, // 70004536
{0x0F12, 0xC000}, // 70004538
{0x0F12, 0xE59F}, // 7000453A
{0x0F12, 0xFF1C}, // 7000453C
{0x0F12, 0xE12F}, // 7000453E
{0x0F12, 0x2DB7}, // 70004540
{0x0F12, 0x0000}, // 70004542
{0x0F12, 0x4778}, // 70004544
{0x0F12, 0x46C0}, // 70004546
{0x0F12, 0xC000}, // 70004548
{0x0F12, 0xE59F}, // 7000454A
{0x0F12, 0xFF1C}, // 7000454C
{0x0F12, 0xE12F}, // 7000454E
{0x0F12, 0xEB3D}, // 70004550
{0x0F12, 0x0000}, // 70004552
{0x0F12, 0x4778}, // 70004554
{0x0F12, 0x46C0}, // 70004556
{0x0F12, 0xC000}, // 70004558
{0x0F12, 0xE59F}, // 7000455A
{0x0F12, 0xFF1C}, // 7000455C
{0x0F12, 0xE12F}, // 7000455E
{0x0F12, 0xF061}, // 70004560
{0x0F12, 0x0000}, // 70004562
{0x0F12, 0x4778}, // 70004564
{0x0F12, 0x46C0}, // 70004566
{0x0F12, 0xC000}, // 70004568
{0x0F12, 0xE59F}, // 7000456A
{0x0F12, 0xFF1C}, // 7000456C
{0x0F12, 0xE12F}, // 7000456E
{0x0F12, 0xF0EF}, // 70004570
{0x0F12, 0x0000}, // 70004572
{0x0F12, 0x4778}, // 70004574
{0x0F12, 0x46C0}, // 70004576
{0x0F12, 0xF004}, // 70004578
{0x0F12, 0xE51F}, // 7000457A
{0x0F12, 0x2824}, // 7000457C
{0x0F12, 0x0001}, // 7000457E
{0x0F12, 0x4778}, // 70004580
{0x0F12, 0x46C0}, // 70004582
{0x0F12, 0xC000}, // 70004584
{0x0F12, 0xE59F}, // 70004586
{0x0F12, 0xFF1C}, // 70004588
{0x0F12, 0xE12F}, // 7000458A
{0x0F12, 0x8EDD}, // 7000458C
{0x0F12, 0x0000}, // 7000458E
{0x0F12, 0x4778}, // 70004590
{0x0F12, 0x46C0}, // 70004592
{0x0F12, 0xC000}, // 70004594
{0x0F12, 0xE59F}, // 70004596
{0x0F12, 0xFF1C}, // 70004598
{0x0F12, 0xE12F}, // 7000459A
{0x0F12, 0x8DCB}, // 7000459C
{0x0F12, 0x0000}, // 7000459E
{0x0F12, 0x4778}, // 700045A0
{0x0F12, 0x46C0}, // 700045A2
{0x0F12, 0xC000}, // 700045A4
{0x0F12, 0xE59F}, // 700045A6
{0x0F12, 0xFF1C}, // 700045A8
{0x0F12, 0xE12F}, // 700045AA
{0x0F12, 0x8E17}, // 700045AC
{0x0F12, 0x0000}, // 700045AE
{0x0F12, 0x4778}, // 700045B0
{0x0F12, 0x46C0}, // 700045B2
{0x0F12, 0xC000}, // 700045B4
{0x0F12, 0xE59F}, // 700045B6
{0x0F12, 0xFF1C}, // 700045B8
{0x0F12, 0xE12F}, // 700045BA
{0x0F12, 0x98C5}, // 700045BC
{0x0F12, 0x0000}, // 700045BE
{0x0F12, 0x4778}, // 700045C0
{0x0F12, 0x46C0}, // 700045C2
{0x0F12, 0xC000}, // 700045C4
{0x0F12, 0xE59F}, // 700045C6
{0x0F12, 0xFF1C}, // 700045C8
{0x0F12, 0xE12F}, // 700045CA
{0x0F12, 0x7C7D}, // 700045CC
{0x0F12, 0x0000}, // 700045CE
{0x0F12, 0x4778}, // 700045D0
{0x0F12, 0x46C0}, // 700045D2
{0x0F12, 0xC000}, // 700045D4
{0x0F12, 0xE59F}, // 700045D6
{0x0F12, 0xFF1C}, // 700045D8
{0x0F12, 0xE12F}, // 700045DA
{0x0F12, 0x7E31}, // 700045DC
{0x0F12, 0x0000}, // 700045DE
{0x0F12, 0x4778}, // 700045E0
{0x0F12, 0x46C0}, // 700045E2
{0x0F12, 0xC000}, // 700045E4
{0x0F12, 0xE59F}, // 700045E6
{0x0F12, 0xFF1C}, // 700045E8
{0x0F12, 0xE12F}, // 700045EA
{0x0F12, 0x7EAB}, // 700045EC
{0x0F12, 0x0000}, // 700045EE
{0x0F12, 0x4778}, // 700045F0
{0x0F12, 0x46C0}, // 700045F2
{0x0F12, 0xC000}, // 700045F4
{0x0F12, 0xE59F}, // 700045F6
{0x0F12, 0xFF1C}, // 700045F8
{0x0F12, 0xE12F}, // 700045FA
{0x0F12, 0x7501}, // 700045FC
{0x0F12, 0x0000}, // 700045FE
{0x0F12, 0x4778}, // 70004600
{0x0F12, 0x46C0}, // 70004602
{0x0F12, 0xC000}, // 70004604
{0x0F12, 0xE59F}, // 70004606
{0x0F12, 0xFF1C}, // 70004608
{0x0F12, 0xE12F}, // 7000460A
{0x0F12, 0xF63F}, // 7000460C
{0x0F12, 0x0000}, // 7000460E
{0x0F12, 0x4778}, // 70004610
{0x0F12, 0x46C0}, // 70004612
{0x0F12, 0xC000}, // 70004614
{0x0F12, 0xE59F}, // 70004616
{0x0F12, 0xFF1C}, // 70004618
{0x0F12, 0xE12F}, // 7000461A
{0x0F12, 0x3D0B}, // 7000461C
{0x0F12, 0x0000}, // 7000461E
{0x0F12, 0x4778}, // 70004620
{0x0F12, 0x46C0}, // 70004622
{0x0F12, 0xC000}, // 70004624
{0x0F12, 0xE59F}, // 70004626
{0x0F12, 0xFF1C}, // 70004628
{0x0F12, 0xE12F}, // 7000462A
{0x0F12, 0x29BF}, // 7000462C
{0x0F12, 0x0001}, // 7000462E
{0x0F12, 0x4778}, // 70004630
{0x0F12, 0x46C0}, // 70004632
{0x0F12, 0xF004}, // 70004634
{0x0F12, 0xE51F}, // 70004636
{0x0F12, 0x26D8}, // 70004638
{0x0F12, 0x0001}, // 7000463A
{0x0F12, 0x4778}, // 7000463C
{0x0F12, 0x46C0}, // 7000463E
{0x0F12, 0xC000}, // 70004640
{0x0F12, 0xE59F}, // 70004642
{0x0F12, 0xFF1C}, // 70004644
{0x0F12, 0xE12F}, // 70004646
{0x0F12, 0x306B}, // 70004648
{0x0F12, 0x0000}, // 7000464A
{0x0F12, 0x4778}, // 7000464C
{0x0F12, 0x46C0}, // 7000464E
{0x0F12, 0xC000}, // 70004650
{0x0F12, 0xE59F}, // 70004652
{0x0F12, 0xFF1C}, // 70004654
{0x0F12, 0xE12F}, // 70004656
{0x0F12, 0x6099}, // 70004658
{0x0F12, 0x0000}, // 7000465A
// End of Patch Data(Last : 7000465Ah)
// Total Size 2916 (0x0B64)
// Addr : 3AF8 , Size : 2914(B62h)
// TNP_USER_MBCV_CONTROL
// TNP_4EC_MBR_TUNE
// TNP_4EC_FORBIDDEN_TUNE
// TNP_AF_FINESEARCH_DRIVEBACK
// TNP_FLASH_ALG
// TNP_GAS_ALPHA_OTP
// TNP_AWB_MODUL_COMP
// TNP_AWB_INIT_QUEUE
// TNP_AWB_GRID_LOWBR
// TNP_AWB_GRID_MODULECOMP
// TNP_ADLC_TUNE
// TNP_1FRAME_AE
// TNP_TG_OFF_CFG_CHG_IN_SPOOF_MODE
//==================================================================================
// 05.OTP Control
//==================================================================================
{0x0028, 0x7000},
{0x002A, 0x0722},
{0x0F12, 0x0100}, //skl_OTP_usWaitTime This register should be positioned in fornt of D0001000
{0x002A, 0x0726},
{0x0F12, 0x0001}, //skl_bUseOTPfunc This is OTP on/off function
{0x002A, 0x08D6},
{0x0F12, 0x0001}, //ash_bUseOTPData
{0x002A, 0x146E},
{0x0F12, 0x0000}, //awbb_otp_disable
{0x002A, 0x08DC},
{0x0F12, 0x0000}, //ash_bUseGasAlphaOTP
{0x0028, 0xD000},
{0x002A, 0x1000},
{0x0F12, 0x0001},
//==================================================================================
//06.Gas_Anti Shading
//==================================================================================
// Refer Mon_AWB_RotGain
{0x0028, 0x7000},
{0x002A, 0x08B4},
{0x0F12, 0x0001}, //wbt_bUseOutdoorASH
{0x002A, 0x08BC},
{0x0F12, 0x00C0}, //TVAR_ash_AwbAshCord_0_ 2300K
{0x0F12, 0x00DF}, //TVAR_ash_AwbAshCord_1_ 2750K
{0x0F12, 0x0100}, //TVAR_ash_AwbAshCord_2_ 3300K
{0x0F12, 0x0125}, //TVAR_ash_AwbAshCord_3_ 4150K
{0x0F12, 0x015F}, //TVAR_ash_AwbAshCord_4_ 5250K
{0x0F12, 0x017C}, //TVAR_ash_AwbAshCord_5_ 6400K
{0x0F12, 0x0194}, //TVAR_ash_AwbAshCord_6_ 7500K
{0x002A, 0x08F6},
{0x0F12, 0x4000}, //TVAR_ash_GASAlpha_0__0_ R // 2300K
{0x0F12, 0x4000}, //TVAR_ash_GASAlpha_0__1_ GR
{0x0F12, 0x4000}, //TVAR_ash_GASAlpha_0__2_ GB
{0x0F12, 0x4000}, //TVAR_ash_GASAlpha_0__3_ B
{0x0F12, 0x4000}, //TVAR_ash_GASAlpha_1__0_ R // 2750K
{0x0F12, 0x4000}, //TVAR_ash_GASAlpha_1__1_ GR
{0x0F12, 0x4000}, //TVAR_ash_GASAlpha_1__2_ GB
{0x0F12, 0x4000}, //TVAR_ash_GASAlpha_1__3_ B
{0x0F12, 0x4000}, //TVAR_ash_GASAlpha_2__0_ R // 3300K
{0x0F12, 0x4000}, //TVAR_ash_GASAlpha_2__1_ GR
{0x0F12, 0x4000}, //TVAR_ash_GASAlpha_2__2_ GB
{0x0F12, 0x4000}, //TVAR_ash_GASAlpha_2__3_ B
{0x0F12, 0x4000}, //TVAR_ash_GASAlpha_3__0_ R // 4150K
{0x0F12, 0x4000}, //TVAR_ash_GASAlpha_3__1_ GR
{0x0F12, 0x4000}, //TVAR_ash_GASAlpha_3__2_ GB
{0x0F12, 0x4000}, //TVAR_ash_GASAlpha_3__3_ B
{0x0F12, 0x4000}, //TVAR_ash_GASAlpha_4__0_ R // 5250K
{0x0F12, 0x4000}, //TVAR_ash_GASAlpha_4__1_ GR
{0x0F12, 0x4000}, //TVAR_ash_GASAlpha_4__2_ GB
{0x0F12, 0x4000}, //TVAR_ash_GASAlpha_4__3_ B
{0x0F12, 0x4300}, //TVAR_ash_GASAlpha_5__0_ R // 6400K
{0x0F12, 0x4000}, //TVAR_ash_GASAlpha_5__1_ GR
{0x0F12, 0x4000}, //TVAR_ash_GASAlpha_5__2_ GB
{0x0F12, 0x4000}, //TVAR_ash_GASAlpha_5__3_ B
{0x0F12, 0x4300}, //TVAR_ash_GASAlpha_6__0_ R // 7500K
{0x0F12, 0x4000}, //TVAR_ash_GASAlpha_6__1_ GR
{0x0F12, 0x4000}, //TVAR_ash_GASAlpha_6__2_ GB
{0x0F12, 0x4000}, //TVAR_ash_GASAlpha_6__3_ B
//Outdoor GAS Alpha
{0x0F12, 0x4500},
{0x0F12, 0x4000},
{0x0F12, 0x4000},
{0x0F12, 0x4000},
{0x002A, 0x08F4},
{0x0F12, 0x0001}, //ash_bUseGasAlpha
//==================================================================================
// 07. Analog Setting 2
//==================================================================================
//This register is for FACTORY ONLY.
//If you change it without prior notification
//YOU are RESPONSIBLE for the FAILURE that will happen in the future
//For subsampling Size
{0x0028, 0x7000},
{0x002A, 0x18BC},
{0x0F12, 0x0004},
{0x0F12, 0x05B6},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0001},
{0x0F12, 0x05BA},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0007},
{0x0F12, 0x05BA},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x01F4},
{0x0F12, 0x024E},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x01F4},
{0x0F12, 0x05B6},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x01F4},
{0x0F12, 0x05BA},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x01F4},
{0x0F12, 0x024F},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0075},
{0x0F12, 0x00CF},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0075},
{0x0F12, 0x00D6},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0004},
{0x0F12, 0x01F4},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x00F0},
{0x0F12, 0x01F4},
{0x0F12, 0x029E},
{0x0F12, 0x05B2},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x01F8},
{0x0F12, 0x0228},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0208},
{0x0F12, 0x0238},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0218},
{0x0F12, 0x0238},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0001},
{0x0F12, 0x0009},
{0x0F12, 0x00DE},
{0x0F12, 0x05C0},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x00DF},
{0x0F12, 0x00E4},
{0x0F12, 0x01F8},
{0x0F12, 0x01FD},
{0x0F12, 0x05B6},
{0x0F12, 0x05BB},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x01F8},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0077},
{0x0F12, 0x007E},
{0x0F12, 0x024F},
{0x0F12, 0x025E},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
// For Capture
{0x0F12, 0x0004},
{0x0F12, 0x09D1},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0001},
{0x0F12, 0x09D5},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0008},
{0x0F12, 0x09D5},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x02AA},
{0x0F12, 0x0326},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x02AA},
{0x0F12, 0x09D1},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x02AA},
{0x0F12, 0x09D5},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x02AA},
{0x0F12, 0x0327},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0008},
{0x0F12, 0x0084},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0008},
{0x0F12, 0x008D},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0008},
{0x0F12, 0x02AA},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x00AA},
{0x0F12, 0x02AA},
{0x0F12, 0x03AD},
{0x0F12, 0x09CD},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x02AE},
{0x0F12, 0x02DE},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x02BE},
{0x0F12, 0x02EE},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x02CE},
{0x0F12, 0x02EE},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0001},
{0x0F12, 0x0009},
{0x0F12, 0x0095},
{0x0F12, 0x09DB},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0096},
{0x0F12, 0x009B},
{0x0F12, 0x02AE},
{0x0F12, 0x02B3},
{0x0F12, 0x09D1},
{0x0F12, 0x09D6},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x02AE},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0009},
{0x0F12, 0x0010},
{0x0F12, 0x0327},
{0x0F12, 0x0336},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x0F12, 0x0000},
{0x002A, 0x1AF8},
{0x0F12, 0x5A3C}, //senHal_TuneStr_AngTuneData1_2_D000F400 register at subsampling
{0x002A, 0x1896},
{0x0F12, 0x0002}, //senHal_SamplingType 0002 03EE: PLA setting
{0x0F12, 0x0000}, //senHal_SamplingMode 0 : 2 PLA / 1 : 4PLA
{0x0F12, 0x0003}, //senHal_PLAOption [0] VPLA enable [1] HPLA enable
{0x002A, 0x1B00}, //Green Noise <20><><EFBFBD><EFBFBD>
{0x0F12, 0xF428},
{0x0F12, 0xFFFF},
{0x0F12, 0x0000},
{0x002A, 0x189E},
{0x0F12, 0x0FB0}, //senHal_ExpMinPixels
{0x002A, 0x18AC},
{0x0F12, 0x0060}, //senHal_uAddColsBin
{0x0F12, 0x0060}, //senHal_uAddColsNoBin
{0x0F12, 0x05C0}, //senHal_uMinColsBin
{0x0F12, 0x05C0}, //senHal_uMinColsNoBin
{0x002A, 0x1AEA},
{0x0F12, 0x8080}, //senHal_SubF404Tune
{0x0F12, 0x0080}, //senHal_FullF404Tune
{0x002A, 0x1AE0},
{0x0F12, 0x0000}, //senHal_bSenAAC
{0x002A, 0x1A72},
{0x0F12, 0x0000}, //senHal_bSRX SRX off
{0x002A, 0x18A2},
{0x0F12, 0x0004}, //senHal_NExpLinesCheckFine extend Forbidden area line
{0x002A, 0x1A6A},
{0x0F12, 0x009A}, //senHal_usForbiddenRightOfs extend right Forbidden area line
{0x002A, 0x385E},
{0x0F12, 0x024C}, //Mon_Sen_uExpPixelsOfs
{0x002A, 0x0EE6},
{0x0F12, 0x0000}, //setot_bUseDigitalHbin
{0x002A, 0x1B2A},
{0x0F12, 0x0300}, //70001B2A //senHal_TuneStr2_usAngTuneGainTh
{0x0F12, 0x00D6}, //70001B2C //senHal_TuneStr2_AngTuneF4CA_0_
{0x0F12, 0x008D}, //70001B2E //senHal_TuneStr2_AngTuneF4CA_1_
{0x0F12, 0x00CF}, //70001B30 //senHal_TuneStr2_AngTuneF4C2_0_
{0x0F12, 0x0084}, //70001B32 //senHal_TuneStr2_AngTuneF4C2_1_
//==================================================================================
// 08.AF Setting
//==================================================================================
//AF interface setting
{0x0028, 0x7000},
{0x002A, 0x01FC},
{0x0F12, 0x0001}, //REG_TC_IPRM_LedGpio
{0x002A, 0x01FE},
{0x0F12, 0x0003}, //REG_TC_IPRM_CM_Init_AfModeType VCM IIC
{0x0F12, 0x0000}, //REG_TC_IPRM_CM_Init_PwmConfig1
{0x002A, 0x0204},
{0x0F12, 0x0061}, //REG_TC_IPRM_CM_Init_GpioConfig1 AF Enable GPIO 6
{0x002A, 0x020C},
{0x0F12, 0x2F0C}, //REG_TC_IPRM_CM_Init_Mi2cBits
{0x0F12, 0x0190}, //REG_TC_IPRM_CM_Init_Mi2cRateKhz IIC Speed
{0x002A, 0x0294},
{0x0F12, 0x0100}, //REG_TC_AF_FstWinStartX
{0x0F12, 0x00E3}, //REG_TC_AF_FstWinStartY
{0x0F12, 0x0200}, //REG_TC_AF_FstWinSizeX
{0x0F12, 0x0238}, //REG_TC_AF_FstWinSizeY
{0x0F12, 0x01C6}, //REG_TC_AF_ScndWinStartX
{0x0F12, 0x0166}, //REG_TC_AF_ScndWinStartY
{0x0F12, 0x0074}, //REG_TC_AF_ScndWinSizeX
{0x0F12, 0x0132}, //REG_TC_AF_ScndWinSizeY
{0x0F12, 0x0001}, //REG_TC_AF_WinSizesUpdated
//2nd search setting
{0x002A, 0x070E},
{0x0F12, 0x00FF}, //C0 //skl_af_StatOvlpExpFactor
{0x002A, 0x071E},
{0x0F12, 0x0000}, //01 00 //skl_af_bAfStatOff
{0x002A, 0x163C},
{0x0F12, 0x0000}, //af_search_usAeStable
{0x002A, 0x1648},
{0x0F12, 0x9002}, //af_search_usSingleAfFlags
{0x002A, 0x1652},
{0x0F12, 0x0002}, //af_search_usFinePeakCount
{0x0F12, 0x0000}, //af_search_usFineMaxScale
{0x002A, 0x15E0},
{0x0F12, 0x0902}, //af_pos_usFineStepNumSize
//Peak Threshold
{0x002A, 0x164C},
{0x0F12, 0x0003}, //af_search_usMinPeakSamples
{0x002A, 0x163E},
{0x0F12, 0x00E5}, //80 //8a //A0 //A0 af_search_usPeakThr Full search (E5 90%)
{0x0F12, 0x0098}, //80 //a0 //8a //98 //98 af_search_usPeakThrLow
{0x002A, 0x47A8},
{0x0F12, 0x0080}, //TNP, Macro Threshold register
//Home Pos
{0x002A, 0x15D4},
{0x0F12, 0x0000}, //af_pos_usHomePos
{0x0F12, 0xD000}, //af_pos_usLowConfPos
//AF statistics
{0x002A, 0x169A},
{0x0F12, 0xFF95}, //af_search_usConfCheckOrder_1_
{0x002A, 0x166A},
{0x0F12, 0x0280}, //af_search_usConfThr_4_
{0x002A, 0x1676},
{0x0F12, 0x03A0}, //af_search_usConfThr_10_
{0x0F12, 0x0320}, //af_search_usConfThr_11_
{0x002A, 0x16BC},
{0x0F12, 0x0030}, //af_stat_usMinStatVal
{0x002A, 0x16E0},
{0x0F12, 0x0060}, //af_scene_usSceneLowNormBrThr
{0x002A, 0x16D4},
{0x0F12, 0x0010}, //af_stat_usBpfThresh
{0x002A, 0x1656},
{0x0F12, 0x0000}, //af_search_usCapturePolicy
{0x002A, 0x15E6},
{0x0F12, 0x003C}, //af_pos_usCaptureFixedPos
{0x0F12, 0x0018}, //af_pos_usTableLastInd
{0x0F12, 0x002A}, //af_pos_usTable_0_
{0x0F12, 0x0030}, //af_pos_usTable_1_
{0x0F12, 0x0036}, //af_pos_usTable_2_
{0x0F12, 0x003C}, //af_pos_usTable_3_
{0x0F12, 0x0042}, //af_pos_usTable_4_
{0x0F12, 0x0048}, //af_pos_usTable_5_
{0x0F12, 0x004E}, //af_pos_usTable_6_
{0x0F12, 0x0054}, //af_pos_usTable_7_
{0x0F12, 0x005A}, //af_pos_usTable_8_
{0x0F12, 0x0060}, //af_pos_usTable_9_
{0x0F12, 0x0066}, //af_pos_usTable_10
{0x0F12, 0x006C}, //af_pos_usTable_11_
{0x0F12, 0x0072}, //af_pos_usTable_12_
{0x0F12, 0x0078}, //af_pos_usTable_13_
{0x0F12, 0x007E}, //af_pos_usTable_14_
{0x0F12, 0x0084}, //af_pos_usTable_15_
{0x0F12, 0x008A}, //af_pos_usTable_16_
{0x0F12, 0x0090}, //af_pos_usTable_17_
{0x0F12, 0x0096}, //af_pos_usTable_18_
{0x0F12, 0x009C}, //af_pos_usTable_19_
{0x0F12, 0x00A2}, //af_pos_usTable_20_
{0x0F12, 0x00A8}, //af_pos_usTable_21_
{0x0F12, 0x00AE}, //af_pos_usTable_22_
{0x0F12, 0x00B4}, //af_pos_usTable_23_
{0x0F12, 0x00BA}, //af_pos_usTable_24_
//VCM AF driver with PWM/I2C
{0x002A, 0x1722},
{0x0F12, 0x8000}, //afd_usParam_0_
{0x0F12, 0x0006}, //afd_usParam_1_
{0x0F12, 0x3FF0}, //afd_usParam_2_
{0x0F12, 0x03E8}, //afd_usParam_3_
{0x0F12, 0x0000}, //afd_usParam_4_
{0x0F12, 0x0080}, //10 afd_usParam_5_
{0x0F12, 0x0010}, //10 afd_usParam_6_
{0x0F12, 0x0010}, //08 afd_usParam_7_
{0x0F12, 0x0040}, //afd_usParam_8_
{0x0F12, 0x0080}, //afd_usParam_9_
{0x0F12, 0x00C0}, //afd_usParam_10_
{0x0F12, 0x00E0}, //afd_usParam_11_
{0x002A, 0x028C},
{0x0F12, 0x0003}, //REG_TC_AF_AfCmd
//==================================================================================
// 09.AWB-BASIC setting
//==================================================================================
// AWB init Start point
{0x002A, 0x145E},
{0x0F12, 0x05C0}, //620 580 //awbb_GainsInit_0_
{0x0F12, 0x0428}, //awbb_GainsInit_1_
{0x0F12, 0x06E0}, //6F0 780 //awbb_GainsInit_2_
// AWB Convergence Speed
{0x002A, 0x1464},
{0x0F12, 0x0008}, //awbb_WpFilterMinThr
{0x0F12, 0x0060}, //190 awbb_WpFilterMaxThr
{0x0F12, 0x0100}, //F0 awbb_WpFilterCoef
{0x0F12, 0x0004}, //awbb_WpFilterSize
{0x0F12, 0x0002}, //awbb_GridEnable
{0x002A, 0x144E},
{0x0F12, 0x0000}, //awbb_RGainOff
{0x0F12, 0x0000}, //awbb_BGainOff
{0x0F12, 0x0000}, //awbb_GGainOff
{0x0f12, 0x00C2}, //awbb_Alpha_Comp_Mode
{0x0F12, 0x0002}, //awbb_Rpl_InvalidOutDoor
{0x0F12, 0x0001}, //awbb_UseGrThrCorr
{0x0F12, 0x0074}, //awbb_Use_Filters
{0x0F12, 0x0001}, //awbb_CorrectMinNumPatches
// White Locus
{0x002A, 0x11F0},
{0x0F12, 0x012C}, //awbb_IntcR
{0x0F12, 0x0121}, //awbb_IntcB
{0x0F12, 0x02DF}, //awbb_GLocusR
{0x0F12, 0x0314}, //awbb_GLocusB
{0x002A, 0x120E},
{0x0F12, 0x0000}, //awbb_MovingScale10
{0x0F12, 0x05FD}, //awbb_GamutWidthThr1
{0x0F12, 0x036B}, //awbb_GamutHeightThr1
{0x0F12, 0x0020}, //awbb_GamutWidthThr2
{0x0F12, 0x001A}, //awbb_GamutHeightThr2
{0x002A, 0x1278},
{0x0F12, 0xFEF7}, //awbb_SCDetectionMap_SEC_StartR_B
{0x0F12, 0x0021}, //awbb_SCDetectionMap_SEC_StepR_B
{0x0F12, 0x07D0}, //awbb_SCDetectionMap_SEC_SunnyNB
{0x0F12, 0x07D0}, //awbb_SCDetectionMap_SEC_StepNB
{0x0F12, 0x01C8}, //awbb_SCDetectionMap_SEC_LowTempR_B
{0x0F12, 0x0096}, //awbb_SCDetectionMap_SEC_SunnyNBZone
{0x0F12, 0x0004}, //awbb_SCDetectionMap_SEC_LowTempR_BZone
{0x002A, 0x1224},
{0x0F12, 0x0032}, //awbb_LowBr
{0x0F12, 0x001E}, //awbb_LowBr_NBzone
{0x0F12, 0x00E2}, //awbb_YThreshHigh
{0x0F12, 0x0010}, //awbb_YThreshLow_Norm
{0x0F12, 0x0002}, //awbb_YThreshLow_Low
{0x002A, 0x2BA4},
{0x0F12, 0x0004}, //Mon_AWB_ByPassMode
{0x002A, 0x11FC},
{0x0F12, 0x000C}, //awbb_MinNumOfFinalPatches
{0x002A, 0x1208},
{0x0F12, 0x0020}, //awbb_MinNumOfChromaclassifpatches
// Indoor Zone
{0x002A, 0x101C},
{0x0F12, 0x0360}, //0360 //0360 //awbb_IndoorGrZones_m_BGrid_0__m_left
{0x0F12, 0x036C}, //036C //036C //awbb_IndoorGrZones_m_BGrid_0__m_right
{0x0F12, 0x0320}, //0320 //0320 //awbb_IndoorGrZones_m_BGrid_1__m_left
{0x0F12, 0x038A}, //038A //038A //awbb_IndoorGrZones_m_BGrid_1__m_right
{0x0F12, 0x02E8}, //02E8 //02E8 //awbb_IndoorGrZones_m_BGrid_2__m_left
{0x0F12, 0x036C}, //036C //0380 //awbb_IndoorGrZones_m_BGrid_2__m_right
{0x0F12, 0x02BE}, //02BE //02BE //awbb_IndoorGrZones_m_BGrid_3__m_left
{0x0F12, 0x0342}, //0342 //035A //awbb_IndoorGrZones_m_BGrid_3__m_right
{0x0F12, 0x0298}, //0298 //0298 //awbb_IndoorGrZones_m_BGrid_4__m_left
{0x0F12, 0x031C}, //031C //0334 //awbb_IndoorGrZones_m_BGrid_4__m_right
{0x0F12, 0x0272}, //0272 //0272 //awbb_IndoorGrZones_m_BGrid_5__m_left
{0x0F12, 0x02F6}, //02F6 //030E //awbb_IndoorGrZones_m_BGrid_5__m_right
{0x0F12, 0x024C}, //024C //024C //awbb_IndoorGrZones_m_BGrid_6__m_left
{0x0F12, 0x02D6}, //02D2 //02EA //awbb_IndoorGrZones_m_BGrid_6__m_right
{0x0F12, 0x0230}, //0230 //0230 //awbb_IndoorGrZones_m_BGrid_7__m_left
{0x0F12, 0x02BA}, //02B6 //02CC //awbb_IndoorGrZones_m_BGrid_7__m_right
{0x0F12, 0x0214}, //0214 //0214 //awbb_IndoorGrZones_m_BGrid_8__m_left
{0x0F12, 0x02A6}, //02A6 //02B0 //awbb_IndoorGrZones_m_BGrid_8__m_right
{0x0F12, 0x01F8}, //01F8 //01F8 //awbb_IndoorGrZones_m_BGrid_9__m_left
{0x0F12, 0x0292}, //0292 //0294 //awbb_IndoorGrZones_m_BGrid_9__m_right
{0x0F12, 0x01DC}, //01DC //01DC //awbb_IndoorGrZones_m_BGrid_10__m_left
{0x0F12, 0x0278}, //0278 //0278 //awbb_IndoorGrZones_m_BGrid_10__m_right
{0x0F12, 0x01C0}, //01C0 //01C0 //awbb_IndoorGrZones_m_BGrid_11__m_left
{0x0F12, 0x0264}, //0264 //0264 //awbb_IndoorGrZones_m_BGrid_11__m_right
{0x0F12, 0x01AA}, //01AA //01AA //awbb_IndoorGrZones_m_BGrid_12__m_left
{0x0F12, 0x0250}, //0250 //0250 //awbb_IndoorGrZones_m_BGrid_12__m_right
{0x0F12, 0x0196}, //0196 //0196 //awbb_IndoorGrZones_m_BGrid_13__m_left
{0x0F12, 0x023C}, //023C //023C //awbb_IndoorGrZones_m_BGrid_13__m_right
{0x0F12, 0x0180}, //0180 //0180 //awbb_IndoorGrZones_m_BGrid_14__m_left
{0x0F12, 0x0228}, //0228 //0228 //awbb_IndoorGrZones_m_BGrid_14__m_right
{0x0F12, 0x016C}, //016C //016C //awbb_IndoorGrZones_m_BGrid_15__m_left
{0x0F12, 0x0214}, //0214 //0214 //awbb_IndoorGrZones_m_BGrid_15__m_right
{0x0F12, 0x0168}, //0168 //0168 //awbb_IndoorGrZones_m_BGrid_16__m_left
{0x0F12, 0x0200}, //0200 //0200 //awbb_IndoorGrZones_m_BGrid_16__m_right
{0x0F12, 0x0172}, //0172 //0172 //awbb_IndoorGrZones_m_BGrid_17__m_left
{0x0F12, 0x01EC}, //01EC //01EC //awbb_IndoorGrZones_m_BGrid_17__m_right
{0x0F12, 0x019A}, //019A //019A //awbb_IndoorGrZones_m_BGrid_18__m_left
{0x0F12, 0x01D8}, //01D8 //01D8 //awbb_IndoorGrZones_m_BGrid_18__m_right
{0x0F12, 0x0000}, //0000 //0000 //awbb_IndoorGrZones_m_BGrid_19__m_left
{0x0F12, 0x0000}, //0000 //0000 //awbb_IndoorGrZones_m_BGrid_19__m_right
{0x0F12, 0x0005}, //awbb_IndoorGrZones_m_GridStep
{0x002A, 0x1070},
{0x0F12, 0x0013}, //awbb_IndoorGrZones_ZInfo_m_GridSz
{0x002A, 0x1074},
{0x0F12, 0x00EC}, //awbb_IndoorGrZones_m_Boffs
// Outdoor Zone
{0x002A, 0x1078},
{0x0F12, 0x0240}, //0240 //0232 //awbb_OutdoorGrZones_m_BGrid_0__m_left
{0x0F12, 0x025A}, //025A //025A //awbb_OutdoorGrZones_m_BGrid_0__m_right
{0x0F12, 0x0234}, //022C //021E //awbb_OutdoorGrZones_m_BGrid_1__m_left
{0x0F12, 0x0274}, //0274 //0274 //awbb_OutdoorGrZones_m_BGrid_1__m_right
{0x0F12, 0x0228}, //021E //020E //awbb_OutdoorGrZones_m_BGrid_2__m_left
{0x0F12, 0x028E}, //028E //028E //awbb_OutdoorGrZones_m_BGrid_2__m_right
{0x0F12, 0x0220}, //0210 //0200 //awbb_OutdoorGrZones_m_BGrid_3__m_left
{0x0F12, 0x0290}, //0290 //0290 //awbb_OutdoorGrZones_m_BGrid_3__m_right
{0x0F12, 0x0212}, //0204 //01F4 //awbb_OutdoorGrZones_m_BGrid_4__m_left
{0x0F12, 0x0286}, //0286 //0286 //awbb_OutdoorGrZones_m_BGrid_4__m_right
{0x0F12, 0x0202}, //01FA //01E8 //awbb_OutdoorGrZones_m_BGrid_5__m_left
{0x0F12, 0x027E}, //027E //027E //awbb_OutdoorGrZones_m_BGrid_5__m_right
{0x0F12, 0x01F6}, //01F2 //01DE //awbb_OutdoorGrZones_m_BGrid_6__m_left
{0x0F12, 0x0274}, //0274 //0274 //awbb_OutdoorGrZones_m_BGrid_6__m_right
{0x0F12, 0x01EC}, //01EA //01D2 //awbb_OutdoorGrZones_m_BGrid_7__m_left
{0x0F12, 0x0268}, //0268 //0268 //awbb_OutdoorGrZones_m_BGrid_7__m_right
{0x0F12, 0x01E6}, //01E6 //01D0 //awbb_OutdoorGrZones_m_BGrid_8__m_left
{0x0F12, 0x025E}, //025E //025E //awbb_OutdoorGrZones_m_BGrid_8__m_right
{0x0F12, 0x01E4}, //01E4 //01D6 //awbb_OutdoorGrZones_m_BGrid_9__m_left
{0x0F12, 0x0252}, //0252 //0252 //awbb_OutdoorGrZones_m_BGrid_9__m_right
{0x0F12, 0x01E6}, //01E6 //01E2 //awbb_OutdoorGrZones_m_BGrid_10__m_left
{0x0F12, 0x0248}, //0248 //0248 //awbb_OutdoorGrZones_m_BGrid_10__m_right
{0x0F12, 0x01F4}, //01F4 //01F4 //awbb_OutdoorGrZones_m_BGrid_11__m_left
{0x0F12, 0x021A}, //021A //021A //awbb_OutdoorGrZones_m_BGrid_11__m_right
{0x0F12, 0x0004}, //awbb_OutdoorGrZones_m_GridStep
{0x002A, 0x10AC},
{0x0F12, 0x000C}, //awbb_OutdoorGrZones_ZInfo_m_GridSz
{0x002A, 0x10B0},
{0x0F12, 0x01DA}, //awbb_OutdoorGrZones_m_Boffs
// Low Brightness Zone
{0x002A, 0x10B4},
{0x0F12, 0x0348}, //awbb_LowBrGrZones_m_BGrid_0__m_left
{0x0F12, 0x03B6}, //awbb_LowBrGrZones_m_BGrid_0__m_right
{0x0F12, 0x02B8}, //awbb_LowBrGrZones_m_BGrid_1__m_left
{0x0F12, 0x03B6}, //awbb_LowBrGrZones_m_BGrid_1__m_right
{0x0F12, 0x0258}, //awbb_LowBrGrZones_m_BGrid_2__m_left
{0x0F12, 0x038E}, //awbb_LowBrGrZones_m_BGrid_2__m_right
{0x0F12, 0x0212}, //awbb_LowBrGrZones_m_BGrid_3__m_left
{0x0F12, 0x0348}, //awbb_LowBrGrZones_m_BGrid_3__m_right
{0x0F12, 0x01CC}, //awbb_LowBrGrZones_m_BGrid_4__m_left
{0x0F12, 0x030C}, //awbb_LowBrGrZones_m_BGrid_4__m_right
{0x0F12, 0x01A2}, //awbb_LowBrGrZones_m_BGrid_5__m_left
{0x0F12, 0x02D2}, //awbb_LowBrGrZones_m_BGrid_5__m_right
{0x0F12, 0x0170}, //awbb_LowBrGrZones_m_BGrid_6__m_left
{0x0F12, 0x02A6}, //awbb_LowBrGrZones_m_BGrid_6__m_right
{0x0F12, 0x014C}, //awbb_LowBrGrZones_m_BGrid_7__m_left
{0x0F12, 0x0280}, //awbb_LowBrGrZones_m_BGrid_7__m_right
{0x0F12, 0x0128}, //awbb_LowBrGrZones_m_BGrid_8__m_left
{0x0F12, 0x025C}, //awbb_LowBrGrZones_m_BGrid_8__m_right
{0x0F12, 0x0146}, //awbb_LowBrGrZones_m_BGrid_9__m_left
{0x0F12, 0x0236}, //awbb_LowBrGrZones_m_BGrid_9__m_right
{0x0F12, 0x0164}, //awbb_LowBrGrZones_m_BGrid_10__m_left
{0x0F12, 0x0212}, //awbb_LowBrGrZones_m_BGrid_10__m_right
{0x0F12, 0x0000}, //awbb_LowBrGrZones_m_BGrid_11__m_left
{0x0F12, 0x0000}, //awbb_LowBrGrZones_m_BGrid_11__m_right
{0x0F12, 0x0006}, //awbb_LowBrGrZones_m_GridStep
{0x002A, 0x10E8},
{0x0F12, 0x000B}, //awbb_LowBrGrZones_ZInfo_m_GridSz
{0x002A, 0x10EC},
{0x0F12, 0x00D2}, //awbb_LowBrGrZones_m_Boffs
// Low Temp. Zone
{0x002A, 0x10F0},
{0x0F12, 0x039A},
{0x0F12, 0x0000}, //awbb_CrclLowT_R_c
{0x0F12, 0x00FE},
{0x0F12, 0x0000}, //awbb_CrclLowT_B_c
{0x0F12, 0x2284},
{0x0F12, 0x0000}, //awbb_CrclLowT_Rad_c
//AWB - GridCorrection
{0x002A, 0x1434},
{0x0F12, 0x02C1}, //awbb_GridConst_1_0_
{0x0F12, 0x033A}, //awbb_GridConst_1_1_
{0x0F12, 0x038A}, //awbb_GridConst_1_2_
{0x0F12, 0x101A}, //awbb_GridConst_2_0_
{0x0F12, 0x1075}, //awbb_GridConst_2_1_
{0x0F12, 0x113D}, //awbb_GridConst_2_2_
{0x0F12, 0x113F}, //awbb_GridConst_2_3_
{0x0F12, 0x11AF}, //awbb_GridConst_2_4_
{0x0F12, 0x11F0}, //awbb_GridConst_2_5_
{0x0F12, 0x00B2}, //awbb_GridCoeff_R_1
{0x0F12, 0x00B8}, //awbb_GridCoeff_B_1
{0x0F12, 0x00CA}, //awbb_GridCoeff_R_2
{0x0F12, 0x009D}, //awbb_GridCoeff_B_2
// Indoor Grid Offset
{0x002A, 0x13A4},
{0x0F12, 0x0000}, //D65 awbb_GridCorr_R_0__0_
{0x0F12, 0xffd0}, //D65 CW awbb_GridCorr_R_0__1_
{0x0F12, 0xFFE0}, //CW awbb_GridCorr_R_0__2_
{0x0F12, 0x0000}, //FFF0 FFd0 A awbb_GridCorr_R_0__3_
{0x0F12, 0x0000}, //FFF0 FFd0 A awbb_GridCorr_R_0__4_
{0x0F12, 0x0000}, //FFF0 FFd0 H awbb_GridCorr_R_0__5_
{0x0F12, 0x0000}, //D65awbb_GridCorr_R_1__0_
{0x0F12, 0xffd0}, //D65 CW awbb_GridCorr_R_1__1_
{0x0F12, 0xFFE0}, //CW awbb_GridCorr_R_1__2_
{0x0F12, 0x0000}, //A awbb_GridCorr_R_1__3_
{0x0F12, 0x0000}, //A awbb_GridCorr_R_1__4_
{0x0F12, 0x0000}, //H awbb_GridCorr_R_1__5_
{0x0F12, 0x0000}, //D65awbb_GridCorr_R_2__0_
{0x0F12, 0xffd0}, //D65 CW awbb_GridCorr_R_2__1_
{0x0F12, 0xFFE0}, //CW awbb_GridCorr_R_2__2_
{0x0F12, 0x0000}, //A awbb_GridCorr_R_2__3_
{0x0F12, 0x0000}, //A awbb_GridCorr_R_2__4_
{0x0F12, 0x0000}, //H awbb_GridCorr_R_2__5_
{0x0F12, 0xFFD0}, //awbb_GridCorr_B_0__0_
{0x0F12, 0xFFE0}, //awbb_GridCorr_B_0__1_
{0x0F12, 0x0020}, //awbb_GridCorr_B_0__2_
{0x0F12, 0xFFE0}, //FFE0 0000 awbb_GridCorr_B_0__3_
{0x0F12, 0xFFE0}, //FFE0 0000 awbb_GridCorr_B_0__4_
{0x0F12, 0xFFE0}, //FFE0 0000 awbb_GridCorr_B_0__5_
{0x0F12, 0xFFD0}, //awbb_GridCorr_B_1__0_
{0x0F12, 0xFFE0}, //awbb_GridCorr_B_1__1_
{0x0F12, 0x0020}, //awbb_GridCorr_B_1__2_
{0x0F12, 0xFFE0}, //awbb_GridCorr_B_1__3_
{0x0F12, 0xFFE0}, //awbb_GridCorr_B_1__4_
{0x0F12, 0xFFE0}, //awbb_GridCorr_B_1__5_
{0x0F12, 0xFFD0}, //awbb_GridCorr_B_2__0_
{0x0F12, 0xFFE0}, //awbb_GridCorr_B_2__1_
{0x0F12, 0x0020}, //awbb_GridCorr_B_2__2_
{0x0F12, 0xFFE0}, //awbb_GridCorr_B_2__3_
{0x0F12, 0xFFE0}, //awbb_GridCorr_B_2__4_
{0x0F12, 0xFFE0}, //awbb_GridCorr_B_2__5_
// Outdoor Grid Offset
{0x0F12, 0xFFD0}, //FFB0 //FFC0 awbb_GridCorr_R_Out_0__0_
{0x0F12, 0xFFE0}, //FFC0 //FFD0 awbb_GridCorr_R_Out_0__1_
{0x0F12, 0xFFE0}, //FFC0 //FFD0 awbb_GridCorr_R_Out_0__2_
{0x0F12, 0xFFE0}, //FFC0 //FFD0 awbb_GridCorr_R_Out_0__3_
{0x0F12, 0x0000}, //0000 //0000 awbb_GridCorr_R_Out_0__4_
{0x0F12, 0x0000}, //0000 //0000 awbb_GridCorr_R_Out_0__5_
{0x0F12, 0xFFD0}, //awbb_GridCorr_R_Out_1__0_
{0x0F12, 0xFFE0}, //awbb_GridCorr_R_Out_1__1_
{0x0F12, 0xFFE0}, //awbb_GridCorr_R_Out_1__2_
{0x0F12, 0xFFE0}, //awbb_GridCorr_R_Out_1__3_
{0x0F12, 0x0000}, //awbb_GridCorr_R_Out_1__4_
{0x0F12, 0x0000}, //awbb_GridCorr_R_Out_1__5_
{0x0F12, 0xFFD0}, //awbb_GridCorr_R_Out_2__0_
{0x0F12, 0xFFE0}, //awbb_GridCorr_R_Out_2__1_
{0x0F12, 0xFFE0}, //awbb_GridCorr_R_Out_2__2_
{0x0F12, 0xFFE0}, //awbb_GridCorr_R_Out_2__3_
{0x0F12, 0x0000}, //awbb_GridCorr_R_Out_2__4_
{0x0F12, 0x0000}, //awbb_GridCorr_R_Out_2__5_
{0x0F12, 0x0090}, //0080 //awbb_GridCorr_B_Out_0__0_
{0x0F12, 0xFFF0}, //FFE0 //awbb_GridCorr_B_Out_0__1_
{0x0F12, 0xFFF0}, //FFE0 //awbb_GridCorr_B_Out_0__2_
{0x0F12, 0xFFF0}, //FFE0 //awbb_GridCorr_B_Out_0__3_
{0x0F12, 0x0000}, //0000 //awbb_GridCorr_B_Out_0__4_
{0x0F12, 0x0000}, //0000 //awbb_GridCorr_B_Out_0__5_
{0x0F12, 0x0090}, //awbb_GridCorr_B_Out_1__0_
{0x0F12, 0xFFF0}, //awbb_GridCorr_B_Out_1__1_
{0x0F12, 0xFFF0}, //awbb_GridCorr_B_Out_1__2_
{0x0F12, 0xFFF0}, //awbb_GridCorr_B_Out_1__3_
{0x0F12, 0x0000}, //awbb_GridCorr_B_Out_1__4_
{0x0F12, 0x0000}, //awbb_GridCorr_B_Out_1__5_
{0x0F12, 0x0090}, //awbb_GridCorr_B_Out_2__0_
{0x0F12, 0xFFF0}, //awbb_GridCorr_B_Out_2__1_
{0x0F12, 0xFFF0}, //awbb_GridCorr_B_Out_2__2_
{0x0F12, 0xFFF0}, //awbb_GridCorr_B_Out_2__3_
{0x0F12, 0x0000}, //awbb_GridCorr_B_Out_2__4_
{0x0F12, 0x0000}, //awbb_GridCorr_B_Out_2__5_
//==================================================================================
// 10.Clock Setting
//==================================================================================
//Input Clock (Mclk)
{0x002A, 0x01F8},
{0x0F12, 0x5DC0}, //REG_TC_IPRM_InClockLSBs
{0x002A, 0x0212},
{0x0F12, 0x0002}, //0 //REG_TC_IPRM_UseNPviClocks
{0x0F12, 0x0000}, //2 //REG_TC_IPRM_UseNMipiClocks
{0x0F12, 0x0000}, //2 //REG_TC_IPRM_NumberOfMipiLanes
//System Clock & Output clock (Pclk)
{0x002A, 0x021A},
{0x0F12, 0x34BC}, //REG_TC_IPRM_OpClk4KHz_0
{0x0F12, 0x4F1A}, //REG_TC_IPRM_MinOutRate4KHz_0
{0x0F12, 0x4F1A}, //REG_TC_IPRM_MaxOutRate4KHz_0
{0x0F12, 0x4F1A}, //REG_TC_IPRM_OpClk4KHz_1 SCLK : 81Mhz
{0x0F12, 0x4F1A}, //REG_TC_IPRM_MinOutRate4KHz_1 PCLK Min : 81Mhz
{0x0F12, 0x4F1A}, //REG_TC_IPRM_MaxOutRate4KHz_1 PCLK Max : 81Mhz
//==================================================================================
// 11.Auto Flicker Detection
//==================================================================================
{0x002A, 0x0F30},
{0x0F12, 0x0001}, //AFC_D_ConvAccelerPower
// Auto Flicker (60Mhz start)
{0x002A, 0x0F2A},
{0x0F12, 0x0000}, //AFC_Default BIT[0] 1:60Hz 0:50Hz
{0x002A, 0x04E6},
{0x0F12, 0x075F}, //REG_TC_DBG 7F: 60Hz 5F:50Hz
{0x002A, 0x04E6},
{0x0F12, 0x075F}, //REG_TC_DBG 7F: 60Hz 5F:50Hz
{0x002a, 0x04d6},
{0x0F12, 0x0001}, //REG_SF_USER_FlickerQuant 01h : 50hz 02h : 60hz
{0x0F12, 0x0001}, //REG_SF_USER_FlickerQuantChanged
//==================================================================================
// 12.AE Setting
//==================================================================================
//AE Target
{0x002A, 0x1484},
{0x0F12, 0x003C}, //TVAR_ae_BrAve
//ae_StatMode bit[3] BLC has to be bypassed to prevent AE weight change especially backlight scene
{0x002A, 0x148A},
{0x0F12, 0x000F}, //ae_StatMode
{0x002A, 0x0588},
{0x0F12, 0x0002}, //lt_uInitPostToleranceCnt
//AE_state
{0x002A, 0x0544},
{0x0F12, 0x0111}, //lt_uLimitHigh
{0x0F12, 0x00EF}, //lt_uLimitLow
//AE Concept
{0x002A, 0x0608},
{0x0F12, 0x0001}, //lt_ExpGain_uSubsamplingmode
{0x0F12, 0x0001}, //lt_ExpGain_uNonSubsampling
//Exposure
{0x002a, 0x0610}, //lt_ExpGain_ExpCurveGainMaxStr_0__ulExpIn_0
{0x0F12, 0x0001},
{0x0F12, 0x0000},
{0x0F12, 0x0A3C},
{0x0F12, 0x0000},
{0x0F12, 0x0D05},
{0x0F12, 0x0000},
{0x0F12, 0x4008},
{0x0F12, 0x0000},
{0x0F12, 0x7000},
{0x0F12, 0x0000},
{0x0F12, 0x9C00},
{0x0F12, 0x0000},
{0x0F12, 0xAD00},
{0x0F12, 0x0001},
{0x0F12, 0xF1D4},
{0x0F12, 0x0002},
{0x0F12, 0xDC00},
{0x0F12, 0x0005},
{0x0F12, 0xDC00},
{0x0F12, 0x0005},
{0x002A, 0x0638}, //lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_0_
{0x0F12, 0x0001},
{0x0F12, 0x0000},
{0x0F12, 0x0A3C},
{0x0F12, 0x0000},
{0x0F12, 0x0D05},
{0x0F12, 0x0000},
{0x0F12, 0x3408},
{0x0F12, 0x0000},
{0x0F12, 0x3408},
{0x0F12, 0x0000},
{0x0F12, 0x6810},
{0x0F12, 0x0000},
{0x0F12, 0x8214},
{0x0F12, 0x0000},
{0x0F12, 0xC350},
{0x0F12, 0x0000},
{0x0F12, 0xC350},
{0x0F12, 0x0000},
{0x0F12, 0xC350},
{0x0F12, 0x0000},
//Gain
{0x002A, 0x060C},
{0x0F12, 0x0800}, //lt_ExpGain_ExpCurveGainMaxStr
{0x0F12, 0x0100}, //lt_ExpGain_ExpCurveGainMaxStr_0__uMaxDigGain
{0x002A, 0x05a2},
{0x0F12, 0x1000}, //lt_uMaxTotGain
// Lei Control
{0x002A, 0x06B8},
{0x0F12, 0x452C},
{0x0F12, 0x0005}, //lt_uMaxLei
//==================================================================================
// 13.AE Weight (Normal)
//==================================================================================
{0x002A, 0x1492},
{0x0F12, 0x0100}, //ae_WeightTbl_16[0]
{0x0F12, 0x0101}, //ae_WeightTbl_16[1]
{0x0F12, 0x0101}, //ae_WeightTbl_16[2]
{0x0F12, 0x0001}, //ae_WeightTbl_16[3]
{0x0F12, 0x0101}, //ae_WeightTbl_16[4]
{0x0F12, 0x0201}, //ae_WeightTbl_16[5]
{0x0F12, 0x0102}, //ae_WeightTbl_16[6]
{0x0F12, 0x0101}, //ae_WeightTbl_16[7]
{0x0F12, 0x0101}, //ae_WeightTbl_16[8]
{0x0F12, 0x0202}, //ae_WeightTbl_16[9]
{0x0F12, 0x0202}, //ae_WeightTbl_16[10]
{0x0F12, 0x0101}, //ae_WeightTbl_16[11]
{0x0F12, 0x0201}, //ae_WeightTbl_16[12]
{0x0F12, 0x0302}, //ae_WeightTbl_16[13]
{0x0F12, 0x0203}, //ae_WeightTbl_16[14]
{0x0F12, 0x0102}, //ae_WeightTbl_16[15]
{0x0F12, 0x0201}, //ae_WeightTbl_16[16]
{0x0F12, 0x0302}, //ae_WeightTbl_16[17]
{0x0F12, 0x0203}, //ae_WeightTbl_16[18]
{0x0F12, 0x0102}, //ae_WeightTbl_16[19]
{0x0F12, 0x0201}, //ae_WeightTbl_16[20]
{0x0F12, 0x0202}, //ae_WeightTbl_16[21]
{0x0F12, 0x0202}, //ae_WeightTbl_16[22]
{0x0F12, 0x0102}, //ae_WeightTbl_16[23]
{0x0F12, 0x0101}, //ae_WeightTbl_16[24]
{0x0F12, 0x0202}, //ae_WeightTbl_16[25]
{0x0F12, 0x0202}, //ae_WeightTbl_16[26]
{0x0F12, 0x0101}, //ae_WeightTbl_16[27]
{0x0F12, 0x0101}, //ae_WeightTbl_16[28]
{0x0F12, 0x0101}, //ae_WeightTbl_16[29]
{0x0F12, 0x0101}, //ae_WeightTbl_16[30]
{0x0F12, 0x0101}, //ae_WeightTbl_16[31]
//==================================================================================
// 14.Flash Setting
//==================================================================================
{0x002A, 0x0484},
{0x0F12, 0x0002}, //capture flash on
{0x002A, 0x183A},
{0x0F12, 0x0001}, //one frame AE
{0x002A, 0x17F6},
{0x0F12, 0x023C}, //AWB R point
{0x0F12, 0x0248}, //AWB B point
{0x002A, 0x1840},
{0x0F12, 0x0001}, // Fls AE tune start
{0x0F12, 0x0100}, // fls_afl_FlsAFIn Rin
{0x0F12, 0x0120},
{0x0F12, 0x0180},
{0x0F12, 0x0200},
{0x0F12, 0x0400},
{0x0F12, 0x0800},
{0x0F12, 0x0A00},
{0x0F12, 0x1000},
{0x0F12, 0x0100}, // fls_afl_FlsAFOut Rout
{0x0F12, 0x00A0},
{0x0F12, 0x0090},
{0x0F12, 0x0080},
{0x0F12, 0x0070},
{0x0F12, 0x0045},
{0x0F12, 0x0030},
{0x0F12, 0x0010},
{0x002A, 0x1884},
{0x0F12, 0x0100}, // fls_afl_FlsNBOut flash NB default
{0x0F12, 0x0100},
{0x0F12, 0x0100},
{0x0F12, 0x0100},
{0x0F12, 0x0100},
{0x0F12, 0x0100},
{0x0F12, 0x0100},
{0x0F12, 0x0100},
{0x002A, 0x1826},
{0x0F12, 0x0100}, // fls_afl_FlashWP_Weight flash NB default
{0x0F12, 0x00C0},
{0x0F12, 0x0080},
{0x0F12, 0x000A},
{0x0F12, 0x0000},
{0x0F12, 0x0030}, // fls_afl_FlashWP_Weight flash NB default
{0x0F12, 0x0040},
{0x0F12, 0x0048},
{0x0F12, 0x0050},
{0x0F12, 0x0060},
{0x002A, 0x4784},
{0x0F12, 0x00A0}, // TNP_Regs_FlsWeightRIn weight tune start in
{0x0F12, 0x00C0},
{0x0F12, 0x00D0},
{0x0F12, 0x0100},
{0x0F12, 0x0200},
{0x0F12, 0x0300},
{0x0F12, 0x0088}, // TNP_Regs_FlsWeightROut weight tune start out
{0x0F12, 0x00B0},
{0x0F12, 0x00C0},
{0x0F12, 0x0100},
{0x0F12, 0x0200},
{0x0F12, 0x0300},
{0x002A, 0x479C},
{0x0F12, 0x0120}, //Fls BRIn
{0x0F12, 0x0150},
{0x0F12, 0x0200},
{0x0F12, 0x003C}, // Fls BROut
{0x0F12, 0x003B},
{0x0F12, 0x0026}, //brightness
//==================================================================================
// 15.CCM Setting
//==================================================================================
{0x002A, 0x08A6},
{0x0F12, 0x00C0}, //SARR_AwbCcmCord[0]
{0x0F12, 0x0100}, //SARR_AwbCcmCord[1]
{0x0F12, 0x0125}, //SARR_AwbCcmCord[2]
{0x0F12, 0x015F}, //SARR_AwbCcmCord[3]
{0x0F12, 0x017C}, //SARR_AwbCcmCord[4]
{0x0F12, 0x0194}, //SARR_AwbCcmCord[5]
{0x002A, 0x0898},
{0x0F12, 0x4800}, //TVAR_wbt_pBaseCcms
{0x0F12, 0x7000},
{0x002A, 0x08A0},
{0x0F12, 0x48D8}, //TVAR_wbt_pOutdoorCcm
{0x0F12, 0x7000},
//Horizon
{0x002A, 0x4800},
{0x0F12, 0x01EB}, //0210 //H TVAR_wbt_pBaseCcms[0]
{0x0F12, 0xFFD1}, //FFC0 //TVAR_wbt_pBaseCcms[1]
{0x0F12, 0xFFDC}, //FFCC //TVAR_wbt_pBaseCcms[2]
{0x0F12, 0xFF2B}, //FF34 //TVAR_wbt_pBaseCcms[3]
{0x0F12, 0x0200}, //01EB //TVAR_wbt_pBaseCcms[4]
{0x0F12, 0xFEFD}, //FF09 //TVAR_wbt_pBaseCcms[5]
{0x0F12, 0x001C}, //001C //TVAR_wbt_pBaseCcms[6]
{0x0F12, 0xFFE4}, //FFE4 //TVAR_wbt_pBaseCcms[7]
{0x0F12, 0x01CD}, //01CD //TVAR_wbt_pBaseCcms[8]
{0x0F12, 0x00E3}, //00D9 //TVAR_wbt_pBaseCcms[9]
{0x0F12, 0x00E3}, //00D9 //TVAR_wbt_pBaseCcms[10]
{0x0F12, 0xFE80}, //FE95 //TVAR_wbt_pBaseCcms[11]
{0x0F12, 0x0208}, //0208 //TVAR_wbt_pBaseCcms[12]
{0x0F12, 0xFF75}, //FF75 //TVAR_wbt_pBaseCcms[13]
{0x0F12, 0x0199}, //0199 //TVAR_wbt_pBaseCcms[14]
{0x0F12, 0xFF06}, //FF06 //TVAR_wbt_pBaseCcms[15]
{0x0F12, 0x01BA}, //01BA //TVAR_wbt_pBaseCcms[16]
{0x0F12, 0x0108}, //0108 //TVAR_wbt_pBaseCcms[17]
// INCA A
{0x0F12, 0x01EB}, //0210 //A TVAR_wbt_pBaseCcms[18]
{0x0F12, 0xFFD1}, //FFC0 //TVAR_wbt_pBaseCcms[19]
{0x0F12, 0xFFDC}, //FFCC //TVAR_wbt_pBaseCcms[20]
{0x0F12, 0xFF2B}, //FF34 //TVAR_wbt_pBaseCcms[21]
{0x0F12, 0x0200}, //01EB //TVAR_wbt_pBaseCcms[22]
{0x0F12, 0xFEFD}, //FF09 //TVAR_wbt_pBaseCcms[23]
{0x0F12, 0x001C}, //001C //TVAR_wbt_pBaseCcms[24]
{0x0F12, 0xFFE4}, //FFE4 //TVAR_wbt_pBaseCcms[25]
{0x0F12, 0x01CD}, //01CD //TVAR_wbt_pBaseCcms[26]
{0x0F12, 0x00E3}, //00D9 //TVAR_wbt_pBaseCcms[27]
{0x0F12, 0x00E3}, //00D9 //TVAR_wbt_pBaseCcms[28]
{0x0F12, 0xFE80}, //FE95 //TVAR_wbt_pBaseCcms[29]
{0x0F12, 0x0208}, //0208 //TVAR_wbt_pBaseCcms[30]
{0x0F12, 0xFF75}, //FF75 //TVAR_wbt_pBaseCcms[31]
{0x0F12, 0x0199}, //0199 //TVAR_wbt_pBaseCcms[32]
{0x0F12, 0xFF06}, //FF06 //TVAR_wbt_pBaseCcms[33]
{0x0F12, 0x01BA}, //01BA //TVAR_wbt_pBaseCcms[34]
{0x0F12, 0x0108}, //0108 //TVAR_wbt_pBaseCcms[35]
//Warm White
{0x0F12, 0x022B}, //0230 //0243 //023E //023B //0231 //0227 //CW TVAR_wbt_pBaseCcms[36]
{0x0F12, 0xFF8C}, //FF9E //FF8E //FF8A //FF8D //FF93 //FF95 //TVAR_wbt_pBaseCcms[37]
{0x0F12, 0xFFD8}, //FFC5 //FFC3 //FFCC //FFCF //FFD4 //FFE0 //TVAR_wbt_pBaseCcms[38]
{0x0F12, 0xFECA}, //FECC //FECE //FED4 //FED2 //TVAR_wbt_pBaseCcms[39]
{0x0F12, 0x0192}, //018D //0189 //017F //0174 //TVAR_wbt_pBaseCcms[40]
{0x0F12, 0xFF0E}, //FF10 //FF12 //FF16 //FF1F //TVAR_wbt_pBaseCcms[41]
{0x0F12, 0xFFD2}, //FFD2 //FFD2 //FFD2 //FFCB //TVAR_wbt_pBaseCcms[42]
{0x0F12, 0xFFD2}, //FFD2 //FFD2 //FFD2 //FFCB //TVAR_wbt_pBaseCcms[43]
{0x0F12, 0x01C8}, //01C8 //01C8 //01C8 //01D6 //TVAR_wbt_pBaseCcms[44]
{0x0F12, 0x00F9}, //00F9 //00F9 //00F9 //00F8 //TVAR_wbt_pBaseCcms[45]
{0x0F12, 0x00DE}, //00DE //00DE //00DE //00D5 //TVAR_wbt_pBaseCcms[46]
{0x0F12, 0xFF26}, //FF26 //FF26 //FF26 //FF34 //TVAR_wbt_pBaseCcms[47]
{0x0F12, 0x0151}, //0151 //0151 //0151 //0151 //TVAR_wbt_pBaseCcms[48]
{0x0F12, 0xFF50}, //FF50 //FF50 //FF50 //FF50 //TVAR_wbt_pBaseCcms[49]
{0x0F12, 0x0147}, //0147 //0147 //0147 //0147 //TVAR_wbt_pBaseCcms[50]
{0x0F12, 0xFF86}, //FF86 //FF86 //FF86 //FF86 //FF75 //TVAR_wbt_pBaseCcms[51]
{0x0F12, 0x01B4}, //01B4 //01B4 //01B4 //01B4 //0187 //TVAR_wbt_pBaseCcms[52]
{0x0F12, 0x017E}, //017E //017E //017E //017E //01BF //TVAR_wbt_pBaseCcms[53]
//Cool White
{0x0F12, 0x022B}, //0230 //0243 //023E //023B //0231 //0227 //CW TVAR_wbt_pBaseCcms[54]
{0x0F12, 0xFF8C}, //FF9E //FF8E //FF8A //FF8D //FF93 //FF95 //TVAR_wbt_pBaseCcms[55]
{0x0F12, 0xFFD8}, //FFC5 //FFC3 //FFCC //FFCF //FFD4 //FFE0 //TVAR_wbt_pBaseCcms[56]
{0x0F12, 0xFECA}, //FECC //FECE //FED4 //FED2 //TVAR_wbt_pBaseCcms[57]
{0x0F12, 0x0192}, //018D //0189 //017F //0174 //TVAR_wbt_pBaseCcms[58]
{0x0F12, 0xFF0E}, //FF10 //FF12 //FF16 //FF1F //TVAR_wbt_pBaseCcms[59]
{0x0F12, 0xFFD2}, //FFD2 //FFD2 //FFD2 //FFCB //TVAR_wbt_pBaseCcms[60]
{0x0F12, 0xFFD2}, //FFD2 //FFD2 //FFD2 //FFCB //TVAR_wbt_pBaseCcms[61]
{0x0F12, 0x01C8}, //01C8 //01C8 //01C8 //01D6 //TVAR_wbt_pBaseCcms[62]
{0x0F12, 0x00F9}, //00F9 //00F9 //00F9 //00F8 //TVAR_wbt_pBaseCcms[63]
{0x0F12, 0x00DE}, //00DE //00DE //00DE //00D5 //TVAR_wbt_pBaseCcms[64]
{0x0F12, 0xFF26}, //FF26 //FF26 //FF26 //FF34 //TVAR_wbt_pBaseCcms[65]
{0x0F12, 0x0151}, //0151 //0151 //0151 //0151 //TVAR_wbt_pBaseCcms[66]
{0x0F12, 0xFF50}, //FF50 //FF50 //FF50 //FF50 //TVAR_wbt_pBaseCcms[67]
{0x0F12, 0x0147}, //0147 //0147 //0147 //0147 //TVAR_wbt_pBaseCcms[68]
{0x0F12, 0xFF86}, //FF86 //FF86 //FF86 //FF86 //FF75 //TVAR_wbt_pBaseCcms[69]
{0x0F12, 0x01B4}, //01B4 //01B4 //01B4 //01B4 //0187 //TVAR_wbt_pBaseCcms[70]
{0x0F12, 0x017E}, //017E //017E //017E //017E //01BF //TVAR_wbt_pBaseCcms[71]
//D50
{0x0F12, 0x01EC}, //TVAR_wbt_pBaseCcms[72]
{0x0F12, 0xFFB2}, //TVAR_wbt_pBaseCcms[73]
{0x0F12, 0x0007}, //TVAR_wbt_pBaseCcms[74]
{0x0F12, 0xFEE1}, //TVAR_wbt_pBaseCcms[75]
{0x0F12, 0x013A}, //TVAR_wbt_pBaseCcms[76]
{0x0F12, 0xFF3C}, //TVAR_wbt_pBaseCcms[77]
{0x0F12, 0xFFDB}, //TVAR_wbt_pBaseCcms[78]
{0x0F12, 0xFFDB}, //TVAR_wbt_pBaseCcms[79]
{0x0F12, 0x01BE}, //TVAR_wbt_pBaseCcms[80]
{0x0F12, 0x00D3}, //TVAR_wbt_pBaseCcms[81]
{0x0F12, 0x00E4}, //TVAR_wbt_pBaseCcms[82]
{0x0F12, 0xFF4A}, //TVAR_wbt_pBaseCcms[83]
{0x0F12, 0x0151}, //TVAR_wbt_pBaseCcms[84]
{0x0F12, 0xFF50}, //TVAR_wbt_pBaseCcms[85]
{0x0F12, 0x0147}, //TVAR_wbt_pBaseCcms[86]
{0x0F12, 0xFF86}, //FF74 //FF75 //TVAR_wbt_pBaseCcms[87]
{0x0F12, 0x01B4}, //01A2 //0187 //TVAR_wbt_pBaseCcms[88]
{0x0F12, 0x017E}, //01A2 //01BF //TVAR_wbt_pBaseCcms[89]
//D65
{0x0F12, 0x01EC}, //d65 TVAR_wbt_pBaseCcms[90]
{0x0F12, 0xFFB2}, //TVAR_wbt_pBaseCcms[91]
{0x0F12, 0x0007}, //TVAR_wbt_pBaseCcms[92]
{0x0F12, 0xFEE1}, //TVAR_wbt_pBaseCcms[93]
{0x0F12, 0x013A}, //TVAR_wbt_pBaseCcms[94]
{0x0F12, 0xFF3C}, //TVAR_wbt_pBaseCcms[95]
{0x0F12, 0xFFDB}, //TVAR_wbt_pBaseCcms[96]
{0x0F12, 0xFFDB}, //TVAR_wbt_pBaseCcms[97]
{0x0F12, 0x01BE}, //TVAR_wbt_pBaseCcms[98]
{0x0F12, 0x00D3}, //TVAR_wbt_pBaseCcms[99]
{0x0F12, 0x00E4}, //TVAR_wbt_pBaseCcms[100]
{0x0F12, 0xFF4A}, //TVAR_wbt_pBaseCcms[101]
{0x0F12, 0x0151}, //TVAR_wbt_pBaseCcms[102]
{0x0F12, 0xFF50}, //TVAR_wbt_pBaseCcms[103]
{0x0F12, 0x0147}, //TVAR_wbt_pBaseCcms[104]
{0x0F12, 0xFF86}, //FF74 //FF75 //TVAR_wbt_pBaseCcms[105]
{0x0F12, 0x01B4}, //01A2 //0187 //TVAR_wbt_pBaseCcms[106]
{0x0F12, 0x017E}, //01A2 //01BF //TVAR_wbt_pBaseCcms[107]
//Outdoor
{0x002A, 0x48d8},
{0x0F12, 0x01DC}, //01D2 //01D4 //TVAR_wbt_pOutdoorCcm[0]
{0x0F12, 0xFF91}, //FF97 //FF9D //TVAR_wbt_pOutdoorCcm[1]
{0x0F12, 0xFFE9}, //FFED //FFE8 //TVAR_wbt_pOutdoorCcm[2]
{0x0F12, 0xFEB5}, //FEA9 //TVAR_wbt_pOutdoorCcm[3]
{0x0F12, 0x013A}, //0143 //TVAR_wbt_pOutdoorCcm[4]
{0x0F12, 0xFEFF}, //FF01 //TVAR_wbt_pOutdoorCcm[5]
{0x0F12, 0xFFB7}, //FFB7 //TVAR_wbt_pOutdoorCcm[6]
{0x0F12, 0xFFF5}, //FFF5 //TVAR_wbt_pOutdoorCcm[7]
{0x0F12, 0x0237}, //0237 //TVAR_wbt_pOutdoorCcm[8]
{0x0F12, 0x00D5}, //00B9 //TVAR_wbt_pOutdoorCcm[9]
{0x0F12, 0x0101}, //0126 //TVAR_wbt_pOutdoorCcm[10]
{0x0F12, 0xFF39}, //FF33 //TVAR_wbt_pOutdoorCcm[11]
{0x0F12, 0x01CE}, //01CE //TVAR_wbt_pOutdoorCcm[12]
{0x0F12, 0xFF83}, //FF83 //TVAR_wbt_pOutdoorCcm[13]
{0x0F12, 0x0195}, //0195 //TVAR_wbt_pOutdoorCcm[14]
{0x0F12, 0xFEF3}, //FEF3 //TVAR_wbt_pOutdoorCcm[15]
{0x0F12, 0x014F}, //014F //TVAR_wbt_pOutdoorCcm[16]
{0x0F12, 0x0137}, //0137 //TVAR_wbt_pOutdoorCcm[17]
//==================================================================================
// 16.GAMMA
//==================================================================================
{0x002A, 0x0734},
{0x0F12, 0x0000}, //0000 //0000 //0000 //saRR_usDualGammaLutRGBIndoor[0][0]
{0x0F12, 0x0008}, //0004 //0004 //000A //saRR_usDualGammaLutRGBIndoor[0][1]
{0x0F12, 0x0010}, //0010 //0010 //0016 //saRR_usDualGammaLutRGBIndoor[0][2]
{0x0F12, 0x0028}, //0020 //0020 //0030 //saRR_usDualGammaLutRGBIndoor[0][3]
{0x0F12, 0x0058}, //0050 //0060 //0066 //saRR_usDualGammaLutRGBIndoor[0][4]
{0x0F12, 0x00C8}, //00C0 //00D5 //00D5 //saRR_usDualGammaLutRGBIndoor[0][5]
{0x0F12, 0x0138}, //0138 //0138 //0138 //saRR_usDualGammaLutRGBIndoor[0][6]
{0x0F12, 0x0163}, //0163 //0163 //0163 //saRR_usDualGammaLutRGBIndoor[0][7]
{0x0F12, 0x0189}, //0189 //0189 //0189 //saRR_usDualGammaLutRGBIndoor[0][8]
{0x0F12, 0x01C6}, //01C6 //01C6 //01C6 //saRR_usDualGammaLutRGBIndoor[0][9]
{0x0F12, 0x01F8}, //01F8 //01F8 //01F8 //saRR_usDualGammaLutRGBIndoor[0][10]
{0x0F12, 0x0222}, //0222 //0222 //0222 //saRR_usDualGammaLutRGBIndoor[0][11]
{0x0F12, 0x0247}, //0247 //0247 //0247 //saRR_usDualGammaLutRGBIndoor[0][12]
{0x0F12, 0x0288}, //0288 //0288 //0282 //saRR_usDualGammaLutRGBIndoor[0][13]
{0x0F12, 0x02C0}, //02C0 //02C0 //02B5 //saRR_usDualGammaLutRGBIndoor[0][14]
{0x0F12, 0x0318}, //0318 //0318 //030F //saRR_usDualGammaLutRGBIndoor[0][15]
{0x0F12, 0x035F}, //035F //035F //035F //saRR_usDualGammaLutRGBIndoor[0][16]
{0x0F12, 0x03A2}, //03A2 //03A2 //03A2 //saRR_usDualGammaLutRGBIndoor[0][17]
{0x0F12, 0x03D8}, //03D8 //03D8 //03D8 //saRR_usDualGammaLutRGBIndoor[0][18]
{0x0F12, 0x03FF}, //03FF //03FF //03FF //saRR_usDualGammaLutRGBIndoor[0][19]
{0x0F12, 0x0000}, //0000 //0000 //0000 //saRR_usDualGammaLutRGBIndoor[1][0]
{0x0F12, 0x0008}, //0004 //0004 //000A //saRR_usDualGammaLutRGBIndoor[1][1]
{0x0F12, 0x0010}, //0010 //0010 //0016 //saRR_usDualGammaLutRGBIndoor[1][2]
{0x0F12, 0x0028}, //0020 //0020 //0030 //saRR_usDualGammaLutRGBIndoor[1][3]
{0x0F12, 0x0058}, //0050 //0060 //0066 //saRR_usDualGammaLutRGBIndoor[1][4]
{0x0F12, 0x00C8}, //00C0 //00D5 //00D5 //saRR_usDualGammaLutRGBIndoor[1][5]
{0x0F12, 0x0138}, //0138 //0138 //0138 //saRR_usDualGammaLutRGBIndoor[1][6]
{0x0F12, 0x0163}, //0163 //0163 //0163 //saRR_usDualGammaLutRGBIndoor[1][7]
{0x0F12, 0x0189}, //0189 //0189 //0189 //saRR_usDualGammaLutRGBIndoor[1][8]
{0x0F12, 0x01C6}, //01C6 //01C6 //01C6 //saRR_usDualGammaLutRGBIndoor[1][9]
{0x0F12, 0x01F8}, //01F8 //01F8 //01F8 //saRR_usDualGammaLutRGBIndoor[1][10]
{0x0F12, 0x0222}, //0222 //0222 //0222 //saRR_usDualGammaLutRGBIndoor[1][11]
{0x0F12, 0x0247}, //0247 //0247 //0247 //saRR_usDualGammaLutRGBIndoor[1][12]
{0x0F12, 0x0288}, //0288 //0288 //0282 //saRR_usDualGammaLutRGBIndoor[1][13]
{0x0F12, 0x02C0}, //02C0 //02C0 //02B5 //saRR_usDualGammaLutRGBIndoor[1][14]
{0x0F12, 0x0318}, //0318 //0318 //030F //saRR_usDualGammaLutRGBIndoor[1][15]
{0x0F12, 0x035F}, //035F //035F //035F //saRR_usDualGammaLutRGBIndoor[1][16]
{0x0F12, 0x03A2}, //03A2 //03A2 //03A2 //saRR_usDualGammaLutRGBIndoor[1][17]
{0x0F12, 0x03D8}, //03D8 //03D8 //03D8 //saRR_usDualGammaLutRGBIndoor[1][18]
{0x0F12, 0x03FF}, //03FF //03FF //03FF //saRR_usDualGammaLutRGBIndoor[1][19]
{0x0F12, 0x0000}, //0000 //0000 //0000 //saRR_usDualGammaLutRGBIndoor[2][0]
{0x0F12, 0x0008}, //0004 //0004 //000A //saRR_usDualGammaLutRGBIndoor[2][1]
{0x0F12, 0x0010}, //0010 //0010 //0016 //saRR_usDualGammaLutRGBIndoor[2][2]
{0x0F12, 0x0028}, //0020 //0020 //0030 //saRR_usDualGammaLutRGBIndoor[2][3]
{0x0F12, 0x0058}, //0050 //0060 //0066 //saRR_usDualGammaLutRGBIndoor[2][4]
{0x0F12, 0x00C8}, //00C0 //00D5 //00D5 //saRR_usDualGammaLutRGBIndoor[2][5]
{0x0F12, 0x0138}, //0138 //0138 //0138 //saRR_usDualGammaLutRGBIndoor[2][6]
{0x0F12, 0x0163}, //0163 //0163 //0163 //saRR_usDualGammaLutRGBIndoor[2][7]
{0x0F12, 0x0189}, //0189 //0189 //0189 //saRR_usDualGammaLutRGBIndoor[2][8]
{0x0F12, 0x01C6}, //01C6 //01C6 //01C6 //saRR_usDualGammaLutRGBIndoor[2][9]
{0x0F12, 0x01F8}, //01F8 //01F8 //01F8 //saRR_usDualGammaLutRGBIndoor[2][10]
{0x0F12, 0x0222}, //0222 //0222 //0222 //saRR_usDualGammaLutRGBIndoor[2][11]
{0x0F12, 0x0247}, //0247 //0247 //0247 //saRR_usDualGammaLutRGBIndoor[2][12]
{0x0F12, 0x0288}, //0288 //0288 //0282 //saRR_usDualGammaLutRGBIndoor[2][13]
{0x0F12, 0x02C0}, //02C0 //02C0 //02B5 //saRR_usDualGammaLutRGBIndoor[2][14]
{0x0F12, 0x0318}, //0318 //0318 //030F //saRR_usDualGammaLutRGBIndoor[2][15]
{0x0F12, 0x035F}, //035F //035F //035F //saRR_usDualGammaLutRGBIndoor[2][16]
{0x0F12, 0x03A2}, //03A2 //03A2 //03A2 //saRR_usDualGammaLutRGBIndoor[2][17]
{0x0F12, 0x03D8}, //03D8 //03D8 //03D8 //saRR_usDualGammaLutRGBIndoor[2][18]
{0x0F12, 0x03FF}, //03FF //03FF //03FF //saRR_usDualGammaLutRGBIndoor[2][19]
{0x0F12, 0x0000}, //0000 //0000 //0000 //0000 //0000 //0000 //saRR_usDualGammaLutRGBOutdoor[0][0]
{0x0F12, 0x000B}, //0004 //0004 //0004 //000C //000B //000B //saRR_usDualGammaLutRGBOutdoor[0][1]
{0x0F12, 0x0019}, //0010 //0010 //0010 //0020 //0019 //0019 //saRR_usDualGammaLutRGBOutdoor[0][2]
{0x0F12, 0x0036}, //0020 //0020 //0020 //0050 //0048 //0036 //saRR_usDualGammaLutRGBOutdoor[0][3]
{0x0F12, 0x006F}, //0060 //0060 //0060 //0098 //008C //006F //saRR_usDualGammaLutRGBOutdoor[0][4]
{0x0F12, 0x00D8}, //00E4 //00F0 //00D8 //00FC //00F0 //00D8 //saRR_usDualGammaLutRGBOutdoor[0][5]
{0x0F12, 0x0135}, //0158 //0168 //0148 //0148 //0140 //0135 //saRR_usDualGammaLutRGBOutdoor[0][6]
{0x0F12, 0x015F}, //0180 //0190 //0174 //0168 //0164 //015F //saRR_usDualGammaLutRGBOutdoor[0][7]
{0x0F12, 0x0185}, //01A8 //01B8 //0198 //0185 //0185 //0185 //saRR_usDualGammaLutRGBOutdoor[0][8]
{0x0F12, 0x01C1}, //01E8 //01FC //01D4 //01C1 //01C1 //01C1 //saRR_usDualGammaLutRGBOutdoor[0][9]
{0x0F12, 0x01F3}, //021C //0230 //0208 //01F3 //01F3 //01F3 //saRR_usDualGammaLutRGBOutdoor[0][10]
{0x0F12, 0x0220}, //0248 //0260 //0234 //0220 //0220 //0220 //saRR_usDualGammaLutRGBOutdoor[0][11]
{0x0F12, 0x024A}, //0274 //0288 //0260 //024A //024A //024A //saRR_usDualGammaLutRGBOutdoor[0][12]
{0x0F12, 0x0291}, //02C0 //02D0 //02A8 //0291 //0291 //0291 //saRR_usDualGammaLutRGBOutdoor[0][13]
{0x0F12, 0x02D0}, //02FC //030C //02E4 //02D0 //02D0 //02D0 //saRR_usDualGammaLutRGBOutdoor[0][14]
{0x0F12, 0x032A}, //0358 //0360 //0340 //032A //032A //032A //saRR_usDualGammaLutRGBOutdoor[0][15]
{0x0F12, 0x036A}, //0394 //0398 //0380 //036A //036A //036A //saRR_usDualGammaLutRGBOutdoor[0][16]
{0x0F12, 0x039F}, //03BC //03C0 //03B0 //039F //039F //039F //saRR_usDualGammaLutRGBOutdoor[0][17]
{0x0F12, 0x03CC}, //03DC //03E0 //03D8 //03CC //03CC //03CC //saRR_usDualGammaLutRGBOutdoor[0][18]
{0x0F12, 0x03F9}, //03F9 //03F9 //03F9 //03F9 //03F9 //03F9 //saRR_usDualGammaLutRGBOutdoor[0][19]
{0x0F12, 0x0000}, //0000 //0000 //0000 //0000 //0000 //0000 //saRR_usDualGammaLutRGBOutdoor[1][0]
{0x0F12, 0x000B}, //0004 //0004 //0004 //000C //000B //000B //saRR_usDualGammaLutRGBOutdoor[1][1]
{0x0F12, 0x0019}, //0010 //0010 //0010 //0020 //0019 //0019 //saRR_usDualGammaLutRGBOutdoor[1][2]
{0x0F12, 0x0036}, //0020 //0020 //0020 //0050 //0048 //0036 //saRR_usDualGammaLutRGBOutdoor[1][3]
{0x0F12, 0x006F}, //0060 //0060 //0060 //0098 //008C //006F //saRR_usDualGammaLutRGBOutdoor[1][4]
{0x0F12, 0x00D8}, //00E4 //00F0 //00D8 //00FC //00F0 //00D8 //saRR_usDualGammaLutRGBOutdoor[1][5]
{0x0F12, 0x0135}, //0158 //0168 //0148 //0148 //0140 //0135 //saRR_usDualGammaLutRGBOutdoor[1][6]
{0x0F12, 0x015F}, //0180 //0190 //0174 //0168 //0164 //015F //saRR_usDualGammaLutRGBOutdoor[1][7]
{0x0F12, 0x0185}, //01A8 //01B8 //0198 //0185 //0185 //0185 //saRR_usDualGammaLutRGBOutdoor[1][8]
{0x0F12, 0x01C1}, //01E8 //01FC //01D4 //01C1 //01C1 //01C1 //saRR_usDualGammaLutRGBOutdoor[1][9]
{0x0F12, 0x01F3}, //021C //0230 //0208 //01F3 //01F3 //01F3 //saRR_usDualGammaLutRGBOutdoor[1][10]
{0x0F12, 0x0220}, //0248 //0260 //0234 //0220 //0220 //0220 //saRR_usDualGammaLutRGBOutdoor[1][11]
{0x0F12, 0x024A}, //0274 //0288 //0260 //024A //024A //024A //saRR_usDualGammaLutRGBOutdoor[1][12]
{0x0F12, 0x0291}, //02C0 //02D0 //02A8 //0291 //0291 //0291 //saRR_usDualGammaLutRGBOutdoor[1][13]
{0x0F12, 0x02D0}, //02FC //030C //02E4 //02D0 //02D0 //02D0 //saRR_usDualGammaLutRGBOutdoor[1][14]
{0x0F12, 0x032A}, //0358 //0360 //0340 //032A //032A //032A //saRR_usDualGammaLutRGBOutdoor[1][15]
{0x0F12, 0x036A}, //0394 //0398 //0380 //036A //036A //036A //saRR_usDualGammaLutRGBOutdoor[1][16]
{0x0F12, 0x039F}, //03BC //03C0 //03B0 //039F //039F //039F //saRR_usDualGammaLutRGBOutdoor[1][17]
{0x0F12, 0x03CC}, //03DC //03E0 //03D8 //03CC //03CC //03CC //saRR_usDualGammaLutRGBOutdoor[1][18]
{0x0F12, 0x03F9}, //03F9 //03F9 //03F9 //03F9 //03F9 //03F9 //saRR_usDualGammaLutRGBOutdoor[1][19]
{0x0F12, 0x0000}, //0000 //0000 //0000 //0000 //0000 //0000 //saRR_usDualGammaLutRGBOutdoor[2][0]
{0x0F12, 0x000B}, //0004 //0004 //0004 //000C //000B //000B //saRR_usDualGammaLutRGBOutdoor[2][1]
{0x0F12, 0x0019}, //0010 //0010 //0010 //0020 //0019 //0019 //saRR_usDualGammaLutRGBOutdoor[2][2]
{0x0F12, 0x0036}, //0020 //0020 //0020 //0050 //0048 //0036 //saRR_usDualGammaLutRGBOutdoor[2][3]
{0x0F12, 0x006F}, //0060 //0060 //0060 //0098 //008C //006F //saRR_usDualGammaLutRGBOutdoor[2][4]
{0x0F12, 0x00D8}, //00E4 //00F0 //00D8 //00FC //00F0 //00D8 //saRR_usDualGammaLutRGBOutdoor[2][5]
{0x0F12, 0x0135}, //0158 //0168 //0148 //0148 //0140 //0135 //saRR_usDualGammaLutRGBOutdoor[2][6]
{0x0F12, 0x015F}, //0180 //0190 //0174 //0168 //0164 //015F //saRR_usDualGammaLutRGBOutdoor[2][7]
{0x0F12, 0x0185}, //01A8 //01B8 //0198 //0185 //0185 //0185 //saRR_usDualGammaLutRGBOutdoor[2][8]
{0x0F12, 0x01C1}, //01E8 //01FC //01D4 //01C1 //01C1 //01C1 //saRR_usDualGammaLutRGBOutdoor[2][9]
{0x0F12, 0x01F3}, //021C //0230 //0208 //01F3 //01F3 //01F3 //saRR_usDualGammaLutRGBOutdoor[2][10]
{0x0F12, 0x0220}, //0248 //0260 //0234 //0220 //0220 //0220 //saRR_usDualGammaLutRGBOutdoor[2][11]
{0x0F12, 0x024A}, //0274 //0288 //0260 //024A //024A //024A //saRR_usDualGammaLutRGBOutdoor[2][12]
{0x0F12, 0x0291}, //02C0 //02D0 //02A8 //0291 //0291 //0291 //saRR_usDualGammaLutRGBOutdoor[2][13]
{0x0F12, 0x02D0}, //02FC //030C //02E4 //02D0 //02D0 //02D0 //saRR_usDualGammaLutRGBOutdoor[2][14]
{0x0F12, 0x032A}, //0358 //0360 //0340 //032A //032A //032A //saRR_usDualGammaLutRGBOutdoor[2][15]
{0x0F12, 0x036A}, //0394 //0398 //0380 //036A //036A //036A //saRR_usDualGammaLutRGBOutdoor[2][16]
{0x0F12, 0x039F}, //03BC //03C0 //03B0 //039F //039F //039F //saRR_usDualGammaLutRGBOutdoor[2][17]
{0x0F12, 0x03CC}, //03DC //03E0 //03D8 //03CC //03CC //03CC //saRR_usDualGammaLutRGBOutdoor[2][18]
{0x0F12, 0x03F9}, //03F9 //03F9 //03F9 //03F9 //03F9 //03F9 //saRR_usDualGammaLutRGBOutdoor[2][19]
//==================================================================================
// 17.AFIT
//==================================================================================
{0x002A, 0x0944},
{0x0F12, 0x0050}, //afit_uNoiseIndInDoor
{0x0F12, 0x00B0}, //afit_uNoiseIndInDoor
{0x0F12, 0x0196}, //afit_uNoiseIndInDoor
{0x0F12, 0x0245}, //afit_uNoiseIndInDoor
{0x0F12, 0x0300}, //afit_uNoiseIndInDoor
{0x002A, 0x0938},
{0x0F12, 0x0000}, // on/off AFIT by NB option
{0x0F12, 0x0014}, //SARR_uNormBrInDoor
{0x0F12, 0x00D2}, //SARR_uNormBrInDoor
{0x0F12, 0x0384}, //SARR_uNormBrInDoor
{0x0F12, 0x07D0}, //SARR_uNormBrInDoor
{0x0F12, 0x1388}, //SARR_uNormBrInDoor
{0x002A, 0x0976},
{0x0F12, 0x0070}, //afit_usGamutTh
{0x0F12, 0x0005}, //afit_usNeargrayOffset
{0x0F12, 0x0000}, //afit_bUseSenBpr
{0x0F12, 0x01CC}, //afit_usBprThr_0_
{0x0F12, 0x01CC}, //afit_usBprThr_1_
{0x0F12, 0x01CC}, //afit_usBprThr_2_
{0x0F12, 0x01CC}, //afit_usBprThr_3_
{0x0F12, 0x01CC}, //afit_usBprThr_4_
{0x0F12, 0x0180}, //afit_NIContrastAFITValue
{0x0F12, 0x0196}, //afit_NIContrastTh
{0x002A, 0x098C},
{0x0F12, 0x0000}, //7000098C//AFIT16_BRIGHTNESS
{0x0F12, 0x0000}, //7000098E//AFIT16_CONTRAST
{0x0F12, 0x0000}, //70000990//AFIT16_SATURATION
{0x0F12, 0x0000}, //70000992//AFIT16_SHARP_BLUR
{0x0F12, 0x0000}, //70000994//AFIT16_GLAMOUR
{0x0F12, 0x00C0}, //70000996//AFIT16_bnr_edge_high
{0x0F12, 0x0064}, //70000998//AFIT16_postdmsc_iLowBright
{0x0F12, 0x0384}, //7000099A//AFIT16_postdmsc_iHighBright
{0x0F12, 0x005F}, //7000099C//AFIT16_postdmsc_iLowSat
{0x0F12, 0x01F4}, //7000099E//AFIT16_postdmsc_iHighSat
{0x0F12, 0x0070}, //700009A0//AFIT16_postdmsc_iTune
{0x0F12, 0x0040}, //700009A2//AFIT16_yuvemix_mNegRanges_0
{0x0F12, 0x00A0}, //700009A4//AFIT16_yuvemix_mNegRanges_1
{0x0F12, 0x0100}, //700009A6//AFIT16_yuvemix_mNegRanges_2
{0x0F12, 0x0010}, //700009A8//AFIT16_yuvemix_mPosRanges_0
{0x0F12, 0x0040}, //700009AA//AFIT16_yuvemix_mPosRanges_1
{0x0F12, 0x00A0}, //700009AC//AFIT16_yuvemix_mPosRanges_2
{0x0F12, 0x1430}, //700009AE//AFIT8_bnr_edge_low [7:0] AFIT8_bnr_repl_thresh
{0x0F12, 0x0201}, //700009B0//AFIT8_bnr_repl_force [7:0] AFIT8_bnr_iHotThreshHigh
{0x0F12, 0x0204}, //700009B2//AFIT8_bnr_iHotThreshLow [7:0] AFIT8_bnr_iColdThreshHigh
{0x0F12, 0x3604}, //700009B4//AFIT8_bnr_iColdThreshLow [7:0] AFIT8_bnr_DispTH_Low
{0x0F12, 0x032A}, //700009B6//AFIT8_bnr_DispTH_High [7:0] AFIT8_bnr_DISP_Limit_Low
{0x0F12, 0x0403}, //700009B8//AFIT8_bnr_DISP_Limit_High [7:0] AFIT8_bnr_iDistSigmaMin
{0x0F12, 0x1B06}, //700009BA//AFIT8_bnr_iDistSigmaMax [7:0] AFIT8_bnr_iDiffSigmaLow
{0x0F12, 0x6015}, //700009BC//AFIT8_bnr_iDiffSigmaHigh [7:0] AFIT8_bnr_iNormalizedSTD_TH
{0x0F12, 0x00C0}, //700009BE//AFIT8_bnr_iNormalizedSTD_Limit [7:0] AFIT8_bnr_iDirNRTune
{0x0F12, 0x6080}, //700009C0//AFIT8_bnr_iDirMinThres [7:0] AFIT8_bnr_iDirFltDiffThresHigh
{0x0F12, 0x4080}, //700009C2//AFIT8_bnr_iDirFltDiffThresLow [7:0] AFIT8_bnr_iDirSmoothPowerHigh
{0x0F12, 0x0640}, //700009C4//AFIT8_bnr_iDirSmoothPowerLow [7:0] AFIT8_bnr_iLowMaxSlopeAllowed
{0x0F12, 0x0306}, //700009C6//AFIT8_bnr_iHighMaxSlopeAllowed [7:0] AFIT8_bnr_iLowSlopeThresh
{0x0F12, 0x2003}, //700009C8//AFIT8_bnr_iHighSlopeThresh [7:0] AFIT8_bnr_iSlopenessTH
{0x0F12, 0xFF01}, //700009CA//AFIT8_bnr_iSlopeBlurStrength [7:0] AFIT8_bnr_iSlopenessLimit
{0x0F12, 0x0000}, //700009CC//AFIT8_bnr_AddNoisePower1 [7:0] AFIT8_bnr_AddNoisePower2
{0x0F12, 0x0400}, //700009CE//AFIT8_bnr_iRadialTune [7:0] AFIT8_bnr_iRadialPower
{0x0F12, 0x365A}, //700009D0//AFIT8_bnr_iRadialLimit [7:0] AFIT8_ee_iFSMagThLow
{0x0F12, 0x102A}, //700009D2//AFIT8_ee_iFSMagThHigh [7:0] AFIT8_ee_iFSVarThLow
{0x0F12, 0x000B}, //700009D4//AFIT8_ee_iFSVarThHigh [7:0] AFIT8_ee_iFSThLow
{0x0F12, 0x0600}, //700009D6//AFIT8_ee_iFSThHigh [7:0] AFIT8_ee_iFSmagPower
{0x0F12, 0x5A0F}, //700009D8//AFIT8_ee_iFSVarCountTh [7:0] AFIT8_ee_iRadialLimit
{0x0F12, 0x0505}, //700009DA//AFIT8_ee_iRadialPower [7:0] AFIT8_ee_iSmoothEdgeSlope
{0x0F12, 0x1802}, //700009DC//AFIT8_ee_iROADThres [7:0] AFIT8_ee_iROADMaxNR
{0x0F12, 0x0000}, //700009DE//AFIT8_ee_iROADSubMaxNR [7:0] AFIT8_ee_iROADSubThres
{0x0F12, 0x2006}, //700009E0//AFIT8_ee_iROADNeiThres [7:0] AFIT8_ee_iROADNeiMaxNR
{0x0F12, 0x3028}, //700009E2//AFIT8_ee_iSmoothEdgeThres [7:0] AFIT8_ee_iMSharpen
{0x0F12, 0x0418}, //700009E4//AFIT8_ee_iWSharpen [7:0] AFIT8_ee_iMShThresh
{0x0F12, 0x0101}, //700009E6//AFIT8_ee_iWShThresh [7:0] AFIT8_ee_iReduceNegative
{0x0F12, 0x0800}, //700009E8//AFIT8_ee_iEmbossCentAdd [7:0] AFIT8_ee_iShDespeckle
{0x0F12, 0x1804}, //700009EA//AFIT8_ee_iReduceEdgeThresh [7:0] AFIT8_dmsc_iEnhThresh
{0x0F12, 0x4008}, //700009EC//AFIT8_dmsc_iDesatThresh [7:0] AFIT8_dmsc_iDemBlurHigh
{0x0F12, 0x0540}, //700009EE//AFIT8_dmsc_iDemBlurLow [7:0] AFIT8_dmsc_iDemBlurRange
{0x0F12, 0x8006}, //700009F0//AFIT8_dmsc_iDecisionThresh [7:0] AFIT8_dmsc_iCentGrad
{0x0F12, 0x0020}, //700009F2//AFIT8_dmsc_iMonochrom [7:0] AFIT8_dmsc_iGBDenoiseVal
{0x0F12, 0x0000}, //700009F4//AFIT8_dmsc_iGRDenoiseVal [7:0] AFIT8_dmsc_iEdgeDesatThrHigh
{0x0F12, 0x1800}, //700009F6//AFIT8_dmsc_iEdgeDesatThrLow [7:0] AFIT8_dmsc_iEdgeDesat
{0x0F12, 0x0000}, //700009F8//AFIT8_dmsc_iNearGrayDesat [7:0] AFIT8_dmsc_iEdgeDesatLimit
{0x0F12, 0x1E10}, //700009FA//AFIT8_postdmsc_iBCoeff [7:0] AFIT8_postdmsc_iGCoeff
{0x0F12, 0x000B}, //700009FC//AFIT8_postdmsc_iWideMult [7:0] AFIT8_yuvemix_mNegSlopes_0
{0x0F12, 0x0607}, //700009FE//AFIT8_yuvemix_mNegSlopes_1 [7:0] AFIT8_yuvemix_mNegSlopes_2
{0x0F12, 0x0005}, //70000A00//AFIT8_yuvemix_mNegSlopes_3 [7:0] AFIT8_yuvemix_mPosSlopes_0
{0x0F12, 0x0607}, //70000A02//AFIT8_yuvemix_mPosSlopes_1 [7:0] AFIT8_yuvemix_mPosSlopes_2
{0x0F12, 0x0405}, //70000A04//AFIT8_yuvemix_mPosSlopes_3 [7:0] AFIT8_yuviirnr_iXSupportY
{0x0F12, 0x0205}, //70000A06//AFIT8_yuviirnr_iXSupportUV [7:0] AFIT8_yuviirnr_iLowYNorm
{0x0F12, 0x0304}, //70000A08//AFIT8_yuviirnr_iHighYNorm [7:0] AFIT8_yuviirnr_iLowUVNorm
{0x0F12, 0x0409}, //70000A0A//AFIT8_yuviirnr_iHighUVNorm [7:0] AFIT8_yuviirnr_iYNormShift
{0x0F12, 0x0306}, //70000A0C//AFIT8_yuviirnr_iUVNormShift [7:0] AFIT8_yuviirnr_iVertLength_Y
{0x0F12, 0x0407}, //70000A0E//AFIT8_yuviirnr_iVertLength_UV [7:0] AFIT8_yuviirnr_iDiffThreshL_Y
{0x0F12, 0x1C04}, //70000A10//AFIT8_yuviirnr_iDiffThreshH_Y [7:0] AFIT8_yuviirnr_iDiffThreshL_UV
{0x0F12, 0x0214}, //70000A12//AFIT8_yuviirnr_iDiffThreshH_UV [7:0] AFIT8_yuviirnr_iMaxThreshL_Y
{0x0F12, 0x1002}, //70000A14//AFIT8_yuviirnr_iMaxThreshH_Y [7:0] AFIT8_yuviirnr_iMaxThreshL_UV
{0x0F12, 0x0610}, //70000A16//AFIT8_yuviirnr_iMaxThreshH_UV [7:0] AFIT8_yuviirnr_iYNRStrengthL
{0x0F12, 0x1A02}, //70000A18//AFIT8_yuviirnr_iYNRStrengthH [7:0] AFIT8_yuviirnr_iUVNRStrengthL
{0x0F12, 0x4A18}, //70000A1A//AFIT8_yuviirnr_iUVNRStrengthH [7:0] AFIT8_byr_gras_iShadingPower
{0x0F12, 0x0080}, //70000A1C//AFIT8_RGBGamma2_iLinearity [7:0] AFIT8_RGBGamma2_iDarkReduce
{0x0F12, 0x0348}, //70000A1E//AFIT8_ccm_oscar_iSaturation [7:0] AFIT8_RGB2YUV_iYOffset
{0x0F12, 0x0180}, //70000A20//AFIT8_RGB2YUV_iRGBGain [7:0] AFIT8_bnr_nClustLevel_H
{0x0F12, 0x0A0A}, //70000A22//AFIT8_bnr_iClustMulT_H [7:0] AFIT8_bnr_iClustMulT_C
{0x0F12, 0x0101}, //70000A24//AFIT8_bnr_iClustThresh_H [7:0] AFIT8_bnr_iClustThresh_C
{0x0F12, 0x2A36}, //70000A26//AFIT8_bnr_iDenThreshLow [7:0] AFIT8_bnr_iDenThreshHigh
{0x0F12, 0x6024}, //70000A28//AFIT8_ee_iLowSharpPower [7:0] AFIT8_ee_iHighSharpPower
{0x0F12, 0x2A36}, //70000A2A//AFIT8_ee_iLowShDenoise [7:0] AFIT8_ee_iHighShDenoise
{0x0F12, 0xFFFF}, //70000A2C//AFIT8_ee_iLowSharpClamp [7:0] AFIT8_ee_iHighSharpClamp
{0x0F12, 0x0808}, //70000A2E//AFIT8_ee_iReduceEdgeMinMult [7:0] AFIT8_ee_iReduceEdgeSlope
{0x0F12, 0x0A01}, //70000A30//AFIT8_bnr_nClustLevel_H_Bin [7:0] AFIT8_bnr_iClustMulT_H_Bin
{0x0F12, 0x010A}, //70000A32//AFIT8_bnr_iClustMulT_C_Bin [7:0] AFIT8_bnr_iClustThresh_H_Bin
{0x0F12, 0x3601}, //70000A34//AFIT8_bnr_iClustThresh_C_Bin [7:0] AFIT8_bnr_iDenThreshLow_Bin
{0x0F12, 0x242A}, //70000A36//AFIT8_bnr_iDenThreshHigh_Bin [7:0] AFIT8_ee_iLowSharpPower_Bin
{0x0F12, 0x3660}, //70000A38//AFIT8_ee_iHighSharpPower_Bin [7:0] AFIT8_ee_iLowShDenoise_Bin
{0x0F12, 0xFF2A}, //70000A3A//AFIT8_ee_iHighShDenoise_Bin [7:0] AFIT8_ee_iLowSharpClamp_Bin
{0x0F12, 0x08FF}, //70000A3C//AFIT8_ee_iHighSharpClamp_Bin [7:0] AFIT8_ee_iReduceEdgeMinMult_Bin
{0x0F12, 0x0008}, //70000A3E//AFIT8_ee_iReduceEdgeSlope_Bin [7:0]
{0x0F12, 0x0001}, //70000A40//AFITB_bnr_nClustLevel_C [0]
{0x0F12, 0x0000}, //70000A42//AFIT16_BRIGHTNESS
{0x0F12, 0x0000}, //70000A44//AFIT16_CONTRAST
{0x0F12, 0x0000}, //70000A46//AFIT16_SATURATION
{0x0F12, 0x0000}, //70000A48//AFIT16_SHARP_BLUR
{0x0F12, 0x0000}, //70000A4A//AFIT16_GLAMOUR
{0x0F12, 0x00C0}, //70000A4C//AFIT16_bnr_edge_high
{0x0F12, 0x0064}, //70000A4E//AFIT16_postdmsc_iLowBright
{0x0F12, 0x0384}, //70000A50//AFIT16_postdmsc_iHighBright
{0x0F12, 0x0051}, //70000A52//AFIT16_postdmsc_iLowSat
{0x0F12, 0x01F4}, //70000A54//AFIT16_postdmsc_iHighSat
{0x0F12, 0x0070}, //70000A56//AFIT16_postdmsc_iTune
{0x0F12, 0x0040}, //70000A58//AFIT16_yuvemix_mNegRanges_0
{0x0F12, 0x00A0}, //70000A5A//AFIT16_yuvemix_mNegRanges_1
{0x0F12, 0x0100}, //70000A5C//AFIT16_yuvemix_mNegRanges_2
{0x0F12, 0x0010}, //70000A5E//AFIT16_yuvemix_mPosRanges_0
{0x0F12, 0x0060}, //70000A60//AFIT16_yuvemix_mPosRanges_1
{0x0F12, 0x0100}, //70000A62//AFIT16_yuvemix_mPosRanges_2
{0x0F12, 0x1430}, //70000A64//AFIT8_bnr_edge_low [7:0] AFIT8_bnr_repl_thresh
{0x0F12, 0x0201}, //70000A66//AFIT8_bnr_repl_force [7:0] AFIT8_bnr_iHotThreshHigh
{0x0F12, 0x0204}, //70000A68//AFIT8_bnr_iHotThreshLow [7:0] AFIT8_bnr_iColdThreshHigh
{0x0F12, 0x2404}, //70000A6A//AFIT8_bnr_iColdThreshLow [7:0] AFIT8_bnr_DispTH_Low
{0x0F12, 0x031B}, //70000A6C//AFIT8_bnr_DispTH_High [7:0] AFIT8_bnr_DISP_Limit_Low
{0x0F12, 0x0103}, //70000A6E//AFIT8_bnr_DISP_Limit_High [7:0] AFIT8_bnr_iDistSigmaMin
{0x0F12, 0x1205}, //70000A70//AFIT8_bnr_iDistSigmaMax [7:0] AFIT8_bnr_iDiffSigmaLow
{0x0F12, 0x400D}, //70000A72//AFIT8_bnr_iDiffSigmaHigh [7:0] AFIT8_bnr_iNormalizedSTD_TH
{0x0F12, 0x0080}, //70000A74//AFIT8_bnr_iNormalizedSTD_Limit [7:0] AFIT8_bnr_iDirNRTune
{0x0F12, 0x2080}, //70000A76//AFIT8_bnr_iDirMinThres [7:0] AFIT8_bnr_iDirFltDiffThresHigh
{0x0F12, 0x3040}, //70000A78//AFIT8_bnr_iDirFltDiffThresLow [7:0] AFIT8_bnr_iDirSmoothPowerHigh
{0x0F12, 0x0630}, //70000A7A//AFIT8_bnr_iDirSmoothPowerLow [7:0] AFIT8_bnr_iLowMaxSlopeAllowed
{0x0F12, 0x0306}, //70000A7C//AFIT8_bnr_iHighMaxSlopeAllowed [7:0] AFIT8_bnr_iLowSlopeThresh
{0x0F12, 0x2003}, //70000A7E//AFIT8_bnr_iHighSlopeThresh [7:0] AFIT8_bnr_iSlopenessTH
{0x0F12, 0xFF01}, //70000A80//AFIT8_bnr_iSlopeBlurStrength [7:0] AFIT8_bnr_iSlopenessLimit
{0x0F12, 0x0404}, //70000A82//AFIT8_bnr_AddNoisePower1 [7:0] AFIT8_bnr_AddNoisePower2
{0x0F12, 0x0300}, //70000A84//AFIT8_bnr_iRadialTune [7:0] AFIT8_bnr_iRadialPower
{0x0F12, 0x245A}, //70000A86//AFIT8_bnr_iRadialLimit [7:0] AFIT8_ee_iFSMagThLow
{0x0F12, 0x1018}, //70000A88//AFIT8_ee_iFSMagThHigh [7:0] AFIT8_ee_iFSVarThLow
{0x0F12, 0x000B}, //70000A8A//AFIT8_ee_iFSVarThHigh [7:0] AFIT8_ee_iFSThLow
{0x0F12, 0x0B00}, //70000A8C//AFIT8_ee_iFSThHigh [7:0] AFIT8_ee_iFSmagPower
{0x0F12, 0x5A0F}, //70000A8E//AFIT8_ee_iFSVarCountTh [7:0] AFIT8_ee_iRadialLimit
{0x0F12, 0x0505}, //70000A90//AFIT8_ee_iRadialPower [7:0] AFIT8_ee_iSmoothEdgeSlope
{0x0F12, 0x1802}, //70000A92//AFIT8_ee_iROADThres [7:0] AFIT8_ee_iROADMaxNR
{0x0F12, 0x0000}, //70000A94//AFIT8_ee_iROADSubMaxNR [7:0] AFIT8_ee_iROADSubThres
{0x0F12, 0x2006}, //70000A96//AFIT8_ee_iROADNeiThres [7:0] AFIT8_ee_iROADNeiMaxNR
{0x0F12, 0x3428}, //70000A98//AFIT8_ee_iSmoothEdgeThres [7:0] AFIT8_ee_iMSharpen
{0x0F12, 0x041C}, //70000A9A//AFIT8_ee_iWSharpen [7:0] AFIT8_ee_iMShThresh
{0x0F12, 0x0101}, //70000A9C//AFIT8_ee_iWShThresh [7:0] AFIT8_ee_iReduceNegative
{0x0F12, 0x0800}, //70000A9E//AFIT8_ee_iEmbossCentAdd [7:0] AFIT8_ee_iShDespeckle
{0x0F12, 0x1004}, //70000AA0//AFIT8_ee_iReduceEdgeThresh [7:0] AFIT8_dmsc_iEnhThresh
{0x0F12, 0x4008}, //70000AA2//AFIT8_dmsc_iDesatThresh [7:0] AFIT8_dmsc_iDemBlurHigh
{0x0F12, 0x0540}, //70000AA4//AFIT8_dmsc_iDemBlurLow [7:0] AFIT8_dmsc_iDemBlurRange
{0x0F12, 0x8006}, //70000AA6//AFIT8_dmsc_iDecisionThresh [7:0] AFIT8_dmsc_iCentGrad
{0x0F12, 0x0020}, //70000AA8//AFIT8_dmsc_iMonochrom [7:0] AFIT8_dmsc_iGBDenoiseVal
{0x0F12, 0x0000}, //70000AAA//AFIT8_dmsc_iGRDenoiseVal [7:0] AFIT8_dmsc_iEdgeDesatThrHigh
{0x0F12, 0x1800}, //70000AAC//AFIT8_dmsc_iEdgeDesatThrLow [7:0] AFIT8_dmsc_iEdgeDesat
{0x0F12, 0x0000}, //70000AAE//AFIT8_dmsc_iNearGrayDesat [7:0] AFIT8_dmsc_iEdgeDesatLimit
{0x0F12, 0x1E10}, //70000AB0//AFIT8_postdmsc_iBCoeff [7:0] AFIT8_postdmsc_iGCoeff
{0x0F12, 0x000B}, //70000AB2//AFIT8_postdmsc_iWideMult [7:0] AFIT8_yuvemix_mNegSlopes_0
{0x0F12, 0x0607}, //70000AB4//AFIT8_yuvemix_mNegSlopes_1 [7:0] AFIT8_yuvemix_mNegSlopes_2
{0x0F12, 0x0005}, //70000AB6//AFIT8_yuvemix_mNegSlopes_3 [7:0] AFIT8_yuvemix_mPosSlopes_0
{0x0F12, 0x0607}, //70000AB8//AFIT8_yuvemix_mPosSlopes_1 [7:0] AFIT8_yuvemix_mPosSlopes_2
{0x0F12, 0x0405}, //70000ABA//AFIT8_yuvemix_mPosSlopes_3 [7:0] AFIT8_yuviirnr_iXSupportY
{0x0F12, 0x0205}, //70000ABC//AFIT8_yuviirnr_iXSupportUV [7:0] AFIT8_yuviirnr_iLowYNorm
{0x0F12, 0x0304}, //70000ABE//AFIT8_yuviirnr_iHighYNorm [7:0] AFIT8_yuviirnr_iLowUVNorm
{0x0F12, 0x0409}, //70000AC0//AFIT8_yuviirnr_iHighUVNorm [7:0] AFIT8_yuviirnr_iYNormShift
{0x0F12, 0x0306}, //70000AC2//AFIT8_yuviirnr_iUVNormShift [7:0] AFIT8_yuviirnr_iVertLength_Y
{0x0F12, 0x0407}, //70000AC4//AFIT8_yuviirnr_iVertLength_UV [7:0] AFIT8_yuviirnr_iDiffThreshL_Y
{0x0F12, 0x1F04}, //70000AC6//AFIT8_yuviirnr_iDiffThreshH_Y [7:0] AFIT8_yuviirnr_iDiffThreshL_UV
{0x0F12, 0x0218}, //70000AC8//AFIT8_yuviirnr_iDiffThreshH_UV [7:0] AFIT8_yuviirnr_iMaxThreshL_Y
{0x0F12, 0x1102}, //70000ACA//AFIT8_yuviirnr_iMaxThreshH_Y [7:0] AFIT8_yuviirnr_iMaxThreshL_UV
{0x0F12, 0x0611}, //70000ACC//AFIT8_yuviirnr_iMaxThreshH_UV [7:0] AFIT8_yuviirnr_iYNRStrengthL
{0x0F12, 0x1A02}, //70000ACE//AFIT8_yuviirnr_iYNRStrengthH [7:0] AFIT8_yuviirnr_iUVNRStrengthL
{0x0F12, 0x8018}, //70000AD0//AFIT8_yuviirnr_iUVNRStrengthH [7:0] AFIT8_byr_gras_iShadingPower
{0x0F12, 0x0080}, //70000AD2//AFIT8_RGBGamma2_iLinearity [7:0] AFIT8_RGBGamma2_iDarkReduce
{0x0F12, 0x0380}, //70000AD4//AFIT8_ccm_oscar_iSaturation [7:0] AFIT8_RGB2YUV_iYOffset
{0x0F12, 0x0180}, //70000AD6//AFIT8_RGB2YUV_iRGBGain [7:0] AFIT8_bnr_nClustLevel_H
{0x0F12, 0x0A0A}, //70000AD8//AFIT8_bnr_iClustMulT_H [7:0] AFIT8_bnr_iClustMulT_C
{0x0F12, 0x0101}, //70000ADA//AFIT8_bnr_iClustThresh_H [7:0] AFIT8_bnr_iClustThresh_C
{0x0F12, 0x1B24}, //70000ADC//AFIT8_bnr_iDenThreshLow [7:0] AFIT8_bnr_iDenThreshHigh
{0x0F12, 0x6024}, //70000ADE//AFIT8_ee_iLowSharpPower [7:0] AFIT8_ee_iHighSharpPower
{0x0F12, 0x1D22}, //70000AE0//AFIT8_ee_iLowShDenoise [7:0] AFIT8_ee_iHighShDenoise
{0x0F12, 0xFFFF}, //70000AE2//AFIT8_ee_iLowSharpClamp [7:0] AFIT8_ee_iHighSharpClamp
{0x0F12, 0x0808}, //70000AE4//AFIT8_ee_iReduceEdgeMinMult [7:0] AFIT8_ee_iReduceEdgeSlope
{0x0F12, 0x0A01}, //70000AE6//AFIT8_bnr_nClustLevel_H_Bin [7:0] AFIT8_bnr_iClustMulT_H_Bin
{0x0F12, 0x010A}, //70000AE8//AFIT8_bnr_iClustMulT_C_Bin [7:0] AFIT8_bnr_iClustThresh_H_Bin
{0x0F12, 0x2401}, //70000AEA//AFIT8_bnr_iClustThresh_C_Bin [7:0] AFIT8_bnr_iDenThreshLow_Bin
{0x0F12, 0x241B}, //70000AEC//AFIT8_bnr_iDenThreshHigh_Bin [7:0] AFIT8_ee_iLowSharpPower_Bin
{0x0F12, 0x1E60}, //70000AEE//AFIT8_ee_iHighSharpPower_Bin [7:0] AFIT8_ee_iLowShDenoise_Bin
{0x0F12, 0xFF18}, //70000AF0//AFIT8_ee_iHighShDenoise_Bin [7:0] AFIT8_ee_iLowSharpClamp_Bin
{0x0F12, 0x08FF}, //70000AF2//AFIT8_ee_iHighSharpClamp_Bin [7:0] AFIT8_ee_iReduceEdgeMinMult_Bin
{0x0F12, 0x0008}, //70000AF4//AFIT8_ee_iReduceEdgeSlope_Bin [7:0]
{0x0F12, 0x0001}, //70000AF6//AFITB_bnr_nClustLevel_C [0]
{0x0F12, 0x0000}, //70000AF8//AFIT16_BRIGHTNESS
{0x0F12, 0x0000}, //70000AFA//AFIT16_CONTRAST
{0x0F12, 0x0000}, //70000AFC//AFIT16_SATURATION
{0x0F12, 0x0000}, //70000AFE//AFIT16_SHARP_BLUR
{0x0F12, 0x0000}, //70000B00//AFIT16_GLAMOUR
{0x0F12, 0x00C0}, //70000B02//AFIT16_bnr_edge_high
{0x0F12, 0x0064}, //70000B04//AFIT16_postdmsc_iLowBright
{0x0F12, 0x0384}, //70000B06//AFIT16_postdmsc_iHighBright
{0x0F12, 0x0043}, //70000B08//AFIT16_postdmsc_iLowSat
{0x0F12, 0x01F4}, //70000B0A//AFIT16_postdmsc_iHighSat
{0x0F12, 0x0070}, //70000B0C//AFIT16_postdmsc_iTune
{0x0F12, 0x0040}, //70000B0E//AFIT16_yuvemix_mNegRanges_0
{0x0F12, 0x00A0}, //70000B10//AFIT16_yuvemix_mNegRanges_1
{0x0F12, 0x0100}, //70000B12//AFIT16_yuvemix_mNegRanges_2
{0x0F12, 0x0010}, //70000B14//AFIT16_yuvemix_mPosRanges_0
{0x0F12, 0x0060}, //70000B16//AFIT16_yuvemix_mPosRanges_1
{0x0F12, 0x0100}, //70000B18//AFIT16_yuvemix_mPosRanges_2
{0x0F12, 0x1430}, //70000B1A//AFIT8_bnr_edge_low [7:0] AFIT8_bnr_repl_thresh
{0x0F12, 0x0201}, //70000B1C//AFIT8_bnr_repl_force [7:0] AFIT8_bnr_iHotThreshHigh
{0x0F12, 0x0204}, //70000B1E//AFIT8_bnr_iHotThreshLow [7:0] AFIT8_bnr_iColdThreshHigh
{0x0F12, 0x1B04}, //70000B20//AFIT8_bnr_iColdThreshLow [7:0] AFIT8_bnr_DispTH_Low
{0x0F12, 0x0312}, //70000B22//AFIT8_bnr_DispTH_High [7:0] AFIT8_bnr_DISP_Limit_Low
{0x0F12, 0x0003}, //70000B24//AFIT8_bnr_DISP_Limit_High [7:0] AFIT8_bnr_iDistSigmaMin
{0x0F12, 0x0C03}, //70000B26//AFIT8_bnr_iDistSigmaMax [7:0] AFIT8_bnr_iDiffSigmaLow
{0x0F12, 0x2806}, //70000B28//AFIT8_bnr_iDiffSigmaHigh [7:0] AFIT8_bnr_iNormalizedSTD_TH
{0x0F12, 0x0060}, //70000B2A//AFIT8_bnr_iNormalizedSTD_Limit [7:0] AFIT8_bnr_iDirNRTune
{0x0F12, 0x1580}, //70000B2C//AFIT8_bnr_iDirMinThres [7:0] AFIT8_bnr_iDirFltDiffThresHigh
{0x0F12, 0x2020}, //70000B2E//AFIT8_bnr_iDirFltDiffThresLow [7:0] AFIT8_bnr_iDirSmoothPowerHigh
{0x0F12, 0x0620}, //70000B30//AFIT8_bnr_iDirSmoothPowerLow [7:0] AFIT8_bnr_iLowMaxSlopeAllowed
{0x0F12, 0x0306}, //70000B32//AFIT8_bnr_iHighMaxSlopeAllowed [7:0] AFIT8_bnr_iLowSlopeThresh
{0x0F12, 0x2003}, //70000B34//AFIT8_bnr_iHighSlopeThresh [7:0] AFIT8_bnr_iSlopenessTH
{0x0F12, 0xFF01}, //70000B36//AFIT8_bnr_iSlopeBlurStrength [7:0] AFIT8_bnr_iSlopenessLimit
{0x0F12, 0x0404}, //70000B38//AFIT8_bnr_AddNoisePower1 [7:0] AFIT8_bnr_AddNoisePower2
{0x0F12, 0x0300}, //70000B3A//AFIT8_bnr_iRadialTune [7:0] AFIT8_bnr_iRadialPower
{0x0F12, 0x145A}, //70000B3C//AFIT8_bnr_iRadialLimit [7:0] AFIT8_ee_iFSMagThLow
{0x0F12, 0x1010}, //70000B3E//AFIT8_ee_iFSMagThHigh [7:0] AFIT8_ee_iFSVarThLow
{0x0F12, 0x000B}, //70000B40//AFIT8_ee_iFSVarThHigh [7:0] AFIT8_ee_iFSThLow
{0x0F12, 0x0E00}, //70000B42//AFIT8_ee_iFSThHigh [7:0] AFIT8_ee_iFSmagPower
{0x0F12, 0x5A0F}, //70000B44//AFIT8_ee_iFSVarCountTh [7:0] AFIT8_ee_iRadialLimit
{0x0F12, 0x0504}, //70000B46//AFIT8_ee_iRadialPower [7:0] AFIT8_ee_iSmoothEdgeSlope
{0x0F12, 0x1802}, //70000B48//AFIT8_ee_iROADThres [7:0] AFIT8_ee_iROADMaxNR
{0x0F12, 0x0000}, //70000B4A//AFIT8_ee_iROADSubMaxNR [7:0] AFIT8_ee_iROADSubThres
{0x0F12, 0x2006}, //70000B4C//AFIT8_ee_iROADNeiThres [7:0] AFIT8_ee_iROADNeiMaxNR
{0x0F12, 0x3828}, //70000B4E//AFIT8_ee_iSmoothEdgeThres [7:0] AFIT8_ee_iMSharpen
{0x0F12, 0x0428}, //70000B50//AFIT8_ee_iWSharpen [7:0] AFIT8_ee_iMShThresh
{0x0F12, 0x0101}, //70000B52//AFIT8_ee_iWShThresh [7:0] AFIT8_ee_iReduceNegative
{0x0F12, 0x8000}, //70000B54//AFIT8_ee_iEmbossCentAdd [7:0] AFIT8_ee_iShDespeckle
{0x0F12, 0x0A04}, //70000B56//AFIT8_ee_iReduceEdgeThresh [7:0] AFIT8_dmsc_iEnhThresh
{0x0F12, 0x4008}, //70000B58//AFIT8_dmsc_iDesatThresh [7:0] AFIT8_dmsc_iDemBlurHigh
{0x0F12, 0x0540}, //70000B5A//AFIT8_dmsc_iDemBlurLow [7:0] AFIT8_dmsc_iDemBlurRange
{0x0F12, 0x8006}, //70000B5C//AFIT8_dmsc_iDecisionThresh [7:0] AFIT8_dmsc_iCentGrad
{0x0F12, 0x0020}, //70000B5E//AFIT8_dmsc_iMonochrom [7:0] AFIT8_dmsc_iGBDenoiseVal
{0x0F12, 0x0000}, //70000B60//AFIT8_dmsc_iGRDenoiseVal [7:0] AFIT8_dmsc_iEdgeDesatThrHigh
{0x0F12, 0x1800}, //70000B62//AFIT8_dmsc_iEdgeDesatThrLow [7:0] AFIT8_dmsc_iEdgeDesat
{0x0F12, 0x0000}, //70000B64//AFIT8_dmsc_iNearGrayDesat [7:0] AFIT8_dmsc_iEdgeDesatLimit
{0x0F12, 0x1E10}, //70000B66//AFIT8_postdmsc_iBCoeff [7:0] AFIT8_postdmsc_iGCoeff
{0x0F12, 0x000B}, //70000B68//AFIT8_postdmsc_iWideMult [7:0] AFIT8_yuvemix_mNegSlopes_0
{0x0F12, 0x0607}, //70000B6A//AFIT8_yuvemix_mNegSlopes_1 [7:0] AFIT8_yuvemix_mNegSlopes_2
{0x0F12, 0x0005}, //70000B6C//AFIT8_yuvemix_mNegSlopes_3 [7:0] AFIT8_yuvemix_mPosSlopes_0
{0x0F12, 0x0607}, //70000B6E//AFIT8_yuvemix_mPosSlopes_1 [7:0] AFIT8_yuvemix_mPosSlopes_2
{0x0F12, 0x0405}, //70000B70//AFIT8_yuvemix_mPosSlopes_3 [7:0] AFIT8_yuviirnr_iXSupportY
{0x0F12, 0x0207}, //70000B72//AFIT8_yuviirnr_iXSupportUV [7:0] AFIT8_yuviirnr_iLowYNorm
{0x0F12, 0x0304}, //70000B74//AFIT8_yuviirnr_iHighYNorm [7:0] AFIT8_yuviirnr_iLowUVNorm
{0x0F12, 0x0409}, //70000B76//AFIT8_yuviirnr_iHighUVNorm [7:0] AFIT8_yuviirnr_iYNormShift
{0x0F12, 0x0306}, //70000B78//AFIT8_yuviirnr_iUVNormShift [7:0] AFIT8_yuviirnr_iVertLength_Y
{0x0F12, 0x0407}, //70000B7A//AFIT8_yuviirnr_iVertLength_UV [7:0] AFIT8_yuviirnr_iDiffThreshL_Y
{0x0F12, 0x2404}, //70000B7C//AFIT8_yuviirnr_iDiffThreshH_Y [7:0] AFIT8_yuviirnr_iDiffThreshL_UV
{0x0F12, 0x0221}, //70000B7E//AFIT8_yuviirnr_iDiffThreshH_UV [7:0] AFIT8_yuviirnr_iMaxThreshL_Y
{0x0F12, 0x1202}, //70000B80//AFIT8_yuviirnr_iMaxThreshH_Y [7:0] AFIT8_yuviirnr_iMaxThreshL_UV
{0x0F12, 0x0613}, //70000B82//AFIT8_yuviirnr_iMaxThreshH_UV [7:0] AFIT8_yuviirnr_iYNRStrengthL
{0x0F12, 0x1A02}, //70000B84//AFIT8_yuviirnr_iYNRStrengthH [7:0] AFIT8_yuviirnr_iUVNRStrengthL
{0x0F12, 0x8018}, //70000B86//AFIT8_yuviirnr_iUVNRStrengthH [7:0] AFIT8_byr_gras_iShadingPower
{0x0F12, 0x0080}, //70000B88//AFIT8_RGBGamma2_iLinearity [7:0] AFIT8_RGBGamma2_iDarkReduce
{0x0F12, 0x0080}, //70000B8A//AFIT8_ccm_oscar_iSaturation [7:0] AFIT8_RGB2YUV_iYOffset
{0x0F12, 0x0180}, //70000B8C//AFIT8_RGB2YUV_iRGBGain [7:0] AFIT8_bnr_nClustLevel_H
{0x0F12, 0x0A0A}, //70000B8E//AFIT8_bnr_iClustMulT_H [7:0] AFIT8_bnr_iClustMulT_C
{0x0F12, 0x0101}, //70000B90//AFIT8_bnr_iClustThresh_H [7:0] AFIT8_bnr_iClustThresh_C
{0x0F12, 0x141D}, //70000B92//AFIT8_bnr_iDenThreshLow [7:0] AFIT8_bnr_iDenThreshHigh
{0x0F12, 0x6024}, //70000B94//AFIT8_ee_iLowSharpPower [7:0] AFIT8_ee_iHighSharpPower
{0x0F12, 0x0C0C}, //70000B96//AFIT8_ee_iLowShDenoise [7:0] AFIT8_ee_iHighShDenoise
{0x0F12, 0xFFFF}, //70000B98//AFIT8_ee_iLowSharpClamp [7:0] AFIT8_ee_iHighSharpClamp
{0x0F12, 0x0808}, //70000B9A//AFIT8_ee_iReduceEdgeMinMult [7:0] AFIT8_ee_iReduceEdgeSlope
{0x0F12, 0x0A01}, //70000B9C//AFIT8_bnr_nClustLevel_H_Bin [7:0] AFIT8_bnr_iClustMulT_H_Bin
{0x0F12, 0x010A}, //70000B9E//AFIT8_bnr_iClustMulT_C_Bin [7:0] AFIT8_bnr_iClustThresh_H_Bin
{0x0F12, 0x1B01}, //70000BA0//AFIT8_bnr_iClustThresh_C_Bin [7:0] AFIT8_bnr_iDenThreshLow_Bin
{0x0F12, 0x2412}, //70000BA2//AFIT8_bnr_iDenThreshHigh_Bin [7:0] AFIT8_ee_iLowSharpPower_Bin
{0x0F12, 0x0C60}, //70000BA4//AFIT8_ee_iHighSharpPower_Bin [7:0] AFIT8_ee_iLowShDenoise_Bin
{0x0F12, 0xFF0C}, //70000BA6//AFIT8_ee_iHighShDenoise_Bin [7:0] AFIT8_ee_iLowSharpClamp_Bin
{0x0F12, 0x08FF}, //70000BA8//AFIT8_ee_iHighSharpClamp_Bin [7:0] AFIT8_ee_iReduceEdgeMinMult_Bin
{0x0F12, 0x0008}, //70000BAA//AFIT8_ee_iReduceEdgeSlope_Bin [7:0]
{0x0F12, 0x0001}, //70000BAC//AFITB_bnr_nClustLevel_C [0]
{0x0F12, 0x0000}, //70000BAE//AFIT16_BRIGHTNESS
{0x0F12, 0x0000}, //70000BB0//AFIT16_CONTRAST
{0x0F12, 0x0000}, //70000BB2//AFIT16_SATURATION
{0x0F12, 0x0000}, //70000BB4//AFIT16_SHARP_BLUR
{0x0F12, 0x0000}, //70000BB6//AFIT16_GLAMOUR
{0x0F12, 0x00C0}, //70000BB8//AFIT16_bnr_edge_high
{0x0F12, 0x0064}, //70000BBA//AFIT16_postdmsc_iLowBright
{0x0F12, 0x0384}, //70000BBC//AFIT16_postdmsc_iHighBright
{0x0F12, 0x0032}, //70000BBE//AFIT16_postdmsc_iLowSat
{0x0F12, 0x01F4}, //70000BC0//AFIT16_postdmsc_iHighSat
{0x0F12, 0x0070}, //70000BC2//AFIT16_postdmsc_iTune
{0x0F12, 0x0040}, //70000BC4//AFIT16_yuvemix_mNegRanges_0
{0x0F12, 0x00A0}, //70000BC6//AFIT16_yuvemix_mNegRanges_1
{0x0F12, 0x0100}, //70000BC8//AFIT16_yuvemix_mNegRanges_2
{0x0F12, 0x0010}, //70000BCA//AFIT16_yuvemix_mPosRanges_0
{0x0F12, 0x0060}, //70000BCC//AFIT16_yuvemix_mPosRanges_1
{0x0F12, 0x0100}, //70000BCE//AFIT16_yuvemix_mPosRanges_2
{0x0F12, 0x1430}, //70000BD0//AFIT8_bnr_edge_low [7:0] AFIT8_bnr_repl_thresh
{0x0F12, 0x0201}, //70000BD2//AFIT8_bnr_repl_force [7:0] AFIT8_bnr_iHotThreshHigh
{0x0F12, 0x0204}, //70000BD4//AFIT8_bnr_iHotThreshLow [7:0] AFIT8_bnr_iColdThreshHigh
{0x0F12, 0x1504}, //70000BD6//AFIT8_bnr_iColdThreshLow [7:0] AFIT8_bnr_DispTH_Low
{0x0F12, 0x030F}, //70000BD8//AFIT8_bnr_DispTH_High [7:0] AFIT8_bnr_DISP_Limit_Low
{0x0F12, 0x0003}, //70000BDA//AFIT8_bnr_DISP_Limit_High [7:0] AFIT8_bnr_iDistSigmaMin
{0x0F12, 0x0902}, //70000BDC//AFIT8_bnr_iDistSigmaMax [7:0] AFIT8_bnr_iDiffSigmaLow
{0x0F12, 0x2004}, //70000BDE//AFIT8_bnr_iDiffSigmaHigh [7:0] AFIT8_bnr_iNormalizedSTD_TH
{0x0F12, 0x0050}, //70000BE0//AFIT8_bnr_iNormalizedSTD_Limit [7:0] AFIT8_bnr_iDirNRTune
{0x0F12, 0x1140}, //70000BE2//AFIT8_bnr_iDirMinThres [7:0] AFIT8_bnr_iDirFltDiffThresHigh
{0x0F12, 0x201C}, //70000BE4//AFIT8_bnr_iDirFltDiffThresLow [7:0] AFIT8_bnr_iDirSmoothPowerHigh
{0x0F12, 0x0620}, //70000BE6//AFIT8_bnr_iDirSmoothPowerLow [7:0] AFIT8_bnr_iLowMaxSlopeAllowed
{0x0F12, 0x0306}, //70000BE8//AFIT8_bnr_iHighMaxSlopeAllowed [7:0] AFIT8_bnr_iLowSlopeThresh
{0x0F12, 0x2003}, //70000BEA//AFIT8_bnr_iHighSlopeThresh [7:0] AFIT8_bnr_iSlopenessTH
{0x0F12, 0xFF01}, //70000BEC//AFIT8_bnr_iSlopeBlurStrength [7:0] AFIT8_bnr_iSlopenessLimit
{0x0F12, 0x0404}, //70000BEE//AFIT8_bnr_AddNoisePower1 [7:0] AFIT8_bnr_AddNoisePower2
{0x0F12, 0x0300}, //70000BF0//AFIT8_bnr_iRadialTune [7:0] AFIT8_bnr_iRadialPower
{0x0F12, 0x145A}, //70000BF2//AFIT8_bnr_iRadialLimit [7:0] AFIT8_ee_iFSMagThLow
{0x0F12, 0x1010}, //70000BF4//AFIT8_ee_iFSMagThHigh [7:0] AFIT8_ee_iFSVarThLow
{0x0F12, 0x000B}, //70000BF6//AFIT8_ee_iFSVarThHigh [7:0] AFIT8_ee_iFSThLow
{0x0F12, 0x1000}, //70000BF8//AFIT8_ee_iFSThHigh [7:0] AFIT8_ee_iFSmagPower
{0x0F12, 0x5A0F}, //70000BFA//AFIT8_ee_iFSVarCountTh [7:0] AFIT8_ee_iRadialLimit
{0x0F12, 0x0503}, //70000BFC//AFIT8_ee_iRadialPower [7:0] AFIT8_ee_iSmoothEdgeSlope
{0x0F12, 0x1802}, //70000BFE//AFIT8_ee_iROADThres [7:0] AFIT8_ee_iROADMaxNR
{0x0F12, 0x0000}, //70000C00//AFIT8_ee_iROADSubMaxNR [7:0] AFIT8_ee_iROADSubThres
{0x0F12, 0x2006}, //70000C02//AFIT8_ee_iROADNeiThres [7:0] AFIT8_ee_iROADNeiMaxNR
{0x0F12, 0x3C28}, //70000C04//AFIT8_ee_iSmoothEdgeThres [7:0] AFIT8_ee_iMSharpen
{0x0F12, 0x042C}, //70000C06//AFIT8_ee_iWSharpen [7:0] AFIT8_ee_iMShThresh
{0x0F12, 0x0101}, //70000C08//AFIT8_ee_iWShThresh [7:0] AFIT8_ee_iReduceNegative
{0x0F12, 0xFF00}, //70000C0A//AFIT8_ee_iEmbossCentAdd [7:0] AFIT8_ee_iShDespeckle
{0x0F12, 0x0904}, //70000C0C//AFIT8_ee_iReduceEdgeThresh [7:0] AFIT8_dmsc_iEnhThresh
{0x0F12, 0x4008}, //70000C0E//AFIT8_dmsc_iDesatThresh [7:0] AFIT8_dmsc_iDemBlurHigh
{0x0F12, 0x0540}, //70000C10//AFIT8_dmsc_iDemBlurLow [7:0] AFIT8_dmsc_iDemBlurRange
{0x0F12, 0x8006}, //70000C12//AFIT8_dmsc_iDecisionThresh [7:0] AFIT8_dmsc_iCentGrad
{0x0F12, 0x0020}, //70000C14//AFIT8_dmsc_iMonochrom [7:0] AFIT8_dmsc_iGBDenoiseVal
{0x0F12, 0x0000}, //70000C16//AFIT8_dmsc_iGRDenoiseVal [7:0] AFIT8_dmsc_iEdgeDesatThrHigh
{0x0F12, 0x1800}, //70000C18//AFIT8_dmsc_iEdgeDesatThrLow [7:0] AFIT8_dmsc_iEdgeDesat
{0x0F12, 0x0000}, //70000C1A//AFIT8_dmsc_iNearGrayDesat [7:0] AFIT8_dmsc_iEdgeDesatLimit
{0x0F12, 0x1E10}, //70000C1C//AFIT8_postdmsc_iBCoeff [7:0] AFIT8_postdmsc_iGCoeff
{0x0F12, 0x000B}, //70000C1E//AFIT8_postdmsc_iWideMult [7:0] AFIT8_yuvemix_mNegSlopes_0
{0x0F12, 0x0607}, //70000C20//AFIT8_yuvemix_mNegSlopes_1 [7:0] AFIT8_yuvemix_mNegSlopes_2
{0x0F12, 0x0005}, //70000C22//AFIT8_yuvemix_mNegSlopes_3 [7:0] AFIT8_yuvemix_mPosSlopes_0
{0x0F12, 0x0607}, //70000C24//AFIT8_yuvemix_mPosSlopes_1 [7:0] AFIT8_yuvemix_mPosSlopes_2
{0x0F12, 0x0405}, //70000C26//AFIT8_yuvemix_mPosSlopes_3 [7:0] AFIT8_yuviirnr_iXSupportY
{0x0F12, 0x0206}, //70000C28//AFIT8_yuviirnr_iXSupportUV [7:0] AFIT8_yuviirnr_iLowYNorm
{0x0F12, 0x0304}, //70000C2A//AFIT8_yuviirnr_iHighYNorm [7:0] AFIT8_yuviirnr_iLowUVNorm
{0x0F12, 0x0409}, //70000C2C//AFIT8_yuviirnr_iHighUVNorm [7:0] AFIT8_yuviirnr_iYNormShift
{0x0F12, 0x0305}, //70000C2E//AFIT8_yuviirnr_iUVNormShift [7:0] AFIT8_yuviirnr_iVertLength_Y
{0x0F12, 0x0406}, //70000C30//AFIT8_yuviirnr_iVertLength_UV [7:0] AFIT8_yuviirnr_iDiffThreshL_Y
{0x0F12, 0x2804}, //70000C32//AFIT8_yuviirnr_iDiffThreshH_Y [7:0] AFIT8_yuviirnr_iDiffThreshL_UV
{0x0F12, 0x0228}, //70000C34//AFIT8_yuviirnr_iDiffThreshH_UV [7:0] AFIT8_yuviirnr_iMaxThreshL_Y
{0x0F12, 0x1402}, //70000C36//AFIT8_yuviirnr_iMaxThreshH_Y [7:0] AFIT8_yuviirnr_iMaxThreshL_UV
{0x0F12, 0x0618}, //70000C38//AFIT8_yuviirnr_iMaxThreshH_UV [7:0] AFIT8_yuviirnr_iYNRStrengthL
{0x0F12, 0x1A02}, //70000C3A//AFIT8_yuviirnr_iYNRStrengthH [7:0] AFIT8_yuviirnr_iUVNRStrengthL
{0x0F12, 0x8018}, //70000C3C//AFIT8_yuviirnr_iUVNRStrengthH [7:0] AFIT8_byr_gras_iShadingPower
{0x0F12, 0x0080}, //70000C3E//AFIT8_RGBGamma2_iLinearity [7:0] AFIT8_RGBGamma2_iDarkReduce
{0x0F12, 0x0080}, //70000C40//AFIT8_ccm_oscar_iSaturation [7:0] AFIT8_RGB2YUV_iYOffset
{0x0F12, 0x0180}, //70000C42//AFIT8_RGB2YUV_iRGBGain [7:0] AFIT8_bnr_nClustLevel_H
{0x0F12, 0x0A0A}, //70000C44//AFIT8_bnr_iClustMulT_H [7:0] AFIT8_bnr_iClustMulT_C
{0x0F12, 0x0101}, //70000C46//AFIT8_bnr_iClustThresh_H [7:0] AFIT8_bnr_iClustThresh_C
{0x0F12, 0x1117}, //70000C48//AFIT8_bnr_iDenThreshLow [7:0] AFIT8_bnr_iDenThreshHigh
{0x0F12, 0x6024}, //70000C4A//AFIT8_ee_iLowSharpPower [7:0] AFIT8_ee_iHighSharpPower
{0x0F12, 0x0A0A}, //70000C4C//AFIT8_ee_iLowShDenoise [7:0] AFIT8_ee_iHighShDenoise
{0x0F12, 0xFFFF}, //70000C4E//AFIT8_ee_iLowSharpClamp [7:0] AFIT8_ee_iHighSharpClamp
{0x0F12, 0x0808}, //70000C50//AFIT8_ee_iReduceEdgeMinMult [7:0] AFIT8_ee_iReduceEdgeSlope
{0x0F12, 0x0A01}, //70000C52//AFIT8_bnr_nClustLevel_H_Bin [7:0] AFIT8_bnr_iClustMulT_H_Bin
{0x0F12, 0x010A}, //70000C54//AFIT8_bnr_iClustMulT_C_Bin [7:0] AFIT8_bnr_iClustThresh_H_Bin
{0x0F12, 0x1501}, //70000C56//AFIT8_bnr_iClustThresh_C_Bin [7:0] AFIT8_bnr_iDenThreshLow_Bin
{0x0F12, 0x240F}, //70000C58//AFIT8_bnr_iDenThreshHigh_Bin [7:0] AFIT8_ee_iLowSharpPower_Bin
{0x0F12, 0x0A60}, //70000C5A//AFIT8_ee_iHighSharpPower_Bin [7:0] AFIT8_ee_iLowShDenoise_Bin
{0x0F12, 0xFF0A}, //70000C5C//AFIT8_ee_iHighShDenoise_Bin [7:0] AFIT8_ee_iLowSharpClamp_Bin
{0x0F12, 0x08FF}, //70000C5E//AFIT8_ee_iHighSharpClamp_Bin [7:0] AFIT8_ee_iReduceEdgeMinMult_Bin
{0x0F12, 0x0008}, //70000C60//AFIT8_ee_iReduceEdgeSlope_Bin [7:0]
{0x0F12, 0x0001}, //70000C62//AFITB_bnr_nClustLevel_C [0]
{0x0F12, 0x0000}, //70000C64//AFIT16_BRIGHTNESS
{0x0F12, 0x0000}, //70000C66//AFIT16_CONTRAST
{0x0F12, 0x0000}, //70000C68//AFIT16_SATURATION
{0x0F12, 0x0000}, //70000C6A//AFIT16_SHARP_BLUR
{0x0F12, 0x0000}, //70000C6C//AFIT16_GLAMOUR
{0x0F12, 0x00C0}, //70000C6E//AFIT16_bnr_edge_high
{0x0F12, 0x0064}, //70000C70//AFIT16_postdmsc_iLowBright
{0x0F12, 0x0384}, //70000C72//AFIT16_postdmsc_iHighBright
{0x0F12, 0x0032}, //70000C74//AFIT16_postdmsc_iLowSat
{0x0F12, 0x01F4}, //70000C76//AFIT16_postdmsc_iHighSat
{0x0F12, 0x0070}, //70000C78//AFIT16_postdmsc_iTune
{0x0F12, 0x0040}, //70000C7A//AFIT16_yuvemix_mNegRanges_0
{0x0F12, 0x00A0}, //70000C7C//AFIT16_yuvemix_mNegRanges_1
{0x0F12, 0x0100}, //70000C7E//AFIT16_yuvemix_mNegRanges_2
{0x0F12, 0x0010}, //70000C80//AFIT16_yuvemix_mPosRanges_0
{0x0F12, 0x0060}, //70000C82//AFIT16_yuvemix_mPosRanges_1
{0x0F12, 0x0100}, //70000C84//AFIT16_yuvemix_mPosRanges_2
{0x0F12, 0x1430}, //70000C86//AFIT8_bnr_edge_low [7:0] AFIT8_bnr_repl_thresh
{0x0F12, 0x0201}, //70000C88//AFIT8_bnr_repl_force [7:0] AFIT8_bnr_iHotThreshHigh
{0x0F12, 0x0204}, //70000C8A//AFIT8_bnr_iHotThreshLow [7:0] AFIT8_bnr_iColdThreshHigh
{0x0F12, 0x0F04}, //70000C8C//AFIT8_bnr_iColdThreshLow [7:0] AFIT8_bnr_DispTH_Low
{0x0F12, 0x030C}, //70000C8E//AFIT8_bnr_DispTH_High [7:0] AFIT8_bnr_DISP_Limit_Low
{0x0F12, 0x0003}, //70000C90//AFIT8_bnr_DISP_Limit_High [7:0] AFIT8_bnr_iDistSigmaMin
{0x0F12, 0x0602}, //70000C92//AFIT8_bnr_iDistSigmaMax [7:0] AFIT8_bnr_iDiffSigmaLow
{0x0F12, 0x1803}, //70000C94//AFIT8_bnr_iDiffSigmaHigh [7:0] AFIT8_bnr_iNormalizedSTD_TH
{0x0F12, 0x0040}, //70000C96//AFIT8_bnr_iNormalizedSTD_Limit [7:0] AFIT8_bnr_iDirNRTune
{0x0F12, 0x0E20}, //70000C98//AFIT8_bnr_iDirMinThres [7:0] AFIT8_bnr_iDirFltDiffThresHigh
{0x0F12, 0x2018}, //70000C9A//AFIT8_bnr_iDirFltDiffThresLow [7:0] AFIT8_bnr_iDirSmoothPowerHigh
{0x0F12, 0x0620}, //70000C9C//AFIT8_bnr_iDirSmoothPowerLow [7:0] AFIT8_bnr_iLowMaxSlopeAllowed
{0x0F12, 0x0306}, //70000C9E//AFIT8_bnr_iHighMaxSlopeAllowed [7:0] AFIT8_bnr_iLowSlopeThresh
{0x0F12, 0x2003}, //70000CA0//AFIT8_bnr_iHighSlopeThresh [7:0] AFIT8_bnr_iSlopenessTH
{0x0F12, 0xFF01}, //70000CA2//AFIT8_bnr_iSlopeBlurStrength [7:0] AFIT8_bnr_iSlopenessLimit
{0x0F12, 0x0404}, //70000CA4//AFIT8_bnr_AddNoisePower1 [7:0] AFIT8_bnr_AddNoisePower2
{0x0F12, 0x0200}, //70000CA6//AFIT8_bnr_iRadialTune [7:0] AFIT8_bnr_iRadialPower
{0x0F12, 0x145A}, //70000CA8//AFIT8_bnr_iRadialLimit [7:0] AFIT8_ee_iFSMagThLow
{0x0F12, 0x1010}, //70000CAA//AFIT8_ee_iFSMagThHigh [7:0] AFIT8_ee_iFSVarThLow
{0x0F12, 0x000B}, //70000CAC//AFIT8_ee_iFSVarThHigh [7:0] AFIT8_ee_iFSThLow
{0x0F12, 0x1200}, //70000CAE//AFIT8_ee_iFSThHigh [7:0] AFIT8_ee_iFSmagPower
{0x0F12, 0x5A0F}, //70000CB0//AFIT8_ee_iFSVarCountTh [7:0] AFIT8_ee_iRadialLimit
{0x0F12, 0x0502}, //70000CB2//AFIT8_ee_iRadialPower [7:0] AFIT8_ee_iSmoothEdgeSlope
{0x0F12, 0x1802}, //70000CB4//AFIT8_ee_iROADThres [7:0] AFIT8_ee_iROADMaxNR
{0x0F12, 0x0000}, //70000CB6//AFIT8_ee_iROADSubMaxNR [7:0] AFIT8_ee_iROADSubThres
{0x0F12, 0x2006}, //70000CB8//AFIT8_ee_iROADNeiThres [7:0] AFIT8_ee_iROADNeiMaxNR
{0x0F12, 0x4028}, //70000CBA//AFIT8_ee_iSmoothEdgeThres [7:0] AFIT8_ee_iMSharpen
{0x0F12, 0x0430}, //70000CBC//AFIT8_ee_iWSharpen [7:0] AFIT8_ee_iMShThresh
{0x0F12, 0x0101}, //70000CBE//AFIT8_ee_iWShThresh [7:0] AFIT8_ee_iReduceNegative
{0x0F12, 0xFF00}, //70000CC0//AFIT8_ee_iEmbossCentAdd [7:0] AFIT8_ee_iShDespeckle
{0x0F12, 0x0804}, //70000CC2//AFIT8_ee_iReduceEdgeThresh [7:0] AFIT8_dmsc_iEnhThresh
{0x0F12, 0x4008}, //70000CC4//AFIT8_dmsc_iDesatThresh [7:0] AFIT8_dmsc_iDemBlurHigh
{0x0F12, 0x0540}, //70000CC6//AFIT8_dmsc_iDemBlurLow [7:0] AFIT8_dmsc_iDemBlurRange
{0x0F12, 0x8006}, //70000CC8//AFIT8_dmsc_iDecisionThresh [7:0] AFIT8_dmsc_iCentGrad
{0x0F12, 0x0020}, //70000CCA//AFIT8_dmsc_iMonochrom [7:0] AFIT8_dmsc_iGBDenoiseVal
{0x0F12, 0x0000}, //70000CCC//AFIT8_dmsc_iGRDenoiseVal [7:0] AFIT8_dmsc_iEdgeDesatThrHigh
{0x0F12, 0x1800}, //70000CCE//AFIT8_dmsc_iEdgeDesatThrLow [7:0] AFIT8_dmsc_iEdgeDesat
{0x0F12, 0x0000}, //70000CD0//AFIT8_dmsc_iNearGrayDesat [7:0] AFIT8_dmsc_iEdgeDesatLimit
{0x0F12, 0x1E10}, //70000CD2//AFIT8_postdmsc_iBCoeff [7:0] AFIT8_postdmsc_iGCoeff
{0x0F12, 0x000B}, //70000CD4//AFIT8_postdmsc_iWideMult [7:0] AFIT8_yuvemix_mNegSlopes_0
{0x0F12, 0x0607}, //70000CD6//AFIT8_yuvemix_mNegSlopes_1 [7:0] AFIT8_yuvemix_mNegSlopes_2
{0x0F12, 0x0005}, //70000CD8//AFIT8_yuvemix_mNegSlopes_3 [7:0] AFIT8_yuvemix_mPosSlopes_0
{0x0F12, 0x0607}, //70000CDA//AFIT8_yuvemix_mPosSlopes_1 [7:0] AFIT8_yuvemix_mPosSlopes_2
{0x0F12, 0x0405}, //70000CDC//AFIT8_yuvemix_mPosSlopes_3 [7:0] AFIT8_yuviirnr_iXSupportY
{0x0F12, 0x0205}, //70000CDE//AFIT8_yuviirnr_iXSupportUV [7:0] AFIT8_yuviirnr_iLowYNorm
{0x0F12, 0x0304}, //70000CE0//AFIT8_yuviirnr_iHighYNorm [7:0] AFIT8_yuviirnr_iLowUVNorm
{0x0F12, 0x0409}, //70000CE2//AFIT8_yuviirnr_iHighUVNorm [7:0] AFIT8_yuviirnr_iYNormShift
{0x0F12, 0x0306}, //70000CE4//AFIT8_yuviirnr_iUVNormShift [7:0] AFIT8_yuviirnr_iVertLength_Y
{0x0F12, 0x0407}, //70000CE6//AFIT8_yuviirnr_iVertLength_UV [7:0] AFIT8_yuviirnr_iDiffThreshL_Y
{0x0F12, 0x2C04}, //70000CE8//AFIT8_yuviirnr_iDiffThreshH_Y [7:0] AFIT8_yuviirnr_iDiffThreshL_UV
{0x0F12, 0x022C}, //70000CEA//AFIT8_yuviirnr_iDiffThreshH_UV [7:0] AFIT8_yuviirnr_iMaxThreshL_Y
{0x0F12, 0x1402}, //70000CEC//AFIT8_yuviirnr_iMaxThreshH_Y [7:0] AFIT8_yuviirnr_iMaxThreshL_UV
{0x0F12, 0x0618}, //70000CEE//AFIT8_yuviirnr_iMaxThreshH_UV [7:0] AFIT8_yuviirnr_iYNRStrengthL
{0x0F12, 0x1A02}, //70000CF0//AFIT8_yuviirnr_iYNRStrengthH [7:0] AFIT8_yuviirnr_iUVNRStrengthL
{0x0F12, 0x8018}, //70000CF2//AFIT8_yuviirnr_iUVNRStrengthH [7:0] AFIT8_byr_gras_iShadingPower
{0x0F12, 0x0080}, //70000CF4//AFIT8_RGBGamma2_iLinearity [7:0] AFIT8_RGBGamma2_iDarkReduce
{0x0F12, 0x0080}, //70000CF6//AFIT8_ccm_oscar_iSaturation [7:0] AFIT8_RGB2YUV_iYOffset
{0x0F12, 0x0180}, //70000CF8//AFIT8_RGB2YUV_iRGBGain [7:0] AFIT8_bnr_nClustLevel_H
{0x0F12, 0x0A0A}, //70000CFA//AFIT8_bnr_iClustMulT_H [7:0] AFIT8_bnr_iClustMulT_C
{0x0F12, 0x0101}, //70000CFC//AFIT8_bnr_iClustThresh_H [7:0] AFIT8_bnr_iClustThresh_C
{0x0F12, 0x0C0F}, //70000CFE//AFIT8_bnr_iDenThreshLow [7:0] AFIT8_bnr_iDenThreshHigh
{0x0F12, 0x6024}, //70000D00//AFIT8_ee_iLowSharpPower [7:0] AFIT8_ee_iHighSharpPower
{0x0F12, 0x0808}, //70000D02//AFIT8_ee_iLowShDenoise [7:0] AFIT8_ee_iHighShDenoise
{0x0F12, 0xFFFF}, //70000D04//AFIT8_ee_iLowSharpClamp [7:0] AFIT8_ee_iHighSharpClamp
{0x0F12, 0x0808}, //70000D06//AFIT8_ee_iReduceEdgeMinMult [7:0] AFIT8_ee_iReduceEdgeSlope
{0x0F12, 0x0A01}, //70000D08//AFIT8_bnr_nClustLevel_H_Bin [7:0] AFIT8_bnr_iClustMulT_H_Bin
{0x0F12, 0x010A}, //70000D0A//AFIT8_bnr_iClustMulT_C_Bin [7:0] AFIT8_bnr_iClustThresh_H_Bin
{0x0F12, 0x0F01}, //70000D0C//AFIT8_bnr_iClustThresh_C_Bin [7:0] AFIT8_bnr_iDenThreshLow_Bin
{0x0F12, 0x240C}, //70000D0E//AFIT8_bnr_iDenThreshHigh_Bin [7:0] AFIT8_ee_iLowSharpPower_Bin
{0x0F12, 0x0860}, //70000D10//AFIT8_ee_iHighSharpPower_Bin [7:0] AFIT8_ee_iLowShDenoise_Bin
{0x0F12, 0xFF08}, //70000D12//AFIT8_ee_iHighShDenoise_Bin [7:0] AFIT8_ee_iLowSharpClamp_Bin
{0x0F12, 0x08FF}, //70000D14//AFIT8_ee_iHighSharpClamp_Bin [7:0] AFIT8_ee_iReduceEdgeMinMult_Bin
{0x0F12, 0x0008}, //70000D16//AFIT8_ee_iReduceEdgeSlope_Bin [7:0]
{0x0F12, 0x0001}, //70000D18//AFITB_bnr_nClustLevel_C [0]
{0x0F12, 0x23CE}, //70000D19//ConstAfitBaseVals
{0x0F12, 0xFDC8}, //70000D1A//ConstAfitBaseVals
{0x0F12, 0x112E}, //70000D1B//ConstAfitBaseVals
{0x0F12, 0x93A5}, //70000D1C//ConstAfitBaseVals
{0x0F12, 0xFE67}, //70000D1D//ConstAfitBaseVals
{0x0F12, 0x0000}, //70000D1E//ConstAfitBaseVals
//==================================================================================
// 18.JPEG Thumnail Setting
//==================================================================================
//s002A0478
//s0F12005F //REG_TC_BRC_usPrevQuality
//s0F12005F //REG_TC_BRC_usCaptureQuality
//s0F120001 //REG_TC_THUMB_Thumb_bActive
//s0F120280 //REG_TC_THUMB_Thumb_uWidth
//s0F1201E0 //REG_TC_THUMB_Thumb_uHeight
//s0F120005 //REG_TC_THUMB_Thumb_Format
//s002A17DC
//s0F120054 //jpeg_ManualMBCV
//s002A1AE4
//s0F12001C //senHal_bExtraAddLine
//s002A0284
//s0F120001 //REG_TC_GP_bBypassScalerJpg
//s002A028A
//s0F120000 //REG_TC_GP_bUse1FrameCaptureMode
//s002A1CC2 //DRx_uDRxWeight for AutoCont function
//s0F120100
//s0F120100
//s0F120100
//s0F120100
//==================================================================================
// 19.Input Size Setting
//==================================================================================
//Input Size
{0x002A, 0x0250},
{0x0F12, 0x0A00}, //REG_TC_GP_PrevReqInputWidth
{0x0F12, 0x0780}, //REG_TC_GP_PrevReqInputHeight
{0x0F12, 0x0010}, //REG_TC_GP_PrevInputWidthOfs
{0x0F12, 0x000c}, //REG_TC_GP_PrevInputHeightOfs
{0x0F12, 0x0A00}, //REG_TC_GP_CapReqInputWidth
{0x0F12, 0x0780}, //REG_TC_GP_CapReqInputHeight
{0x0F12, 0x0010}, //REG_TC_GP_CapInputWidthOfs
{0x0F12, 0x000c}, //REG_TC_GP_CapInputHeightOfs
{0x002A, 0x0494},
{0x0F12, 0x0A00}, //REG_TC_PZOOM_ZoomInputWidth
{0x0F12, 0x0780}, //REG_TC_PZOOM_ZoomInputHeight
{0x0F12, 0x0000}, //REG_TC_PZOOM_ZoomInputWidthOfs
{0x0F12, 0x0000}, //REG_TC_PZOOM_ZoomInputHeightOfs
{0x0F12, 0x0A00}, //REG_TC_CZOOM_ZoomInputWidth
{0x0F12, 0x0780}, //REG_TC_CZOOM_ZoomInputHeight
{0x0F12, 0x0000}, //REG_TC_CZOOM_ZoomInputWidthOfs
{0x0F12, 0x0000}, //REG_TC_CZOOM_ZoomInputHeightOfs
{0x002A, 0x0262},
{0x0F12, 0x0001}, //REG_TC_GP_bUseReqInputInPre
{0x0F12, 0x0001}, //REG_TC_GP_bUseReqInputInCap
//==================================================================================
// 20.Preview & Capture Configration Setting
//==================================================================================
//Preview config[0] 640x480 7.5~30fps
{0x002A, 0x02A6},
{0x0F12, 0x0280}, //REG_0TC_PCFG_usWidth
{0x0F12, 0x01E0}, //REG_0TC_PCFG_usHeight
{0x0F12, 0x0005}, //REG_0TC_PCFG_Format
{0x0F12, 0x4F1A}, //REG_0TC_PCFG_usMaxOut4KHzRate
{0x0F12, 0x4F1A}, //REG_0TC_PCFG_usMinOut4KHzRate
{0x0F12, 0x0100}, //REG_0TC_PCFG_OutClkPerPix88
{0x0F12, 0x0300}, //REG_0TC_PCFG_uBpp88
{0x0F12, 0x0000}, //REG_0TC_PCFG_PVIMask
{0x0F12, 0x0000}, //REG_0TC_PCFG_OIFMask
{0x0F12, 0x01E0}, //REG_0TC_PCFG_usJpegPacketSize
{0x0F12, 0x0000}, //REG_0TC_PCFG_usJpegTotalPackets
{0x0F12, 0x0000}, //REG_0TC_PCFG_uClockInd
{0x0F12, 0x0000}, //REG_0TC_PCFG_usFrTimeType
{0x0F12, 0x0001}, //REG_0TC_PCFG_FrRateQualityType
{0x0F12, 0x0535}, //REG_0TC_PCFG_usMaxFrTimeMsecMult10
{0x0F12, 0x014D}, //REG_0TC_PCFG_usMinFrTimeMsecMult10
{0x002A, 0x02D0},
{0x0F12, 0x0000}, //REG_0TC_PCFG_uPrevMirror
{0x0F12, 0x0000}, //REG_0TC_PCFG_uCaptureMirror
//Capture Config[0] 2560x1920 7.5fps
{0x002A, 0x0396},
{0x0F12, 0x0001}, //REG_0TC_CCFG_uCaptureMode
{0x0F12, 0x0A00}, //REG_0TC_CCFG_usWidth
{0x0F12, 0x0780}, //REG_0TC_CCFG_usHeight
{0x0F12, 0x0005}, //REG_0TC_CCFG_Format
{0x0F12, 0x4F1A}, //REG_0TC_CCFG_usMaxOut4KHzRate
{0x0F12, 0x4F1A}, //REG_0TC_CCFG_usMinOut4KHzRate
{0x0F12, 0x0100}, //REG_0TC_CCFG_OutClkPerPix88
{0x0F12, 0x0300}, //REG_0TC_CCFG_uBpp88
{0x0F12, 0x0000}, //REG_0TC_CCFG_PVIMask
{0x0F12, 0x0000}, //REG_0TC_CCFG_OIFMask
{0x0F12, 0x01E0}, //REG_0TC_CCFG_usJpegPacketSize
{0x0F12, 0x0000}, //REG_0TC_CCFG_usJpegTotalPackets
{0x0F12, 0x0000}, //REG_0TC_CCFG_uClockInd
{0x0F12, 0x0000}, //REG_0TC_CCFG_usFrTimeType
{0x0F12, 0x0002}, //REG_0TC_CCFG_FrRateQualityType
{0x0F12, 0x0535}, //REG_0TC_CCFG_usMaxFrTimeMsecMult10
{0x0F12, 0x0535}, //REG_0TC_CCFG_usMinFrTimeMsecMult10
{0x002A, 0x022C},
{0x0F12, 0x0001}, //REG_TC_IPRM_InitParamsUpdated
//==================================================================================
// 21.Select Cofigration Display
//==================================================================================
//PREVIEW
{0x0028, 0x7000},
{0x002A, 0x0266},
{0x0f12, 0x0000}, //REG_TC_GP_ActivePrevConfig
{0x002A, 0x026A},
{0x0F12, 0x0001}, //REG_TC_GP_PrevOpenAfterChange
{0x002A, 0x0268},
{0x0F12, 0x0001}, //REG_TC_GP_PrevConfigChanged
{0x002A, 0x026E},
{0x0f12, 0x0000}, //REG_TC_GP_ActiveCapConfig
{0x002A, 0x026A},
{0x0F12, 0x0001}, //REG_TC_GP_CapOpenAfterChange
{0x002A, 0x0270},
{0x0F12, 0x0001}, //REG_TC_GP_CapConfigChanged
{0x002A, 0x024E},
{0x0F12, 0x0001}, //REG_TC_GP_NewConfigSync
{0x002A, 0x023E},
{0x0F12, 0x0001}, //REG_TC_GP_EnablePreview
{0x0F12, 0x0001}, //REG_TC_GP_EnablePreviewChanged
//===================================================================================
// 22. ESD Check
//===================================================================================
{0x0028, 0x7000},
{0x002A, 0x01A8}, //ESD Check
{0x0f12, 0xAAAA},
//===================================================================================
// 23. Brightness min/Max
//===================================================================================
{0x0028, 0x147C},
{0x0F12, 0x0180}, //bp_uMaxBrightnessFactor
{0x0028, 0x1482},
{0x0F12, 0x0180}, //bp_uMinBrightnessFactor
//===================================================================================
// 24.ISSUE
//===================================================================================
//20110728 : Sequence Changed by image dev.(by J.M.Ahn)
//20110728 : ESD Check Register Address Change
//20110829 : TnP Changed by S.Y.Lee
//20120104 : init Parm Update sequence changed(by J.M.Ahn)
//20120201 : Flash<73><68> <20>ֺ<EFBFBD><D6BA><EFBFBD> Green Noise <20><><EFBFBD><EFBFBD> setting (by J.M.Ahn)
//20120228 : Add Brightness Block
};
//for capture
static struct regval_list sensor_qsxga_regs[] = { //qsxga: 2560*1920 7fps
/* capture setting */
//==================================================================================
// 20.Preview & Capture Configration Setting
//==================================================================================
{0x002A, 0x0396},
{0x0F12, 0x0001}, //REG_0TC_CCFG_uCaptureMode
{0x0F12, 0x0A00}, //REG_0TC_CCFG_usWidth
{0x0F12, 0x0780}, //REG_0TC_CCFG_usHeight
{0x002A, 0x03AE},
{0x0F12, 0x0000}, //REG_0TC_CCFG_uClockInd
{0x002A, 0x03B4},
{0x0F12, 0x0535}, //REG_0TC_CCFG_usMaxFrTimeMsecMult10
{0x0F12, 0x0535}, //REG_0TC_CCFG_usMinFrTimeMsecMult10
//==================================================================================
// 21.Select Cofigration Display
//==================================================================================
//CAPTURE
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x026E},
{0x0F12, 0x0000}, //REG_TC_GP_ActiveCapConfig
{0x0F12, 0x0001}, // /
{0x002A, 0x0242}, //
{0x0F12, 0x0001}, // /#REG_TC_GP_EnableCapture
{0x002A, 0x024E}, //
{0x0F12, 0x0001}, // /#REG_TC_GP_NewConfigSync
{0x002A, 0x0244}, //
{0x0F12, 0x0001}, // /#REG_TC_GP_EnableCaptureChanged
{0xffff, 0x00c8}, //delay 200ms
};
static struct regval_list sensor_qxga_regs[] = { //qxga: 2048*1536
/* capture setting */
//==================================================================================
// 20.Preview & Capture Configration Setting
//==================================================================================
{0x002A, 0x0396},
{0x0F12, 0x0001}, //REG_0TC_CCFG_uCaptureMode
{0x0F12, 0x0800}, //REG_0TC_CCFG_usWidth
{0x0F12, 0x0600}, //REG_0TC_CCFG_usHeight
{0x002A, 0x03AE},
{0x0F12, 0x0000}, //REG_0TC_CCFG_uClockInd
{0x002A, 0x03B4},
{0x0F12, 0x0535}, //REG_0TC_CCFG_usMaxFrTimeMsecMult10
{0x0F12, 0x0535}, //REG_0TC_CCFG_usMinFrTimeMsecMult10
//==================================================================================
// 21.Select Cofigration Display
//==================================================================================
//CAPTURE
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x026E},
{0x0F12, 0x0000}, //REG_TC_GP_ActiveCapConfig
{0x0F12, 0x0001}, // /
{0x002A, 0x0242}, //
{0x0F12, 0x0001}, // /#REG_TC_GP_EnableCapture
{0x002A, 0x024E}, //
{0x0F12, 0x0001}, // /#REG_TC_GP_NewConfigSync
{0x002A, 0x0244}, //
{0x0F12, 0x0001}, // /#REG_TC_GP_EnableCaptureChanged
{0xffff, 0x00c8}, //delay 200ms
};
//for video
static struct regval_list sensor_1080p_regs[] = { //1080: 1920*1080
/* preview setting */
{0x002A, 0x18AC},
{0x0F12, 0x0060}, //senHal_uAddColsBin
{0x0F12, 0x0060}, //senHal_uAddColsNoBin
{0x0F12, 0x05C0}, //senHal_uMinColsBin
{0x0F12, 0x0A96}, //05C0 //senHal_uMinColsNoBin
//==================================================================================
// 19.Input Size Setting
//==================================================================================
//Input Size
{0x002A, 0x0250},
{0x0F12, 0x0780}, //REG_TC_GP_PrevReqInputWidth
{0x0F12, 0x0438}, //REG_TC_GP_PrevReqInputHeight
{0x0F12, 0x014E}, //REG_TC_GP_PrevInputWidthOfs
{0x0F12, 0x01B0}, //REG_TC_GP_PrevInputHeightOfs
{0x0F12, 0x0A00}, //REG_TC_GP_CapReqInputWidth
{0x0F12, 0x0780}, //REG_TC_GP_CapReqInputHeight
{0x0F12, 0x0010}, //REG_TC_GP_CapInputWidthOfs
{0x0F12, 0x000C}, //REG_TC_GP_CapInputHeightOfs
{0x002A, 0x0494},
{0x0F12, 0x0780}, //REG_TC_PZOOM_ZoomInputWidth
{0x0F12, 0x0438}, //REG_TC_PZOOM_ZoomInputHeight
{0x0F12, 0x0000}, //REG_TC_PZOOM_ZoomInputWidthOfs
{0x0F12, 0x0000}, //REG_TC_PZOOM_ZoomInputHeightOfs
{0x0F12, 0x0A00}, //REG_TC_CZOOM_ZoomInputWidth
{0x0F12, 0x0780}, //REG_TC_CZOOM_ZoomInputHeight
{0x0F12, 0x0000}, //REG_TC_CZOOM_ZoomInputWidthOfs
{0x0F12, 0x0000}, //REG_TC_CZOOM_ZoomInputHeightOfs
{0x002A, 0x0262},
{0x0F12, 0x0001}, //REG_TC_GP_bUseReqInputInPre
{0x0F12, 0x0001}, //REG_TC_GP_bUseReqInputInCap
//==================================================================================
// 20.Preview & Capture Configration Setting
//==================================================================================
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x02A6},
{0x0F12, 0x0780}, //280 REG_0TC_PCFG_usWidth
{0x0F12, 0x0438}, //1E0 REG_0TC_PCFG_usHeight
{0x002A, 0x02BC},
{0x0F12, 0x0001}, //REG_0TC_PCFG_uClockInd
{0x0F12, 0x0001}, //REG_0TC_PCFG_usFrTimeType
{0x0F12, 0x0000}, //REG_0TC_PCFG_FrRateQualityType
{0x0F12, 0x029A}, //REG_0TC_PCFG_usMaxFrTimeMsecMult10
{0x0F12, 0x029A}, //REG_0TC_PCFG_usMinFrTimeMsecMult10
{0x002A, 0x022C},
{0x0F12, 0x0001}, //REG_TC_IPRM_InitParamsUpdated
//==================================================================================
// 21.Select Cofigration Display
//==================================================================================
//PREVIEW
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x0266},
{0x0f12, 0x0000}, //REG_TC_GP_ActivePrevConfig
{0x002A, 0x026A},
{0x0F12, 0x0001}, //REG_TC_GP_PrevOpenAfterChange
{0x002A, 0x0268},
{0x0F12, 0x0001}, //REG_TC_GP_PrevConfigChanged
{0x002A, 0x026E},
{0x0f12, 0x0000}, //REG_TC_GP_ActiveCapConfig
{0x002A, 0x026A},
{0x0F12, 0x0001}, //REG_TC_GP_CapOpenAfterChange
{0x002A, 0x0270},
{0x0F12, 0x0001}, //REG_TC_GP_CapConfigChanged
{0x002A, 0x024E},
{0x0F12, 0x0001}, //REG_TC_GP_NewConfigSync
{0x002A, 0x023E},
{0x0F12, 0x0001}, //REG_TC_GP_EnablePreview
{0x0F12, 0x0001}, //REG_TC_GP_EnablePreviewChanged
{0xffff, 0x00c8}, //delay 200ms
};
static struct regval_list sensor_720p_regs[] = { //1280*720
/* preview setting */
{0x002A, 0x18AC},
{0x0F12, 0x0060}, //senHal_uAddColsBin
{0x0F12, 0x0060}, //senHal_uAddColsNoBin
{0x0F12, 0x05C0}, //senHal_uMinColsBin
{0x0F12, 0x0A96}, //05C0 //senHal_uMinColsNoBin
//==================================================================================
// 19.Input Size Setting
//==================================================================================
//Input Size
{0x002A, 0x0250},
{0x0F12, 0x0A00}, //REG_TC_GP_PrevReqInputWidth
{0x0F12, 0x05A0}, //REG_TC_GP_PrevReqInputHeight
{0x0F12, 0x0010}, //REG_TC_GP_PrevInputWidthOfs
{0x0F12, 0x00FC}, //REG_TC_GP_PrevInputHeightOfs
{0x0F12, 0x0A00}, //REG_TC_GP_CapReqInputWidth
{0x0F12, 0x0780}, //REG_TC_GP_CapReqInputHeight
{0x0F12, 0x0010}, //REG_TC_GP_CapInputWidthOfs
{0x0F12, 0x000C}, //REG_TC_GP_CapInputHeightOfs
{0x002A, 0x0494},
{0x0F12, 0x0A00}, //REG_TC_PZOOM_ZoomInputWidth
{0x0F12, 0x05A0}, //REG_TC_PZOOM_ZoomInputHeight
{0x0F12, 0x0000}, //REG_TC_PZOOM_ZoomInputWidthOfs
{0x0F12, 0x0000}, //REG_TC_PZOOM_ZoomInputHeightOfs
{0x0F12, 0x0A00}, //REG_TC_CZOOM_ZoomInputWidth
{0x0F12, 0x0780}, //REG_TC_CZOOM_ZoomInputHeight
{0x0F12, 0x0000}, //REG_TC_CZOOM_ZoomInputWidthOfs
{0x0F12, 0x0000}, //REG_TC_CZOOM_ZoomInputHeightOfs
{0x002A, 0x0262},
{0x0F12, 0x0001}, //REG_TC_GP_bUseReqInputInPre
{0x0F12, 0x0001}, //REG_TC_GP_bUseReqInputInCap
//==================================================================================
// 20.Preview & Capture Configration Setting
//==================================================================================
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x02A6},
{0x0F12, 0x0500}, //280 REG_0TC_PCFG_usWidth
{0x0F12, 0x02D0}, //1E0 REG_0TC_PCFG_usHeight
{0x002A, 0x02BC},
{0x0F12, 0x0000}, //REG_0TC_PCFG_uClockInd
{0x0F12, 0x0001}, //REG_0TC_PCFG_usFrTimeType
{0x0F12, 0x0001}, //REG_0TC_PCFG_FrRateQualityType
{0x0F12, 0x014D}, //REG_0TC_PCFG_usMaxFrTimeMsecMult10
{0x0F12, 0x014D}, //REG_0TC_PCFG_usMinFrTimeMsecMult10
{0x002A, 0x022C},
{0x0F12, 0x0001}, //REG_TC_IPRM_InitParamsUpdated
//==================================================================================
// 21.Select Cofigration Display
//==================================================================================
//PREVIEW
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x0266},
{0x0f12, 0x0000}, //REG_TC_GP_ActivePrevConfig
{0x002A, 0x026A},
{0x0F12, 0x0001}, //REG_TC_GP_PrevOpenAfterChange
{0x002A, 0x0268},
{0x0F12, 0x0001}, //REG_TC_GP_PrevConfigChanged
{0x002A, 0x026E},
{0x0f12, 0x0000}, //REG_TC_GP_ActiveCapConfig
{0x002A, 0x026A},
{0x0F12, 0x0001}, //REG_TC_GP_CapOpenAfterChange
{0x002A, 0x0270},
{0x0F12, 0x0001}, //REG_TC_GP_CapConfigChanged
{0x002A, 0x024E},
{0x0F12, 0x0001}, //REG_TC_GP_NewConfigSync
{0x002A, 0x023E},
{0x0F12, 0x0001}, //REG_TC_GP_EnablePreview
{0x0F12, 0x0001}, //REG_TC_GP_EnablePreviewChanged
{0xffff, 0x00c8}, //delay 200ms
};
static struct regval_list sensor_vga_regs[] = { //VGA: 640*480
//vga fix 30fps
/* preview setting */
{0x002A, 0x18AC},
{0x0F12, 0x0060}, //senHal_uAddColsBin
{0x0F12, 0x0060}, //senHal_uAddColsNoBin
{0x0F12, 0x05C0}, //senHal_uMinColsBin
{0x0F12, 0x05C0}, //05C0 //senHal_uMinColsNoBin
//==================================================================================
// 19.Input Size Setting
//==================================================================================
//Input Size
{0x002A, 0x0250},
{0x0F12, 0x0A00}, //REG_TC_GP_PrevReqInputWidth
{0x0F12, 0x0780}, //REG_TC_GP_PrevReqInputHeight
{0x0F12, 0x0010}, //REG_TC_GP_PrevInputWidthOfs
{0x0F12, 0x000C}, //REG_TC_GP_PrevInputHeightOfs
{0x0F12, 0x0A00}, //REG_TC_GP_CapReqInputWidth
{0x0F12, 0x0780}, //REG_TC_GP_CapReqInputHeight
{0x0F12, 0x0010}, //REG_TC_GP_CapInputWidthOfs
{0x0F12, 0x000C}, //REG_TC_GP_CapInputHeightOfs
{0x002A, 0x0494},
{0x0F12, 0x0A00}, //REG_TC_PZOOM_ZoomInputWidth
{0x0F12, 0x0780}, //REG_TC_PZOOM_ZoomInputHeight
{0x0F12, 0x0000}, //REG_TC_PZOOM_ZoomInputWidthOfs
{0x0F12, 0x0000}, //REG_TC_PZOOM_ZoomInputHeightOfs
{0x0F12, 0x0A00}, //REG_TC_CZOOM_ZoomInputWidth
{0x0F12, 0x0780}, //REG_TC_CZOOM_ZoomInputHeight
{0x0F12, 0x0000}, //REG_TC_CZOOM_ZoomInputWidthOfs
{0x0F12, 0x0000}, //REG_TC_CZOOM_ZoomInputHeightOfs
{0x002A, 0x0262},
{0x0F12, 0x0001}, //REG_TC_GP_bUseReqInputInPre
{0x0F12, 0x0001}, //REG_TC_GP_bUseReqInputInCap
//==================================================================================
// 20.Preview & Capture Configration Setting
//==================================================================================
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x02A6},
{0x0F12, 0x0280}, //280 REG_0TC_PCFG_usWidth
{0x0F12, 0x01E0}, //1E0 REG_0TC_PCFG_usHeight
{0x002A, 0x02BC},
{0x0F12, 0x0000}, //REG_0TC_PCFG_uClockInd
{0x0F12, 0x0002}, //REG_0TC_PCFG_usFrTimeType
{0x0F12, 0x0001}, //REG_0TC_PCFG_FrRateQualityType
{0x0F12, 0x014D}, //REG_0TC_PCFG_usMaxFrTimeMsecMult10
{0x0F12, 0x0000}, //REG_0TC_PCFG_usMinFrTimeMsecMult10
//==================================================================================
// 21.Select Cofigration Display
//==================================================================================
//PREVIEW
{0x0028, 0x7000},
{0x002A, 0x0266},
{0x0f12, 0x0000}, //REG_TC_GP_ActivePrevConfig
{0x002A, 0x026A},
{0x0F12, 0x0001}, //REG_TC_GP_PrevOpenAfterChange
{0x002A, 0x0268},
{0x0F12, 0x0001}, //REG_TC_GP_PrevConfigChanged
{0x002A, 0x026E},
{0x0f12, 0x0000}, //REG_TC_GP_ActiveCapConfig
{0x002A, 0x026A},
{0x0F12, 0x0001}, //REG_TC_GP_CapOpenAfterChange
{0x002A, 0x0270},
{0x0F12, 0x0001}, //REG_TC_GP_CapConfigChanged
{0x002A, 0x024E},
{0x0F12, 0x0001}, //REG_TC_GP_NewConfigSync
{0x002A, 0x023E},
{0x0F12, 0x0001}, //REG_TC_GP_EnablePreview
{0x0F12, 0x0001}, //REG_TC_GP_EnablePreviewChanged
//{0xffff, 0x00,150},
};
static struct regval_list sensor_ae_awb_lockon_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x2C5E}, // /* AE Lock On */
{0x0F12, 0x0000},
};
static struct regval_list sensor_ae_awb_lockoff_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x2C5E}, // /* AE Lock Off */
{0x0F12, 0x0001},
};
static struct regval_list sensor_af_single_trig_regs[] = {
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x028E},
{0x0F12, 0x0000},
{0x002A, 0x028C},
{0x0F12, 0x0005},
};
static struct regval_list sensor_af_continueous_regs[] = {
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x028E},
{0x0F12, 0x0000},
{0x002A, 0x028C},
{0x0F12, 0x0006},
};
static struct regval_list sensor_af_infinity_regs[] = {
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x028E}, // write [7000 028E, REG_TC_AF_AfCmdParam]
{0x0F12, 0x0000}, // write lens position from 0000 to 00FF. 0000 means infinity and 00FF means macro.
{0x002A, 0x028C},
{0x0F12, 0x0004}, // write [7000 028C, REG_TC_AF_AfCmd] = 0004 , manual AF.
//{0xffff, 0x0064}, // delay 150ms
{0x002A, 0x1648},
{0x0F12, 0x9002},
};
/*
* The white balance settings
* Here only tune the R G B channel gain.
* The white balance enalbe bit is modified in sensor_s_autowb and sensor_s_wb
*/
static struct regval_list sensor_wb_manual[] = {
};
static struct regval_list sensor_wb_auto_regs[] = {
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x04E6},
{0x0F12, 0x077F},
};
static struct regval_list sensor_wb_incandescence_regs[] = {
//bai re guang
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x04E6},
{0x0F12, 0x0777},
{0x002A, 0x04BA},
{0x0F12, 0x0430},
{0x002A, 0x04BE},
{0x0F12, 0x03D0},
{0x002A, 0x04C2},
{0x0F12, 0x09F0},
{0x002A, 0x04C6},
{0x0F12, 0x0001},
};
static struct regval_list sensor_wb_fluorescent_regs[] = {
//ri guang deng
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x04E6},
{0x0F12, 0x0777},
{0x002A, 0x04BA},
{0x0F12, 0x06C0},
{0x002A, 0x04BE},
{0x0F12, 0x0440},
{0x002A, 0x04C2},
{0x0F12, 0x07A0},
{0x002A, 0x04C6},
{0x0F12, 0x0001},
};
static struct regval_list sensor_wb_tungsten_regs[] = {
//wu si deng
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x04E6},
{0x0F12, 0x0777},
{0x002A, 0x04BA},
{0x0F12, 0x0540},
{0x002A, 0x04BE},
{0x0F12, 0x03D0},
{0x002A, 0x04C2},
{0x0F12, 0x08F0},
{0x002A, 0x04C6},
{0x0F12, 0x0001},
};
static struct regval_list sensor_wb_horizon[] = {
//null
};
static struct regval_list sensor_wb_daylight_regs[] = {
//tai yang guang
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x04E6},
{0x0F12, 0x0777},
{0x002A, 0x04BA},
{0x0F12, 0x0620},
{0x002A, 0x04BE},
{0x0F12, 0x03D0},
{0x002A, 0x04C2},
{0x0F12, 0x0580},
{0x002A, 0x04C6},
{0x0F12, 0x0001},
};
static struct regval_list sensor_wb_flash[] = {
//null
};
static struct regval_list sensor_wb_cloud_regs[] = {
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x04E6},
{0x0F12, 0x0777},
{0x002A, 0x04BA},
{0x0F12, 0x06D0},
{0x002A, 0x04BE},
{0x0F12, 0x03D0},
{0x002A, 0x04C2},
{0x0F12, 0x0520},
{0x002A, 0x04C6},
{0x0F12, 0x0001},
};
static struct regval_list sensor_wb_shade[] = {
//null
};
static struct cfg_array sensor_wb[] = {
{
.regs = sensor_wb_manual, //V4L2_WHITE_BALANCE_MANUAL
.size = ARRAY_SIZE(sensor_wb_manual),
},
{
.regs = sensor_wb_auto_regs, //V4L2_WHITE_BALANCE_AUTO
.size = ARRAY_SIZE(sensor_wb_auto_regs),
},
{
.regs = sensor_wb_incandescence_regs, //V4L2_WHITE_BALANCE_INCANDESCENT
.size = ARRAY_SIZE(sensor_wb_incandescence_regs),
},
{
.regs = sensor_wb_fluorescent_regs, //V4L2_WHITE_BALANCE_FLUORESCENT
.size = ARRAY_SIZE(sensor_wb_fluorescent_regs),
},
{
.regs = sensor_wb_tungsten_regs, //V4L2_WHITE_BALANCE_FLUORESCENT_H
.size = ARRAY_SIZE(sensor_wb_tungsten_regs),
},
{
.regs = sensor_wb_horizon, //V4L2_WHITE_BALANCE_HORIZON
.size = ARRAY_SIZE(sensor_wb_horizon),
},
{
.regs = sensor_wb_daylight_regs, //V4L2_WHITE_BALANCE_DAYLIGHT
.size = ARRAY_SIZE(sensor_wb_daylight_regs),
},
{
.regs = sensor_wb_flash, //V4L2_WHITE_BALANCE_FLASH
.size = ARRAY_SIZE(sensor_wb_flash),
},
{
.regs = sensor_wb_cloud_regs, //V4L2_WHITE_BALANCE_CLOUDY
.size = ARRAY_SIZE(sensor_wb_cloud_regs),
},
{
.regs = sensor_wb_shade, //V4L2_WHITE_BALANCE_SHADE
.size = ARRAY_SIZE(sensor_wb_shade),
},
};
/*
* The color effect settings
*/
static struct regval_list sensor_colorfx_none_regs[] = {
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x023C},
{0x0F12, 0x0000}, //REG_TC_GP_SpecialEffects
};
static struct regval_list sensor_colorfx_bw_regs[] = {
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x023C},
{0x0F12, 0x0001}, //REG_TC_GP_SpecialEffects
};
static struct regval_list sensor_colorfx_sepia_regs[] = {
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x023C},
{0x0F12, 0x0004}, //REG_TC_GP_SpecialEffects
};
static struct regval_list sensor_colorfx_negative_regs[] = {
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x023C},
{0x0F12, 0x0003}, //REG_TC_GP_SpecialEffects
};
static struct regval_list sensor_colorfx_emboss_regs[] = {
};
static struct regval_list sensor_colorfx_sketch_regs[] = {
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x023C},
{0x0F12, 0x0009}, //REG_TC_GP_SpecialEffects
};
static struct regval_list sensor_colorfx_sky_blue_regs[] = {
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x023C},
{0x0F12, 0x0007}, //REG_TC_GP_SpecialEffects
};
static struct regval_list sensor_colorfx_grass_green_regs[] = {
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x023C},
{0x0F12, 0x0009}, //REG_TC_GP_SpecialEffects
};
static struct regval_list sensor_colorfx_skin_whiten_regs[] = {
//NULL
};
static struct regval_list sensor_colorfx_vivid_regs[] = {
//NULL
};
static struct regval_list sensor_colorfx_aqua_regs[] = {
//null
};
static struct regval_list sensor_colorfx_art_freeze_regs[] = {
//null
};
static struct regval_list sensor_colorfx_silhouette_regs[] = {
//null
};
static struct regval_list sensor_colorfx_solarization_regs[] = {
//null
};
static struct regval_list sensor_colorfx_antique_regs[] = {
//null
};
static struct regval_list sensor_colorfx_set_cbcr_regs[] = {
//null
};
static struct cfg_array sensor_colorfx[] = {
{
.regs = sensor_colorfx_none_regs, //V4L2_COLORFX_NONE = 0,
.size = ARRAY_SIZE(sensor_colorfx_none_regs),
},
{
.regs = sensor_colorfx_bw_regs, //V4L2_COLORFX_BW = 1,
.size = ARRAY_SIZE(sensor_colorfx_bw_regs),
},
{
.regs = sensor_colorfx_sepia_regs, //V4L2_COLORFX_SEPIA = 2,
.size = ARRAY_SIZE(sensor_colorfx_sepia_regs),
},
{
.regs = sensor_colorfx_negative_regs, //V4L2_COLORFX_NEGATIVE = 3,
.size = ARRAY_SIZE(sensor_colorfx_negative_regs),
},
{
.regs = sensor_colorfx_emboss_regs, //V4L2_COLORFX_EMBOSS = 4,
.size = ARRAY_SIZE(sensor_colorfx_emboss_regs),
},
{
.regs = sensor_colorfx_sketch_regs, //V4L2_COLORFX_SKETCH = 5,
.size = ARRAY_SIZE(sensor_colorfx_sketch_regs),
},
{
.regs = sensor_colorfx_sky_blue_regs, //V4L2_COLORFX_SKY_BLUE = 6,
.size = ARRAY_SIZE(sensor_colorfx_sky_blue_regs),
},
{
.regs = sensor_colorfx_grass_green_regs, //V4L2_COLORFX_GRASS_GREEN = 7,
.size = ARRAY_SIZE(sensor_colorfx_grass_green_regs),
},
{
.regs = sensor_colorfx_skin_whiten_regs, //V4L2_COLORFX_SKIN_WHITEN = 8,
.size = ARRAY_SIZE(sensor_colorfx_skin_whiten_regs),
},
{
.regs = sensor_colorfx_vivid_regs, //V4L2_COLORFX_VIVID = 9,
.size = ARRAY_SIZE(sensor_colorfx_vivid_regs),
},
{
.regs = sensor_colorfx_aqua_regs, //V4L2_COLORFX_AQUA = 10,
.size = ARRAY_SIZE(sensor_colorfx_aqua_regs),
},
{
.regs = sensor_colorfx_art_freeze_regs, //V4L2_COLORFX_ART_FREEZE = 11,
.size = ARRAY_SIZE(sensor_colorfx_art_freeze_regs),
},
{
.regs = sensor_colorfx_silhouette_regs, //V4L2_COLORFX_SILHOUETTE = 12,
.size = ARRAY_SIZE(sensor_colorfx_silhouette_regs),
},
{
.regs = sensor_colorfx_solarization_regs, //V4L2_COLORFX_SOLARIZATION = 13,
.size = ARRAY_SIZE(sensor_colorfx_solarization_regs),
},
{
.regs = sensor_colorfx_antique_regs, //V4L2_COLORFX_ANTIQUE = 14,
.size = ARRAY_SIZE(sensor_colorfx_antique_regs),
},
{
.regs = sensor_colorfx_set_cbcr_regs, //V4L2_COLORFX_SET_CBCR = 15,
.size = ARRAY_SIZE(sensor_colorfx_set_cbcr_regs),
},
};
/*
* The power frequency
*/
static struct regval_list sensor_flicker_50hz_regs[] = {
{0x002A, 0x04E6},
{0x0F12, 0x075F}, //REG_TC_DBG 7F: 60Hz 5F:50Hz
{0x002a, 0x04d6},
{0x0F12, 0x0001}, //REG_SF_USER_FlickerQuant 01h : 50hz 02h : 60hz
{0x0F12, 0x0001}, //REG_SF_USER_FlickerQuantChanged
};
static struct regval_list sensor_flicker_60hz_regs[] = {
{0x002A, 0x04E6},
{0x0F12, 0x075F}, //REG_TC_DBG 7F: 60Hz 5F:50Hz
{0x002a, 0x04d6},
{0x0f12, 0x0002}, //REG_SF_USER_FlickerQuant 01h : 50hz 02h : 60hz
{0x0F12, 0x0001}, //REG_SF_USER_FlickerQuantChanged
};
/*
* The brightness setttings
*/
static struct regval_list sensor_brightness_neg4_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x1484},
{0x0F12, 0x0024},
};
static struct regval_list sensor_brightness_neg3_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x1484},
{0x0F12, 0x002A},
};
static struct regval_list sensor_brightness_neg2_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x1484},
{0x0F12, 0x0030},
};
static struct regval_list sensor_brightness_neg1_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x1484},
{0x0F12, 0x0036},
};
static struct regval_list sensor_brightness_zero_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x1484},
{0x0F12, 0x003C},
};
static struct regval_list sensor_brightness_pos1_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x1484},
{0x0F12, 0x0047},
};
static struct regval_list sensor_brightness_pos2_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x1484},
{0x0F12, 0x0052},
};
static struct regval_list sensor_brightness_pos3_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x1484},
{0x0F12, 0x0057},
};
static struct regval_list sensor_brightness_pos4_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x1484},
{0x0F12, 0x0068},
};
static struct cfg_array sensor_brightness[] = {
{
.regs = sensor_brightness_neg4_regs,
.size = ARRAY_SIZE(sensor_brightness_neg4_regs),
},
{
.regs = sensor_brightness_neg3_regs,
.size = ARRAY_SIZE(sensor_brightness_neg3_regs),
},
{
.regs = sensor_brightness_neg2_regs,
.size = ARRAY_SIZE(sensor_brightness_neg2_regs),
},
{
.regs = sensor_brightness_neg1_regs,
.size = ARRAY_SIZE(sensor_brightness_neg1_regs),
},
{
.regs = sensor_brightness_zero_regs,
.size = ARRAY_SIZE(sensor_brightness_zero_regs),
},
{
.regs = sensor_brightness_pos1_regs,
.size = ARRAY_SIZE(sensor_brightness_pos1_regs),
},
{
.regs = sensor_brightness_pos2_regs,
.size = ARRAY_SIZE(sensor_brightness_pos2_regs),
},
{
.regs = sensor_brightness_pos3_regs,
.size = ARRAY_SIZE(sensor_brightness_pos3_regs),
},
{
.regs = sensor_brightness_pos4_regs,
.size = ARRAY_SIZE(sensor_brightness_pos4_regs),
},
};
/*
* The contrast setttings
*/
static struct regval_list sensor_contrast_neg4_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x0232},
{0x0F12, 0xFF80}, //Control value
};
static struct regval_list sensor_contrast_neg3_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x0232},
{0x0F12, 0xFFA0}, //Control value
};
static struct regval_list sensor_contrast_neg2_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x0232},
{0x0F12, 0xFFC0}, //Control value
};
static struct regval_list sensor_contrast_neg1_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x0232},
{0x0F12, 0xFFE0}, //Control value
};
static struct regval_list sensor_contrast_zero_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x0232},
{0x0F12, 0x0000}, //Control value
};
static struct regval_list sensor_contrast_pos1_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x0232},
{0x0F12, 0x0020}, //Control value
};
static struct regval_list sensor_contrast_pos2_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x0232},
{0x0F12, 0x0040}, //Control value
};
static struct regval_list sensor_contrast_pos3_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x0232},
{0x0F12, 0x0060}, //Control value
};
static struct regval_list sensor_contrast_pos4_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x0232},
{0x0F12, 0x0080}, //Control value
};
static struct cfg_array sensor_contrast[] = {
{
.regs = sensor_contrast_neg4_regs,
.size = ARRAY_SIZE(sensor_contrast_neg4_regs),
},
{
.regs = sensor_contrast_neg3_regs,
.size = ARRAY_SIZE(sensor_contrast_neg3_regs),
},
{
.regs = sensor_contrast_neg2_regs,
.size = ARRAY_SIZE(sensor_contrast_neg2_regs),
},
{
.regs = sensor_contrast_neg1_regs,
.size = ARRAY_SIZE(sensor_contrast_neg1_regs),
},
{
.regs = sensor_contrast_zero_regs,
.size = ARRAY_SIZE(sensor_contrast_zero_regs),
},
{
.regs = sensor_contrast_pos1_regs,
.size = ARRAY_SIZE(sensor_contrast_pos1_regs),
},
{
.regs = sensor_contrast_pos2_regs,
.size = ARRAY_SIZE(sensor_contrast_pos2_regs),
},
{
.regs = sensor_contrast_pos3_regs,
.size = ARRAY_SIZE(sensor_contrast_pos3_regs),
},
{
.regs = sensor_contrast_pos4_regs,
.size = ARRAY_SIZE(sensor_contrast_pos4_regs),
},
};
/*
* The saturation setttings
*/
static struct regval_list sensor_saturation_neg4_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x0234},
{0x0F12, 0xFF80}, //Control value
};
static struct regval_list sensor_saturation_neg3_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x0234},
{0x0F12, 0xFFA0}, //Control value
};
static struct regval_list sensor_saturation_neg2_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x0234},
{0x0F12, 0xFFC0}, //Control value
};
static struct regval_list sensor_saturation_neg1_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x0234},
{0x0F12, 0xFFE0}, //Control value
};
static struct regval_list sensor_saturation_zero_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x0234},
{0x0F12, 0x0000}, //Control value
};
static struct regval_list sensor_saturation_pos1_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x0234},
{0x0F12, 0x0020}, //Control value
};
static struct regval_list sensor_saturation_pos2_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x0234},
{0x0F12, 0x0040}, //Control value
};
static struct regval_list sensor_saturation_pos3_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x0234},
{0x0F12, 0x0060}, //Control value
};
static struct regval_list sensor_saturation_pos4_regs[] = {
{0x0028, 0x7000},
{0x002A, 0x0234},
{0x0F12, 0x0080}, //Control value
};
static struct cfg_array sensor_saturation[] = {
{
.regs = sensor_saturation_neg4_regs,
.size = ARRAY_SIZE(sensor_saturation_neg4_regs),
},
{
.regs = sensor_saturation_neg3_regs,
.size = ARRAY_SIZE(sensor_saturation_neg3_regs),
},
{
.regs = sensor_saturation_neg2_regs,
.size = ARRAY_SIZE(sensor_saturation_neg2_regs),
},
{
.regs = sensor_saturation_neg1_regs,
.size = ARRAY_SIZE(sensor_saturation_neg1_regs),
},
{
.regs = sensor_saturation_zero_regs,
.size = ARRAY_SIZE(sensor_saturation_zero_regs),
},
{
.regs = sensor_saturation_pos1_regs,
.size = ARRAY_SIZE(sensor_saturation_pos1_regs),
},
{
.regs = sensor_saturation_pos2_regs,
.size = ARRAY_SIZE(sensor_saturation_pos2_regs),
},
{
.regs = sensor_saturation_pos3_regs,
.size = ARRAY_SIZE(sensor_saturation_pos3_regs),
},
{
.regs = sensor_saturation_pos4_regs,
.size = ARRAY_SIZE(sensor_saturation_pos4_regs),
},
};
/*
* The exposure target setttings
*/
static struct regval_list sensor_ev_neg4_regs[] = {
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x023A},
{0x0F12, 0x0080}, //Control value
};
static struct regval_list sensor_ev_neg3_regs[] = {
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x023A},
{0x0F12, 0x00A0}, //Control value
};
static struct regval_list sensor_ev_neg2_regs[] = {
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x023A},
{0x0F12, 0x00C0}, //Control value
};
static struct regval_list sensor_ev_neg1_regs[] = {
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x023A},
{0x0F12, 0x00E0}, //Control value
};
static struct regval_list sensor_ev_zero_regs[] = {
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x023A},
{0x0F12, 0x0100}, //Control value
};
static struct regval_list sensor_ev_pos1_regs[] = {
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x023A},
{0x0F12, 0x0120}, //Control value
};
static struct regval_list sensor_ev_pos2_regs[] = {
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x023A},
{0x0F12, 0x0140}, //Control value
};
static struct regval_list sensor_ev_pos3_regs[] = {
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x023A},
{0x0F12, 0x0160}, //Control value
};
static struct regval_list sensor_ev_pos4_regs[] = {
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x023A},
{0x0F12, 0x0180}, //Control value
};
static struct cfg_array sensor_ev[] = {
{
.regs = sensor_ev_neg4_regs,
.size = ARRAY_SIZE(sensor_ev_neg4_regs),
},
{
.regs = sensor_ev_neg3_regs,
.size = ARRAY_SIZE(sensor_ev_neg3_regs),
},
{
.regs = sensor_ev_neg2_regs,
.size = ARRAY_SIZE(sensor_ev_neg2_regs),
},
{
.regs = sensor_ev_neg1_regs,
.size = ARRAY_SIZE(sensor_ev_neg1_regs),
},
{
.regs = sensor_ev_zero_regs,
.size = ARRAY_SIZE(sensor_ev_zero_regs),
},
{
.regs = sensor_ev_pos1_regs,
.size = ARRAY_SIZE(sensor_ev_pos1_regs),
},
{
.regs = sensor_ev_pos2_regs,
.size = ARRAY_SIZE(sensor_ev_pos2_regs),
},
{
.regs = sensor_ev_pos3_regs,
.size = ARRAY_SIZE(sensor_ev_pos3_regs),
},
{
.regs = sensor_ev_pos4_regs,
.size = ARRAY_SIZE(sensor_ev_pos4_regs),
},
};
/*
* Here we'll try to encapsulate the changes for just the output
* video format.
*
*/
static struct regval_list sensor_fmt_yuv422_yuyv[] = {
//YUYV
//==================================================================================
// 20.Preview & Capture Configration Setting
//==================================================================================
//{0xFFFF, 0x0000},
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x02B4},
{0x0F12, 0x0040}, //REG_0TC_PCFG_PVIMask [5:4] YUYV 00 / UYVY 01 / YVYU 10 / VYUV 11
{0x002A, 0x03A6},
{0x0F12, 0x0040}, //REG_0TC_CCFG_PVIMask [5:4] YUYV 00 / UYVY 01 / YVYU 10 / VYUV 11
};
static struct regval_list sensor_fmt_yuv422_yvyu[] = {
//==================================================================================
// 20.Preview & Capture Configration Setting
//==================================================================================
//{0xFFFF, 0x0000},
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x02B4},
{0x0F12, 0x0060}, //REG_0TC_PCFG_PVIMask [5:4] YUYV 00 / UYVY 01 / YVYU 10 / VYUV 11
{0x002A, 0x03A6},
{0x0F12, 0x0060}, //REG_0TC_CCFG_PVIMask [5:4] YUYV 00 / UYVY 01 / YVYU 10 / VYUV 11
};
static struct regval_list sensor_fmt_yuv422_vyuy[] = {
//==================================================================================
// 20.Preview & Capture Configration Setting
//==================================================================================
//{0xFFFF, 0x0000},
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x02B4},
{0x0F12, 0x0070}, //REG_0TC_PCFG_PVIMask [5:4] YUYV 00 / UYVY 01 / YVYU 10 / VYUV 11
{0x002A, 0x03A6},
{0x0F12, 0x0070}, //REG_0TC_CCFG_PVIMask [5:4] YUYV 00 / UYVY 01 / YVYU 10 / VYUV 11
};
static struct regval_list sensor_fmt_yuv422_uyvy[] = {
//==================================================================================
// 20.Preview & Capture Configration Setting
//==================================================================================
//{0xFFFF, 0x0000},
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x02B4},
{0x0F12, 0x0050}, //REG_0TC_PCFG_PVIMask [5:4] YUYV 00 / UYVY 01 / YVYU 10 / VYUV 11
{0x002A, 0x03A6},
{0x0F12, 0x0050}, //REG_0TC_CCFG_PVIMask [5:4] YUYV 00 / UYVY 01 / YVYU 10 / VYUV 11
};
static int sensor_g_hflip(struct v4l2_subdev *sd, __s32 *value)
{
struct sensor_info *info = to_state(sd);
*value = info->hflip;
return 0;
}
static int sensor_s_hflip(struct v4l2_subdev *sd, int value)
{
int ret;
struct sensor_info *info = to_state(sd);
unsigned short pre_val,cap_val;
struct regval_list regs[] = {
////==================================================================================
//// 20.Preview & Capture Configration Setting
////==================================================================================
//{0xFCFC, 0xD000},
//{0x0028, 0x7000},
//{0x002A, 0x02D0},
//{0x0F12, 0x0000}, //REG_0TC_PCFG_uPrevMirror Original 00 / H Mirror 05 / V Mirror 0A / HV Mirror 0F
//{0x0F12, 0x0000}, //REG_0TC_PCFG_uCaptureMirror Original 00 / H Mirror 05 / V Mirror 0A / HV Mirror 0F
//==================================================================================
// 21.Select Cofigration Display
//==================================================================================
//PREVIEW
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x0266},
{0x0f12, 0x0000}, //REG_TC_GP_ActivePrevConfig
{0x002A, 0x026A},
{0x0F12, 0x0001}, //REG_TC_GP_PrevOpenAfterChange
{0x002A, 0x024E},
{0x0F12, 0x0001}, //REG_TC_GP_NewConfigSync
{0x002A, 0x0268},
{0x0F12, 0x0001}, //REG_TC_GP_PrevConfigChanged
{0x002A, 0x023E},
{0x0F12, 0x0001}, //REG_TC_GP_EnablePreview
{0x0F12, 0x0001}, //REG_TC_GP_EnablePreviewChanged;
};
if(info->hflip == value)
return 0;
sensor_write(sd, 0x002c , 0x7000);
sensor_write(sd, 0x002e , 0x02d0);
sensor_read(sd, 0x0f12, &pre_val);
sensor_read(sd, 0x0f12, &cap_val);
sensor_write(sd, 0x0028, 0x7000);
sensor_write(sd, 0x002a, 0x02d0);
switch (value) {
case 0:
pre_val &= 0xfa;
cap_val &= 0xfa;
break;
case 1:
pre_val |= 0x05;
cap_val |= 0x05;
break;
default:
return -EINVAL;
}
sensor_write(sd, 0x0f12, pre_val);
sensor_write(sd, 0x0f12, cap_val);
ret = sensor_write_array(sd, regs, ARRAY_SIZE(regs));
if (ret < 0) {
vfe_dev_err("sensor_write err at sensor_s_hflip!\n");
return ret;
}
info->hflip = value;
return 0;
}
static int sensor_g_vflip(struct v4l2_subdev *sd, __s32 *value)
{
struct sensor_info *info = to_state(sd);
*value = info->vflip;
return 0;
}
static int sensor_s_vflip(struct v4l2_subdev *sd, int value)
{
int ret;
struct sensor_info *info = to_state(sd);
unsigned short pre_val,cap_val;
struct regval_list regs[] = {
////==================================================================================
//// 20.Preview & Capture Configration Setting
////==================================================================================
//{0xFCFC, 0xD000},
//{0x0028, 0x7000},
//{0x002A, 0x02D0},
//{0x0F12, 0x0000}, //REG_0TC_PCFG_uPrevMirror Original 00 / H Mirror 05 / V Mirror 0A / HV Mirror 0F
//{0x0F12, 0x0000}, //REG_0TC_PCFG_uCaptureMirror Original 00 / H Mirror 05 / V Mirror 0A / HV Mirror 0F
//==================================================================================
// 21.Select Cofigration Display
//==================================================================================
//PREVIEW
{0xFCFC, 0xD000},
{0x0028, 0x7000},
{0x002A, 0x0266},
{0x0f12, 0x0000}, //REG_TC_GP_ActivePrevConfig
{0x002A, 0x026A},
{0x0F12, 0x0001}, //REG_TC_GP_PrevOpenAfterChange
{0x002A, 0x024E},
{0x0F12, 0x0001}, //REG_TC_GP_NewConfigSync
{0x002A, 0x0268},
{0x0F12, 0x0001}, //REG_TC_GP_PrevConfigChanged
{0x002A, 0x023E},
{0x0F12, 0x0001}, //REG_TC_GP_EnablePreview
{0x0F12, 0x0001}, //REG_TC_GP_EnablePreviewChanged;
};
if(info->vflip == value)
return 0;
sensor_write(sd, 0x0028, 0x7000);
sensor_write(sd, 0x002a, 0x02d0);
sensor_write(sd, 0x002c , 0x7000);
sensor_write(sd, 0x002e , 0x02d0);
sensor_read(sd, 0x0f12, &pre_val);
sensor_read(sd, 0x0f12, &cap_val);
switch (value) {
case 0:
pre_val &= 0xf5;
cap_val &= 0xf5;
break;
case 1:
pre_val |= 0x0A;
cap_val |= 0x0A;
break;
default:
return -EINVAL;
}
sensor_write(sd, 0x0f12, pre_val);
sensor_write(sd, 0x0f12, cap_val);
ret = sensor_write_array(sd, regs, ARRAY_SIZE(regs));
if (ret < 0) {
vfe_dev_err("sensor_write err at sensor_s_vflip!\n");
return ret;
}
info->vflip = value;
return 0;
}
/* stuff about exposure when capturing image */
static int sensor_set_exposure(struct v4l2_subdev *sd)
{
return 0;
}
/* stuff about auto focus */
static int sensor_download_af_fw(struct v4l2_subdev *sd)
{
return 0;
}
static int sensor_ae_awb_lockon(struct v4l2_subdev *sd)
{
int ret;
ret = sensor_write_array(sd, sensor_ae_awb_lockon_regs , ARRAY_SIZE(sensor_ae_awb_lockon_regs));
if(ret < 0)
vfe_dev_err("sensor_ae_awb_lockon error!\n");
return ret;
};
static int sensor_ae_awb_lockoff(struct v4l2_subdev *sd)
{
int ret;
ret = sensor_write_array(sd, sensor_ae_awb_lockoff_regs , ARRAY_SIZE(sensor_ae_awb_lockoff_regs));
if(ret < 0)
vfe_dev_err("sensor_ae_awb_lockoff error!\n");
return ret;
};
static int sensor_s_single_af(struct v4l2_subdev *sd)
{
int ret;
struct sensor_info *info = to_state(sd);
vfe_dev_print("sensor_s_single_af\n");
info->focus_status = 0; //idle
coarse_af_pd = 0;
//ae lock on
sensor_ae_awb_lockon(sd);
//single trigger
ret = sensor_write_array(sd, sensor_af_single_trig_regs , ARRAY_SIZE(sensor_af_single_trig_regs));
if(ret < 0) {
vfe_dev_err("sensor_s_single_af error!\n");
sensor_ae_awb_lockoff(sd);
} else if(ret == 0) {
info->focus_status = 1; //busy
}
return ret;
}
static int sensor_g_single_af(struct v4l2_subdev *sd)
{
unsigned short rdval;
int ret;
struct sensor_info *info = to_state(sd);
vfe_dev_dbg("sensor_g_single_af\n");
vfe_dev_dbg("coarse_af_pd = %d\n",coarse_af_pd);
if(coarse_af_pd != 1) {
//wait for 1st af complete
rdval = 0xffff;
sensor_write(sd, 0x002c , 0x7000);
sensor_write(sd, 0x002e , 0x2eee);
ret = sensor_read(sd, 0x0f12 , &rdval);
if (ret < 0)
{
vfe_dev_err("sensor_g_single_af read error !\n");
ret = -EAGAIN;
goto af_out;
}
if(rdval == 0x0001 ) {
vfe_dev_dbg("Single AF 1st is busy,value = 0x%4x\n",rdval);
msleep(50);
coarse_af_pd = 0;
return EBUSY;
} else if (rdval == 0x0002) {
//focus ok
coarse_af_pd = 1;
vfe_dev_print("Single AF 1st is complete,value = 0x%4x\n",rdval);
} else {
vfe_dev_print("Single AF 1st is failed,value = 0x%4x\n",rdval);
info->focus_status = 0; //idle
coarse_af_pd = 2;
ret = EFAULT;
goto af_out;
}
}
//wait for 2nd af complete
rdval = 0xffff;
sensor_write(sd, 0x002c , 0x7000);
sensor_write(sd, 0x002e , 0x2207);
ret = sensor_read(sd, 0x0f12 , &rdval);
if (ret < 0)
{
vfe_dev_err("sensor_g_single_af read error !\n");
goto af_out;
}
if((rdval&0xff00)!=0x0000) {
vfe_dev_dbg("Single AF 2nd is busy,value = 0x%4x\n",rdval);
return EBUSY;
}
vfe_dev_print("Single AF 2nd is complete,value = 0x%4x\n",rdval);
info->focus_status = 0; //idle
ret = 0;
af_out:
//ae lock off
sensor_ae_awb_lockoff(sd);
return ret;
}
static int sensor_g_contin_af(struct v4l2_subdev *sd)
{
return V4L2_AUTO_FOCUS_STATUS_IDLE;
}
static int sensor_g_af_status(struct v4l2_subdev *sd)
{
int ret=0;
struct sensor_info *info = to_state(sd);
if(info->auto_focus==1)
ret = sensor_g_contin_af(sd);
else
ret = sensor_g_single_af(sd);
return ret;
}
static int sensor_s_init_af(struct v4l2_subdev *sd)
{
int ret;
struct sensor_info *info = to_state(sd);
ret=sensor_download_af_fw(sd);
if(ret==0)
info->af_first_flag=0;
//other config
return ret;
}
static int sensor_s_infinity_af(struct v4l2_subdev *sd)
{
int ret;
vfe_dev_print("sensor_s_infinity_af\n");
ret = sensor_write_array(sd,sensor_af_infinity_regs,ARRAY_SIZE(sensor_af_infinity_regs));
if(ret < 0)
vfe_dev_err("sensor_s_infinity_af error\n");
return ret;
}
static int sensor_s_pause_af(struct v4l2_subdev *sd)
{
return 0;
}
static int sensor_s_release_af(struct v4l2_subdev *sd)
{
return 0;
}
static int sensor_s_continueous_af(struct v4l2_subdev *sd, int value)
{
int ret = 0;
struct sensor_info *info = to_state(sd);
vfe_dev_print("sensor_s_continueous_af[0x%x]\n",value);
if(value==1)
{
ret = sensor_write_array(sd,sensor_af_continueous_regs,ARRAY_SIZE(sensor_af_continueous_regs));
if(ret < 0)
vfe_dev_err("sensor_s_continueous_af error\n");
info->auto_focus=1;
}
else
{
LOG_ERR_RET(sensor_s_infinity_af(sd));
info->auto_focus=0;
}
return ret;
}
static int sensor_s_af_zone(struct v4l2_subdev *sd,
struct v4l2_win_coordinate * win_c)
{
struct sensor_info *info = to_state(sd);
int x1,y1,x2,y2;
unsigned int xc,yc;
unsigned int prv_x,prv_y;
int fst_win_start_x,fst_win_start_y;
int fst_disp_start_x,fst_disp_start_y;
int fst_win_size_x = 512,fst_win_size_y = 568;
int fst_disp_size_x,fst_disp_size_y;
int scnd_win_start_x,scnd_win_start_y;
int scnd_disp_start_x,scnd_disp_start_y;
int scnd_win_size_x = 116,scnd_win_size_y = 306;
int scnd_disp_size_x,scnd_disp_size_y;
if(info->focus_status == 1) //can not set af zone when focus is busy
return 0;
if(info->width == 0 || info->height == 0) {
vfe_dev_err("current width or height is zero!\n");
return -EINVAL;
}
vfe_dev_print("sensor_s_af_zone\n");
prv_x=(int)info->width;
prv_y=(int)info->height;
x1=win_c->x1;
y1=win_c->y1;
x2=win_c->x2;
y2=win_c->y2;
#ifdef AF_WIN_NEW_COORD
xc=prv_x*((unsigned int)(2000+x1+x2)/2)/2000;
yc=(prv_y*((unsigned int)(2000+y1+y2)/2)/2000);
#else
xc=(x1+x2)/2;
yc=(y1+y2)/2;
#endif
vfe_dev_dbg("af zone input xc=%d,yc=%d\n",xc,yc);
//first window
fst_disp_size_x = fst_win_size_x * info->width /1024;
if(xc + fst_disp_size_x/2 > info->width) {
fst_disp_start_x = info->width - fst_disp_size_x;
} else if(xc - (fst_disp_size_x/2) < 0) {
fst_disp_start_x = 0;
} else {
fst_disp_start_x = xc - (fst_disp_size_x/2);
}
fst_disp_size_y = fst_win_size_y * info->height /1024;
if(yc + fst_disp_size_y/2 > info->height) {
fst_disp_start_y = info->height - fst_disp_size_y;
} else if(yc - fst_disp_size_y/2 < 0) {
fst_disp_start_y = 0;
} else {
fst_disp_start_y = yc - fst_disp_size_y/2;
}
fst_win_start_x = fst_disp_start_x * 1024 / info->width;
fst_win_start_y = fst_disp_start_y * 1024 / info->height;
//second window
scnd_disp_size_x = scnd_win_size_x * info->width /1024;
if(xc + scnd_disp_size_x/2 > info->width) {
scnd_disp_start_x = info->width - scnd_disp_size_x;
} else if(xc - scnd_disp_size_x/2 < 0) {
scnd_disp_start_x = 0;
} else {
scnd_disp_start_x = xc - scnd_disp_size_x/2;
}
scnd_disp_size_y = scnd_win_size_y * info->height /1024;
if(yc + scnd_disp_size_y/2 > info->height) {
scnd_disp_start_y = info->height - scnd_disp_size_y;
} else if(yc - scnd_disp_size_y/2 < 0) {
scnd_disp_start_y = 0;
} else {
scnd_disp_start_y = yc - scnd_disp_size_y/2;
}
scnd_win_start_x = scnd_disp_start_x * 1024 / info->width;
scnd_win_start_y = scnd_disp_start_y * 1024 / info->height;
sensor_write(sd, 0x0028, 0x7000);
sensor_write(sd, 0x002a, 0x0294);
sensor_write(sd, 0x0f12, fst_win_start_x); //REG_TC_AF_FstWinStartX
sensor_write(sd, 0x0f12, fst_win_start_y); //REG_TC_AF_FstWinStartY
sensor_write(sd, 0x0f12, fst_win_size_x); //REG_TC_AF_FstWinSizeX
sensor_write(sd, 0x0f12, fst_win_size_y); //REG_TC_AF_FstWinSizeY
sensor_write(sd, 0x0f12, scnd_win_start_x); //REG_TC_AF_ScndWinStartX
sensor_write(sd, 0x0f12, scnd_win_start_y); //REG_TC_AF_ScndWinStartY
sensor_write(sd, 0x0f12, scnd_win_size_x); //REG_TC_AF_ScndWinSizeX
sensor_write(sd, 0x0f12, scnd_win_size_y); //REG_TC_AF_ScndWinSizeY
sensor_write(sd, 0x0f12, 0x0001); //REG_TC_AF_WinSizesUpdated;
vfe_dev_dbg("af zone 1st window stx=%d,sty=%d,width=%d,height=%d\n",fst_win_start_x,fst_win_start_y,fst_win_size_x,fst_win_size_y);
vfe_dev_dbg("af zone 2nd window stx=%d,sty=%d,width=%d,height=%d\n",scnd_win_start_x,scnd_win_start_y,scnd_win_size_x,scnd_win_size_y);
usleep_range(30000,31000);
return 0;
}
static int sensor_g_autogain(struct v4l2_subdev *sd, __s32 *value)
{
return -EINVAL;
}
static int sensor_s_autogain(struct v4l2_subdev *sd, int value)
{
return -EINVAL;
}
static int sensor_g_autoexp(struct v4l2_subdev *sd, __s32 *value)
{
return -EINVAL;
}
static int sensor_s_autoexp(struct v4l2_subdev *sd,
enum v4l2_exposure_auto_type value)
{
return -EINVAL;
}
static int sensor_g_autowb(struct v4l2_subdev *sd, int *value)
{
struct sensor_info *info = to_state(sd);
*value = info->autowb;
return 0;
}
static int sensor_s_autowb(struct v4l2_subdev *sd, int value)
{
int ret;
struct sensor_info *info = to_state(sd);
ret = sensor_write_array(sd, sensor_wb_auto_regs, ARRAY_SIZE(sensor_wb_auto_regs));
if (ret < 0) {
vfe_dev_err("sensor_write_array err at sensor_s_autowb!\n");
return ret;
}
usleep_range(10000,12000);
info->autowb = value;
return 0;
}
static int sensor_g_hue(struct v4l2_subdev *sd, __s32 *value)
{
return -EINVAL;
}
static int sensor_s_hue(struct v4l2_subdev *sd, int value)
{
return -EINVAL;
}
static int sensor_g_gain(struct v4l2_subdev *sd, __s32 *value)
{
return -EINVAL;
}
static int sensor_s_gain(struct v4l2_subdev *sd, int value)
{
return -EINVAL;
}
static int sensor_g_band_filter(struct v4l2_subdev *sd,
__s32 *value)
{
struct sensor_info *info = to_state(sd);
*value = info->band_filter;
return 0;
}
static int sensor_s_band_filter(struct v4l2_subdev *sd,
enum v4l2_power_line_frequency value)
{
struct sensor_info *info = to_state(sd);
int ret = 0;
switch(value) {
case V4L2_CID_POWER_LINE_FREQUENCY_DISABLED:
break;
case V4L2_CID_POWER_LINE_FREQUENCY_50HZ:
ret = sensor_write_array(sd, sensor_flicker_50hz_regs, ARRAY_SIZE(sensor_flicker_50hz_regs));
if (ret < 0)
vfe_dev_err("sensor_write_array err at sensor_s_band_filter!\n");
break;
case V4L2_CID_POWER_LINE_FREQUENCY_60HZ:
ret = sensor_write_array(sd, sensor_flicker_60hz_regs, ARRAY_SIZE(sensor_flicker_60hz_regs));
if (ret < 0)
vfe_dev_err("sensor_write_array err at sensor_s_band_filter!\n");
break;
case V4L2_CID_POWER_LINE_FREQUENCY_AUTO:
break;
}
//usleep_range(10000,12000);
info->band_filter = value;
return ret;
}
static int sensor_g_brightness(struct v4l2_subdev *sd, __s32 *value)
{
struct sensor_info *info = to_state(sd);
*value = info->brightness;
return 0;
}
static int sensor_s_brightness(struct v4l2_subdev *sd, int value)
{
struct sensor_info *info = to_state(sd);
if(info->brightness == value)
return 0;
if(value < -4 || value > 4)
return -ERANGE;
LOG_ERR_RET(sensor_write_array(sd, sensor_brightness[value+4].regs, sensor_brightness[value+4].size))
info->brightness = value;
return 0;
}
static int sensor_g_contrast(struct v4l2_subdev *sd, __s32 *value)
{
struct sensor_info *info = to_state(sd);
*value = info->contrast;
return 0;
}
static int sensor_s_contrast(struct v4l2_subdev *sd, int value)
{
struct sensor_info *info = to_state(sd);
if(info->contrast == value)
return 0;
if(value < -4 || value > 4)
return -ERANGE;
LOG_ERR_RET(sensor_write_array(sd, sensor_contrast[value+4].regs, sensor_contrast[value+4].size))
info->contrast = value;
return 0;
}
static int sensor_g_saturation(struct v4l2_subdev *sd, __s32 *value)
{
struct sensor_info *info = to_state(sd);
*value = info->saturation;
return 0;
}
static int sensor_s_saturation(struct v4l2_subdev *sd, int value)
{
struct sensor_info *info = to_state(sd);
if(info->saturation == value)
return 0;
if(value < -4 || value > 4)
return -ERANGE;
LOG_ERR_RET(sensor_write_array(sd, sensor_saturation[value+4].regs, sensor_saturation[value+4].size))
info->saturation = value;
return 0;
}
static int sensor_g_exp_bias(struct v4l2_subdev *sd, __s32 *value)
{
struct sensor_info *info = to_state(sd);
*value = info->exp_bias;
return 0;
}
static int sensor_s_exp_bias(struct v4l2_subdev *sd, int value)
{
struct sensor_info *info = to_state(sd);
if(info->exp_bias == value)
return 0;
if(value < -4 || value > 4)
return -ERANGE;
LOG_ERR_RET(sensor_write_array(sd, sensor_ev[value+4].regs, sensor_ev[value+4].size))
info->exp_bias = value;
return 0;
}
static int sensor_g_wb(struct v4l2_subdev *sd, int *value)
{
struct sensor_info *info = to_state(sd);
enum v4l2_auto_n_preset_white_balance *wb_type = (enum v4l2_auto_n_preset_white_balance*)value;
*wb_type = info->wb;
return 0;
}
static int sensor_s_wb(struct v4l2_subdev *sd,
enum v4l2_auto_n_preset_white_balance value)
{
struct sensor_info *info = to_state(sd);
if(info->capture_mode == V4L2_MODE_IMAGE)
return 0;
if(info->wb == value)
return 0;
LOG_ERR_RET(sensor_write_array(sd, sensor_wb[value].regs ,sensor_wb[value].size) )
if (value == V4L2_WHITE_BALANCE_AUTO)
info->autowb = 1;
else
info->autowb = 0;
info->wb = value;
return 0;
}
static int sensor_g_colorfx(struct v4l2_subdev *sd,
__s32 *value)
{
struct sensor_info *info = to_state(sd);
enum v4l2_colorfx *clrfx_type = (enum v4l2_colorfx*)value;
*clrfx_type = info->clrfx;
return 0;
}
static int sensor_s_colorfx(struct v4l2_subdev *sd,
enum v4l2_colorfx value)
{
struct sensor_info *info = to_state(sd);
if(info->clrfx == value)
return 0;
LOG_ERR_RET(sensor_write_array(sd, sensor_colorfx[value].regs, sensor_colorfx[value].size))
info->clrfx = value;
return 0;
}
static int sensor_g_flash_mode(struct v4l2_subdev *sd,
__s32 *value)
{
struct sensor_info *info = to_state(sd);
enum v4l2_flash_led_mode *flash_mode = (enum v4l2_flash_led_mode*)value;
*flash_mode = info->flash_mode;
return 0;
}
static int sensor_s_flash_mode(struct v4l2_subdev *sd,
enum v4l2_flash_led_mode value)
{
struct sensor_info *info = to_state(sd);
info->flash_mode = value;
return 0;
}
/*
* Stuff that knows about the sensor.
*/
static int sensor_power(struct v4l2_subdev *sd, int on)
{
switch(on)
{
case CSI_SUBDEV_STBY_ON:
vfe_dev_dbg("CSI_SUBDEV_STBY_ON\n");
cci_lock(sd);
vfe_gpio_write(sd,RESET,CSI_GPIO_LOW);
usleep_range(1000,1200);
vfe_gpio_write(sd,PWDN,CSI_GPIO_LOW);
usleep_range(1000,1200);
vfe_set_mclk(sd,OFF);
cci_unlock(sd);
break;
case CSI_SUBDEV_STBY_OFF:
vfe_dev_dbg("CSI_SUBDEV_STBY_OFF\n");
cci_lock(sd);
vfe_set_mclk(sd,ON);
usleep_range(1000,1200);
vfe_gpio_write(sd,PWDN,CSI_GPIO_HIGH);
usleep_range(1000,1200);
vfe_gpio_write(sd,RESET,CSI_GPIO_HIGH);
usleep_range(1000,1200);
cci_unlock(sd);
break;
case CSI_SUBDEV_PWR_ON:
vfe_dev_dbg("CSI_SUBDEV_PWR_ON\n");
cci_lock(sd);
vfe_gpio_set_status(sd,PWDN,1);//set the gpio to output
vfe_gpio_set_status(sd,RESET,1);//set the gpio to output
vfe_gpio_write(sd,PWDN,CSI_GPIO_LOW);
vfe_gpio_write(sd,RESET,CSI_GPIO_LOW);
vfe_gpio_write(sd,POWER_EN,CSI_GPIO_HIGH);
vfe_set_pmu_channel(sd,IOVDD,ON);
vfe_set_pmu_channel(sd,AVDD,ON);
vfe_set_pmu_channel(sd,DVDD,ON);
vfe_set_pmu_channel(sd,AFVDD,ON);
usleep_range(10000,12000);
vfe_set_mclk(sd,ON);
vfe_gpio_write(sd,PWDN,CSI_GPIO_HIGH);
usleep_range(10000,12000);
vfe_gpio_write(sd,RESET,CSI_GPIO_HIGH);
usleep_range(10000,12000);
cci_unlock(sd);
break;
case CSI_SUBDEV_PWR_OFF:
vfe_dev_dbg("CSI_SUBDEV_PWR_OFF\n");
cci_lock(sd);
vfe_gpio_write(sd,RESET,CSI_GPIO_LOW);
udelay(100);
vfe_set_mclk(sd,OFF);
udelay(10);
vfe_gpio_write(sd,PWDN,CSI_GPIO_LOW);
vfe_gpio_write(sd,POWER_EN,CSI_GPIO_LOW);
vfe_set_pmu_channel(sd,IOVDD,OFF);
vfe_set_pmu_channel(sd,AVDD,OFF);
vfe_set_pmu_channel(sd,DVDD,OFF);
vfe_set_pmu_channel(sd,AFVDD,OFF);
vfe_gpio_set_status(sd,PWDN,0);//set the gpio to input
vfe_gpio_set_status(sd,RESET,0);//set the gpio to input
cci_unlock(sd);
break;
default:
return -EINVAL;
}
return 0;
}
static int sensor_reset(struct v4l2_subdev *sd, u32 val)
{
switch(val)
{
case 0:
vfe_gpio_write(sd,RESET,CSI_GPIO_HIGH);
usleep_range(10000,12000);
break;
case 1:
vfe_gpio_write(sd,RESET,CSI_GPIO_LOW);
usleep_range(10000,12000);
break;
default:
return -EINVAL;
}
return 0;
}
static int sensor_detect(struct v4l2_subdev *sd)
{
int ret;
data_type rdval=0xffff;
ret = sensor_write(sd, 0x002c, 0x7000);
ret = sensor_write(sd, 0x002e, 0x01a4);
if (ret < 0)
{
vfe_dev_err("sensor_write err at sensor_detect!\n");
return ret;
}
ret = sensor_read(sd, 0x0f12, &rdval);
if(rdval != 0x4ec0 )
{
vfe_dev_err("id read from sensor is 0x%4x,not 0x4ec0\n",rdval);
return -ENODEV;
}
return 0;
}
static int sensor_init(struct v4l2_subdev *sd, u32 val)
{
int ret;
struct sensor_info *info = to_state(sd);
vfe_dev_dbg("sensor_init\n");
/*Make sure it is a target sensor*/
ret = sensor_detect(sd);
if (ret) {
vfe_dev_err("chip found is not an target chip.\n");
return ret;
}
vfe_get_standby_mode(sd,&info->stby_mode);
if((info->stby_mode == HW_STBY || info->stby_mode == SW_STBY) \
&& info->init_first_flag == 0) {
vfe_dev_print("stby_mode and init_first_flag = 0\n");
return 0;
}
info->focus_status = 0;
info->width = 0;
info->height = 0;
info->brightness = 0;
info->contrast = 0;
info->saturation = 0;
info->hue = 0;
info->hflip = 0;
info->vflip = 0;
info->gain = 0;
info->autogain = 1;
info->exp = 0;
info->autoexp = 0;
info->autowb = 1;
info->wb = V4L2_WHITE_BALANCE_AUTO;
info->clrfx = V4L2_COLORFX_NONE;
info->band_filter = V4L2_CID_POWER_LINE_FREQUENCY_50HZ;
info->tpf.numerator = 1;
info->tpf.denominator = 30; /* 30fps */
info->width = 0;
info->height = 0;
ret = sensor_write_array(sd, sensor_default_regs , ARRAY_SIZE(sensor_default_regs));
if(ret < 0) {
vfe_dev_err("write sensor_default_regs error\n");
return ret;
}
sensor_s_band_filter(sd, V4L2_CID_POWER_LINE_FREQUENCY_50HZ);
if(info->stby_mode == 0)
info->init_first_flag = 0;
info->preview_first_flag = 1;
return 0;
}
static void sensor_s_af_win(struct v4l2_subdev *sd, struct v4l2_win_setting * af_win)
{
sensor_s_af_zone(sd, &af_win->coor[0]);
}
static void sensor_s_ae_win(struct v4l2_subdev *sd, struct v4l2_win_setting * ae_win)
{
}
static long sensor_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
{
int ret=0;
switch(cmd) {
case SET_AUTO_FOCUS_WIN:
sensor_s_af_win(sd, (struct v4l2_win_setting *)arg);
break;
case SET_AUTO_EXPOSURE_WIN:
sensor_s_ae_win(sd, (struct v4l2_win_setting *)arg);
break;
default:
return -EINVAL;
}
return ret;
}
/*
* Store information about the video data format.
*/
static struct sensor_format_struct {
__u8 *desc;
//__u32 pixelformat;
enum v4l2_mbus_pixelcode mbus_code;//linux-3.0
struct regval_list *regs;
int regs_size;
int bpp; /* Bytes per pixel */
} sensor_formats[] = {
{
.desc = "YUYV 4:2:2",
.mbus_code = V4L2_MBUS_FMT_YUYV8_2X8,//linux-3.0
.regs = sensor_fmt_yuv422_yuyv,
.regs_size = ARRAY_SIZE(sensor_fmt_yuv422_yuyv),
.bpp = 2,
},
{
.desc = "YVYU 4:2:2",
.mbus_code = V4L2_MBUS_FMT_YVYU8_2X8,//linux-3.0
.regs = sensor_fmt_yuv422_yvyu,
.regs_size = ARRAY_SIZE(sensor_fmt_yuv422_yvyu),
.bpp = 2,
},
{
.desc = "UYVY 4:2:2",
.mbus_code = V4L2_MBUS_FMT_UYVY8_2X8,//linux-3.0
.regs = sensor_fmt_yuv422_uyvy,
.regs_size = ARRAY_SIZE(sensor_fmt_yuv422_uyvy),
.bpp = 2,
},
{
.desc = "VYUY 4:2:2",
.mbus_code = V4L2_MBUS_FMT_VYUY8_2X8,//linux-3.0
.regs = sensor_fmt_yuv422_vyuy,
.regs_size = ARRAY_SIZE(sensor_fmt_yuv422_vyuy),
.bpp = 2,
},
// {
// .desc = "Raw RGB Bayer",
// .mbus_code = V4L2_MBUS_FMT_SBGGR8_1X8,//linux-3.0
// .regs = sensor_fmt_raw,
// .regs_size = ARRAY_SIZE(sensor_fmt_raw),
// .bpp = 1
// },
};
#define N_FMTS ARRAY_SIZE(sensor_formats)
/*
* Then there is the issue of window sizes. Try to capture the info here.
*/
static struct sensor_win_size sensor_win_sizes[] = {
/* qsxga: 2592*1936 */
{
.width = QSXGA_WIDTH,
.height = QSXGA_HEIGHT,
.regs = sensor_qsxga_regs,
.hoffset = 0,
.voffset = 0,
.regs_size = ARRAY_SIZE(sensor_qsxga_regs),
.set_size = NULL,
},
/* qxga: 2048*1536 */
{
.width = QXGA_WIDTH,
.height = QXGA_HEIGHT,
.hoffset = 0,
.voffset = 0,
.regs = sensor_qxga_regs,
.regs_size = ARRAY_SIZE(sensor_qxga_regs),
.set_size = NULL,
},
/* 1080P */
{
.width = HD1080_WIDTH,
.height = HD1080_HEIGHT,
.hoffset = 0,
.voffset = 0,
.regs = sensor_1080p_regs,
.regs_size = ARRAY_SIZE(sensor_1080p_regs),
.set_size = NULL,
},
/* 720p */
{
.width = HD720_WIDTH,
.height = HD720_HEIGHT,
.hoffset = 0,
.voffset = 0,
.regs = sensor_720p_regs,
.regs_size = ARRAY_SIZE(sensor_720p_regs),
.set_size = NULL,
},
/* VGA */
{
.width = VGA_WIDTH,
.height = VGA_HEIGHT,
.hoffset = 0,
.voffset = 0,
.regs = sensor_vga_regs,
.regs_size = ARRAY_SIZE(sensor_vga_regs),
.set_size = NULL,
},
};
#define N_WIN_SIZES (ARRAY_SIZE(sensor_win_sizes))
static int sensor_enum_fmt(struct v4l2_subdev *sd, unsigned index,
enum v4l2_mbus_pixelcode *code)
{
if (index >= N_FMTS)//linux-3.0
return -EINVAL;
*code = sensor_formats[index].mbus_code;
return 0;
}
static int sensor_enum_size(struct v4l2_subdev *sd,
struct v4l2_frmsizeenum *fsize)
{
if(fsize->index > N_WIN_SIZES-1)
return -EINVAL;
fsize->type = V4L2_FRMSIZE_TYPE_DISCRETE;
fsize->discrete.width = sensor_win_sizes[fsize->index].width;
fsize->discrete.height = sensor_win_sizes[fsize->index].height;
return 0;
}
static int sensor_try_fmt_internal(struct v4l2_subdev *sd,
struct v4l2_mbus_framefmt *fmt,
struct sensor_format_struct **ret_fmt,
struct sensor_win_size **ret_wsize)
{
int index;
struct sensor_win_size *wsize;
for (index = 0; index < N_FMTS; index++)
if (sensor_formats[index].mbus_code == fmt->code)
break;
if (index >= N_FMTS)
return -EINVAL;
if (ret_fmt != NULL)
*ret_fmt = sensor_formats + index;
/*
* Fields: the sensor devices claim to be progressive.
*/
fmt->field = V4L2_FIELD_NONE;
/*
* Round requested image size down to the nearest
* we support, but not below the smallest.
*/
for (wsize = sensor_win_sizes; wsize < sensor_win_sizes + N_WIN_SIZES; wsize++)
if (fmt->width >= wsize->width && fmt->height >= wsize->height)
break;
if (wsize >= sensor_win_sizes + N_WIN_SIZES)
wsize--; /* Take the smallest one */
if (ret_wsize != NULL)
*ret_wsize = wsize;
/*
* Note the size we'll actually handle.
*/
fmt->width = wsize->width;
fmt->height = wsize->height;
fmt->reserved[0] = wsize->hoffset;
fmt->reserved[1] = wsize->voffset;
return 0;
}
static int sensor_try_fmt(struct v4l2_subdev *sd,
struct v4l2_mbus_framefmt *fmt)
{
return sensor_try_fmt_internal(sd, fmt, NULL, NULL);
}
static int sensor_g_mbus_config(struct v4l2_subdev *sd,
struct v4l2_mbus_config *cfg)
{
cfg->type = V4L2_MBUS_PARALLEL;
cfg->flags = V4L2_MBUS_MASTER | VREF_POL | HREF_POL | CLK_POL ;
return 0;
}
/*
* Set a format.
*/
static int sensor_s_fmt(struct v4l2_subdev *sd,
struct v4l2_mbus_framefmt *fmt)//linux-3.0
{
int ret;
struct sensor_format_struct *sensor_fmt;
struct sensor_win_size *wsize;
struct sensor_info *info = to_state(sd);
vfe_dev_dbg("sensor_s_fmt\n");
ret = sensor_try_fmt_internal(sd, fmt, &sensor_fmt, &wsize);
if (ret)
return ret;
if(info->fmt == sensor_fmt && info->width == wsize->width && info->height == wsize->height)
{
vfe_dev_print("format and size remain the same\n");
goto update;
}
if(info->capture_mode == V4L2_MODE_VIDEO ||
info->capture_mode == V4L2_MODE_PREVIEW)
{
}
else if(info->capture_mode == V4L2_MODE_IMAGE)
{
//capture
ret = sensor_set_exposure(sd);
if (ret < 0)
{
vfe_dev_err("sensor_set_exposure err !\n");
return ret;
}
}
ret = sensor_write_array(sd, sensor_fmt->regs , sensor_fmt->regs_size);
if (ret < 0)
return ret;
ret = 0;
if (wsize->regs)
LOG_ERR_RET(sensor_write_array(sd, wsize->regs , wsize->regs_size));
if (wsize->set_size)
LOG_ERR_RET(wsize->set_size(sd));
if(info->capture_mode == V4L2_MODE_VIDEO || info->capture_mode == V4L2_MODE_PREVIEW)
{
}
update:
info->fmt = sensor_fmt;
info->width = wsize->width;
info->height = wsize->height;
vfe_dev_print("s_fmt set width = %d, height = %d\n",wsize->width,wsize->height);
return 0;
}
/*
* Implement G/S_PARM. There is a "high quality" mode we could try
* to do someday; for now, we just do the frame rate tweak.
*/
static int sensor_g_parm(struct v4l2_subdev *sd, struct v4l2_streamparm *parms)
{
struct v4l2_captureparm *cp = &parms->parm.capture;
struct sensor_info *info = to_state(sd);
if (parms->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
return -EINVAL;
memset(cp, 0, sizeof(struct v4l2_captureparm));
cp->capability = V4L2_CAP_TIMEPERFRAME;
cp->capturemode = info->capture_mode;
cp->timeperframe.numerator = info->tpf.numerator;
cp->timeperframe.denominator = info->tpf.denominator;
return 0;
}
static int sensor_s_parm(struct v4l2_subdev *sd, struct v4l2_streamparm *parms)
{
struct v4l2_captureparm *cp = &parms->parm.capture;
struct v4l2_fract *tpf = &cp->timeperframe;
struct sensor_info *info = to_state(sd);
unsigned char div;
vfe_dev_dbg("sensor_s_parm\n");
if (parms->type != V4L2_BUF_TYPE_VIDEO_CAPTURE){
vfe_dev_dbg("parms->type!=V4L2_BUF_TYPE_VIDEO_CAPTURE\n");
return -EINVAL;
}
if (info->tpf.numerator == 0){
vfe_dev_dbg("info->tpf.numerator == 0\n");
return -EINVAL;
}
info->capture_mode = cp->capturemode;
if (info->capture_mode == V4L2_MODE_IMAGE) {
vfe_dev_dbg("capture mode is not video mode,can not set frame rate!\n");
return 0;
}
if (tpf->numerator == 0 || tpf->denominator == 0) {
tpf->numerator = 1;
tpf->denominator = SENSOR_FRAME_RATE;/* Reset to full rate */
vfe_dev_err("sensor frame rate reset to full rate!\n");
}
div = SENSOR_FRAME_RATE/(tpf->denominator/tpf->numerator);
if(div > 15 || div == 0)
{
vfe_dev_print("SENSOR_FRAME_RATE=%d\n",SENSOR_FRAME_RATE);
vfe_dev_print("tpf->denominator=%d\n",tpf->denominator);
vfe_dev_print("tpf->numerator=%d\n",tpf->numerator);
return -EINVAL;
}
vfe_dev_dbg("set frame rate %d\n",tpf->denominator/tpf->numerator);
info->tpf.denominator = SENSOR_FRAME_RATE;
info->tpf.numerator = div;
if(info->tpf.denominator/info->tpf.numerator < 30)
info->low_speed = 1;
return 0;
}
static int sensor_queryctrl(struct v4l2_subdev *sd,
struct v4l2_queryctrl *qc)
{
/* Fill in min, max, step and default value for these controls. */
/* see include/linux/videodev2.h for details */
// vfe_dev_dbg("queryctrl qc->id=0x%8x\n", qc->id);
switch (qc->id) {
// case V4L2_CID_BRIGHTNESS:
// return v4l2_ctrl_query_fill(qc, -4, 4, 1, 1);
// case V4L2_CID_CONTRAST:
// return v4l2_ctrl_query_fill(qc, -4, 4, 1, 1);
// case V4L2_CID_SATURATION:
// return v4l2_ctrl_query_fill(qc, -4, 4, 1, 1);
// case V4L2_CID_HUE:
// return v4l2_ctrl_query_fill(qc, -180, 180, 5, 0);
case V4L2_CID_VFLIP:
case V4L2_CID_HFLIP:
return v4l2_ctrl_query_fill(qc, 0, 1, 1, 0);
// case V4L2_CID_GAIN:
// return v4l2_ctrl_query_fill(qc, 0, 255, 1, 128);
// case V4L2_CID_AUTOGAIN:
// return v4l2_ctrl_query_fill(qc, 0, 1, 1, 1);
case V4L2_CID_EXPOSURE:
case V4L2_CID_AUTO_EXPOSURE_BIAS:
return v4l2_ctrl_query_fill(qc, -4, 4, 1, 0);
case V4L2_CID_EXPOSURE_AUTO:
return v4l2_ctrl_query_fill(qc, 0, 1, 1, 0);
case V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE:
return v4l2_ctrl_query_fill(qc, 0, 9, 1, 1);
case V4L2_CID_AUTO_WHITE_BALANCE:
return v4l2_ctrl_query_fill(qc, 0, 1, 1, 1);
case V4L2_CID_COLORFX:
return v4l2_ctrl_query_fill(qc, 0, 15, 1, 0);
case V4L2_CID_FLASH_LED_MODE:
return v4l2_ctrl_query_fill(qc, 0, 4, 1, 0);
// case V4L2_CID_3A_LOCK:
// return v4l2_ctrl_query_fill(qc, 0, V4L2_LOCK_FOCUS, 1, 0);
// case V4L2_CID_AUTO_FOCUS_RANGE:
// return v4l2_ctrl_query_fill(qc, 0, 0, 0, 0);//only auto
case V4L2_CID_AUTO_FOCUS_INIT:
case V4L2_CID_AUTO_FOCUS_RELEASE:
case V4L2_CID_AUTO_FOCUS_START:
case V4L2_CID_AUTO_FOCUS_STOP:
case V4L2_CID_AUTO_FOCUS_STATUS:
return v4l2_ctrl_query_fill(qc, 0, 0, 0, 0);
case V4L2_CID_FOCUS_AUTO:
return v4l2_ctrl_query_fill(qc, 0, 1, 1, 0);
}
return -EINVAL;
}
static int sensor_g_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl)
{
switch (ctrl->id) {
case V4L2_CID_BRIGHTNESS:
return sensor_g_brightness(sd, &ctrl->value);
case V4L2_CID_CONTRAST:
return sensor_g_contrast(sd, &ctrl->value);
case V4L2_CID_SATURATION:
return sensor_g_saturation(sd, &ctrl->value);
case V4L2_CID_HUE:
return sensor_g_hue(sd, &ctrl->value);
case V4L2_CID_VFLIP:
return sensor_g_vflip(sd, &ctrl->value);
case V4L2_CID_HFLIP:
return sensor_g_hflip(sd, &ctrl->value);
case V4L2_CID_GAIN:
return sensor_g_gain(sd, &ctrl->value);
case V4L2_CID_AUTOGAIN:
return sensor_g_autogain(sd, &ctrl->value);
case V4L2_CID_EXPOSURE:
case V4L2_CID_AUTO_EXPOSURE_BIAS:
return sensor_g_exp_bias(sd, &ctrl->value);
case V4L2_CID_EXPOSURE_AUTO:
return sensor_g_autoexp(sd, &ctrl->value);
case V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE:
return sensor_g_wb(sd, &ctrl->value);
case V4L2_CID_AUTO_WHITE_BALANCE:
return sensor_g_autowb(sd, &ctrl->value);
case V4L2_CID_COLORFX:
return sensor_g_colorfx(sd, &ctrl->value);
case V4L2_CID_FLASH_LED_MODE:
return sensor_g_flash_mode(sd, &ctrl->value);
case V4L2_CID_POWER_LINE_FREQUENCY:
return sensor_g_band_filter(sd, &ctrl->value);
// case V4L2_CID_3A_LOCK:
// return sensor_g_3a_lock(sd);
// case V4L2_CID_AUTO_FOCUS_RANGE:
// ctrl->value=0;//only auto
// return 0;
// case V4L2_CID_AUTO_FOCUS_INIT:
// case V4L2_CID_AUTO_FOCUS_RELEASE:
// case V4L2_CID_AUTO_FOCUS_START:
// case V4L2_CID_AUTO_FOCUS_STOP:
case V4L2_CID_AUTO_FOCUS_STATUS:
return sensor_g_af_status(sd);
// case V4L2_CID_FOCUS_AUTO:
}
return -EINVAL;
}
static int sensor_s_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl)
{
switch (ctrl->id) {
case V4L2_CID_BRIGHTNESS:
return sensor_s_brightness(sd, ctrl->value);
case V4L2_CID_CONTRAST:
return sensor_s_contrast(sd, ctrl->value);
case V4L2_CID_SATURATION:
return sensor_s_saturation(sd, ctrl->value);
case V4L2_CID_HUE:
return sensor_s_hue(sd, ctrl->value);
case V4L2_CID_VFLIP:
return sensor_s_vflip(sd, ctrl->value);
case V4L2_CID_HFLIP:
return sensor_s_hflip(sd, ctrl->value);
case V4L2_CID_GAIN:
return sensor_s_gain(sd, ctrl->value);
case V4L2_CID_AUTOGAIN:
return sensor_s_autogain(sd, ctrl->value);
case V4L2_CID_EXPOSURE:
case V4L2_CID_AUTO_EXPOSURE_BIAS:
return sensor_s_exp_bias(sd, ctrl->value);
case V4L2_CID_EXPOSURE_AUTO:
return sensor_s_autoexp(sd,(enum v4l2_exposure_auto_type) ctrl->value);
case V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE:
return sensor_s_wb(sd,(enum v4l2_auto_n_preset_white_balance) ctrl->value);
case V4L2_CID_AUTO_WHITE_BALANCE:
return sensor_s_autowb(sd, ctrl->value);
case V4L2_CID_COLORFX:
return sensor_s_colorfx(sd,(enum v4l2_colorfx) ctrl->value);
case V4L2_CID_FLASH_LED_MODE:
return sensor_s_flash_mode(sd,(enum v4l2_flash_led_mode) ctrl->value);
case V4L2_CID_POWER_LINE_FREQUENCY:
return sensor_s_band_filter(sd,(enum v4l2_power_line_frequency) ctrl->value);
// case V4L2_CID_3A_LOCK:
// return sensor_s_3a_lock(sd, ctrl->value);
// case V4L2_CID_AUTO_FOCUS_RANGE:
// return 0;
case V4L2_CID_AUTO_FOCUS_INIT:
return sensor_s_init_af(sd);
case V4L2_CID_AUTO_FOCUS_RELEASE:
return sensor_s_release_af(sd);
case V4L2_CID_AUTO_FOCUS_START:
return sensor_s_single_af(sd);
case V4L2_CID_AUTO_FOCUS_STOP:
return sensor_s_pause_af(sd);
// case V4L2_CID_AUTO_FOCUS_STATUS:
case V4L2_CID_FOCUS_AUTO:
return sensor_s_continueous_af(sd, ctrl->value);
}
return -EINVAL;
}
static int sensor_g_chip_ident(struct v4l2_subdev *sd,
struct v4l2_dbg_chip_ident *chip)
{
struct i2c_client *client = v4l2_get_subdevdata(sd);
return v4l2_chip_ident_i2c_client(client, chip, V4L2_IDENT_SENSOR, 0);
}
/* ----------------------------------------------------------------------- */
static const struct v4l2_subdev_core_ops sensor_core_ops = {
.g_chip_ident = sensor_g_chip_ident,
.g_ctrl = sensor_g_ctrl,
.s_ctrl = sensor_s_ctrl,
.queryctrl = sensor_queryctrl,
.reset = sensor_reset,
.init = sensor_init,
.s_power = sensor_power,
.ioctl = sensor_ioctl,
};
static const struct v4l2_subdev_video_ops sensor_video_ops = {
.enum_mbus_fmt = sensor_enum_fmt,
.enum_framesizes = sensor_enum_size,
.try_mbus_fmt = sensor_try_fmt,
.s_mbus_fmt = sensor_s_fmt,
.s_parm = sensor_s_parm,
.g_parm = sensor_g_parm,
.g_mbus_config = sensor_g_mbus_config,
};
static const struct v4l2_subdev_ops sensor_ops = {
.core = &sensor_core_ops,
.video = &sensor_video_ops,
};
/* ----------------------------------------------------------------------- */
static struct cci_driver cci_drv = {
.name = SENSOR_NAME,
.addr_width = CCI_BITS_16,
.data_width = CCI_BITS_16,
};
static int sensor_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
struct v4l2_subdev *sd;
struct sensor_info *info;
info = kzalloc(sizeof(struct sensor_info), GFP_KERNEL);
if (info == NULL)
return -ENOMEM;
sd = &info->sd;
cci_dev_probe_helper(sd, client, &sensor_ops, &cci_drv);
info->fmt = &sensor_formats[0];
info->af_first_flag = 1;
info->init_first_flag = 1;
info->auto_focus = 0;
return 0;
}
static int sensor_remove(struct i2c_client *client)
{
struct v4l2_subdev *sd;
sd = cci_dev_remove_helper(client, &cci_drv);
kfree(to_state(sd));
return 0;
}
static const struct i2c_device_id sensor_id[] = {
{ SENSOR_NAME, 0 },
{ }
};
MODULE_DEVICE_TABLE(i2c, sensor_id);
static struct i2c_driver sensor_driver = {
.driver = {
.owner = THIS_MODULE,
.name = SENSOR_NAME,
},
.probe = sensor_probe,
.remove = sensor_remove,
.id_table = sensor_id,
};
static __init int init_sensor(void)
{
return cci_dev_init_helper(&sensor_driver);
}
static __exit void exit_sensor(void)
{
cci_dev_exit_helper(&sensor_driver);
}
module_init(init_sensor);
module_exit(exit_sensor);