From 954e6d80bbf342d68ff7801d7732b170eb475e81 Mon Sep 17 00:00:00 2001 From: Dmitry Ermakov Date: Mon, 3 Jan 2022 11:07:59 +0300 Subject: [PATCH] Fix OV4689 for Hi3516Dv100 Add OS05A (needs additional init) --- .../files/script/load_hisilicon | 6 ++ .../files/sensor/config/os05a_i2c_5M.ini | 80 ++++++++++++++++++ .../files/sensor/config/ov4689_i2c_4M.ini | 76 ++++++----------- .../files/sensor/libsns_os05a10.so | Bin 0 -> 37792 bytes 4 files changed, 110 insertions(+), 52 deletions(-) create mode 100644 general/package/hisilicon-osdrv-hi3516av100/files/sensor/config/os05a_i2c_5M.ini create mode 100644 general/package/hisilicon-osdrv-hi3516av100/files/sensor/libsns_os05a10.so diff --git a/general/package/hisilicon-osdrv-hi3516av100/files/script/load_hisilicon b/general/package/hisilicon-osdrv-hi3516av100/files/script/load_hisilicon index 7f496e32..6bb6d0b6 100755 --- a/general/package/hisilicon-osdrv-hi3516av100/files/script/load_hisilicon +++ b/general/package/hisilicon-osdrv-hi3516av100/files/script/load_hisilicon @@ -239,6 +239,12 @@ insert_sns() { devmem 0x2003002c 32 0xB0007 # sensor unreset, clk 27MHz, VI 250MHz ;; + os05a) + devmem 0x200f0050 32 0x2 # i2c0_scl + devmem 0x200f0054 32 0x2 # i2c0_sda + devmem 0x2003002c 32 0xE0003 # sensor unreset, clk 24MHz, VI 297MHz + devmem 0x20030104 32 0x0 # Sensor 24M + ;; bt1120) ;; \ diff --git a/general/package/hisilicon-osdrv-hi3516av100/files/sensor/config/os05a_i2c_5M.ini b/general/package/hisilicon-osdrv-hi3516av100/files/sensor/config/os05a_i2c_5M.ini new file mode 100644 index 00000000..1c244357 --- /dev/null +++ b/general/package/hisilicon-osdrv-hi3516av100/files/sensor/config/os05a_i2c_5M.ini @@ -0,0 +1,80 @@ +[sensor] +Sensor_type=os05a +Mode=WDR_MODE_NONE +DllFile=libsns_os05a10.so + +[mode] +input_mode=INPUT_MODE_MIPI +dev_attr=0 + +[mipi] +data_type=2 +lane_id=0|1|2|3|-1|-1|-1|-1| + +[isp_image] +Isp_FrameRate=30 +Isp_Bayer=BAYER_BGGR + +[vi_dev] +Input_mod=5 +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 =3 ;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 =1280 ;Horizontal effetive width +Timingblank_HsyncHbb =0 ;Horizontal back blanking width +Timingblank_VsyncVfb =0 ;Vertical front blanking height +Timingblank_VsyncVact =720 ;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) +DataPath=1 +InputDataType=1 ;VI_DATA_TYPE_YUV = 0,VI_DATA_TYPE_RGB = 1, +DataRev =FALSE ;Data reverse. FALSE = 0; TRUE = 1 +DevRect_x=0 +DevRect_y=0 +DevRect_w=2592 +DevRect_h=1944 diff --git a/general/package/hisilicon-osdrv-hi3516av100/files/sensor/config/ov4689_i2c_4M.ini b/general/package/hisilicon-osdrv-hi3516av100/files/sensor/config/ov4689_i2c_4M.ini index bfcc65a5..11183400 100644 --- a/general/package/hisilicon-osdrv-hi3516av100/files/sensor/config/ov4689_i2c_4M.ini +++ b/general/package/hisilicon-osdrv-hi3516av100/files/sensor/config/ov4689_i2c_4M.ini @@ -1,40 +1,22 @@ [sensor] -Sensor_type =ov4689 ;sensor name -Mode =0 ;WDR_MODE_NONE = 0 - ;WDR_MODE_BUILT_IN = 1 - ;WDR_MODE_2To1_LINE = 2 - ;WDR_MODE_2To1_FRAME = 3 - ;WDR_MODE_2To1_FRAME_FULL_RATE =4 ...etc -DllFile =libsns_ov4689.so ;sensor lib path +Sensor_type=ov4689 +Mode=WDR_MODE_NONE +DllFile=libsns_ov4689.so +[mode] +input_mode=INPUT_MODE_MIPI +dev_attr=0 -[mode] -input_mode =0 ;INPUT_MODE_MIPI = 0 - ;INPUT_MODE_SUBLVDS = 1 - ;INPUT_MODE_LVDS = 2 ...etc - -dev_attr = 0 ;mipi_dev_attr_t = 0 - ;lvds_dev_attr_t = 1 - ;NULL =2 - -[mipi] -;----------only for mipi_dev--------- -data_type =2 ;raw data type: 8/10/12/14 bit - ;RAW_DATA_8BIT = 0 - ;RAW_DATA_10BIT = 1 - ;RAW_DATA_12BIT = 2 - ;RAW_DATA_14BIT = 3 -lane_id = 1|0|2|3|-1|-1|-1|-1| ;lane_id: -1 - disable +[mipi] +data_type=RAW_DATA_12BIT +lane_id=0|1|2|3|-1|-1|-1|-1| [isp_image] Isp_FrameRate=25 -Isp_Bayer =3 ;BAYER_RGGB=0, BAYER_GRBG=1, BAYER_GBRG=2, BAYER_BGGR=3 - +Isp_Bayer=BAYER_BGGR [vi_dev] -Input_mod =5 ;VI_INPUT_MODE_BT656 = 0 - ;VI_INPUT_MODE_BT601, - ;VI_INPUT_MODE_DIGITAL_CAMERA +Input_mod=VI_MODE_MIPI Work_mod =0 ;VI_WORK_MODE_1Multiplex = 0 ;VI_WORK_MODE_2Multiplex, ;VI_WORK_MODE_4Multiplex @@ -48,7 +30,7 @@ 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_0 =0xFFF00000 Mask_1 =0x0 Scan_mode = 1;VI_SCAN_INTERLACED = 0 ;VI_SCAN_PROGRESSIVE, @@ -61,25 +43,25 @@ Data_seq =2 ;data sequence (ONLY for YUV format) ; VI_INPUT_DATA_VYUY, ; VI_INPUT_DATA_YUYV, ; VI_INPUT_DATA_YVYU - + Vsync =1 ; vertical synchronization signal - ;VI_VSYNC_FIELD = 0, + ;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 + ;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_HIGH = 0, ;VI_HSYNC_NEG_LOW VsyncValid =1 ;Attribute of the valid vertical synchronization signal ;VI_VSYNC_NORM_PULSE = 0, - ;VI_VSYNC_VALID_SINGAL, + ;VI_VSYNC_VALID_SINGAL, VsyncValidNeg =0;Polarity of the valid vertical synchronization signal ;VI_VSYNC_VALID_NEG_HIGH = 0, - ;VI_VSYNC_VALID_NEG_LOW + ;VI_VSYNC_VALID_NEG_LOW Timingblank_HsyncHfb =0 ;Horizontal front blanking width Timingblank_HsyncAct =2592 ;Horizontal effetive width Timingblank_HsyncHbb =0 ;Horizontal back blanking width @@ -89,20 +71,10 @@ 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) - -;----- only for bt656 ---------- -FixCode =0 ;BT656_FIXCODE_1 = 0, - ;BT656_FIXCODE_0 -FieldPolar=0 ;BT656_FIELD_POLAR_STD = 0 - ;BT656_FIELD_POLAR_NSTD -DataPath =1 ;ISP enable or bypass - ;VI_PATH_BYPASS = 0,/* ISP bypass */ - ;VI_PATH_ISP = 1,/* ISP enable */ - ;VI_PATH_RAW = 2,/* Capture raw data, for debug */ +DataPath=1 InputDataType=1 ;VI_DATA_TYPE_YUV = 0,VI_DATA_TYPE_RGB = 1, DataRev =FALSE ;Data reverse. FALSE = 0; TRUE = 1 -DevRect_x=0 ; -DevRect_y=0 ; -DevRect_w=2592 ; -DevRect_h=1520 ; - +DevRect_x=0 +DevRect_y=0 +DevRect_w=2592 +DevRect_h=1520 diff --git a/general/package/hisilicon-osdrv-hi3516av100/files/sensor/libsns_os05a10.so b/general/package/hisilicon-osdrv-hi3516av100/files/sensor/libsns_os05a10.so new file mode 100644 index 0000000000000000000000000000000000000000..ef33cf7c8369da699aca35ed55446010c9dd05ce GIT binary patch literal 37792 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 IYF`=u10~^Hw*UYD literal 0 HcmV?d00001