#include "sys_config.h" #include "typesdef.h" #include "lib/video/dvp/cmos_sensor/csi.h" #include "tx_platform.h" #include "list.h" #include "dev.h" #include "hal/isp.h" #if DEV_SENSOR_H62 SENSOR_INIT_SECTION const unsigned char H62InitTable[CMOS_INIT_LEN]= { 0x12,0x40, 0x0C,0x00, 0x0D,0x58, 0x0E,0x17, 0x0F,0x06, 0x10,0x20, 0x11,0x80, //*/ /*0x12,0x40, 0x0E,0x11, 0x0F,0x09, 0x10,0x24, 0x11,0x80,//*/ //0x20,0x40,//;60 //0x21,0x0b,//;09 //0x22,0xee, //0x23,0x02, 0x20,0x90,//;60 0x21,0x09,//;09 0x22,0x20, 0x23,0x03, #if 0 0x24,0x05, //Сģ×é 0x04 //0x25,0xD0, 0x25,0xd4, 0x26,0x25, 0x27,0xd2, 0x28,0x15, //0x29,0x02, 0x29,0x02, #else #if 0 //0x24,0x04, //0x25,0xd4, //0x26,0x25, #else 0x24,0x00, 0x25,0xd0, 0x26,0x25, #endif 0x27,0xd4, 0x28,0x15, 0x29,0x02,//*/// #endif 0x2A,0x63, 0x2B,0x21, 0x2C,0x08, 0x2D,0x01, 0x2E,0xBC, 0x2F,0xC0, 0x30,0x98, 0x31,0x0C, 0x32,0xF0, 0x33,0x4C, 0x34,0x2F, 0x35,0xA3, 0x36,0x05, 0x38,0x53, 0x39,0x94, 0x3A,0x08, 0x41,0x88, 0x42,0x12, 0x46,0xC2, 0x48,0x7E, 0x60,0x03, 0x62,0x40, 0x63,0x80, 0x66,0x28, 0x67,0xf8, 0x68,0x04, 0x69,0x74, 0x6A,0x30, 0x59,0x9C, 0x6C,0xC0, 0x6E,0x5C, 0x56,0x02, 0x57,0x80, 0x58,0x33, 0x5a,0x04, 0x5b,0xB6, 0x5c,0x08, 0x5d,0x67, 0x5e,0x04, 0x5f,0x08, 0x7D,0x57, 0x7E,0x28, 0x80,0x00, 0x1D,0xFF, 0x1E,0x1F, //0x4A,0x05, 0x4A,0x05, 0x4C,0x08, 0x4D,0x08, 0x49,0x08, //0x13,0x81, 0x13,0x81, 0x12,0x00, 0x47,0x47, //sleep 500 0x47,0x44, 0x1F,0x01, // 0x02,0x03, // 0x01,0x20, // 0x00,0x10, 0x02,0x01, 0x01,0x40, 0x00,0x00, 0x19,0x68, 0xff,0xff// }; const _Sensor_CCM h62_ccm_init = { // 5500k, gamma2p2 0x209, 0xf8b, 0xfe7, 0xf0d, 0x1d7, 0xf0c, 0xfe8, 0xf9a, 0x1f6, 0xffb, 0xffd, 0xffb, }; const _Sensor_BLC h62_blc_init = { 25, 25, 24, 23, }; const _Sensor_AWB h62_awb_init = { // r, gr, gb, b 454, 256, 256, 466, // default 306, 256, 256, 466, // min 454, 256, 256, 644, // max }; const _Sensor_AE h62_ae_init = { .max_analog_gain = 32<<8, .min_analog_gain = 1<<8, .default_exposure_line = 0x320, .max_exposure_line = 900, .min_exposure_line = 10, .row_time_us = 2448/24, .expo_frame_interval = 2, }; const _Sensor_CSUPP h62_csupp_init = { // u8 U_luma_thr_lo, U_luma_slop_lo, U_luma_shfb_lo, U_luma_gmin_lo, // u8 U_luma_thr_hi, U_luma_slop_hi, U_luma_shfb_hi, U_luma_gmin_hi, // u8 V_luma_thr_lo, V_luma_slop_lo, V_luma_shfb_lo, V_luma_gmin_lo, // u8 V_luma_thr_hi, V_luma_slop_hi, V_luma_shfb_hi, V_luma_gmin_hi, // u8 chroma_thr_lo, chroma_slop_lo, chroma_shfb_lo, chroma_gmin_lo, 31, 4, 0, 0, 209, 4, 0, 0, 31, 4, 0, 0, 209, 4, 0, 0, 31, 4, 0, 0, }; const _Sensor_SHARP h62_sharp_init = { 255 , //smooth_filt_alpha 0 , //shrink_thr 127 , //filt_clip_hi 127 , //filt_clip_lo 10 , //sp_thr2 5 , //sp_thr1 15 , //enha_clip_hi 25 , //enha_clip_lo 5 ,10 ,15 ,//e1,e2,e3 0 ,64 ,128 ,128 ,//k0,k1,k2,k3 0 ,10 ,30 ,//y1,y2,y3 3 ,4 ,5 , //filt_w11,filt_w12,filt_w13 4 ,6 ,7 , //filt_w21,filt_w22,filt_w23 5 ,7 ,12 , //filt_w31,filt_w32,filt_w33 1 , //filt_type 7 , //filt_sbit 0 , // lpf scale }; const _Sensor_YUVNR h62_yuvnr_init = { 20,20,20,20,20,20,20,20, 205,255,0, }; const _Sensor_COLENH h62_colenh_init = { 50, 50, 50, 0, 0,128,128, 0,128,128, }; const _Sensor_BV2NR h62_bv2nr_init[BV2RAWNR_ARRAY_NUM] = { // ev, bnr_range_weight_index, bnr_invksigma, bnr_intensity_threshold, yuvnr_idx, csupp_idx { 46, 14, 511, 45, 0, 0}, // 646lux { 124, 14, 407, 45, 0, 0}, // 240lux { 1469, 14, 407, 45, 0, 0}, // 20lux { 2959, 14, 244, 45, 0, 0}, // 10lux { 5906, 16, 244, 45, 1, 0}, // 5p03lux { 11864, 16, 122, 35, 2, 1}, // 2p5lux { 23752, 16, 81, 35, 2, 1}, // 1p25lux { 47277, 18, 48, 35, 3, 1}, // 0p62lux { 94554, 18, 48, 35, 3, 1}, // 0p31lux { 283662, 18, 48, 35, 4, 1}, // 0p1lux { 2836620, 31, 40, 35, 5, 1}, // 0p01lux }; const uint32 h62_lsc_tbl[] = { //R channel 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, //GR channel 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, //GB channel 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, //B channel 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, 0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100,0x00040100, }; const _Sensor_LSC h62_lsc_init = { .p_lsc_tbl = (uint32 *)h62_lsc_tbl, }; void h62_ae_adjust(struct isp_exposure_opt *p_cfg) { uint8 gain_segment[] = {1, 2, 4, 8, 16, 32}; uint8 sensor_gain_part1 = 0; uint8 i = 0; uint8 sensor_gain_reg = 0; uint8 analog_gain = p_cfg->analog_gain>>8; uint16 sensor_gain_part2 = 0; uint32 exposure_line = p_cfg->exposure_line; uint8 *addr = (uint8 *)p_cfg->data.addr; // convert the analog gain to match the SFR configure value of H62 for(i=0;i<5;i++){ // note: ae_param->analog_gain is UQ16.8 if(analog_gain < gain_segment[i+1]){ sensor_gain_part1 = i; break; } } sensor_gain_part2 = (((ae_param->analog_gain >> sensor_gain_part1) - 256) >> 4) & 0x0f; sensor_gain_reg = (sensor_gain_part1 << 4) | sensor_gain_part2; i = 0; addr[i++] = 0x02; addr[i++] = (exposure_line >> 8) & 0xff; addr[i++] = 0x01; addr[i++] = exposure_line & 0xff; addr[i++] = 0x00; addr[i++] = sensor_gain_reg; p_cfg->data.size = i; p_cfg->cmd_len = 1+1; } SENSOR_OP_SECTION const _Sensor_Adpt_ h62_cmd= { .typ = 1, //YUV .pixelw = 1280, .pixelh= 720, .hsyn = 1, .vsyn = 0, .rduline = 0,// .rawwide = 1,//10bit .colrarray = 2,//0:_RGRG_ 1:_GRGR_,2:_BGBG_,3:_GBGB_ .init = (uint8 *)H62InitTable, .init_len = sizeof(H62InitTable), .rotate_adapt = {0}, .hvb_adapt = {0x80,0x0a,0x80,0x0a}, .mclk = 20000000, .p_fun_adapt = {NULL,NULL,NULL}, }; const _Sensor_Ident_ h62_init= { 0x62,0x60,0x61,0x01,0x01,0x0b }; const _Sensor_ISP_Init h62_isp_init = { .type = ISP_INPUT_DAT_SRC_DVP, .pixel_h = 720, .pixel_w = 1280, .bayer_patten = ISP_BAYER_FORMAT_BGGR, .input_format = ISP_INPUT_DAT_FORMAT_RAW10, .adjust_func = (isp_ae_func )h62_ae_adjust, .p_adpt = (_Sensor_Adpt_ *)&h62_cmd, .p_ident = (_Sensor_Ident_ *)&h62_init, .p_blc = (_Sensor_BLC *)&h62_blc_init, .p_ccm = (_Sensor_CCM *)&h62_ccm_init, .p_awb = (_Sensor_AWB *)&h62_awb_init, .p_ae = (_Sensor_AE *)&h62_ae_init, .p_csupp = (_Sensor_CSUPP *)&h62_csupp_init, .p_sharp = (_Sensor_SHARP *)&h62_sharp_init, .p_yuvnr = (_Sensor_YUVNR *)&h62_yuvnr_init, .p_colenh = (_Sensor_COLENH *)&h62_colenh_init, .p_bv2nr = (_Sensor_BV2NR *)h62_bv2nr_init, .p_lsc = (_Sensor_LSC *)&h62_lsc_init, }; #endif