/* * The code contained herein is licensed under the GNU General Public * License. You may obtain a copy of the GNU General Public License * Version 2 or later at the following locations: * * http://www.opensource.org/licenses/gpl-license.html * http://www.gnu.org/copyleft/gpl.html */#include <linux/module.h>#include <linux/init.h>#include <linux/slab.h>#include <linux/ctype.h>#include <linux/types.h>#include <linux/delay.h>#include <linux/device.h>#include <linux/i2c.h>#include <linux/regulator/consumer.h>#include <mach/hardware.h>#include <media/v4l2-int-device.h>#include "mxc_v4l2_capture.h"#define HI253_VOLTAGE_ANALOG 2800000#define HI253_VOLTAGE_DIGITAL_CORE 1500000#define HI253_VOLTAGE_DIGITAL_IO 1800000#define HI253_VOLTAGE_DIGITAL_GPO 2800000/* Check these values! */#define MIN_FPS 15#define MAX_FPS 30#define DEFAULT_FPS 30#define HI253_XCLK_MIN 6000000#define HI253_XCLK_MAX 48000000#define REG_TERM 0xff/* terminating list entry for reg */#define VAL_TERM 0xff/* terminating list entry for val */enum hi253_mode {hi253_mode_MIN = 0,hi253_mode_VGA_640_480 = 0,hi253_mode_QVGA_320_240 = 1,hi253_mode_XGA_1024_768 = 2,hi253_mode_QXGA_1600_1200 = 3,hi253_mode_NTSC_720_480 = 4,hi253_mode_PAL_720_576 = 5,hi253_mode_MAX = 5};enum hi253_frame_rate {hi253_15_fps,hi253_30_fps};struct reg_value {u16 u16RegAddr;u8 u8Val;u8 u8Mask;u32 u32Delay_ms;};struct sensor_reg {u16 reg;u8 val;};struct hi253_mode_info {enum hi253_mode mode;u32 width;u32 height;/*struct reg_value *init_data_ptr;*/struct sensor_reg *init_data_ptr;u32 init_data_size;};/*! * Maintains the information on the current state of the sesor. */struct sensor {const struct hi253_platform_data *platform_data;struct v4l2_int_device *v4l2_int_device;struct i2c_client *i2c_client;struct v4l2_pix_format pix;struct v4l2_captureparm streamcap;bool on;/* control settings */int brightness;int hue;int contrast;int saturation;int red;int green;int blue;int ae_mode;u32 mclk;int csi;} hi253_data;static struct sensor_reg hi253_setting_15fps_QXGA_1600_1200[] = {/* * Only support 7.5fps for QXGA to workaround screen tearing issue * for 15fps when capturing still image. */ {0x01, 0xf9}, //sleep on {0x08, 0x0f}, //Hi-Z on {0x01, 0xf8}, //sleep off {0x03, 0x00}, // Dummy 750us START {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, // Dummy 750us END {0x0e, 0x03}, //PLL On {0x0e, 0x70}, //PLLx2 {0x03, 0x00}, // Dummy 750us START {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, // Dummy 750us END {0x0e, 0x00}, //PLL off {0x01, 0xf1}, //sleep on {0x08, 0x00}, //Hi-Z off {0x01, 0xf3}, {0x01, 0xf1}, {0x03, 0x20}, //page 20 {0x10, 0x9c}, //ae off {0x03, 0x22}, //page 22 {0x10, 0xe9}, //awb off {0x03, 0x00}, {0x10, 0x00}, // Sub1/2_Preview2 Mode_H binning {0x11, 0x91}, {0x12, 0x22}, //21 {0x0b, 0xaa}, // ESD Check Register {0x0c, 0xaa}, // ESD Check Register {0x0d, 0xaa}, // ESD Check Register {0x20, 0x00}, // Windowing start point Y {0x21, 0x04}, {0x22, 0x00}, // Windowing start point X {0x23, 0x07}, {0x24, 0x04}, {0x25, 0xb0}, {0x26, 0x06}, {0x27, 0x40}, // WINROW END {0x40, 0x01}, //Hblank 408 {0x41, 0x68}, {0x42, 0x00}, //Vblank 20 {0x43, 0x14}, {0x45, 0x04}, {0x46, 0x18}, {0x47, 0xd8}, {0x80, 0x2e}, {0x81, 0x7e}, {0x82, 0x90}, {0x83, 0x00}, {0x84, 0x0c}, {0x85, 0x00}, {0x90, 0x14}, //BLC_TIME_TH_ON {0x91, 0x14}, //BLC_TIME_TH_OFF {0x92, 0x98}, //BLC_AG_TH_ON {0x93, 0x90}, //BLC_AG_TH_OFF {0x94, 0x75}, {0x95, 0x70}, {0x96, 0xdc}, {0x97, 0xfe}, {0x98, 0x38}, {0x99, 0x43}, {0x9a, 0x43}, {0x9b, 0x43}, {0x9c, 0x43}, {0xa0, 0x00}, {0xa2, 0x00}, {0xa4, 0x00}, {0xa6, 0x00}, {0xa8, 0x43}, {0xaa, 0x43}, {0xac, 0x43}, {0xae, 0x43}, {0x03, 0x02}, {0x12, 0x03}, {0x13, 0x03}, {0x16, 0x00}, {0x17, 0x8C}, {0x18, 0x4c}, //Double_AG off {0x19, 0x00}, {0x1a, 0x39}, //ADC400->560 {0x1c, 0x09}, {0x1d, 0x40}, {0x1e, 0x30}, {0x1f, 0x10}, {0x20, 0x77}, {0x21, 0xde}, {0x22, 0xa7}, {0x23, 0x30}, //CLAMP {0x27, 0x3c}, {0x2b, 0x80}, {0x2e, 0x11}, {0x2f, 0xa1}, {0x30, 0x05}, //For Hi-253 never no change 0x05 {0x50, 0x20}, {0x52, 0x01}, {0x55, 0x1c}, {0x56, 0x11}, {0x5d, 0xa2}, {0x5e, 0x5a}, {0x60, 0x87}, {0x61, 0x99}, {0x62, 0x88}, {0x63, 0x97}, {0x64, 0x88}, {0x65, 0x97}, {0x67, 0x0c}, {0x68, 0x0c}, {0x69, 0x0c}, {0x72, 0x89}, {0x73, 0x96}, {0x74, 0x89}, {0x75, 0x96}, {0x76, 0x89}, {0x77, 0x96}, {0x7c, 0x85}, {0x7d, 0xaf}, {0x80, 0x01}, {0x81, 0x7f}, {0x82, 0x13}, {0x83, 0x24}, {0x84, 0x7d}, {0x85, 0x81}, {0x86, 0x7d}, {0x87, 0x81}, {0x92, 0x48}, {0x93, 0x54}, {0x94, 0x7d}, {0x95, 0x81}, {0x96, 0x7d}, {0x97, 0x81}, {0xa0, 0x02}, {0xa1, 0x7b}, {0xa2, 0x02}, {0xa3, 0x7b}, {0xa4, 0x7b}, {0xa5, 0x02}, {0xa6, 0x7b}, {0xa7, 0x02}, {0xa8, 0x85}, {0xa9, 0x8c}, {0xaa, 0x85}, {0xab, 0x8c}, {0xac, 0x10}, {0xad, 0x16}, {0xae, 0x10}, {0xaf, 0x16}, {0xb0, 0x99}, {0xb1, 0xa3}, {0xb2, 0xa4}, {0xb3, 0xae}, {0xb4, 0x9b}, {0xb5, 0xa2}, {0xb6, 0xa6}, {0xb7, 0xac}, {0xb8, 0x9b}, {0xb9, 0x9f}, {0xba, 0xa6}, {0xbb, 0xaa}, {0xbc, 0x9b}, {0xbd, 0x9f}, {0xbe, 0xa6}, {0xbf, 0xaa}, {0xc4, 0x2c}, {0xc5, 0x43}, {0xc6, 0x63}, {0xc7, 0x79}, {0xc8, 0x2d}, {0xc9, 0x42}, {0xca, 0x2d}, {0xcb, 0x42}, {0xcc, 0x64}, {0xcd, 0x78}, {0xce, 0x64}, {0xcf, 0x78}, {0xd0, 0x0a}, {0xd1, 0x09}, {0xd4, 0x14}, //DCDC_TIME_TH_ON {0xd5, 0x14}, //DCDC_TIME_TH_OFF {0xd6, 0x98}, //DCDC_AG_TH_ON {0xd7, 0x90}, //DCDC_AG_TH_OFF {0xe0, 0xc4}, {0xe1, 0xc4}, {0xe2, 0xc4}, {0xe3, 0xc4}, {0xe4, 0x00}, {0xe8, 0x80}, {0xe9, 0x40}, {0xea, 0x7f}, {0x03, 0x03}, {0x10, 0x10}, {0x03, 0x10}, {0x10, 0x01}, // CrYCbY // For Demoset 0x03 {0x12, 0x30}, {0x13, 0x0a}, // contrast on {0x20, 0x00}, {0x30, 0x00}, {0x31, 0x00}, {0x32, 0x00}, {0x33, 0x00}, {0x34, 0x30}, {0x35, 0x00}, {0x36, 0x00}, {0x38, 0x00}, {0x3e, 0x58}, {0x3f, 0x00}, {0x40, 0x80}, // YOFS {0x41, 0x10}, // DYOFS {0x48, 0x84}, // Contrast {0x50, 0x90}, // Contrast {0x60, 0x6c}, //67 {0x61, 0x70}, //7e //8e //88 //80 {0x62, 0x68}, //7e //8e //88 //80 {0x63, 0x50}, //Double_AG 50->30 {0x64, 0x41}, {0x66, 0x42}, {0x67, 0x20}, {0x6a, 0x80}, //8a {0x6b, 0x84}, //74 {0x6c, 0x80}, //7e //7a {0x6d, 0x80}, //8e {0x03, 0x11}, {0x10, 0x7f}, {0x11, 0x40}, {0x12, 0x0a}, /* Blue Max-Filter Delete*/ {0x13, 0xbb}, {0x26, 0x31}, /* Double_AG 31->20*/ {0x27, 0x34}, /* Double_AG 34->22*/ {0x28, 0x0f}, {0x29, 0x10}, {0x2b, 0x30}, {0x2c, 0x32}, {0x30, 0x70}, {0x31, 0x10}, {0x32, 0x58}, {0x33, 0x09}, {0x34, 0x06}, {0x35, 0x03}, {0x36, 0x70}, {0x37, 0x18}, {0x38, 0x58}, {0x39, 0x09}, {0x3a, 0x06}, {0x3b, 0x03}, {0x3c, 0x80}, {0x3d, 0x18}, {0x3e, 0x83}, /*80*/ {0x3f, 0x0c}, {0x40, 0x03}, {0x41, 0x06}, {0x42, 0x80}, {0x43, 0x18}, {0x44, 0x83}, /*80*/ {0x45, 0x12}, {0x46, 0x10}, {0x47, 0x10}, {0x48, 0x90}, {0x49, 0x40}, {0x4a, 0x80}, {0x4b, 0x13}, {0x4c, 0x10}, {0x4d, 0x11}, {0x4e, 0x80}, {0x4f, 0x30}, {0x50, 0x80}, {0x51, 0x13}, {0x52, 0x10}, {0x53, 0x13}, {0x54, 0x11}, {0x55, 0x17}, {0x56, 0x20}, {0x57, 0x01}, {0x58, 0x00}, {0x59, 0x00}, {0x5a, 0x1f}, /*18*/ {0x5b, 0x00}, {0x5c, 0x00}, {0x60, 0x3f}, {0x62, 0x60}, {0x70, 0x06}, {0x03, 0x12}, {0x20, 0x00}, {0x21, 0x00}, {0x25, 0x00}, {0x28, 0x00}, {0x29, 0x00}, {0x2a, 0x00}, {0x30, 0x50}, {0x31, 0x18}, {0x32, 0x32}, {0x33, 0x40}, {0x34, 0x50}, {0x35, 0x70}, {0x36, 0xa0}, {0x40, 0xa0}, {0x41, 0x40}, {0x42, 0xa0}, {0x43, 0x90}, {0x44, 0x90}, {0x45, 0x80}, {0x46, 0xb0}, {0x47, 0x55}, {0x48, 0xa0}, {0x49, 0x90}, {0x4a, 0x90}, {0x4b, 0x80}, {0x4c, 0xb0}, {0x4d, 0x40}, {0x4e, 0x90}, {0x4f, 0x90}, {0x50, 0xa0}, {0x51, 0x60}, {0x52, 0xb0}, {0x53, 0x60}, {0x54, 0xc0}, {0x55, 0xc0}, {0x56, 0x80}, {0x57, 0x57}, {0x58, 0x90}, {0x59, 0x40}, {0x5a, 0xd0}, {0x5b, 0xd0}, {0x5c, 0xe0}, {0x5d, 0x80}, {0x5e, 0x88}, {0x5f, 0x40}, {0x60, 0xe0}, {0x61, 0xe0}, {0x62, 0xe0}, {0x63, 0x80}, {0x70, 0x15}, {0x71, 0x01}, /*Don't Touch register*/ {0x72, 0x18}, {0x73, 0x01}, /*Don't Touch register*/ {0x74, 0x25}, {0x75, 0x15}, {0x80, 0x20}, {0x81, 0x40}, {0x82, 0x65}, {0x85, 0x1a}, {0x88, 0x00}, {0x89, 0x00}, {0x90, 0x5d}, /*For Preview*/ /*Dont Touch register*/ {0xD0, 0x0c}, {0xD1, 0x80}, {0xD2, 0x67}, {0xD3, 0x00}, {0xD4, 0x00}, {0xD5, 0x02}, {0xD6, 0xff}, {0xD7, 0x18}, {0x3b, 0x06}, {0x3c, 0x06}, {0xc5, 0x00}, /*55->48*/ {0xc6, 0x00}, /*48->40*/ {0x03, 0x13}, {0x10, 0xcb}, {0x11, 0x7b}, {0x12, 0x07}, {0x14, 0x00}, {0x20, 0x15}, {0x21, 0x13}, {0x22, 0x33}, {0x23, 0x05}, {0x24, 0x09}, {0x25, 0x0a}, {0x26, 0x18}, {0x27, 0x30}, {0x29, 0x12}, {0x2a, 0x50}, {0x2b, 0x02}, {0x2c, 0x02}, {0x25, 0x06}, {0x2d, 0x0c}, {0x2e, 0x12}, {0x2f, 0x12}, {0x50, 0x10}, {0x51, 0x14}, {0x52, 0x12}, {0x53, 0x0c}, {0x54, 0x0f}, {0x55, 0x0c}, {0x56, 0x10}, {0x57, 0x13}, {0x58, 0x12}, {0x59, 0x0c}, {0x5a, 0x0f}, {0x5b, 0x0c}, {0x5c, 0x0a}, {0x5d, 0x0b}, {0x5e, 0x0a}, {0x5f, 0x08}, {0x60, 0x09}, {0x61, 0x08}, {0x62, 0x08}, {0x63, 0x08}, {0x64, 0x08}, {0x65, 0x06}, {0x66, 0x06}, {0x67, 0x06}, {0x68, 0x07}, {0x69, 0x07}, {0x6a, 0x07}, {0x6b, 0x05}, {0x6c, 0x05}, {0x6d, 0x05}, {0x6e, 0x07}, {0x6f, 0x07}, {0x70, 0x07}, {0x71, 0x05}, {0x72, 0x05}, {0x73, 0x05}, {0x80, 0xfd}, {0x81, 0x1f}, {0x82, 0x05}, {0x83, 0x31}, {0x90, 0x05}, {0x91, 0x05}, {0x92, 0x33}, {0x93, 0x30}, {0x94, 0x03}, {0x95, 0x14}, {0x97, 0x20}, {0x99, 0x20}, {0xa0, 0x01}, {0xa1, 0x02}, {0xa2, 0x01}, {0xa3, 0x02}, {0xa4, 0x05}, {0xa5, 0x05}, {0xa6, 0x07}, {0xa7, 0x08}, {0xa8, 0x07}, {0xa9, 0x08}, {0xaa, 0x07}, {0xab, 0x08}, {0xb0, 0x22}, {0xb1, 0x2a}, {0xb2, 0x28}, {0xb3, 0x22}, {0xb4, 0x2a}, {0xb5, 0x28}, {0xb6, 0x22}, {0xb7, 0x2a}, {0xb8, 0x28}, {0xb9, 0x22}, {0xba, 0x2a}, {0xbb, 0x28}, {0xbc, 0x25}, {0xbd, 0x2a}, {0xbe, 0x27}, {0xbf, 0x25}, {0xc0, 0x2a}, {0xc1, 0x27}, {0xc2, 0x1e}, {0xc3, 0x24}, {0xc4, 0x20}, {0xc5, 0x1e}, {0xc6, 0x24}, {0xc7, 0x20}, {0xc8, 0x18}, {0xc9, 0x20}, {0xca, 0x1e}, {0xcb, 0x18}, {0xcc, 0x20}, {0xcd, 0x1e}, {0xce, 0x18}, {0xcf, 0x20}, {0xd0, 0x1e}, {0xd1, 0x18}, {0xd2, 0x20}, {0xd3, 0x1e}, {0x03, 0x14}, {0x10, 0x11}, {0x14, 0x80}, // GX {0x15, 0x80}, // GY {0x16, 0x80}, // RX {0x17, 0x80}, // RY {0x18, 0x80}, // BX {0x19, 0x80}, // BY {0x20, 0x60}, //X 60 //a0 {0x21, 0x80}, //Y {0x22, 0x80}, {0x23, 0x80}, {0x24, 0x80}, {0x30, 0xc8}, {0x31, 0x2b}, {0x32, 0x00}, {0x33, 0x00}, {0x34, 0x90}, {0x40, 0x48}, //31 {0x50, 0x34}, //23 //32 {0x60, 0x29}, // {0x70, 0x34}, //23 //32 {0x03, 0x15}, {0x10, 0x0f}, {0x14, 0x42}, //CMCOFSGH_Day //4c {0x15, 0x32}, //CMCOFSGM_CWF //3c {0x16, 0x24}, //CMCOFSGL_A //2e {0x17, 0x2f}, //CMC SIGN {0x30, 0x8f}, {0x31, 0x59}, {0x32, 0x0a}, {0x33, 0x15}, {0x34, 0x5b}, {0x35, 0x06}, {0x36, 0x07}, {0x37, 0x40}, {0x38, 0x87}, //86 {0x40, 0x92}, {0x41, 0x1b}, {0x42, 0x89}, {0x43, 0x81}, {0x44, 0x00}, {0x45, 0x01}, {0x46, 0x89}, {0x47, 0x9e}, {0x48, 0x28}, {0x50, 0x02}, {0x51, 0x82}, {0x52, 0x00}, {0x53, 0x07}, {0x54, 0x11}, {0x55, 0x98}, {0x56, 0x00}, {0x57, 0x0b}, {0x58, 0x8b}, {0x80, 0x03}, {0x85, 0x40}, {0x87, 0x02}, {0x88, 0x00}, {0x89, 0x00}, {0x8a, 0x00}, {0x03, 0x16}, {0x10, 0x31}, {0x18, 0x5e}, // Double_AG 5e->37 {0x19, 0x5d}, // Double_AG 5e->36 {0x1a, 0x0e}, {0x1b, 0x01}, {0x1c, 0xdc}, {0x1d, 0xfe}, {0x30, 0x00}, {0x31, 0x0a}, {0x32, 0x1f}, {0x33, 0x33}, {0x34, 0x53}, {0x35, 0x6c}, {0x36, 0x81}, {0x37, 0x94}, {0x38, 0xa4}, {0x39, 0xb3}, {0x3a, 0xc0}, {0x3b, 0xcb}, {0x3c, 0xd5}, {0x3d, 0xde}, {0x3e, 0xe6}, {0x3f, 0xee}, {0x40, 0xf5}, {0x41, 0xfc}, {0x42, 0xff}, {0x50, 0x00}, {0x51, 0x09}, {0x52, 0x1f}, {0x53, 0x37}, {0x54, 0x5b}, {0x55, 0x76}, {0x56, 0x8d}, {0x57, 0xa1}, {0x58, 0xb2}, {0x59, 0xbe}, {0x5a, 0xc9}, {0x5b, 0xd2}, {0x5c, 0xdb}, {0x5d, 0xe3}, {0x5e, 0xeb}, {0x5f, 0xf0}, {0x60, 0xf5}, {0x61, 0xf7}, {0x62, 0xf8}, {0x70, 0x00}, {0x71, 0x08}, {0x72, 0x17}, {0x73, 0x2f}, {0x74, 0x53}, {0x75, 0x6c}, {0x76, 0x81}, {0x77, 0x94}, {0x78, 0xa4}, {0x79, 0xb3}, {0x7a, 0xc0}, {0x7b, 0xcb}, {0x7c, 0xd5}, {0x7d, 0xde}, {0x7e, 0xe6}, {0x7f, 0xee}, {0x80, 0xf4}, {0x81, 0xfa}, {0x82, 0xff}, {0x03, 0x17}, {0x10, 0xf7}, {0x03, 0x18}, {0x12, 0x20}, {0x10, 0x07}, {0x11, 0x00}, {0x20, 0x05}, {0x21, 0x20}, {0x22, 0x03}, {0x23, 0xd8}, {0x24, 0x00}, {0x25, 0x10}, {0x26, 0x00}, {0x27, 0x0c}, {0x28, 0x05}, {0x29, 0x10}, {0x2a, 0x03}, {0x2b, 0xcc}, {0x2c, 0x09}, {0x2d, 0xc1}, {0x2e, 0x09}, {0x2f, 0xc1}, {0x30, 0x41}, {0x03, 0x20}, {0x11, 0x1c}, {0x18, 0x30}, {0x1a, 0x08}, {0x20, 0x01}, //05_lowtemp Y Mean off {0x21, 0x30}, {0x22, 0x10}, {0x23, 0x00}, {0x24, 0x00}, //Uniform Scene Off {0x28, 0xe7}, {0x29, 0x0d}, //20100305 ad->0d {0x2a, 0xff}, {0x2b, 0x04}, //f4->Adaptive off {0x2c, 0xc2}, {0x2d, 0xcf}, //ff->AE Speed option {0x2e, 0x33}, {0x30, 0x78}, //f8 {0x32, 0x03}, {0x33, 0x2e}, {0x34, 0x30}, {0x35, 0xd4}, {0x36, 0xfe}, {0x37, 0x32}, {0x38, 0x04}, {0x39, 0x22}, //AE_escapeC10 {0x3a, 0xde}, //AE_escapeC11 {0x3b, 0x22}, //AE_escapeC1 {0x3c, 0xde}, //AE_escapeC2 {0x50, 0x45}, {0x51, 0x88}, {0x56, 0x03}, {0x57, 0xf7}, {0x58, 0x14}, {0x59, 0x88}, {0x5a, 0x04}, {0x60, 0x55}, // AEWGT1{0x61, 0x55}, // AEWGT2{0x62, 0x6a}, // AEWGT3{0x63, 0xa9}, // AEWGT4{0x64, 0x6a}, // AEWGT5{0x65, 0xa9}, // AEWGT6{0x66, 0x6a}, // AEWGT7{0x67, 0xa9}, // AEWGT8{0x68, 0x6b}, // AEWGT9{0x69, 0xe9}, // AEWGT10{0x6a, 0x6a}, // AEWGT11{0x6b, 0xa9}, // AEWGT12{0x6c, 0x6a}, // AEWGT13{0x6d, 0xa9}, // AEWGT14{0x6e, 0x55}, // AEWGT15{0x6f, 0x55}, // AEWGT16{0x70, 0x70}, //6e{0x71, 0x00}, //82(+8)->+0{0x76, 0x43}, {0x77, 0xe2}, //04{0x78, 0x23}, //Yth1{0x79, 0x42}, //Yth2{0x7a, 0x23}, //23{0x7b, 0x22}, //22{0x7d, 0x23}, {0x83, 0x01}, //EXP Normal 33.33 fps {0x84, 0xb7}, {0x85, 0x74}, {0x86, 0x01}, //EXPMin 5859.38 fps{0x87, 0xf4}, {0x88, 0x05}, //EXP Max 10.00 fps {0x89, 0xb8}, {0x8a, 0xd8}, {0x8B, 0x49}, //EXP100 {0x8C, 0x3e}, {0x8D, 0x3c}, //EXP120 {0x8E, 0x8c}, {0x9c, 0x17}, //EXP Limit 488.28 fps {0x9d, 0x70}, {0x9e, 0x01}, //EXP Unit {0x9f, 0xf4}, //AE_Middle Time option//{0xa0, 0x03}, //{0xa1, 0xa9}, //{0xa2, 0x80}, {0xb0, 0x18}, {0xb1, 0x14}, //ADC 400->560{0xb2, 0xa0}, //d0{0xb3, 0x18}, {0xb4, 0x1a}, {0xb5, 0x44}, {0xb6, 0x2f}, {0xb7, 0x28}, {0xb8, 0x25}, {0xb9, 0x22}, {0xba, 0x21}, {0xbb, 0x20}, {0xbc, 0x1f}, {0xbd, 0x1f}, //AE_Adaptive Time option//{0xc0, 0x10}, //{0xc1, 0x2b}, //{0xc2, 0x2b}, //{0xc3, 0x2b}, //{0xc4, 0x08}, {0xc8, 0x80}, {0xc9, 0x40}, /////// PAGE 22 START ///////{0x03, 0x22}, {0x10, 0xfd}, {0x11, 0x2e}, {0x19, 0x01}, // Low On //{0x20, 0x30}, {0x21, 0x80}, {0x24, 0x01}, //{0x25, 0x00}, //7f New Lock Cond & New light stable{0x30, 0x80}, {0x31, 0x80}, {0x38, 0x11}, {0x39, 0x34}, {0x40, 0xf4}, {0x41, 0x55}, //44{0x42, 0x33}, //43{0x43, 0xf6}, {0x44, 0x55}, //44{0x45, 0x44}, //33{0x46, 0x00}, {0x50, 0xb2}, {0x51, 0x81}, {0x52, 0x98}, {0x80, 0x40}, //3e{0x81, 0x20}, {0x82, 0x3e}, {0x83, 0x5e}, //5e{0x84, 0x1e}, //24{0x85, 0x5e}, //54 //56 //5a{0x86, 0x22}, //24 //22{0x87, 0x49}, {0x88, 0x39}, {0x89, 0x37}, //38{0x8a, 0x28}, //2a{0x8b, 0x41}, //47{0x8c, 0x39}, {0x8d, 0x34}, {0x8e, 0x28}, //2c{0x8f, 0x53}, //4e{0x90, 0x52}, //4d{0x91, 0x51}, //4c{0x92, 0x4e}, //4a{0x93, 0x4a}, //46{0x94, 0x45}, {0x95, 0x3d}, {0x96, 0x31}, {0x97, 0x28}, {0x98, 0x24}, {0x99, 0x20}, {0x9a, 0x20}, {0x9b, 0x77}, {0x9c, 0x77}, {0x9d, 0x48}, {0x9e, 0x38}, {0x9f, 0x30}, {0xa0, 0x60}, {0xa1, 0x34}, {0xa2, 0x6f}, {0xa3, 0xff}, {0xa4, 0x14}, //1500fps{0xa5, 0x2c}, // 700fps{0xa6, 0xcf}, {0xad, 0x40}, {0xae, 0x4a}, {0xaf, 0x28}, // low temp Rgain{0xb0, 0x26}, // low temp Rgain{0xb1, 0x00}, //0x20 -> 0x00 0405 modify{0xb4, 0xea}, {0xb8, 0xa0}, //a2: b-2, R+2 //b4 B-3, R+4 lowtemp{0xb9, 0x00}, /////// PAGE 20 ///////{0x03, 0x20}, {0x10, 0x8c}, // PAGE 20{0x03, 0x20}, //page 20{0x10, 0x9c}, //ae off// PAGE 22{0x03, 0x22}, //page 22{0x10, 0xe9}, //awb off// PAGE 0{0x03, 0x00}, {0x0e, 0x03}, //PLL On{0x0e, 0x73}, //PLLx2{0x03, 0x00}, // Dummy 750us{0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, /* start {0x03, 0x20},{0x03, 0x00},{0x20, 0x00}, {0x21, 0x0a}, {0x22, 0x00}, {0x23, 0x0a}, {0x40, 0x01}, //360{0x41, 0x68}, {0x42, 0x00},{0x43, 0x14},{0x03, 0x10},{0x3f, 0x00},//Page12{0x03, 0x12},{0x20, 0x0f},{0x21, 0x0f},{0x90, 0x5d},//Page13{0x03, 0x13},{0x80, 0xfd},// 1600*1200{0x03,0x00},{0x10,0x00},{0x03, 0x00}, {0x12, 0x21},{0x03, 0x20}, {0x86, 0x01},{0x87, 0xf4},{0x8b, 0x3a},{0x8c, 0x98},{0x8d, 0x30},{0x8e, 0xd4},{0x9c, 0x17},{0x9d, 0x70},{0x9e, 0x01},{0x9f, 0xf4},{0x03, 0x20}, {0x03, 0x00}, end*/{0x03, 0x00}, // Page 0{0x01, 0xf8}, // Sleep Off 0xf8->0x50 for solve green line issue};static struct sensor_reg hi253_setting_15fps_XGA_1024_768[] = { /* * Only support 7.5fps for QXGA to workaround screen tearing issue * for 15fps when capturing still image. */{0x01, 0xf9}, //sleep on {0x08, 0x0f}, //Hi-Z on {0x01, 0xf8}, //sleep off {0x03, 0x00}, // Dummy 750us START {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, // Dummy 750us END {0x0e, 0x03}, //PLL On {0x0e, 0x73}, //PLLx2 {0x03, 0x00}, // Dummy 750us START {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, // Dummy 750us END {0x0e, 0x00}, //PLL off {0x01, 0xf1}, //sleep on {0x08, 0x00}, //Hi-Z off {0x01, 0xf3}, {0x01, 0xf1}, {0x03, 0x20}, //page 20 {0x10, 0x1c}, //ae off {0x03, 0x22}, //page 22 {0x10, 0x69}, //awb off {0x03, 0x00}, {0x10, 0x11}, // Sub1/2_Preview2 Mode_H binning {0x11, 0x91}, {0x12, 0x20}, //21 {0x0b, 0xaa}, // ESD Check Register {0x0c, 0xaa}, // ESD Check Register {0x0d, 0xaa}, // ESD Check Register {0x20, 0x00}, // Windowing start point Y {0x21, 0x04}, {0x22, 0x00}, // Windowing start point X {0x23, 0x07}, {0x24, 0x04}, {0x25, 0xb0}, {0x26, 0x06}, {0x27, 0x40}, // WINROW END {0x40, 0x01}, //Hblank 408 {0x41, 0x68}, {0x42, 0x00}, //Vblank 20 {0x43, 0x14}, {0x45, 0x04}, {0x46, 0x18}, {0x47, 0xd8}, {0x80, 0x2e}, {0x81, 0x7e}, {0x82, 0x90}, {0x83, 0x00}, {0x84, 0x0c}, {0x85, 0x00}, {0x90, 0x14}, //BLC_TIME_TH_ON {0x91, 0x14}, //BLC_TIME_TH_OFF {0x92, 0x98}, //BLC_AG_TH_ON {0x93, 0x90}, //BLC_AG_TH_OFF {0x94, 0x75}, {0x95, 0x70}, {0x96, 0xdc}, {0x97, 0xfe}, {0x98, 0x38}, {0x99, 0x43}, {0x9a, 0x43}, {0x9b, 0x43}, {0x9c, 0x43}, {0xa0, 0x00}, {0xa2, 0x00}, {0xa4, 0x00}, {0xa6, 0x00}, {0xa8, 0x43}, {0xaa, 0x43}, {0xac, 0x43}, {0xae, 0x43}, {0x03, 0x02}, {0x12, 0x03}, {0x13, 0x03}, {0x16, 0x00}, {0x17, 0x8C}, {0x18, 0x4c}, //Double_AG off {0x19, 0x00}, {0x1a, 0x39}, //ADC400->560 {0x1c, 0x09}, {0x1d, 0x40}, {0x1e, 0x30}, {0x1f, 0x10}, {0x20, 0x77}, {0x21, 0xde}, {0x22, 0xa7}, {0x23, 0x30}, //CLAMP {0x27, 0x3c}, {0x2b, 0x80}, {0x2e, 0x11}, {0x2f, 0xa1}, {0x30, 0x05}, //For Hi-253 never no change 0x05 {0x50, 0x20}, {0x52, 0x01}, {0x55, 0x1c}, {0x56, 0x11}, {0x5d, 0xa2}, {0x5e, 0x5a}, {0x60, 0x87}, {0x61, 0x99}, {0x62, 0x88}, {0x63, 0x97}, {0x64, 0x88}, {0x65, 0x97}, {0x67, 0x0c}, {0x68, 0x0c}, {0x69, 0x0c}, {0x72, 0x89}, {0x73, 0x96}, {0x74, 0x89}, {0x75, 0x96}, {0x76, 0x89}, {0x77, 0x96}, {0x7c, 0x85}, {0x7d, 0xaf}, {0x80, 0x01}, {0x81, 0x7f}, {0x82, 0x13}, {0x83, 0x24}, {0x84, 0x7d}, {0x85, 0x81}, {0x86, 0x7d}, {0x87, 0x81}, {0x92, 0x48}, {0x93, 0x54}, {0x94, 0x7d}, {0x95, 0x81}, {0x96, 0x7d}, {0x97, 0x81}, {0xa0, 0x02}, {0xa1, 0x7b}, {0xa2, 0x02}, {0xa3, 0x7b}, {0xa4, 0x7b}, {0xa5, 0x02}, {0xa6, 0x7b}, {0xa7, 0x02}, {0xa8, 0x85}, {0xa9, 0x8c}, {0xaa, 0x85}, {0xab, 0x8c}, {0xac, 0x10}, {0xad, 0x16}, {0xae, 0x10}, {0xaf, 0x16}, {0xb0, 0x99}, {0xb1, 0xa3}, {0xb2, 0xa4}, {0xb3, 0xae}, {0xb4, 0x9b}, {0xb5, 0xa2}, {0xb6, 0xa6}, {0xb7, 0xac}, {0xb8, 0x9b}, {0xb9, 0x9f}, {0xba, 0xa6}, {0xbb, 0xaa}, {0xbc, 0x9b}, {0xbd, 0x9f}, {0xbe, 0xa6}, {0xbf, 0xaa}, {0xc4, 0x2c}, {0xc5, 0x43}, {0xc6, 0x63}, {0xc7, 0x79}, {0xc8, 0x2d}, {0xc9, 0x42}, {0xca, 0x2d}, {0xcb, 0x42}, {0xcc, 0x64}, {0xcd, 0x78}, {0xce, 0x64}, {0xcf, 0x78}, {0xd0, 0x0a}, {0xd1, 0x09}, {0xd4, 0x14}, //DCDC_TIME_TH_ON {0xd5, 0x14}, //DCDC_TIME_TH_OFF {0xd6, 0x98}, //DCDC_AG_TH_ON {0xd7, 0x90}, //DCDC_AG_TH_OFF {0xe0, 0xc4}, {0xe1, 0xc4}, {0xe2, 0xc4}, {0xe3, 0xc4}, {0xe4, 0x00}, {0xe8, 0x80}, {0xe9, 0x40}, {0xea, 0x7f}, {0x03, 0x03}, {0x10, 0x10}, {0x03, 0x10}, {0x10, 0x01}, // CrYCbY // For Demoset 0x03 {0x12, 0x30}, {0x13, 0x0a}, // contrast on {0x20, 0x00}, {0x30, 0x00}, {0x31, 0x00}, {0x32, 0x00}, {0x33, 0x00}, {0x34, 0x30}, {0x35, 0x00}, {0x36, 0x00}, {0x38, 0x00}, {0x3e, 0x58}, {0x3f, 0x00}, {0x40, 0x80}, // YOFS {0x41, 0x10}, // DYOFS {0x48, 0x84}, // Contrast {0x50, 0x90}, // Contrast {0x60, 0x6c}, //67 {0x61, 0x70}, //7e //8e //88 //80 {0x62, 0x68}, //7e //8e //88 //80 {0x63, 0x50}, //Double_AG 50->30 {0x64, 0x41}, {0x66, 0x42}, {0x67, 0x20}, {0x6a, 0x80}, //8a {0x6b, 0x84}, //74 {0x6c, 0x80}, //7e //7a {0x6d, 0x80}, //8e {0x03, 0x11}, {0x10, 0x7f}, {0x11, 0x40}, {0x12, 0x0a}, /* Blue Max-Filter Delete*/ {0x13, 0xbb}, {0x26, 0x31}, /* Double_AG 31->20*/ {0x27, 0x34}, /* Double_AG 34->22*/ {0x28, 0x0f}, {0x29, 0x10}, {0x2b, 0x30}, {0x2c, 0x32}, {0x30, 0x70}, {0x31, 0x10}, {0x32, 0x58}, {0x33, 0x09}, {0x34, 0x06}, {0x35, 0x03}, {0x36, 0x70}, {0x37, 0x18}, {0x38, 0x58}, {0x39, 0x09}, {0x3a, 0x06}, {0x3b, 0x03}, {0x3c, 0x80}, {0x3d, 0x18}, {0x3e, 0x83}, /*80*/ {0x3f, 0x0c}, {0x40, 0x03}, {0x41, 0x06}, {0x42, 0x80}, {0x43, 0x18}, {0x44, 0x83}, /*80*/ {0x45, 0x12}, {0x46, 0x10}, {0x47, 0x10}, {0x48, 0x90}, {0x49, 0x40}, {0x4a, 0x80}, {0x4b, 0x13}, {0x4c, 0x10}, {0x4d, 0x11}, {0x4e, 0x80}, {0x4f, 0x30}, {0x50, 0x80}, {0x51, 0x13}, {0x52, 0x10}, {0x53, 0x13}, {0x54, 0x11}, {0x55, 0x17}, {0x56, 0x20}, {0x57, 0x01}, {0x58, 0x00}, {0x59, 0x00}, {0x5a, 0x1f}, /*18*/ {0x5b, 0x00}, {0x5c, 0x00}, {0x60, 0x3f}, {0x62, 0x60}, {0x70, 0x06}, {0x03, 0x12}, {0x20, 0x00}, {0x21, 0x00}, {0x25, 0x00}, {0x28, 0x00}, {0x29, 0x00}, {0x2a, 0x00}, {0x30, 0x50}, {0x31, 0x18}, {0x32, 0x32}, {0x33, 0x40}, {0x34, 0x50}, {0x35, 0x70}, {0x36, 0xa0}, {0x40, 0xa0}, {0x41, 0x40}, {0x42, 0xa0}, {0x43, 0x90}, {0x44, 0x90}, {0x45, 0x80}, {0x46, 0xb0}, {0x47, 0x55}, {0x48, 0xa0}, {0x49, 0x90}, {0x4a, 0x90}, {0x4b, 0x80}, {0x4c, 0xb0}, {0x4d, 0x40}, {0x4e, 0x90}, {0x4f, 0x90}, {0x50, 0xa0}, {0x51, 0x60}, {0x52, 0xb0}, {0x53, 0x60}, {0x54, 0xc0}, {0x55, 0xc0}, {0x56, 0x80}, {0x57, 0x57}, {0x58, 0x90}, {0x59, 0x40}, {0x5a, 0xd0}, {0x5b, 0xd0}, {0x5c, 0xe0}, {0x5d, 0x80}, {0x5e, 0x88}, {0x5f, 0x40}, {0x60, 0xe0}, {0x61, 0xe0}, {0x62, 0xe0}, {0x63, 0x80}, {0x70, 0x15}, {0x71, 0x01}, /*Don't Touch register*/ {0x72, 0x18}, {0x73, 0x01}, /*Don't Touch register*/ {0x74, 0x25}, {0x75, 0x15}, {0x80, 0x20}, {0x81, 0x40}, {0x82, 0x65}, {0x85, 0x1a}, {0x88, 0x00}, {0x89, 0x00}, {0x90, 0x5d}, /*For Preview*/ /*Dont Touch register*/ {0xD0, 0x0c}, {0xD1, 0x80}, {0xD2, 0x67}, {0xD3, 0x00}, {0xD4, 0x00}, {0xD5, 0x02}, {0xD6, 0xff}, {0xD7, 0x18}, {0x3b, 0x06}, {0x3c, 0x06}, {0xc5, 0x00}, /*55->48*/ {0xc6, 0x00}, /*48->40*/ {0x03, 0x13}, {0x10, 0xcb}, {0x11, 0x7b}, {0x12, 0x07}, {0x14, 0x00}, {0x20, 0x15}, {0x21, 0x13}, {0x22, 0x33}, {0x23, 0x05}, {0x24, 0x09}, {0x25, 0x0a}, {0x26, 0x18}, {0x27, 0x30}, {0x29, 0x12}, {0x2a, 0x50}, {0x2b, 0x02}, {0x2c, 0x02}, {0x25, 0x06}, {0x2d, 0x0c}, {0x2e, 0x12}, {0x2f, 0x12}, {0x50, 0x10}, {0x51, 0x14}, {0x52, 0x12}, {0x53, 0x0c}, {0x54, 0x0f}, {0x55, 0x0c}, {0x56, 0x10}, {0x57, 0x13}, {0x58, 0x12}, {0x59, 0x0c}, {0x5a, 0x0f}, {0x5b, 0x0c}, {0x5c, 0x0a}, {0x5d, 0x0b}, {0x5e, 0x0a}, {0x5f, 0x08}, {0x60, 0x09}, {0x61, 0x08}, {0x62, 0x08}, {0x63, 0x08}, {0x64, 0x08}, {0x65, 0x06}, {0x66, 0x06}, {0x67, 0x06}, {0x68, 0x07}, {0x69, 0x07}, {0x6a, 0x07}, {0x6b, 0x05}, {0x6c, 0x05}, {0x6d, 0x05}, {0x6e, 0x07}, {0x6f, 0x07}, {0x70, 0x07}, {0x71, 0x05}, {0x72, 0x05}, {0x73, 0x05}, {0x80, 0xfd}, {0x81, 0x1f}, {0x82, 0x05}, {0x83, 0x31}, {0x90, 0x05}, {0x91, 0x05}, {0x92, 0x33}, {0x93, 0x30}, {0x94, 0x03}, {0x95, 0x14}, {0x97, 0x20}, {0x99, 0x20}, {0xa0, 0x01}, {0xa1, 0x02}, {0xa2, 0x01}, {0xa3, 0x02}, {0xa4, 0x05}, {0xa5, 0x05}, {0xa6, 0x07}, {0xa7, 0x08}, {0xa8, 0x07}, {0xa9, 0x08}, {0xaa, 0x07}, {0xab, 0x08}, {0xb0, 0x22}, {0xb1, 0x2a}, {0xb2, 0x28}, {0xb3, 0x22}, {0xb4, 0x2a}, {0xb5, 0x28}, {0xb6, 0x22}, {0xb7, 0x2a}, {0xb8, 0x28}, {0xb9, 0x22}, {0xba, 0x2a}, {0xbb, 0x28}, {0xbc, 0x25}, {0xbd, 0x2a}, {0xbe, 0x27}, {0xbf, 0x25}, {0xc0, 0x2a}, {0xc1, 0x27}, {0xc2, 0x1e}, {0xc3, 0x24}, {0xc4, 0x20}, {0xc5, 0x1e}, {0xc6, 0x24}, {0xc7, 0x20}, {0xc8, 0x18}, {0xc9, 0x20}, {0xca, 0x1e}, {0xcb, 0x18}, {0xcc, 0x20}, {0xcd, 0x1e}, {0xce, 0x18}, {0xcf, 0x20}, {0xd0, 0x1e}, {0xd1, 0x18}, {0xd2, 0x20}, {0xd3, 0x1e}, {0x03, 0x14}, {0x10, 0x11}, {0x14, 0x80}, // GX {0x15, 0x80}, // GY {0x16, 0x80}, // RX {0x17, 0x80}, // RY {0x18, 0x80}, // BX {0x19, 0x80}, // BY {0x20, 0x60}, //X 60 //a0 {0x21, 0x80}, //Y {0x22, 0x80}, {0x23, 0x80}, {0x24, 0x80}, {0x30, 0xc8}, {0x31, 0x2b}, {0x32, 0x00}, {0x33, 0x00}, {0x34, 0x90}, {0x40, 0x48}, //31 {0x50, 0x34}, //23 //32 {0x60, 0x29}, // {0x70, 0x34}, //23 //32 {0x03, 0x15}, {0x10, 0x0f}, {0x14, 0x42}, //CMCOFSGH_Day //4c {0x15, 0x32}, //CMCOFSGM_CWF //3c {0x16, 0x24}, //CMCOFSGL_A //2e {0x17, 0x2f}, //CMC SIGN {0x30, 0x8f}, {0x31, 0x59}, {0x32, 0x0a}, {0x33, 0x15}, {0x34, 0x5b}, {0x35, 0x06}, {0x36, 0x07}, {0x37, 0x40}, {0x38, 0x87}, //86 {0x40, 0x92}, {0x41, 0x1b}, {0x42, 0x89}, {0x43, 0x81}, {0x44, 0x00}, {0x45, 0x01}, {0x46, 0x89}, {0x47, 0x9e}, {0x48, 0x28}, {0x50, 0x02}, {0x51, 0x82}, {0x52, 0x00}, {0x53, 0x07}, {0x54, 0x11}, {0x55, 0x98}, {0x56, 0x00}, {0x57, 0x0b}, {0x58, 0x8b}, {0x80, 0x03}, {0x85, 0x40}, {0x87, 0x02}, {0x88, 0x00}, {0x89, 0x00}, {0x8a, 0x00}, {0x03, 0x16}, {0x10, 0x31}, {0x18, 0x5e}, // Double_AG 5e->37 {0x19, 0x5d}, // Double_AG 5e->36 {0x1a, 0x0e}, {0x1b, 0x01}, {0x1c, 0xdc}, {0x1d, 0xfe}, {0x30, 0x00}, {0x31, 0x0a}, {0x32, 0x1f}, {0x33, 0x33}, {0x34, 0x53}, {0x35, 0x6c}, {0x36, 0x81}, {0x37, 0x94}, {0x38, 0xa4}, {0x39, 0xb3}, {0x3a, 0xc0}, {0x3b, 0xcb}, {0x3c, 0xd5}, {0x3d, 0xde}, {0x3e, 0xe6}, {0x3f, 0xee}, {0x40, 0xf5}, {0x41, 0xfc}, {0x42, 0xff}, {0x50, 0x00}, {0x51, 0x09}, {0x52, 0x1f}, {0x53, 0x37}, {0x54, 0x5b}, {0x55, 0x76}, {0x56, 0x8d}, {0x57, 0xa1}, {0x58, 0xb2}, {0x59, 0xbe}, {0x5a, 0xc9}, {0x5b, 0xd2}, {0x5c, 0xdb}, {0x5d, 0xe3}, {0x5e, 0xeb}, {0x5f, 0xf0}, {0x60, 0xf5}, {0x61, 0xf7}, {0x62, 0xf8}, {0x70, 0x00}, {0x71, 0x08}, {0x72, 0x17}, {0x73, 0x2f}, {0x74, 0x53}, {0x75, 0x6c}, {0x76, 0x81}, {0x77, 0x94}, {0x78, 0xa4}, {0x79, 0xb3}, {0x7a, 0xc0}, {0x7b, 0xcb}, {0x7c, 0xd5}, {0x7d, 0xde}, {0x7e, 0xe6}, {0x7f, 0xee}, {0x80, 0xf4}, {0x81, 0xfa}, {0x82, 0xff}, {0x03, 0x17}, {0x10, 0xf7}, {0x03, 0x18}, {0x12, 0x20}, {0x10, 0x07}, {0x11, 0x00}, {0x20, 0x05}, {0x21, 0x20}, {0x22, 0x03}, {0x23, 0xd8}, {0x24, 0x00}, {0x25, 0x10}, {0x26, 0x00}, {0x27, 0x0c}, {0x28, 0x05}, {0x29, 0x10}, {0x2a, 0x03}, {0x2b, 0xcc}, {0x2c, 0x09}, {0x2d, 0xc1}, {0x2e, 0x09}, {0x2f, 0xc1}, {0x30, 0x41}, {0x03, 0x20}, {0x11, 0x1c}, {0x18, 0x30}, {0x1a, 0x08}, {0x20, 0x01}, //05_lowtemp Y Mean off {0x21, 0x30}, {0x22, 0x10}, {0x23, 0x00}, {0x24, 0x00}, //Uniform Scene Off {0x28, 0xe7}, {0x29, 0x0d}, //20100305 ad->0d {0x2a, 0xff}, {0x2b, 0x04}, //f4->Adaptive off {0x2c, 0xc2}, {0x2d, 0xcf}, //ff->AE Speed option {0x2e, 0x33}, {0x30, 0x78}, //f8 {0x32, 0x03}, {0x33, 0x2e}, {0x34, 0x30}, {0x35, 0xd4}, {0x36, 0xfe}, {0x37, 0x32}, {0x38, 0x04}, {0x39, 0x22}, //AE_escapeC10 {0x3a, 0xde}, //AE_escapeC11 {0x3b, 0x22}, //AE_escapeC1 {0x3c, 0xde}, //AE_escapeC2 {0x50, 0x45}, {0x51, 0x88}, {0x56, 0x03}, {0x57, 0xf7}, {0x58, 0x14}, {0x59, 0x88}, {0x5a, 0x04}, {0x60, 0x55}, // AEWGT1{0x61, 0x55}, // AEWGT2{0x62, 0x6a}, // AEWGT3{0x63, 0xa9}, // AEWGT4{0x64, 0x6a}, // AEWGT5{0x65, 0xa9}, // AEWGT6{0x66, 0x6a}, // AEWGT7{0x67, 0xa9}, // AEWGT8{0x68, 0x6b}, // AEWGT9{0x69, 0xe9}, // AEWGT10{0x6a, 0x6a}, // AEWGT11{0x6b, 0xa9}, // AEWGT12{0x6c, 0x6a}, // AEWGT13{0x6d, 0xa9}, // AEWGT14{0x6e, 0x55}, // AEWGT15{0x6f, 0x55}, // AEWGT16{0x70, 0x70}, //6e{0x71, 0x00}, //82(+8)->+0{0x76, 0x43}, {0x77, 0xe2}, //04{0x78, 0x23}, //Yth1{0x79, 0x42}, //Yth2{0x7a, 0x23}, //23{0x7b, 0x22}, //22{0x7d, 0x23}, {0x83, 0x01}, //EXP Normal 33.33 fps {0x84, 0xb7}, {0x85, 0x74}, {0x86, 0x01}, //EXPMin 5859.38 fps{0x87, 0xf4}, {0x88, 0x05}, //EXP Max 10.00 fps {0x89, 0xb8}, {0x8a, 0xd8}, {0x8B, 0x49}, //EXP100 {0x8C, 0x3e}, {0x8D, 0x3c}, //EXP120 {0x8E, 0x8c}, {0x9c, 0x17}, //EXP Limit 488.28 fps {0x9d, 0x70}, {0x9e, 0x01}, //EXP Unit {0x9f, 0xf4}, //AE_Middle Time option//{0xa0, 0x03}, //{0xa1, 0xa9}, //{0xa2, 0x80}, {0xb0, 0x18}, {0xb1, 0x14}, //ADC 400->560{0xb2, 0xa0}, //d0{0xb3, 0x18}, {0xb4, 0x1a}, {0xb5, 0x44}, {0xb6, 0x2f}, {0xb7, 0x28}, {0xb8, 0x25}, {0xb9, 0x22}, {0xba, 0x21}, {0xbb, 0x20}, {0xbc, 0x1f}, {0xbd, 0x1f}, //AE_Adaptive Time option//{0xc0, 0x10}, //{0xc1, 0x2b}, //{0xc2, 0x2b}, //{0xc3, 0x2b}, //{0xc4, 0x08}, {0xc8, 0x80}, {0xc9, 0x40}, /////// PAGE 22 START ///////{0x03, 0x22}, {0x10, 0xfd}, {0x11, 0x2e}, {0x19, 0x01}, // Low On //{0x20, 0x30}, {0x21, 0x80}, {0x24, 0x01}, //{0x25, 0x00}, //7f New Lock Cond & New light stable{0x30, 0x80}, {0x31, 0x80}, {0x38, 0x11}, {0x39, 0x34}, {0x40, 0xf4}, {0x41, 0x55}, //44{0x42, 0x33}, //43{0x43, 0xf6}, {0x44, 0x55}, //44{0x45, 0x44}, //33{0x46, 0x00}, {0x50, 0xb2}, {0x51, 0x81}, {0x52, 0x98}, {0x80, 0x40}, //3e{0x81, 0x20}, {0x82, 0x3e}, {0x83, 0x5e}, //5e{0x84, 0x1e}, //24{0x85, 0x5e}, //54 //56 //5a{0x86, 0x22}, //24 //22{0x87, 0x49}, {0x88, 0x39}, {0x89, 0x37}, //38{0x8a, 0x28}, //2a{0x8b, 0x41}, //47{0x8c, 0x39}, {0x8d, 0x34}, {0x8e, 0x28}, //2c{0x8f, 0x53}, //4e{0x90, 0x52}, //4d{0x91, 0x51}, //4c{0x92, 0x4e}, //4a{0x93, 0x4a}, //46{0x94, 0x45}, {0x95, 0x3d}, {0x96, 0x31}, {0x97, 0x28}, {0x98, 0x24}, {0x99, 0x20}, {0x9a, 0x20}, {0x9b, 0x77}, {0x9c, 0x77}, {0x9d, 0x48}, {0x9e, 0x38}, {0x9f, 0x30}, {0xa0, 0x60}, {0xa1, 0x34}, {0xa2, 0x6f}, {0xa3, 0xff}, {0xa4, 0x14}, //1500fps{0xa5, 0x2c}, // 700fps{0xa6, 0xcf}, {0xad, 0x40}, {0xae, 0x4a}, {0xaf, 0x28}, // low temp Rgain{0xb0, 0x26}, // low temp Rgain{0xb1, 0x00}, //0x20 -> 0x00 0405 modify{0xb4, 0xea}, {0xb8, 0xa0}, //a2: b-2, R+2 //b4 B-3, R+4 lowtemp{0xb9, 0x00}, /////// PAGE 20 ///////{0x03, 0x20}, {0x10, 0x8c}, // PAGE 20{0x03, 0x20}, //page 20{0x10, 0x9c}, //ae off// PAGE 22{0x03, 0x22}, //page 22{0x10, 0xe9}, //awb off// PAGE 0{0x03, 0x00}, {0x0e, 0x03}, //PLL On{0x0e, 0x73}, //PLLx2{0x03, 0x00}, // Dummy 750us{0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, /*1024*768 add by joe*/{0x03, 0x00},{0x10, 0x00},{0x03, 0x18},{0x12, 0x20},{0x10, 0x07},{0x11, 0x00},{0x20, 0x05},{0x21, 0x20},{0x22, 0x03},{0x23, 0xd8},{0x24, 0x00},{0x25, 0x90},{0x26, 0x00},{0x27, 0x6c},{0x28, 0x04},{0x29, 0x90},{0x2a, 0x03},{0x2b, 0x6c},{0x2c, 0x09},{0x2d, 0xc1},{0x2e, 0x09},{0x2f, 0xc1},{0x30, 0x56},{0x03, 0x00}, // Page 0{0x01, 0xf8}, // Sleep Off 0xf8->0x50 for solve green line issue}; static struct sensor_reg hi253_setting_30fps_XGA_1024_768[] = {{0x0, 0x0}};static struct sensor_reg hi253_setting_15fps_VGA_640_480[] = {/* * Only support 7.5fps for QXGA to workaround screen tearing issue * for 15fps when capturing still image. */ {0x01, 0xf9}, //sleep on {0x08, 0x0f}, //Hi-Z on {0x01, 0xf8}, //sleep off {0x03, 0x00}, // Dummy 750us START {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, // Dummy 750us END {0x0e, 0x03}, //PLL On {0x0e, 0x73}, //PLLx2 {0x03, 0x00}, // Dummy 750us START {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, // Dummy 750us END {0x0e, 0x00}, //PLL off {0x01, 0xf1}, //sleep on {0x08, 0x00}, //Hi-Z off {0x01, 0xf3}, {0x01, 0xf1}, {0x03, 0x20}, //page 20 {0x10, 0x1c}, //ae off {0x03, 0x22}, //page 22 {0x10, 0x69}, //awb off {0x03, 0x00}, {0x10, 0x11}, // Sub1/2_Preview2 Mode_H binning {0x11, 0x91}, {0x12, 0x20}, //21 {0x0b, 0xaa}, // ESD Check Register {0x0c, 0xaa}, // ESD Check Register {0x0d, 0xaa}, // ESD Check Register {0x20, 0x00}, // Windowing start point Y {0x21, 0x04}, {0x22, 0x00}, // Windowing start point X {0x23, 0x07}, {0x24, 0x04}, {0x25, 0xb0}, {0x26, 0x06}, {0x27, 0x40}, // WINROW END {0x40, 0x01}, //Hblank 408 {0x41, 0x68}, {0x42, 0x00}, //Vblank 20 {0x43, 0x14}, {0x45, 0x04}, {0x46, 0x18}, {0x47, 0xd8}, {0x80, 0x2e}, {0x81, 0x7e}, {0x82, 0x90}, {0x83, 0x00}, {0x84, 0x0c}, {0x85, 0x00}, {0x90, 0x14}, //BLC_TIME_TH_ON {0x91, 0x14}, //BLC_TIME_TH_OFF {0x92, 0x98}, //BLC_AG_TH_ON {0x93, 0x90}, //BLC_AG_TH_OFF {0x94, 0x75}, {0x95, 0x70}, {0x96, 0xdc}, {0x97, 0xfe}, {0x98, 0x38}, {0x99, 0x43}, {0x9a, 0x43}, {0x9b, 0x43}, {0x9c, 0x43}, {0xa0, 0x00}, {0xa2, 0x00}, {0xa4, 0x00}, {0xa6, 0x00}, {0xa8, 0x43}, {0xaa, 0x43}, {0xac, 0x43}, {0xae, 0x43}, {0x03, 0x02}, {0x12, 0x03}, {0x13, 0x03}, {0x16, 0x00}, {0x17, 0x8C}, {0x18, 0x4c}, //Double_AG off {0x19, 0x00}, {0x1a, 0x39}, //ADC400->560 {0x1c, 0x09}, {0x1d, 0x40}, {0x1e, 0x30}, {0x1f, 0x10}, {0x20, 0x77}, {0x21, 0xde}, {0x22, 0xa7}, {0x23, 0x30}, //CLAMP {0x27, 0x3c}, {0x2b, 0x80}, {0x2e, 0x11}, {0x2f, 0xa1}, {0x30, 0x05}, //For Hi-253 never no change 0x05 {0x50, 0x20}, {0x52, 0x01}, {0x55, 0x1c}, {0x56, 0x11}, {0x5d, 0xa2}, {0x5e, 0x5a}, {0x60, 0x87}, {0x61, 0x99}, {0x62, 0x88}, {0x63, 0x97}, {0x64, 0x88}, {0x65, 0x97}, {0x67, 0x0c}, {0x68, 0x0c}, {0x69, 0x0c}, {0x72, 0x89}, {0x73, 0x96}, {0x74, 0x89}, {0x75, 0x96}, {0x76, 0x89}, {0x77, 0x96}, {0x7c, 0x85}, {0x7d, 0xaf}, {0x80, 0x01}, {0x81, 0x7f}, {0x82, 0x13}, {0x83, 0x24}, {0x84, 0x7d}, {0x85, 0x81}, {0x86, 0x7d}, {0x87, 0x81}, {0x92, 0x48}, {0x93, 0x54}, {0x94, 0x7d}, {0x95, 0x81}, {0x96, 0x7d}, {0x97, 0x81}, {0xa0, 0x02}, {0xa1, 0x7b}, {0xa2, 0x02}, {0xa3, 0x7b}, {0xa4, 0x7b}, {0xa5, 0x02}, {0xa6, 0x7b}, {0xa7, 0x02}, {0xa8, 0x85}, {0xa9, 0x8c}, {0xaa, 0x85}, {0xab, 0x8c}, {0xac, 0x10}, {0xad, 0x16}, {0xae, 0x10}, {0xaf, 0x16}, {0xb0, 0x99}, {0xb1, 0xa3}, {0xb2, 0xa4}, {0xb3, 0xae}, {0xb4, 0x9b}, {0xb5, 0xa2}, {0xb6, 0xa6}, {0xb7, 0xac}, {0xb8, 0x9b}, {0xb9, 0x9f}, {0xba, 0xa6}, {0xbb, 0xaa}, {0xbc, 0x9b}, {0xbd, 0x9f}, {0xbe, 0xa6}, {0xbf, 0xaa}, {0xc4, 0x2c}, {0xc5, 0x43}, {0xc6, 0x63}, {0xc7, 0x79}, {0xc8, 0x2d}, {0xc9, 0x42}, {0xca, 0x2d}, {0xcb, 0x42}, {0xcc, 0x64}, {0xcd, 0x78}, {0xce, 0x64}, {0xcf, 0x78}, {0xd0, 0x0a}, {0xd1, 0x09}, {0xd4, 0x14}, //DCDC_TIME_TH_ON {0xd5, 0x14}, //DCDC_TIME_TH_OFF {0xd6, 0x98}, //DCDC_AG_TH_ON {0xd7, 0x90}, //DCDC_AG_TH_OFF {0xe0, 0xc4}, {0xe1, 0xc4}, {0xe2, 0xc4}, {0xe3, 0xc4}, {0xe4, 0x00}, {0xe8, 0x80}, {0xe9, 0x40}, {0xea, 0x7f}, {0x03, 0x03}, {0x10, 0x10}, {0x03, 0x10}, {0x10, 0x01}, // CrYCbY // For Demoset 0x03 {0x12, 0x30}, {0x13, 0x0a}, // contrast on {0x20, 0x00}, {0x30, 0x00}, {0x31, 0x00}, {0x32, 0x00}, {0x33, 0x00}, {0x34, 0x30}, {0x35, 0x00}, {0x36, 0x00}, {0x38, 0x00}, {0x3e, 0x58}, {0x3f, 0x00}, {0x40, 0x80}, // YOFS {0x41, 0x10}, // DYOFS {0x48, 0x84}, // Contrast {0x50, 0x90}, // Contrast {0x60, 0x6c}, //67 {0x61, 0x70}, //7e //8e //88 //80 {0x62, 0x68}, //7e //8e //88 //80 {0x63, 0x50}, //Double_AG 50->30 {0x64, 0x41}, {0x66, 0x42}, {0x67, 0x20}, {0x6a, 0x80}, //8a {0x6b, 0x84}, //74 {0x6c, 0x80}, //7e //7a {0x6d, 0x80}, //8e {0x03, 0x11}, {0x10, 0x7f}, {0x11, 0x40}, {0x12, 0x0a}, /* Blue Max-Filter Delete*/ {0x13, 0xbb}, {0x26, 0x31}, /* Double_AG 31->20*/ {0x27, 0x34}, /* Double_AG 34->22*/ {0x28, 0x0f}, {0x29, 0x10}, {0x2b, 0x30}, {0x2c, 0x32}, {0x30, 0x70}, {0x31, 0x10}, {0x32, 0x58}, {0x33, 0x09}, {0x34, 0x06}, {0x35, 0x03}, {0x36, 0x70}, {0x37, 0x18}, {0x38, 0x58}, {0x39, 0x09}, {0x3a, 0x06}, {0x3b, 0x03}, {0x3c, 0x80}, {0x3d, 0x18}, {0x3e, 0x83}, /*80*/ {0x3f, 0x0c}, {0x40, 0x03}, {0x41, 0x06}, {0x42, 0x80}, {0x43, 0x18}, {0x44, 0x83}, /*80*/ {0x45, 0x12}, {0x46, 0x10}, {0x47, 0x10}, {0x48, 0x90}, {0x49, 0x40}, {0x4a, 0x80}, {0x4b, 0x13}, {0x4c, 0x10}, {0x4d, 0x11}, {0x4e, 0x80}, {0x4f, 0x30}, {0x50, 0x80}, {0x51, 0x13}, {0x52, 0x10}, {0x53, 0x13}, {0x54, 0x11}, {0x55, 0x17}, {0x56, 0x20}, {0x57, 0x01}, {0x58, 0x00}, {0x59, 0x00}, {0x5a, 0x1f}, /*18*/ {0x5b, 0x00}, {0x5c, 0x00}, {0x60, 0x3f}, {0x62, 0x60}, {0x70, 0x06}, {0x03, 0x12}, {0x20, 0x00}, {0x21, 0x00}, {0x25, 0x00}, {0x28, 0x00}, {0x29, 0x00}, {0x2a, 0x00}, {0x30, 0x50}, {0x31, 0x18}, {0x32, 0x32}, {0x33, 0x40}, {0x34, 0x50}, {0x35, 0x70}, {0x36, 0xa0}, {0x40, 0xa0}, {0x41, 0x40}, {0x42, 0xa0}, {0x43, 0x90}, {0x44, 0x90}, {0x45, 0x80}, {0x46, 0xb0}, {0x47, 0x55}, {0x48, 0xa0}, {0x49, 0x90}, {0x4a, 0x90}, {0x4b, 0x80}, {0x4c, 0xb0}, {0x4d, 0x40}, {0x4e, 0x90}, {0x4f, 0x90}, {0x50, 0xa0}, {0x51, 0x60}, {0x52, 0xb0}, {0x53, 0x60}, {0x54, 0xc0}, {0x55, 0xc0}, {0x56, 0x80}, {0x57, 0x57}, {0x58, 0x90}, {0x59, 0x40}, {0x5a, 0xd0}, {0x5b, 0xd0}, {0x5c, 0xe0}, {0x5d, 0x80}, {0x5e, 0x88}, {0x5f, 0x40}, {0x60, 0xe0}, {0x61, 0xe0}, {0x62, 0xe0}, {0x63, 0x80}, {0x70, 0x15}, {0x71, 0x01}, /*Don't Touch register*/ {0x72, 0x18}, {0x73, 0x01}, /*Don't Touch register*/ {0x74, 0x25}, {0x75, 0x15}, {0x80, 0x20}, {0x81, 0x40}, {0x82, 0x65}, {0x85, 0x1a}, {0x88, 0x00}, {0x89, 0x00}, {0x90, 0x5d}, /*For Preview*/ /*Dont Touch register*/ {0xD0, 0x0c}, {0xD1, 0x80}, {0xD2, 0x67}, {0xD3, 0x00}, {0xD4, 0x00}, {0xD5, 0x02}, {0xD6, 0xff}, {0xD7, 0x18}, {0x3b, 0x06}, {0x3c, 0x06}, {0xc5, 0x00}, /*55->48*/ {0xc6, 0x00}, /*48->40*/ {0x03, 0x13}, {0x10, 0xcb}, {0x11, 0x7b}, {0x12, 0x07}, {0x14, 0x00}, {0x20, 0x15}, {0x21, 0x13}, {0x22, 0x33}, {0x23, 0x05}, {0x24, 0x09}, {0x25, 0x0a}, {0x26, 0x18}, {0x27, 0x30}, {0x29, 0x12}, {0x2a, 0x50}, {0x2b, 0x02}, {0x2c, 0x02}, {0x25, 0x06}, {0x2d, 0x0c}, {0x2e, 0x12}, {0x2f, 0x12}, {0x50, 0x10}, {0x51, 0x14}, {0x52, 0x12}, {0x53, 0x0c}, {0x54, 0x0f}, {0x55, 0x0c}, {0x56, 0x10}, {0x57, 0x13}, {0x58, 0x12}, {0x59, 0x0c}, {0x5a, 0x0f}, {0x5b, 0x0c}, {0x5c, 0x0a}, {0x5d, 0x0b}, {0x5e, 0x0a}, {0x5f, 0x08}, {0x60, 0x09}, {0x61, 0x08}, {0x62, 0x08}, {0x63, 0x08}, {0x64, 0x08}, {0x65, 0x06}, {0x66, 0x06}, {0x67, 0x06}, {0x68, 0x07}, {0x69, 0x07}, {0x6a, 0x07}, {0x6b, 0x05}, {0x6c, 0x05}, {0x6d, 0x05}, {0x6e, 0x07}, {0x6f, 0x07}, {0x70, 0x07}, {0x71, 0x05}, {0x72, 0x05}, {0x73, 0x05}, {0x80, 0xfd}, {0x81, 0x1f}, {0x82, 0x05}, {0x83, 0x31}, {0x90, 0x05}, {0x91, 0x05}, {0x92, 0x33}, {0x93, 0x30}, {0x94, 0x03}, {0x95, 0x14}, {0x97, 0x20}, {0x99, 0x20}, {0xa0, 0x01}, {0xa1, 0x02}, {0xa2, 0x01}, {0xa3, 0x02}, {0xa4, 0x05}, {0xa5, 0x05}, {0xa6, 0x07}, {0xa7, 0x08}, {0xa8, 0x07}, {0xa9, 0x08}, {0xaa, 0x07}, {0xab, 0x08}, {0xb0, 0x22}, {0xb1, 0x2a}, {0xb2, 0x28}, {0xb3, 0x22}, {0xb4, 0x2a}, {0xb5, 0x28}, {0xb6, 0x22}, {0xb7, 0x2a}, {0xb8, 0x28}, {0xb9, 0x22}, {0xba, 0x2a}, {0xbb, 0x28}, {0xbc, 0x25}, {0xbd, 0x2a}, {0xbe, 0x27}, {0xbf, 0x25}, {0xc0, 0x2a}, {0xc1, 0x27}, {0xc2, 0x1e}, {0xc3, 0x24}, {0xc4, 0x20}, {0xc5, 0x1e}, {0xc6, 0x24}, {0xc7, 0x20}, {0xc8, 0x18}, {0xc9, 0x20}, {0xca, 0x1e}, {0xcb, 0x18}, {0xcc, 0x20}, {0xcd, 0x1e}, {0xce, 0x18}, {0xcf, 0x20}, {0xd0, 0x1e}, {0xd1, 0x18}, {0xd2, 0x20}, {0xd3, 0x1e}, {0x03, 0x14}, {0x10, 0x11}, {0x14, 0x80}, // GX {0x15, 0x80}, // GY {0x16, 0x80}, // RX {0x17, 0x80}, // RY {0x18, 0x80}, // BX {0x19, 0x80}, // BY {0x20, 0x60}, //X 60 //a0 {0x21, 0x80}, //Y {0x22, 0x80}, {0x23, 0x80}, {0x24, 0x80}, {0x30, 0xc8}, {0x31, 0x2b}, {0x32, 0x00}, {0x33, 0x00}, {0x34, 0x90}, {0x40, 0x48}, //31 {0x50, 0x34}, //23 //32 {0x60, 0x29}, // {0x70, 0x34}, //23 //32 {0x03, 0x15}, {0x10, 0x0f}, {0x14, 0x42}, //CMCOFSGH_Day //4c {0x15, 0x32}, //CMCOFSGM_CWF //3c {0x16, 0x24}, //CMCOFSGL_A //2e {0x17, 0x2f}, //CMC SIGN {0x30, 0x8f}, {0x31, 0x59}, {0x32, 0x0a}, {0x33, 0x15}, {0x34, 0x5b}, {0x35, 0x06}, {0x36, 0x07}, {0x37, 0x40}, {0x38, 0x87}, //86 {0x40, 0x92}, {0x41, 0x1b}, {0x42, 0x89}, {0x43, 0x81}, {0x44, 0x00}, {0x45, 0x01}, {0x46, 0x89}, {0x47, 0x9e}, {0x48, 0x28}, {0x50, 0x02}, {0x51, 0x82}, {0x52, 0x00}, {0x53, 0x07}, {0x54, 0x11}, {0x55, 0x98}, {0x56, 0x00}, {0x57, 0x0b}, {0x58, 0x8b}, {0x80, 0x03}, {0x85, 0x40}, {0x87, 0x02}, {0x88, 0x00}, {0x89, 0x00}, {0x8a, 0x00}, {0x03, 0x16}, {0x10, 0x31}, {0x18, 0x5e}, // Double_AG 5e->37 {0x19, 0x5d}, // Double_AG 5e->36 {0x1a, 0x0e}, {0x1b, 0x01}, {0x1c, 0xdc}, {0x1d, 0xfe}, {0x30, 0x00}, {0x31, 0x0a}, {0x32, 0x1f}, {0x33, 0x33}, {0x34, 0x53}, {0x35, 0x6c}, {0x36, 0x81}, {0x37, 0x94}, {0x38, 0xa4}, {0x39, 0xb3}, {0x3a, 0xc0}, {0x3b, 0xcb}, {0x3c, 0xd5}, {0x3d, 0xde}, {0x3e, 0xe6}, {0x3f, 0xee}, {0x40, 0xf5}, {0x41, 0xfc}, {0x42, 0xff}, {0x50, 0x00}, {0x51, 0x09}, {0x52, 0x1f}, {0x53, 0x37}, {0x54, 0x5b}, {0x55, 0x76}, {0x56, 0x8d}, {0x57, 0xa1}, {0x58, 0xb2}, {0x59, 0xbe}, {0x5a, 0xc9}, {0x5b, 0xd2}, {0x5c, 0xdb}, {0x5d, 0xe3}, {0x5e, 0xeb}, {0x5f, 0xf0}, {0x60, 0xf5}, {0x61, 0xf7}, {0x62, 0xf8}, {0x70, 0x00}, {0x71, 0x08}, {0x72, 0x17}, {0x73, 0x2f}, {0x74, 0x53}, {0x75, 0x6c}, {0x76, 0x81}, {0x77, 0x94}, {0x78, 0xa4}, {0x79, 0xb3}, {0x7a, 0xc0}, {0x7b, 0xcb}, {0x7c, 0xd5}, {0x7d, 0xde}, {0x7e, 0xe6}, {0x7f, 0xee}, {0x80, 0xf4}, {0x81, 0xfa}, {0x82, 0xff}, {0x03, 0x17}, {0x10, 0xf7}, {0x03, 0x18}, {0x12, 0x20}, {0x10, 0x07}, {0x11, 0x00}, {0x20, 0x05}, {0x21, 0x20}, {0x22, 0x03}, {0x23, 0xd8}, {0x24, 0x00}, {0x25, 0x10}, {0x26, 0x00}, {0x27, 0x0c}, {0x28, 0x05}, {0x29, 0x10}, {0x2a, 0x03}, {0x2b, 0xcc}, {0x2c, 0x09}, {0x2d, 0xc1}, {0x2e, 0x09}, {0x2f, 0xc1}, {0x30, 0x41}, {0x03, 0x20}, {0x11, 0x1c}, {0x18, 0x30}, {0x1a, 0x08}, {0x20, 0x01}, //05_lowtemp Y Mean off {0x21, 0x30}, {0x22, 0x10}, {0x23, 0x00}, {0x24, 0x00}, //Uniform Scene Off {0x28, 0xe7}, {0x29, 0x0d}, //20100305 ad->0d {0x2a, 0xff}, {0x2b, 0x04}, //f4->Adaptive off {0x2c, 0xc2}, {0x2d, 0xcf}, //ff->AE Speed option {0x2e, 0x33}, {0x30, 0x78}, //f8 {0x32, 0x03}, {0x33, 0x2e}, {0x34, 0x30}, {0x35, 0xd4}, {0x36, 0xfe}, {0x37, 0x32}, {0x38, 0x04}, {0x39, 0x22}, //AE_escapeC10 {0x3a, 0xde}, //AE_escapeC11 {0x3b, 0x22}, //AE_escapeC1 {0x3c, 0xde}, //AE_escapeC2 {0x50, 0x45}, {0x51, 0x88}, {0x56, 0x03}, {0x57, 0xf7}, {0x58, 0x14}, {0x59, 0x88}, {0x5a, 0x04}, {0x60, 0x55}, // AEWGT1{0x61, 0x55}, // AEWGT2{0x62, 0x6a}, // AEWGT3{0x63, 0xa9}, // AEWGT4{0x64, 0x6a}, // AEWGT5{0x65, 0xa9}, // AEWGT6{0x66, 0x6a}, // AEWGT7{0x67, 0xa9}, // AEWGT8{0x68, 0x6b}, // AEWGT9{0x69, 0xe9}, // AEWGT10{0x6a, 0x6a}, // AEWGT11{0x6b, 0xa9}, // AEWGT12{0x6c, 0x6a}, // AEWGT13{0x6d, 0xa9}, // AEWGT14{0x6e, 0x55}, // AEWGT15{0x6f, 0x55}, // AEWGT16{0x70, 0x70}, //6e{0x71, 0x00}, //82(+8)->+0{0x76, 0x43}, {0x77, 0xe2}, //04{0x78, 0x23}, //Yth1{0x79, 0x42}, //Yth2{0x7a, 0x23}, //23{0x7b, 0x22}, //22{0x7d, 0x23}, {0x83, 0x01}, //EXP Normal 33.33 fps {0x84, 0xb7}, {0x85, 0x74}, {0x86, 0x01}, //EXPMin 5859.38 fps{0x87, 0xf4}, {0x88, 0x05}, //EXP Max 10.00 fps {0x89, 0xb8}, {0x8a, 0xd8}, {0x8B, 0x49}, //EXP100 {0x8C, 0x3e}, {0x8D, 0x3c}, //EXP120 {0x8E, 0x8c}, {0x9c, 0x17}, //EXP Limit 488.28 fps {0x9d, 0x70}, {0x9e, 0x01}, //EXP Unit {0x9f, 0xf4}, //AE_Middle Time option//{0xa0, 0x03}, //{0xa1, 0xa9}, //{0xa2, 0x80}, {0xb0, 0x18}, {0xb1, 0x14}, //ADC 400->560{0xb2, 0xa0}, //d0{0xb3, 0x18}, {0xb4, 0x1a}, {0xb5, 0x44}, {0xb6, 0x2f}, {0xb7, 0x28}, {0xb8, 0x25}, {0xb9, 0x22}, {0xba, 0x21}, {0xbb, 0x20}, {0xbc, 0x1f}, {0xbd, 0x1f}, //AE_Adaptive Time option//{0xc0, 0x10}, //{0xc1, 0x2b}, //{0xc2, 0x2b}, //{0xc3, 0x2b}, //{0xc4, 0x08}, {0xc8, 0x80}, {0xc9, 0x40}, /////// PAGE 22 START ///////{0x03, 0x22}, {0x10, 0xfd}, {0x11, 0x2e}, {0x19, 0x01}, // Low On //{0x20, 0x30}, {0x21, 0x80}, {0x24, 0x01}, //{0x25, 0x00}, //7f New Lock Cond & New light stable{0x30, 0x80}, {0x31, 0x80}, {0x38, 0x11}, {0x39, 0x34}, {0x40, 0xf4}, {0x41, 0x55}, //44{0x42, 0x33}, //43{0x43, 0xf6}, {0x44, 0x55}, //44{0x45, 0x44}, //33{0x46, 0x00}, {0x50, 0xb2}, {0x51, 0x81}, {0x52, 0x98}, {0x80, 0x40}, //3e{0x81, 0x20}, {0x82, 0x3e}, {0x83, 0x5e}, //5e{0x84, 0x1e}, //24{0x85, 0x5e}, //54 //56 //5a{0x86, 0x22}, //24 //22{0x87, 0x49}, {0x88, 0x39}, {0x89, 0x37}, //38{0x8a, 0x28}, //2a{0x8b, 0x41}, //47{0x8c, 0x39}, {0x8d, 0x34}, {0x8e, 0x28}, //2c{0x8f, 0x53}, //4e{0x90, 0x52}, //4d{0x91, 0x51}, //4c{0x92, 0x4e}, //4a{0x93, 0x4a}, //46{0x94, 0x45}, {0x95, 0x3d}, {0x96, 0x31}, {0x97, 0x28}, {0x98, 0x24}, {0x99, 0x20}, {0x9a, 0x20}, {0x9b, 0x77}, {0x9c, 0x77}, {0x9d, 0x48}, {0x9e, 0x38}, {0x9f, 0x30}, {0xa0, 0x60}, {0xa1, 0x34}, {0xa2, 0x6f}, {0xa3, 0xff}, {0xa4, 0x14}, //1500fps{0xa5, 0x2c}, // 700fps{0xa6, 0xcf}, {0xad, 0x40}, {0xae, 0x4a}, {0xaf, 0x28}, // low temp Rgain{0xb0, 0x26}, // low temp Rgain{0xb1, 0x00}, //0x20 -> 0x00 0405 modify{0xb4, 0xea}, {0xb8, 0xa0}, //a2: b-2, R+2 //b4 B-3, R+4 lowtemp{0xb9, 0x00}, /////// PAGE 20 ///////{0x03, 0x20}, {0x10, 0x8c}, // PAGE 20{0x03, 0x20}, //page 20{0x10, 0x9c}, //ae off// PAGE 22{0x03, 0x22}, //page 22{0x10, 0xe9}, //awb off// PAGE 0{0x03, 0x00}, {0x0e, 0x03}, //PLL On{0x0e, 0x73}, //PLLx2{0x03, 0x00}, // Dummy 750us{0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, /*640*480 */{0x03, 0x00},{0x10, 0x11},//{0x20, 0x00},{0x21, 0x07},{0x22, 0x00},{0x23, 0x20},{0x24, 0x03},{0x25, 0xc0},{0x26, 0x05},{0x27, 0x00},{0x03, 0x18},{0x10, 0x07},{0x11, 0x00},{0x12, 0x20},{0x20, 0x05},{0x21, 0x00},{0x22, 0x03},{0x23, 0xc0},{0x24, 0x00},{0x25, 0x04},{0x26, 0x00},{0x27, 0x04},{0x28, 0x05},{0x29, 0x04},{0x2a, 0x03},{0x2b, 0xc4},{0x2c, 0x0a},{0x2d, 0x00},{0x2e, 0x0a},{0x2f, 0x00},{0x30, 0x41}, //41->44{0x03, 0x00}, // Page 0{0x01, 0xf8}, // Sleep Off 0xf8->0x50 for solve green line issue};static struct sensor_reg hi253_setting_30fps_VGA_640_480[] = {/* * Only support 7.5fps for QXGA to workaround screen tearing issue * for 15fps when capturing still image. */{0x01, 0xf9}, //sleep on {0x08, 0x0f}, //Hi-Z on {0x01, 0xf8}, //sleep off {0x03, 0x00}, // Dummy 750us START {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, // Dummy 750us END {0x0e, 0x03}, //PLL On {0x0e, 0x73}, //PLLx2 {0x03, 0x00}, // Dummy 750us START {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, // Dummy 750us END {0x0e, 0x00}, //PLL off {0x01, 0xf1}, //sleep on {0x08, 0x00}, //Hi-Z off {0x01, 0xf3}, {0x01, 0xf1}, {0x03, 0x20}, //page 20 {0x10, 0x1c}, //ae off {0x03, 0x22}, //page 22 {0x10, 0x69}, //awb off {0x03, 0x00}, {0x10, 0x11}, // Sub1/2_Preview2 Mode_H binning {0x11, 0x91}, {0x12, 0x20}, //21 {0x0b, 0xaa}, // ESD Check Register {0x0c, 0xaa}, // ESD Check Register {0x0d, 0xaa}, // ESD Check Register {0x20, 0x00}, // Windowing start point Y {0x21, 0x04}, {0x22, 0x00}, // Windowing start point X {0x23, 0x07}, {0x24, 0x04}, {0x25, 0xb0}, {0x26, 0x06}, {0x27, 0x40}, // WINROW END {0x40, 0x01}, //Hblank 408 {0x41, 0x68}, {0x42, 0x00}, //Vblank 20 {0x43, 0x14}, {0x45, 0x04}, {0x46, 0x18}, {0x47, 0xd8}, {0x80, 0x2e}, {0x81, 0x7e}, {0x82, 0x90}, {0x83, 0x00}, {0x84, 0x0c}, {0x85, 0x00}, {0x90, 0x14}, //BLC_TIME_TH_ON {0x91, 0x14}, //BLC_TIME_TH_OFF {0x92, 0x98}, //BLC_AG_TH_ON {0x93, 0x90}, //BLC_AG_TH_OFF {0x94, 0x75}, {0x95, 0x70}, {0x96, 0xdc}, {0x97, 0xfe}, {0x98, 0x38}, {0x99, 0x43}, {0x9a, 0x43}, {0x9b, 0x43}, {0x9c, 0x43}, {0xa0, 0x00}, {0xa2, 0x00}, {0xa4, 0x00}, {0xa6, 0x00}, {0xa8, 0x43}, {0xaa, 0x43}, {0xac, 0x43}, {0xae, 0x43}, {0x03, 0x02}, {0x12, 0x03}, {0x13, 0x03}, {0x16, 0x00}, {0x17, 0x8C}, {0x18, 0x4c}, //Double_AG off {0x19, 0x00}, {0x1a, 0x39}, //ADC400->560 {0x1c, 0x09}, {0x1d, 0x40}, {0x1e, 0x30}, {0x1f, 0x10}, {0x20, 0x77}, {0x21, 0xde}, {0x22, 0xa7}, {0x23, 0x30}, //CLAMP {0x27, 0x3c}, {0x2b, 0x80}, {0x2e, 0x11}, {0x2f, 0xa1}, {0x30, 0x05}, //For Hi-253 never no change 0x05 {0x50, 0x20}, {0x52, 0x01}, {0x55, 0x1c}, {0x56, 0x11}, {0x5d, 0xa2}, {0x5e, 0x5a}, {0x60, 0x87}, {0x61, 0x99}, {0x62, 0x88}, {0x63, 0x97}, {0x64, 0x88}, {0x65, 0x97}, {0x67, 0x0c}, {0x68, 0x0c}, {0x69, 0x0c}, {0x72, 0x89}, {0x73, 0x96}, {0x74, 0x89}, {0x75, 0x96}, {0x76, 0x89}, {0x77, 0x96}, {0x7c, 0x85}, {0x7d, 0xaf}, {0x80, 0x01}, {0x81, 0x7f}, {0x82, 0x13}, {0x83, 0x24}, {0x84, 0x7d}, {0x85, 0x81}, {0x86, 0x7d}, {0x87, 0x81}, {0x92, 0x48}, {0x93, 0x54}, {0x94, 0x7d}, {0x95, 0x81}, {0x96, 0x7d}, {0x97, 0x81}, {0xa0, 0x02}, {0xa1, 0x7b}, {0xa2, 0x02}, {0xa3, 0x7b}, {0xa4, 0x7b}, {0xa5, 0x02}, {0xa6, 0x7b}, {0xa7, 0x02}, {0xa8, 0x85}, {0xa9, 0x8c}, {0xaa, 0x85}, {0xab, 0x8c}, {0xac, 0x10}, {0xad, 0x16}, {0xae, 0x10}, {0xaf, 0x16}, {0xb0, 0x99}, {0xb1, 0xa3}, {0xb2, 0xa4}, {0xb3, 0xae}, {0xb4, 0x9b}, {0xb5, 0xa2}, {0xb6, 0xa6}, {0xb7, 0xac}, {0xb8, 0x9b}, {0xb9, 0x9f}, {0xba, 0xa6}, {0xbb, 0xaa}, {0xbc, 0x9b}, {0xbd, 0x9f}, {0xbe, 0xa6}, {0xbf, 0xaa}, {0xc4, 0x2c}, {0xc5, 0x43}, {0xc6, 0x63}, {0xc7, 0x79}, {0xc8, 0x2d}, {0xc9, 0x42}, {0xca, 0x2d}, {0xcb, 0x42}, {0xcc, 0x64}, {0xcd, 0x78}, {0xce, 0x64}, {0xcf, 0x78}, {0xd0, 0x0a}, {0xd1, 0x09}, {0xd4, 0x14}, //DCDC_TIME_TH_ON {0xd5, 0x14}, //DCDC_TIME_TH_OFF {0xd6, 0x98}, //DCDC_AG_TH_ON {0xd7, 0x90}, //DCDC_AG_TH_OFF {0xe0, 0xc4}, {0xe1, 0xc4}, {0xe2, 0xc4}, {0xe3, 0xc4}, {0xe4, 0x00}, {0xe8, 0x80}, {0xe9, 0x40}, {0xea, 0x7f}, {0x03, 0x03}, {0x10, 0x10}, {0x03, 0x10}, {0x10, 0x01}, // CrYCbY // For Demoset 0x03 {0x12, 0x30}, {0x13, 0x0a}, // contrast on {0x20, 0x00}, {0x30, 0x00}, {0x31, 0x00}, {0x32, 0x00}, {0x33, 0x00}, {0x34, 0x30}, {0x35, 0x00}, {0x36, 0x00}, {0x38, 0x00}, {0x3e, 0x58}, {0x3f, 0x00}, {0x40, 0x80}, // YOFS {0x41, 0x10}, // DYOFS {0x48, 0x84}, // Contrast {0x50, 0x90}, // Contrast {0x60, 0x6c}, //67 {0x61, 0x70}, //7e //8e //88 //80 {0x62, 0x68}, //7e //8e //88 //80 {0x63, 0x50}, //Double_AG 50->30 {0x64, 0x41}, {0x66, 0x42}, {0x67, 0x20}, {0x6a, 0x80}, //8a {0x6b, 0x84}, //74 {0x6c, 0x80}, //7e //7a {0x6d, 0x80}, //8e {0x03, 0x11}, {0x10, 0x7f}, {0x11, 0x40}, {0x12, 0x0a}, /* Blue Max-Filter Delete*/ {0x13, 0xbb}, {0x26, 0x31}, /* Double_AG 31->20*/ {0x27, 0x34}, /* Double_AG 34->22*/ {0x28, 0x0f}, {0x29, 0x10}, {0x2b, 0x30}, {0x2c, 0x32}, {0x30, 0x70}, {0x31, 0x10}, {0x32, 0x58}, {0x33, 0x09}, {0x34, 0x06}, {0x35, 0x03}, {0x36, 0x70}, {0x37, 0x18}, {0x38, 0x58}, {0x39, 0x09}, {0x3a, 0x06}, {0x3b, 0x03}, {0x3c, 0x80}, {0x3d, 0x18}, {0x3e, 0x83}, /*80*/ {0x3f, 0x0c}, {0x40, 0x03}, {0x41, 0x06}, {0x42, 0x80}, {0x43, 0x18}, {0x44, 0x83}, /*80*/ {0x45, 0x12}, {0x46, 0x10}, {0x47, 0x10}, {0x48, 0x90}, {0x49, 0x40}, {0x4a, 0x80}, {0x4b, 0x13}, {0x4c, 0x10}, {0x4d, 0x11}, {0x4e, 0x80}, {0x4f, 0x30}, {0x50, 0x80}, {0x51, 0x13}, {0x52, 0x10}, {0x53, 0x13}, {0x54, 0x11}, {0x55, 0x17}, {0x56, 0x20}, {0x57, 0x01}, {0x58, 0x00}, {0x59, 0x00}, {0x5a, 0x1f}, /*18*/ {0x5b, 0x00}, {0x5c, 0x00}, {0x60, 0x3f}, {0x62, 0x60}, {0x70, 0x06}, {0x03, 0x12}, {0x20, 0x00}, {0x21, 0x00}, {0x25, 0x00}, {0x28, 0x00}, {0x29, 0x00}, {0x2a, 0x00}, {0x30, 0x50}, {0x31, 0x18}, {0x32, 0x32}, {0x33, 0x40}, {0x34, 0x50}, {0x35, 0x70}, {0x36, 0xa0}, {0x40, 0xa0}, {0x41, 0x40}, {0x42, 0xa0}, {0x43, 0x90}, {0x44, 0x90}, {0x45, 0x80}, {0x46, 0xb0}, {0x47, 0x55}, {0x48, 0xa0}, {0x49, 0x90}, {0x4a, 0x90}, {0x4b, 0x80}, {0x4c, 0xb0}, {0x4d, 0x40}, {0x4e, 0x90}, {0x4f, 0x90}, {0x50, 0xa0}, {0x51, 0x60}, {0x52, 0xb0}, {0x53, 0x60}, {0x54, 0xc0}, {0x55, 0xc0}, {0x56, 0x80}, {0x57, 0x57}, {0x58, 0x90}, {0x59, 0x40}, {0x5a, 0xd0}, {0x5b, 0xd0}, {0x5c, 0xe0}, {0x5d, 0x80}, {0x5e, 0x88}, {0x5f, 0x40}, {0x60, 0xe0}, {0x61, 0xe0}, {0x62, 0xe0}, {0x63, 0x80}, {0x70, 0x15}, {0x71, 0x01}, /*Don't Touch register*/ {0x72, 0x18}, {0x73, 0x01}, /*Don't Touch register*/ {0x74, 0x25}, {0x75, 0x15}, {0x80, 0x20}, {0x81, 0x40}, {0x82, 0x65}, {0x85, 0x1a}, {0x88, 0x00}, {0x89, 0x00}, {0x90, 0x5d}, /*For Preview*/ /*Dont Touch register*/ {0xD0, 0x0c}, {0xD1, 0x80}, {0xD2, 0x67}, {0xD3, 0x00}, {0xD4, 0x00}, {0xD5, 0x02}, {0xD6, 0xff}, {0xD7, 0x18}, {0x3b, 0x06}, {0x3c, 0x06}, {0xc5, 0x00}, /*55->48*/ {0xc6, 0x00}, /*48->40*/ {0x03, 0x13}, {0x10, 0xcb}, {0x11, 0x7b}, {0x12, 0x07}, {0x14, 0x00}, {0x20, 0x15}, {0x21, 0x13}, {0x22, 0x33}, {0x23, 0x05}, {0x24, 0x09}, {0x25, 0x0a}, {0x26, 0x18}, {0x27, 0x30}, {0x29, 0x12}, {0x2a, 0x50}, {0x2b, 0x02}, {0x2c, 0x02}, {0x25, 0x06}, {0x2d, 0x0c}, {0x2e, 0x12}, {0x2f, 0x12}, {0x50, 0x10}, {0x51, 0x14}, {0x52, 0x12}, {0x53, 0x0c}, {0x54, 0x0f}, {0x55, 0x0c}, {0x56, 0x10}, {0x57, 0x13}, {0x58, 0x12}, {0x59, 0x0c}, {0x5a, 0x0f}, {0x5b, 0x0c}, {0x5c, 0x0a}, {0x5d, 0x0b}, {0x5e, 0x0a}, {0x5f, 0x08}, {0x60, 0x09}, {0x61, 0x08}, {0x62, 0x08}, {0x63, 0x08}, {0x64, 0x08}, {0x65, 0x06}, {0x66, 0x06}, {0x67, 0x06}, {0x68, 0x07}, {0x69, 0x07}, {0x6a, 0x07}, {0x6b, 0x05}, {0x6c, 0x05}, {0x6d, 0x05}, {0x6e, 0x07}, {0x6f, 0x07}, {0x70, 0x07}, {0x71, 0x05}, {0x72, 0x05}, {0x73, 0x05}, {0x80, 0xfd}, {0x81, 0x1f}, {0x82, 0x05}, {0x83, 0x31}, {0x90, 0x05}, {0x91, 0x05}, {0x92, 0x33}, {0x93, 0x30}, {0x94, 0x03}, {0x95, 0x14}, {0x97, 0x20}, {0x99, 0x20}, {0xa0, 0x01}, {0xa1, 0x02}, {0xa2, 0x01}, {0xa3, 0x02}, {0xa4, 0x05}, {0xa5, 0x05}, {0xa6, 0x07}, {0xa7, 0x08}, {0xa8, 0x07}, {0xa9, 0x08}, {0xaa, 0x07}, {0xab, 0x08}, {0xb0, 0x22}, {0xb1, 0x2a}, {0xb2, 0x28}, {0xb3, 0x22}, {0xb4, 0x2a}, {0xb5, 0x28}, {0xb6, 0x22}, {0xb7, 0x2a}, {0xb8, 0x28}, {0xb9, 0x22}, {0xba, 0x2a}, {0xbb, 0x28}, {0xbc, 0x25}, {0xbd, 0x2a}, {0xbe, 0x27}, {0xbf, 0x25}, {0xc0, 0x2a}, {0xc1, 0x27}, {0xc2, 0x1e}, {0xc3, 0x24}, {0xc4, 0x20}, {0xc5, 0x1e}, {0xc6, 0x24}, {0xc7, 0x20}, {0xc8, 0x18}, {0xc9, 0x20}, {0xca, 0x1e}, {0xcb, 0x18}, {0xcc, 0x20}, {0xcd, 0x1e}, {0xce, 0x18}, {0xcf, 0x20}, {0xd0, 0x1e}, {0xd1, 0x18}, {0xd2, 0x20}, {0xd3, 0x1e}, {0x03, 0x14}, {0x10, 0x11}, {0x14, 0x80}, // GX {0x15, 0x80}, // GY {0x16, 0x80}, // RX {0x17, 0x80}, // RY {0x18, 0x80}, // BX {0x19, 0x80}, // BY {0x20, 0x60}, //X 60 //a0 {0x21, 0x80}, //Y {0x22, 0x80}, {0x23, 0x80}, {0x24, 0x80}, {0x30, 0xc8}, {0x31, 0x2b}, {0x32, 0x00}, {0x33, 0x00}, {0x34, 0x90}, {0x40, 0x48}, //31 {0x50, 0x34}, //23 //32 {0x60, 0x29}, // {0x70, 0x34}, //23 //32 {0x03, 0x15}, {0x10, 0x0f}, {0x14, 0x42}, //CMCOFSGH_Day //4c {0x15, 0x32}, //CMCOFSGM_CWF //3c {0x16, 0x24}, //CMCOFSGL_A //2e {0x17, 0x2f}, //CMC SIGN {0x30, 0x8f}, {0x31, 0x59}, {0x32, 0x0a}, {0x33, 0x15}, {0x34, 0x5b}, {0x35, 0x06}, {0x36, 0x07}, {0x37, 0x40}, {0x38, 0x87}, //86 {0x40, 0x92}, {0x41, 0x1b}, {0x42, 0x89}, {0x43, 0x81}, {0x44, 0x00}, {0x45, 0x01}, {0x46, 0x89}, {0x47, 0x9e}, {0x48, 0x28}, {0x50, 0x02}, {0x51, 0x82}, {0x52, 0x00}, {0x53, 0x07}, {0x54, 0x11}, {0x55, 0x98}, {0x56, 0x00}, {0x57, 0x0b}, {0x58, 0x8b}, {0x80, 0x03}, {0x85, 0x40}, {0x87, 0x02}, {0x88, 0x00}, {0x89, 0x00}, {0x8a, 0x00}, {0x03, 0x16}, {0x10, 0x31}, {0x18, 0x5e}, // Double_AG 5e->37 {0x19, 0x5d}, // Double_AG 5e->36 {0x1a, 0x0e}, {0x1b, 0x01}, {0x1c, 0xdc}, {0x1d, 0xfe}, {0x30, 0x00}, {0x31, 0x0a}, {0x32, 0x1f}, {0x33, 0x33}, {0x34, 0x53}, {0x35, 0x6c}, {0x36, 0x81}, {0x37, 0x94}, {0x38, 0xa4}, {0x39, 0xb3}, {0x3a, 0xc0}, {0x3b, 0xcb}, {0x3c, 0xd5}, {0x3d, 0xde}, {0x3e, 0xe6}, {0x3f, 0xee}, {0x40, 0xf5}, {0x41, 0xfc}, {0x42, 0xff}, {0x50, 0x00}, {0x51, 0x09}, {0x52, 0x1f}, {0x53, 0x37}, {0x54, 0x5b}, {0x55, 0x76}, {0x56, 0x8d}, {0x57, 0xa1}, {0x58, 0xb2}, {0x59, 0xbe}, {0x5a, 0xc9}, {0x5b, 0xd2}, {0x5c, 0xdb}, {0x5d, 0xe3}, {0x5e, 0xeb}, {0x5f, 0xf0}, {0x60, 0xf5}, {0x61, 0xf7}, {0x62, 0xf8}, {0x70, 0x00}, {0x71, 0x08}, {0x72, 0x17}, {0x73, 0x2f}, {0x74, 0x53}, {0x75, 0x6c}, {0x76, 0x81}, {0x77, 0x94}, {0x78, 0xa4}, {0x79, 0xb3}, {0x7a, 0xc0}, {0x7b, 0xcb}, {0x7c, 0xd5}, {0x7d, 0xde}, {0x7e, 0xe6}, {0x7f, 0xee}, {0x80, 0xf4}, {0x81, 0xfa}, {0x82, 0xff}, {0x03, 0x17}, {0x10, 0xf7}, {0x03, 0x18}, {0x12, 0x20}, {0x10, 0x07}, {0x11, 0x00}, {0x20, 0x05}, {0x21, 0x20}, {0x22, 0x03}, {0x23, 0xd8}, {0x24, 0x00}, {0x25, 0x10}, {0x26, 0x00}, {0x27, 0x0c}, {0x28, 0x05}, {0x29, 0x10}, {0x2a, 0x03}, {0x2b, 0xcc}, {0x2c, 0x09}, {0x2d, 0xc1}, {0x2e, 0x09}, {0x2f, 0xc1}, {0x30, 0x41}, {0x03, 0x20}, {0x11, 0x1c}, {0x18, 0x30}, {0x1a, 0x08}, {0x20, 0x01}, //05_lowtemp Y Mean off {0x21, 0x30}, {0x22, 0x10}, {0x23, 0x00}, {0x24, 0x00}, //Uniform Scene Off {0x28, 0xe7}, {0x29, 0x0d}, //20100305 ad->0d {0x2a, 0xff}, {0x2b, 0x04}, //f4->Adaptive off {0x2c, 0xc2}, {0x2d, 0xcf}, //ff->AE Speed option {0x2e, 0x33}, {0x30, 0x78}, //f8 {0x32, 0x03}, {0x33, 0x2e}, {0x34, 0x30}, {0x35, 0xd4}, {0x36, 0xfe}, {0x37, 0x32}, {0x38, 0x04}, {0x39, 0x22}, //AE_escapeC10 {0x3a, 0xde}, //AE_escapeC11 {0x3b, 0x22}, //AE_escapeC1 {0x3c, 0xde}, //AE_escapeC2 {0x50, 0x45}, {0x51, 0x88}, {0x56, 0x03}, {0x57, 0xf7}, {0x58, 0x14}, {0x59, 0x88}, {0x5a, 0x04}, {0x60, 0x55}, // AEWGT1{0x61, 0x55}, // AEWGT2{0x62, 0x6a}, // AEWGT3{0x63, 0xa9}, // AEWGT4{0x64, 0x6a}, // AEWGT5{0x65, 0xa9}, // AEWGT6{0x66, 0x6a}, // AEWGT7{0x67, 0xa9}, // AEWGT8{0x68, 0x6b}, // AEWGT9{0x69, 0xe9}, // AEWGT10{0x6a, 0x6a}, // AEWGT11{0x6b, 0xa9}, // AEWGT12{0x6c, 0x6a}, // AEWGT13{0x6d, 0xa9}, // AEWGT14{0x6e, 0x55}, // AEWGT15{0x6f, 0x55}, // AEWGT16{0x70, 0x70}, //6e{0x71, 0x00}, //82(+8)->+0{0x76, 0x43}, {0x77, 0xe2}, //04{0x78, 0x23}, //Yth1{0x79, 0x42}, //Yth2{0x7a, 0x23}, //23{0x7b, 0x22}, //22{0x7d, 0x23}, {0x83, 0x01}, //EXP Normal 33.33 fps {0x84, 0xb7}, {0x85, 0x74}, {0x86, 0x01}, //EXPMin 5859.38 fps{0x87, 0xf4}, {0x88, 0x05}, //EXP Max 10.00 fps {0x89, 0xb8}, {0x8a, 0xd8}, {0x8B, 0x49}, //EXP100 {0x8C, 0x3e}, {0x8D, 0x3c}, //EXP120 {0x8E, 0x8c}, {0x9c, 0x17}, //EXP Limit 488.28 fps {0x9d, 0x70}, {0x9e, 0x01}, //EXP Unit {0x9f, 0xf4}, //AE_Middle Time option//{0xa0, 0x03}, //{0xa1, 0xa9}, //{0xa2, 0x80}, {0xb0, 0x18}, {0xb1, 0x14}, //ADC 400->560{0xb2, 0xa0}, //d0{0xb3, 0x18}, {0xb4, 0x1a}, {0xb5, 0x44}, {0xb6, 0x2f}, {0xb7, 0x28}, {0xb8, 0x25}, {0xb9, 0x22}, {0xba, 0x21}, {0xbb, 0x20}, {0xbc, 0x1f}, {0xbd, 0x1f}, //AE_Adaptive Time option//{0xc0, 0x10}, //{0xc1, 0x2b}, //{0xc2, 0x2b}, //{0xc3, 0x2b}, //{0xc4, 0x08}, {0xc8, 0x80}, {0xc9, 0x40}, /////// PAGE 22 START ///////{0x03, 0x22}, {0x10, 0xfd}, {0x11, 0x2e}, {0x19, 0x01}, // Low On //{0x20, 0x30}, {0x21, 0x80}, {0x24, 0x01}, //{0x25, 0x00}, //7f New Lock Cond & New light stable{0x30, 0x80}, {0x31, 0x80}, {0x38, 0x11}, {0x39, 0x34}, {0x40, 0xf4}, {0x41, 0x55}, //44{0x42, 0x33}, //43{0x43, 0xf6}, {0x44, 0x55}, //44{0x45, 0x44}, //33{0x46, 0x00}, {0x50, 0xb2}, {0x51, 0x81}, {0x52, 0x98}, {0x80, 0x40}, //3e{0x81, 0x20}, {0x82, 0x3e}, {0x83, 0x5e}, //5e{0x84, 0x1e}, //24{0x85, 0x5e}, //54 //56 //5a{0x86, 0x22}, //24 //22{0x87, 0x49}, {0x88, 0x39}, {0x89, 0x37}, //38{0x8a, 0x28}, //2a{0x8b, 0x41}, //47{0x8c, 0x39}, {0x8d, 0x34}, {0x8e, 0x28}, //2c{0x8f, 0x53}, //4e{0x90, 0x52}, //4d{0x91, 0x51}, //4c{0x92, 0x4e}, //4a{0x93, 0x4a}, //46{0x94, 0x45}, {0x95, 0x3d}, {0x96, 0x31}, {0x97, 0x28}, {0x98, 0x24}, {0x99, 0x20}, {0x9a, 0x20}, {0x9b, 0x77}, {0x9c, 0x77}, {0x9d, 0x48}, {0x9e, 0x38}, {0x9f, 0x30}, {0xa0, 0x60}, {0xa1, 0x34}, {0xa2, 0x6f}, {0xa3, 0xff}, {0xa4, 0x14}, //1500fps{0xa5, 0x2c}, // 700fps{0xa6, 0xcf}, {0xad, 0x40}, {0xae, 0x4a}, {0xaf, 0x28}, // low temp Rgain{0xb0, 0x26}, // low temp Rgain{0xb1, 0x00}, //0x20 -> 0x00 0405 modify{0xb4, 0xea}, {0xb8, 0xa0}, //a2: b-2, R+2 //b4 B-3, R+4 lowtemp{0xb9, 0x00}, /////// PAGE 20 ///////{0x03, 0x20}, {0x10, 0x8c}, // PAGE 20{0x03, 0x20}, //page 20{0x10, 0x9c}, //ae off// PAGE 22{0x03, 0x22}, //page 22{0x10, 0xe9}, //awb off// PAGE 0{0x03, 0x00}, {0x0e, 0x03}, //PLL On{0x0e, 0x73}, //PLLx2{0x03, 0x00}, // Dummy 750us{0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, {0x03, 0x00}, /*640*480 */{0x03, 0x00},{0x10, 0x11},//{0x20, 0x00},{0x21, 0x07},{0x22, 0x00},{0x23, 0x20},{0x24, 0x03},{0x25, 0xc0},{0x26, 0x05},{0x27, 0x00},{0x03, 0x18},{0x10, 0x07},{0x11, 0x00},{0x12, 0x20},{0x20, 0x05},{0x21, 0x00},{0x22, 0x03},{0x23, 0xc0},{0x24, 0x00},{0x25, 0x04},{0x26, 0x00},{0x27, 0x04},{0x28, 0x05},{0x29, 0x04},{0x2a, 0x03},{0x2b, 0xc4},{0x2c, 0x0a},{0x2d, 0x00},{0x2e, 0x0a},{0x2f, 0x00},{0x30, 0x41}, //41->44{0x03, 0x00}, // Page 0{0x01, 0xf8}, // Sleep Off 0xf8->0x50 for solve green line issue};static struct sensor_reg hi253_setting_15fps_QVGA_320_240[] = {{0x86, 0x03}, };static struct sensor_reg hi253_setting_30fps_QVGA_320_240[] = {{0x12, 0x80},};static struct sensor_reg hi253_setting_15fps_NTSC_720_480[] = {{0x12, 0x80},};static struct sensor_reg hi253_setting_15fps_PAL_720_576[] = {{0x12, 0x80}, };static struct sensor_reg hi253_setting_30fps_NTSC_720_480[] = {{0x12, 0x80}, };static struct sensor_reg hi253_setting_30fps_PAL_720_576[] = {{0x12, 0x80}, };static struct hi253_mode_info hi253_mode_info_data[2][hi253_mode_MAX + 1] = {{{hi253_mode_VGA_640_480, 640, 480,hi253_setting_15fps_VGA_640_480,ARRAY_SIZE(hi253_setting_15fps_VGA_640_480)},{hi253_mode_QVGA_320_240, 320, 240,hi253_setting_15fps_QVGA_320_240,ARRAY_SIZE(hi253_setting_15fps_QVGA_320_240)},{hi253_mode_XGA_1024_768, 1024, 768,hi253_setting_15fps_XGA_1024_768,ARRAY_SIZE(hi253_setting_15fps_XGA_1024_768)},{hi253_mode_QXGA_1600_1200, 1600, 1200,hi253_setting_15fps_QXGA_1600_1200,ARRAY_SIZE(hi253_setting_15fps_QXGA_1600_1200)},{hi253_mode_NTSC_720_480, 720, 480,hi253_setting_15fps_NTSC_720_480,ARRAY_SIZE(hi253_setting_15fps_NTSC_720_480)},{hi253_mode_PAL_720_576, 720, 576,hi253_setting_15fps_PAL_720_576,ARRAY_SIZE(hi253_setting_15fps_PAL_720_576)},},{{hi253_mode_VGA_640_480, 640, 480,hi253_setting_30fps_VGA_640_480,ARRAY_SIZE(hi253_setting_30fps_VGA_640_480)},{hi253_mode_QVGA_320_240, 320, 240,hi253_setting_30fps_QVGA_320_240,ARRAY_SIZE(hi253_setting_30fps_QVGA_320_240)},{hi253_mode_XGA_1024_768, 1024, 768,hi253_setting_30fps_XGA_1024_768,ARRAY_SIZE(hi253_setting_30fps_XGA_1024_768)},{hi253_mode_QXGA_1600_1200, 0, 0, NULL, 0},{hi253_mode_NTSC_720_480, 720, 480,hi253_setting_30fps_NTSC_720_480,ARRAY_SIZE(hi253_setting_30fps_NTSC_720_480)},{hi253_mode_PAL_720_576, 720, 576,hi253_setting_30fps_PAL_720_576,ARRAY_SIZE(hi253_setting_30fps_PAL_720_576)},},};static struct sensor_reg sensor_initialize[] = {/////// Start Sleep ///////{0x01, 0xf9}, //sleep on{0x08, 0x0f}, //Hi-Z on{0x01, 0xf8}, //sleep off{0x03, 0x00}, // Dummy 750us START{0x03, 0x00},{0x03, 0x00},{0x03, 0x00},{0x03, 0x00},{0x03, 0x00},{0x03, 0x00},{0x03, 0x00},{0x03, 0x00},{0x03, 0x00}, // Dummy 750us END{0x0e, 0x03}, //PLL On{0x0e, 0x73}, //PLLx2{0x03, 0x00}, // Dummy 750us START{0x03, 0x00},{0x03, 0x00},{0x03, 0x00},{0x03, 0x00},{0x03, 0x00},{0x03, 0x00},{0x03, 0x00},{0x03, 0x00},{0x03, 0x00}, // Dummy 750us END{0x0e, 0x00}, //PLL off{0x01, 0xf1}, //sleep on{0x08, 0x00}, //Hi-Z off{0x01, 0xf3},{0x01, 0xf1},// PAGE 20{0x03, 0x20}, //page 20{0x10, 0x1c}, //ae off// PAGE 22{0x03, 0x22}, //page 22{0x10, 0x69}, //awb off//Initial Start/////// PAGE 0 START ///////{0x03, 0x00},{0x10, 0x11}, // Sub1/2_Preview2 Mode_H binning{0x11, 0x91},{0x12, 0x20},//21{0x0b, 0xaa}, // ESD Check Register{0x0c, 0xaa}, // ESD Check Register{0x0d, 0xaa}, // ESD Check Register{0x20, 0x00}, // Windowing start point Y{0x21, 0x04},{0x22, 0x00}, // Windowing start point X{0x23, 0x07},{0x24, 0x04},{0x25, 0xb0},{0x26, 0x06},{0x27, 0x40}, // WINROW END{0x40, 0x01}, //Hblank 408{0x41, 0x68}, {0x42, 0x00}, //Vblank 20{0x43, 0x14},{0x45, 0x04},{0x46, 0x18},{0x47, 0xd8},//BLC{0x80, 0x2e},{0x81, 0x7e},{0x82, 0x90},{0x83, 0x00},{0x84, 0x0c},{0x85, 0x00},{0x90, 0x14}, //BLC_TIME_TH_ON{0x91, 0x14}, //BLC_TIME_TH_OFF {0x92, 0x98}, //BLC_AG_TH_ON{0x93, 0x90}, //BLC_AG_TH_OFF{0x94, 0x75},{0x95, 0x70},{0x96, 0xdc},{0x97, 0xfe},{0x98, 0x38},//OutDoor BLC{0x99, 0x43},{0x9a, 0x43},{0x9b, 0x43},{0x9c, 0x43},//Dark BLC{0xa0, 0x00},{0xa2, 0x00},{0xa4, 0x00},{0xa6, 0x00},//Normal BLC{0xa8, 0x43},{0xaa, 0x43},{0xac, 0x43},{0xae, 0x43},/////// PAGE 2 START ///////{0x03, 0x02},{0x12, 0x03},{0x13, 0x03},{0x16, 0x00},{0x17, 0x8C},{0x18, 0x4c}, //Double_AG off{0x19, 0x00},{0x1a, 0x39}, //ADC400->560{0x1c, 0x09},{0x1d, 0x40},{0x1e, 0x30},{0x1f, 0x10},{0x20, 0x77},{0x21, 0xde},{0x22, 0xa7},{0x23, 0x30}, //CLAMP{0x27, 0x3c},{0x2b, 0x80},{0x2e, 0x11},{0x2f, 0xa1},{0x30, 0x05}, //For Hi-253 never no change 0x05{0x50, 0x20},{0x52, 0x01},{0x55, 0x1c},{0x56, 0x11},{0x5d, 0xa2},{0x5e, 0x5a},{0x60, 0x87},{0x61, 0x99},{0x62, 0x88},{0x63, 0x97},{0x64, 0x88},{0x65, 0x97},{0x67, 0x0c},{0x68, 0x0c},{0x69, 0x0c},{0x72, 0x89},{0x73, 0x96},{0x74, 0x89},{0x75, 0x96},{0x76, 0x89},{0x77, 0x96},{0x7c, 0x85},{0x7d, 0xaf},{0x80, 0x01},{0x81, 0x7f},{0x82, 0x13},{0x83, 0x24},{0x84, 0x7d},{0x85, 0x81},{0x86, 0x7d},{0x87, 0x81},{0x92, 0x48},{0x93, 0x54},{0x94, 0x7d},{0x95, 0x81},{0x96, 0x7d},{0x97, 0x81},{0xa0, 0x02},{0xa1, 0x7b},{0xa2, 0x02},{0xa3, 0x7b},{0xa4, 0x7b},{0xa5, 0x02},{0xa6, 0x7b},{0xa7, 0x02},{0xa8, 0x85},{0xa9, 0x8c},{0xaa, 0x85},{0xab, 0x8c},{0xac, 0x10},{0xad, 0x16},{0xae, 0x10},{0xaf, 0x16},{0xb0, 0x99},{0xb1, 0xa3},{0xb2, 0xa4},{0xb3, 0xae},{0xb4, 0x9b},{0xb5, 0xa2},{0xb6, 0xa6},{0xb7, 0xac},{0xb8, 0x9b},{0xb9, 0x9f},{0xba, 0xa6},{0xbb, 0xaa},{0xbc, 0x9b},{0xbd, 0x9f},{0xbe, 0xa6},{0xbf, 0xaa},{0xc4, 0x2c},{0xc5, 0x43},{0xc6, 0x63},{0xc7, 0x79},{0xc8, 0x2d},{0xc9, 0x42},{0xca, 0x2d},{0xcb, 0x42},{0xcc, 0x64},{0xcd, 0x78},{0xce, 0x64},{0xcf, 0x78},{0xd0, 0x0a},{0xd1, 0x09},{0xd4, 0x14}, //DCDC_TIME_TH_ON{0xd5, 0x14}, //DCDC_TIME_TH_OFF {0xd6, 0x98}, //DCDC_AG_TH_ON{0xd7, 0x90}, //DCDC_AG_TH_OFF{0xe0, 0xc4},{0xe1, 0xc4},{0xe2, 0xc4},{0xe3, 0xc4},{0xe4, 0x00},{0xe8, 0x80},{0xe9, 0x40},{0xea, 0x7f},/////// PAGE 3 ///////{0x03, 0x03},{0x10, 0x10},/////// PAGE 10 START ///////{0x03, 0x10},{0x10, 0x01}, // CrYCbY // For Demoset 0x03{0x12, 0x30},{0x13, 0x0a}, // contrast on{0x20, 0x00},{0x30, 0x00},{0x31, 0x00},{0x32, 0x00},{0x33, 0x00},{0x34, 0x30},{0x35, 0x00},{0x36, 0x00},{0x38, 0x00},{0x3e, 0x58},{0x3f, 0x00},{0x40, 0x80}, // YOFS{0x41, 0x10}, // DYOFS{0x48, 0x84}, // Contrast{0x50, 0x90}, // Contrast{0x60, 0x6c},//67{0x61, 0x70}, //7e //8e //88 //80{0x62, 0x68}, //7e //8e //88 //80{0x63, 0x50}, //Double_AG 50->30{0x64, 0x41},{0x66, 0x42},{0x67, 0x20},{0x6a, 0x80}, //8a{0x6b, 0x84}, //74{0x6c, 0x80}, //7e //7a{0x6d, 0x80}, //8e/*Don't touch////////////////////////////{0x72, 0x84},//{0x76, 0x19},//{0x73, 0x70},//{0x74, 0x68},//{0x75, 0x60}, // white protection ON//{0x77, 0x0e}, //08 //0a//{0x78, 0x2a}, //20//{0x79, 0x08},//////////////////////////////////////*//*////// PAGE 11 START ///////*/{0x03, 0x11},{0x10, 0x7f},{0x11, 0x40},{0x12, 0x0a}, /* Blue Max-Filter Delete*/{0x13, 0xbb},{0x26, 0x31}, /* Double_AG 31->20*/{0x27, 0x34}, /* Double_AG 34->22*/{0x28, 0x0f},{0x29, 0x10},{0x2b, 0x30},{0x2c, 0x32},/*Out2 D-LPF th*/{0x30, 0x70},{0x31, 0x10},{0x32, 0x58},{0x33, 0x09},{0x34, 0x06},{0x35, 0x03},/*Out1 D-LPF th*/{0x36, 0x70},{0x37, 0x18},{0x38, 0x58},{0x39, 0x09},{0x3a, 0x06},{0x3b, 0x03},/*Indoor D-LPF th*/{0x3c, 0x80},{0x3d, 0x18},{0x3e, 0x83}, /*80*/{0x3f, 0x0c},{0x40, 0x03},{0x41, 0x06},{0x42, 0x80},{0x43, 0x18},{0x44, 0x83}, /*80*/{0x45, 0x12},{0x46, 0x10},{0x47, 0x10},{0x48, 0x90},{0x49, 0x40},{0x4a, 0x80},{0x4b, 0x13},{0x4c, 0x10},{0x4d, 0x11},{0x4e, 0x80},{0x4f, 0x30},{0x50, 0x80},{0x51, 0x13},{0x52, 0x10},{0x53, 0x13},{0x54, 0x11},{0x55, 0x17},{0x56, 0x20},{0x57, 0x01},{0x58, 0x00},{0x59, 0x00},{0x5a, 0x1f}, /*18*/{0x5b, 0x00},{0x5c, 0x00},{0x60, 0x3f},{0x62, 0x60},{0x70, 0x06},/*////// PAGE 12 START ///////*/{0x03, 0x12},{0x20, 0x00},{0x21, 0x00},{0x25, 0x00}, /*0x30*/{0x28, 0x00},{0x29, 0x00},{0x2a, 0x00},{0x30, 0x50},{0x31, 0x18},{0x32, 0x32},{0x33, 0x40},{0x34, 0x50},{0x35, 0x70},{0x36, 0xa0},/*Out2 th*/{0x40, 0xa0},{0x41, 0x40},{0x42, 0xa0},{0x43, 0x90},{0x44, 0x90},{0x45, 0x80},/*Out1 th*/{0x46, 0xb0},{0x47, 0x55},{0x48, 0xa0},{0x49, 0x90},{0x4a, 0x90},{0x4b, 0x80},/*Indoor th*/{0x4c, 0xb0},{0x4d, 0x40},{0x4e, 0x90},{0x4f, 0x90},{0x50, 0xa0},{0x51, 0x60},/*Dark1 th*/{0x52, 0xb0},{0x53, 0x60},{0x54, 0xc0},{0x55, 0xc0},{0x56, 0x80},{0x57, 0x57},/*Dark2 th*/{0x58, 0x90},{0x59, 0x40},{0x5a, 0xd0},{0x5b, 0xd0},{0x5c, 0xe0},{0x5d, 0x80},/*Dark3 th*/{0x5e, 0x88},{0x5f, 0x40},{0x60, 0xe0},{0x61, 0xe0},{0x62, 0xe0},{0x63, 0x80},{0x70, 0x15},{0x71, 0x01}, /*Don't Touch register*/{0x72, 0x18},{0x73, 0x01}, /*Don't Touch register*/{0x74, 0x25},{0x75, 0x15},{0x80, 0x20},{0x81, 0x40},{0x82, 0x65},{0x85, 0x1a},{0x88, 0x00},{0x89, 0x00},{0x90, 0x5d}, /*For Preview*//*Dont Touch register*/{0xD0, 0x0c},{0xD1, 0x80},{0xD2, 0x67},{0xD3, 0x00},{0xD4, 0x00},{0xD5, 0x02},{0xD6, 0xff},{0xD7, 0x18},/*End*/{0x3b, 0x06},{0x3c, 0x06},{0xc5, 0x00},/*55->48*/{0xc6, 0x00},/*48->40*//*////// PAGE 13 START //////*/{0x03, 0x13},/*Edge*/{0x10, 0xcb},{0x11, 0x7b},{0x12, 0x07},{0x14, 0x00},{0x20, 0x15},{0x21, 0x13},{0x22, 0x33},{0x23, 0x05},{0x24, 0x09},{0x25, 0x0a},{0x26, 0x18},{0x27, 0x30},{0x29, 0x12},{0x2a, 0x50},/*Low clip th*/{0x2b, 0x02},{0x2c, 0x02},{0x25, 0x06},{0x2d, 0x0c},{0x2e, 0x12},{0x2f, 0x12},/*Out2 Edge*/{0x50, 0x10},{0x51, 0x14},{0x52, 0x12},{0x53, 0x0c},{0x54, 0x0f},{0x55, 0x0c},/*Out1 Edge*/{0x56, 0x10},{0x57, 0x13},{0x58, 0x12},{0x59, 0x0c},{0x5a, 0x0f},{0x5b, 0x0c},/*Indoor Edge*/{0x5c, 0x0a},{0x5d, 0x0b},{0x5e, 0x0a},{0x5f, 0x08},{0x60, 0x09},{0x61, 0x08},/*Dark1 Edge*/{0x62, 0x08},{0x63, 0x08},{0x64, 0x08},{0x65, 0x06},{0x66, 0x06},{0x67, 0x06},/*Dark2 Edge*/{0x68, 0x07},{0x69, 0x07},{0x6a, 0x07},{0x6b, 0x05},{0x6c, 0x05},{0x6d, 0x05},/*Dark3 Edge*/{0x6e, 0x07},{0x6f, 0x07},{0x70, 0x07},{0x71, 0x05},{0x72, 0x05},{0x73, 0x05},/*2DY*/{0x80, 0xfd},{0x81, 0x1f},{0x82, 0x05},{0x83, 0x31},{0x90, 0x05},{0x91, 0x05},{0x92, 0x33},{0x93, 0x30},{0x94, 0x03},{0x95, 0x14},{0x97, 0x20},{0x99, 0x20},{0xa0, 0x01},{0xa1, 0x02},{0xa2, 0x01},{0xa3, 0x02},{0xa4, 0x05},{0xa5, 0x05},{0xa6, 0x07},{0xa7, 0x08},{0xa8, 0x07},{0xa9, 0x08},{0xaa, 0x07},{0xab, 0x08},//Out2 {0xb0, 0x22},{0xb1, 0x2a},{0xb2, 0x28},{0xb3, 0x22},{0xb4, 0x2a},{0xb5, 0x28},//Out1 {0xb6, 0x22},{0xb7, 0x2a},{0xb8, 0x28},{0xb9, 0x22},{0xba, 0x2a},{0xbb, 0x28},//Indoor {0xbc, 0x25},{0xbd, 0x2a},{0xbe, 0x27},{0xbf, 0x25},{0xc0, 0x2a},{0xc1, 0x27},//Dark1{0xc2, 0x1e},{0xc3, 0x24},{0xc4, 0x20},{0xc5, 0x1e},{0xc6, 0x24},{0xc7, 0x20},//Dark2{0xc8, 0x18},{0xc9, 0x20},{0xca, 0x1e},{0xcb, 0x18},{0xcc, 0x20},{0xcd, 0x1e},//Dark3 {0xce, 0x18},{0xcf, 0x20},{0xd0, 0x1e},{0xd1, 0x18},{0xd2, 0x20},{0xd3, 0x1e},/////// PAGE 14 START ///////{0x03, 0x14},{0x10, 0x11},{0x14, 0x80}, // GX{0x15, 0x80}, // GY{0x16, 0x80}, // RX{0x17, 0x80}, // RY{0x18, 0x80}, // BX{0x19, 0x80}, // BY{0x20, 0x60}, //X 60 //a0{0x21, 0x80}, //Y{0x22, 0x80},{0x23, 0x80},{0x24, 0x80},{0x30, 0xc8},{0x31, 0x2b},{0x32, 0x00},{0x33, 0x00},{0x34, 0x90},{0x40, 0x48}, //31{0x50, 0x34}, //23 //32{0x60, 0x29}, //{0x70, 0x34}, //23 //32/////// PAGE 15 START ///////{0x03, 0x15},{0x10, 0x0f},//Rstep H 16//Rstep L 14{0x14, 0x42}, //CMCOFSGH_Day //4c{0x15, 0x32}, //CMCOFSGM_CWF //3c{0x16, 0x24}, //CMCOFSGL_A //2e{0x17, 0x2f}, //CMC SIGN//CMC_Default_CWF{0x30, 0x8f},{0x31, 0x59},{0x32, 0x0a},{0x33, 0x15},{0x34, 0x5b},{0x35, 0x06},{0x36, 0x07},{0x37, 0x40},{0x38, 0x87}, //86//CMC OFS L_A{0x40, 0x92},{0x41, 0x1b},{0x42, 0x89},{0x43, 0x81},{0x44, 0x00},{0x45, 0x01},{0x46, 0x89},{0x47, 0x9e},{0x48, 0x28},//{0x40, 0x93},//{0x41, 0x1c},//{0x42, 0x89},//{0x43, 0x82},//{0x44, 0x01},//{0x45, 0x01},//{0x46, 0x8a},//{0x47, 0x9d},//{0x48, 0x28},//CMC POFS H_DAY{0x50, 0x02},{0x51, 0x82},{0x52, 0x00},{0x53, 0x07},{0x54, 0x11},{0x55, 0x98},{0x56, 0x00},{0x57, 0x0b},{0x58, 0x8b},{0x80, 0x03},{0x85, 0x40},{0x87, 0x02},{0x88, 0x00},{0x89, 0x00},{0x8a, 0x00},/////// PAGE 16 START ///////{0x03, 0x16},{0x10, 0x31},{0x18, 0x5e},// Double_AG 5e->37{0x19, 0x5d},// Double_AG 5e->36{0x1a, 0x0e},{0x1b, 0x01},{0x1c, 0xdc},{0x1d, 0xfe},//GMA Default{0x30, 0x00},{0x31, 0x0a},{0x32, 0x1f},{0x33, 0x33},{0x34, 0x53},{0x35, 0x6c},{0x36, 0x81},{0x37, 0x94},{0x38, 0xa4},{0x39, 0xb3},{0x3a, 0xc0},{0x3b, 0xcb},{0x3c, 0xd5},{0x3d, 0xde},{0x3e, 0xe6},{0x3f, 0xee},{0x40, 0xf5},{0x41, 0xfc},{0x42, 0xff},{0x50, 0x00},{0x51, 0x09},{0x52, 0x1f},{0x53, 0x37},{0x54, 0x5b},{0x55, 0x76},{0x56, 0x8d},{0x57, 0xa1},{0x58, 0xb2},{0x59, 0xbe},{0x5a, 0xc9},{0x5b, 0xd2},{0x5c, 0xdb},{0x5d, 0xe3},{0x5e, 0xeb},{0x5f, 0xf0},{0x60, 0xf5},{0x61, 0xf7},{0x62, 0xf8},{0x70, 0x00},{0x71, 0x08},{0x72, 0x17},{0x73, 0x2f},{0x74, 0x53},{0x75, 0x6c},{0x76, 0x81},{0x77, 0x94},{0x78, 0xa4},{0x79, 0xb3},{0x7a, 0xc0},{0x7b, 0xcb},{0x7c, 0xd5},{0x7d, 0xde},{0x7e, 0xe6},{0x7f, 0xee},{0x80, 0xf4},{0x81, 0xfa},{0x82, 0xff},/////// PAGE 17 START ///////{0x03, 0x17},{0x10, 0xf7},{0x03, 0x18},{0x12, 0x20},{0x10, 0x07},{0x11, 0x00},{0x20, 0x05},{0x21, 0x20},{0x22, 0x03},{0x23, 0xd8},{0x24, 0x00},{0x25, 0x10},{0x26, 0x00},{0x27, 0x0c},{0x28, 0x05},{0x29, 0x10},{0x2a, 0x03},{0x2b, 0xcc},{0x2c, 0x09},{0x2d, 0xc1},{0x2e, 0x09},{0x2f, 0xc1},{0x30, 0x41},/////// PAGE 20 START ///////{0x03, 0x20},{0x11, 0x1c},{0x18, 0x30},{0x1a, 0x08},{0x20, 0x01}, //05_lowtemp Y Mean off{0x21, 0x30},{0x22, 0x10},{0x23, 0x00},{0x24, 0x00}, //Uniform Scene Off{0x28, 0xe7},{0x29, 0x0d}, //20100305 ad->0d{0x2a, 0xff},{0x2b, 0x04}, //f4->Adaptive off{0x2c, 0xc2},{0x2d, 0xcf}, //ff->AE Speed option{0x2e, 0x33},{0x30, 0x78}, //f8{0x32, 0x03},{0x33, 0x2e},{0x34, 0x30},{0x35, 0xd4},{0x36, 0xfe},{0x37, 0x32},{0x38, 0x04},{0x39, 0x22}, //AE_escapeC10{0x3a, 0xde}, //AE_escapeC11{0x3b, 0x22}, //AE_escapeC1{0x3c, 0xde}, //AE_escapeC2{0x50, 0x45},{0x51, 0x88},{0x56, 0x03},{0x57, 0xf7},{0x58, 0x14},{0x59, 0x88},{0x5a, 0x04},//New Weight For Samsung//{0x60, 0xaa},//{0x61, 0xaa},//{0x62, 0xaa},//{0x63, 0xaa},//{0x64, 0xaa},//{0x65, 0xaa},//{0x66, 0xab},//{0x67, 0xEa},//{0x68, 0xab},//{0x69, 0xEa},//{0x6a, 0xaa},//{0x6b, 0xaa},//{0x6c, 0xaa},//{0x6d, 0xaa},//{0x6e, 0xaa},//{0x6f, 0xaa},{0x60, 0x55}, // AEWGT1{0x61, 0x55}, // AEWGT2{0x62, 0x6a}, // AEWGT3{0x63, 0xa9}, // AEWGT4{0x64, 0x6a}, // AEWGT5{0x65, 0xa9}, // AEWGT6{0x66, 0x6a}, // AEWGT7{0x67, 0xa9}, // AEWGT8{0x68, 0x6b}, // AEWGT9{0x69, 0xe9}, // AEWGT10{0x6a, 0x6a}, // AEWGT11{0x6b, 0xa9}, // AEWGT12{0x6c, 0x6a}, // AEWGT13{0x6d, 0xa9}, // AEWGT14{0x6e, 0x55}, // AEWGT15{0x6f, 0x55}, // AEWGT16{0x70, 0x70}, //6e{0x71, 0x00}, //82(+8)->+0// haunting control{0x76, 0x43},{0x77, 0xe2}, //04{0x78, 0x23}, //Yth1{0x79, 0x42}, //Yth2{0x7a, 0x23}, //23{0x7b, 0x22}, //22{0x7d, 0x23},{0x83, 0x01}, //EXP Normal 33.33 fps {0x84, 0xb7}, {0x85, 0x74}, {0x86, 0x01}, //EXPMin 5859.38 fps{0x87, 0xf4}, {0x88, 0x05}, //EXP Max 10.00 fps {0x89, 0xb8}, {0x8a, 0xd8}, {0x8B, 0x49}, //EXP100 {0x8C, 0x3e}, {0x8D, 0x3c}, //EXP120 {0x8E, 0x8c}, {0x9c, 0x17}, //EXP Limit 488.28 fps {0x9d, 0x70}, {0x9e, 0x01}, //EXP Unit {0x9f, 0xf4}, //AE_Middle Time option//{0xa0, 0x03},//{0xa1, 0xa9},//{0xa2, 0x80},{0xb0, 0x18},{0xb1, 0x14}, //ADC 400->560{0xb2, 0xa0}, //d0{0xb3, 0x18},{0xb4, 0x1a},{0xb5, 0x44},{0xb6, 0x2f},{0xb7, 0x28},{0xb8, 0x25},{0xb9, 0x22},{0xba, 0x21},{0xbb, 0x20},{0xbc, 0x1f},{0xbd, 0x1f},//AE_Adaptive Time option//{0xc0, 0x10},//{0xc1, 0x2b},//{0xc2, 0x2b},//{0xc3, 0x2b},//{0xc4, 0x08},{0xc8, 0x80},{0xc9, 0x40},/////// PAGE 22 START ///////{0x03, 0x22},{0x10, 0xfd},{0x11, 0x2e},{0x19, 0x01}, // Low On //{0x20, 0x30},{0x21, 0x80},{0x24, 0x01},//{0x25, 0x00}, //7f New Lock Cond & New light stable{0x30, 0x80},{0x31, 0x80},{0x38, 0x11},{0x39, 0x34},{0x40, 0xf4},{0x41, 0x55}, //44{0x42, 0x33}, //43{0x43, 0xf6},{0x44, 0x55}, //44{0x45, 0x44}, //33{0x46, 0x00},{0x50, 0xb2},{0x51, 0x81},{0x52, 0x98},{0x80, 0x40}, //3e{0x81, 0x20},{0x82, 0x3e},{0x83, 0x5e}, //5e{0x84, 0x1e}, //24{0x85, 0x5e}, //54 //56 //5a{0x86, 0x22}, //24 //22{0x87, 0x49},{0x88, 0x39},{0x89, 0x37}, //38{0x8a, 0x28}, //2a{0x8b, 0x41}, //47{0x8c, 0x39}, {0x8d, 0x34}, {0x8e, 0x28}, //2c{0x8f, 0x53}, //4e{0x90, 0x52}, //4d{0x91, 0x51}, //4c{0x92, 0x4e}, //4a{0x93, 0x4a}, //46{0x94, 0x45},{0x95, 0x3d},{0x96, 0x31},{0x97, 0x28},{0x98, 0x24},{0x99, 0x20},{0x9a, 0x20},{0x9b, 0x77},{0x9c, 0x77},{0x9d, 0x48},{0x9e, 0x38},{0x9f, 0x30},{0xa0, 0x60},{0xa1, 0x34},{0xa2, 0x6f},{0xa3, 0xff},{0xa4, 0x14}, //1500fps{0xa5, 0x2c}, // 700fps{0xa6, 0xcf},{0xad, 0x40},{0xae, 0x4a},{0xaf, 0x28}, // low temp Rgain{0xb0, 0x26}, // low temp Rgain{0xb1, 0x00}, //0x20 -> 0x00 0405 modify{0xb4, 0xea},{0xb8, 0xa0}, //a2: b-2, R+2 //b4 B-3, R+4 lowtemp{0xb9, 0x00},/////// PAGE 20 ///////{0x03, 0x20},{0x10, 0x8c},// PAGE 20{0x03, 0x20}, //page 20{0x10, 0x9c}, //ae off// PAGE 22{0x03, 0x22}, //page 22{0x10, 0xe9}, //awb off// PAGE 0{0x03, 0x00},{0x0e, 0x03}, //PLL On{0x0e, 0x73}, //PLLx2{0x03, 0x00}, // Dummy 750us{0x03, 0x00},{0x03, 0x00},{0x03, 0x00},{0x03, 0x00},{0x03, 0x00},{0x03, 0x00},{0x03, 0x00},{0x03, 0x00},{0x03, 0x00},{0x03, 0x00}, // Page 0{0x01, 0xf8}, // Sleep Off 0xf8->0x50 for solve green line issue{REG_TERM, VAL_TERM}};static struct regulator *io_regulator;static struct regulator *core_regulator;static struct regulator *analog_regulator;static struct regulator *gpo_regulator;static struct mxc_camera_platform_data *camera_plat;static int hi253_probe(struct i2c_client *adapter,const struct i2c_device_id *device_id);static int hi253_remove(struct i2c_client *client);static s32 hi253_read_reg(u16 reg, u8 *val);static s32 hi253_write_reg(u16 reg, u8 val);static const struct i2c_device_id hi253_id[] = {{"hi253", 0},{},};MODULE_DEVICE_TABLE(i2c, hi253_id);static struct i2c_driver hi253_i2c_driver = {.driver = { .owner = THIS_MODULE, .name = "hi253", },.probe = hi253_probe,.remove = hi253_remove,.id_table = hi253_id,};extern void gpio_sensor_active(unsigned int csi_index);extern void gpio_sensor_inactive(unsigned int csi);static s32 hi253_write_reg(u16 reg, u8 val){u8 au8Buf[3] = {0};//au8Buf[0] = reg >> 8;au8Buf[0] = reg & 0xff;au8Buf[1] = val;if (i2c_master_send(hi253_data.i2c_client, au8Buf, 2) < 0) {pr_err("%s:write reg error:reg=%x,val=%x\n",__func__, reg, val);return -1;}return 0;}static s32 hi253_read_reg(u16 reg, u8 *val){u8 au8RegBuf[2] = {0};u8 u8RdVal = 0;//au8RegBuf[0] = reg >> 8;au8RegBuf[0] = reg & 0xff; printk("\n=== [joe]=== %s, %d, %s\n", __FILE__,__LINE__,__func__);if (2 != i2c_master_send(hi253_data.i2c_client, au8RegBuf, 1)) {pr_err("%s:write reg error:reg=%x\n",__func__, reg);return -1;}if (1 != i2c_master_recv(hi253_data.i2c_client, &u8RdVal, 1)) {pr_err("%s:read reg error:reg=%x,val=%x\n",__func__, reg, u8RdVal);return -1;}*val = u8RdVal;return 0;}static int hi253_init_mode(enum hi253_frame_rate frame_rate, enum hi253_mode mode){struct sensor_reg *pModeSetting = NULL;s32 i = 0;s32 iModeSettingArySize = 0;register u16 RegAddr = 0;register u8 Val = 0;int retval = 0;if (mode > hi253_mode_MAX || mode < hi253_mode_MIN) {pr_err("Wrong hi253 mode detected!\n");return -1;}printk("\n\n====joe==========frame=%d, mode=%d ======\n\n",frame_rate,mode);pModeSetting = hi253_mode_info_data[frame_rate][mode].init_data_ptr;iModeSettingArySize =hi253_mode_info_data[frame_rate][mode].init_data_size; printk("\n=========iModeSettingArySize=%d ===========\n",iModeSettingArySize);hi253_data.pix.width = hi253_mode_info_data[frame_rate][mode].width;hi253_data.pix.height = hi253_mode_info_data[frame_rate][mode].height;printk("\n\n====joe=======width=%d, height=%d ======\n\n",hi253_data.pix.width,hi253_data.pix.height);for (i = 0; i < iModeSettingArySize; ++i, ++pModeSetting) {RegAddr = pModeSetting->reg;Val = pModeSetting->val;retval = hi253_write_reg(RegAddr, Val);if (retval < 0){printk("\n ERROR: Write register fail. hi253_init_mode\n");return -1;}}if ( mode == 0 ){msleep(500);}/*retval = hi253_write_reg(0x03, 0x00);retval = hi253_write_reg(0x03, 0x20); if (retval < 0){printk("\n ERROR: Write register fail. hi253_init_mode\n");return -1;}*/return 0;/*int err; struct sensor_reg *next = sensor_initialize; printk("=== [joe]hi253_init_mode=== %s, %d, %s\n", __FILE__,__LINE__,__func__); if (mode > hi253_mode_MAX || mode < hi253_mode_MIN) {pr_err("Wrong hi253 mode detected!\n");return -1;}while (!((next->reg == REG_TERM) && (next->val == VAL_TERM))){//printk("====hi253_init_mode reg=%d, val=%d =====\n",next->reg,next->val);if(next->reg == REG_TERM && next->val != VAL_TERM){mdelay(next->val);printk("Sensor init Delay[%d]!!!! \n", next->val);next++;}else{err = hi253_write_reg(next->reg, next->val); if (err) {printk("ERROR: Sensor I2C !!!! \n"); return -1; }else { next++; }}}return 0;*/}/* --------------- IOCTL functions from v4l2_int_ioctl_desc --------------- */static int ioctl_g_ifparm(struct v4l2_int_device *s, struct v4l2_ifparm *p){if (s == NULL) {pr_err(" ERROR!! no slave device set!\n");return -1;} printk("\n=== [joe]=== %s, %d, %s\n", __FILE__,__LINE__,__func__);memset(p, 0, sizeof(*p));p->u.bt656.clock_curr = hi253_data.mclk;pr_debug(" clock_curr=mclk=%d\n", hi253_data.mclk);p->if_type = V4L2_IF_TYPE_BT656;p->u.bt656.mode = V4L2_IF_TYPE_BT656_MODE_NOBT_8BIT;p->u.bt656.clock_min = HI253_XCLK_MIN;p->u.bt656.clock_max = HI253_XCLK_MAX;p->u.bt656.bt_sync_correct = 1; /* Indicate external vsync */return 0;}/*! * ioctl_s_power - V4L2 sensor interface handler for VIDIOC_S_POWER ioctl * @s: pointer to standard V4L2 device structure * @on: indicates power mode (on or off) * * Turns the power on or off, depending on the value of on and returns the * appropriate error code. */static int ioctl_s_power(struct v4l2_int_device *s, int on){struct sensor *sensor = s->priv; printk("\n=== [joe]=== %s, %d, %s\n", __FILE__,__LINE__,__func__);if (on && !sensor->on) {gpio_sensor_active(hi253_data.csi);if (io_regulator)if (regulator_enable(io_regulator) != 0)return -EIO;if (core_regulator)if (regulator_enable(core_regulator) != 0)return -EIO;if (gpo_regulator)if (regulator_enable(gpo_regulator) != 0)return -EIO;if (analog_regulator)if (regulator_enable(analog_regulator) != 0)return -EIO;/* Make sure power on */if (camera_plat->pwdn)camera_plat->pwdn(0);} else if (!on && sensor->on) {if (analog_regulator)regulator_disable(analog_regulator);if (core_regulator)regulator_disable(core_regulator);if (io_regulator)regulator_disable(io_regulator);if (gpo_regulator)regulator_disable(gpo_regulator);gpio_sensor_inactive(hi253_data.csi);}sensor->on = on;return 0;}/*! * ioctl_g_parm - V4L2 sensor interface handler for VIDIOC_G_PARM ioctl * @s: pointer to standard V4L2 device structure * @a: pointer to standard V4L2 VIDIOC_G_PARM ioctl structure * * Returns the sensor's video CAPTURE parameters. */static int ioctl_g_parm(struct v4l2_int_device *s, struct v4l2_streamparm *a){struct sensor *sensor = s->priv;struct v4l2_captureparm *cparm = &a->parm.capture;int ret = 0; printk("\n=== [joe]=== %s, %d, %s\n", __FILE__,__LINE__,__func__);switch (a->type) {/* This is the only case currently handled. */case V4L2_BUF_TYPE_VIDEO_CAPTURE:memset(a, 0, sizeof(*a));a->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;cparm->capability = sensor->streamcap.capability;cparm->timeperframe = sensor->streamcap.timeperframe;cparm->capturemode = sensor->streamcap.capturemode;printk("\n++++++++cparm->capturemode=%d +++++++++\n",cparm->capturemode );ret = 0;break;/* These are all the possible cases. */case V4L2_BUF_TYPE_VIDEO_OUTPUT:case V4L2_BUF_TYPE_VIDEO_OVERLAY:case V4L2_BUF_TYPE_VBI_CAPTURE:case V4L2_BUF_TYPE_VBI_OUTPUT:case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE:case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT:ret = -EINVAL;break;default:pr_debug(" type is unknown - %d\n", a->type);ret = -EINVAL;break;}return ret;}/*! * ioctl_s_parm - V4L2 sensor interface handler for VIDIOC_S_PARM ioctl * @s: pointer to standard V4L2 device structure * @a: pointer to standard V4L2 VIDIOC_S_PARM ioctl structure * * Configures the sensor to use the input parameters, if possible. If * not possible, reverts to the old parameters and returns the * appropriate error code. */static int ioctl_s_parm(struct v4l2_int_device *s, struct v4l2_streamparm *a){struct sensor *sensor = s->priv;struct v4l2_fract *timeperframe = &a->parm.capture.timeperframe;u32 tgt_fps;/* target frames per secound */enum hi253_frame_rate frame_rate;int ret = 0; printk("\n=== [joe]=== %s, %d, %s\n", __FILE__,__LINE__,__func__);/* Make sure power on */if (camera_plat->pwdn)camera_plat->pwdn(0);switch (a->type) {/* This is the only case currently handled. */case V4L2_BUF_TYPE_VIDEO_CAPTURE:/* Check that the new frame rate is allowed. */if ((timeperframe->numerator == 0) || (timeperframe->denominator == 0)) {timeperframe->denominator = DEFAULT_FPS;timeperframe->numerator = 1;}tgt_fps = timeperframe->denominator / timeperframe->numerator;if (tgt_fps > MAX_FPS) {timeperframe->denominator = MAX_FPS;timeperframe->numerator = 1;} else if (tgt_fps < MIN_FPS) {timeperframe->denominator = MIN_FPS;timeperframe->numerator = 1;}/* Actual frame rate we use */tgt_fps = timeperframe->denominator / timeperframe->numerator;if (tgt_fps == 15)frame_rate = hi253_15_fps;else if (tgt_fps == 30)frame_rate = hi253_30_fps;else {pr_err(" The camera frame rate is not supported!\n");return -EINVAL;}sensor->streamcap.timeperframe = *timeperframe;sensor->streamcap.capturemode =(u32)a->parm.capture.capturemode;ret = hi253_init_mode(frame_rate, sensor->streamcap.capturemode);break;/* These are all the possible cases. */case V4L2_BUF_TYPE_VIDEO_OUTPUT:case V4L2_BUF_TYPE_VIDEO_OVERLAY:case V4L2_BUF_TYPE_VBI_CAPTURE:case V4L2_BUF_TYPE_VBI_OUTPUT:case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE:case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT:pr_debug(" type is not " \"V4L2_BUF_TYPE_VIDEO_CAPTURE but %d\n",a->type);ret = -EINVAL;break;default:pr_debug(" type is unknown - %d\n", a->type);ret = -EINVAL;break;}return ret;}/*! * ioctl_g_fmt_cap - V4L2 sensor interface handler for ioctl_g_fmt_cap * @s: pointer to standard V4L2 device structure * @f: pointer to standard V4L2 v4l2_format structure * * Returns the sensor's current pixel format in the v4l2_format * parameter. */static int ioctl_g_fmt_cap(struct v4l2_int_device *s, struct v4l2_format *f){struct sensor *sensor = s->priv;/*u8 HI253_Sleep_Mode;u8 CLK_DIV_REG;u32 HI253_pv_HI253_exposure_lines;u32 HI253_cp_HI253_exposure_lines; int retval = 0;*/f->fmt.pix = sensor->pix;f->win.w.width/*HI253_Sleep_Mode = (hi253_read_reg(0x01,0xff) & 0xfe);HI253_Sleep_Mode |= 0x01;retval = hi253_write_reg(0x01, HI253_Sleep_Mode);CLK_DIV_REG=(hi253_read_reg(0x12,0xff)&0xFc); // don't divide,PCLK=48M//read the shutter (manual exptime)retval = hi253_write_reg(0x03, 0x20);HI253_pv_HI253_exposure_lines = (hi253_read_reg(0x80,0xff) << 16)|(hi253_read_reg(0x81,0xff) << 8)|hi253_read_reg(0x82,0xff);HI253_cp_HI253_exposure_lines = HI253_pv_HI253_exposure_lines/2;retval = hi253_write_reg(0x03, 0x00); retval = hi253_write_reg(0x20, 0x00); retval = hi253_write_reg(0x21, 0x0a); retval = hi253_write_reg(0x22, 0x00); retval = hi253_write_reg(0x23, 0x0a); retval = hi253_write_reg(0x40, 0x01); //360retval = hi253_write_reg(0x41, 0x68); retval = hi253_write_reg(0x42, 0x00);retval = hi253_write_reg(0x43, 0x14);retval = hi253_write_reg(0x03, 0x10);retval = hi253_write_reg(0x3f, 0x00);//Page12retval = hi253_write_reg(0x03, 0x12);retval = hi253_write_reg(0x20, 0x0f);retval = hi253_write_reg(0x21, 0x0f);retval = hi253_write_reg(0x90, 0x5d);//Page13retval = hi253_write_reg(0x03, 0x13);retval = hi253_write_reg(0x80, 0xfd);// 1600*1200retval = hi253_write_reg(0x03,0x00);retval = hi253_write_reg(0x10,0x00);retval = hi253_write_reg(0x03, 0x00); retval = hi253_write_reg(0x12,21);retval = hi253_write_reg(0x03, 0x20); retval = hi253_write_reg(0x86, 0x01);retval = hi253_write_reg(0x87, 0xf4);retval = hi253_write_reg(0x8b, 0x3a);retval = hi253_write_reg(0x8c, 0x98);retval = hi253_write_reg(0x8d, 0x30);retval = hi253_write_reg(0x8e, 0xd4);retval = hi253_write_reg(0x9c, 0x17);retval = hi253_write_reg(0x9d, 0x70);retval = hi253_write_reg(0x9e, 0x01);retval = hi253_write_reg(0x9f, 0xf4);if(HI253_cp_HI253_exposure_lines<1)HI253_cp_HI253_exposure_lines=1;retval = hi253_write_reg(0x03, 0x20); retval = hi253_write_reg(0x83, HI253_cp_HI253_exposure_lines >> 16);retval = hi253_write_reg(0x84, (HI253_cp_HI253_exposure_lines >> 8) & 0x000000FF);retval = hi253_write_reg(0x85, HI253_cp_HI253_exposure_lines & 0x000000FF);retval = hi253_write_reg(0x03,0x00); HI253_Sleep_Mode = (hi253_read_reg(0x01,0xff) & 0xfe);HI253_Sleep_Mode |= 0x00;retval = hi253_write_reg(0x01, HI253_Sleep_Mode);*/return 0;}/*! * ioctl_g_ctrl - V4L2 sensor interface handler for VIDIOC_G_CTRL ioctl * @s: pointer to standard V4L2 device structure * @vc: standard V4L2 VIDIOC_G_CTRL ioctl structure * * If the requested control is supported, returns the control's current * value from the video_control[] array. Otherwise, returns -EINVAL * if the control is not supported. */static int ioctl_g_ctrl(struct v4l2_int_device *s, struct v4l2_control *vc){int ret = 0; switch (vc->id) {case V4L2_CID_BRIGHTNESS:vc->value = hi253_data.brightness;break;case V4L2_CID_HUE:vc->value = hi253_data.hue;break;case V4L2_CID_CONTRAST:vc->value = hi253_data.contrast;break;case V4L2_CID_SATURATION:vc->value = hi253_data.saturation;break;case V4L2_CID_RED_BALANCE:vc->value = hi253_data.red;break;case V4L2_CID_BLUE_BALANCE:vc->value = hi253_data.blue;break;case V4L2_CID_EXPOSURE:vc->value = hi253_data.ae_mode;break;default:ret = -EINVAL;}return ret;}/*! * ioctl_s_ctrl - V4L2 sensor interface handler for VIDIOC_S_CTRL ioctl * @s: pointer to standard V4L2 device structure * @vc: standard V4L2 VIDIOC_S_CTRL ioctl structure * * If the requested control is supported, sets the control's current * value in HW (and updates the video_control[] array). Otherwise, * returns -EINVAL if the control is not supported. */static int ioctl_s_ctrl(struct v4l2_int_device *s, struct v4l2_control *vc){int retval = 0; printk("\n=== [joe]=== %s, %d, %s\n", __FILE__,__LINE__,__func__);pr_debug("In hi253:ioctl_s_ctrl %d\n", vc->id);switch (vc->id) {case V4L2_CID_BRIGHTNESS:break;case V4L2_CID_CONTRAST:break;case V4L2_CID_SATURATION:break;case V4L2_CID_HUE:break;case V4L2_CID_AUTO_WHITE_BALANCE:break;case V4L2_CID_DO_WHITE_BALANCE:break;case V4L2_CID_RED_BALANCE:break;case V4L2_CID_BLUE_BALANCE:break;case V4L2_CID_GAMMA:break;case V4L2_CID_EXPOSURE:break;case V4L2_CID_AUTOGAIN:break;case V4L2_CID_GAIN:break;case V4L2_CID_HFLIP:break;case V4L2_CID_VFLIP:break;default:retval = -EPERM;break;}return retval;}/*! * ioctl_init - V4L2 sensor interface handler for VIDIOC_INT_INIT * @s: pointer to standard V4L2 device structure */static int ioctl_init(struct v4l2_int_device *s){ return 0;}/*! * ioctl_dev_init - V4L2 sensor interface handler for vidioc_int_dev_init_num * @s: pointer to standard V4L2 device structure * * Initialise the device when slave attaches to the master. */static int ioctl_dev_init(struct v4l2_int_device *s){struct sensor *sensor = s->priv;u32 tgt_xclk;/* target xclk */u32 tgt_fps;/* target frames per secound */enum hi253_frame_rate frame_rate;gpio_sensor_active(hi253_data.csi);hi253_data.on = true;/* mclk */tgt_xclk = hi253_data.mclk;tgt_xclk = min(tgt_xclk, (u32)HI253_XCLK_MAX);tgt_xclk = max(tgt_xclk, (u32)HI253_XCLK_MIN);hi253_data.mclk = tgt_xclk;pr_debug(" Setting mclk to %d MHz\n", tgt_xclk / 1000000);set_mclk_rate(&hi253_data.mclk, hi253_data.csi);/* Default camera frame rate is set in probe */tgt_fps = sensor->streamcap.timeperframe.denominator / sensor->streamcap.timeperframe.numerator;if (tgt_fps == 15)frame_rate = hi253_15_fps;else if (tgt_fps == 30)frame_rate = hi253_30_fps;elsereturn -EINVAL; /* Only support 15fps or 30fps now. */return hi253_init_mode(frame_rate,sensor->streamcap.capturemode);}/*! * ioctl_dev_exit - V4L2 sensor interface handler for vidioc_int_dev_exit_num * @s: pointer to standard V4L2 device structure * * Delinitialise the device when slave detaches to the master. */static int ioctl_dev_exit(struct v4l2_int_device *s){gpio_sensor_inactive(hi253_data.csi); printk("\n=== [joe]=== %s, %d, %s\n", __FILE__,__LINE__,__func__);return 0;}/*! * This structure defines all the ioctls for this module and links them to the * enumeration. */static struct v4l2_int_ioctl_desc hi253_ioctl_desc[] = {{vidioc_int_dev_init_num, (v4l2_int_ioctl_func *)ioctl_dev_init},{vidioc_int_dev_exit_num, ioctl_dev_exit},{vidioc_int_s_power_num, (v4l2_int_ioctl_func *)ioctl_s_power},{vidioc_int_g_ifparm_num, (v4l2_int_ioctl_func *)ioctl_g_ifparm},/*{vidioc_int_g_needs_reset_num,(v4l2_int_ioctl_func *)ioctl_g_needs_reset}, *//*{vidioc_int_reset_num, (v4l2_int_ioctl_func *)ioctl_reset}, */{vidioc_int_init_num, (v4l2_int_ioctl_func *)ioctl_init},/*{vidioc_int_enum_fmt_cap_num,(v4l2_int_ioctl_func *)ioctl_enum_fmt_cap}, *//*{vidioc_int_try_fmt_cap_num,(v4l2_int_ioctl_func *)ioctl_try_fmt_cap}, */{vidioc_int_g_fmt_cap_num, (v4l2_int_ioctl_func *)ioctl_g_fmt_cap},/*{vidioc_int_s_fmt_cap_num, (v4l2_int_ioctl_func *)ioctl_s_fmt_cap}, */{vidioc_int_g_parm_num, (v4l2_int_ioctl_func *)ioctl_g_parm},{vidioc_int_s_parm_num, (v4l2_int_ioctl_func *)ioctl_s_parm},/*{vidioc_int_queryctrl_num, (v4l2_int_ioctl_func *)ioctl_queryctrl}, */{vidioc_int_g_ctrl_num, (v4l2_int_ioctl_func *)ioctl_g_ctrl},{vidioc_int_s_ctrl_num, (v4l2_int_ioctl_func *)ioctl_s_ctrl},};static struct v4l2_int_slave hi253_slave = {.ioctls = hi253_ioctl_desc,.num_ioctls = ARRAY_SIZE(hi253_ioctl_desc),};static struct v4l2_int_device hi253_int_device = {.module = THIS_MODULE,.name = "hi253",.type = v4l2_int_type_slave,.u = {.slave = &hi253_slave,},};/*! * hi253 I2C probe function * * @param adapter struct i2c_adapter * * @return Error code indicating success or failure */static int hi253_probe(struct i2c_client *client,const struct i2c_device_id *id){int retval;struct mxc_camera_platform_data *plat_data = client->dev.platform_data; printk("\n=== [joe]=== %s, %d, %s\n", __FILE__,__LINE__,__func__);/* Set initial values for the sensor struct. */memset(&hi253_data, 0, sizeof(hi253_data));hi253_data.mclk = 24000000; /* 6 - 54 MHz, typical 24MHz */hi253_data.mclk = plat_data->mclk;hi253_data.csi = plat_data->csi;hi253_data.i2c_client = client;hi253_data.pix.pixelformat = V4L2_PIX_FMT_UYVY;hi253_data.pix.width = 640;hi253_data.pix.height = 480;hi253_data.streamcap.capability = V4L2_MODE_HIGHQUALITY | V4L2_CAP_TIMEPERFRAME;hi253_data.streamcap.capturemode = 0;hi253_data.streamcap.timeperframe.denominator = DEFAULT_FPS;hi253_data.streamcap.timeperframe.numerator = 1;if (plat_data->io_regulator) {io_regulator = regulator_get(&client->dev, plat_data->io_regulator);if (!IS_ERR(io_regulator)) {regulator_set_voltage(io_regulator, HI253_VOLTAGE_DIGITAL_IO, HI253_VOLTAGE_DIGITAL_IO);if (regulator_enable(io_regulator) != 0) {pr_err("%s:io set voltage error\n", __func__);goto err1;} else {dev_dbg(&client->dev,"%s:io set voltage ok\n", __func__);}} elseio_regulator = NULL;}if (plat_data->core_regulator) {core_regulator = regulator_get(&client->dev, plat_data->core_regulator);if (!IS_ERR(core_regulator)) {regulator_set_voltage(core_regulator, HI253_VOLTAGE_DIGITAL_CORE, HI253_VOLTAGE_DIGITAL_CORE);if (regulator_enable(core_regulator) != 0) {pr_err("%s:core set voltage error\n", __func__);goto err2;} else {dev_dbg(&client->dev,"%s:core set voltage ok\n", __func__);}} elsecore_regulator = NULL;}if (plat_data->analog_regulator) {analog_regulator = regulator_get(&client->dev, plat_data->analog_regulator);if (!IS_ERR(analog_regulator)) {regulator_set_voltage(analog_regulator, HI253_VOLTAGE_ANALOG, HI253_VOLTAGE_ANALOG);if (regulator_enable(analog_regulator) != 0) {pr_err("%s:analog set voltage error\n",__func__);goto err3;} else {dev_dbg(&client->dev,"%s:analog set voltage ok\n", __func__);}} elseanalog_regulator = NULL;}if (plat_data->gpo_regulator) {gpo_regulator = regulator_get(&client->dev, plat_data->gpo_regulator);if (!IS_ERR(gpo_regulator)) {regulator_set_voltage(gpo_regulator, HI253_VOLTAGE_DIGITAL_GPO, HI253_VOLTAGE_DIGITAL_GPO);if (regulator_enable(gpo_regulator) != 0) {pr_err("%s:gpo enable error\n", __func__);goto err4;} else {dev_dbg(&client->dev,"%s:gpo enable ok\n", __func__);}} elsegpo_regulator = NULL;}if (plat_data->pwdn)plat_data->pwdn(0);camera_plat = plat_data;hi253_int_device.priv = &hi253_data;retval = v4l2_int_device_register(&hi253_int_device);return retval;err4:if (analog_regulator) {regulator_disable(analog_regulator);regulator_put(analog_regulator);}err3:if (core_regulator) {regulator_disable(core_regulator);regulator_put(core_regulator);}err2:if (io_regulator) {regulator_disable(io_regulator);regulator_put(io_regulator);}err1:return -1;}/*! * hi253 I2C detach function * * @param client struct i2c_client * * @return Error code indicating success or failure */static int hi253_remove(struct i2c_client *client){v4l2_int_device_unregister(&hi253_int_device);if (gpo_regulator) {regulator_disable(gpo_regulator);regulator_put(gpo_regulator);}if (analog_regulator) {regulator_disable(analog_regulator);regulator_put(analog_regulator);}if (core_regulator) {regulator_disable(core_regulator);regulator_put(core_regulator);}if (io_regulator) {regulator_disable(io_regulator);regulator_put(io_regulator);}return 0;}/*! * hi253 init function * Called by insmod hi253_camera.ko. * * @return Error code indicating success or failure */static __init int hi253_init(void){u8 err;err = i2c_add_driver(&hi253_i2c_driver);if (err != 0)pr_err("%s:driver registration failed, error=%d \n",__func__, err); return err;}/*! * HI253 cleanup function * Called on rmmod hi253_camera.ko * * @return Error code indicating success or failure */static void __exit hi253_clean(void){i2c_del_driver(&hi253_i2c_driver);}module_init(hi253_init);module_exit(hi253_clean);MODULE_AUTHOR("XXX,Inc. JOE");MODULE_DESCRIPTION("HI253 Camera Driver");MODULE_LICENSE("GPL");MODULE_VERSION("1.0");MODULE_ALIAS("CSI");