/* * Support for mt9v113 Camera Sensor. * * Copyright (c) 2012 Intel Corporation. All Rights Reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. * */ #ifndef __MT9V113_H__ #define __MT9V113_H__ #include #include #include #include #include #include #include #include #include #include #include #include #include #define V4L2_IDENT_MT9V113 0x2280 #define MT9V113_FOCAL_LENGTH_NUM 439 /* 4.39mm */ #define MT9V113_FOCAL_LENGTH_DEM 100 #define MT9V113_F_NUMBER_DEFAULT_NUM 24 #define MT9V113_F_NUMBER_DEM 10 /* * focal length bits definition: * bits 31-16: numerator, bits 15-0: denominator */ #define MT9V113_FOCAL_LENGTH_DEFAULT 0xd00064 /* * current f-number bits definition: * bits 31-16: numerator, bits 15-0: denominator */ #define MT9V113_F_NUMBER_DEFAULT 0x18000a /* * f-number range bits definition: * bits 31-24: max f-number numerator * bits 23-16: max f-number denominator * bits 15-8: min f-number numerator * bits 7-0: min f-number denominator */ #define MT9V113_F_NUMBER_RANGE 0x180a180a #define MT9V113_REG_CHIPID 0x0 #define MT9V113_REG_PLL_DIV 0x0010 #define MT9V113_REG_PLL_P 0x0012 #define MT9V113_REG_PLL_CTRL 0x0014 #define MT9V113_REG_STBY_CTRL 0x0018 #define MT9V113_REG_MISC_CTRL 0x001a #define MT9V113_REG_COL_PIPE_CTL 0x3210 #define MT9V113_REG_OFIFO_CTRL 0x321c #define MT9V113_REG_KERNEL_CONFIG 0x33f4 #define MT9V113_REG_MIPI_CTRL 0x3400 #define MT9V113_REG_MIPI_STAT 0x3402 #define MT9V113_REG_KERNEL_CONFIG_VAL 0x001b #define MT9V113_REG_COL_PIPE_CTL_VAL 0x9b8 #define MIPI_STAT_BIT_MIPI_STBY_STAT 0 #define MIPI_STAT_MASK_MIPI_STBY_STAT (1 << MIPI_STAT_BIT_MIPI_STBY_STAT) #define MIPI_CTRL_BIT_MIPI_STBY_REQ 1 #define MIPI_CTRL_MASK_MIPI_STBY_REQ (1 << MIPI_CTRL_BIT_MIPI_STBY_REQ) #define MIPI_CTRL_BIT_MIPI_EOF_REQ 4 #define MIPI_CTRL_MASK_MIPI_EOF_REQ (1 << MIPI_CTRL_BIT_MIPI_EOF_REQ) #define STBY_CTRL_BIT_STBY_STAT 14 #define STBY_CTRL_MASK_STBY_STAT (1 << STBY_CTRL_BIT_STBY_STAT) #define STBY_CTRL_BIT_STBY_REQ 0 #define STBY_CTRL_MASK_STBY_REQ (1 << STBY_CTRL_BIT_STBY_REQ) #define PLL_CTRL_BIT_PLL_STAT 15 #define PLL_CTRL_MASK_PLL_STAT (1 << PLL_CTRL_BIT_PLL_STAT) #define PLL_CTRL_BIT_INIT_PLL 0 #define PLL_CTRL_MASK_INIT_PLL (1 << PLL_CTRL_BIT_INIT_PLL) #define PLL_CTRL_BIT_EN_PLL 1 #define PLL_CTRL_MASK_EN_PLL (1 << PLL_CTRL_BIT_EN_PLL) #define MIPI_CTRL_BIT_EN_MIPI 9 #define MIPI_CTRL_MASK_EN_MIPI (1 << MIPI_CTRL_BIT_EN_MIPI) #define OFIFO_CTRL_BIT_SENS_OUT 7 #define OFIFO_CTRL_MASK_SENS_OUT (1 << OFIFO_CTRL_BIT_SENS_OUT) #define MT9V113_MCU_VAR_ADDR 0x098c #define MT9V113_MCU_VAR_DATA0 0x0990 #define MT9V113_MCU_VAR_DATA1 0x0992 #define MT9V113_MCU_VAR_DATA2 0x0994 #define MT9V113_MCU_VAR_DATA3 0x0996 #define MT9V113_MCU_VAR_DATA4 0x0998 #define MT9V113_MCU_VAR_DATA5 0x099a #define MT9V113_MCU_VAR_DATA6 0x099c #define MT9V113_MCU_VAR_DATA7 0x099e #define MT9V113_VAR_SEQ_CMD 0xa103 #define SEQ_CMD_RUN 0x0 #define SEQ_CMD_REFRESH_MODE 0x0006 #define SEQ_CMD_REFRESH 0x0005 #define MT9V113_VAR_SEQ_STATE 0xa104 /* current integration time access */ #define MT9V113_VAR_INTEGRATION_TIME 0x2222 /* current virt_gain and d_gain access */ #define MT9V113_VAR_AE_GAIN 0xa21c #define MT9V113_VAR_AE_D_GAIN 0x221f #define MT9V113_VAR_AE_MAX_INDEX 0xa20c #define MT9V113_AE_MAX_INDEX_0 0x0003 #define MT9V113_AE_MAX_INDEX_1 0x000e /* #defines for register writes and register array processing */ #define MISENSOR_8BIT 1 #define MISENSOR_16BIT 2 #define MISENSOR_32BIT 4 #define MISENSOR_TOK_TERM 0xf000 /* terminating token for reg list */ #define MISENSOR_TOK_DELAY 0xfe00 /* delay token for reg list */ #define MISENSOR_TOK_FWLOAD 0xfd00 /* token indicating load FW */ #define MISENSOR_TOK_POLL 0xfc00 /* token indicating poll instruction */ #define MISENSOR_TOK_RMW 0x0010 /* RMW operation */ #define MISENSOR_TOK_MASK 0xfff0 #define MISENSOR_AWB_STEADY (1<<0) /* awb steady */ #define MISENSOR_AE_READY (1<<3) /* ae status ready */ #define I2C_RETRY_COUNT 5 #define MSG_LEN_OFFSET 2 /* Supported resolutions */ enum { MT9V113_RES_QCIF, MT9V113_RES_QVGA, MT9V113_RES_CIF, MT9V113_RES_VGA, }; #define MT9V113_RES_VGA_SIZE_H 640 #define MT9V113_RES_VGA_SIZE_V 480 #define MT9V113_RES_CIF_SIZE_H 352 #define MT9V113_RES_CIF_SIZE_V 288 #define MT9V113_RES_QVGA_SIZE_H 320 #define MT9V113_RES_QVGA_SIZE_V 240 #define MT9V113_RES_QCIF_SIZE_H 176 #define MT9V113_RES_QCIF_SIZE_V 144 /* completion status polling requirements, usage based on Aptina .INI Rev2 */ enum poll_reg { NO_POLLING, PRE_POLLING, POST_POLLING, }; /* * struct misensor_reg - MI sensor register format * @length: length of the register * @reg: 16-bit offset to register * @val: 8/16/32-bit register value * Define a structure for sensor register initialization values */ struct misensor_reg { u32 length; u32 reg; u32 val; /* value or for read/mod/write, AND mask */ u32 val2; /* optional; for rmw, OR mask */ }; struct regval_list { u16 reg_num; u8 value; }; struct mt9v113_device { struct v4l2_subdev sd; struct media_pad pad; struct v4l2_mbus_framefmt format; struct camera_sensor_platform_data *platform_data; int real_model_id; int run_mode; unsigned int res; }; struct mt9v113_format_struct { u8 *desc; u32 pixelformat; struct regval_list *regs; }; struct mt9v113_res_struct { u8 *desc; int res; int width; int height; int fps; int skip_frames; int row_time; bool used; struct regval_list *regs; }; struct mt9v113_control { struct v4l2_queryctrl qc; int (*query)(struct v4l2_subdev *sd, s32 *value); int (*tweak)(struct v4l2_subdev *sd, int value); }; #define MT9V113_MAX_WRITE_BUF_SIZE 32 struct mt9v113_write_buffer { u16 addr; u8 data[MT9V113_MAX_WRITE_BUF_SIZE]; }; struct mt9v113_write_ctrl { int index; struct mt9v113_write_buffer buffer; }; /* * Modes supported by the mt9v113 driver. * Please, keep them in ascending order. */ static struct mt9v113_res_struct mt9v113_res[] = { { .desc = "QCIF", .res = MT9V113_RES_QCIF, .width = 176, .height = 144, .fps = 30, .used = 0, .regs = NULL, .skip_frames = 1, .row_time = 62, }, { .desc = "QVGA", .res = MT9V113_RES_QVGA, .width = 320, .height = 240, .fps = 30, .used = 0, .regs = NULL, .skip_frames = 1, .row_time = 62, }, { .desc = "CIF", .res = MT9V113_RES_CIF, .width = 352, .height = 288, .fps = 30, .used = 0, .regs = NULL, .skip_frames = 1, .row_time = 62, }, { .desc = "VGA", .res = MT9V113_RES_VGA, .width = 640, .height = 480, .fps = 30, .used = 0, .regs = NULL, .skip_frames = 1, .row_time = 62, }, }; #define N_RES (ARRAY_SIZE(mt9v113_res)) static const struct i2c_device_id mt9v113_id[] = { {"mt9v113", 0}, {} }; /* * TBD * Optimize for two context config * Sensor pixel clock: 14MHZ * Row Time: 62.286 / 872 clocks * hblank time: (853-648) * ( 1 / 14E6) = 14.6uS * vblank time: (547 - 488) * (853 / 14E6 ) = 3.59mS * frame time: 516 * (853 / 14E6) = 33.3mS */ static struct misensor_reg const mt9v113_qcif_init[] = { {MISENSOR_16BIT, 0x98c, 0x2703},/*Output Width (a)*/ {MISENSOR_16BIT, 0x990, 0x00b0},/* = 176*/ {MISENSOR_16BIT, 0x98c, 0x2705},/*Output Height (a)*/ {MISENSOR_16BIT, 0x990, 0x0090},/* = 144*/ {MISENSOR_16BIT, 0x98c, 0x2707},/*Output Width (b)*/ {MISENSOR_16BIT, 0x990, 0x0280},/* = 640*/ {MISENSOR_16BIT, 0x98c, 0x2709},/*Output Height (b)*/ {MISENSOR_16BIT, 0x990, 0x01e0},/* = 480*/ {MISENSOR_16BIT, 0x98c, 0x270d},/*Row Start (a)*/ {MISENSOR_16BIT, 0x990, 0x000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x270f},/*column Start (a)*/ {MISENSOR_16BIT, 0x990, 0x000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x2711},/*Row end (a)*/ {MISENSOR_16BIT, 0x990, 0x1e7},/* = 487*/ {MISENSOR_16BIT, 0x98c, 0x2713},/*column end (a)*/ {MISENSOR_16BIT, 0x990, 0x287},/* = 647*/ {MISENSOR_16BIT, 0x98c, 0x2715},/*Row Speed (a)*/ {MISENSOR_16BIT, 0x990, 0x0001},/* = 1*/ {MISENSOR_16BIT, 0x98c, 0x2717},/*Read Mode (a)*/ {MISENSOR_16BIT, 0x990, 0x0026},/* = 38*/ {MISENSOR_16BIT, 0x98c, 0x2719},/*sensor_fine_correction (a)*/ {MISENSOR_16BIT, 0x990, 0x001a},/* = 26*/ {MISENSOR_16BIT, 0x98c, 0x271b},/*sensor_fine_IT_min (a)*/ {MISENSOR_16BIT, 0x990, 0x006b},/* = 107*/ {MISENSOR_16BIT, 0x98c, 0x271d},/*sensor_fine_IT_max_margin (a)*/ {MISENSOR_16BIT, 0x990, 0x006b},/* = 107*/ {MISENSOR_16BIT, 0x98c, 0x271f},/*frame Lines (a)*/ {MISENSOR_16BIT, 0x990, 0x0223},/* = 547*/ {MISENSOR_16BIT, 0x98c, 0x2721},/*Line Length (a)*/ {MISENSOR_16BIT, 0x990, 0x0355},/* = 853*/ {MISENSOR_16BIT, 0x98c, 0x2723},/*Row Start (b)*/ {MISENSOR_16BIT, 0x990, 0x000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x2725},/*column Start (b)*/ {MISENSOR_16BIT, 0x990, 0x000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x2727},/*Row end (b)*/ {MISENSOR_16BIT, 0x990, 0x1e7},/* = 487*/ {MISENSOR_16BIT, 0x98c, 0x2729},/*column end (b)*/ {MISENSOR_16BIT, 0x990, 0x287},/* = 647*/ {MISENSOR_16BIT, 0x98c, 0x272b},/*Row Speed (b)*/ {MISENSOR_16BIT, 0x990, 0x0001},/* = 1*/ {MISENSOR_16BIT, 0x98c, 0x272d},/*Read Mode (b)*/ {MISENSOR_16BIT, 0x990, 0x0026},/* = 38*/ {MISENSOR_16BIT, 0x98c, 0x272f},/*sensor_fine_correction (b)*/ {MISENSOR_16BIT, 0x990, 0x001a},/* = 26*/ {MISENSOR_16BIT, 0x98c, 0x2731},/*sensor_fine_IT_min (b)*/ {MISENSOR_16BIT, 0x990, 0x006b},/* = 107*/ {MISENSOR_16BIT, 0x98c, 0x2733},/*sensor_fine_IT_max_margin (b)*/ {MISENSOR_16BIT, 0x990, 0x006b},/* = 107*/ {MISENSOR_16BIT, 0x98c, 0x2735},/*frame Lines (b)*/ {MISENSOR_16BIT, 0x990, 0x0204},/* = 516*/ {MISENSOR_16BIT, 0x98c, 0x2737},/*Line Length (b)*/ {MISENSOR_16BIT, 0x990, 0x0354},/* = 852*/ {MISENSOR_16BIT, 0x98c, 0x2739},/*crop_X0 (a)*/ {MISENSOR_16BIT, 0x990, 0x0000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x273b},/*crop_X1 (a)*/ {MISENSOR_16BIT, 0x990, 0x027f},/* = 639*/ {MISENSOR_16BIT, 0x98c, 0x273d},/*crop_Y0 (a)*/ {MISENSOR_16BIT, 0x990, 0x0000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x273f},/*crop_Y1 (a)*/ {MISENSOR_16BIT, 0x990, 0x01df},/* = 479*/ {MISENSOR_16BIT, 0x98c, 0x2747},/*crop_X0 (b)*/ {MISENSOR_16BIT, 0x990, 0x0000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x2749},/*crop_X1 (b)*/ {MISENSOR_16BIT, 0x990, 0x027f},/* = 639*/ {MISENSOR_16BIT, 0x98c, 0x274b},/*crop_Y0 (b)*/ {MISENSOR_16BIT, 0x990, 0x0000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x274d},/*crop_Y1 (b)*/ {MISENSOR_16BIT, 0x990, 0x01df},/* = 479*/ {MISENSOR_16BIT, 0x98c, 0x222d},/*R9 Step*/ {MISENSOR_16BIT, 0x990, 0x0089},/* = 137*/ {MISENSOR_16BIT, 0x98c, 0xa408},/*search_f1_50*/ {MISENSOR_16BIT, 0x990, 0x21},/* = 33*/ {MISENSOR_16BIT, 0x98c, 0xa409},/*search_f2_50*/ {MISENSOR_16BIT, 0x990, 0x23},/* = 35*/ {MISENSOR_16BIT, 0x98c, 0xa40a},/*search_f1_60*/ {MISENSOR_16BIT, 0x990, 0x28},/* = 40*/ {MISENSOR_16BIT, 0x98c, 0xa40b},/*search_f2_60*/ {MISENSOR_16BIT, 0x990, 0x2a},/* = 42*/ {MISENSOR_16BIT, 0x98c, 0x2411},/*R9_Step_60 (a)*/ {MISENSOR_16BIT, 0x990, 0x0089},/* = 137*/ {MISENSOR_16BIT, 0x98c, 0x2413},/*R9_Step_50 (a)*/ {MISENSOR_16BIT, 0x990, 0x00a4},/* = 164*/ {MISENSOR_16BIT, 0x98c, 0x2415},/*R9_Step_60 (b)*/ {MISENSOR_16BIT, 0x990, 0x008b},/* = 139*/ {MISENSOR_16BIT, 0x98c, 0x2417},/*R9_Step_50 (b)*/ {MISENSOR_16BIT, 0x990, 0x00a6},/* = 166*/ {MISENSOR_16BIT, 0x98c, 0xa404},/*fd Mode*/ {MISENSOR_16BIT, 0x990, 0x10},/* = 16*/ {MISENSOR_16BIT, 0x98c, 0xa40d},/*Stat_min*/ {MISENSOR_16BIT, 0x990, 0x02},/* = 2*/ {MISENSOR_16BIT, 0x98c, 0xa40e},/*Stat_max*/ {MISENSOR_16BIT, 0x990, 0x03},/* = 3*/ {MISENSOR_16BIT, 0x98c, 0xa410},/*Min_amplitude*/ {MISENSOR_16BIT, 0x990, 0x0a},/* = 10*/ {MISENSOR_TOK_TERM, 0, 0} }; /* * TBD * Optimize for two context config * * Sensor pixel clock: 14MHZ * Row Time: 62.286 / 872 clocks * hblank time: (853-648) * ( 1 / 14E6) = 14.6uS * vblank time: (547 - 488) * (853 / 14E6 ) = 3.59mS * frame time: 516 * (853 / 14E6) = 33.3mS */ static struct misensor_reg const mt9v113_cif_init[] = { {MISENSOR_16BIT, 0x98c, 0x2703},/*Output Width (a)*/ {MISENSOR_16BIT, 0x990, 0x0160},/* = 352*/ {MISENSOR_16BIT, 0x98c, 0x2705},/*Output Height (a)*/ {MISENSOR_16BIT, 0x990, 0x0120},/* = 288*/ {MISENSOR_16BIT, 0x98c, 0x2707},/*Output Width (b)*/ {MISENSOR_16BIT, 0x990, 0x0280},/* = 640*/ {MISENSOR_16BIT, 0x98c, 0x2709},/*Output Height (b)*/ {MISENSOR_16BIT, 0x990, 0x01e0},/* = 480*/ {MISENSOR_16BIT, 0x98c, 0x270d},/*Row Start (a)*/ {MISENSOR_16BIT, 0x990, 0x000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x270f},/*column Start (a)*/ {MISENSOR_16BIT, 0x990, 0x000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x2711},/*Row end (a)*/ {MISENSOR_16BIT, 0x990, 0x1e7},/* = 487*/ {MISENSOR_16BIT, 0x98c, 0x2713},/*column end (a)*/ {MISENSOR_16BIT, 0x990, 0x287},/* = 647*/ {MISENSOR_16BIT, 0x98c, 0x2715},/*Row Speed (a)*/ {MISENSOR_16BIT, 0x990, 0x0001},/* = 1*/ {MISENSOR_16BIT, 0x98c, 0x2717},/*Read Mode (a)*/ {MISENSOR_16BIT, 0x990, 0x0026},/* = 38*/ {MISENSOR_16BIT, 0x98c, 0x2719},/*sensor_fine_correction (a)*/ {MISENSOR_16BIT, 0x990, 0x001a},/* = 26*/ {MISENSOR_16BIT, 0x98c, 0x271b},/*sensor_fine_IT_min (a)*/ {MISENSOR_16BIT, 0x990, 0x006b},/* = 107*/ {MISENSOR_16BIT, 0x98c, 0x271d},/*sensor_fine_IT_max_margin (a)*/ {MISENSOR_16BIT, 0x990, 0x006b},/* = 107*/ {MISENSOR_16BIT, 0x98c, 0x271f},/*frame Lines (a)*/ {MISENSOR_16BIT, 0x990, 0x0223},/* = 547*/ {MISENSOR_16BIT, 0x98c, 0x2721},/*Line Length (a)*/ {MISENSOR_16BIT, 0x990, 0x0355},/* = 853*/ {MISENSOR_16BIT, 0x98c, 0x2723},/*Row Start (b)*/ {MISENSOR_16BIT, 0x990, 0x000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x2725},/*column Start (b)*/ {MISENSOR_16BIT, 0x990, 0x000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x2727},/*Row end (b)*/ {MISENSOR_16BIT, 0x990, 0x1e7},/* = 487*/ {MISENSOR_16BIT, 0x98c, 0x2729},/*column end (b)*/ {MISENSOR_16BIT, 0x990, 0x287},/* = 647*/ {MISENSOR_16BIT, 0x98c, 0x272b},/*Row Speed (b)*/ {MISENSOR_16BIT, 0x990, 0x0001},/* = 1*/ {MISENSOR_16BIT, 0x98c, 0x272d},/*Read Mode (b)*/ {MISENSOR_16BIT, 0x990, 0x0026},/* = 38*/ {MISENSOR_16BIT, 0x98c, 0x272f},/*sensor_fine_correction (b)*/ {MISENSOR_16BIT, 0x990, 0x001a},/* = 26*/ {MISENSOR_16BIT, 0x98c, 0x2731},/*sensor_fine_IT_min (b)*/ {MISENSOR_16BIT, 0x990, 0x006b},/* = 107*/ {MISENSOR_16BIT, 0x98c, 0x2733},/*sensor_fine_IT_max_margin (b)*/ {MISENSOR_16BIT, 0x990, 0x006b},/* = 107*/ {MISENSOR_16BIT, 0x98c, 0x2735},/*frame Lines (b)*/ {MISENSOR_16BIT, 0x990, 0x0204},/* = 516*/ {MISENSOR_16BIT, 0x98c, 0x2737},/*Line Length (b)*/ {MISENSOR_16BIT, 0x990, 0x0354},/* = 852*/ {MISENSOR_16BIT, 0x98c, 0x2739},/*crop_X0 (a)*/ {MISENSOR_16BIT, 0x990, 0x0000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x273b},/*crop_X1 (a)*/ {MISENSOR_16BIT, 0x990, 0x027f},/* = 639*/ {MISENSOR_16BIT, 0x98c, 0x273d},/*crop_Y0 (a)*/ {MISENSOR_16BIT, 0x990, 0x0000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x273f},/*crop_Y1 (a)*/ {MISENSOR_16BIT, 0x990, 0x01df},/* = 479*/ {MISENSOR_16BIT, 0x98c, 0x2747},/*crop_X0 (b)*/ {MISENSOR_16BIT, 0x990, 0x0000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x2749},/*crop_X1 (b)*/ {MISENSOR_16BIT, 0x990, 0x027f},/* = 639*/ {MISENSOR_16BIT, 0x98c, 0x274b},/*crop_Y0 (b)*/ {MISENSOR_16BIT, 0x990, 0x0000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x274d},/*crop_Y1 (b)*/ {MISENSOR_16BIT, 0x990, 0x01df},/* = 479*/ {MISENSOR_16BIT, 0x98c, 0x222d},/*R9 Step*/ {MISENSOR_16BIT, 0x990, 0x0089},/* = 137*/ {MISENSOR_16BIT, 0x98c, 0xa408},/*search_f1_50*/ {MISENSOR_16BIT, 0x990, 0x21},/* = 33*/ {MISENSOR_16BIT, 0x98c, 0xa409},/*search_f2_50*/ {MISENSOR_16BIT, 0x990, 0x23},/* = 35*/ {MISENSOR_16BIT, 0x98c, 0xa40a},/*search_f1_60*/ {MISENSOR_16BIT, 0x990, 0x28},/* = 40*/ {MISENSOR_16BIT, 0x98c, 0xa40b},/*search_f2_60*/ {MISENSOR_16BIT, 0x990, 0x2a},/* = 42*/ {MISENSOR_16BIT, 0x98c, 0x2411},/*R9_Step_60 (a)*/ {MISENSOR_16BIT, 0x990, 0x0089},/* = 137*/ {MISENSOR_16BIT, 0x98c, 0x2413},/*R9_Step_50 (a)*/ {MISENSOR_16BIT, 0x990, 0x00a4},/* = 164*/ {MISENSOR_16BIT, 0x98c, 0x2415},/*R9_Step_60 (b)*/ {MISENSOR_16BIT, 0x990, 0x008b},/* = 139*/ {MISENSOR_16BIT, 0x98c, 0x2417},/*R9_Step_50 (b)*/ {MISENSOR_16BIT, 0x990, 0x00a6},/* = 166*/ {MISENSOR_16BIT, 0x98c, 0xa404},/*fd Mode*/ {MISENSOR_16BIT, 0x990, 0x10},/* = 16*/ {MISENSOR_16BIT, 0x98c, 0xa40d},/*Stat_min*/ {MISENSOR_16BIT, 0x990, 0x02},/* = 2*/ {MISENSOR_16BIT, 0x98c, 0xa40e},/*Stat_max*/ {MISENSOR_16BIT, 0x990, 0x03},/* = 3*/ {MISENSOR_16BIT, 0x98c, 0xa410},/*Min_amplitude*/ {MISENSOR_16BIT, 0x990, 0x0a},/* = 10*/ {MISENSOR_TOK_TERM, 0, 0} }; /* * TBD * Optimize for two context config * Sensor pixel clock: 14MHZ * Row Time: 62.286 / 872 clocks * hblank time: (853-648) * ( 1 / 14E6) = 14.6uS * vblank time: (547 - 488) * (853 / 14E6 ) = 3.59mS * frame time: 516 * (853 / 14E6) = 33.3mS */ static struct misensor_reg const mt9v113_qvga_init[] = { {MISENSOR_16BIT, 0x98c, 0x2703},/*Output Width (a)*/ {MISENSOR_16BIT, 0x990, 0x0140},/* = 320*/ {MISENSOR_16BIT, 0x98c, 0x2705},/*Output Height (a)*/ {MISENSOR_16BIT, 0x990, 0x00f0},/* = 240*/ {MISENSOR_16BIT, 0x98c, 0x2707},/*Output Width (b)*/ {MISENSOR_16BIT, 0x990, 0x0280},/* = 640*/ {MISENSOR_16BIT, 0x98c, 0x2709},/*Output Height (b)*/ {MISENSOR_16BIT, 0x990, 0x01e0},/* = 480*/ {MISENSOR_16BIT, 0x98c, 0x270d},/*Row Start (a)*/ {MISENSOR_16BIT, 0x990, 0x000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x270f},/*column Start (a)*/ {MISENSOR_16BIT, 0x990, 0x000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x2711},/*Row end (a)*/ {MISENSOR_16BIT, 0x990, 0x1e7},/* = 487*/ {MISENSOR_16BIT, 0x98c, 0x2713},/*column end (a)*/ {MISENSOR_16BIT, 0x990, 0x287},/* = 647*/ {MISENSOR_16BIT, 0x98c, 0x2715},/*Row Speed (a)*/ {MISENSOR_16BIT, 0x990, 0x0001},/* = 1*/ {MISENSOR_16BIT, 0x98c, 0x2717},/*Read Mode (a)*/ {MISENSOR_16BIT, 0x990, 0x0026},/* = 38*/ {MISENSOR_16BIT, 0x98c, 0x2719},/*sensor_fine_correction (a)*/ {MISENSOR_16BIT, 0x990, 0x001a},/* = 26*/ {MISENSOR_16BIT, 0x98c, 0x271b},/*sensor_fine_IT_min (a)*/ {MISENSOR_16BIT, 0x990, 0x006b},/* = 107*/ {MISENSOR_16BIT, 0x98c, 0x271d},/*sensor_fine_IT_max_margin (a)*/ {MISENSOR_16BIT, 0x990, 0x006b},/* = 107*/ {MISENSOR_16BIT, 0x98c, 0x271f},/*frame Lines (a)*/ {MISENSOR_16BIT, 0x990, 0x0223},/* = 547*/ {MISENSOR_16BIT, 0x98c, 0x2721},/*Line Length (a)*/ {MISENSOR_16BIT, 0x990, 0x0355},/* = 853*/ {MISENSOR_16BIT, 0x98c, 0x2723},/*Row Start (b)*/ {MISENSOR_16BIT, 0x990, 0x000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x2725},/*column Start (b)*/ {MISENSOR_16BIT, 0x990, 0x000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x2727},/*Row end (b)*/ {MISENSOR_16BIT, 0x990, 0x1e7},/* = 487*/ {MISENSOR_16BIT, 0x98c, 0x2729},/*column end (b)*/ {MISENSOR_16BIT, 0x990, 0x287},/* = 647*/ {MISENSOR_16BIT, 0x98c, 0x272b},/*Row Speed (b)*/ {MISENSOR_16BIT, 0x990, 0x0001},/* = 1*/ {MISENSOR_16BIT, 0x98c, 0x272d},/*Read Mode (b)*/ {MISENSOR_16BIT, 0x990, 0x0026},/* = 38*/ {MISENSOR_16BIT, 0x98c, 0x272f},/*sensor_fine_correction (b)*/ {MISENSOR_16BIT, 0x990, 0x001a},/* = 26*/ {MISENSOR_16BIT, 0x98c, 0x2731},/*sensor_fine_IT_min (b)*/ {MISENSOR_16BIT, 0x990, 0x006b},/* = 107*/ {MISENSOR_16BIT, 0x98c, 0x2733},/*sensor_fine_IT_max_margin (b)*/ {MISENSOR_16BIT, 0x990, 0x006b},/* = 107*/ {MISENSOR_16BIT, 0x98c, 0x2735},/*frame Lines (b)*/ {MISENSOR_16BIT, 0x990, 0x0204},/* = 516*/ {MISENSOR_16BIT, 0x98c, 0x2737},/*Line Length (b)*/ {MISENSOR_16BIT, 0x990, 0x0354},/* = 852*/ {MISENSOR_16BIT, 0x98c, 0x2739},/*crop_X0 (a)*/ {MISENSOR_16BIT, 0x990, 0x0000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x273b},/*crop_X1 (a)*/ {MISENSOR_16BIT, 0x990, 0x027f},/* = 639*/ {MISENSOR_16BIT, 0x98c, 0x273d},/*crop_Y0 (a)*/ {MISENSOR_16BIT, 0x990, 0x0000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x273f},/*crop_Y1 (a)*/ {MISENSOR_16BIT, 0x990, 0x01df},/* = 479*/ {MISENSOR_16BIT, 0x98c, 0x2747},/*crop_X0 (b)*/ {MISENSOR_16BIT, 0x990, 0x0000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x2749},/*crop_X1 (b)*/ {MISENSOR_16BIT, 0x990, 0x027f},/* = 639*/ {MISENSOR_16BIT, 0x98c, 0x274b},/*crop_Y0 (b)*/ {MISENSOR_16BIT, 0x990, 0x0000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x274d},/*crop_Y1 (b)*/ {MISENSOR_16BIT, 0x990, 0x01df},/* = 479*/ {MISENSOR_16BIT, 0x98c, 0x222d},/*R9 Step*/ {MISENSOR_16BIT, 0x990, 0x0089},/* = 137*/ {MISENSOR_16BIT, 0x98c, 0xa408},/*search_f1_50*/ {MISENSOR_16BIT, 0x990, 0x21},/* = 33*/ {MISENSOR_16BIT, 0x98c, 0xa409},/*search_f2_50*/ {MISENSOR_16BIT, 0x990, 0x23},/* = 35*/ {MISENSOR_16BIT, 0x98c, 0xa40a},/*search_f1_60*/ {MISENSOR_16BIT, 0x990, 0x28},/* = 40*/ {MISENSOR_16BIT, 0x98c, 0xa40b},/*search_f2_60*/ {MISENSOR_16BIT, 0x990, 0x2a},/* = 42*/ {MISENSOR_16BIT, 0x98c, 0x2411},/*R9_Step_60 (a)*/ {MISENSOR_16BIT, 0x990, 0x0089},/* = 137*/ {MISENSOR_16BIT, 0x98c, 0x2413},/*R9_Step_50 (a)*/ {MISENSOR_16BIT, 0x990, 0x00a4},/* = 164*/ {MISENSOR_16BIT, 0x98c, 0x2415},/*R9_Step_60 (b)*/ {MISENSOR_16BIT, 0x990, 0x008b},/* = 139*/ {MISENSOR_16BIT, 0x98c, 0x2417},/*R9_Step_50 (b)*/ {MISENSOR_16BIT, 0x990, 0x00a6},/* = 166*/ {MISENSOR_16BIT, 0x98c, 0xa404},/*fd Mode*/ {MISENSOR_16BIT, 0x990, 0x10},/* = 16*/ {MISENSOR_16BIT, 0x98c, 0xa40d},/*Stat_min*/ {MISENSOR_16BIT, 0x990, 0x02},/* = 2*/ {MISENSOR_16BIT, 0x98c, 0xa40e},/*Stat_max*/ {MISENSOR_16BIT, 0x990, 0x03},/* = 3*/ {MISENSOR_16BIT, 0x98c, 0xa410},/*Min_amplitude*/ {MISENSOR_16BIT, 0x990, 0x0a},/* = 10*/ {MISENSOR_TOK_TERM, 0, 0} }; /* * TBD * Optimize for two context config * * Sensor pixel clock: 14MHZ * Row Time: 62.286 / 872 clocks * hblank time: (853-648) * ( 1 / 14E6) = 14.6uS * vblank time: (547 - 488) * (853 / 14E6 ) = 3.59mS * frame time: 516 * (853 / 14E6) = 33.3mS */ static struct misensor_reg const mt9v113_vga_init[] = { {MISENSOR_16BIT, 0x98c, 0x2703},/*Output Width (a)*/ {MISENSOR_16BIT, 0x990, 0x0280},/* = 640*/ {MISENSOR_16BIT, 0x98c, 0x2705},/*Output Height (a)*/ {MISENSOR_16BIT, 0x990, 0x01e0},/* = 480*/ {MISENSOR_16BIT, 0x98c, 0x2707},/*Output Width (b)*/ {MISENSOR_16BIT, 0x990, 0x0280},/* = 640*/ {MISENSOR_16BIT, 0x98c, 0x2709},/*Output Height (b)*/ {MISENSOR_16BIT, 0x990, 0x01e0},/* = 480*/ {MISENSOR_16BIT, 0x98c, 0x270d},/*Row Start (a)*/ {MISENSOR_16BIT, 0x990, 0x000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x270f},/*column Start (a)*/ {MISENSOR_16BIT, 0x990, 0x000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x2711},/*Row end (a)*/ {MISENSOR_16BIT, 0x990, 0x1e7},/* = 487*/ {MISENSOR_16BIT, 0x98c, 0x2713},/*column end (a)*/ {MISENSOR_16BIT, 0x990, 0x287},/* = 647*/ {MISENSOR_16BIT, 0x98c, 0x2715},/*Row Speed (a)*/ {MISENSOR_16BIT, 0x990, 0x0001},/* = 1*/ {MISENSOR_16BIT, 0x98c, 0x2717},/*Read Mode (a)*/ {MISENSOR_16BIT, 0x990, 0x0026},/* = 38*/ {MISENSOR_16BIT, 0x98c, 0x2719},/*sensor_fine_correction (a)*/ {MISENSOR_16BIT, 0x990, 0x001a},/* = 26*/ {MISENSOR_16BIT, 0x98c, 0x271b},/*sensor_fine_IT_min (a)*/ {MISENSOR_16BIT, 0x990, 0x006b},/* = 107*/ {MISENSOR_16BIT, 0x98c, 0x271d},/*sensor_fine_IT_max_margin (a)*/ {MISENSOR_16BIT, 0x990, 0x006b},/* = 107*/ {MISENSOR_16BIT, 0x98c, 0x271f},/*frame Lines (a)*/ {MISENSOR_16BIT, 0x990, 0x0223},/* = 547*/ {MISENSOR_16BIT, 0x98c, 0x2721},/*Line Length (a)*/ {MISENSOR_16BIT, 0x990, 0x0355},/* = 853*/ {MISENSOR_16BIT, 0x98c, 0x2723},/*Row Start (b)*/ {MISENSOR_16BIT, 0x990, 0x000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x2725},/*column Start (b)*/ {MISENSOR_16BIT, 0x990, 0x000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x2727},/*Row end (b)*/ {MISENSOR_16BIT, 0x990, 0x1e7},/* = 487*/ {MISENSOR_16BIT, 0x98c, 0x2729},/*column end (b)*/ {MISENSOR_16BIT, 0x990, 0x287},/* = 647*/ {MISENSOR_16BIT, 0x98c, 0x272b},/*Row Speed (b)*/ {MISENSOR_16BIT, 0x990, 0x0001},/* = 1*/ {MISENSOR_16BIT, 0x98c, 0x272d},/*Read Mode (b)*/ {MISENSOR_16BIT, 0x990, 0x0026},/* = 38*/ {MISENSOR_16BIT, 0x98c, 0x272f},/*sensor_fine_correction (b)*/ {MISENSOR_16BIT, 0x990, 0x001a},/* = 26*/ {MISENSOR_16BIT, 0x98c, 0x2731},/*sensor_fine_IT_min (b)*/ {MISENSOR_16BIT, 0x990, 0x006b},/* = 107*/ {MISENSOR_16BIT, 0x98c, 0x2733},/*sensor_fine_IT_max_margin (b)*/ {MISENSOR_16BIT, 0x990, 0x006b},/* = 107*/ {MISENSOR_16BIT, 0x98c, 0x2735},/*frame Lines (b)*/ {MISENSOR_16BIT, 0x990, 0x0204},/* = 516*/ {MISENSOR_16BIT, 0x98c, 0x2737},/*Line Length (b)*/ {MISENSOR_16BIT, 0x990, 0x0354},/* = 852*/ {MISENSOR_16BIT, 0x98c, 0x2739},/*crop_X0 (a)*/ {MISENSOR_16BIT, 0x990, 0x0000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x273b},/*crop_X1 (a)*/ {MISENSOR_16BIT, 0x990, 0x027f},/* = 639*/ {MISENSOR_16BIT, 0x98c, 0x273d},/*crop_Y0 (a)*/ {MISENSOR_16BIT, 0x990, 0x0000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x273f},/*crop_Y1 (a)*/ {MISENSOR_16BIT, 0x990, 0x01df},/* = 479*/ {MISENSOR_16BIT, 0x98c, 0x2747},/*crop_X0 (b)*/ {MISENSOR_16BIT, 0x990, 0x0000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x2749},/*crop_X1 (b)*/ {MISENSOR_16BIT, 0x990, 0x027f},/* = 639*/ {MISENSOR_16BIT, 0x98c, 0x274b},/*crop_Y0 (b)*/ {MISENSOR_16BIT, 0x990, 0x0000},/* = 0*/ {MISENSOR_16BIT, 0x98c, 0x274d},/*crop_Y1 (b)*/ {MISENSOR_16BIT, 0x990, 0x01df},/* = 479*/ {MISENSOR_16BIT, 0x98c, 0x222d},/*R9 Step*/ {MISENSOR_16BIT, 0x990, 0x0089},/* = 137*/ {MISENSOR_16BIT, 0x98c, 0xa408},/*search_f1_50*/ {MISENSOR_16BIT, 0x990, 0x21},/* = 33*/ {MISENSOR_16BIT, 0x98c, 0xa409},/*search_f2_50*/ {MISENSOR_16BIT, 0x990, 0x23},/* = 35*/ {MISENSOR_16BIT, 0x98c, 0xa40a},/*search_f1_60*/ {MISENSOR_16BIT, 0x990, 0x28},/* = 40*/ {MISENSOR_16BIT, 0x98c, 0xa40b},/*search_f2_60*/ {MISENSOR_16BIT, 0x990, 0x2a},/* = 42*/ {MISENSOR_16BIT, 0x98c, 0x2411},/*R9_Step_60 (a)*/ {MISENSOR_16BIT, 0x990, 0x0089},/* = 137*/ {MISENSOR_16BIT, 0x98c, 0x2413},/*R9_Step_50 (a)*/ {MISENSOR_16BIT, 0x990, 0x00a4},/* = 164*/ {MISENSOR_16BIT, 0x98c, 0x2415},/*R9_Step_60 (b)*/ {MISENSOR_16BIT, 0x990, 0x008b},/* = 139*/ {MISENSOR_16BIT, 0x98c, 0x2417},/*R9_Step_50 (b)*/ {MISENSOR_16BIT, 0x990, 0x00a6},/* = 166*/ {MISENSOR_16BIT, 0x98c, 0xa404},/*fd Mode*/ {MISENSOR_16BIT, 0x990, 0x10},/* = 16*/ {MISENSOR_16BIT, 0x98c, 0xa40d},/*Stat_min*/ {MISENSOR_16BIT, 0x990, 0x02},/* = 2*/ {MISENSOR_16BIT, 0x98c, 0xa40e},/*Stat_max*/ {MISENSOR_16BIT, 0x990, 0x03},/* = 3*/ {MISENSOR_16BIT, 0x98c, 0xa410},/*Min_amplitude*/ {MISENSOR_16BIT, 0x990, 0x0a},/* = 10*/ {MISENSOR_TOK_TERM, 0, 0} }; /* * Soft Reset * 1: Set SYSCTL 0x001A[1:0] to 0x3 to initiate internal reset cycle. * 2: Wait 6000 EXTCLK cycles. * 3: Reset SYSCTL 0x001A[1:0] to 0x0 for normal operation. * * SYSCTL * 1: bit9=0: Parallel output port is disabled. * 2: bit8=0: Output is enabled (gpio ?) * 3: bit4=1: GPIO not remained power on in standby * 4: bit3=1: Reserved in DS, MIPI enabled ? */ static struct misensor_reg const mt9v113_reset[] = { {MISENSOR_16BIT, 0x001a, 0x0011}, {MISENSOR_TOK_DELAY, 0, 1}, {MISENSOR_16BIT, 0x001a, 0x0010}, {MISENSOR_TOK_DELAY, 0, 1}, /* wait for normal operation */ {MISENSOR_TOK_TERM, 0, 0} }; /* * Reduce IO Current */ static struct misensor_reg const mt9v113_reduce_current[] = { {MISENSOR_16BIT, 0x098c, 0x02f0}, /* MCU_ADDRESS*/ {MISENSOR_16BIT, 0x0990, 0x0000}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0x02f2}, /* MCU_ADDRESS*/ {MISENSOR_16BIT, 0x0990, 0x0210}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0x02f4}, /* MCU_ADDRESS*/ {MISENSOR_16BIT, 0x0990, 0x001a}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0x2145}, /* [SEQ_ADVSEQ_CALLLIST_5]*/ {MISENSOR_16BIT, 0x0990, 0x02f4}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0x2134}, /* [SEQ_ADVSEQ_STACKOPTIONS]*/ {MISENSOR_16BIT, 0x0990, 0x0001}, /* MCU_DATA_0*/ {MISENSOR_TOK_TERM, 0, 0} }; /* AWB_CCM initialization */ static struct misensor_reg const mt9v113_awb_ccm[] = { {MISENSOR_16BIT, 0x098c, 0x2306}, /* MCU_ADDRESS [aWb_ccM_L_0]*/ {MISENSOR_16BIT, 0x0990, 0x0313}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0x2308}, /* MCU_ADDRESS [aWb_ccM_L_1]*/ {MISENSOR_16BIT, 0x0990, 0xff07}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0x230a}, /* MCU_ADDRESS [aWb_ccM_L_2]*/ {MISENSOR_16BIT, 0x0990, 0xff39}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0x230c}, /* MCU_ADDRESS [aWb_ccM_L_3]*/ {MISENSOR_16BIT, 0x0990, 0xff33}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0x230e}, /* MCU_ADDRESS [aWb_ccM_L_4]*/ {MISENSOR_16BIT, 0x0990, 0x0369}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0x2310}, /* MCU_ADDRESS [aWb_ccM_L_5]*/ {MISENSOR_16BIT, 0x0990, 0xfed9}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0x2312}, /* MCU_ADDRESS [aWb_ccM_L_6]*/ {MISENSOR_16BIT, 0x0990, 0xff41}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0x2314}, /* MCU_ADDRESS [aWb_ccM_L_7]*/ {MISENSOR_16BIT, 0x0990, 0xfde3}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0x2316}, /* MCU_ADDRESS [aWb_ccM_L_8]*/ {MISENSOR_16BIT, 0x0990, 0x040e}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0x2318}, /* MCU_ADDRESS [aWb_ccM_L_9]*/ {MISENSOR_16BIT, 0x0990, 0x001c}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0x231a}, /* MCU_ADDRESS [aWb_ccM_L_10]*/ {MISENSOR_16BIT, 0x0990, 0x0039}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0x231c}, /* MCU_ADDRESS [aWb_ccM_RL_0]*/ {MISENSOR_16BIT, 0x0990, 0x0016}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0x231e}, /* MCU_ADDRESS [aWb_ccM_RL_1]*/ {MISENSOR_16BIT, 0x0990, 0xff1a}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0x2320}, /* MCU_ADDRESS [aWb_ccM_RL_2]*/ {MISENSOR_16BIT, 0x0990, 0x00a8}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0x2322}, /* MCU_ADDRESS [aWb_ccM_RL_3]*/ {MISENSOR_16BIT, 0x0990, 0x0065}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0x2324}, /* MCU_ADDRESS [aWb_ccM_RL_4]*/ {MISENSOR_16BIT, 0x0990, 0xff2d}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0x2326}, /* MCU_ADDRESS [aWb_ccM_RL_5]*/ {MISENSOR_16BIT, 0x0990, 0x0036}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0x2328}, /* MCU_ADDRESS [aWb_ccM_RL_6]*/ {MISENSOR_16BIT, 0x0990, 0x008b}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0x232a}, /* MCU_ADDRESS [aWb_ccM_RL_7]*/ {MISENSOR_16BIT, 0x0990, 0x014b}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0x232c}, /* MCU_ADDRESS [aWb_ccM_RL_8]*/ {MISENSOR_16BIT, 0x0990, 0xfe49}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0x232e}, /* MCU_ADDRESS [aWb_ccM_RL_9]*/ {MISENSOR_16BIT, 0x0990, 0x0001}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0x2330}, /* MCU_ADDRESS [aWb_ccM_RL_10]*/ {MISENSOR_16BIT, 0x0990, 0xffef}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0xa348}, /* [aWb_GaIN_bUffeR_SPeed]*/ {MISENSOR_16BIT, 0x0990, 0x0008}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0xa349}, /* MCU_ADDRESS [aWb_JUMP_dIVISOR]*/ {MISENSOR_16BIT, 0x0990, 0x0002}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0xa34a}, /* MCU_ADDRESS [aWb_GaIN_MIN]*/ {MISENSOR_16BIT, 0x0990, 0x0090}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0xa34b}, /* MCU_ADDRESS [aWb_GaIN_MaX]*/ {MISENSOR_16BIT, 0x0990, 0x00ff}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0xa34c}, /* MCU_ADDRESS [aWb_GaINMIN_b]*/ {MISENSOR_16BIT, 0x0990, 0x0075}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0xa34d}, /* MCU_ADDRESS [aWb_GaINMaX_b]*/ {MISENSOR_16BIT, 0x0990, 0x00ef}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0xa351}, /* [aWb_ccM_POSITION_MIN]*/ {MISENSOR_16BIT, 0x0990, 0x0000}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0xa352}, /* [aWb_ccM_POSITION_MaX]*/ {MISENSOR_16BIT, 0x0990, 0x007f}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0xa354}, /* MCU_ADDRESS [aWb_SaTURaTION]*/ {MISENSOR_16BIT, 0x0990, 0x0043}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0xa355}, /* MCU_ADDRESS [aWb_MOde]*/ {MISENSOR_16BIT, 0x0990, 0x0001}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0xa35d}, /* [aWb_STeadY_bGaIN_OUT_MIN]*/ {MISENSOR_16BIT, 0x0990, 0x0078}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0xa35e}, /* [aWb_STeadY_bGaIN_OUT_MaX]*/ {MISENSOR_16BIT, 0x0990, 0x0086}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0xa35f}, /* [aWb_STeadY_bGaIN_IN_MIN]*/ {MISENSOR_16BIT, 0x0990, 0x007e}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0xa360}, /* [aWb_STeadY_bGaIN_IN_MaX]*/ {MISENSOR_16BIT, 0x0990, 0x0082}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0x2361}, /* MCU_ADDRESS [aWb_cNT_PXL_TH]*/ {MISENSOR_16BIT, 0x0990, 0x0040}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0xa363}, /* MCU_ADDRESS [aWb_TG_MIN0]*/ {MISENSOR_16BIT, 0x0990, 0x00d2}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0xa364}, /* MCU_ADDRESS [aWb_TG_MaX0]*/ {MISENSOR_16BIT, 0x0990, 0x00f6}, /* MCU_DATA_0*/ /* AWB Adjust */ {MISENSOR_16BIT, 0x098c, 0xa369}, /* MCU_ADDRESS [aWb_KR_R] */ {MISENSOR_16BIT, 0x0990, 0x0082}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0xa36a}, /* MCU_ADDRESS [aWb_KG_R]*/ {MISENSOR_16BIT, 0x0990, 0x0082}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0xa36b}, /* MCU_ADDRESS [aWb_KB_R] */ {MISENSOR_16BIT, 0x0990, 0x0078}, /* MCU_DATA_0*/ /* AE */ {MISENSOR_16BIT, 0x098c, 0xa24f}, /* MCU_ADDRESS [AE_BASETARGET] */ {MISENSOR_16BIT, 0x0990, 0x0038}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0xa302}, /* MCU_ADDRESS [aWb_WINdOW_POS]*/ {MISENSOR_16BIT, 0x0990, 0x0000}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0xa303}, /* MCU_ADDRESS [aWb_WINdOW_SIZe]*/ {MISENSOR_16BIT, 0x0990, 0x00ef}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0xab20}, /* MCU_ADDRESS [HG_LL_SaT1]*/ {MISENSOR_16BIT, 0x0990, 0x0024}, /* MCU_DATA_0*/ /*force aWb Setting for fW bootup*/ {MISENSOR_16BIT, 0x098c, 0xa353}, /* MCU_ADDRESS [aWb_ccM_POSITION]*/ {MISENSOR_16BIT, 0x0990, 0x0063}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0xa34e}, /* MCU_ADDRESS [aWb_GaIN_R]*/ {MISENSOR_16BIT, 0x0990, 0x00fd}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0xa34f}, /* MCU_ADDRESS [aWb_GaIN_G]*/ {MISENSOR_16BIT, 0x0990, 0x0080}, /* MCU_DATA_0*/ {MISENSOR_16BIT, 0x098c, 0xa350}, /* MCU_ADDRESS [aWb_GaIN_b]*/ {MISENSOR_16BIT, 0x0990, 0x007d}, /* MCU_DATA_0*/ {MISENSOR_TOK_TERM, 0, 0} }; /* CPIPE_Calibration */ static struct misensor_reg const mt9v113_cpipe_calibration[] = { {MISENSOR_16BIT, 0x098c, 0x274f}, /*MOde_dec_cTRL_b*/ {MISENSOR_16BIT, 0x0990, 0x0004}, {MISENSOR_16BIT, 0x098c, 0x2741}, /*MOde_dec_cTRL_a*/ {MISENSOR_16BIT, 0x0990, 0x0004}, {MISENSOR_16BIT, 0x098c, 0x275f}, /*MOde_cOMMONMOde*/ {MISENSOR_16BIT, 0x0990, 0x0594}, {MISENSOR_16BIT, 0x098c, 0x2761}, /*MOde_cOMMONMOde*/ {MISENSOR_16BIT, 0x0990, 0x0094}, {MISENSOR_TOK_TERM, 0, 0}, }; static struct misensor_reg const mt9v113_cpipe_perference[] = { {MISENSOR_16BIT, 0x098c, 0xab1f}, /*HG_LLMOde*/ {MISENSOR_16BIT, 0x0990, 0x00c7}, {MISENSOR_16BIT, 0x098c, 0xab31}, /*HG_NR_STOP_G*/ {MISENSOR_16BIT, 0x0990, 0x001e}, {MISENSOR_16BIT, 0x098c, 0xab20}, /*HG_LL_SaT1*/ {MISENSOR_16BIT, 0x0990, 0x0054}, {MISENSOR_16BIT, 0x098c, 0xab21}, /*HG_LL_INTeRPTHReSH1*/ {MISENSOR_16BIT, 0x0990, 0x0016}, {MISENSOR_16BIT, 0x098c, 0xab22}, /*HG_LL_aPcORR1*/ {MISENSOR_16BIT, 0x0990, 0x0002}, {MISENSOR_16BIT, 0x098c, 0xab24}, /*HG_LL_STaT2*/ {MISENSOR_16BIT, 0x0990, 0x0005}, {MISENSOR_16BIT, 0x098c, 0xab25}, /*HG_LL_INTeRPTHReSH2*/ {MISENSOR_16BIT, 0x0990, 0x0034}, {MISENSOR_16BIT, 0x098c, 0x2b28}, /*HG_LL_bRIGHTNeSSSTaRT*/ {MISENSOR_16BIT, 0x0990, 0x170c}, {MISENSOR_16BIT, 0x098c, 0x2b2a}, /*HG_LL_bRIGHTNeSSSSTOP*/ {MISENSOR_16BIT, 0x0990, 0x3e80}, {MISENSOR_TOK_TERM, 0, 0}, }; /* Increase Flicker detection */ static struct misensor_reg const mt9v113_high_flicker[] = { {MISENSOR_16BIT, 0x98c, 0xa40d},/*Stat_min*/ {MISENSOR_16BIT, 0x990, 0x01},/* = 1*/ {MISENSOR_16BIT, 0x98c, 0xa410},/*Min_amplitude*/ {MISENSOR_16BIT, 0x990, 0x02},/* = 2*/ {MISENSOR_TOK_TERM, 0, 0}, }; /* LSC 95% */ static struct misensor_reg const mt9v113_lsc_95[] = { {MISENSOR_16BIT, 0x364e, 0x00f0}, {MISENSOR_16BIT, 0x3650, 0x954D}, {MISENSOR_16BIT, 0x3652, 0x6213}, {MISENSOR_16BIT, 0x3654, 0x9391}, {MISENSOR_16BIT, 0x3656, 0xb2D5}, {MISENSOR_16BIT, 0x3658, 0x00b0}, {MISENSOR_16BIT, 0x365a, 0x816c}, {MISENSOR_16BIT, 0x365c, 0x6e13}, {MISENSOR_16BIT, 0x365e, 0x9411}, {MISENSOR_16BIT, 0x3660, 0x9D75}, {MISENSOR_16BIT, 0x3662, 0x00D0}, {MISENSOR_16BIT, 0x3664, 0x20cc}, {MISENSOR_16BIT, 0x3666, 0x5953}, {MISENSOR_16BIT, 0x3668, 0x8131}, {MISENSOR_16BIT, 0x366a, 0xDD55}, {MISENSOR_16BIT, 0x366c, 0x00D0}, {MISENSOR_16BIT, 0x366e, 0xe4cD}, {MISENSOR_16BIT, 0x3670, 0x6473}, {MISENSOR_16BIT, 0x3672, 0x87b1}, {MISENSOR_16BIT, 0x3674, 0xaD95}, {MISENSOR_16BIT, 0x3676, 0x68ac}, {MISENSOR_16BIT, 0x3678, 0xa130}, {MISENSOR_16BIT, 0x367a, 0x7251}, {MISENSOR_16BIT, 0x367c, 0xcb11}, {MISENSOR_16BIT, 0x367e, 0x64eb}, {MISENSOR_16BIT, 0x3680, 0x44eD}, {MISENSOR_16BIT, 0x3682, 0x9350}, {MISENSOR_16BIT, 0x3684, 0x7152}, {MISENSOR_16BIT, 0x3686, 0x8eb2}, {MISENSOR_16BIT, 0x3688, 0xa634}, {MISENSOR_16BIT, 0x368a, 0x7e4D}, {MISENSOR_16BIT, 0x368c, 0xec6f}, {MISENSOR_16BIT, 0x368e, 0x0691}, {MISENSOR_16BIT, 0x3690, 0x5070}, {MISENSOR_16BIT, 0x3692, 0xffae}, {MISENSOR_16BIT, 0x3694, 0x016D}, {MISENSOR_16BIT, 0x3696, 0x9970}, {MISENSOR_16BIT, 0x3698, 0x1112}, {MISENSOR_16BIT, 0x369a, 0x8072}, {MISENSOR_16BIT, 0x369c, 0x8072}, {MISENSOR_16BIT, 0x369e, 0x1b94}, {MISENSOR_16BIT, 0x36a0, 0xb9f3}, {MISENSOR_16BIT, 0x36a2, 0x88b7}, {MISENSOR_16BIT, 0x36a4, 0x1c37}, {MISENSOR_16BIT, 0x36a6, 0x2b99}, {MISENSOR_16BIT, 0x36a8, 0x22b4}, {MISENSOR_16BIT, 0x36aa, 0xe573}, {MISENSOR_16BIT, 0x36ac, 0x8f36}, {MISENSOR_16BIT, 0x36ae, 0x0eb7}, {MISENSOR_16BIT, 0x36b0, 0x0ff7}, {MISENSOR_16BIT, 0x36b2, 0x0f74}, {MISENSOR_16BIT, 0x36b4, 0xc6b3}, {MISENSOR_16BIT, 0x36b6, 0xacb7}, {MISENSOR_16BIT, 0x36b8, 0x0797}, {MISENSOR_16BIT, 0x36ba, 0x73b9}, {MISENSOR_16BIT, 0x36bc, 0x1694}, {MISENSOR_16BIT, 0x36be, 0xDa13}, {MISENSOR_16BIT, 0x36c0, 0xf636}, {MISENSOR_16BIT, 0x36c2, 0x2f17}, {MISENSOR_16BIT, 0x36c4, 0x7af8}, {MISENSOR_16BIT, 0x36c6, 0x9bD1}, {MISENSOR_16BIT, 0x36c8, 0x8973}, {MISENSOR_16BIT, 0x36ca, 0x13D6}, {MISENSOR_16BIT, 0x36cc, 0x55D6}, {MISENSOR_16BIT, 0x36ce, 0xb7f9}, {MISENSOR_16BIT, 0x36D0, 0xc94D}, {MISENSOR_16BIT, 0x36D2, 0xc913}, {MISENSOR_16BIT, 0x36D4, 0x5D35}, {MISENSOR_16BIT, 0x36D6, 0x0277}, {MISENSOR_16BIT, 0x36D8, 0xebf7}, {MISENSOR_16BIT, 0x36Da, 0x63b0}, {MISENSOR_16BIT, 0x36Dc, 0xcbf1}, {MISENSOR_16BIT, 0x36De, 0x25b6}, {MISENSOR_16BIT, 0x36e0, 0x3135}, {MISENSOR_16BIT, 0x36e2, 0xa8f9}, {MISENSOR_16BIT, 0x36e4, 0xf630}, {MISENSOR_16BIT, 0x36e6, 0xca13}, {MISENSOR_16BIT, 0x36e8, 0x7315}, {MISENSOR_16BIT, 0x36ea, 0x6296}, {MISENSOR_16BIT, 0x36ec, 0x8999}, {MISENSOR_16BIT, 0x36ee, 0xa0D5}, {MISENSOR_16BIT, 0x36f0, 0x7bf6}, {MISENSOR_16BIT, 0x36f2, 0x3459}, {MISENSOR_16BIT, 0x36f4, 0x8f3a}, {MISENSOR_16BIT, 0x36f6, 0xcfDc}, {MISENSOR_16BIT, 0x36f8, 0xaa74}, {MISENSOR_16BIT, 0x36fa, 0x01D7}, {MISENSOR_16BIT, 0x36fc, 0x82D8}, {MISENSOR_16BIT, 0x36fe, 0xa359}, {MISENSOR_16BIT, 0x3700, 0x187b}, {MISENSOR_16BIT, 0x3702, 0xecf5}, {MISENSOR_16BIT, 0x3704, 0x0e37}, {MISENSOR_16BIT, 0x3706, 0x0DDa}, {MISENSOR_16BIT, 0x3708, 0xacfa}, {MISENSOR_16BIT, 0x370a, 0x81fD}, {MISENSOR_16BIT, 0x370c, 0x84f5}, {MISENSOR_16BIT, 0x370e, 0x1137}, {MISENSOR_16BIT, 0x3710, 0x0619}, {MISENSOR_16BIT, 0x3712, 0xae5a}, {MISENSOR_16BIT, 0x3714, 0xDe5b}, {MISENSOR_16BIT, 0x3644, 0x0130}, {MISENSOR_16BIT, 0x3642, 0x00f0}, {MISENSOR_TOK_TERM, 0, 0}, }; #endif