From 8cf82669e7e508aba23b72f69a2f6f9297cfe208 Mon Sep 17 00:00:00 2001 From: Dmitry Ermakov Date: Sun, 16 Jan 2022 16:09:02 +0300 Subject: [PATCH 01/20] Set RMII mode as default for Hi3519v101 --- .../kernel/hi3516av200.generic.config | 8 ++-- .../kernel/hi3519v101.generic.config | 8 ++-- .../kernel/patches/12_dts_phy_rmii_mode.patch | 44 +++++++++++++++++++ 3 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 br-ext-chip-hisilicon/board/hi3519v101/kernel/patches/12_dts_phy_rmii_mode.patch diff --git a/br-ext-chip-hisilicon/board/hi3519v101/kernel/hi3516av200.generic.config b/br-ext-chip-hisilicon/board/hi3519v101/kernel/hi3516av200.generic.config index b3a39131..7becd9b1 100644 --- a/br-ext-chip-hisilicon/board/hi3519v101/kernel/hi3516av200.generic.config +++ b/br-ext-chip-hisilicon/board/hi3519v101/kernel/hi3516av200.generic.config @@ -1070,7 +1070,7 @@ CONFIG_NET_CORE=y # CONFIG_NETCONSOLE is not set # CONFIG_NETPOLL is not set # CONFIG_NET_POLL_CONTROLLER is not set -# CONFIG_TUN is not set +CONFIG_TUN=m # CONFIG_VETH is not set # CONFIG_NLMON is not set @@ -2180,7 +2180,9 @@ CONFIG_JFFS2_FS_DEBUG=0 CONFIG_JFFS2_FS_WRITEBUFFER=y # CONFIG_JFFS2_FS_WBUF_VERIFY is not set # CONFIG_JFFS2_SUMMARY is not set -# CONFIG_JFFS2_FS_XATTR is not set +CONFIG_JFFS2_FS_XATTR=y +CONFIG_JFFS2_FS_POSIX_ACL=y +CONFIG_JFFS2_FS_SECURITY=y # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set CONFIG_JFFS2_ZLIB=y # CONFIG_JFFS2_LZO is not set @@ -2219,7 +2221,7 @@ CONFIG_F2FS_FS_POSIX_ACL=y CONFIG_NETWORK_FILESYSTEMS=y CONFIG_NFS_FS=y # CONFIG_NFS_V2 is not set -CONFIG_NFS_V3=m +CONFIG_NFS_V3=y CONFIG_NFS_V3_ACL=y # CONFIG_NFS_V4 is not set # CONFIG_NFS_SWAP is not set diff --git a/br-ext-chip-hisilicon/board/hi3519v101/kernel/hi3519v101.generic.config b/br-ext-chip-hisilicon/board/hi3519v101/kernel/hi3519v101.generic.config index a90088a7..6e40cc2b 100644 --- a/br-ext-chip-hisilicon/board/hi3519v101/kernel/hi3519v101.generic.config +++ b/br-ext-chip-hisilicon/board/hi3519v101/kernel/hi3519v101.generic.config @@ -1070,7 +1070,7 @@ CONFIG_NET_CORE=y # CONFIG_NETCONSOLE is not set # CONFIG_NETPOLL is not set # CONFIG_NET_POLL_CONTROLLER is not set -# CONFIG_TUN is not set +CONFIG_TUN=m # CONFIG_VETH is not set # CONFIG_NLMON is not set @@ -2180,7 +2180,9 @@ CONFIG_JFFS2_FS_DEBUG=0 CONFIG_JFFS2_FS_WRITEBUFFER=y # CONFIG_JFFS2_FS_WBUF_VERIFY is not set # CONFIG_JFFS2_SUMMARY is not set -# CONFIG_JFFS2_FS_XATTR is not set +CONFIG_JFFS2_FS_XATTR=y +CONFIG_JFFS2_FS_POSIX_ACL=y +CONFIG_JFFS2_FS_SECURITY=y # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set CONFIG_JFFS2_ZLIB=y # CONFIG_JFFS2_LZO is not set @@ -2219,7 +2221,7 @@ CONFIG_F2FS_FS_POSIX_ACL=y CONFIG_NETWORK_FILESYSTEMS=y CONFIG_NFS_FS=y # CONFIG_NFS_V2 is not set -CONFIG_NFS_V3=m +CONFIG_NFS_V3=y CONFIG_NFS_V3_ACL=y # CONFIG_NFS_V4 is not set # CONFIG_NFS_SWAP is not set diff --git a/br-ext-chip-hisilicon/board/hi3519v101/kernel/patches/12_dts_phy_rmii_mode.patch b/br-ext-chip-hisilicon/board/hi3519v101/kernel/patches/12_dts_phy_rmii_mode.patch new file mode 100644 index 00000000..e78ee4bc --- /dev/null +++ b/br-ext-chip-hisilicon/board/hi3519v101/kernel/patches/12_dts_phy_rmii_mode.patch @@ -0,0 +1,44 @@ +--- a/arch/arm/boot/dts/hisi-hi3516av200-demb.dts ++++ b/arch/arm/boot/dts/hisi-hi3516av200-demb.dts +@@ -179,7 +179,7 @@ + + &higmac { + phy-handle = <ðphy>; +- phy-mode = "rgmii"; ++ phy-mode = "rmii"; + }; + + &gpio_chip0 { +--- a/arch/arm/boot/dts/hisi-hi3516av200-hmp-demb.dts ++++ b/arch/arm/boot/dts/hisi-hi3516av200-hmp-demb.dts +@@ -242,7 +242,7 @@ + &higmac { + compatible = "hisilicon,higmac-v3", "hisilicon,higmac"; + phy-handle = <ðphy>; +- phy-mode = "rgmii"; ++ phy-mode = "rmii"; + }; + + &gpio_chip0 { +--- a/arch/arm/boot/dts/hisi-hi3519v101-demb.dts ++++ b/arch/arm/boot/dts/hisi-hi3519v101-demb.dts +@@ -179,7 +179,7 @@ + + &higmac { + phy-handle = <ðphy>; +- phy-mode = "rgmii"; ++ phy-mode = "rmii"; + }; + + &gpio_chip0 { +--- a/arch/arm/boot/dts/hisi-hi3519v101-hmp-demb.dts ++++ b/arch/arm/boot/dts/hisi-hi3519v101-hmp-demb.dts +@@ -242,7 +242,7 @@ + &higmac { + compatible = "hisilicon,higmac-v3", "hisilicon,higmac"; + phy-handle = <ðphy>; +- phy-mode = "rgmii"; ++ phy-mode = "rmii"; + }; + + &gpio_chip0 { From 9263d36328f867e5f6b4f7bfc6d27f077dd43010 Mon Sep 17 00:00:00 2001 From: Dmitry Ermakov Date: Sun, 16 Jan 2022 16:18:33 +0300 Subject: [PATCH 02/20] 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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 Date: Sun, 16 Jan 2022 16:19:20 +0300 Subject: [PATCH 03/20] Fix initscript for Hi3519v101 --- .../files/script/load_hisilicon | 354 ++++++++++++++---- 1 file changed, 277 insertions(+), 77 deletions(-) diff --git a/general/package/hisilicon-osdrv-hi3519v101/files/script/load_hisilicon b/general/package/hisilicon-osdrv-hi3519v101/files/script/load_hisilicon index 33235ec9..543ceb80 100755 --- a/general/package/hisilicon-osdrv-hi3519v101/files/script/load_hisilicon +++ b/general/package/hisilicon-osdrv-hi3519v101/files/script/load_hisilicon @@ -55,7 +55,7 @@ insert_audio() { insmod hi3519v101_aenc.ko insmod hi3519v101_adec.ko insmod hi_acodec.ko - #insmod extdrv/hi_tlv320aic31.ko + #insmod hi_tlv320aic31.ko } remove_audio() { @@ -68,60 +68,279 @@ remove_audio() { rmmod hi3519v101_aio } -spi0_4wire_pin_mux() { - #pinmux - devmem 0x1204018c 32 0x1 #SPI0_SCLK - devmem 0x12040190 32 0x1 #SPI0_SD0 - devmem 0x12040194 32 0x1 #SPI0_SDI - devmem 0x12040198 32 0x1 #SPI0_CSN +sysconfig() { + vicap_pin_mux() { + #sensor0 pinmux + devmem 0x1204017c 32 0x1 #SENSOR0_CLK + devmem 0x12040180 32 0x0 #SENSOR0_RSTN + devmem 0x12040184 32 0x1 #SENSOR0_HS,from vi0 + devmem 0x12040188 32 0x1 #SENSOR0_VS,from vi0 + #sensor0 drive capability + devmem 0x12040988 32 0x150 #SENSOR0_CLK + devmem 0x1204098c 32 0x170 #SENSOR0_RSTN + devmem 0x12040990 32 0x170 #SENSOR0_HS + devmem 0x12040994 32 0x170 #SENSOR0_VS - #drive capability - devmem 0x12040998 32 0x150 #SPI0_SCLK - devmem 0x1204099c 32 0x160 #SPI0_SD0 - devmem 0x120409a0 32 0x160 #SPI0_SDI - devmem 0x120409a4 32 0x160 #SPI0_CSN -} -spi1_4wire_pin_mux() { - #pinmux - devmem 0x12040018 32 0x1 #SPI1_SCLK - devmem 0x1204001c 32 0x1 #SPI1_SD0 - devmem 0x12040020 32 0x1 #SPI1_SDI - devmem 0x12040024 32 0x1 #SPI1_CSN + #sensor1 pinmux + devmem 0x12040008 32 0x1 #SENSOR1_CLK + devmem 0x1204000c 32 0x0 #SENSOR1_RSTN + devmem 0x12040010 32 0x2 #SENSOR1_HS,from vi1 + devmem 0x12040014 32 0x2 #SENSOR1_VS,from vi1 + #sensor1 drive capability + devmem 0x12040808 32 0x150 #SENSOR1_CLK + devmem 0x1204080c 32 0x170 #SENSOR1_RSTN + devmem 0x12040810 32 0x170 #SENSOR1_HS + devmem 0x12040814 32 0x170 #SENSOR1_VS - #drive capability - devmem 0x12040818 32 0x150 #SPI1_SCLK - devmem 0x1204081C 32 0x160 #SPI1_SD0 - devmem 0x12040820 32 0x160 #SPI1_SDI - devmem 0x12040824 32 0x160 #SPI1_CSN -} -spi0_3wire_pin_mux() { - #pinmux - devmem 0x1204018c 32 0x3 #SPI0_3WIRE_CLK - devmem 0x12040190 32 0x3 #SPI0_3WIRE_DATA - devmem 0x12040198 32 0x3 #SPI0_3WIRE_CSN + #vi1 pinmux + devmem 0x12040030 32 0x1 #VI1_CLK + devmem 0x12040028 32 0x1 #VI1_HS + devmem 0x1204002c 32 0x1 #VI1_VS + devmem 0x12040034 32 0x1 #VI1_DATA0 + devmem 0x12040038 32 0x1 #VI1_DATA1 + devmem 0x1204003c 32 0x1 #VI1_DATA2 + devmem 0x12040040 32 0x1 #VI1_DATA3 + devmem 0x12040044 32 0x1 #VI1_DATA4 + devmem 0x12040048 32 0x1 #VI1_DATA5 + #vi1 drive capability + devmem 0x12040830 32 0x170 #VI1_CLK + devmem 0x12040828 32 0x170 #VI1_HS + devmem 0x1204082c 32 0x170 #VI1_VS + devmem 0x12040834 32 0x170 #VI1_DATA0 + devmem 0x12040838 32 0x170 #VI1_DATA1 + devmem 0x1204083c 32 0x170 #VI1_DATA2 + devmem 0x12040840 32 0x170 #VI1_DATA3 + devmem 0x12040844 32 0x170 #VI1_DATA4 + devmem 0x12040848 32 0x170 #VI1_DATA5 - #drive capability - devmem 0x12040998 32 0x150 #SPI0_3WIRE_CLK - devmem 0x1204099c 32 0x160 #SPI0_3WIRE_DATA - devmem 0x120409a4 32 0x160 #SPI0_3WIRE_CSN -} -i2c0_pin_mux() { - #pinmux - devmem 0x12040190 32 0x2 #I2C0_SDA - devmem 0x1204018c 32 0x2 #I2C0_SCL + } + i2c0_pin_mux() { + #pinmux + devmem 0x12040190 32 0x2 #I2C0_SDA + devmem 0x1204018c 32 0x2 #I2C0_SCL - #drive capability - devmem 0x1204099c 32 0x120 #I2C0_SDA - devmem 0x12040998 32 0x120 #I2C0_SCL -} -i2c1_pin_mux() { - #pinmux - devmem 0x1204001c 32 0x2 #I2C1_SDA - devmem 0x12040018 32 0x2 #I2C1_SCL + #drive capability + devmem 0x1204099c 32 0x120 #I2C0_SDA + devmem 0x12040998 32 0x120 #I2C0_SCL + } + i2c1_pin_mux() { + #pinmux + devmem 0x1204001c 32 0x2 #I2C1_SDA + devmem 0x12040018 32 0x2 #I2C1_SCL - #drive capability - devmem 0x1204081c 32 0x120 #I2C1_SDA - devmem 0x12040818 32 0x120 #I2C1_SCL + #drive capability + devmem 0x1204081c 32 0x120 #I2C1_SDA + devmem 0x12040818 32 0x120 #I2C1_SCL + } + #i2c2 -> sil9136 aic31 + i2c2_pin_mux() { + #pinmux + devmem 0x1204005c 32 0x1 #I2C2_SDA + devmem 0x12040060 32 0x1 #I2C2_SCL + + #drive capability + devmem 0x1204085C 32 0x120 #I2C2_SDA + devmem 0x12040860 32 0x120 #I2C2_SCL + } + + #i2c3 -> adv7179 + i2c3_pin_mux() { + #pinmux + devmem 0x12040178 32 0x3 #I2C3_SDA + devmem 0x12040160 32 0x3 #I2C3_SCL + + #drive capability + devmem 0x12040984 32 0x120 #I2C3_SDA + devmem 0x1204096C 32 0x120 #I2C3_SCL + } + + #spi1 -> vi + spi1_pin_mux() { + #pinmux + devmem 0x12040018 32 0x1 #SPI1_SCLK + devmem 0x1204001c 32 0x1 #SPI1_SD0 + devmem 0x12040020 32 0x1 #SPI1_SDI + devmem 0x12040024 32 0x1 #SPI1_CSN + + #drive capability + devmem 0x12040818 32 0x150 #SPI1_SCLK + devmem 0x1204081C 32 0x160 #SPI1_SD0 + devmem 0x12040820 32 0x160 #SPI1_SDI + devmem 0x12040824 32 0x160 #SPI1_CSN + } + + #spi3 -> LCD + spi3_pin_mux() { + #pinmux + devmem 0x12040160 32 0x1 #SPI3_SCLK + devmem 0x12040178 32 0x1 #SPI3_SD0 + devmem 0x12040170 32 0x1 #SPI3_SDI + devmem 0x12040174 32 0x1 #SPI3_CSN + #drive capability + devmem 0x1204096C 32 0x150 #SPI3_SCLK + devmem 0x12040984 32 0x160 #SPI3_SD0 + devmem 0x1204097C 32 0x160 #SPI3_SDI + devmem 0x12040980 32 0x160 #SPI3_CSN + } + #rgmii + net_rgmii_pinmux() { + #pinmux + devmem 0x1204013C 32 0x2 + devmem 0x12040140 32 0x2 + devmem 0x12040144 32 0x2 + devmem 0x12040148 32 0x2 + devmem 0x1204014C 32 0x2 + devmem 0x12040150 32 0x2 + devmem 0x12040154 32 0x2 + devmem 0x12040158 32 0x2 + devmem 0x1204015C 32 0x2 + devmem 0x1204015C 32 0x2 + devmem 0x12040164 32 0x2 + devmem 0x12040168 32 0x2 + devmem 0x1204016C 32 0x2 + devmem 0x12040170 32 0x2 + devmem 0x12040174 32 0x2 + devmem 0x12040178 32 0x2 + + #drive capability + devmem 0x12040948 32 0x0d0 + devmem 0x1204094C 32 0x0c0 + devmem 0x12040950 32 0x0d0 + devmem 0x12040954 32 0x0d0 + devmem 0x12040958 32 0x0d0 + devmem 0x1204095C 32 0x0d0 + devmem 0x12040960 32 0x130 + devmem 0x12040964 32 0x130 + devmem 0x12040968 32 0x130 + devmem 0x1204096C 32 0x130 + devmem 0x12040970 32 0x130 + devmem 0x12040974 32 0x130 + devmem 0x12040978 32 0x130 + devmem 0x1204097C 32 0x050 + devmem 0x12040980 32 0x120 + devmem 0x12040984 32 0x120 + } + + if [ ${SNS_TYPE1} != "NULL" ]; then + vicap1_pwrdn >/dev/null + fi + if [ ${WORK_MODE} == "double_pipe" ]; then + vicap1_pwrdn >/dev/null + fi + + #clkcfg + clk_cfg() { + devmem 0x120100e4 32 0x1fff0000 # I2C0-3/SSP0-3 unreset, ir,enable clk gate + devmem 0x1201003c 32 0x31000100 # MIPI VI ISP unreset + devmem 0x12010050 32 0x2 # VEDU0 unreset + devmem 0x12010058 32 0x2 # VPSS0 unreset + devmem 0x12010058 32 0x3 # VPSS0 unreset + devmem 0x12010058 32 0x2 # VPSS0 unreset + devmem 0x1201005c 32 0x2 # VGS unreset + devmem 0x12010060 32 0x2 # JPGE unreset + devmem 0x12010064 32 0x2 # TDE unreset + devmem 0x1201006c 32 0x2 # IVE unreset + devmem 0x12010070 32 0x2 # FD unreset + devmem 0x12010074 32 0x2 # GDC unreset + devmem 0x1201007C 32 0x2a # HASH&SAR ADC&CIPHER unreset + devmem 0x12010080 32 0x2 # AIAO unreset,clock 1188M + devmem 0x12010084 32 0x2 # GZIP unreset + devmem 0x120100d8 32 0xa # ddrt efuse enable clock, unreset + devmem 0x120100e0 32 0xa8 # rsa trng klad enable clock, unreset + #devmem 0x120100e0 32 0xaa # rsa trng klad DMA enable clock, unreset + devmem 0x12010040 32 0x60 + devmem 0x12010040 32 0x0 # sensor unreset,unreset the control module with slave-mode + + #VDP_OUT + + #devmem 0x12010044 32 0x00015ff4 # D1@30fps,BT656 CVBS + + #devmem 0x12010044 32 0x00004ff0 # 1080p30 BT1120 + + # IVE[21:19] GDC[18:16] VGS[15:13] VEDU [12:10] VPSS0[7:5] VI0[2:0] + # SDK config: IVE:396M, GDC:475M, VGS:500M, VEDU:600M, VPSS:300M VI0:300M---0x00494841 + #devmem 0x1201004c 32 0x00094c21; + # ISP0 [18:14] ISP1[10:6] VI1[2:0] + # SDK config: ISP0:300M, ISP1:300M, VI1:300M + #devmem 0x12010054 32 0x00004041; + + # configure with different sensor type + #devmem 0x12010040 32 0x11; #226 8 lane sensor clock 72M + + # pcie clk enable + devmem 0x120100b0 32 0x000001f0 + + echo "clock configure operation done!" + } + vi_vpss_online_config() { + # -------------vi vpss online open + if [ $b_vpss_online -eq 1 ]; then + echo "==============vi_vpss_online==============" + devmem 0x12030000 32 0x00000204 + + # write priority select + devmem 0x12030054 32 0x55552356 # each module 4bit cci --- ddrt --- --- gzip --- --- + devmem 0x12030058 32 0x16554411 # each module 4bit vicap1 hash ive aio jpge tde vicap0 vdp + devmem 0x1203005c 32 0x33466314 # each module 4bit mmc2 A17 fmc sdio1 sdio0 A7 vpss0 vgs + devmem 0x12030060 32 0x46266666 # each module 4bit gdc usb3/pcie vedu usb2 cipher dma2 dma1 gsf + + # read priority select + devmem 0x12030064 32 0x55552356 # each module 4bit cci --- ddrt --- --- gzip --- --- + devmem 0x12030068 32 0x06554401 # each module 4bit vicap1 hash ive aio jpge tde vicap0 vdp + devmem 0x1203006c 32 0x33466304 # each module 4bit mmc2 A17 fmc sdio1 sdio0 A7 vpss0 vgs + devmem 0x12030070 32 0x46266666 # each module 4bit gdc usb3/pcie vedu usb2 cipher dma2 dma1 gsf + + devmem 0x120641f0 32 0x1 # use pri_map + # write timeout select + devmem 0x1206409c 32 0x00000040 # + devmem 0x120640a0 32 0x00000000 # + + #read timeout select + devmem 0x120640ac 32 0x00000040 # + devmem 0x120640b0 32 0x00000000 # + else + echo "==============vi_vpss_offline==============" + devmem 0x12030000 32 0x00000004 + + # write priority select + devmem 0x12030054 32 0x55552366 # each module 4bit cci --- ddrt --- --- gzip --- --- + devmem 0x12030058 32 0x16556611 # each module 4bit vicap1 hash ive aio jpge tde vicap0 vdp + devmem 0x1203005c 32 0x43466445 # each module 4bit mmc2 A17 fmc sdio1 sdio0 A7 vpss0 vgs + devmem 0x12030060 32 0x56466666 # each module 4bit gdc usb3/pcie vedu usb2 cipher dma2 dma1 gsf + + # read priority select + devmem 0x12030064 32 0x55552366 # each module 4bit cci --- ddrt --- --- gzip --- --- + devmem 0x12030068 32 0x06556600 # each module 4bit vicap1 hash ive aio jpge tde vicap0 vdp + devmem 0x1203006c 32 0x43466435 # each module 4bit mmc2 A17 fmc sdio1 sdio0 A7 vpss0 vgs + devmem 0x12030070 32 0x56266666 # each module 4bit gdc usb3/pcie vedu usb2 cipher dma2 dma1 gsf + + devmem 0x120641f0 32 0x1 # use pri_map + # write timeout select + devmem 0x1206409c 32 0x00000040 # + devmem 0x120640a0 32 0x00000000 # + + # read timeout select + devmem 0x120640ac 32 0x00000040 # each module 8bit + devmem 0x120640b0 32 0x00000000 # + fi + } + ######################################################################################### + ai_config() { + devmem 0x120300e0 32 0xd # internal codec: AIO MCLK out, CODEC AIO TX MCLK + #devmem 0x120300e0 32 0xe # external codec: AIC31 AIO MCLK out, CODEC AIO TX MCLK + } + + echo "++++++++++++++++++++++++++++++++++++++++++++++" + b_vpss_online=1 + + if [ $# -ge 1 ]; then + b_vpss_online=$1 + fi + + vicap_pin_mux + vi_vpss_online_config + ai_config + clkcfg } insert_sns() { @@ -138,7 +357,7 @@ insert_sns() { devmem 0x1201004c 32 0x00094c23 devmem 0x12010054 32 0x00024041 spi0_4wire_pin_mux - insmod extdrv/hi_ssp_sony.ko + insmod hi_ssp_sony.ko ;; imx274) tmp=0x11 @@ -148,7 +367,7 @@ insert_sns() { devmem 0x1201004c 32 0x00094c23 devmem 0x12010054 32 0x0004041 spi0_4wire_pin_mux - insmod extdrv/hi_ssp_sony.ko + insmod hi_ssp_sony.ko ;; imx274_mipi) tmp=0x14 @@ -159,7 +378,7 @@ insert_sns() { devmem 0x12010040 32 0x14 # sensor0 clk_en, 24MHz i2c0_pin_mux ;; - imx290) + imx290 | imx385) tmp=0x18 # SDK config: IVE:396M, GDC:475M, VGS:500M, VEDU:600M, VPSS:300M #imx290:viu0:340M,isp0:214M, viu1:340M,isp1:214M @@ -291,28 +510,10 @@ vicap1_pwrdn() { devmem 0x120a012c 32 0x2 devmem 0x1201003c 32 0x120003ff } -sys_config() { - # pinmux configuration - sh ./pinmux.sh -net -vi >/dev/null - - if [ ${SNS_TYPE1} != "NULL" ]; then - vicap1_pwrdn >/dev/null - fi - if [ ${WORK_MODE} == "double_pipe" ]; then - vicap1_pwrdn >/dev/null - fi - #vicap1_pwrdn; - #vicap1_pwrdn > /dev/null - - # clock configuration - sh clkcfg.sh >/dev/null - # system configuration - sh sysctl.sh $b_arg_online >/dev/null -} insert_ko() { # sys config - sys_config + sysconfig # driver load insert_osal @@ -343,9 +544,9 @@ insert_ko() { #insmod hi3519v101_ive.ko save_power=1 insmod hi3519v101_photo.ko # - insmod extdrv/hi_sensor_i2c.ko - insmod extdrv/hi_pwm.ko - insmod extdrv/hi_piris.ko + insmod hi_sensor_i2c.ko + insmod hi_pwm.ko + insmod hi_piris.ko insert_audio @@ -353,9 +554,8 @@ insert_ko() { insmod hi_user.ko insert_sns - # sh ./pinmux.sh -vo BT1120 > /dev/null - devmem 0x12010044 32 0x4ff0 + devmem 0x12010044 32 0x4ff0 devmem 0x12010044 32 0x4 echo "==== Your input Sensor0 type is $SNS_TYPE0 ====" echo "==== Your input Sensor1 type is $SNS_TYPE1 ====" From 42039ccae1e9f9269e7deef54272e6c2843abb00 Mon Sep 17 00:00:00 2001 From: Dmitry Ermakov Date: Sun, 16 Jan 2022 16:48:40 +0300 Subject: [PATCH 04/20] Fix SDK name for Hi3519v101 --- .github/workflows/hi3516av200_images.yml | 2 +- .github/workflows/hi3519v101_images.yml | 2 +- .../files/script/load_hisilicon | 13 +++++++------ 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/.github/workflows/hi3516av200_images.yml b/.github/workflows/hi3516av200_images.yml index 0cfea6a5..2834ac2d 100644 --- a/.github/workflows/hi3516av200_images.yml +++ b/.github/workflows/hi3516av200_images.yml @@ -124,7 +124,7 @@ jobs: with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: ${{ env.ARCHIVE_SDK }} - asset_name: "arm-openipc-hi3516av200-linux-musleabi_sdk-buildroot_universal.tar.gz" + asset_name: "arm-openipc-hi3516av200-linux-musleabi_sdk-buildroot.tar.gz" tag: ${{ env.TAG_NAME }} overwrite: true diff --git a/.github/workflows/hi3519v101_images.yml b/.github/workflows/hi3519v101_images.yml index a5edc9cd..09a288c3 100644 --- a/.github/workflows/hi3519v101_images.yml +++ b/.github/workflows/hi3519v101_images.yml @@ -124,7 +124,7 @@ jobs: with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: ${{ env.ARCHIVE_SDK }} - asset_name: "arm-openipc-hi3519v101-linux-musleabi_sdk-buildroot_universal.tar.gz" + asset_name: "arm-openipc-hi3519v101-linux-musleabi_sdk-buildroot.tar.gz" tag: ${{ env.TAG_NAME }} overwrite: true diff --git a/general/package/hisilicon-osdrv-hi3519v101/files/script/load_hisilicon b/general/package/hisilicon-osdrv-hi3519v101/files/script/load_hisilicon index 543ceb80..8d62942e 100755 --- a/general/package/hisilicon-osdrv-hi3519v101/files/script/load_hisilicon +++ b/general/package/hisilicon-osdrv-hi3519v101/files/script/load_hisilicon @@ -18,7 +18,7 @@ os_mem_size=${os_mem_size:=32} # Sensor config # SNS_TYPE=$(awk -F '=' '$1=="sensor"{print $2}' RS=" " /proc/cmdline) SNS_TYPE0=$(fw_printenv -n sensor) -SNS_TYPE0=${SNS_TYPE:=ov4689} +SNS_TYPE0=${SNS_TYPE0:=ov4689} report_error() { echo "******* Error: There's something wrong, please check! *****" @@ -229,7 +229,7 @@ sysconfig() { fi #clkcfg - clk_cfg() { + clkcfg() { devmem 0x120100e4 32 0x1fff0000 # I2C0-3/SSP0-3 unreset, ir,enable clk gate devmem 0x1201003c 32 0x31000100 # MIPI VI ISP unreset devmem 0x12010050 32 0x2 # VEDU0 unreset @@ -523,7 +523,7 @@ insert_ko() { #insmod hi3519v101_tde.ko insmod hi3519v101_region.ko - insmod hi3519v101_fisheye.ko + #insmod hi3519v101_fisheye.ko #insmod hi3519v101_vgs.ko insert_isp @@ -551,7 +551,7 @@ insert_ko() { insert_audio insmod hi_mipi.ko - insmod hi_user.ko + #insmod hi_user.ko insert_sns @@ -564,7 +564,7 @@ insert_ko() { remove_ko() { remove_audio remove_sns - rmmod hi_user + #rmmod hi_user rmmod hi_pwm rmmod hi_piris @@ -585,7 +585,7 @@ remove_ko() { rmmod hi3519v101_isp rmmod hi3519v101_viu rmmod hi_mipi - rmmod hi3519v101_fisheye + #rmmod hi3519v101_fisheye #rmmod hi3519v101_vgs rmmod hi3519v101_region @@ -772,6 +772,7 @@ if [ $b_arg_remove -eq 1 ]; then fi if [ $b_arg_insmod -eq 1 ]; then + cd /lib/modules/3.18.20/hisilicon insert_ko fi From 4ae61801d5cf7a7fea4a7e052de645529f2c68a9 Mon Sep 17 00:00:00 2001 From: Dmitry Ermakov Date: Sun, 16 Jan 2022 17:03:44 +0300 Subject: [PATCH 05/20] Fix SDK name for Hi3516Cv300 --- .github/workflows/hi3516cv300_images.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/hi3516cv300_images.yml b/.github/workflows/hi3516cv300_images.yml index 275666d6..d6d92ba9 100644 --- a/.github/workflows/hi3516cv300_images.yml +++ b/.github/workflows/hi3516cv300_images.yml @@ -124,7 +124,7 @@ jobs: with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: ${{ env.ARCHIVE_SDK }} - asset_name: "arm-openipc-hi3516cv300-linux-musleabi_sdk-buildroot_universal.tar.gz" + asset_name: "arm-openipc-hi3516cv300-linux-musleabi_sdk-buildroot.tar.gz" tag: ${{ env.TAG_NAME }} overwrite: true From 14d4cf3c1340bc280f71474b688537f98c194b16 Mon Sep 17 00:00:00 2001 From: Dmitry Ermakov Date: Sun, 16 Jan 2022 23:24:02 +0300 Subject: [PATCH 06/20] Fix init for Hi3519v101 --- .../files/script/load_hisilicon | 39 ++++++--- .../files/sensor/config/os08a_i2c_8M.ini | 80 +++++++++++++++++++ .../hisilicon-osdrv-hi3519v101.mk | 2 +- 3 files changed, 111 insertions(+), 10 deletions(-) create mode 100644 general/package/hisilicon-osdrv-hi3519v101/files/sensor/config/os08a_i2c_8M.ini diff --git a/general/package/hisilicon-osdrv-hi3519v101/files/script/load_hisilicon b/general/package/hisilicon-osdrv-hi3519v101/files/script/load_hisilicon index 8d62942e..863793f7 100755 --- a/general/package/hisilicon-osdrv-hi3519v101/files/script/load_hisilicon +++ b/general/package/hisilicon-osdrv-hi3519v101/files/script/load_hisilicon @@ -2,7 +2,7 @@ # # This is part of OpenIPC.org project | 2022.01.07 # - +#set -x # SoC detect chipid=$(ipcinfo --chip_id) @@ -18,7 +18,9 @@ os_mem_size=${os_mem_size:=32} # Sensor config # SNS_TYPE=$(awk -F '=' '$1=="sensor"{print $2}' RS=" " /proc/cmdline) SNS_TYPE0=$(fw_printenv -n sensor) -SNS_TYPE0=${SNS_TYPE0:=ov4689} +SNS_TYPE0=${SNS_TYPE0:=imx290} +SNS_TYPE1="NULL" +WORK_MODE="single_pipe" report_error() { echo "******* Error: There's something wrong, please check! *****" @@ -69,6 +71,10 @@ remove_audio() { } sysconfig() { + devmem 0x100503c4 32 0x7 + devmem 0x100503c0 32 0x11011f + devmem 0x100503c4 32 0xc004 + devmem 0x100503c0 32 0x110113 vicap_pin_mux() { #sensor0 pinmux devmem 0x1204017c 32 0x1 #SENSOR0_CLK @@ -228,9 +234,8 @@ sysconfig() { vicap1_pwrdn >/dev/null fi - #clkcfg clkcfg() { - devmem 0x120100e4 32 0x1fff0000 # I2C0-3/SSP0-3 unreset, ir,enable clk gate + devmem 0x120100e4 32 0x1ff70000 # I2C0-3/SSP0-3 unreset, ir,enable clk gate devmem 0x1201003c 32 0x31000100 # MIPI VI ISP unreset devmem 0x12010050 32 0x2 # VEDU0 unreset devmem 0x12010058 32 0x2 # VPSS0 unreset @@ -269,8 +274,6 @@ sysconfig() { # pcie clk enable devmem 0x120100b0 32 0x000001f0 - - echo "clock configure operation done!" } vi_vpss_online_config() { # -------------vi vpss online open @@ -378,7 +381,7 @@ insert_sns() { devmem 0x12010040 32 0x14 # sensor0 clk_en, 24MHz i2c0_pin_mux ;; - imx290 | imx385) + imx290) tmp=0x18 # SDK config: IVE:396M, GDC:475M, VGS:500M, VEDU:600M, VPSS:300M #imx290:viu0:340M,isp0:214M, viu1:340M,isp1:214M @@ -387,6 +390,19 @@ insert_sns() { devmem 0x12010040 32 0x18 # sensor0 clk_en, 37.125MHz i2c0_pin_mux ;; + imx385) + tmp=0x18 + devmem 0x12010040 32 0x18 + devmem 0x12040190 32 0x2 + devmem 0x1204018c 32 0x2 + devmem 0x1204099c 32 0x120 + devmem 0x12040998 32 0x120 + insmod hi_ssp_sony.ko + devmem 0x12040184 32 0x1 + devmem 0x12040188 32 0x1 + devmem 0x12040010 32 0x2 + devmem 0x12040014 32 0x2 + ;; ov4689) tmp=0x14 # SDK config: IVE:396M, GDC:475M, VGS:500M, VEDU:600M, VPSS:300M @@ -557,6 +573,11 @@ insert_ko() { devmem 0x12010044 32 0x4ff0 devmem 0x12010044 32 0x4 + devmem 0x12040098 32 0x3 + devmem 0x120100DC 32 0x6 + + devmem 0x1204008C 32 0x1 + devmem 0x12040094 32 0x1 echo "==== Your input Sensor0 type is $SNS_TYPE0 ====" echo "==== Your input Sensor1 type is $SNS_TYPE1 ====" } @@ -568,8 +589,8 @@ remove_ko() { rmmod hi_pwm rmmod hi_piris - #rmmod hi3519v101_photo - rmmod hi3519v101_ive + rmmod hi3519v101_photo + #rmmod hi3519v101_ive rmmod hi3519v101_rc rmmod hi3519v101_jpege diff --git a/general/package/hisilicon-osdrv-hi3519v101/files/sensor/config/os08a_i2c_8M.ini b/general/package/hisilicon-osdrv-hi3519v101/files/sensor/config/os08a_i2c_8M.ini new file mode 100644 index 00000000..c1ebfcc0 --- /dev/null +++ b/general/package/hisilicon-osdrv-hi3519v101/files/sensor/config/os08a_i2c_8M.ini @@ -0,0 +1,80 @@ +[sensor] +Sensor_type=stSnsOs08a10Obj +Mode=WDR_MODE_NONE +DllFile=libsns_os08a10.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=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 =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=3840 +DevRect_h=2160 diff --git a/general/package/hisilicon-osdrv-hi3519v101/hisilicon-osdrv-hi3519v101.mk b/general/package/hisilicon-osdrv-hi3519v101/hisilicon-osdrv-hi3519v101.mk index 1e0fe6c4..56b1f9c0 100644 --- a/general/package/hisilicon-osdrv-hi3519v101/hisilicon-osdrv-hi3519v101.mk +++ b/general/package/hisilicon-osdrv-hi3519v101/hisilicon-osdrv-hi3519v101.mk @@ -57,7 +57,7 @@ define HISILICON_OSDRV_HI3519V101_INSTALL_TARGET_CMDS $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/3.18.20/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/kmod/hi_pwm.ko $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/3.18.20/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/kmod/hi_sensor_i2c.ko $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/3.18.20/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/kmod/hi_sensor_spi.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/3.18.20/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/kmod/hi_ssp_sony.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/3.18.20/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/kmod/hi_ssp_sony.ko # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/3.18.20/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/kmod/hi_user.ko $(INSTALL) -m 755 -d $(TARGET_DIR)/usr/bin From 2da991e6b7e108f254c2c0c5289d3513bec8f7b7 Mon Sep 17 00:00:00 2001 From: Dmitry Ermakov Date: Sun, 16 Jan 2022 23:26:30 +0300 Subject: [PATCH 07/20] Enable Majestic for Hi3519v101 --- .../configs/unknown_unknown_hi3516av200_openipc_defconfig | 2 +- .../configs/unknown_unknown_hi3519v101_openipc_defconfig | 2 +- general/package/majestic-hi3519v101/majestic-hi3519v101.mk | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/br-ext-chip-hisilicon/configs/unknown_unknown_hi3516av200_openipc_defconfig b/br-ext-chip-hisilicon/configs/unknown_unknown_hi3516av200_openipc_defconfig index 8757b303..f1dc9413 100644 --- a/br-ext-chip-hisilicon/configs/unknown_unknown_hi3516av200_openipc_defconfig +++ b/br-ext-chip-hisilicon/configs/unknown_unknown_hi3516av200_openipc_defconfig @@ -71,7 +71,7 @@ BR2_PACKAGE_LIBOGG_OPENIPC=y BR2_PACKAGE_LIBWEBSOCKETS_OPENIPC=y BR2_PACKAGE_LIBYAML=y BR2_PACKAGE_MAJESTIC_FONTS=y -# BR2_PACKAGE_MAJESTIC_HI3519V101 is not set +BR2_PACKAGE_MAJESTIC_HI3519V101=y BR2_PACKAGE_MBEDTLS_OPENIPC=y # BR2_PACKAGE_MBEDTLS_OPENIPC_PROGRAMS is not set # BR2_PACKAGE_MBEDTLS_OPENIPC_COMPRESSION is not set diff --git a/br-ext-chip-hisilicon/configs/unknown_unknown_hi3519v101_openipc_defconfig b/br-ext-chip-hisilicon/configs/unknown_unknown_hi3519v101_openipc_defconfig index 2d2df361..abcdcb20 100644 --- a/br-ext-chip-hisilicon/configs/unknown_unknown_hi3519v101_openipc_defconfig +++ b/br-ext-chip-hisilicon/configs/unknown_unknown_hi3519v101_openipc_defconfig @@ -71,7 +71,7 @@ BR2_PACKAGE_LIBOGG_OPENIPC=y BR2_PACKAGE_LIBWEBSOCKETS_OPENIPC=y BR2_PACKAGE_LIBYAML=y BR2_PACKAGE_MAJESTIC_FONTS=y -# BR2_PACKAGE_MAJESTIC_HI3519V101 is not set +BR2_PACKAGE_MAJESTIC_HI3519V101=y BR2_PACKAGE_MBEDTLS_OPENIPC=y # BR2_PACKAGE_MBEDTLS_OPENIPC_PROGRAMS is not set # BR2_PACKAGE_MBEDTLS_OPENIPC_COMPRESSION is not set diff --git a/general/package/majestic-hi3519v101/majestic-hi3519v101.mk b/general/package/majestic-hi3519v101/majestic-hi3519v101.mk index 0873d05a..038c9ac8 100644 --- a/general/package/majestic-hi3519v101/majestic-hi3519v101.mk +++ b/general/package/majestic-hi3519v101/majestic-hi3519v101.mk @@ -5,7 +5,7 @@ ################################################################################ MAJESTIC_HI3519V101_VERSION = current -MAJESTIC_HI3519V101_SOURCE = majestic.hi3516cv300.lite.master.tar.bz2 +MAJESTIC_HI3519V101_SOURCE = majestic.hi3519v101.lite.master.tar.bz2 MAJESTIC_HI3519V101_SITE = https://openipc.s3-eu-west-1.amazonaws.com MAJESTIC_HI3519V101_LICENSE = MIT MAJESTIC_HI3519V101_LICENSE_FILES = LICENSE From 898a3e573df88c3cbeefddef646bd68031af1a8d Mon Sep 17 00:00:00 2001 From: Dmitry Ermakov Date: Mon, 17 Jan 2022 06:56:40 +0300 Subject: [PATCH 08/20] Remove unneeded libraries for Hi3519v101 --- .../hisilicon-osdrv-hi3519v101.mk | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/general/package/hisilicon-osdrv-hi3519v101/hisilicon-osdrv-hi3519v101.mk b/general/package/hisilicon-osdrv-hi3519v101/hisilicon-osdrv-hi3519v101.mk index 56b1f9c0..ae61b05e 100644 --- a/general/package/hisilicon-osdrv-hi3519v101/hisilicon-osdrv-hi3519v101.mk +++ b/general/package/hisilicon-osdrv-hi3519v101/hisilicon-osdrv-hi3519v101.mk @@ -75,17 +75,17 @@ define HISILICON_OSDRV_HI3519V101_INSTALL_TARGET_CMDS $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/libhi_cipher.so $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/lib_hidefog.so $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/lib_hiirauto.so - $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/libhive_AEC.so - $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/libhive_AGC.so - $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/libhive_ANR.so - $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/libhive_common.so - $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/libhive_EQ.so - $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/libhive_GAIN.so - $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/libhive_HDR.so - $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/libhive_HPF.so - $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/libhive_MBC.so - $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/libhive_RES.so - $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/libhive_RNR.so + # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/libhive_AEC.so + # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/libhive_AGC.so + # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/libhive_ANR.so + # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/libhive_common.so + # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/libhive_EQ.so + # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/libhive_GAIN.so + # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/libhive_HDR.so + # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/libhive_HPF.so + # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/libhive_MBC.so + # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/libhive_RES.so + # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/libhive_RNR.so $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/libisp.so $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/libive.so $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3519v101/files/lib/libmd.so From 1317cca5217bd294eb57fdbfc416d82e5acf81ac Mon Sep 17 00:00:00 2001 From: Dmitry Ermakov Date: Mon, 17 Jan 2022 14:15:18 +0300 Subject: [PATCH 09/20] Fix sensor configs for Hi3519v101 --- .../files/sensor/config/imx385_i2c_1080p.ini | 2 +- .../sensor/config/imx385_i2c_lvds_1080p.ini | 137 ++++++++++++++++++ .../files/sensor/config/os05a_i2c_5M.ini | 2 +- .../files/sensor/config/ov4689_i2c_4M.ini | 2 +- 4 files changed, 140 insertions(+), 3 deletions(-) create mode 100644 general/package/hisilicon-osdrv-hi3519v101/files/sensor/config/imx385_i2c_lvds_1080p.ini 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 index 3a6200eb..f5f27de5 100644 --- 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 @@ -1,5 +1,5 @@ [sensor] -Sensor_type=imx385 +Sensor_type=stSnsImx385Obj Mode=WDR_MODE_NONE DllFile=/usr/lib/sensors/libsns_imx385.so diff --git a/general/package/hisilicon-osdrv-hi3519v101/files/sensor/config/imx385_i2c_lvds_1080p.ini b/general/package/hisilicon-osdrv-hi3519v101/files/sensor/config/imx385_i2c_lvds_1080p.ini new file mode 100644 index 00000000..01829cf9 --- /dev/null +++ b/general/package/hisilicon-osdrv-hi3519v101/files/sensor/config/imx385_i2c_lvds_1080p.ini @@ -0,0 +1,137 @@ +[sensor] +Sensor_type=stSnsImx385Obj +Mode=WDR_MODE_NONE +DllFile=/usr/lib/sensors/libsns_imx385.so + +[mode] +input_mode=INPUT_MODE_LVDS +dev_attr=0 + +[mipi] +data_type=RAW_DATA_12BIT +lane_id = 0|1|2|3|-1|-1|-1|-1| ;lane_id: -1 - disable + +[lvds] +;----------only for lvds_dev--------- +img_size_w = 1920 ;oringnal sensor input image size W +img_size_h = 1080 ;oringnal sensor input image size H +wdr_mode = 0 ;HI_WDR_MODE_NONE =0 + ;HI_WDR_MODE_2F = 1 + ;HI_WDR_MODE_3F = 2 + ;HI_WDR_MODE_4F =3 +sync_mode = 1 ;LVDS_SYNC_MODE_SOL = 0 + ;LVDS_SYNC_MODE_SAV = 1 +raw_data_type = 2 ;RAW_DATA_8BIT = 0 + ;RAW_DATA_10BIT = 1 + ;RAW_DATA_12BIT = 2 + ;RAW_DATA_14BIT = 3 +data_endian = 1 ;LVDS_ENDIAN_LITTLE = 0 + ;LVDS_ENDIAN_BIG = 1 +sync_code_endian = 1 ;LVDS_ENDIAN_LITTLE = 0 + ;LVDS_ENDIAN_BIG = 1 +lane_id = 0|1|2|3|-1|-1|-1|-1| ;lane_id: -1 - disable +lvds_lane_num = -1 ;LVDS_LANE_NUM +wdr_vc_num = -1 ;WDR_VC_NUM +sync_code_num = -1 ;SYNC_CODE_NUM +sync_code_0 = 0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0 +sync_code_1 = 0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0 +sync_code_2 = 0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0 +sync_code_3 = 0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0 +sync_code_4 = -1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1| +sync_code_5 = -1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1| +sync_code_6 = -1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1| +sync_code_7 = -1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1| + +[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_LVDS +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/config/os05a_i2c_5M.ini b/general/package/hisilicon-osdrv-hi3519v101/files/sensor/config/os05a_i2c_5M.ini index 1c244357..28dbe13f 100644 --- a/general/package/hisilicon-osdrv-hi3519v101/files/sensor/config/os05a_i2c_5M.ini +++ b/general/package/hisilicon-osdrv-hi3519v101/files/sensor/config/os05a_i2c_5M.ini @@ -1,5 +1,5 @@ [sensor] -Sensor_type=os05a +Sensor_type=stSnsOs05aObj Mode=WDR_MODE_NONE DllFile=libsns_os05a10.so diff --git a/general/package/hisilicon-osdrv-hi3519v101/files/sensor/config/ov4689_i2c_4M.ini b/general/package/hisilicon-osdrv-hi3519v101/files/sensor/config/ov4689_i2c_4M.ini index 11183400..a52786db 100644 --- a/general/package/hisilicon-osdrv-hi3519v101/files/sensor/config/ov4689_i2c_4M.ini +++ b/general/package/hisilicon-osdrv-hi3519v101/files/sensor/config/ov4689_i2c_4M.ini @@ -1,5 +1,5 @@ [sensor] -Sensor_type=ov4689 +Sensor_type=stSnsOv4689SlaveObj Mode=WDR_MODE_NONE DllFile=libsns_ov4689.so From d4b1629fdb19e331b2d6045c2e7c247015103bd6 Mon Sep 17 00:00:00 2001 From: Dmitry Ermakov Date: Tue, 18 Jan 2022 08:32:53 +0300 Subject: [PATCH 10/20] Fix init and sensors for Hi3519v101 --- .../files/script/load_hisilicon | 110 +++++++++++++- .../files/sensor/config/imx385_i2c_1080p.ini | 2 +- .../sensor/config/imx385_i2c_lvds_1080p.ini | 137 ------------------ .../files/sensor/libsns_imx178.so | Bin 0 -> 27080 bytes .../files/sensor/libsns_imx185.so | Bin 0 -> 31224 bytes .../files/sensor/libsns_imx327.so | Bin 0 -> 44664 bytes .../files/sensor/libsns_imx385.so | Bin 32268 -> 48608 bytes .../files/sensor/libsns_sc4210.so | Bin 0 -> 43736 bytes 8 files changed, 106 insertions(+), 143 deletions(-) delete mode 100644 general/package/hisilicon-osdrv-hi3519v101/files/sensor/config/imx385_i2c_lvds_1080p.ini create mode 100755 general/package/hisilicon-osdrv-hi3519v101/files/sensor/libsns_imx178.so create mode 100755 general/package/hisilicon-osdrv-hi3519v101/files/sensor/libsns_imx185.so create mode 100755 general/package/hisilicon-osdrv-hi3519v101/files/sensor/libsns_imx327.so create mode 100755 general/package/hisilicon-osdrv-hi3519v101/files/sensor/libsns_sc4210.so diff --git a/general/package/hisilicon-osdrv-hi3519v101/files/script/load_hisilicon b/general/package/hisilicon-osdrv-hi3519v101/files/script/load_hisilicon index 863793f7..5185bcf8 100755 --- a/general/package/hisilicon-osdrv-hi3519v101/files/script/load_hisilicon +++ b/general/package/hisilicon-osdrv-hi3519v101/files/script/load_hisilicon @@ -372,7 +372,7 @@ insert_sns() { spi0_4wire_pin_mux insmod hi_ssp_sony.ko ;; - imx274_mipi) + imx274_mipi | imx334 | imx335) tmp=0x14 # SDK config: IVE:396M, GDC:475M, VGS:500M, VEDU:600M, VPSS:300M # viu0:300M,isp0:300M, viu1:300M,isp1:300M @@ -381,6 +381,54 @@ insert_sns() { devmem 0x12010040 32 0x14 # sensor0 clk_en, 24MHz i2c0_pin_mux ;; + imx294) + tmp=0x14 + # SDK config: IVE:396M, GDC:475M, VGS:500M, VEDU:600M, VPSS:300M + # viu0:600M,isp0:600M, viu1:300M,isp1:300M + devmem 0x1201004c 32 0x00094c23 + devmem 0x12010054 32 0x00024041 + devmem 0x12010040 32 0x14 # sensor0 clk_en, 24MHz + i2c0_pin_mux + ;; + imx117) + tmp=0x11 + # SDK config: IVE:396M, GDC:475M, VGS:500M, VEDU:600M, VPSS:300M + # viu0:300M,isp0:300M, viu1:300M,isp1:300M + devmem 0x1201004c 32 0x00094c21 + devmem 0x12010054 32 0x0004041 + devmem 0x12010040 32 0x11 # sensor0 clk_en, 72MHz + spi0_4wire_pin_mux + insmod extdrv/hi_ssp_sony.ko + ;; + imx265) + tmp=0x18 + # SDK config: IVE:396M, GDC:475M, VGS:500M, VEDU:600M, VPSS:300M + #imx265: viu0:300M,isp0:300M, viu1:300M,isp1:300M + devmem 0x1201004c 32 0x00094c21 + devmem 0x12010054 32 0x0004041 + devmem 0x12010040 32 0x18 # sensor0 clk_en, 37.125MHz + spi0_4wire_pin_mux + insmod extdrv/hi_ssp_sony.ko + ;; + imx377) + tmp=0x14 + # SDK config: IVE:396M, GDC:475M, VGS:500M, VEDU:600M, VPSS:300M + #viu0:600M,isp0:600M, viu1:300M,isp1:300M + devmem 0x1201004c 32 0x00094c23 + devmem 0x12010054 32 0x00024041 + devmem 0x12010040 32 0x14 # sensor0 clk_en, 24MHz + i2c0_pin_mux + ;; + imx317) + tmp=0x11 + # SDK config: IVE:396M, GDC:475M, VGS:500M, VEDU:600M, VPSS:300M + # viu0:300M,isp0:300M, viu1:300M,isp1:300M + devmem 0x1201004c 32 0x00094c21 + devmem 0x12010054 32 0x0004041 + devmem 0x12010040 32 0x11 # sensor0 clk_en, 72MHz + spi0_4wire_pin_mux + insmod extdrv/hi_ssp_sony.ko + ;; imx290) tmp=0x18 # SDK config: IVE:396M, GDC:475M, VGS:500M, VEDU:600M, VPSS:300M @@ -390,7 +438,35 @@ insert_sns() { devmem 0x12010040 32 0x18 # sensor0 clk_en, 37.125MHz i2c0_pin_mux ;; - imx385) + imx327) + tmp=0x18 + # SDK config: IVE:396M, GDC:475M, VGS:500M, VEDU:600M, VPSS:300M + #imx290:viu0:340M,isp0:214M, viu1:340M,isp1:214M + devmem 0x1201004c 32 0x00094c24 + devmem 0x12010054 32 0x0004 + devmem 0x12010040 32 0x18 # sensor0 clk_en, 37.125MHz + i2c0_pin_mux + ;; + mn34220) + tmp=0x18 + # SDK config: IVE:396M, GDC:475M, VGS:500M, VEDU:600M, VPSS:300M + # viu0:300M,isp0:300M, viu1:300M,isp1:300M + devmem 0x1201004c 32 0x00094c21 + devmem 0x12010054 32 0x0004041 + devmem 0x12010040 32 0x18 # sensor0 clk_en, 37.125MHz + i2c0_pin_mux + ;; + mn34120) + tmp=0x12 + # SDK config: IVE:396M, GDC:475M, VGS:500M, VEDU:600M, VPSS:300M + # viu0:300M,isp0:300M, viu1:300M,isp1:300M + devmem 0x1201004c 32 0x00094c21 + devmem 0x12010054 32 0x0004041 + devmem 0x12010040 32 0x12 # sensor0 clk_en, 54MHz + spi0_3wire_pin_mux + insmod extdrv/hi_ssp_3wire.ko + ;; + imx385_lvds) tmp=0x18 devmem 0x12010040 32 0x18 devmem 0x12040190 32 0x2 @@ -412,6 +488,26 @@ insert_sns() { devmem 0x12010040 32 0x14 # sensor0 clk_en, 24MHz i2c0_pin_mux ;; + sc4210) + tmp=0x14 + # SDK config: IVE:396M, GDC:475M, VGS:500M, VEDU:600M, VPSS:300M + #ov4689: viu0:300M,isp0:300M, viu1:300M,isp1:300M + devmem 0x1201004c 32 0x00094c21 + devmem 0x12010054 32 0x0004041 + devmem 0x12010040 32 0x1a # sensor0 clk_en, 27MHz + i2c0_pin_mux + ;; + imx185 | imx385 | imx178) + tmp=0x18 + # SDK config: IVE:396M, GDC:475M, VGS:500M, VEDU:600M, VPSS:300M + # viu0:300M,isp0:300M, viu1:300M,isp1:300M + devmem 0x1201004c 32 0x00094421 + devmem 0x12010054 32 0x0004041 + devmem 0x12010040 32 0x18 # sensor0 clk_en, 37.125MHz + i2c0_pin_mux + #spi0_4wire_pin_mux; + #insmod extdrv/hi_ssp_sony.ko; + ;; os08a10) tmp=0x14 # SDK config: IVE:396M, GDC:475M, VGS:500M, VEDU:600M, VPSS:300M @@ -792,9 +888,13 @@ if [ $b_arg_remove -eq 1 ]; then remove_ko fi -if [ $b_arg_insmod -eq 1 ]; then - cd /lib/modules/3.18.20/hisilicon - insert_ko +if [ "$SENSOR" = "unknown" ]; then + exit 1 +else + if [ $b_arg_insmod -eq 1 ]; then + cd /lib/modules/3.18.20/hisilicon + insert_ko; + fi fi if [ $b_arg_restore -eq 1 ]; then 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 index f5f27de5..99f3cde6 100644 --- 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 @@ -8,7 +8,7 @@ input_mode=INPUT_MODE_MIPI dev_attr=0 [mipi] -data_type=RAW_DATA_12BIT +data_type=RAW_DATA_10BIT lane_id = 0|1|2|3|-1|-1|-1|-1| ;lane_id: -1 - disable [isp_image] diff --git a/general/package/hisilicon-osdrv-hi3519v101/files/sensor/config/imx385_i2c_lvds_1080p.ini b/general/package/hisilicon-osdrv-hi3519v101/files/sensor/config/imx385_i2c_lvds_1080p.ini deleted file mode 100644 index 01829cf9..00000000 --- a/general/package/hisilicon-osdrv-hi3519v101/files/sensor/config/imx385_i2c_lvds_1080p.ini +++ /dev/null @@ -1,137 +0,0 @@ -[sensor] -Sensor_type=stSnsImx385Obj -Mode=WDR_MODE_NONE -DllFile=/usr/lib/sensors/libsns_imx385.so - -[mode] -input_mode=INPUT_MODE_LVDS -dev_attr=0 - -[mipi] -data_type=RAW_DATA_12BIT -lane_id = 0|1|2|3|-1|-1|-1|-1| ;lane_id: -1 - disable - -[lvds] -;----------only for lvds_dev--------- -img_size_w = 1920 ;oringnal sensor input image size W -img_size_h = 1080 ;oringnal sensor input image size H -wdr_mode = 0 ;HI_WDR_MODE_NONE =0 - ;HI_WDR_MODE_2F = 1 - ;HI_WDR_MODE_3F = 2 - ;HI_WDR_MODE_4F =3 -sync_mode = 1 ;LVDS_SYNC_MODE_SOL = 0 - ;LVDS_SYNC_MODE_SAV = 1 -raw_data_type = 2 ;RAW_DATA_8BIT = 0 - ;RAW_DATA_10BIT = 1 - ;RAW_DATA_12BIT = 2 - ;RAW_DATA_14BIT = 3 -data_endian = 1 ;LVDS_ENDIAN_LITTLE = 0 - ;LVDS_ENDIAN_BIG = 1 -sync_code_endian = 1 ;LVDS_ENDIAN_LITTLE = 0 - ;LVDS_ENDIAN_BIG = 1 -lane_id = 0|1|2|3|-1|-1|-1|-1| ;lane_id: -1 - disable -lvds_lane_num = -1 ;LVDS_LANE_NUM -wdr_vc_num = -1 ;WDR_VC_NUM -sync_code_num = -1 ;SYNC_CODE_NUM -sync_code_0 = 0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0 -sync_code_1 = 0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0 -sync_code_2 = 0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0 -sync_code_3 = 0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0 -sync_code_4 = -1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1| -sync_code_5 = -1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1| -sync_code_6 = -1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1| -sync_code_7 = -1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1| - -[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_LVDS -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_imx178.so b/general/package/hisilicon-osdrv-hi3519v101/files/sensor/libsns_imx178.so new file mode 100755 index 0000000000000000000000000000000000000000..7cb309a61b65918050540c3fba5da86c08a89488 GIT binary patch literal 27080 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 literal 0 HcmV?d00001 diff --git a/general/package/hisilicon-osdrv-hi3519v101/files/sensor/libsns_imx185.so b/general/package/hisilicon-osdrv-hi3519v101/files/sensor/libsns_imx185.so new file mode 100755 index 0000000000000000000000000000000000000000..0905084548e17fee6203cb0381f8f60b214afbf2 GIT binary patch literal 31224 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 literal 0 HcmV?d00001 diff --git a/general/package/hisilicon-osdrv-hi3519v101/files/sensor/libsns_imx327.so b/general/package/hisilicon-osdrv-hi3519v101/files/sensor/libsns_imx327.so new file mode 100755 index 0000000000000000000000000000000000000000..fe5785f75945d3510bb74ca5f5a3b013996b5fa2 GIT binary patch literal 44664 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 literal 0 HcmV?d00001 From 58be9286ab434c70fe39d9d50476cbc678fc2bd3 Mon Sep 17 00:00:00 2001 From: Dmitry Ermakov Date: Tue, 18 Jan 2022 21:17:01 +0300 Subject: [PATCH 11/20] Fix sensor autodetect for Hi3519v101 --- .../files/script/load_hisilicon | 11 +++++++---- .../files/sensor/config/imx385_i2c_1080p.ini | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/general/package/hisilicon-osdrv-hi3519v101/files/script/load_hisilicon b/general/package/hisilicon-osdrv-hi3519v101/files/script/load_hisilicon index 5185bcf8..3c37433a 100755 --- a/general/package/hisilicon-osdrv-hi3519v101/files/script/load_hisilicon +++ b/general/package/hisilicon-osdrv-hi3519v101/files/script/load_hisilicon @@ -18,7 +18,7 @@ os_mem_size=${os_mem_size:=32} # Sensor config # SNS_TYPE=$(awk -F '=' '$1=="sensor"{print $2}' RS=" " /proc/cmdline) SNS_TYPE0=$(fw_printenv -n sensor) -SNS_TYPE0=${SNS_TYPE0:=imx290} +SNS_TYPE0=${SNS_TYPE0:=imx385} SNS_TYPE1="NULL" WORK_MODE="single_pipe" @@ -33,16 +33,18 @@ insert_osal() { insert_detect() { cd /lib/modules/3.18.20/hisilicon + sysconfig insert_osal insmod hi3519v101_base.ko insmod hi3519v101_sys.ko vi_vpss_online=$b_arg_online sensor=$SNS_TYPE0,$SNS_TYPE1 mem_total=$mem_total insert_isp insmod hi_sensor_i2c.ko - insmod hi_sensor_spi.ko + insmod hi_ssp_sony.ko + insert_sns } remove_detect() { - rmmod hi_sensor_spi + rmmod hi_ssp_sony rmmod hi_sensor_i2c rmmod hi3519v101_isp rmmod hi3519v101_sys @@ -508,7 +510,7 @@ insert_sns() { #spi0_4wire_pin_mux; #insmod extdrv/hi_ssp_sony.ko; ;; - os08a10) + os08a | os08a10) tmp=0x14 # SDK config: IVE:396M, GDC:475M, VGS:500M, VEDU:600M, VPSS:300M #os08a10: viu0: 600M, isp0:300M, viu1:300M,isp1:300M @@ -867,6 +869,7 @@ fi # Sensor config # SENSOR=${SENSOR:=imx307} # + if [ -n "$SENSOR" ]; then logger -s -p daemon.info -t hisilicon "Manualy set SENSOR as ${SENSOR}" else 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 index 99f3cde6..ddc884c8 100644 --- 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 @@ -1,7 +1,7 @@ [sensor] Sensor_type=stSnsImx385Obj Mode=WDR_MODE_NONE -DllFile=/usr/lib/sensors/libsns_imx385.so +DllFile=libsns_imx385.so [mode] input_mode=INPUT_MODE_MIPI From 412323a7c968bf6038ea7791e36c495753810e7d Mon Sep 17 00:00:00 2001 From: Dmitry Ermakov Date: Tue, 18 Jan 2022 21:19:58 +0300 Subject: [PATCH 12/20] Fix IMX385 config for Hi3519v101 --- .../files/sensor/config/imx385_i2c_1080p.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 index ddc884c8..f2e81df4 100644 --- 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 @@ -1,5 +1,5 @@ [sensor] -Sensor_type=stSnsImx385Obj +Sensor_type=stSnsObj Mode=WDR_MODE_NONE DllFile=libsns_imx385.so From 441e77805936599e37441ec42cf07607d4324665 Mon Sep 17 00:00:00 2001 From: Dmitry Ermakov Date: Wed, 19 Jan 2022 07:11:49 +0300 Subject: [PATCH 13/20] Add init script for Hi3516Cv500 --- ...nown_unknown_hi3516av300_openipc_defconfig | 2 - ...nown_unknown_hi3516cv500_openipc_defconfig | 2 - ...nown_unknown_hi3516dv300_openipc_defconfig | 2 - .../files/script/load3516av300 | 335 ---------------- .../files/script/load3516cv500 | 325 ---------------- .../files/script/load3516dv300 | 335 ---------------- .../files/script/load_hisilicon | 356 ++++++++++++++++++ .../hisilicon-osdrv-hi3516cv500.mk | 151 ++++---- .../files/script/load_hisilicon | 2 +- 9 files changed, 443 insertions(+), 1067 deletions(-) delete mode 100755 general/package/hisilicon-osdrv-hi3516cv500/files/script/load3516av300 delete mode 100755 general/package/hisilicon-osdrv-hi3516cv500/files/script/load3516cv500 delete mode 100755 general/package/hisilicon-osdrv-hi3516cv500/files/script/load3516dv300 create mode 100755 general/package/hisilicon-osdrv-hi3516cv500/files/script/load_hisilicon diff --git a/br-ext-chip-hisilicon/configs/unknown_unknown_hi3516av300_openipc_defconfig b/br-ext-chip-hisilicon/configs/unknown_unknown_hi3516av300_openipc_defconfig index b6c391e8..c97cb7b2 100644 --- a/br-ext-chip-hisilicon/configs/unknown_unknown_hi3516av300_openipc_defconfig +++ b/br-ext-chip-hisilicon/configs/unknown_unknown_hi3516av300_openipc_defconfig @@ -51,7 +51,6 @@ BR2_PACKAGE_FWPRINTENV_OPENIPC=y BR2_PACKAGE_HASERL=y BR2_PACKAGE_HISI_GPIO=y BR2_PACKAGE_HISILICON_OSDRV_HI3516CV500=y -# BR2_PACKAGE_HISILICON_OSDRV_HI3516EV300 is not set BR2_PACKAGE_IPCTOOL=y BR2_PACKAGE_JSON_C=y BR2_PACKAGE_LAME_OPENIPC=y @@ -69,7 +68,6 @@ BR2_PACKAGE_LIBWEBSOCKETS_OPENIPC=y BR2_PACKAGE_LIBYAML=y BR2_PACKAGE_MAJESTIC_FONTS=y BR2_PACKAGE_MAJESTIC_HI3516CV500=y -# BR2_PACKAGE_MAJESTIC_HI3516EV300 is not set BR2_PACKAGE_MBEDTLS_OPENIPC=y # BR2_PACKAGE_MBEDTLS_OPENIPC_PROGRAMS is not set # BR2_PACKAGE_MBEDTLS_OPENIPC_COMPRESSION is not set diff --git a/br-ext-chip-hisilicon/configs/unknown_unknown_hi3516cv500_openipc_defconfig b/br-ext-chip-hisilicon/configs/unknown_unknown_hi3516cv500_openipc_defconfig index 050522a4..86acc885 100644 --- a/br-ext-chip-hisilicon/configs/unknown_unknown_hi3516cv500_openipc_defconfig +++ b/br-ext-chip-hisilicon/configs/unknown_unknown_hi3516cv500_openipc_defconfig @@ -51,7 +51,6 @@ BR2_PACKAGE_FWPRINTENV_OPENIPC=y BR2_PACKAGE_HASERL=y BR2_PACKAGE_HISI_GPIO=y BR2_PACKAGE_HISILICON_OSDRV_HI3516CV500=y -# BR2_PACKAGE_HISILICON_OSDRV_HI3516EV300 is not set BR2_PACKAGE_IPCTOOL=y BR2_PACKAGE_JSON_C=y BR2_PACKAGE_LAME_OPENIPC=y @@ -69,7 +68,6 @@ BR2_PACKAGE_LIBWEBSOCKETS_OPENIPC=y BR2_PACKAGE_LIBYAML=y BR2_PACKAGE_MAJESTIC_FONTS=y BR2_PACKAGE_MAJESTIC_HI3516CV500=y -# BR2_PACKAGE_MAJESTIC_HI3516EV300 is not set BR2_PACKAGE_MBEDTLS_OPENIPC=y # BR2_PACKAGE_MBEDTLS_OPENIPC_PROGRAMS is not set # BR2_PACKAGE_MBEDTLS_OPENIPC_COMPRESSION is not set diff --git a/br-ext-chip-hisilicon/configs/unknown_unknown_hi3516dv300_openipc_defconfig b/br-ext-chip-hisilicon/configs/unknown_unknown_hi3516dv300_openipc_defconfig index 5d5560a4..d9e73565 100644 --- a/br-ext-chip-hisilicon/configs/unknown_unknown_hi3516dv300_openipc_defconfig +++ b/br-ext-chip-hisilicon/configs/unknown_unknown_hi3516dv300_openipc_defconfig @@ -51,7 +51,6 @@ BR2_PACKAGE_FWPRINTENV_OPENIPC=y BR2_PACKAGE_HASERL=y BR2_PACKAGE_HISI_GPIO=y BR2_PACKAGE_HISILICON_OSDRV_HI3516CV500=y -# BR2_PACKAGE_HISILICON_OSDRV_HI3516EV300 is not set BR2_PACKAGE_IPCTOOL=y BR2_PACKAGE_JSON_C=y BR2_PACKAGE_LAME_OPENIPC=y @@ -69,7 +68,6 @@ BR2_PACKAGE_LIBWEBSOCKETS_OPENIPC=y BR2_PACKAGE_LIBYAML=y BR2_PACKAGE_MAJESTIC_FONTS=y BR2_PACKAGE_MAJESTIC_HI3516CV500=y -# BR2_PACKAGE_MAJESTIC_HI3516EV300 is not set BR2_PACKAGE_MBEDTLS_OPENIPC=y # BR2_PACKAGE_MBEDTLS_OPENIPC_PROGRAMS is not set # BR2_PACKAGE_MBEDTLS_OPENIPC_COMPRESSION is not set diff --git a/general/package/hisilicon-osdrv-hi3516cv500/files/script/load3516av300 b/general/package/hisilicon-osdrv-hi3516cv500/files/script/load3516av300 deleted file mode 100755 index 491f5a9d..00000000 --- a/general/package/hisilicon-osdrv-hi3516cv500/files/script/load3516av300 +++ /dev/null @@ -1,335 +0,0 @@ -#!/bin/sh -# Useage: ./load3516av300 [ -r|-i|-a ] [ sensor0~1 ] -# -r : rmmod all modules -# -i : insmod all modules -# -a : rmmod all moules and then insmod them -# e.g: RAW: ./load3516av300 -i -sensor0 imx335 -sensor1 imx335 -# e.g: BT1120/DC : ./load3516av300 -i -sensor0 imx327 -sensor1 imx327 -osmem 128 -yuv0 1 -# e.g: BT656 : ./load3516av300 -i -sensor0 imx327 -sensor1 imx327 -osmem 128 -yuv0 2 - -####################Variables Definition########################## - -SNS_TYPE0=imx335; # sensor type -SNS_TYPE1=NULL; # sensor type -YUV_TYPE0=0; # 0 -- raw, 1 -- bt1120/DC, 2 --bt656 -CHIP_TYPE=hi3516av300; # chip type -#DDR start:0x80000000, kernel start:0x80000000, OS(128M); MMZ start:0x88000000 -mem_total=512 # 512M, total mem -mem_start=0x80000000 # phy mem start -os_mem_size=128 # 128M, os mem -mmz_start=0x88000000; # mmz start addr -mmz_size=384M; # 384M, mmz size -################################################################## - -report_error() -{ - echo "******* Error: There's something wrong, please check! *****" - exit 1 -} - -insert_audio() -{ - insmod hi3516cv500_aio.ko - insmod hi3516cv500_ai.ko - insmod hi3516cv500_ao.ko - insmod hi3516cv500_aenc.ko - insmod hi3516cv500_adec.ko - insmod hi3516cv500_acodec.ko -# insmod extdrv/hi_tlv320aic31.ko - echo "insert audio" -} - -remove_audio() -{ - rmmod hi3516cv500_acodec -# rmmod hi_tlv320aic31.ko - rmmod hi3516cv500_adec - rmmod hi3516cv500_aenc - rmmod hi3516cv500_ao - rmmod hi3516cv500_ai - rmmod hi3516cv500_aio - - echo "remove audio" -} - -insert_isp() -{ - insmod hi3516cv500_isp.ko -} - -insert_gyro() -{ - insmod extdrv/hi_spi.ko - insmod hi3516cv500_gyrodis.ko - insmod hi3516cv500_motionfusion.ko - insmod extdrv/motionsensor_mng.ko - insmod extdrv/motionsensor_chip.ko -} - -remove_gyro() -{ - rmmod motionsensor_chip - rmmod motionsensor_mng - rmmod hi3516cv500_motionfusion - rmmod hi3516cv500_gyrodis - rmmod hi_spi -} - -insert_ko() -{ - # driver load - insmod hi_osal.ko anony=1 mmz_allocator=hisi mmz=anonymous,0,$mmz_start,$mmz_size || report_error - - # sys config - insmod sys_config.ko chip=$CHIP_TYPE sensors=sns0=$SNS_TYPE0,sns1=$SNS_TYPE1, g_cmos_yuv_flag=$YUV_TYPE0 -# insmod hi_tzasc.ko - insmod hi3516cv500_base.ko - insmod hi3516cv500_sys.ko - insmod hi3516cv500_tde.ko - insmod hi3516cv500_rgn.ko - insmod hi3516cv500_gdc.ko - insmod hi3516cv500_vgs.ko - insmod hi3516cv500_dis.ko - insmod hi3516cv500_vi.ko - insert_isp; - insmod hi3516cv500_vpss.ko - insmod hi3516cv500_vo.ko - insmod hifb.ko video="hifb:vram0_size:16200" # default fb0:1080p - - insmod hi3516cv500_chnl.ko - insmod hi3516cv500_vedu.ko - insmod hi3516cv500_rc.ko - insmod hi3516cv500_venc.ko - insmod hi3516cv500_h264e.ko - insmod hi3516cv500_h265e.ko - insmod hi3516cv500_jpege.ko - insmod hi3516cv500_jpegd.ko - insmod hi3516cv500_vfmw.ko - insmod hi3516cv500_vdec.ko - - insmod hi3516cv500_ive.ko save_power=1 -# insmod hi_ipcm.ko -# nnie_max_tskbuf_num=64 - insmod hi3516cv500_nnie.ko nnie_save_power=1 nnie_max_tskbuf_num=32 - insmod extdrv/hi_pwm.ko - insmod extdrv/hi_piris.ko - insmod extdrv/hi_sensor_i2c.ko - insmod extdrv/hi_sensor_spi.ko -# insmod extdrv/hi_sil9136.ko norm=12 #1080P@30fps for umap7p -# insmod extdrv/mpu_bosch.ko -# insmod extdrv/hi_ssp_st7789.ko -# insmod extdrv/hi_ssp_ota5182.ko -# insmod extdrv/hi_serdes.ko - insmod hi3516cv500_hdmi.ko - - insert_audio - - insmod hi_mipi_rx.ko -# insmod hi_mipi_tx.ko -# insmod hi_user.ko - -# insert_gyro -} - -remove_ko() -{ -# rmmod_gyro -# rmmod hi_user - remove_audio -# rmmod hi_mipi_tx - rmmod hi_mipi_rx -# rmmod hi_serdes -# rmmod hi_sil9136 &> /dev/null -# rmmod hi_ssp_ota5182 -# rmmod hi_ssp_st7789 - rmmod hi_piris - rmmod hi_pwm - rmmod hi3516cv500_nnie -# rmmod hi_ipcm - rmmod hi3516cv500_ive - rmmod hi3516cv500_jpegd - rmmod hi3516cv500_vfmw - rmmod hi3516cv500_vdec - rmmod hi3516cv500_rc - rmmod hi3516cv500_jpege - rmmod hi3516cv500_h264e - rmmod hi3516cv500_h265e - rmmod hi3516cv500_venc - rmmod hi3516cv500_vedu - rmmod hi3516cv500_chnl - rmmod hifb - rmmod hi3516cv500_vo - rmmod hi3516cv500_vpss - rmmod hi3516cv500_isp - rmmod hi3516cv500_vi - rmmod hi3516cv500_gdc - rmmod hi3516cv500_dis - rmmod hi3516cv500_vgs - rmmod hi3516cv500_rgn - rmmod hi3516cv500_tde - rmmod hi3516cv500_hdmi - - rmmod hi_sensor_i2c &> /dev/null - rmmod hi_sensor_spi &> /dev/null - -# rmmod mpu_bosch - rmmod hi3516cv500_sys - rmmod hi3516cv500_base -# rmmod hi_tzasc - rmmod sys_config - rmmod hi_osal -} - -sys_restore() -{ - #################################################### - clkcfg_hi3516cv500.sh > /dev/null - - # system configuration - sysctl_hi3516cv500.sh # > /dev/null - sns_config; -} - -load_usage() -{ - echo "Usage: ./load3516av300 [-option] [sensor0~1]" - echo "options:" - echo " -i insert modules" - echo " -r remove modules" - echo " -a remove modules first, then insert modules" - echo " -sensor sensor_name config sensor type [default: imx335]" - echo " -total mem_size config total mem size [unit: M, default: 512]" - echo " -osmem os_mem_size config os mem size [unit: M, default: 128]" - echo " -h help information" - echo -e "Available sensors: imx327 imx335 imx458" - echo -e "for example: ./load3516av300 -i -sensor0 imx335 -sensor1 imx335\n" -} - -calc_mmz_info() -{ - mmz_start=`echo "$mem_start $os_mem_size" | - awk 'BEGIN { temp = 0; } - { - temp = $1/1024/1024 + $2; - } - END { printf("0x%x00000\n", temp); }'` - - mmz_size=`echo "$mem_total $os_mem_size" | - awk 'BEGIN { temp = 0; } - { - temp = $1 - $2; - } - END { printf("%dM\n", temp); }'` - echo "mmz_start: $mmz_start, mmz_size: $mmz_size" -} - -######################parse arg################################### -b_arg_sensor0=0 -b_arg_sensor1=0 -b_arg_yuv_type0=0 -b_arg_insmod=0 -b_arg_remove=0 -b_arg_restore=0 -b_arg_total_mem=0 -b_arg_os_mem=0 - -for arg in $@ -do - if [ $b_arg_sensor0 -eq 1 ] ; then - b_arg_sensor0=0; - SNS_TYPE0=$arg; - fi - if [ $b_arg_sensor1 -eq 1 ] ; then - b_arg_sensor1=0; - SNS_TYPE1=$arg; - fi - if [ $b_arg_total_mem -eq 1 ]; then - b_arg_total_mem=0; - mem_total=$arg; - - if [ -z $mem_total ]; then - echo "[error] mem_total is null" - exit; - fi - fi - - if [ $b_arg_os_mem -eq 1 ] ; then - b_arg_os_mem=0; - os_mem_size=$arg; - - if [ -z $os_mem_size ]; then - echo "[error] os_mem_size is null" - exit; - fi - fi - - if [ $b_arg_yuv_type0 -eq 1 ] ; then - b_arg_yuv_type0=0; - YUV_TYPE0=$arg; - fi - - case $arg in - "-i") - b_arg_insmod=1; - ;; - "-r") - b_arg_remove=1; - ;; - "-a") - b_arg_insmod=1; - b_arg_remove=1; - ;; - "-h") - load_usage; - ;; - "-sensor0") - b_arg_sensor0=1; - ;; - "-sensor") - b_arg_sensor0=1; - ;; - "-sensor1") - b_arg_sensor1=1; - ;; - "-osmem") - b_arg_os_mem=1; - ;; - "-yuv0") - b_arg_yuv_type0=1; - ;; - "-total") - b_arg_total_mem=1; - ;; - "-restore") - b_arg_restore=1; - ;; - esac -done -#######################parse arg end######################## -if [ $os_mem_size -ge $mem_total ] ; then - echo "[err] os_mem[$os_mem_size], over total_mem[$mem_total]" - exit; -fi - -calc_mmz_info; - -#######################Action############################### - -if [ $# -lt 1 ]; then - load_usage; - exit 0; -fi - - -if [ $b_arg_remove -eq 1 ]; then - remove_ko; -fi - -if [ $b_arg_insmod -eq 1 ]; then - insert_ko; -fi - -if [ $b_arg_restore -eq 1 ]; then - sys_restore; -fi - diff --git a/general/package/hisilicon-osdrv-hi3516cv500/files/script/load3516cv500 b/general/package/hisilicon-osdrv-hi3516cv500/files/script/load3516cv500 deleted file mode 100755 index 89387476..00000000 --- a/general/package/hisilicon-osdrv-hi3516cv500/files/script/load3516cv500 +++ /dev/null @@ -1,325 +0,0 @@ -#!/bin/sh -# Useage: ./load3516cv500 [ -r|-i|-a ] [ sensor ] -# -r : rmmod all modules -# -i : insmod all modules -# -a : rmmod all moules and then insmod them -# e.g: RAW: ./load3516cv500 -i -sensor0 imx327 -sensor1 imx327 -# e.g: BT1120/DC : ./load3516cv500 -i -sensor0 imx327 -sensor1 imx327 -osmem 64 -yuv0 1 -# e.g: BT656 : ./load3516cv500 -i -sensor0 imx327 -sensor1 imx327 -osmem 64 -yuv0 2 - -####################Variables Definition########################## - - -SNS_TYPE0=imx327; # sensor type -SNS_TYPE1=NULL; # sensor type -YUV_TYPE0=0; # 0 -- raw, 1 -- bt1120/DC, 2 --bt656 -CHIP_TYPE=hi3516cv500; # chip type - - -#DDR start:0x80000000, kernel start:0x80000000, OS(64M); MMZ start:0x84000000 -mem_total=256 # 256M, total mem -mem_start=0x80000000 # phy mem start -os_mem_size=64 # 64M, os mem -mmz_start=0x84000000; # mmz start addr -mmz_size=192M; # 192M, mmz size -################################################################## - -report_error() -{ - echo "******* Error: There's something wrong, please check! *****" - exit 1 -} - -insert_audio() -{ - insmod hi3516cv500_aio.ko - insmod hi3516cv500_ai.ko - insmod hi3516cv500_ao.ko - insmod hi3516cv500_aenc.ko - insmod hi3516cv500_adec.ko - insmod hi3516cv500_acodec.ko -# insmod extdrv/hi_tlv320aic31.ko - echo "insert audio" -} - -remove_audio() -{ - rmmod hi3516cv500_acodec -# rmmod hi_tlv320aic31.ko - rmmod hi3516cv500_adec - rmmod hi3516cv500_aenc - rmmod hi3516cv500_ao - rmmod hi3516cv500_ai - rmmod hi3516cv500_aio - - echo "remove audio" -} - -insert_isp() -{ - insmod hi3516cv500_isp.ko -} - -insert_gyro() -{ - insmod extdrv/hi_spi.ko - insmod hi3516cv500_gyrodis.ko - insmod hi3516cv500_motionfusion.ko - insmod extdrv/motionsensor_mng.ko - insmod extdrv/motionsensor_chip.ko -} - -remove_gyro() -{ - rmmod motionsensor_chip - rmmod motionsensor_mng - rmmod hi3516cv500_motionfusion - rmmod hi3516cv500_gyrodis - rmmod hi_spi -} - -insert_ko() -{ - # driver load - insmod hi_osal.ko anony=1 mmz_allocator=hisi mmz=anonymous,0,$mmz_start,$mmz_size || report_error - # sys config - insmod sys_config.ko chip=$CHIP_TYPE sensors=sns0=$SNS_TYPE0,sns1=$SNS_TYPE1, g_cmos_yuv_flag=$YUV_TYPE0 - -# insmod hi_tzasc.ko - insmod hi3516cv500_base.ko - insmod hi3516cv500_sys.ko - insmod hi3516cv500_tde.ko - insmod hi3516cv500_rgn.ko - insmod hi3516cv500_gdc.ko - insmod hi3516cv500_vgs.ko - insmod hi3516cv500_dis.ko - insmod hi3516cv500_vi.ko - insert_isp; - insmod hi3516cv500_vpss.ko - insmod hi3516cv500_vo.ko - insmod hifb.ko video="hifb:vram0_size:16200" # default fb0:1080p - - insmod hi3516cv500_chnl.ko - insmod hi3516cv500_vedu.ko - insmod hi3516cv500_rc.ko - insmod hi3516cv500_venc.ko - insmod hi3516cv500_h264e.ko - insmod hi3516cv500_h265e.ko - insmod hi3516cv500_jpege.ko - - - insmod hi3516cv500_ive.ko save_power=1 -# insmod hi_ipcm.ko - insmod hi3516cv500_nnie.ko nnie_save_power=1 nnie_max_tskbuf_num=32 - insmod extdrv/hi_pwm.ko - insmod extdrv/hi_piris.ko - insmod extdrv/hi_sensor_i2c.ko - insmod extdrv/hi_sensor_spi.ko -# insmod extdrv/hi_sil9136.ko norm=12 #1080P@30fps for umap7p -# insmod extdrv/mpu_bosch.ko - - insert_audio - - insmod hi_mipi_rx.ko -# insmod hi_mipi_tx.ko -# insmod hi_user.ko - -# insert_gyro -} - -remove_ko() -{ -# rmmod_gyro -# rmmod hi_user - remove_audio -# rmmod hi_mipi_tx - rmmod hi_mipi_rx - #rmmod hi_sil9136 &> /dev/null - rmmod hi_piris - rmmod hi_pwm - - rmmod hi3516cv500_nnie nnie_save_power=1 nnie_max_tskbuf_num=32 -# rmmod hi_ipcm - rmmod hi3516cv500_ive - rmmod hi3516cv500_rc - rmmod hi3516cv500_jpege - rmmod hi3516cv500_h264e - rmmod hi3516cv500_h265e - rmmod hi3516cv500_venc - rmmod hi3516cv500_vedu - rmmod hi3516cv500_chnl - rmmod hifb - rmmod hi3516cv500_vo - rmmod hi3516cv500_vpss - rmmod hi3516cv500_isp - rmmod hi3516cv500_vi - rmmod hi3516cv500_gdc - rmmod hi3516cv500_dis - rmmod hi3516cv500_vgs - rmmod hi3516cv500_rgn - rmmod hi3516cv500_tde - - rmmod hi_sensor_i2c &> /dev/null - rmmod hi_sensor_spi &> /dev/null - -# rmmod mpu_bosch - rmmod hi3516cv500_sys - rmmod hi3516cv500_base -# rmmod hi_tzasc - rmmod sys_config - rmmod hi_osal -} - -sys_restore() -{ - #################################################### - clkcfg_hi3516cv500.sh > /dev/null - - # system configuration - sysctl_hi3516cv500.sh # > /dev/null - sns_config; -} - -load_usage() -{ - echo "Usage: ./load3516cv500 [-option] [sensor0]" - echo "options:" - echo " -i insert modules" - echo " -r remove modules" - echo " -a remove modules first, then insert modules" - echo " -sensor sensor_name config sensor type [default: imx327]" - echo " -total mem_size config total mem size [unit: M, default: 512]" - echo " -osmem os_mem_size config os mem size [unit: M, default: 128]" - echo " -h help information" - echo -e "Available sensors: imx327" - echo -e "for example: ./load3516cv500 -i -sensor0 imx327 -sensor1 imx327\n" -} - -calc_mmz_info() -{ - mmz_start=`echo "$mem_start $os_mem_size" | - awk 'BEGIN { temp = 0; } - { - temp = $1/1024/1024 + $2; - } - END { printf("0x%x00000\n", temp); }'` - - mmz_size=`echo "$mem_total $os_mem_size" | - awk 'BEGIN { temp = 0; } - { - temp = $1 - $2; - } - END { printf("%dM\n", temp); }'` - echo "mmz_start: $mmz_start, mmz_size: $mmz_size" -} - -######################parse arg################################### -b_arg_sensor0=0 -b_arg_sensor1=0 -b_arg_yuv_type0=0 -b_arg_insmod=0 -b_arg_remove=0 -b_arg_restore=0 -b_arg_total_mem=0 -b_arg_os_mem=0 - -for arg in $@ -do - if [ $b_arg_sensor0 -eq 1 ] ; then - b_arg_sensor0=0; - SNS_TYPE0=$arg; - fi - if [ $b_arg_sensor1 -eq 1 ] ; then - b_arg_sensor1=0; - SNS_TYPE1=$arg; - fi - if [ $b_arg_total_mem -eq 1 ]; then - b_arg_total_mem=0; - mem_total=$arg; - - if [ -z $mem_total ]; then - echo "[error] mem_total is null" - exit; - fi - fi - - if [ $b_arg_os_mem -eq 1 ] ; then - b_arg_os_mem=0; - os_mem_size=$arg; - - if [ -z $os_mem_size ]; then - echo "[error] os_mem_size is null" - exit; - fi - fi - - if [ $b_arg_yuv_type0 -eq 1 ] ; then - b_arg_yuv_type0=0; - YUV_TYPE0=$arg; - fi - - case $arg in - "-i") - b_arg_insmod=1; - ;; - "-r") - b_arg_remove=1; - ;; - "-a") - b_arg_insmod=1; - b_arg_remove=1; - ;; - "-h") - load_usage; - ;; - "-sensor0") - b_arg_sensor0=1; - ;; - "-sensor") - b_arg_sensor0=1; - ;; - "-sensor1") - b_arg_sensor1=1; - ;; - "-osmem") - b_arg_os_mem=1; - ;; - "-yuv0") - b_arg_yuv_type0=1; - ;; - "-total") - b_arg_total_mem=1; - ;; - "-restore") - b_arg_restore=1; - ;; - esac -done -#######################parse arg end######################## -if [ $os_mem_size -ge $mem_total ] ; then - echo "[err] os_mem[$os_mem_size], over total_mem[$mem_total]" - exit; -fi - -calc_mmz_info; - -#######################Action############################### - -if [ $# -lt 1 ]; then - load_usage; - exit 0; -fi - - -if [ $b_arg_remove -eq 1 ]; then - remove_ko; -fi - -if [ $b_arg_insmod -eq 1 ]; then - insert_ko; -fi - -if [ $b_arg_restore -eq 1 ]; then - sys_restore; -fi - diff --git a/general/package/hisilicon-osdrv-hi3516cv500/files/script/load3516dv300 b/general/package/hisilicon-osdrv-hi3516cv500/files/script/load3516dv300 deleted file mode 100755 index ff1f09b7..00000000 --- a/general/package/hisilicon-osdrv-hi3516cv500/files/script/load3516dv300 +++ /dev/null @@ -1,335 +0,0 @@ -#!/bin/sh -# Useage: ./load3516dv300 [ -r|-i|-a ] [ sensor0~1 ] -# -r : rmmod all modules -# -i : insmod all modules -# -a : rmmod all moules and then insmod them -# e.g: RAW: ./load3516dv300 -i -sensor0 imx335 -sensor1 imx335 -# e.g: BT1120/DC : ./load3516dv300 -i -sensor0 imx327 -sensor1 imx327 -osmem 128 -yuv0 1 -# e.g: BT656 : ./load3516dv300 -i -sensor0 imx327 -sensor1 imx327 -osmem 128 -yuv0 2 - -####################Variables Definition########################## - -SNS_TYPE0=imx335; # sensor type -SNS_TYPE1=NULL; # sensor type -YUV_TYPE0=0; # 0 -- raw, 1 -- bt1120/DC, 2 --bt656 -CHIP_TYPE=hi3516dv300; # chip type -#DDR start:0x80000000, kernel start:0x80000000, OS(128M); MMZ start:0x88000000 -mem_total=512 # 512M, total mem -mem_start=0x80000000 # phy mem start -os_mem_size=128 # 128M, os mem -mmz_start=0x88000000; # mmz start addr -mmz_size=384M; # 384M, mmz size -################################################################## - -report_error() -{ - echo "******* Error: There's something wrong, please check! *****" - exit 1 -} - -insert_audio() -{ - insmod hi3516cv500_aio.ko - insmod hi3516cv500_ai.ko - insmod hi3516cv500_ao.ko - insmod hi3516cv500_aenc.ko - insmod hi3516cv500_adec.ko - insmod hi3516cv500_acodec.ko -# insmod extdrv/hi_tlv320aic31.ko - echo "insert audio" -} - -remove_audio() -{ - rmmod hi3516cv500_acodec -# rmmod hi_tlv320aic31.ko - rmmod hi3516cv500_adec - rmmod hi3516cv500_aenc - rmmod hi3516cv500_ao - rmmod hi3516cv500_ai - rmmod hi3516cv500_aio - - echo "remove audio" -} - -insert_isp() -{ - insmod hi3516cv500_isp.ko -} - -insert_gyro() -{ - insmod extdrv/hi_spi.ko - insmod hi3516cv500_gyrodis.ko - insmod hi3516cv500_motionfusion.ko - insmod extdrv/motionsensor_mng.ko - insmod extdrv/motionsensor_chip.ko -} - -remove_gyro() -{ - rmmod motionsensor_chip - rmmod motionsensor_mng - rmmod hi3516cv500_motionfusion - rmmod hi3516cv500_gyrodis - rmmod hi_spi -} - -insert_ko() -{ - # driver load - insmod hi_osal.ko anony=1 mmz_allocator=hisi mmz=anonymous,0,$mmz_start,$mmz_size || report_error - - # sys config - insmod sys_config.ko chip=$CHIP_TYPE sensors=sns0=$SNS_TYPE0,sns1=$SNS_TYPE1, g_cmos_yuv_flag=$YUV_TYPE0 -# insmod hi_tzasc.ko - insmod hi3516cv500_base.ko - insmod hi3516cv500_sys.ko - insmod hi3516cv500_tde.ko - insmod hi3516cv500_rgn.ko - insmod hi3516cv500_gdc.ko - insmod hi3516cv500_vgs.ko - insmod hi3516cv500_dis.ko - insmod hi3516cv500_vi.ko - insert_isp; - insmod hi3516cv500_vpss.ko - insmod hi3516cv500_vo.ko - insmod hifb.ko video="hifb:vram0_size:16200" # default fb0:1080p - - insmod hi3516cv500_chnl.ko - insmod hi3516cv500_vedu.ko - insmod hi3516cv500_rc.ko - insmod hi3516cv500_venc.ko - insmod hi3516cv500_h264e.ko - insmod hi3516cv500_h265e.ko - insmod hi3516cv500_jpege.ko - insmod hi3516cv500_jpegd.ko - insmod hi3516cv500_vfmw.ko - insmod hi3516cv500_vdec.ko - - insmod hi3516cv500_ive.ko save_power=1 -# insmod hi_ipcm.ko -# nnie_max_tskbuf_num=64 - insmod hi3516cv500_nnie.ko nnie_save_power=1 nnie_max_tskbuf_num=32 - insmod extdrv/hi_pwm.ko - insmod extdrv/hi_piris.ko - insmod extdrv/hi_sensor_i2c.ko - insmod extdrv/hi_sensor_spi.ko -# insmod extdrv/hi_sil9136.ko norm=12 #1080P@30fps for umap7p -# insmod extdrv/mpu_bosch.ko -# insmod extdrv/hi_ssp_st7789.ko -# insmod extdrv/hi_ssp_ota5182.ko -# insmod extdrv/hi_serdes.ko - insmod hi3516cv500_hdmi.ko - - insert_audio - - insmod hi_mipi_rx.ko -# insmod hi_mipi_tx.ko -# insmod hi_user.ko - -# insert_gyro -} - -remove_ko() -{ -# rmmod_gyro -# rmmod hi_user - remove_audio -# rmmod hi_mipi_tx - rmmod hi_mipi_rx -# rmmod hi_serdes -# rmmod hi_sil9136 &> /dev/null -# rmmod hi_ssp_ota5182 -# rmmod hi_ssp_st7789 - rmmod hi_piris - rmmod hi_pwm - rmmod hi3516cv500_nnie -# rmmod hi_ipcm - rmmod hi3516cv500_ive - rmmod hi3516cv500_jpegd - rmmod hi3516cv500_vfmw - rmmod hi3516cv500_vdec - rmmod hi3516cv500_rc - rmmod hi3516cv500_jpege - rmmod hi3516cv500_h264e - rmmod hi3516cv500_h265e - rmmod hi3516cv500_venc - rmmod hi3516cv500_vedu - rmmod hi3516cv500_chnl - rmmod hifb - rmmod hi3516cv500_vo - rmmod hi3516cv500_vpss - rmmod hi3516cv500_isp - rmmod hi3516cv500_vi - rmmod hi3516cv500_gdc - rmmod hi3516cv500_dis - rmmod hi3516cv500_vgs - rmmod hi3516cv500_rgn - rmmod hi3516cv500_tde - rmmod hi3516cv500_hdmi - - rmmod hi_sensor_i2c &> /dev/null - rmmod hi_sensor_spi &> /dev/null - -# rmmod mpu_bosch - rmmod hi3516cv500_sys - rmmod hi3516cv500_base -# rmmod hi_tzasc - rmmod sys_config - rmmod hi_osal -} - -sys_restore() -{ - #################################################### - clkcfg_hi3516cv500.sh > /dev/null - - # system configuration - sysctl_hi3516cv500.sh # > /dev/null - sns_config; -} - -load_usage() -{ - echo "Usage: ./load3516dv300 [-option] [sensor0~1]" - echo "options:" - echo " -i insert modules" - echo " -r remove modules" - echo " -a remove modules first, then insert modules" - echo " -sensor sensor_name config sensor type [default: imx335]" - echo " -total mem_size config total mem size [unit: M, default: 512]" - echo " -osmem os_mem_size config os mem size [unit: M, default: 128]" - echo " -h help information" - echo -e "Available sensors: imx327 imx335 os05a imx307" - echo -e "for example: ./load3516dv300 -i -sensor0 imx335 -sensor1 imx335\n" -} - -calc_mmz_info() -{ - mmz_start=`echo "$mem_start $os_mem_size" | - awk 'BEGIN { temp = 0; } - { - temp = $1/1024/1024 + $2; - } - END { printf("0x%x00000\n", temp); }'` - - mmz_size=`echo "$mem_total $os_mem_size" | - awk 'BEGIN { temp = 0; } - { - temp = $1 - $2; - } - END { printf("%dM\n", temp); }'` - echo "mmz_start: $mmz_start, mmz_size: $mmz_size" -} - -######################parse arg################################### -b_arg_sensor0=0 -b_arg_sensor1=0 -b_arg_yuv_type0=0 -b_arg_insmod=0 -b_arg_remove=0 -b_arg_restore=0 -b_arg_total_mem=0 -b_arg_os_mem=0 - -for arg in $@ -do - if [ $b_arg_sensor0 -eq 1 ] ; then - b_arg_sensor0=0; - SNS_TYPE0=$arg; - fi - if [ $b_arg_sensor1 -eq 1 ] ; then - b_arg_sensor1=0; - SNS_TYPE1=$arg; - fi - if [ $b_arg_total_mem -eq 1 ]; then - b_arg_total_mem=0; - mem_total=$arg; - - if [ -z $mem_total ]; then - echo "[error] mem_total is null" - exit; - fi - fi - - if [ $b_arg_os_mem -eq 1 ] ; then - b_arg_os_mem=0; - os_mem_size=$arg; - - if [ -z $os_mem_size ]; then - echo "[error] os_mem_size is null" - exit; - fi - fi - - if [ $b_arg_yuv_type0 -eq 1 ] ; then - b_arg_yuv_type0=0; - YUV_TYPE0=$arg; - fi - - case $arg in - "-i") - b_arg_insmod=1; - ;; - "-r") - b_arg_remove=1; - ;; - "-a") - b_arg_insmod=1; - b_arg_remove=1; - ;; - "-h") - load_usage; - ;; - "-sensor0") - b_arg_sensor0=1; - ;; - "-sensor") - b_arg_sensor0=1; - ;; - "-sensor1") - b_arg_sensor1=1; - ;; - "-osmem") - b_arg_os_mem=1; - ;; - "-yuv0") - b_arg_yuv_type0=1; - ;; - "-total") - b_arg_total_mem=1; - ;; - "-restore") - b_arg_restore=1; - ;; - esac -done -#######################parse arg end######################## -if [ $os_mem_size -ge $mem_total ] ; then - echo "[err] os_mem[$os_mem_size], over total_mem[$mem_total]" - exit; -fi - -calc_mmz_info; - -#######################Action############################### - -if [ $# -lt 1 ]; then - load_usage; - exit 0; -fi - - -if [ $b_arg_remove -eq 1 ]; then - remove_ko; -fi - -if [ $b_arg_insmod -eq 1 ]; then - insert_ko; -fi - -if [ $b_arg_restore -eq 1 ]; then - sys_restore; -fi - diff --git a/general/package/hisilicon-osdrv-hi3516cv500/files/script/load_hisilicon b/general/package/hisilicon-osdrv-hi3516cv500/files/script/load_hisilicon new file mode 100755 index 00000000..b7364888 --- /dev/null +++ b/general/package/hisilicon-osdrv-hi3516cv500/files/script/load_hisilicon @@ -0,0 +1,356 @@ +#!/bin/sh +# +# This is part of OpenIPC.org project | 2022.01.19 +# + +# Board +board=demo + +# SoC detect +chipid=$(ipcinfo --chip_id) + +# Memory config +mem_start=0x80000000 # phy mem start + +mem_total=$(fw_printenv -n totalmem | tr -d 'M') +mem_total=${mem_total:=64} + +os_mem_size=$(fw_printenv -n osmem | tr -d 'M') +os_mem_size=${os_mem_size:=32} + +SNS_TYPE0=imx327 # sensor type +SNS_TYPE1=NULL # sensor type +YUV_TYPE0=0 # 0 -- raw, 1 -- bt1120/DC, 2 --bt656 + +report_error() { + echo "******* Error: There's something wrong, please check! *****" + exit 1 +} + +insert_osal() { + MMZ=$(awk -F '=' '$1=="mmz"{print $2}' RS=" " /proc/cmdline) + if [ -z "$MMZ" ]; then + insmod hi_osal.ko anony=1 mmz_allocator=hisi mmz=anonymous,0,$mmz_start,$mmz_size || report_error + else + insmod cma_osal.ko anony=1 mmz_allocator=cma mmz=$MMZ || report_error + fi +} + +insert_detect() { + cd /lib/modules/4.9.37/hisilicon + insmod sys_config.ko chip=${chipid} sensors=unknown g_cmos_yuv_flag=$YUV_TYPE0 board=${board} + insert_osal + insmod hi3516ev200_base.ko + insmod hi3516ev200_isp.ko + insmod hi_sensor_i2c.ko + insmod hi_sensor_spi.ko +} + +remove_detect() { + rmmod hi_sensor_spi + rmmod hi_sensor_i2c + rmmod hi3516ev200_isp + rmmod hi3516ev200_base + rmmod hi_osal &> /dev/null + rmmod cma_osal &> /dev/null + rmmod sys_config +} + +insert_audio() { + insmod hi3516cv500_aio.ko + insmod hi3516cv500_ai.ko + insmod hi3516cv500_ao.ko + insmod hi3516cv500_aenc.ko + insmod hi3516cv500_adec.ko + insmod hi3516cv500_acodec.ko + # insmod extdrv/hi_tlv320aic31.ko + echo "insert audio" +} + +remove_audio() { + rmmod hi3516cv500_acodec + # rmmod hi_tlv320aic31.ko + rmmod hi3516cv500_adec + rmmod hi3516cv500_aenc + rmmod hi3516cv500_ao + rmmod hi3516cv500_ai + rmmod hi3516cv500_aio + + echo "remove audio" +} + +insert_isp() { + insmod hi3516cv500_isp.ko +} + +insert_gyro() { + insmod extdrv/hi_spi.ko + insmod hi3516cv500_gyrodis.ko + insmod hi3516cv500_motionfusion.ko + insmod extdrv/motionsensor_mng.ko + insmod extdrv/motionsensor_chip.ko +} + +remove_gyro() { + rmmod motionsensor_chip + rmmod motionsensor_mng + rmmod hi3516cv500_motionfusion + rmmod hi3516cv500_gyrodis + rmmod hi_spi +} + +insert_ko() { + # driver load + insert_osal + # sys config + insmod sys_config.ko chip=${chipid} sensors=sns0=$SNS_TYPE0,sns1=$SNS_TYPE1, g_cmos_yuv_flag=$YUV_TYPE0 + + # insmod hi_tzasc.ko + insmod hi3516cv500_base.ko + insmod hi3516cv500_sys.ko + insmod hi3516cv500_tde.ko + insmod hi3516cv500_rgn.ko + insmod hi3516cv500_gdc.ko + # insmod hi3516cv500_vgs.ko + insmod hi3516cv500_dis.ko + insmod hi3516cv500_vi.ko + insert_isp + insmod hi3516cv500_vpss.ko + # insmod hi3516cv500_vo.ko + # insmod hifb.ko video="hifb:vram0_size:16200" # default fb0:1080p + + insmod hi3516cv500_chnl.ko + insmod hi3516cv500_vedu.ko + insmod hi3516cv500_rc.ko + insmod hi3516cv500_venc.ko + insmod hi3516cv500_h264e.ko + insmod hi3516cv500_h265e.ko + insmod hi3516cv500_jpege.ko + + # insmod hi3516cv500_ive.ko save_power=1 + # insmod hi_ipcm.ko + # insmod hi3516cv500_nnie.ko nnie_save_power=1 nnie_max_tskbuf_num=32 + insmod hi_pwm.ko + insmod hi_piris.ko + insmod hi_sensor_i2c.ko + insmod hi_sensor_spi.ko + # insmod extdrv/hi_sil9136.ko norm=12 #1080P@30fps for umap7p + # insmod extdrv/mpu_bosch.ko + + insert_audio + + insmod hi_mipi_rx.ko + # insmod hi_mipi_tx.ko + # insmod hi_user.ko + + # insert_gyro +} + +remove_ko() { + # rmmod_gyro + # rmmod hi_user + remove_audio + # rmmod hi_mipi_tx + rmmod hi_mipi_rx + #rmmod hi_sil9136 &> /dev/null + rmmod hi_piris + rmmod hi_pwm + + # rmmod hi3516cv500_nnie nnie_save_power=1 nnie_max_tskbuf_num=32 + # rmmod hi_ipcm + # rmmod hi3516cv500_ive + rmmod hi3516cv500_rc + rmmod hi3516cv500_jpege + rmmod hi3516cv500_h264e + rmmod hi3516cv500_h265e + rmmod hi3516cv500_venc + rmmod hi3516cv500_vedu + rmmod hi3516cv500_chnl + # rmmod hifb + # rmmod hi3516cv500_vo + rmmod hi3516cv500_vpss + rmmod hi3516cv500_isp + rmmod hi3516cv500_vi + rmmod hi3516cv500_gdc + rmmod hi3516cv500_dis + rmmod hi3516cv500_vgs + rmmod hi3516cv500_rgn + rmmod hi3516cv500_tde + + rmmod hi_sensor_i2c &>/dev/null + rmmod hi_sensor_spi &>/dev/null + + # rmmod mpu_bosch + rmmod hi3516cv500_sys + rmmod hi3516cv500_base + # rmmod hi_tzasc + rmmod sys_config + rmmod hi_osal +} + +sys_restore() { + sns_config +} + +load_usage() +{ + echo "Usage: ./load_hisilicon [-option] [sensor_name]" + echo "options:" + echo " -i insert modules" + echo " -r remove modules" + echo " -a remove modules first, then insert modules" + echo " -sensor sensor_name config sensor type [default: imx307]" + echo " -h help information" + echo -e "Available sensors: gc2053 imx307 imx327 imx335 os05a sc2231 sc2235 sc4236 sc3235 sc4236 etc." + echo -e "for example: ./load_hisilicon -i -sensor imx307 -osmem 32M -board demo -yuv0 0\n" +} + +calc_mmz_info() { + mmz_start=$(echo "$mem_start $os_mem_size" | + awk 'BEGIN { temp = 0; } + { + temp = $1/1024/1024 + $2; + } + END { printf("0x%x00000\n", temp); }') + + mmz_size=$(echo "$mem_total $os_mem_size" | + awk 'BEGIN { temp = 0; } + { + temp = $1 - $2; + } + END { printf("%dM\n", temp); }') + echo "mmz_start: $mmz_start, mmz_size: $mmz_size" +} + +######################parse arg################################### +b_arg_sensor0=0 +b_arg_sensor1=0 +b_arg_yuv_type0=0 +b_arg_insmod=0 +b_arg_remove=0 +b_arg_restore=0 +b_arg_total_mem=0 +b_arg_os_mem=0 + +for arg in $@; do + if [ $b_arg_sensor0 -eq 1 ]; then + b_arg_sensor0=0 + SNS_TYPE0=$arg + fi + if [ $b_arg_sensor1 -eq 1 ]; then + b_arg_sensor1=0 + SNS_TYPE1=$arg + fi + if [ $b_arg_total_mem -eq 1 ]; then + b_arg_total_mem=0 + mem_total=$arg + + if [ -z $mem_total ]; then + echo "[error] mem_total is null" + exit + fi + fi + + if [ $b_arg_os_mem -eq 1 ]; then + b_arg_os_mem=0 + os_mem_size=$arg + + if [ -z $os_mem_size ]; then + echo "[error] os_mem_size is null" + exit + fi + fi + + if [ $b_arg_yuv_type0 -eq 1 ]; then + b_arg_yuv_type0=0 + YUV_TYPE0=$arg + fi + + case $arg in + "-i") + b_arg_insmod=1 + ;; + "-r") + b_arg_remove=1 + ;; + "-a") + b_arg_insmod=1 + b_arg_remove=1 + ;; + "-h") + load_usage + ;; + "-sensor0") + b_arg_sensor0=1 + ;; + "-sensor") + b_arg_sensor0=1 + ;; + "-sensor1") + b_arg_sensor1=1 + ;; + "-osmem") + b_arg_os_mem=1 + ;; + "-yuv0") + b_arg_yuv_type0=1 + ;; + "-total") + b_arg_total_mem=1 + ;; + "-restore") + b_arg_restore=1 + ;; + esac +done +#######################parse arg end######################## +if [ $os_mem_size -ge $mem_total ]; then + echo "[err] os_mem[$os_mem_size], over total_mem[$mem_total]" + exit +fi + +calc_mmz_info + +#######################Action############################### + +if [ $# -lt 1 ]; then + load_usage + exit 0 +fi + +# Sensor config +# SENSOR=${SENSOR:=imx307} +# +if [ -n "$SENSOR" ]; then + logger -s -p daemon.info -t hisilicon "Manualy set SENSOR as ${SENSOR}" +else + if fw_printenv -n sensor >/dev/null; then + SENSOR_ENV=$(fw_printenv -n sensor) + export SENSOR=${SENSOR_ENV} + logger -s -p daemon.info -t hisilicon "Get data from environment and set SENSOR as ${SENSOR}" + else + insert_detect + SENSOR_DETECT=$(ipcinfo -s) + export SENSOR=${SENSOR_DETECT:=unknown} + remove_detect + logger -s -p daemon.info -t hisilicon "Get data from ipcinfo and set SENSOR as ${SENSOR}" + fw_setenv sensor $SENSOR && logger -s -p daemon.info -t hisilicon "Write detected ${SENSOR} to U-Boot ENV" + fi +fi + +if [ $b_arg_remove -eq 1 ]; then + remove_ko +fi + +if [ "$SENSOR" = "unknown" ]; then + exit 1 +else + if [ $b_arg_insmod -eq 1 ]; then + cd /lib/modules/4.9.37/hisilicon + insert_ko + fi +fi + +if [ $b_arg_restore -eq 1 ]; then + sys_restore +fi diff --git a/general/package/hisilicon-osdrv-hi3516cv500/hisilicon-osdrv-hi3516cv500.mk b/general/package/hisilicon-osdrv-hi3516cv500/hisilicon-osdrv-hi3516cv500.mk index 60777e72..7da3a9ea 100644 --- a/general/package/hisilicon-osdrv-hi3516cv500/hisilicon-osdrv-hi3516cv500.mk +++ b/general/package/hisilicon-osdrv-hi3516cv500/hisilicon-osdrv-hi3516cv500.mk @@ -21,38 +21,55 @@ define HISILICON_OSDRV_HI3516CV500_INSTALL_TARGET_CMDS $(INSTALL) -m 644 -t $(TARGET_DIR)/etc/sensors/60fps $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/sensor/config/60fps/*.ini $(INSTALL) -m 755 -d $(TARGET_DIR)/lib/modules/4.9.37/hisilicon - $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/*.ko - - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/cma_osal.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516ev200_acodec.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516ev200_adec.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516ev200_aenc.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516ev200_ai.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516ev200_aio.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516ev200_ao.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516ev200_base.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516ev200_chnl.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516ev200_h264e.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516ev200_h265e.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516ev200_isp.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516ev200_ive.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516ev200_jpege.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516ev200_rc.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516ev200_rgn.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516ev200_sys.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516ev200_tde.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516ev200_vedu.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516ev200_venc.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516ev200_vgs.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516ev200_vi.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516ev200_vpss.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516ev200_wdt.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi_mipi_rx.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi_osal.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi_pwm.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi_sensor_i2c.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi_sensor_spi.ko - # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/sys_config.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_acodec.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_adec.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_aenc.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_ai.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_aio.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_ao.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_base.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_chnl.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_dis.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_gdc.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_h264e.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_h265e.ko + # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_hdmi.ko + # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_ir.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_isp.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_ive.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_jpegd.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_jpege.ko + # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_nnie.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_rc.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_rgn.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_svprt.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_sys.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_tde.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_vdec.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_vedu.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_venc.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_vfmw.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_vgs.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_vi.ko + # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_vo.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_vpss.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi3516cv500_wdt.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi_cipher.ko + # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hifb.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi_mipi_rx.ko + # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi_mipi_tx.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi_osal.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi_piris.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi_pwm.ko + # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi_sample_ist.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi_sensor_i2c.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi_sensor_spi.ko + # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi_ssp_ota5182.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi_ssp_sony.ko + # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi_ssp_st7789.ko + # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi_tlv320aic31.ko + # $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/hi_user.ko + $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.9.37/hisilicon $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/kmod/sys_config.ko $(INSTALL) -m 755 -d $(TARGET_DIR)/usr/bin $(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/script/load* @@ -63,40 +80,44 @@ define HISILICON_OSDRV_HI3516CV500_INSTALL_TARGET_CMDS $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/sensors $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/sensor/*.so $(INSTALL) -m 755 -d $(TARGET_DIR)/usr/lib - $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/*.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libaaccomm.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libaacdec.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libaacenc.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libaacsbrdec.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libaacsbrenc.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libdnvqe.so + # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libhdmi.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/lib_hiacs.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/lib_hiae.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/lib_hiawb_natura.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/lib_hiawb.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/lib_hicalcflicker.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libhi_cipher.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/lib_hidehaze.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/lib_hidrc.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libhifisheyecalibrate.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/lib_hiir_auto.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/lib_hildci.so + # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libhive_AEC.so + # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libhive_AGC.so + # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libhive_ANR.so + # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libhive_common.so + # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libhive_EQ.so + # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libhive_HPF.so + # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libhive_record.so + # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libhive_RES_ext.so + # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libhive_RES.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libisp.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libive.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libmd.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libmpi.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libnnie.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libsecurec.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libsvpruntime.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libtde.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libupvqe.so + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libVoiceEngine.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libaaccomm.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libaacdec.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libaacenc.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libaacsbrdec.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libaacsbrenc.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libbcd.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libdnvqe.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/lib_hiae.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/lib_hiawb_natura.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/lib_hiawb.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libhi_cipher.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/lib_hidehaze.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/lib_hidrc.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/lib_hiir_auto.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/lib_hildci.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libhive_AEC.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libhive_AGC.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libhive_ANR.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libhive_common.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libhive_EQ.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libhive_HPF.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libhive_record.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libhive_RES.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libisp.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libive.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libivp.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libmd.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libmpi.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libsecurec.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libtde.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libupvqe.so - # $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(BR2_EXTERNAL_HISILICON_PATH)/package/hisilicon-osdrv-hi3516cv500/files/lib/libVoiceEngine.so endef $(eval $(generic-package)) diff --git a/general/package/hisilicon-osdrv-hi3516ev300/files/script/load_hisilicon b/general/package/hisilicon-osdrv-hi3516ev300/files/script/load_hisilicon index 290c9004..a9f18d68 100755 --- a/general/package/hisilicon-osdrv-hi3516ev300/files/script/load_hisilicon +++ b/general/package/hisilicon-osdrv-hi3516ev300/files/script/load_hisilicon @@ -1,6 +1,6 @@ #!/bin/sh # -# This is part of OpenIPC.org project | 2021.04.04 +# This is part of OpenIPC.org project | 2022.01.19 # # Board From 5c05cc5cde7ccd614644ac603ad246adef0345cf Mon Sep 17 00:00:00 2001 From: Dmitry Ermakov Date: Wed, 19 Jan 2022 15:00:37 +0300 Subject: [PATCH 14/20] Add watchdog module for Hi3516Cv200 --- .../files/kmod/wdt.ko | Bin 0 -> 10720 bytes .../files/script/load_hisilicon | 2 ++ .../hisilicon-osdrv-hi3516cv200.mk | 1 + 3 files changed, 3 insertions(+) create mode 100644 general/package/hisilicon-osdrv-hi3516cv200/files/kmod/wdt.ko diff --git a/general/package/hisilicon-osdrv-hi3516cv200/files/kmod/wdt.ko b/general/package/hisilicon-osdrv-hi3516cv200/files/kmod/wdt.ko new file mode 100644 index 0000000000000000000000000000000000000000..4c9b878de142ba1495274f29def0c37130eeea70 GIT binary patch literal 10720 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 Date: Sat, 22 Jan 2022 02:33:02 -0500 Subject: [PATCH 15/20] Update link to wiki (#162) --- docs/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/index.md b/docs/index.md index db86628a..0b654a9b 100644 --- a/docs/index.md +++ b/docs/index.md @@ -9,7 +9,7 @@ Historically, OpenIPC firmware supports SoC manufactured by HiSilicon, but as th the list of supported processors expands. Today, it also includes chips from Goke, SigmaStar, Xiongmai, and is expected to grow further. -More information about the project is available [in our wiki](https://github.com/OpenIPC/firmware/wiki) +More information about the project is available [in our wiki](https://github.com/OpenIPC/wiki) and [on the website](https://openipc.org/). ### Current development status * From 5f6e8d9c82338e346496cfa60f4fbb45b9daa8b2 Mon Sep 17 00:00:00 2001 From: Dmitry Ilyin Date: Sat, 22 Jan 2022 10:33:20 +0300 Subject: [PATCH 16/20] Shrink IMX291 LVDS config as example (#163) --- .../config/imx291_i2c_lvds_1080p_line.ini | 24 +------------------ 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/general/package/hisilicon-osdrv-hi3516cv300/files/sensor/config/imx291_i2c_lvds_1080p_line.ini b/general/package/hisilicon-osdrv-hi3516cv300/files/sensor/config/imx291_i2c_lvds_1080p_line.ini index 3a32e05b..2a50e182 100644 --- a/general/package/hisilicon-osdrv-hi3516cv300/files/sensor/config/imx291_i2c_lvds_1080p_line.ini +++ b/general/package/hisilicon-osdrv-hi3516cv300/files/sensor/config/imx291_i2c_lvds_1080p_line.ini @@ -17,15 +17,6 @@ dev_attr = 1 ;mipi_dev_attr_t = 0 ;lvds_dev_attr_t = 1 ;NULL =2 -[mipi] -;----------only for mipi_dev--------- -data_type =-1 ;raw data type: 8/10/12/14 bit - ;RAW_DATA_8BIT = 1 - ;RAW_DATA_10BIT = 2 - ;RAW_DATA_12BIT = 3 - ;RAW_DATA_14BIT = 4 -lane_id = -1|-1|-1|-1|-1|-1|-1|-1| ;lane_id: -1 - disable - [lvds] ;----------only for lvds_dev--------- img_size_w = 1920 ;oringnal sensor input image size W @@ -34,28 +25,15 @@ wdr_mode = 0 ;HI_WDR_MODE_NONE =0 ;HI_WDR_MODE_2F = 1 ;HI_WDR_MODE_3F = 2 ;HI_WDR_MODE_4F =3 -sync_mode = 1 ;LVDS_SYNC_MODE_SOL = 0 - ;LVDS_SYNC_MODE_SAV = 1 raw_data_type = 2 ;RAW_DATA_8BIT = 0 ;RAW_DATA_10BIT = 1 ;RAW_DATA_12BIT = 2 ;RAW_DATA_14BIT = 3 -data_endian = 1 ;LVDS_ENDIAN_LITTLE = 0 - ;LVDS_ENDIAN_BIG = 1 -sync_code_endian = 1 ;LVDS_ENDIAN_LITTLE = 0 - ;LVDS_ENDIAN_BIG = 1 -lane_id = 0|1|2|3|-1|-1|-1|-1| ;lane_id: -1 - disable -lvds_lane_num = -1 ;LVDS_LANE_NUM -wdr_vc_num = -1 ;WDR_VC_NUM -sync_code_num = -1 ;SYNC_CODE_NUM +lane_id = 0|1|2|3 sync_code_0 = 0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0 sync_code_1 = 0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0 sync_code_2 = 0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0 sync_code_3 = 0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0|0xab0|0xb60|0x800|0x9d0 -sync_code_4 = -1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1| -sync_code_5 = -1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1| -sync_code_6 = -1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1| -sync_code_7 = -1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1| [isp_image] Isp_x =0 From d0c9b6c580ddad9ceeabb8e426955cd36e75c44c Mon Sep 17 00:00:00 2001 From: Dmitry Ilyin Date: Sat, 22 Jan 2022 10:36:42 +0300 Subject: [PATCH 17/20] Fix hisi_gpio_scanner on CV300 platform (#164) * Fix hisi_gpio_scanner on CV300 platform --- general/package/hisi_gpio/src/hisi_gpio_scanner.c | 1 + 1 file changed, 1 insertion(+) diff --git a/general/package/hisi_gpio/src/hisi_gpio_scanner.c b/general/package/hisi_gpio/src/hisi_gpio_scanner.c index cbf39484..1a80c770 100644 --- a/general/package/hisi_gpio/src/hisi_gpio_scanner.c +++ b/general/package/hisi_gpio/src/hisi_gpio_scanner.c @@ -191,6 +191,7 @@ void get_chip_gpio_adress(unsigned long *Chip_Id, unsigned long *GPIO_Groups, case 0x3516C300: *GPIO_Groups = 9; *GPIO_Base = 0x12140000; + *GPIO_Offset = 0x1000; break; case 0x3516A300: *GPIO_Groups = 12; From e108d12a9fcb82ef39145ceddd3fffcba56b7c76 Mon Sep 17 00:00:00 2001 From: Dmitry Ilyin Date: Sat, 22 Jan 2022 11:10:47 +0300 Subject: [PATCH 18/20] Fix pqtools script to use ipcinfo --- general/overlay/usr/sbin/pqtools | 40 ++++++++++++-------------------- 1 file changed, 15 insertions(+), 25 deletions(-) diff --git a/general/overlay/usr/sbin/pqtools b/general/overlay/usr/sbin/pqtools index 9b9d183b..d3f2760d 100755 --- a/general/overlay/usr/sbin/pqtools +++ b/general/overlay/usr/sbin/pqtools @@ -6,20 +6,12 @@ set -e mpp=$(awk '/Version:/ {print $3,$4"]"}' /proc/umap/sys) || true -soc=$(ipctool --chip_id) +soc=$(ipcinfo --chip-id) - - -prepare() -{ +prepare() { case ${soc} in - hi3516av300|hi3516cv500|hi3516dv300) - echo -e "\n\e[1;31mSorry but the ${soc} is not supported at the moment...\e[0m\n" - exit 1 - ;; - - hi3516ev200|hi3516ev300|hi3516dv200|hi3518ev300) + hi3516ev200 | hi3516ev300 | hi3516dv200 | hi3518ev300) echo -e "\n\e[1;31mA supported processor with ${mpp} was found...\e[0m\n" ittb_url="https://raw.githubusercontent.com/widgetii/pqtools/master/hi3516ev300/ittb_ev300_V1.0.1.2.tgz" ittb_folder="ittb_ev300_V1.0.1.2" @@ -33,19 +25,17 @@ prepare() esac } - -download() - if [[ -d /tmp/${ittb_folder} ]]; then - echo -e "\n\e[1;31mA directory with utilities was found and the download is not needed...\e[0m\n" - echo -e "\n\e[1;31mWe run the utilities for sensor calibration...\e[0m\n" - cd /tmp/${ittb_folder} ; ./start.sh - else - echo -e "\n\e[1;31mDownloading the latest tools, please wait...\e[0m\n" - curl -s ${ittb_url} | gzip -d - | tar xvf - -C /tmp - echo -e "\n\e[1;31mWe run the utilities for sensor calibration...\e[0m\n" - cd /tmp/${ittb_folder} ; ./start.sh - fi - - +download() if [[ -d /tmp/${ittb_folder} ]]; then + echo -e "\n\e[1;31mA directory with utilities was found and the download is not needed...\e[0m\n" + echo -e "\n\e[1;31mWe run the utilities for sensor calibration...\e[0m\n" + cd /tmp/${ittb_folder} + ./start.sh +else + echo -e "\n\e[1;31mDownloading the latest tools, please wait...\e[0m\n" + curl -s ${ittb_url} | gzip -d - | tar xvf - -C /tmp + echo -e "\n\e[1;31mWe run the utilities for sensor calibration...\e[0m\n" + cd /tmp/${ittb_folder} + ./start.sh +fi prepare && download From c120c9ca11cbe833720dfd51e748c35ad7480090 Mon Sep 17 00:00:00 2001 From: p0isk Date: Sat, 22 Jan 2022 18:19:38 +0300 Subject: [PATCH 19/20] Add gpio profiles --- general/overlay/usr/sbin/gpio | 107 ++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100755 general/overlay/usr/sbin/gpio diff --git a/general/overlay/usr/sbin/gpio b/general/overlay/usr/sbin/gpio new file mode 100755 index 00000000..d3082f86 --- /dev/null +++ b/general/overlay/usr/sbin/gpio @@ -0,0 +1,107 @@ +#!/bin/sh + +soc=$(fw_printenv -n soc) || (>&2 echo "SOC not defined in U-Boot ENV"; exit 1) +vendor=$(fw_printenv -n vendor) || (>&2 echo "Vendor not defined in U-Boot ENV"; exit 1) +# devid=$(fw_printenv -n devid) || (>&2 echo "SOC not defined in U-Boot ENV"; exit 1) + +case ${vendor} in + anjoy) + case ${soc} in + ssc335|ssc337|ssc337de) + gpio="ircut1=78 ircut2=79 light=61" + ;; + esac + ;; + camhi|xin) + case ${soc} in + hi3516ev200|gk7205v200) + gpio="usb_ena=-9" + ;; + hi3516ev300|gk7205v300) + gpio="ircut1=10 ircut2=11 usb_ena=-7" + ;; + hi3518ev200) + gpio="ircut1=1 ircut2=2 light=48" + ;; + esac + ;; + herospeed|longsee|cantonk) + case ${soc} in + hi3516ev200|gk7205v200) + gpio="ircut1=12 ircut2=13 irctl=4 alm_in=15 alm_out=14" + ;; + hi3518ev200) + gpio="ircut1=64 ircut2=65" + ;; + hi3516av300) + gpio="ircut1=5 ircut2=6" + ;; + esac + ;; + jabsco) + case ${soc} in + hi3516ev200|gk7205v200) + gpio="ircut1=52 ircut2=53 irstatus=9" + ;; + esac + ;; + jvt) + case ${soc} in + hi3516cv200) + gpio="ircut1=64 ircut2=65 light=62" + ;; + hi3518ev200) + gpio="ircut1=64 ircut2=65 light=47" + ;; + esac + ;; + juan|sannce) + case ${soc} in + hi3518ev200) + gpio="ircut1=65 ircut2=64 irstatus=-62" + ;; + esac + ;; + tiandy) + case ${soc} in + hi3518ev200) + gpio="ircut1=78 ircut2=79 irctl=37" + ;; + esac + ;; + uniview) + case ${soc} in + hi3516ev300|gk7205v300) + gpio="ircut1=63 ircut2=67 reset=" + ;; + esac + ;; + xm) + case ${soc} in + hi3516ev200|gk7205v200) + gpio="ircut1=8 ircut=29 irstatus=15 irctl=16 alm_in=4,53 alm_out=55 eth_act=14 eth_sta=12 reset=0" + ;; + hi3516ev300|gk7205v300) + gpio="ircut1=10 ircut2=11 irstatus=66 irctl=52 alm_in=4,67 alm_out=65 eth_act=30 eth_sta=31 reset=0" + ;; + hi3516dv100) + gpio="ircut1=14 ircut2=15" + ;; + hi3516cv300) + gpio="ircut1=53 ircut2=54 irstatus=64 irctl=66 alm_in=55 alm_out=1 reset=2 usb_ena=63" + ;; + hi3518ev200) + gpio="ircut1=33 ircut2=34 alm_in=61 alm_out=35" + ;; + esac + ;; + zenotech|videopark) + case ${soc} in + hi3516ev300|gk7205v300) + gpio="ircut1=40 ircut2=41 irctl=65" + ;; + esac + ;; +esac + +echo ${gpio} From 2a778898a6257d9c2300df763fcd3fcb0933dc76 Mon Sep 17 00:00:00 2001 From: p0isk Date: Sat, 22 Jan 2022 18:46:05 +0300 Subject: [PATCH 20/20] Add gpio profiles --- general/overlay/usr/sbin/gpio | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/general/overlay/usr/sbin/gpio b/general/overlay/usr/sbin/gpio index d3082f86..03a5de5e 100755 --- a/general/overlay/usr/sbin/gpio +++ b/general/overlay/usr/sbin/gpio @@ -2,17 +2,17 @@ soc=$(fw_printenv -n soc) || (>&2 echo "SOC not defined in U-Boot ENV"; exit 1) vendor=$(fw_printenv -n vendor) || (>&2 echo "Vendor not defined in U-Boot ENV"; exit 1) -# devid=$(fw_printenv -n devid) || (>&2 echo "SOC not defined in U-Boot ENV"; exit 1) +# devid=$(fw_printenv -n devid) || (>&2 echo "Device ID not defined in U-Boot ENV"; exit 1) case ${vendor} in anjoy) case ${soc} in ssc335|ssc337|ssc337de) - gpio="ircut1=78 ircut2=79 light=61" - ;; + gpio="ircut1=78 ircut2=79 light=61" + ;; esac ;; - camhi|xin) + camhi|hichip|xin) case ${soc} in hi3516ev200|gk7205v200) gpio="usb_ena=-9"