From e8d3da177354a3f48d2536ceb2078128671007aa Mon Sep 17 00:00:00 2001 From: cronyx Date: Mon, 25 Dec 2023 19:18:37 +0300 Subject: [PATCH] [no ci] add ar0237 sensor to 18ev200 osdrv (#1210) --- .../files/script/load_hisilicon | 2 +- .../sensor/config/ar0237_i2c_dc_1080p.ini | 119 ++++++++++++++++++ .../files/sensor/libsns_ar0237.so | Bin 0 -> 33643 bytes .../hisilicon-osdrv-hi3516cv200.mk | 1 + 4 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 general/package/hisilicon-osdrv-hi3516cv200/files/sensor/config/ar0237_i2c_dc_1080p.ini create mode 100644 general/package/hisilicon-osdrv-hi3516cv200/files/sensor/libsns_ar0237.so diff --git a/general/package/hisilicon-osdrv-hi3516cv200/files/script/load_hisilicon b/general/package/hisilicon-osdrv-hi3516cv200/files/script/load_hisilicon index 517fdda2..c5276e3e 100755 --- a/general/package/hisilicon-osdrv-hi3516cv200/files/script/load_hisilicon +++ b/general/package/hisilicon-osdrv-hi3516cv200/files/script/load_hisilicon @@ -103,7 +103,7 @@ insert_sns() { devmem 0x2003002c 32 0xc4001 # Sensor unreset, clk 24MHz, VI 99MHz ;; - ar0130 | gc1034 | jxf22 | sc1135 | sc1145 | sc2035 | sc2135) + ar0130 | ar0237 | gc1034 | jxf22 | sc1135 | sc1145 | sc2035 | sc2135) devmem 0x200f0040 32 0x2 # I2C0_SCL devmem 0x200f0044 32 0x2 # I2C0_SDA diff --git a/general/package/hisilicon-osdrv-hi3516cv200/files/sensor/config/ar0237_i2c_dc_1080p.ini b/general/package/hisilicon-osdrv-hi3516cv200/files/sensor/config/ar0237_i2c_dc_1080p.ini new file mode 100644 index 00000000..406a691a --- /dev/null +++ b/general/package/hisilicon-osdrv-hi3516cv200/files/sensor/config/ar0237_i2c_dc_1080p.ini @@ -0,0 +1,119 @@ +[sensor] +Sensor_type = ar0237 ;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 = /usr/lib/sensors/libsns_ar0237.so ;sensor lib path + +[mode] +input_mode = 4 ;INPUT_MODE_MIPI = 0 + ;INPUT_MODE_SUBLVDS = 1 + ;INPUT_MODE_LVDS = 2 ...etc +dev_attr = 2 ;mipi_dev_attr_t = 0 + ;lvds_dev_attr_t = 1 + ;NULL = 2 +[isp_image] +Isp_x = 0 +Isp_y = 0 +Isp_W = 1920 +Isp_H = 1080 +Isp_FrameRate = 30 +Isp_Bayer = 1 ;BAYER_RGGB= 0, BAYER_GRBG= 1, BAYER_GBRG= 2, BAYER_BGGR= 3 + +[vi_dev] +Input_mod = 2 ;VI_MODE_BT656 = 0, /* ITU-R BT.656 YUV4:2:2 */ + ;VI_MODE_BT601, /* ITU-R BT.601 YUV4:2:2 */ + ;VI_MODE_DIGITAL_CAMERA, /* digital camera mode */ + ;VI_MODE_BT1120_STANDARD, /* BT.1120 progressive mode */ + ;VI_MODE_BT1120_INTERLEAVED, /* BT.1120 interstage mode */ + ;VI_MODE_MIPI, /* MIPI mode*/ + ;VI_MODE_LVDS, + ;VI_MODE_HISPI +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 = 0xFFF0000 ;ComMsk0 +Mask_1 = 0x0 ;ComMsk1 +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 = 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) + +;----- 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 */ +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 = 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 + diff --git a/general/package/hisilicon-osdrv-hi3516cv200/files/sensor/libsns_ar0237.so b/general/package/hisilicon-osdrv-hi3516cv200/files/sensor/libsns_ar0237.so new file mode 100644 index 0000000000000000000000000000000000000000..67df1f174ffd3fda0c7a70e99fdf5e554f446206 GIT binary patch literal 33643 zcmd_T4SZC^_4qw^catn(kqrb4hU9$n~WAZ{dH2&Czbk~AUb{*+_CRCu`liG zqLW`GPxwFM;urfab_$c4L_c!h#Cghrg?}2U6HI_Q@}nh=e(5U5B~R*KJHno`M%a4| z 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