firmware/general/package/hisilicon-osdrv-hi3519v101/files/script/load_hisilicon

948 lines
26 KiB
Bash
Executable File

#!/bin/sh
#
# This is part of OpenIPC.org project | 2022.01.07
#
#set -x
# SoC detect
chipid=$(ipcinfo --chip_id)
# MMZ 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}
# Sensor config
# SNS_TYPE=$(awk -F '=' '$1=="sensor"{print $2}' RS=" " /proc/cmdline)
SNS_TYPE0=$(fw_printenv -n sensor)
SNS_TYPE0=${SNS_TYPE0:=imx385}
SNS_TYPE1="NULL"
WORK_MODE="single_pipe"
report_error() {
echo "******* Error: There's something wrong, please check! *****"
exit 1
}
insert_osal() {
insmod hi_osal.ko mmz=anonymous,0,$mmz_start,$mmz_size anony=1 || report_error
}
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_ssp_sony.ko
insert_sns
}
remove_detect() {
rmmod -w hi_ssp_sony
rmmod -w hi_sensor_i2c
rmmod -w hi3519v101_isp
rmmod -w hi3519v101_sys
rmmod -w hi3519v101_base
rmmod -w hi_osal
}
insert_audio() {
insmod hi3519v101_aio.ko
insmod hi3519v101_ai.ko
insmod hi3519v101_ao.ko
insmod hi3519v101_aenc.ko
insmod hi3519v101_adec.ko
insmod hi_acodec.ko
#insmod hi_tlv320aic31.ko
}
remove_audio() {
rmmod -w hi_acodec
#rmmod -w hi_tlv320aic31
rmmod -w hi3519v101_adec
rmmod -w hi3519v101_aenc
rmmod -w hi3519v101_ao
rmmod -w hi3519v101_ai
rmmod -w hi3519v101_aio
}
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
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
#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
#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
}
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 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
}
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
#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
}
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
#drive capability...
devmem 0x12040998 32 0x150 #SPI0_3WIRE_CLK
devmem 0x1204099c 32 0x160 #SPI0_3WIRE_DATA
devmem 0x120409a4 32 0x160 #SPI0_3WIRE_CSN
}
#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() {
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
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
}
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() {
local tmp=0
local tmp1
local tmp2
if [ ${SNS_TYPE0} != "NULL" ]; then
case $SNS_TYPE0 in
imx226)
tmp=0x11
devmem 0x12010040 32 0x11 # sensor0 clk_en, 72MHz
# SDK config: IVE:396M, GDC:475M, VGS:500M, VEDU:600M, VPSS:300M
#imx226: viu0:600M,isp0:600M, viu1:300M,isp1:300M
devmem 0x1201004c 32 0x00094c23
devmem 0x12010054 32 0x00024041
spi0_4wire_pin_mux
insmod hi_ssp_sony.ko
;;
imx274)
tmp=0x11
devmem 0x12010040 32 0x11 # sensor0 clk_en, 72MHz
# SDK config: IVE:396M, GDC:475M, VGS:500M, VEDU:600M, VPSS:300M
#imx274:viu0: 600M,isp0:300M, viu1:300M,isp1:300M
devmem 0x1201004c 32 0x00094c23
devmem 0x12010054 32 0x0004041
spi0_4wire_pin_mux
insmod hi_ssp_sony.ko
;;
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
devmem 0x1201004c 32 0x00094c21
devmem 0x12010054 32 0x0004041
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 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 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 hi_ssp_sony.ko
;;
imx290)
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
;;
imx327_spi)
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 0x11 # sensor0 clk_en, 72MHz
devmem 0x12010040 32 0x18 # sensor0 clk_en, 37.125MHz
spi0_4wire_pin_mux
insmod hi_ssp_sony.ko
;;
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 hi_ssp_3wire.ko
;;
ov4689)
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 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
;;
imx385_spi_lvds)
tmp=0x18
devmem 0x12010040 32 0x18
devmem 0x12040190 32 0x2
devmem 0x1204018c 32 0x2
devmem 0x1204099c 32 0x120
devmem 0x12040998 32 0x120
spi0_4wire_pin_mux
insmod hi_ssp_sony.ko
;;
imx385_i2c_lvds)
tmp=0x16
# 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 0x16 # sensor0 clk_en, 74.125MHz
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 hi_ssp_sony.ko;
;;
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
devmem 0x1201004c 32 0x00094c23
devmem 0x12010054 32 0x0004041
devmem 0x12010040 32 0x14 # sensor0 clk_en, 24MHz
i2c0_pin_mux
;;
bt1120)
# 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 0x113c6200 32 0x0 #disable dehaze
devmem 0x113d1400 32 0x0 #disable acm
devmem 0x113c5200 32 0x0 #disable sharpen
#devmem 0x20670000 32 0x0;
;;
*)
echo "xxxx Invalid sensor type $SNS_TYPE0 xxxx"
report_error
;;
esac
fi
if [ ${SNS_TYPE1} != "NULL" ]; then
case $SNS_TYPE1 in
imx290)
tmp1=0x1800
tmp2=$((tmp + tmp1))
devmem 0x12010040 32 $tmp2 # sensor1 clk_en, 37.125MHz
i2c1_pin_mux
;;
ov4689)
tmp1=0x1400
tmp2=$((tmp + tmp1))
devmem 0x12010040 32 $tmp2 # sensor1 clk_en, 24MHz
i2c1_pin_mux
;;
os08a10)
tmp1=0x1400
tmp2=$((tmp + tmp1))
devmem 0x12010040 32 $tmp2 # sensor1 clk_en, 24MHz
i2c1_pin_mux
;;
bt1120)
devmem 0x114c6200 32 0x0 #disable dehaze
devmem 0x114d1400 32 0x0 #disable acm
devmem 0x114c5200 32 0x0 #disable sharpen
#devmem 0x20670000 32 0x0;
;;
*)
echo "xxxx Invalid sensor type $SNS_TYPE1 xxxx"
report_error
;;
esac
fi
if [ ${WORK_MODE} != "NULL" ]; then
case $WORK_MODE in
stitching)
devmem 0x12040184 32 0x1 # SENSOR0 HS from VI0 HS
devmem 0x12040188 32 0x1 # SENSOR0 VS from VI0 VS
devmem 0x12040010 32 0x1 # SENSOR1 HS from VI0 HS
devmem 0x12040014 32 0x1 # SENSOR1 VS from VI0 VS
;;
single_pipe)
devmem 0x12040184 32 0x1 # SENSOR0 HS from VI0 HS
devmem 0x12040188 32 0x1 # SENSOR0 VS from VI0 VS
devmem 0x12040010 32 0x2 # SENSOR1 HS from VI1 HS
devmem 0x12040014 32 0x2 # SENSOR1 VS from VI1 VS
;;
double_pipe)
tmp1=$((tmp << 8))
tmp2=$((tmp + tmp1))
devmem 0x12010040 32 $tmp2 # sensor0 clk + sensor1 clk
devmem 0x12040184 32 0x2 # SENSOR0 HS from VI1 HS
devmem 0x12040188 32 0x2 # SENSOR0 VS from VI1 VS
#devmem 0x12040010 32 0x1; # SENSOR1 HS from VI0 HS
#devmem 0x12040014 32 0x1; # SENSOR1 VS from VI0 VS
devmem 0x1201004c 32 0x00094c21 #double pipe,VI0,ISP0:300M,if inapposite,change it.
devmem 0x12010054 32 0x0004041 #double pipe,VI1,ISP1:300M
;;
*)
echo "xxxx Invalid work mode $WORK_MODE xxxx"
report_error
;;
esac
fi
}
remove_sns() {
rmmod -w hi_ssp_sony &>/dev/null
rmmod -w hi_sensor_spi &>/dev/null
}
insert_isp() {
case $SNS_TYPE0 in
imx117)
insmod hi3519v101_isp.ko update_pos=1 proc_param=30
;;
*)
insmod hi3519v101_isp.ko proc_param=30
;;
esac
}
vicap1_pwrdn() {
devmem 0x1201003c 32 0x333303ff
devmem 0x120a012c 32 0x3
devmem 0x120a012c 32 0x2
devmem 0x1201003c 32 0x120003ff
}
insert_ko() {
# sys config
sysconfig
# driver load
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
#insmod hi3519v101_tde.ko
insmod hi3519v101_region.ko
#insmod hi3519v101_fisheye.ko
#insmod hi3519v101_vgs.ko
insert_isp
insmod hi3519v101_viu.ko detect_err_frame=10 delay_line=500
insmod hi3519v101_vpss.ko
#insmod hi3519v101_vou.ko
#insmod hi3519v101_vou.ko detectCycle=0 #close dac detect
#insmod hi3519v101_vou.ko transparentTransmit=1 #enable transparentTransmit
#insmod hifb.ko video="hifb:vram0_size:1620" # default pal
insmod hi3519v101_rc.ko
insmod hi3519v101_venc.ko
insmod hi3519v101_chnl.ko
insmod hi3519v101_vedu.ko
insmod hi3519v101_h264e.ko
insmod hi3519v101_h265e.ko
insmod hi3519v101_jpege.ko
#insmod hi3519v101_ive.ko save_power=1
insmod hi3519v101_photo.ko
#
insmod hi_sensor_i2c.ko
insmod hi_pwm.ko
insmod hi_piris.ko
insert_audio
insmod hi_mipi.ko
#insmod hi_user.ko
insert_sns
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 ===="
}
remove_ko() {
remove_audio
remove_sns
#rmmod -w hi_user
rmmod -w hi_pwm
rmmod -w hi_piris
rmmod -w hi3519v101_photo
#rmmod -w hi3519v101_ive
rmmod -w hi3519v101_rc
rmmod -w hi3519v101_jpege
rmmod -w hi3519v101_h264e
rmmod -w hi3519v101_h265e
rmmod -w hi3519v101_vedu
rmmod -w hi3519v101_chnl
rmmod -w hi3519v101_venc
#rmmod -w hifb
#rmmod -w hi3519v101_vou
rmmod -w hi3519v101_vpss
rmmod -w hi3519v101_isp
rmmod -w hi3519v101_viu
rmmod -w hi_mipi
#rmmod -w hi3519v101_fisheye
#rmmod -w hi3519v101_vgs
rmmod -w hi3519v101_region
#rmmod -w hi3519v101_tde
rmmod -w hi_sensor_i2c &>/dev/null
rmmod -w hi_ssp_3wire.ko &>/dev/null
rmmod -w hi3519v101_sys
rmmod -w hi3519v101_base
rmmod -w hi_osal
}
sys_restore() {
####################################################
clkcfg.sh >/dev/null
# system configuration
sysctl.sh $b_arg_online # > /dev/null
insert_sns
}
load_usage() {
echo "Usage: ./load3519v101 [-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: imx274]"
echo " -osmem os_mem_size config os mem size [unit: M, default: 64]"
echo " -total_mem_size config total mem size [unit: M, default: 512]"
echo " -offline vi/vpss offline"
echo " -h help information"
echo -e "Available sensors: imx274, imx226, imx290, ov4689 ,os08a10"
echo -e "workmode: stitching,single_pipe,double_pipe"
echo -e "notes: osmem option can't be used when mmz zone partition is enable\n\n"
echo -e "for example online: ./load3519v101 -a -sensor0 ov4689 -sensor1 ov4689 -osmem 64 -total 512\n"
echo -e " offline: ./load3519v101 -a -sensor0 imx274 -osmem 64 -total 512 -offline\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_os_mem=0
b_arg_sensor0=0
b_arg_sensor1=0
b_arg_insmod=0
b_arg_remove=0
b_arg_online=1
b_arg_restore=0
b_arg_mode=0
b_arg_total_mem=0
for arg in $@; do
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
if [ $os_mem_size -ge $mem_total ]; then
echo "[err] os_mem[$os_mem_size], over total_mem[$mem_total]"
exit
fi
fi
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_mode -eq 1 ]; then
b_arg_mode=0
WORK_MODE=$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
;;
"-total")
b_arg_total_mem=1
;;
"-restore")
b_arg_restore=1
;;
"-offline")
b_arg_online=0
;;
"-workmode")
b_arg_mode=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 --short-sensor)
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/3.18.20/hisilicon
insert_ko;
fi
fi
if [ $b_arg_restore -eq 1 ]; then
sys_restore
fi