From 806b273a806be0b5c8c0bdf318959269e9764142 Mon Sep 17 00:00:00 2001 From: YuukiHogo Date: Mon, 6 Nov 2023 20:53:14 +0300 Subject: [PATCH] Added support for SOI F23 DC sensor (#1110) Co-authored-by: Yuuki Hogo --- .../files/script/load_goke | 2 +- .../sensor/config/jxf23_i2c_dc_1080p.ini | 98 ++++++++++++++++++ .../files/sensor/libsns_f23_dc.so | Bin 0 -> 34984 bytes 3 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 general/package/goke-osdrv-gk7205v200/files/sensor/config/jxf23_i2c_dc_1080p.ini create mode 100644 general/package/goke-osdrv-gk7205v200/files/sensor/libsns_f23_dc.so diff --git a/general/package/goke-osdrv-gk7205v200/files/script/load_goke b/general/package/goke-osdrv-gk7205v200/files/script/load_goke index e9864b4f..03725292 100755 --- a/general/package/goke-osdrv-gk7205v200/files/script/load_goke +++ b/general/package/goke-osdrv-gk7205v200/files/script/load_goke @@ -161,7 +161,7 @@ insert_isp_piris() { } insert_ko() { - if [ "$SENSOR" == "bt656" ]; then + if [ "$SENSOR" == "bt656" ] || [ "$SENSOR" == "jxf23_dc" ]; then YUV_TYPE0=1 fi modprobe open_sys_config chip=$CHIP_TYPE sensors=$SENSOR g_cmos_yuv_flag=$YUV_TYPE0 board=$BOARD diff --git a/general/package/goke-osdrv-gk7205v200/files/sensor/config/jxf23_i2c_dc_1080p.ini b/general/package/goke-osdrv-gk7205v200/files/sensor/config/jxf23_i2c_dc_1080p.ini new file mode 100644 index 00000000..cb8be705 --- /dev/null +++ b/general/package/goke-osdrv-gk7205v200/files/sensor/config/jxf23_i2c_dc_1080p.ini @@ -0,0 +1,98 @@ +[sensor] +Sensor_type=stSnsSoiSensorObj +Mode=WDR_MODE_NONE +DllFile=libsns_f23_dc.so + +[mode] +input_mode=INPUT_MODE_CMOS +raw_bitness=10 + +[mipi] +lane_id = 0|2|-1|-1|-1|-1|-1|-1| ;lane_id: -1 - disable + +[isp_image] +Isp_FrameRate=25 +Isp_Bayer=BAYER_BGGR + +[vi_dev] +Input_mod=VI_MODE_DIGITAL_CAMERA +Work_mod =0 ;VI_WORK_MODE_1Multiplex = 0 + ;VI_WORK_MODE_2Multiplex, + ;VI_WORK_MODE_4Multiplex +Combine_mode =0 ;Y/C composite or separation mode + ;VI_COMBINE_COMPOSITE = 0 /*Composite mode */ + ;VI_COMBINE_SEPARATE, /*Separate mode */ +Comp_mode =0 ;Component mode (single-component or dual-component) + ;VI_COMP_MODE_SINGLE = 0, /*single component mode */ + ;VI_COMP_MODE_DOUBLE = 1, /*double component mode */ +Clock_edge =1 ;Clock edge mode (sampling on the rising or falling edge) + ;VI_CLK_EDGE_SINGLE_UP=0, /*rising edge */ + ;VI_CLK_EDGE_SINGLE_DOWN, /*falling edge */ +Mask_num =2 ;Component mask +Mask_0 =0xFF300000 +Mask_1 =0x0 +Scan_mode = 1;VI_SCAN_INTERLACED = 0 + ;VI_SCAN_PROGRESSIVE, +Data_seq = VI_DATA_SEQ_YUYV ;data sequence (ONLY for YUV format) + ;----2th component U/V sequence in bt1120 + ; VI_INPUT_DATA_VUVU = 0, + ; VI_INPUT_DATA_UVUV, + ;----input sequence for yuv + ; VI_INPUT_DATA_UYVY = 0, + ; VI_INPUT_DATA_VYUY, + ; VI_INPUT_DATA_YUYV, + ; VI_INPUT_DATA_YVYU + +Vsync =0 ; vertical synchronization signal + ;VI_VSYNC_FIELD = 0, + ;VI_VSYNC_PULSE, +VsyncNeg=0 ;Polarity of the vertical synchronization signal + ;VI_VSYNC_NEG_HIGH = 0, + ;VI_VSYNC_NEG_LOW /*if VIU_VSYNC_E +Hsync =0 ;Attribute of the horizontal synchronization signal + ;VI_HSYNC_VALID_SINGNAL = 0, + ;VI_HSYNC_PULSE, +HsyncNeg =0 ;Polarity of the horizontal synchronization signal + ;VI_HSYNC_NEG_HIGH = 0, + ;VI_HSYNC_NEG_LOW +VsyncValid =1 ;Attribute of the valid vertical synchronization signal + ;VI_VSYNC_NORM_PULSE = 0, + ;VI_VSYNC_VALID_SINGAL, +VsyncValidNeg =0;Polarity of the valid vertical synchronization signal + ;VI_VSYNC_VALID_NEG_HIGH = 0, + ;VI_VSYNC_VALID_NEG_LOW +Timingblank_HsyncHfb =0 ;Horizontal front blanking width +Timingblank_HsyncAct =1920 ;Horizontal effetive width +Timingblank_HsyncHbb =0 ;Horizontal back blanking width +Timingblank_VsyncVfb =0 ;Vertical front blanking height +Timingblank_VsyncVact =1080 ;Vertical effetive width +Timingblank_VsyncVbb=0 ;Vertical back blanking height +Timingblank_VsyncVbfb =0 ;Even-field vertical front blanking height(interlace, invalid progressive) +Timingblank_VsyncVbact=0 ;Even-field vertical effetive width(interlace, invalid progressive) +Timingblank_VsyncVbbb =0 ;Even-field vertical back blanking height(interlace, invalid progressive) +InputDataType=1 ;VI_DATA_TYPE_YUV = 0,VI_DATA_TYPE_RGB = 1, +DataRev =FALSE ;Data reverse. FALSE = 0; TRUE = 1 +DevRect_x=200 +DevRect_y=20 +DevRect_w=1920 +DevRect_h=1080 + +;[vi_chn] +;CapRect_X =0 +;CapRect_Y =0 +;CapRect_Width=1920 +;CapRect_Height=1080 +;DestSize_Width=1920 +;DestSize_Height=1080 +;CapSel =2 ;Frame/field select. ONLY used in interlaced mode + ;VI_CAPSEL_TOP = 0, /* top field */ + ;VI_CAPSEL_BOTTOM, /* bottom field */ + ;VI_CAPSEL_BOTH, /* top and bottom field */ + +;PixFormat =26;PIXEL_FORMAT_YVU_SEMIPLANAR_420 = 26 ...etc +;CompressMode =0 ;COMPRESS_MODE_NONE = 0 + ;COMPRESS_MODE_SEG =1 ...etc + +SrcFrameRate=30 ;Source frame rate. -1: not controll +FrameRate =30 ;Target frame rate. -1: not controll + diff --git a/general/package/goke-osdrv-gk7205v200/files/sensor/libsns_f23_dc.so b/general/package/goke-osdrv-gk7205v200/files/sensor/libsns_f23_dc.so new file mode 100644 index 0000000000000000000000000000000000000000..5c29a3f7c3175ae7032af732c162c15c1861c2dd GIT binary patch literal 34984 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