From 6d40d0d85909c37041b3ac3df7e82e4a48610663 Mon Sep 17 00:00:00 2001 From: Dmitry Ermakov Date: Wed, 15 Jan 2025 15:20:58 +0300 Subject: [PATCH] Add OS02G10 driver for Gk7205v200 (as seen on Tiandy boards) --- .../files/sensor/config/os02g10_i2c_1080p.ini | 78 ++++++++++++++++++ .../files/sensor/libsns_os02g10.so | Bin 0 -> 43548 bytes 2 files changed, 78 insertions(+) create mode 100644 general/package/goke-osdrv-gk7205v200/files/sensor/config/os02g10_i2c_1080p.ini create mode 100644 general/package/goke-osdrv-gk7205v200/files/sensor/libsns_os02g10.so diff --git a/general/package/goke-osdrv-gk7205v200/files/sensor/config/os02g10_i2c_1080p.ini b/general/package/goke-osdrv-gk7205v200/files/sensor/config/os02g10_i2c_1080p.ini new file mode 100644 index 00000000..9357e406 --- /dev/null +++ b/general/package/goke-osdrv-gk7205v200/files/sensor/config/os02g10_i2c_1080p.ini @@ -0,0 +1,78 @@ +[sensor] +Sensor_type=stSnsOv02g10Obj +Mode=WDR_MODE_NONE +DllFile=libsns_os02g10.so + +[mode] +input_mode=INPUT_MODE_MIPI +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_MIPI +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 =0xFFF00000 +Mask_1 =0x0 +Scan_mode = 1;VI_SCAN_INTERLACED = 0 + ;VI_SCAN_PROGRESSIVE, +Data_seq =2 ;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 =1 ; vertical synchronization signal + ;VI_VSYNC_FIELD = 0, + ;VI_VSYNC_PULSE, +VsyncNeg=1 ;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 diff --git a/general/package/goke-osdrv-gk7205v200/files/sensor/libsns_os02g10.so b/general/package/goke-osdrv-gk7205v200/files/sensor/libsns_os02g10.so new file mode 100644 index 0000000000000000000000000000000000000000..735d92dc64b40c6131013b3a669ed1c5e5a0e8a2 GIT binary patch literal 43548 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