From 9263d36328f867e5f6b4f7bfc6d27f077dd43010 Mon Sep 17 00:00:00 2001 From: Dmitry Ermakov Date: Sun, 16 Jan 2022 16:18:33 +0300 Subject: [PATCH] Add IMX385 for Hi3519v101 --- .../files/sensor/config/imx385_i2c_1080p.ini | 106 ++++++++++++++++++ .../files/sensor/libsns_imx385.so | Bin 0 -> 32268 bytes 2 files changed, 106 insertions(+) create mode 100644 general/package/hisilicon-osdrv-hi3519v101/files/sensor/config/imx385_i2c_1080p.ini create mode 100755 general/package/hisilicon-osdrv-hi3519v101/files/sensor/libsns_imx385.so diff --git a/general/package/hisilicon-osdrv-hi3519v101/files/sensor/config/imx385_i2c_1080p.ini b/general/package/hisilicon-osdrv-hi3519v101/files/sensor/config/imx385_i2c_1080p.ini new file mode 100644 index 00000000..3a6200eb --- /dev/null +++ b/general/package/hisilicon-osdrv-hi3519v101/files/sensor/config/imx385_i2c_1080p.ini @@ -0,0 +1,106 @@ +[sensor] +Sensor_type=imx385 +Mode=WDR_MODE_NONE +DllFile=/usr/lib/sensors/libsns_imx385.so + +[mode] +input_mode=INPUT_MODE_MIPI +dev_attr=0 + +[mipi] +data_type=RAW_DATA_12BIT +lane_id = 0|1|2|3|-1|-1|-1|-1| ;lane_id: -1 - disable + +[isp_image] +Isp_x =0 +Isp_y =0 +Isp_W =1920 +Isp_H =1080 +Isp_FrameRate=25 +Isp_Bayer=BAYER_RGGB + +[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) +FixCode=0 +FieldPolar=0 +DataPath=1 +InputDataType=1 ;VI_DATA_TYPE_YUV = 0,VI_DATA_TYPE_RGB = 1, +DataRev =FALSE ;Data reverse. FALSE = 0; TRUE = 1 +DevRect_x=4 +DevRect_y=4 +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 =23;PIXEL_FORMAT_YUV_SEMIPLANAR_422 = 22 + ;PIXEL_FORMAT_YUV_SEMIPLANAR_420 = 23 ...etc +CompressMode =0 ;COMPRESS_MODE_NONE = 0 + ;COMPRESS_MODE_SEG =1 ...etc + +SrcFrameRate=-1 ;Source frame rate. -1: not controll +FrameRate =-1 ;Target frame rate. -1: not controll diff --git a/general/package/hisilicon-osdrv-hi3519v101/files/sensor/libsns_imx385.so b/general/package/hisilicon-osdrv-hi3519v101/files/sensor/libsns_imx385.so new file mode 100755 index 0000000000000000000000000000000000000000..419751bf40fff2c849debf7df950ea4610f60eab GIT binary patch literal 32268 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