mirror of https://github.com/OpenIPC/firmware.git
948 lines
26 KiB
Bash
Executable File
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-name)
|
|
|
|
# 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
|