/* * Support for Aptina AR0543_RAW 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 __AR0543_RAW_H__ #define __AR0543_RAW_H__ #include #include #include #include #include #include #include #include #include #include #include #include #include //ASUS_BSP++ #include extern int Read_HW_ID(void); //static unsigned int HW_ID = 0xFF; //ASUS_BSP-- #define AR0543_RAW_RES_WIDTH_MAX 2592 #define AR0543_RAW_RES_HEIGHT_MAX 1944 #define MAX_FMTS 1 #define AR0543_RAW_NAME "ar0543_raw" #define AR0543_RAW_ADDR 0x36 #define AR0543_RAW_ID 0x4800 #define AR0543_RAW_ID2 0x4b01 #define LAST_REG_SETING {0xffff, 0xff} #define is_last_reg_setting(item) ((item).reg == 0xffff) #define I2C_MSG_LENGTH 0x2 #define AR0543_RAW_INVALID_CONFIG 0xffffffff #define AR0543_RAW_MAX_FOCUS_POS 255 #define AR0543_RAW_MAX_FOCUS_NEG (-255) #define AR0543_RAW_INTG_UNIT_US 100 #define AR0543_RAW_MCLK 192 #define AR0543_RAW_REG_BITS 16 #define AR0543_RAW_REG_MASK 0xFFFF /* This should be added into include/linux/videodev2.h */ #ifndef V4L2_IDENT_AR0543_RAW #define V4L2_IDENT_AR0543_RAW 8245 #endif /* * ar0543_raw System control registers */ #define AR0543_RAW_SC_CMMN_CHIP_ID 0x0000 #define AR0543_RAW_SC_CMMN_REV_ID 0x0002 #define GROUPED_PARAMETER_UPDATE 0x0000 #define GROUPED_PARAMETER_HOLD 0x0100 #define AR0543_RAW_GROUPED_PARAMETER_HOLD 0x0104 #define AR0543_RAW_VT_PIX_CLK_DIV 0x0300 #define AR0543_RAW_VT_SYS_CLK_DIV 0x0302 #define AR0543_RAW_PRE_PLL_CLK_DIV 0x0304 #define AR0543_RAW_PLL_MULTIPLIER 0x0306 #define AR0543_RAW_OP_PIX_DIV 0x0308 #define AR0543_RAW_OP_SYS_DIV 0x030A #define AR0543_RAW_FRAME_LENGTH_LINES 0x0340 #define AR0543_RAW_LINE_LENGTH_PCK 0x0342 #define AR0543_RAW_COARSE_INTG_TIME_MIN 0x1004 #define AR0543_RAW_COARSE_INTG_TIME_MAX 0x1006 #define AR0543_RAW_FINE_INTG_TIME_MIN 0x1008 #define AR0543_RAW_FINE_INTG_MIN_DEF 0x4FE #define AR0543_RAW_FINE_INTG_TIME_MAX 0x100A #define AR0543_RAW_FINE_INTG_MAX_DEF 0x3EE #define AR0543_RAW_READ_MODE 0x3040 #define AR0543_RAW_READ_MODE_X_ODD_INC (BIT(6) | BIT(7) | BIT(8)) #define AR0543_RAW_READ_MODE_Y_ODD_INC (BIT(0) | BIT(1) | BIT(2) |\ BIT(3) | BIT(4) | BIT(5)) #define AR0543_RAW_HORIZONTAL_START_H 0x0344 #define AR0543_RAW_VERTICAL_START_H 0x0346 #define AR0543_RAW_HORIZONTAL_END_H 0x0348 #define AR0543_RAW_VERTICAL_END_H 0x034a #define AR0543_RAW_HORIZONTAL_OUTPUT_SIZE_H 0x034c #define AR0543_RAW_VERTICAL_OUTPUT_SIZE_H 0x034e #define AR0543_RAW_COARSE_INTEGRATION_TIME 0x3012 #define AR0543_RAW_FINE_INTEGRATION_TIME 0x3014 #define AR0543_RAW_ROW_SPEED 0x3016 #define AR0543_RAW_GLOBAL_GAIN 0x305e #define AR0543_RAW_GLOBAL_GAIN_WR 0x1000 #define AR0543_RAW_TEST_PATTERN_MODE 0x3070 #define AR0543_RAW_VCM_SLEW_STEP 0x30F0 #define AR0543_RAW_VCM_SLEW_STEP_MAX 0x7 #define AR0543_RAW_VCM_SLEW_STEP_MASK 0x7 #define AR0543_RAW_VCM_CODE 0x30F2 #define AR0543_RAW_VCM_SLEW_TIME 0x30F4 #define AR0543_RAW_VCM_SLEW_TIME_MAX 0xffff #define AR0543_RAW_VCM_ENABLE 0x8000 /* ar0543_raw SCCB */ #define AR0543_RAW_SCCB_CTRL 0x3100 #define AR0543_RAW_AEC_PK_EXPO_H 0x3500 #define AR0543_RAW_AEC_PK_EXPO_M 0x3501 #define AR0543_RAW_AEC_PK_EXPO_L 0x3502 #define AR0543_RAW_AEC_MANUAL_CTRL 0x3503 #define AR0543_RAW_AGC_ADJ_H 0x3508 #define AR0543_RAW_AGC_ADJ_L 0x3509 #define AR0543_RAW_FOCAL_LENGTH_NUM 439 /*4.39mm*/ #define AR0543_RAW_FOCAL_LENGTH_DEM 100 #define AR0543_RAW_F_NUMBER_DEFAULT_NUM 24 #define AR0543_RAW_F_NUMBER_DEM 10 #define AR0543_RAW_X_ADDR_MIN 0X1180 #define AR0543_RAW_Y_ADDR_MIN 0X1182 #define AR0543_RAW_X_ADDR_MAX 0X1184 #define AR0543_RAW_Y_ADDR_MAX 0X1186 #define AR0543_RAW_MIN_FRAME_LENGTH_LINES 0x1140 #define AR0543_RAW_MAX_FRAME_LENGTH_LINES 0x1142 #define AR0543_RAW_MIN_LINE_LENGTH_PCK 0x1144 #define AR0543_RAW_MAX_LINE_LENGTH_PCK 0x1146 #define AR0543_RAW_MIN_LINE_BLANKING_PCK 0x1148 #define AR0543_RAW_MIN_FRAME_BLANKING_LINES 0x114A #define AR0543_RAW_X_OUTPUT_SIZE 0x034C #define AR0543_RAW_Y_OUTPUT_SIZE 0x034E #define AR0543_RAW_BIN_FACTOR_MAX 3 /* * focal length bits definition: * bits 31-16: numerator, bits 15-0: denominator */ #define AR0543_RAW_FOCAL_LENGTH_DEFAULT 0x1B70064 /* * current f-number bits definition: * bits 31-16: numerator, bits 15-0: denominator */ #define AR0543_RAW_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 AR0543_RAW_F_NUMBER_RANGE 0x180a180a /* Defines for register writes and register array processing */ #define AR0543_RAW_BYTE_MAX 30 #define AR0543_RAW_SHORT_MAX 16 #define I2C_RETRY_COUNT 5 #define AR0543_RAW_TOK_MASK 0xfff0 #define AR0543_RAW_STATUS_POWER_DOWN 0x0 #define AR0543_RAW_STATUS_STANDBY 0x2 #define AR0543_RAW_STATUS_ACTIVE 0x3 #define AR0543_RAW_STATUS_VIEWFINDER 0x4 //ASUS_BSP Wesley, for vcm test #define VCM_ADDR 0x0c //#define VCM_CODE_MSB 0x03 //#define VCM_CODE_LSB 0x04 #define VCM_MAX_FOCUS_POS 1023 struct s_ctrl_id { struct v4l2_queryctrl qc; int (*s_ctrl)(struct v4l2_subdev *sd, u32 val); int (*g_ctrl)(struct v4l2_subdev *sd, u32 *val); }; enum ar0543_raw_tok_type { AR0543_RAW_8BIT = 0x0001, AR0543_RAW_16BIT = 0x0002, AR0543_RAW_RMW = 0x0010, AR0543_RAW_TOK_TERM = 0xf000, /* terminating token for reg list */ AR0543_RAW_TOK_DELAY = 0xfe00 /* delay token for reg list */ }; /* * If register address or register width is not 32 bit width, * user needs to convert it manually */ struct s_register_setting { u32 reg; u32 val; }; struct s_output_format { struct v4l2_format v4l2_fmt; int fps; }; /** * struct ar0543_raw_fwreg - Firmware burst command * @type: FW burst or 8/16 bit register * @addr: 16-bit offset to register or other values depending on type * @val: data value for burst (or other commands) * * Define a structure for sensor register initialization values */ struct ar0543_raw_fwreg { enum ar0543_raw_tok_type type; /* value, register or FW burst string */ u16 addr; /* target address */ u32 val[8]; }; /** * struct ar0543_raw_reg - MI sensor register format * @type: type 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 ar0543_raw_reg { enum ar0543_raw_tok_type type; union { u16 sreg; struct ar0543_raw_fwreg *fwreg; } reg; u32 val; /* @set value for read/mod/write, @mask */ u32 val2; /* optional: for rmw, OR mask */ }; /* Store macro values' debug names */ struct macro_string { u8 val; char *string; }; static inline const char * macro_to_string(const struct macro_string *array, int size, u8 val) { int i; for (i = 0; i < size; i++) { if (array[i].val == val) return array[i].string; } return "Unknown VAL"; } struct ar0543_raw_control { struct v4l2_queryctrl qc; int (*query)(struct v4l2_subdev *sd, s32 *value); int (*tweak)(struct v4l2_subdev *sd, s32 value); }; struct ar0543_raw_resolution { u8 *desc; int res; int width; int height; int fps; bool used; unsigned short pixels_per_line; unsigned short lines_per_frame; const struct ar0543_raw_reg *regs; u8 bin_factor_x; u8 bin_factor_y; unsigned short skip_frames; }; struct ar0543_raw_format { u8 *desc; u32 pixelformat; struct s_register_setting *regs; }; #define AR0543_DEFAULT_AF_10CM 448 #define AR0543_DEFAULT_AF_INF 256 #define AR0543_DEFAULT_AF_START 150 #define AR0543_DEFAULT_AF_END 700 struct ar0543_raw_af_data { u16 af_inf_pos; u16 af_1m_pos; u16 af_10cm_pos; u16 af_start_curr; u8 module_id; u8 vendor_id; u16 default_af_inf_pos; u16 default_af_10cm_pos; u16 default_af_start; u16 default_af_end; }; #define AR0543_RAW_FUSEID_SIZE 8 #define AR0543_RAW_FUSEID_START_ADDR 0x31f4 /* ar0543_raw device structure */ struct ar0543_raw_device { struct v4l2_subdev sd; struct media_pad pad; struct v4l2_mbus_framefmt format; struct camera_sensor_platform_data *platform_data; int fmt_idx; int status; int streaming; int power; u16 sensor_id; u8 sensor_revision; u16 coarse_itg; u16 fine_itg; u16 gain; u32 focus; u16 pixels_per_line; u16 lines_per_frame; u8 fps; int run_mode; struct timespec timestamp_t_focus_abs; s16 number_of_steps; struct mutex input_lock; /* serialize sensor's ioctl */ void *otp_data; struct ar0543_raw_af_data af_data; void *fuseid; /* Older VCMs could not maintain the focus position in standby mode. */ bool keeps_focus_pos; struct attribute_group sensor_i2c_attribute; //Add for ATD command+++ }; #define AR0543_RAW_MAX_WRITE_BUF_SIZE 32 struct ar0543_raw_write_buffer { u16 addr; u8 data[AR0543_RAW_MAX_WRITE_BUF_SIZE]; }; struct ar0543_raw_write_ctrl { int index; struct ar0543_raw_write_buffer buffer; }; #define AR0543_RAW_OTP_READ_EN 0x301A #define AR0543_RAW_OTP_TIMING 0x3134 #define AR0543_RAW_OTP_RECORD_TYPE 0x304C #define AR0543_RAW_OTP_AUTO_READ 0x304A #define AR0543_RAW_OTP_READY_REG_DONE (1 << 5) #define AR0543_RAW_OTP_READY_REG_OK (1 << 6) #define AR0543_RAW_OTP_AF_INF_POS_H 0x3800 #define AR0543_RAW_OTP_AF_INF_POS_L 0x3801 #define AR0543_RAW_OTP_AF_1M_POS 0x3802 #define AR0543_RAW_OTP_AF_10CM_POS 0x3804 #define AR0543_RAW_OTP_AF_START_CURR 0x3806 #define AR0543_RAW_OTP_AF_MODULE_ID 0x3808 #define AR0543_RAW_OTP_AF_VENDOR_ID 0x3809 #define AR0543_RAW_OTP_DATA_SIZE 0x60 #define GROUPED_PARAMETER_HOLD_ENABLE {AR0543_RAW_8BIT, {0x0104}, 0x1} #define GROUPED_PARAMETER_HOLD_DISABLE {AR0543_RAW_8BIT, {0x0104}, 0x0} #define INIT_VCM_CONTROL {AR0543_RAW_16BIT, {0x30F0}, 0x800C} /* slew_rate[2:0] */ static const struct ar0543_raw_reg ar0543_raw_init_vcm[] = { INIT_VCM_CONTROL, /* VCM_CONTROL */ {AR0543_RAW_16BIT, {0x30F2}, 0x0000}, /* VCM_NEW_CODE */ {AR0543_RAW_16BIT, {0x30F4}, 0x0080}, /* VCM_STEP_TIME */ {AR0543_RAW_TOK_TERM, {0}, 0} }; //#define RESET_REGISTER {AR0543_RAW_16BIT, {0x301A}, 0x4A38} static const struct ar0543_raw_reg ar0543_raw_reset_register[] = { {AR0543_RAW_8BIT,{0x0103},0x01}, //SOFTWARE_RESET (clears itself) {AR0543_RAW_TOK_DELAY, {0}, 50}, //DELAY=50 //Initialization Time //stop_streaming {AR0543_RAW_8BIT,{0x0100},0x00},// MODE_SELECT //dual_lane_MIPI_interface {AR0543_RAW_16BIT,{0x301A},0x0618},// RESET_REGISTER {AR0543_RAW_16BIT,{0x3064},0xB800},// SMIA_TEST {AR0543_RAW_16BIT,{0x31AE},0x0202},// SERIAL_FORMAT {AR0543_RAW_16BIT,{0x0112},0x0A0A},// 10bit raw output //REV1_recommended_settings {AR0543_RAW_16BIT,{0x316A},0x8400},// DAC_FBIAS {AR0543_RAW_16BIT,{0x316C},0x8400},// DAC_TXLO {AR0543_RAW_16BIT,{0x316E},0x8400},// DAC_ECL {AR0543_RAW_16BIT,{0x3EFA},0x1A1F},// DAC_LD_ECL {AR0543_RAW_16BIT,{0x3ED2},0xD965},// DAC_LD_6_7 {AR0543_RAW_16BIT,{0x3ED8},0x7F1B},// DAC_LD_12_13 {AR0543_RAW_16BIT,{0x3EDA},0x2F11},// DAC_LD_14_15 {AR0543_RAW_16BIT,{0x3EE2},0x0060},// DAC_LD_22_23 {AR0543_RAW_16BIT,{0x3EF2},0xD965},// DAC_LP_6_7 {AR0543_RAW_16BIT,{0x3EF8},0x797F},// DAC_LD_TXHI {AR0543_RAW_16BIT,{0x3EFC},0x286F},// DAC_LD_FBIAS {AR0543_RAW_16BIT,{0x3EFE},0x2C01},// DAC_LD_TXLO //REV1_pixel_timing {AR0543_RAW_16BIT,{0x3E00},0x042F},// DYNAMIC_SEQRAM_00 {AR0543_RAW_16BIT,{0x3E02},0xFFFF},// DYNAMIC_SEQRAM_02 {AR0543_RAW_16BIT,{0x3E04},0xFFFF},// DYNAMIC_SEQRAM_04 {AR0543_RAW_16BIT,{0x3E06},0xFFFF},// DYNAMIC_SEQRAM_06 {AR0543_RAW_16BIT,{0x3E08},0x8071},// DYNAMIC_SEQRAM_08 {AR0543_RAW_16BIT,{0x3E0A},0x7281},// DYNAMIC_SEQRAM_0A {AR0543_RAW_16BIT,{0x3E0C},0x4011},// DYNAMIC_SEQRAM_0C {AR0543_RAW_16BIT,{0x3E0E},0x8010},// DYNAMIC_SEQRAM_0E {AR0543_RAW_16BIT,{0x3E10},0x60A5},// DYNAMIC_SEQRAM_10 {AR0543_RAW_16BIT,{0x3E12},0x4080},// DYNAMIC_SEQRAM_12 {AR0543_RAW_16BIT,{0x3E14},0x4180},// DYNAMIC_SEQRAM_14 {AR0543_RAW_16BIT,{0x3E16},0x0018},// DYNAMIC_SEQRAM_16 {AR0543_RAW_16BIT,{0x3E18},0x46B7},// DYNAMIC_SEQRAM_18 {AR0543_RAW_16BIT,{0x3E1A},0x4994},// DYNAMIC_SEQRAM_1A {AR0543_RAW_16BIT,{0x3E1C},0x4997},// DYNAMIC_SEQRAM_1C {AR0543_RAW_16BIT,{0x3E1E},0x4682},// DYNAMIC_SEQRAM_1E {AR0543_RAW_16BIT,{0x3E20},0x0018},// DYNAMIC_SEQRAM_20 {AR0543_RAW_16BIT,{0x3E22},0x4241},// DYNAMIC_SEQRAM_22 {AR0543_RAW_16BIT,{0x3E24},0x8000},// DYNAMIC_SEQRAM_24 {AR0543_RAW_16BIT,{0x3E26},0x1880},// DYNAMIC_SEQRAM_26 {AR0543_RAW_16BIT,{0x3E28},0x4785},// DYNAMIC_SEQRAM_28 {AR0543_RAW_16BIT,{0x3E2A},0x4992},// DYNAMIC_SEQRAM_2A {AR0543_RAW_16BIT,{0x3E2C},0x4997},// DYNAMIC_SEQRAM_2C {AR0543_RAW_16BIT,{0x3E2E},0x4780},// DYNAMIC_SEQRAM_2E {AR0543_RAW_16BIT,{0x3E30},0x4D80},// DYNAMIC_SEQRAM_30 {AR0543_RAW_16BIT,{0x3E32},0x100C},// DYNAMIC_SEQRAM_32 {AR0543_RAW_16BIT,{0x3E34},0x8000},// DYNAMIC_SEQRAM_34 {AR0543_RAW_16BIT,{0x3E36},0x184A},// DYNAMIC_SEQRAM_36 {AR0543_RAW_16BIT,{0x3E38},0x8042},// DYNAMIC_SEQRAM_38 {AR0543_RAW_16BIT,{0x3E3A},0x001A},// DYNAMIC_SEQRAM_3A {AR0543_RAW_16BIT,{0x3E3C},0x9610},// DYNAMIC_SEQRAM_3C {AR0543_RAW_16BIT,{0x3E3E},0x0C80},// DYNAMIC_SEQRAM_3E {AR0543_RAW_16BIT,{0x3E40},0x4DC6},// DYNAMIC_SEQRAM_40 {AR0543_RAW_16BIT,{0x3E42},0x4A80},// DYNAMIC_SEQRAM_42 {AR0543_RAW_16BIT,{0x3E44},0x0018},// DYNAMIC_SEQRAM_44 {AR0543_RAW_16BIT,{0x3E46},0x8042},// DYNAMIC_SEQRAM_46 {AR0543_RAW_16BIT,{0x3E48},0x8041},// DYNAMIC_SEQRAM_48 {AR0543_RAW_16BIT,{0x3E4A},0x0018},// DYNAMIC_SEQRAM_4A {AR0543_RAW_16BIT,{0x3E4C},0x804B},// DYNAMIC_SEQRAM_4C {AR0543_RAW_16BIT,{0x3E4E},0xB74B},// DYNAMIC_SEQRAM_4E {AR0543_RAW_16BIT,{0x3E50},0x8010},// DYNAMIC_SEQRAM_50 {AR0543_RAW_16BIT,{0x3E52},0x6056},// DYNAMIC_SEQRAM_52 {AR0543_RAW_16BIT,{0x3E54},0x001C},// DYNAMIC_SEQRAM_54 {AR0543_RAW_16BIT,{0x3E56},0x8211},// DYNAMIC_SEQRAM_56 {AR0543_RAW_16BIT,{0x3E58},0x8056},// DYNAMIC_SEQRAM_58 {AR0543_RAW_16BIT,{0x3E5A},0x827C},// DYNAMIC_SEQRAM_5A {AR0543_RAW_16BIT,{0x3E5C},0x0970},// DYNAMIC_SEQRAM_5C {AR0543_RAW_16BIT,{0x3E5E},0x8082},// DYNAMIC_SEQRAM_5E {AR0543_RAW_16BIT,{0x3E60},0x7281},// DYNAMIC_SEQRAM_60 {AR0543_RAW_16BIT,{0x3E62},0x4C40},// DYNAMIC_SEQRAM_62 {AR0543_RAW_16BIT,{0x3E64},0x8E4D},// DYNAMIC_SEQRAM_64 {AR0543_RAW_16BIT,{0x3E66},0x8110},// DYNAMIC_SEQRAM_66 {AR0543_RAW_16BIT,{0x3E68},0x0CAF},// DYNAMIC_SEQRAM_68 {AR0543_RAW_16BIT,{0x3E6A},0x4D80},// DYNAMIC_SEQRAM_6A {AR0543_RAW_16BIT,{0x3E6C},0x100C},// DYNAMIC_SEQRAM_6C {AR0543_RAW_16BIT,{0x3E6E},0x8440},// DYNAMIC_SEQRAM_6E {AR0543_RAW_16BIT,{0x3E70},0x4C81},// DYNAMIC_SEQRAM_70 {AR0543_RAW_16BIT,{0x3E72},0x7C5F},// DYNAMIC_SEQRAM_72 {AR0543_RAW_16BIT,{0x3E74},0x7000},// DYNAMIC_SEQRAM_74 {AR0543_RAW_16BIT,{0x3E76},0x0000},// DYNAMIC_SEQRAM_76 {AR0543_RAW_16BIT,{0x3E78},0x0000},// DYNAMIC_SEQRAM_78 {AR0543_RAW_16BIT,{0x3E7A},0x0000},// DYNAMIC_SEQRAM_7A {AR0543_RAW_16BIT,{0x3E7C},0x0000},// DYNAMIC_SEQRAM_7C {AR0543_RAW_16BIT,{0x3E7E},0x0000},// DYNAMIC_SEQRAM_7E {AR0543_RAW_16BIT,{0x3E80},0x0000},// DYNAMIC_SEQRAM_80 {AR0543_RAW_16BIT,{0x3E82},0x0000},// DYNAMIC_SEQRAM_82 {AR0543_RAW_16BIT,{0x3E84},0x0000},// DYNAMIC_SEQRAM_84 {AR0543_RAW_16BIT,{0x3E86},0x0000},// DYNAMIC_SEQRAM_86 {AR0543_RAW_16BIT,{0x3E88},0x0000},// DYNAMIC_SEQRAM_88 {AR0543_RAW_16BIT,{0x3E8A},0x0000},// DYNAMIC_SEQRAM_8A {AR0543_RAW_16BIT,{0x3E8C},0x0000},// DYNAMIC_SEQRAM_8C {AR0543_RAW_16BIT,{0x3E8E},0x0000},// DYNAMIC_SEQRAM_8E {AR0543_RAW_16BIT,{0x3E90},0x0000},// DYNAMIC_SEQRAM_90 {AR0543_RAW_16BIT,{0x3E92},0x0000},// DYNAMIC_SEQRAM_92 {AR0543_RAW_16BIT,{0x3E94},0x0000},// DYNAMIC_SEQRAM_94 {AR0543_RAW_16BIT,{0x3E96},0x0000},// DYNAMIC_SEQRAM_96 {AR0543_RAW_16BIT,{0x3E98},0x0000},// DYNAMIC_SEQRAM_98 {AR0543_RAW_16BIT,{0x3E9A},0x0000},// DYNAMIC_SEQRAM_9A {AR0543_RAW_16BIT,{0x3E9C},0x0000},// DYNAMIC_SEQRAM_9C {AR0543_RAW_16BIT,{0x3E9E},0x0000},// DYNAMIC_SEQRAM_9E {AR0543_RAW_16BIT,{0x3EA0},0x0000},// DYNAMIC_SEQRAM_A0 {AR0543_RAW_16BIT,{0x3EA2},0x0000},// DYNAMIC_SEQRAM_A2 {AR0543_RAW_16BIT,{0x3EA4},0x0000},// DYNAMIC_SEQRAM_A4 {AR0543_RAW_16BIT,{0x3EA6},0x0000},// DYNAMIC_SEQRAM_A6 {AR0543_RAW_16BIT,{0x3EA8},0x0000},// DYNAMIC_SEQRAM_A8 {AR0543_RAW_16BIT,{0x3EAA},0x0000},// DYNAMIC_SEQRAM_AA {AR0543_RAW_16BIT,{0x3EAC},0x0000},// DYNAMIC_SEQRAM_AC {AR0543_RAW_16BIT,{0x3EAE},0x0000},// DYNAMIC_SEQRAM_AE {AR0543_RAW_16BIT,{0x3EB0},0x0000},// DYNAMIC_SEQRAM_B0 {AR0543_RAW_16BIT,{0x3EB2},0x0000},// DYNAMIC_SEQRAM_B2 {AR0543_RAW_16BIT,{0x3EB4},0x0000},// DYNAMIC_SEQRAM_B4 {AR0543_RAW_16BIT,{0x3EB6},0x0000},// DYNAMIC_SEQRAM_B6 {AR0543_RAW_16BIT,{0x3EB8},0x0000},// DYNAMIC_SEQRAM_B8 {AR0543_RAW_16BIT,{0x3EBA},0x0000},// DYNAMIC_SEQRAM_BA {AR0543_RAW_16BIT,{0x3EBC},0x0000},// DYNAMIC_SEQRAM_BC {AR0543_RAW_16BIT,{0x3EBE},0x0000},// DYNAMIC_SEQRAM_BE {AR0543_RAW_16BIT,{0x3EC0},0x0000},// DYNAMIC_SEQRAM_C0 {AR0543_RAW_16BIT,{0x3EC2},0x0000},// DYNAMIC_SEQRAM_C2 {AR0543_RAW_16BIT,{0x3EC4},0x0000},// DYNAMIC_SEQRAM_C4 {AR0543_RAW_16BIT,{0x3EC6},0x0000},// DYNAMIC_SEQRAM_C6 {AR0543_RAW_16BIT,{0x3EC8},0x0000},// DYNAMIC_SEQRAM_C8 {AR0543_RAW_16BIT,{0x3ECA},0x0000},// DYNAMIC_SEQRAM_CA {AR0543_RAW_16BIT,{0x3170},0x2150},// ANALOG_CONTROL {AR0543_RAW_16BIT,{0x317A},0x0150},// ANALOG_CONTROL6 {AR0543_RAW_16BIT,{0x3ECC},0x2200},// DAC_LD_0_1 {AR0543_RAW_16BIT,{0x3174},0x0000},// ANALOG_CONTROL3 {AR0543_RAW_16BIT,{0x3176},0x0000},// ANALOG_CONTROL4 {AR0543_RAW_16BIT,{0x30BC},0x0384},// CALIB_GLOBAL {AR0543_RAW_16BIT,{0x30C0},0x1220},// CALIB_CONTROL {AR0543_RAW_16BIT,{0x30D4},0x9200},// COLUMN_CORRECTION {AR0543_RAW_16BIT,{0x30B2},0xC000},// CALIB_TIED_OFFSET {AR0543_RAW_16BIT,{0x31B0},0x00C4},// FRAME_PREAMBLE {AR0543_RAW_16BIT,{0x31B2},0x0064},// LINE_PREAMBLE {AR0543_RAW_16BIT,{0x31B4},0x0E77},// MIPI_TIMING_0 {AR0543_RAW_16BIT,{0x31B6},0x0D24},// MIPI_TIMING_1 {AR0543_RAW_16BIT,{0x31B8},0x020E},// MIPI_TIMING_2 {AR0543_RAW_16BIT,{0x31BA},0x0710},// MIPI_TIMING_3 {AR0543_RAW_16BIT,{0x31BC},0x2A0D},// MIPI_TIMING_4 {AR0543_RAW_16BIT,{0x31BE},0xC003},// MIPI_CONFIG_STATUS //updated June 2013--ADACD and 2DDC settings //ADACD: low gain #ifdef CONFIG_ME175CG {AR0543_RAW_16BIT,{0x3100},0x0002},// ADACD_CONTROL #else {AR0543_RAW_16BIT,{0x3100},0x0000},// ADACD_CONTROL //denoise off #endif {AR0543_RAW_16BIT,{0x3102},0x0064},// ADACD_NOISE_MODEL1 {AR0543_RAW_16BIT,{0x3104},0x0B6D},// ADACD_NOISE_MODEL2 {AR0543_RAW_16BIT,{0x3106},0x0201},// ADACD_NOISE_FLOOR1 {AR0543_RAW_16BIT,{0x3108},0x0905},// ADACD_NOISE_FLOOR2 {AR0543_RAW_16BIT,{0x310A},0x002A},// ADACD_PEDESTAL //2DDC: low gain {AR0543_RAW_16BIT,{0x31E0},0x1F01},// PIX_DEF_ID {AR0543_RAW_16BIT,{0x3F02},0x0001},// PIX_DEF_2D_DDC_THRESH_HI3 {AR0543_RAW_16BIT,{0x3F04},0x0032},// PIX_DEF_2D_DDC_THRESH_LO3 {AR0543_RAW_16BIT,{0x3F06},0x015E},// PIX_DEF_2D_DDC_THRESH_HI4 {AR0543_RAW_16BIT,{0x3F08},0x0190},// PIX_DEF_2D_DDC_THRESH_LO4 {AR0543_RAW_16BIT,{0x305E},0x1127},// GLOBAL_GAIN //Smaller_FallOff60+++ {AR0543_RAW_16BIT,{0x3780}, 0x0000}, {AR0543_RAW_16BIT,{0x3600}, 0x0110}, {AR0543_RAW_16BIT,{0x3602}, 0x1F89}, {AR0543_RAW_16BIT,{0x3604}, 0x02D1}, {AR0543_RAW_16BIT,{0x3606}, 0xC2CD}, {AR0543_RAW_16BIT,{0x3608}, 0xACB1}, {AR0543_RAW_16BIT,{0x360A}, 0x02B0}, {AR0543_RAW_16BIT,{0x360C}, 0x096C}, {AR0543_RAW_16BIT,{0x360E}, 0x5870}, {AR0543_RAW_16BIT,{0x3610}, 0x80EC}, {AR0543_RAW_16BIT,{0x3612}, 0xC111}, {AR0543_RAW_16BIT,{0x3614}, 0x0250}, {AR0543_RAW_16BIT,{0x3616}, 0x2A08}, {AR0543_RAW_16BIT,{0x3618}, 0x1AD0}, {AR0543_RAW_16BIT,{0x361A}, 0xCF2E}, {AR0543_RAW_16BIT,{0x361C}, 0x8E71}, {AR0543_RAW_16BIT,{0x361E}, 0x0370}, {AR0543_RAW_16BIT,{0x3620}, 0xF14B}, {AR0543_RAW_16BIT,{0x3622}, 0x0E51}, {AR0543_RAW_16BIT,{0x3624}, 0xCCCB}, {AR0543_RAW_16BIT,{0x3626}, 0xD251}, {AR0543_RAW_16BIT,{0x3640}, 0xA8AB}, {AR0543_RAW_16BIT,{0x3642}, 0x9B8D}, {AR0543_RAW_16BIT,{0x3644}, 0xD2CE}, {AR0543_RAW_16BIT,{0x3646}, 0xA76B}, {AR0543_RAW_16BIT,{0x3648}, 0x1C70}, {AR0543_RAW_16BIT,{0x364A}, 0x5069}, {AR0543_RAW_16BIT,{0x364C}, 0x242E}, {AR0543_RAW_16BIT,{0x364E}, 0xAA8A}, {AR0543_RAW_16BIT,{0x3650}, 0xAE0F}, {AR0543_RAW_16BIT,{0x3652}, 0xC76D}, {AR0543_RAW_16BIT,{0x3654}, 0x562A}, {AR0543_RAW_16BIT,{0x3656}, 0x7BCD}, {AR0543_RAW_16BIT,{0x3658}, 0x702D}, {AR0543_RAW_16BIT,{0x365A}, 0xCA6E}, {AR0543_RAW_16BIT,{0x365C}, 0x9CEE}, {AR0543_RAW_16BIT,{0x365E}, 0xF287}, {AR0543_RAW_16BIT,{0x3660}, 0xA10E}, {AR0543_RAW_16BIT,{0x3662}, 0x78EE}, {AR0543_RAW_16BIT,{0x3664}, 0x11CE}, {AR0543_RAW_16BIT,{0x3666}, 0x962F}, {AR0543_RAW_16BIT,{0x3680}, 0x03D1}, {AR0543_RAW_16BIT,{0x3682}, 0x16AE}, {AR0543_RAW_16BIT,{0x3684}, 0xA2D1}, {AR0543_RAW_16BIT,{0x3686}, 0xD8CF}, {AR0543_RAW_16BIT,{0x3688}, 0x8EF3}, {AR0543_RAW_16BIT,{0x368A}, 0x15D1}, {AR0543_RAW_16BIT,{0x368C}, 0x9BAE}, {AR0543_RAW_16BIT,{0x368E}, 0xBF32}, {AR0543_RAW_16BIT,{0x3690}, 0xB910}, {AR0543_RAW_16BIT,{0x3692}, 0x244E}, {AR0543_RAW_16BIT,{0x3694}, 0x5F30}, {AR0543_RAW_16BIT,{0x3696}, 0x128C}, {AR0543_RAW_16BIT,{0x3698}, 0xA6D2}, {AR0543_RAW_16BIT,{0x369A}, 0x2EEF}, {AR0543_RAW_16BIT,{0x369C}, 0x0611}, {AR0543_RAW_16BIT,{0x369E}, 0x0631}, {AR0543_RAW_16BIT,{0x36A0}, 0xFC8D}, {AR0543_RAW_16BIT,{0x36A2}, 0xBE51}, {AR0543_RAW_16BIT,{0x36A4}, 0x80B0}, {AR0543_RAW_16BIT,{0x36A6}, 0xED52}, {AR0543_RAW_16BIT,{0x36C0}, 0x8FAD}, {AR0543_RAW_16BIT,{0x36C2}, 0xC2CB}, {AR0543_RAW_16BIT,{0x36C4}, 0x6710}, {AR0543_RAW_16BIT,{0x36C6}, 0x26F0}, {AR0543_RAW_16BIT,{0x36C8}, 0xCF91}, {AR0543_RAW_16BIT,{0x36CA}, 0x456E}, {AR0543_RAW_16BIT,{0x36CC}, 0xC0AE}, {AR0543_RAW_16BIT,{0x36CE}, 0xA5F0}, {AR0543_RAW_16BIT,{0x36D0}, 0x156F}, {AR0543_RAW_16BIT,{0x36D2}, 0x18D1}, {AR0543_RAW_16BIT,{0x36D4}, 0xAEED}, {AR0543_RAW_16BIT,{0x36D6}, 0xA6CE}, {AR0543_RAW_16BIT,{0x36D8}, 0x178E}, {AR0543_RAW_16BIT,{0x36DA}, 0x140C}, {AR0543_RAW_16BIT,{0x36DC}, 0xB40E}, {AR0543_RAW_16BIT,{0x36DE}, 0x85AB}, {AR0543_RAW_16BIT,{0x36E0}, 0x216E}, {AR0543_RAW_16BIT,{0x36E2}, 0x23CE}, {AR0543_RAW_16BIT,{0x36E4}, 0x6E2E}, {AR0543_RAW_16BIT,{0x36E6}, 0xBEAF}, {AR0543_RAW_16BIT,{0x3700}, 0x9CF1}, {AR0543_RAW_16BIT,{0x3702}, 0xAD4F}, {AR0543_RAW_16BIT,{0x3704}, 0x8154}, {AR0543_RAW_16BIT,{0x3706}, 0x6550}, {AR0543_RAW_16BIT,{0x3708}, 0x2DD5}, {AR0543_RAW_16BIT,{0x370A}, 0xF791}, {AR0543_RAW_16BIT,{0x370C}, 0xFD6E}, {AR0543_RAW_16BIT,{0x370E}, 0xF411}, {AR0543_RAW_16BIT,{0x3710}, 0x2272}, {AR0543_RAW_16BIT,{0x3712}, 0x1E94}, {AR0543_RAW_16BIT,{0x3714}, 0xBC11}, {AR0543_RAW_16BIT,{0x3716}, 0x860E}, {AR0543_RAW_16BIT,{0x3718}, 0x898F}, {AR0543_RAW_16BIT,{0x371A}, 0xAACF}, {AR0543_RAW_16BIT,{0x371C}, 0x3072}, {AR0543_RAW_16BIT,{0x371E}, 0x96D1}, {AR0543_RAW_16BIT,{0x3720}, 0xE84D}, {AR0543_RAW_16BIT,{0x3722}, 0x8454}, {AR0543_RAW_16BIT,{0x3724}, 0x0DD2}, {AR0543_RAW_16BIT,{0x3726}, 0x2C95}, {AR0543_RAW_16BIT,{0x3782}, 0x0544}, {AR0543_RAW_16BIT,{0x3784}, 0x03B4}, {AR0543_RAW_16BIT,{0x37C0}, 0x0000}, {AR0543_RAW_16BIT,{0x37C2}, 0x0000}, {AR0543_RAW_16BIT,{0x37C4}, 0x0000}, {AR0543_RAW_16BIT,{0x37C6}, 0x0000}, {AR0543_RAW_16BIT,{0x3780}, 0x8000}, //Smaller_FallOff60--- {AR0543_RAW_16BIT,{0x3ECE},0x000A},// DAC_LD_2_3 {AR0543_RAW_16BIT,{0x0400},0x0000},// SCALING_MODE {AR0543_RAW_16BIT,{0x0404},0x0010},// SCALE_M //PLL_Configuration {AR0543_RAW_16BIT,{0x0300},0x06},//vt_pix_clk_div = 0x6 {AR0543_RAW_16BIT,{0x0302},0x01},//vt_sys_clk_div = 0x1 {AR0543_RAW_16BIT,{0x0304},0x02},//pre_pll_clk_div = 0x2 {AR0543_RAW_16BIT,{0x0306},0x46},//pll_multiplier = 0x46 {AR0543_RAW_16BIT,{0x0308},0x0A},//op_pix_clk_div = 0xA {AR0543_RAW_16BIT,{0x030A},0x01},//op_sys_clk_div = 0x1 {AR0543_RAW_TOK_DELAY, {0}, 5},//DELAY=5 //2592*1944 @15FPS {AR0543_RAW_16BIT,{0x0400}, 0x0000}, //scaling_mode {AR0543_RAW_16BIT,{0x0404}, 0x0010}, //scale_m {AR0543_RAW_16BIT,{0x034C}, 0x0A20}, //Output Width {AR0543_RAW_16BIT,{0x034E}, 0x0798}, //Output Height {AR0543_RAW_16BIT,{0x0344}, 0x0008}, //Column Start {AR0543_RAW_16BIT,{0x0346}, 0x0008}, //Row Start {AR0543_RAW_16BIT,{0x0348}, 0x0A27}, //Column End {AR0543_RAW_16BIT,{0x034A}, 0x079F}, //Row End #ifdef CONFIG_ME175CG {AR0543_RAW_16BIT,{0x3040}, 0xC041}, //Read Mode #else {AR0543_RAW_16BIT,{0x3040}, 0x0041}, //Read Mode #endif {AR0543_RAW_16BIT,{0x3010}, 0x00A0}, //Fine Correction {AR0543_RAW_16BIT,{0x3012}, 0x07E4}, //Coarse Integration Time {AR0543_RAW_16BIT,{0x3014}, 0x02CE}, //Fine Integration Time {AR0543_RAW_16BIT,{0x0340}, 0x07E5}, //Frame Lines {AR0543_RAW_16BIT,{0x0342}, 0x0E6E}, //Line Length {AR0543_RAW_8BIT,{0x0104}, 0x00 }, // GROUPED_PARAMETER_HOLD //=== End of Initial Setting === {AR0543_RAW_TOK_TERM, {0}, 0} }; static const struct ar0543_raw_reg ar0543_raw_soft_standby[] = { {AR0543_RAW_8BIT, {0x0100}, 0x00}, {AR0543_RAW_TOK_TERM, {0}, 0} }; static const struct ar0543_raw_reg ar0543_raw_streaming[] = { {AR0543_RAW_8BIT, {0x0100}, 0x01}, {AR0543_RAW_TOK_TERM, {0}, 0} }; static const struct ar0543_raw_reg ar0543_raw_param_hold[] = { {AR0543_RAW_8BIT, {0x0104}, 0x01}, /* GROUPED_PARAMETER_HOLD */ {AR0543_RAW_TOK_TERM, {0}, 0} }; static const struct ar0543_raw_reg ar0543_raw_param_update[] = { {AR0543_RAW_8BIT, {0x0104}, 0x00}, /* GROUPED_PARAMETER_HOLD */ {AR0543_RAW_TOK_TERM, {0}, 0} }; static struct ar0543_raw_reg const ar0543_raw_2592x1944_15fps[] = { //[2592*1944 @15FPS] {AR0543_RAW_8BIT,{0x0104}, 0x01}, // GROUPED_PARAMETER_HOLD = 0x1 // Timing Settings {AR0543_RAW_16BIT,{0x0400}, 0x0000}, // scaling_mode {AR0543_RAW_16BIT,{0x0404}, 0x0010}, // scale_m {AR0543_RAW_16BIT,{0x034C}, 0x0A20}, // Output Width {AR0543_RAW_16BIT,{0x034E}, 0x0798}, // Output Height {AR0543_RAW_16BIT,{0x0344}, 0x0008}, // Column Start {AR0543_RAW_16BIT,{0x0346}, 0x0008}, // Row Start {AR0543_RAW_16BIT,{0x0348}, 0x0A27}, // Column End {AR0543_RAW_16BIT,{0x034A}, 0x079F}, // Row End #ifdef CONFIG_ME175CG {AR0543_RAW_16BIT,{0x3040}, 0xC041}, //Read Mode #else {AR0543_RAW_16BIT,{0x3040}, 0x0041}, //Read Mode #endif {AR0543_RAW_16BIT,{0x3010}, 0x00A0}, // Fine Correction {AR0543_RAW_16BIT,{0x3012}, 0x07E4}, // Coarse Integration Time {AR0543_RAW_16BIT,{0x3014}, 0x02CE}, // Fine Integration Time {AR0543_RAW_16BIT,{0x0340}, 0x07E5}, // Frame Lines {AR0543_RAW_16BIT,{0x0342}, 0x0E6E}, // Line Length {AR0543_RAW_8BIT,{0x0104}, 0x00}, // GROUPED_PARAMETER_HOLD {AR0543_RAW_TOK_DELAY, {0}, 5},//DELAY=5 {AR0543_RAW_TOK_TERM, {0}, 0} }; static struct ar0543_raw_reg const ar0543_raw_1080p_30fps[] = { //[1936*1096 @30FPS] {AR0543_RAW_8BIT,{0x0104}, 0x01}, // GROUPED_PARAMETER_HOLD = 0x1 // Timing Settings {AR0543_RAW_16BIT,{0x0400}, 0x0000}, // scaling_mode {AR0543_RAW_16BIT,{0x0404}, 0x0010}, // scale_m {AR0543_RAW_16BIT,{0x034C}, 0x0790}, // Output Width {AR0543_RAW_16BIT,{0x034E}, 0x0448}, // Output Height {AR0543_RAW_16BIT,{0x0344}, 0x0008}, // Column Start {AR0543_RAW_16BIT,{0x0346}, 0x0008}, // Row Start {AR0543_RAW_16BIT,{0x0348}, 0x0797}, // Column End {AR0543_RAW_16BIT,{0x034A}, 0x044F}, // Row End #ifdef CONFIG_ME175CG {AR0543_RAW_16BIT,{0x3040}, 0xC041}, //Read Mode #else {AR0543_RAW_16BIT,{0x3040}, 0x0041}, //Read Mode #endif {AR0543_RAW_16BIT,{0x3010}, 0x00A0}, // Fine Correction {AR0543_RAW_16BIT,{0x3012}, 0x058E}, // Coarse Integration Time {AR0543_RAW_16BIT,{0x3014}, 0x02CE}, // Fine Integration Time {AR0543_RAW_16BIT,{0x0340}, 0x058F}, // Frame Lines {AR0543_RAW_16BIT,{0x0342}, 0x0BE0}, // Line Length {AR0543_RAW_8BIT,{0x0104}, 0x00}, // GROUPED_PARAMETER_HOLD {AR0543_RAW_TOK_DELAY, {0}, 5},//DELAY=5 {AR0543_RAW_TOK_TERM, {0}, 0} }; static struct ar0543_raw_reg const ar0543_raw_960p_30fps[] = { //[1296*976 @30FPS] {AR0543_RAW_8BIT,{0x0104}, 0x01}, // GROUPED_PARAMETER_HOLD = 0x1 // Timing Settings {AR0543_RAW_16BIT,{0x0400}, 0x0000}, // scaling_mode {AR0543_RAW_16BIT,{0x0404}, 0x0010}, // scale_m {AR0543_RAW_16BIT,{0x034C}, 0x0510}, // Output Width {AR0543_RAW_16BIT,{0x034E}, 0x03D0}, // Output Height {AR0543_RAW_16BIT,{0x0344}, 0x0008}, // Column Start {AR0543_RAW_16BIT,{0x0346}, 0x0008}, // Row Start {AR0543_RAW_16BIT,{0x0348}, 0x0A25}, // Column End {AR0543_RAW_16BIT,{0x034A}, 0x07A5}, // Row End #ifdef CONFIG_ME175CG {AR0543_RAW_16BIT,{0x3040}, 0xC4C3}, //Read Mode #else {AR0543_RAW_16BIT,{0x3040}, 0x04C3}, //Read Mode #endif {AR0543_RAW_16BIT,{0x3010}, 0x0184}, // Fine Correction {AR0543_RAW_16BIT,{0x3012}, 0x04F5}, // Coarse Integration Time {AR0543_RAW_16BIT,{0x3014}, 0x05F8}, // Fine Integration Time {AR0543_RAW_16BIT,{0x0340}, 0x04F6}, // Frame Lines {AR0543_RAW_16BIT,{0x0342}, 0x0C4E}, // Line Length {AR0543_RAW_8BIT,{0x0104}, 0x00}, // GROUPED_PARAMETER_HOLD {AR0543_RAW_TOK_DELAY, {0}, 5},//DELAY=5 {AR0543_RAW_TOK_TERM, {0}, 0} }; static struct ar0543_raw_reg const ar0543_raw_720p_30fps[] = { //[1296*736 @30FPS] {AR0543_RAW_8BIT,{0x0104}, 0x01}, // GROUPED_PARAMETER_HOLD = 0x1 // Timing Settings {AR0543_RAW_16BIT,{0x0400}, 0x0000}, // scaling_mode {AR0543_RAW_16BIT,{0x0404}, 0x0010}, // scale_m {AR0543_RAW_16BIT,{0x034C}, 0x0510}, // Output Width {AR0543_RAW_16BIT,{0x034E}, 0x02E0}, // Output Height {AR0543_RAW_16BIT,{0x0344}, 0x0008}, // Column Start {AR0543_RAW_16BIT,{0x0346}, 0x0008}, // Row Start {AR0543_RAW_16BIT,{0x0348}, 0x0A25}, // Column End {AR0543_RAW_16BIT,{0x034A}, 0x05C5}, // Row End #ifdef CONFIG_ME175CG {AR0543_RAW_16BIT,{0x3040}, 0xC4C3}, //Read Mode #else {AR0543_RAW_16BIT,{0x3040}, 0x04C3}, //Read Mode #endif {AR0543_RAW_16BIT,{0x3010}, 0x0184}, // Fine Correction {AR0543_RAW_16BIT,{0x3012}, 0x04A0}, // Coarse Integration Time {AR0543_RAW_16BIT,{0x3014}, 0x05F8}, // Fine Integration Time {AR0543_RAW_16BIT,{0x0340}, 0x04A1}, // Frame Lines {AR0543_RAW_16BIT,{0x0342}, 0x0C4E}, // Line Length {AR0543_RAW_8BIT,{0x0104}, 0x00}, // GROUPED_PARAMETER_HOLD {AR0543_RAW_TOK_DELAY, {0}, 5},//DELAY=5 {AR0543_RAW_TOK_TERM, {0}, 0} }; static struct ar0543_raw_reg const ar0543_raw_VGA_30fps[] = { //[656*496 @30FPS] }, // 668*500 that bining from 2592*1944 and scale from 1296*972 {AR0543_RAW_8BIT,{0x0104}, 0x01}, // GROUPED_PARAMETER_HOLD = 0x1 // Timing Settings {AR0543_RAW_16BIT,{0x0400}, 0x0002}, // scaling_mode {AR0543_RAW_16BIT,{0x0404}, 0x001F}, // scale_m {AR0543_RAW_16BIT,{0x034C}, 0x029C}, // Output Width {AR0543_RAW_16BIT,{0x034E}, 0x01F4}, // Output Height {AR0543_RAW_16BIT,{0x0344}, 0x0008}, // Column Start {AR0543_RAW_16BIT,{0x0346}, 0x0008}, // Row Start {AR0543_RAW_16BIT,{0x0348}, 0x0A25}, // Column End {AR0543_RAW_16BIT,{0x034A}, 0x079D}, // Row End #ifdef CONFIG_ME175CG {AR0543_RAW_16BIT,{0x3040}, 0xC4C3}, //Read Mode #else {AR0543_RAW_16BIT,{0x3040}, 0x04C3}, //Read Mode #endif {AR0543_RAW_16BIT,{0x3010}, 0x0184}, // Fine Correction {AR0543_RAW_16BIT,{0x3012}, 0x0414}, // Coarse Integration Time {AR0543_RAW_16BIT,{0x3014}, 0x05F8}, // Fine Integration Time {AR0543_RAW_16BIT,{0x0340}, 0x0415}, // Frame Lines {AR0543_RAW_16BIT,{0x0342}, 0x0DF4}, // Line Length {AR0543_RAW_8BIT,{0x0104}, 0x00}, // GROUPED_PARAMETER_HOLD {AR0543_RAW_TOK_DELAY, {0}, 5},//DELAY=5 {AR0543_RAW_TOK_TERM, {0}, 0} }; static struct ar0543_raw_reg const ar0543_raw_CIF_30fps[] = { //[368*304 @30FPS]}, // 432*324 that bining from 2592*1944 and scale from 1296*972 {AR0543_RAW_8BIT,{0x0104}, 0x01}, // GROUPED_PARAMETER_HOLD = 0x1 // Timing Settings {AR0543_RAW_16BIT,{0x0400}, 0x0002}, // scaling_mode {AR0543_RAW_16BIT,{0x0404}, 0x0030}, // scale_m {AR0543_RAW_16BIT,{0x034C}, 0x01B0}, // Output Width {AR0543_RAW_16BIT,{0x034E}, 0x0144}, // Output Height {AR0543_RAW_16BIT,{0x0344}, 0x0008}, // Column Start {AR0543_RAW_16BIT,{0x0346}, 0x0008}, // Row Start {AR0543_RAW_16BIT,{0x0348}, 0x0A25}, // Column End {AR0543_RAW_16BIT,{0x034A}, 0x079D}, // Row End #ifdef CONFIG_ME175CG {AR0543_RAW_16BIT,{0x3040}, 0xC4C3}, //Read Mode #else {AR0543_RAW_16BIT,{0x3040}, 0x04C3}, //Read Mode #endif {AR0543_RAW_16BIT,{0x3010}, 0x0184}, // Fine Correction {AR0543_RAW_16BIT,{0x3012}, 0x0414}, // Coarse Integration Time {AR0543_RAW_16BIT,{0x3014}, 0x05F8}, // Fine Integration Time {AR0543_RAW_16BIT,{0x0340}, 0x0415}, // Frame Lines {AR0543_RAW_16BIT,{0x0342}, 0x0DF4}, // Line Length {AR0543_RAW_8BIT,{0x0104}, 0x00}, // GROUPED_PARAMETER_HOLD {AR0543_RAW_TOK_DELAY, {0}, 5},//DELAY=5 {AR0543_RAW_TOK_TERM, {0}, 0} }; static struct ar0543_raw_resolution ar0543_raw_res_preview[] = { { .desc = "PREVIEW_960p_30fps" , .width = 1296 , .height = 976 , .fps = 30 , .used = 0 , .pixels_per_line = 0x0C4E, /* consistent with regs arrays */ .lines_per_frame = 0x04F6, /* consistent with regs arrays */ .regs = ar0543_raw_960p_30fps , .bin_factor_x = 1, .bin_factor_y = 1, .skip_frames = 1, /*change skip num from 1 to 0 after 3A init param invalid issue fixed*/ }, { // For 2560x1920 output .desc = "PREVIEW_2592x1944_15fps" , .width = 2592 , .height = 1944 , .fps = 15 , .used = 0 , .pixels_per_line = 0x0E6E, /* consistent with regs arrays */ .lines_per_frame = 0x07E5, /* consistent with regs arrays */ .regs = ar0543_raw_2592x1944_15fps, .bin_factor_x = 0, .bin_factor_y = 0, .skip_frames = 1, }, }; #define N_RES_PREVIEW (ARRAY_SIZE(ar0543_raw_res_preview)) #if 0 static struct ar0543_raw_resolution ar0543_raw_res_still[] = { { // For 2560x1920 output .desc = "STILL_2592x1944_15fps" , .width = 2592 , .height = 1944 , .fps = 15 , .used = 0 , .pixels_per_line = 0x0E6E, /* consistent with regs arrays */ .lines_per_frame = 0x07E5, /* consistent with regs arrays */ .regs = ar0543_raw_2592x1944_15fps, .bin_factor_x = 0, .bin_factor_y = 0, .skip_frames = 1, }, }; #define N_RES_STILL (ARRAY_SIZE(ar0543_raw_res_still)) #endif static struct ar0543_raw_resolution ar0543_raw_res_video[] = { { .desc = "VIDEO_CIF_30fps" , .width = 368 , .height = 304 , .fps = 30 , .used = 0 , .pixels_per_line = 0x0DF4, /* consistent with regs arrays */ .lines_per_frame = 0x0415, /* consistent with regs arrays */ .regs = ar0543_raw_CIF_30fps , .bin_factor_x = 2, .bin_factor_y = 2, .skip_frames = 1, }, { .desc = "VIDEO_VGA_30fps" , .width = 656 , .height = 496 , .fps = 30 , .used = 0 , .pixels_per_line = 0x0DF4, /* consistent with regs arrays */ .lines_per_frame = 0x0415, /* consistent with regs arrays */ .regs = ar0543_raw_VGA_30fps , .bin_factor_x = 2, .bin_factor_y = 2, .skip_frames = 1, }, { .desc = "VIDEO_720p_30fps" , .width = 1296 , .height = 736 , .fps = 30 , .used = 0 , .pixels_per_line = 0x0C4E, /* consistent with regs arrays */ .lines_per_frame = 0x04A1, /* consistent with regs arrays */ .regs = ar0543_raw_720p_30fps , .bin_factor_x = 1, .bin_factor_y = 1, .skip_frames = 1, }, { .desc = "VIDEO_960p_30fps" , .width = 1296 , .height = 976 , .fps = 30 , .used = 0 , .pixels_per_line = 0x0C4E, /* consistent with regs arrays */ .lines_per_frame = 0x04F6, /* consistent with regs arrays */ .regs = ar0543_raw_960p_30fps , .bin_factor_x = 1, .bin_factor_y = 1, .skip_frames = 1, }, { .desc = "VIDEO_1080p_30fps" , .width = 1936 , .height = 1096 , .fps = 30 , .used = 0 , .pixels_per_line = 0x0BE0, /* consistent with regs arrays */ .lines_per_frame = 0x058F, /* consistent with regs arrays */ .regs = ar0543_raw_1080p_30fps , .bin_factor_x = 1, .bin_factor_y = 1, .skip_frames = 1, }, }; #define N_RES_VIDEO (ARRAY_SIZE(ar0543_raw_res_video)) static struct ar0543_raw_resolution *ar0543_raw_res = ar0543_raw_res_preview; static int N_RES = N_RES_PREVIEW; #endif