From cb3786dd1a83e8eccb1df2beae19ea4563a09bf1 Mon Sep 17 00:00:00 2001
From: "Igor Zalatov (from Citadel PC)" <flyrouter@gmail.com>
Date: Sun, 17 Oct 2021 18:16:54 +0300
Subject: [PATCH] Update Hisilicon scripts

---
 .../files/script/load_3516dv200               | 280 ++++++++++++++++++
 .../files/script/load_3518ev300               | 275 +++++++++++++++++
 2 files changed, 555 insertions(+)
 create mode 100644 general/package/hisilicon-osdrv-hi3516ev300/files/script/load_3516dv200
 create mode 100644 general/package/hisilicon-osdrv-hi3516ev300/files/script/load_3518ev300

diff --git a/general/package/hisilicon-osdrv-hi3516ev300/files/script/load_3516dv200 b/general/package/hisilicon-osdrv-hi3516ev300/files/script/load_3516dv200
new file mode 100644
index 00000000..0bad1651
--- /dev/null
+++ b/general/package/hisilicon-osdrv-hi3516ev300/files/script/load_3516dv200
@@ -0,0 +1,280 @@
+#!/bin/sh
+# Useage: ./load_hisilicon [ -r|-i|-a ] [ sensor ]
+#         -r : rmmod all modules
+#         -i : insmod all modules
+#    default : rmmod all moules and then insmod them
+# e.g: ./load_hisilicon -i -sensor0 imx307 -osmem 32M
+
+
+####################Variables Definition##########################
+
+
+SNS_TYPE0=imx307;           # sensor type
+YUV_TYPE0=0;                # 0 -- raw, 1 --DC, 2 --bt1120, 3 --bt656
+CHIP_TYPE=hi3516dv200;      # chip type
+BOARD=demo;
+
+#DDR start:0x40000000, kernel start:0x40000000,  OS(32M); MMZ start:0x42000000
+mem_total=512               # 512M, total mem
+mem_start=0x40000000        # phy mem start
+os_mem_size=32              # 32M, os mem
+mmz_start=0x42000000;       # mmz start addr
+mmz_size=480M;              # 480M, mmz size
+##################################################################
+
+report_error()
+{
+	echo "******* Error: There's something wrong, please check! *****"
+	exit 1
+}
+
+insert_audio()
+{
+	insmod hi3516ev200_aio.ko
+	insmod hi3516ev200_ai.ko
+	insmod hi3516ev200_ao.ko
+	insmod hi3516ev200_aenc.ko
+	insmod hi3516ev200_adec.ko
+	insmod hi3516ev200_acodec.ko
+#	insmod hi_tlv320aic31.ko
+	echo "insert audio"
+}
+
+remove_audio()
+{
+	rmmod hi3516ev200_acodec
+#	rmmod hi_tlv320aic31.ko
+	rmmod hi3516ev200_adec
+	rmmod hi3516ev200_aenc
+	rmmod hi3516ev200_ao
+	rmmod hi3516ev200_ai
+	rmmod hi3516ev200_aio
+
+	echo "remove audio"
+}
+
+insert_isp()
+{
+	insmod hi3516ev200_isp.ko
+}
+
+insert_sil9024()
+{
+	i2c_sel=2
+	if [ "$CHIP_TYPE" == "hi3516dv200" ];then
+		i2c_sel=1
+	fi
+
+	if [ "$BOARD" == "sck" ];then
+		insmod hi_sil9024.ko norm=12 i2c_num=$i2c_sel  #1080P@30fps
+	fi
+}
+
+insert_adv7179()
+{
+	i2c_sel=2
+	if [ "$CHIP_TYPE" == "hi3516dv200" ];then
+		i2c_sel=1
+	fi
+
+	if [ "$BOARD" == "sck" ];then
+		insmod hi_adv7179.ko norm_mode=0 i2c_num=$i2c_sel # norm_mode = 0:PAL, 1:NTSC
+	fi
+}
+
+insert_piris()
+{
+	if [ "$CHIP_TYPE" == "hi3516dv200" -a "$BOARD" == "demo" ];then
+		insmod hi_piris.ko
+	fi
+}
+insert_ko()
+{
+	insmod sys_config.ko chip=$CHIP_TYPE sensors=$SNS_TYPE0 g_cmos_yuv_flag=$YUV_TYPE0 board=$BOARD
+	insmod hi_osal.ko anony=1 mmz_allocator=hisi mmz=anonymous,0,$mmz_start,$mmz_size || report_error
+	insmod hi3516ev200_base.ko
+	insmod hi3516ev200_sys.ko
+#	insmod hi3516ev200_tde.ko
+	insmod hi3516ev200_rgn.ko
+	insmod hi3516ev200_vgs.ko
+	insmod hi3516ev200_vi.ko
+	insert_isp;
+	insmod hi3516ev200_vpss.ko
+	insmod hi3516ev200_vo.ko
+	insmod hifb.ko video="hifb:vram0_size:1620"     # default fb0:D1
+	insmod hi3516ev200_chnl.ko
+	insmod hi3516ev200_vedu.ko
+	insmod hi3516ev200_rc.ko
+	insmod hi3516ev200_venc.ko
+	insmod hi3516ev200_h264e.ko
+	insmod hi3516ev200_h265e.ko
+	insmod hi3516ev200_jpege.ko
+	insmod hi3516ev200_ive.ko save_power=0
+	insmod hi_pwm.ko
+	insmod hi_sensor_i2c.ko
+	insmod hi_sensor_spi.ko
+	insert_piris
+	insert_sil9024; # BT1120
+#	insert_adv7179; # BT656
+	insert_audio
+	insmod hi_mipi_rx.ko
+#	insmod hi_user.ko
+}
+
+remove_ko()
+{
+#	rmmod hi_user
+	remove_audio
+	rmmod hi_piris
+	rmmod hi_pwm
+	rmmod hi_mipi_rx
+	rmmod hi_sil9024 &> /dev/null
+#	rmmod hi_adv7179 &> /dev/null
+	rmmod hi3516ev200_ive
+	rmmod hi3516ev200_rc
+	rmmod hi3516ev200_jpege
+	rmmod hi3516ev200_h264e
+	rmmod hi3516ev200_h265e
+	rmmod hi3516ev200_venc
+	rmmod hi3516ev200_vedu
+	rmmod hi3516ev200_chnl
+	rmmod hifb
+	rmmod hi3516ev200_vo
+	rmmod hi3516ev200_vpss
+	rmmod hi3516ev200_isp
+	rmmod hi3516ev200_vi
+	rmmod hi3516ev200_vgs
+	rmmod hi3516ev200_rgn
+#	rmmod hi3516ev200_tde
+	rmmod hi_sensor_i2c &> /dev/null
+	rmmod hi_sensor_spi &> /dev/null
+	rmmod hi3516ev200_sys
+	rmmod hi3516ev200_base
+	rmmod hi_osal
+	rmmod sys_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_os_mem=0
+b_arg_board=0
+
+for arg in $@
+do
+	if [ $b_arg_sensor0 -eq 1 ] ; then
+		b_arg_sensor0=0;
+		SNS_TYPE0=$arg;
+	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
+
+	if [ $b_arg_board -eq 1 ] ; then
+		b_arg_board=0;
+		BOARD=$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;
+			;;
+		"-osmem")
+			b_arg_os_mem=1;
+			;;
+		"-yuv0")
+			b_arg_yuv_type0=1;
+			;;
+		"-board")
+			b_arg_board=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
+	cd /lib/modules/4.9.37/hisilicon
+	insert_ko;
+fi
diff --git a/general/package/hisilicon-osdrv-hi3516ev300/files/script/load_3518ev300 b/general/package/hisilicon-osdrv-hi3516ev300/files/script/load_3518ev300
new file mode 100644
index 00000000..244e99ec
--- /dev/null
+++ b/general/package/hisilicon-osdrv-hi3516ev300/files/script/load_3518ev300
@@ -0,0 +1,275 @@
+#!/bin/sh
+# Useage: ./load_hisilicon [ -r|-i|-a ] [ sensor ]
+#         -r : rmmod all modules
+#         -i : insmod all modules
+#    default : rmmod all moules and then insmod them
+# e.g: ./load_hisilicon -i -sensor0 imx307 -osmem 32M
+
+
+####################Variables Definition##########################
+
+
+SNS_TYPE0=imx307;           # sensor type
+YUV_TYPE0=0;                # 0 -- raw, 1 --DC, 2 --bt1120, 3 --bt656
+CHIP_TYPE=hi3518ev300;      # chip type
+BOARD=demo;
+
+#DDR start:0x40000000, kernel start:0x40000000,  OS(32M); MMZ start:0x42000000
+mem_total=64                # 64M, total mem
+mem_start=0x40000000        # phy mem start
+os_mem_size=32              # 32M, os mem
+mmz_start=0x42000000;       # mmz start addr
+mmz_size=32M;               # 32M, mmz size
+##################################################################
+
+report_error()
+{
+	echo "******* Error: There's something wrong, please check! *****"
+	exit 1
+}
+
+insert_audio()
+{
+	insmod hi3516ev200_aio.ko
+	insmod hi3516ev200_ai.ko
+	insmod hi3516ev200_ao.ko
+	insmod hi3516ev200_aenc.ko
+	insmod hi3516ev200_adec.ko
+	insmod hi3516ev200_acodec.ko
+#	insmod hi_tlv320aic31.ko
+	echo "insert audio"
+}
+
+remove_audio()
+{
+	rmmod hi3516ev200_acodec
+#	rmmod hi_tlv320aic31.ko
+	rmmod hi3516ev200_adec
+	rmmod hi3516ev200_aenc
+	rmmod hi3516ev200_ao
+	rmmod hi3516ev200_ai
+	rmmod hi3516ev200_aio
+
+	echo "remove audio"
+}
+
+insert_isp()
+{
+	insmod hi3516ev200_isp.ko
+}
+
+insert_sil9024()
+{
+	i2c_sel=2
+	if [ "$CHIP_TYPE" == "hi3516ev300" ];then
+		i2c_sel=1
+	fi
+
+	if [ "$BOARD" == "sck" ];then
+		insmod hi_sil9024.ko norm=12 i2c_num=$i2c_sel  #1080P@30fps
+	fi
+}
+
+insert_adv7179()
+{
+	i2c_sel=2
+	if [ "$CHIP_TYPE" == "hi3516ev300" ];then
+		i2c_sel=1
+	fi
+
+	if [ "$BOARD" == "sck" ];then
+		insmod hi_adv7179.ko norm_mode=0 i2c_num=$i2c_sel # norm_mode = 0:PAL, 1:NTSC
+	fi
+}
+
+insert_ko()
+{
+
+	insmod sys_config.ko chip=$CHIP_TYPE sensors=$SNS_TYPE0 g_cmos_yuv_flag=$YUV_TYPE0 board=$BOARD
+	insmod hi_osal.ko anony=1 mmz_allocator=hisi mmz=anonymous,0,$mmz_start,$mmz_size || report_error
+	insmod hi3516ev200_base.ko
+	insmod hi3516ev200_sys.ko
+#	insmod hi3516ev200_tde.ko
+	insmod hi3516ev200_rgn.ko
+	insmod hi3516ev200_vgs.ko
+	insmod hi3516ev200_vi.ko
+	insert_isp;
+	insmod hi3516ev200_vpss.ko
+	insmod hi3516ev200_vo.ko
+	insmod hifb.ko video="hifb:vram0_size:1620"     # default fb0:D1
+	insmod hi3516ev200_chnl.ko
+	insmod hi3516ev200_vedu.ko
+	insmod hi3516ev200_rc.ko
+	insmod hi3516ev200_venc.ko
+	insmod hi3516ev200_h264e.ko
+	insmod hi3516ev200_h265e.ko
+	insmod hi3516ev200_jpege.ko
+	insmod hi3516ev200_ive.ko save_power=0
+	insmod hi_pwm.ko
+	insmod hi_sensor_i2c.ko
+	insmod hi_sensor_spi.ko
+	insert_sil9024; # BT1120
+#	insert_adv7179; # BT656
+	insert_audio
+	insmod hi_mipi_rx.ko
+#	insmod hi_user.ko
+	insmod hi3516ev200_pm.ko
+}
+
+remove_ko()
+{
+	rmmod hi3516ev200_pm
+#	rmmod hi_user
+	remove_audio
+	rmmod hi_pwm
+	rmmod hi_mipi_rx
+	rmmod hi_sil9024 &> /dev/null
+#	rmmod hi_adv7179 &> /dev/null
+	rmmod hi3516ev200_ive
+	rmmod hi3516ev200_rc
+	rmmod hi3516ev200_jpege
+	rmmod hi3516ev200_h264e
+	rmmod hi3516ev200_h265e
+	rmmod hi3516ev200_venc
+	rmmod hi3516ev200_vedu
+	rmmod hi3516ev200_chnl
+	rmmod hifb
+	rmmod hi3516ev200_vo
+	rmmod hi3516ev200_vpss
+	rmmod hi3516ev200_isp
+	rmmod hi3516ev200_vi
+	rmmod hi3516ev200_vgs
+	rmmod hi3516ev200_rgn
+#	rmmod hi3516ev200_tde
+	rmmod hi_sensor_i2c &> /dev/null
+	rmmod hi_sensor_spi &> /dev/null
+	rmmod hi3516ev200_sys
+	rmmod hi3516ev200_base
+	rmmod hi_osal
+	rmmod sys_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_os_mem=0
+b_arg_board=0
+
+for arg in $@
+do
+	if [ $b_arg_sensor0 -eq 1 ] ; then
+		b_arg_sensor0=0;
+		SNS_TYPE0=$arg;
+	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
+
+	if [ $b_arg_board -eq 1 ] ; then
+		b_arg_board=0;
+		BOARD=$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;
+			;;
+		"-osmem")
+			b_arg_os_mem=1;
+			;;
+		"-yuv0")
+			b_arg_yuv_type0=1;
+			;;
+		"-board")
+			b_arg_board=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
+	cd /lib/modules/4.9.37/hisilicon
+	insert_ko;
+fi