From 5111f0927624a00a302b72de3ea6d2120df0f00e Mon Sep 17 00:00:00 2001 From: Serhio Date: Thu, 25 Aug 2022 21:57:27 +0300 Subject: [PATCH] ar0330_dc support (#407) --- .../files/script/load_hisilicon | 12 +-- .../files/sensor/config/ar0330_i2c_dc_3M.ini | 76 ++++++++++++++++++ .../files/sensor/libsns_ar0330_dc.so | Bin 0 -> 20620 bytes 3 files changed, 82 insertions(+), 6 deletions(-) create mode 100644 general/package/hisilicon-osdrv-hi3516av100/files/sensor/config/ar0330_i2c_dc_3M.ini create mode 100644 general/package/hisilicon-osdrv-hi3516av100/files/sensor/libsns_ar0330_dc.so diff --git a/general/package/hisilicon-osdrv-hi3516av100/files/script/load_hisilicon b/general/package/hisilicon-osdrv-hi3516av100/files/script/load_hisilicon index 01e7a3da..e4934ca4 100755 --- a/general/package/hisilicon-osdrv-hi3516av100/files/script/load_hisilicon +++ b/general/package/hisilicon-osdrv-hi3516av100/files/script/load_hisilicon @@ -216,12 +216,6 @@ insert_sns() { devmem 0x2003002c 32 0x90007 # sensor unreset, clk 37.125MHz, VI 250MHz ;; - ar0330) - devmem 0x200f0050 32 0x2 # i2c0_scl - devmem 0x200f0054 32 0x2 # i2c0_sda - - devmem 0x2003002c 32 0xB0007 # sensor unreset, clk 27MHz, VI 250MHz - ;; ov5658) devmem 0x200f0050 32 0x2 # i2c0_scl devmem 0x200f0054 32 0x2 # i2c0_sda @@ -240,6 +234,12 @@ insert_sns() { devmem 0x2003002c 32 0xB0007 # sensor unreset, clk 27MHz, VI 250MHz ;; + ar0330 | ar0330_i2c_dc) + devmem 0x200f0050 32 0x2 # i2c0_scl + devmem 0x200f0054 32 0x2 # i2c0_sda + + devmem 0x2003002c 32 0xE0007 # sensor unreset, clk 24MHz, VI 250MHz + ;; os05a) devmem 0x200f0050 32 0x2 # i2c0_scl devmem 0x200f0054 32 0x2 # i2c0_sda diff --git a/general/package/hisilicon-osdrv-hi3516av100/files/sensor/config/ar0330_i2c_dc_3M.ini b/general/package/hisilicon-osdrv-hi3516av100/files/sensor/config/ar0330_i2c_dc_3M.ini new file mode 100644 index 00000000..cacc354d --- /dev/null +++ b/general/package/hisilicon-osdrv-hi3516av100/files/sensor/config/ar0330_i2c_dc_3M.ini @@ -0,0 +1,76 @@ +[sensor] +Sensor_type=ar0330 +Mode=WDR_MODE_NONE +DllFile=libsns_ar0330_dc.so + +[mode] +input_mode=INPUT_MODE_CMOS_33V +dev_attr=0 + +[isp_image] +Isp_FrameRate=25 +Isp_Bayer=BAYER_GRBG + +[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 =0xFFC0000 +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=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 =2048 ;Horizontal effetive width +Timingblank_HsyncHbb =0 ;Horizontal back blanking width +Timingblank_VsyncVfb =0 ;Vertical front blanking height +Timingblank_VsyncVact =1536 ;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=2048 +DevRect_h=1536 diff --git a/general/package/hisilicon-osdrv-hi3516av100/files/sensor/libsns_ar0330_dc.so b/general/package/hisilicon-osdrv-hi3516av100/files/sensor/libsns_ar0330_dc.so new file mode 100644 index 0000000000000000000000000000000000000000..589c47d6ef12ae155709df214c5938462528f90e GIT binary patch literal 20620 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 literal 0 HcmV?d00001