Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can you add sensor IMX335 to hi3516dv100 #1413

Open
PiotrSzymankiewicz opened this issue Apr 22, 2024 · 0 comments
Open

Can you add sensor IMX335 to hi3516dv100 #1413

PiotrSzymankiewicz opened this issue Apr 22, 2024 · 0 comments

Comments

@PiotrSzymankiewicz
Copy link

Is there any chance of adding imx335? as it does not detect the sensor during start-up.

2024-04-19 19_41_48-Window

I found the loading files "load3516a" and "load3516d"
https://github.com/OpenIPC/firmware/tree/master/general/package/hisilicon-osdrv-hi3516av100/files/script

I have a version
obraz

I managed to decode the original firmware for the camera and there is also a file "load3516d" which looks like this

#!/bin/sh
# Useage: ./load3516a [ -r|-i|-a ] [ sensor ]
#         -r : rmmod all modules
#         -i : insmod all modules
#    default : rmmod all moules and then insmod them
#


# mn34220 imx185 ar0330 ar0230 imx117 ar0237
# Notes: hi3516d (16bit ddr) can only support sensor which resolution is 3M below



####################Variables Definition##########################


SNS_TYPE=os05a        # sensor type

mem_total=256;          # 512M, total mem
mem_start=0x80000000;   # phy mem start

os_mem_size=64;         # 64M, os mem
mmz_start=0x84000000;   # mmz start addr
mmz_size=176M;          # 128M, mmz size

##################################################################

report_error()
{
	echo "******* Error: There's something wrong, please check! *****"
	exit 1
}

insert_audio()
{
	insmod acodec.ko
	#insmod hidmac.ko
	insmod hi3516a_aio.ko
	insmod hi3516a_ai.ko
	insmod hi3516a_ao.ko
	insmod hi3516a_aenc.ko
	insmod hi3516a_adec.ko
	#insmod extdrv/tlv_320aic31.ko
	#insmod extdrv/ak7756.ko 
	echo "insert audio"
}

remove_audio()
{
	#rmmod tlv_320aic31.ko
	#rmmod ak7756.ko
	rmmod hi3516a_adec
	rmmod hi3516a_aenc
	rmmod hi3516a_ao
	rmmod hi3516a_ai
	rmmod hi3516a_aio
	rmmod acodec
	echo "remove audio"
}

insert_sns()
{
	case $SNS_TYPE in			
		imx123)
			himm 0x200f0050 0x1;                # spi0_sclk
			himm 0x200f0054 0x1;                # spi0_sdo
			himm 0x200f0058 0x1;                # spi0_sdi
			himm 0x200f005c 0x1;                # spi0_csn

			himm 0x2003002c 0x90007             # sensor unreset, clk 37.125MHz, VI 250MHz
			himm 0x20030104 0x0;                # VI 250MHz
			insmod extdrv/sensor_spi.ko
			;;			
		imx185)
			himm 0x200f0050 0x1;                # spi0_sclk
			himm 0x200f0054 0x1;                # spi0_sdo
			himm 0x200f0058 0x1;                # spi0_sdi
			himm 0x200f005c 0x1;                # spi0_csn
			
			himm 0x2003002c 0x90007             # sensor unreset, clk 37.125MHz, VI 250MHz

			insmod extdrv/sensor_spi.ko
			;;
		imx117)
			himm 0x200f0050 0x1;                # spi0_sclk
			himm 0x200f0054 0x1;                # spi0_sdo
			himm 0x200f0058 0x1;                # spi0_sdi
			himm 0x200f005c 0x1;                # spi0_csn
			
			himm 0x200f00dc 0x1;
			himm 0x200f00e0 0x1;
			himm 0x20030038 0x6;
			
			himm 0x20131020 0x30de8;
			himm 0x20131024 0x30de5;
			himm 0x2013102c 0x5;
			
			himm 0x20131060 0xbf;
			himm 0x20131064 0xbc;
			himm 0x2013106c 0x5;

			himm 0x2003002c 0x90007             # sensor unreset, clk 37.125MHz, VI 250MHz
					
			insmod extdrv/sensor_spi.ko sensor=imx117
			;;	
		os05a)
			himm 0x200f0050 0x2;                # i2c0_scl
			himm 0x200f0054 0x2;                # i2c0_sda
#			himm 0x2003002c 0xE0007;            # sensor unreset, clk 24MHz, VI 250MHz
			himm 0x2003002c 0xE0003;            # sensor unreset, clk 24MHz, VI 297MHz
			himm 0x20030104 0x0;                # Sensor 24M
			;;
		imx335)
			himm 0x200f0050 0x2;                # i2c0_scl
			himm 0x200f0054 0x2;                # i2c0_sda
			himm 0x2003002c 0x90007;            # sensor unreset, clk 24MHz, VI 250MHz
#			himm 0x2003002c 0xE0003;            # sensor unreset, clk 24MHz, VI 297MHz
#			himm 0x20030104 0x0;                # Sensor 24M
			;;
		mn34220)
			himm 0x200f0050 0x2;                # i2c0_scl
			himm 0x200f0054 0x2;                # i2c0_sda
			
			himm 0x2003002c 0x90007             # sensor unreset, clk 37.125MHz, VI 250MHz
			;;
		ar0330)
			himm 0x200f0050 0x2;                # i2c0_scl
			himm 0x200f0054 0x2;                # i2c0_sda

			himm 0x2003002c 0xE0007             # sensor unreset, clk 24MHz, VI 250MHz
			;;
		ov4689)
			himm 0x200f0050 0x2;                # i2c0_scl
			himm 0x200f0054 0x2;                # i2c0_sda
			himm 0x2003002c 0xE0007             # sensor unreset, clk 24MHz, VI 250MHz
			himm 0x20030104 0x0;
			;;
		ar0230|ar0237)
			himm 0x200f0050 0x2;                # i2c0_scl
			himm 0x200f0054 0x2;                # i2c0_sda

			himm 0x2003002c 0xB0007             # sensor unreset, clk 27MHz, VI 250MHz
			;;
		bt1120)
			
			;;
		*)
			echo "xxxx Invalid sensor type $SNS_TYPE xxxx"
			report_error
			;;
	esac
}

remove_sns()
{
	rmmod ssp &> /dev/null
	rmmod sensor_spi &> /dev/null
	rmmod ssp_pana &> /dev/null
}

sys_config()
{
	# pinmux configuration
	sh pinmux_hi3516a.sh > /dev/null

	# clock configuration
	sh clkcfg_hi3516d.sh > /dev/null

	# system configuration
	sh sysctl_hi3516a.sh $b_arg_online  > /dev/null
}

insert_ko()
{
	# sys config
	sys_config;

	# driver load
	insmod mmz.ko mmz=anonymous,0,$mmz_start,$mmz_size anony=1 || report_error
	insmod hi_media.ko
	insmod hi3516a_base.ko
	
	insmod hi3516a_sys.ko vi_vpss_online=$b_arg_online sensor=$SNS_TYPE
	if [[ $? -ne 0 ]]; then 
		exit;
	fi  

	insmod hi3516a_tde.ko
	insmod hi3516a_region.ko
	insmod hi3516a_vgs.ko

	insmod hi3516a_isp.ko
	insmod hi3516a_viu.ko detect_err_frame=10;
	insmod hi3516a_vpss.ko
	insmod hi3516a_vou.ko lowPowerMode=0
	#insmod hi3516a_vou.ko detectCycle=0            #close dac detect
	#insmod hifb.ko video="hifb:vram0_size:1620"     # default pal

	insmod hi3516a_rc.ko
	insmod hi3516a_venc.ko
	insmod hi3516a_chnl.ko
	insmod hi3516a_h264e.ko OneStreamBuffer=1
	insmod hi3516a_h265e.ko OneStreamBuffer=1
	insmod hi3516a_jpege.ko
	insmod hi3516a_vda.ko
	insmod hi3516a_ive.ko

	insmod extdrv/sensor_i2c.ko
	insmod extdrv/pwm.ko
	insmod extdrv/piris.ko
	#insmod extdrv/adv_7441.ko
	#insmod extdrv/sil9024.ko norm=12    #1080P@30fps

	echo "==== Your input Sensor type is $SNS_TYPE ===="
	#insert_sns > /dev/null
	insert_sns

	insert_audio
	echo "==== Your input Sensor type is $SNS_TYPE ===="

	insmod hi_mipi.ko
	insmod io.ko
	insmod wdt.ko
	insmod hi_rtc.ko
	#insmod hi3516a_pm.ko
}

remove_ko()
{
	#rmmod hi3516a_pm
	remove_audio
	remove_sns

	rmmod sil9024 &> /dev/null
	rmmod sil9034 &> /dev/null
	rmmod pwm	

	rmmod hi3516a_ive
	rmmod hi3516a_vda
	
	rmmod hi3516a_rc
	rmmod hi3516a_jpege
	rmmod hi3516a_h264e
	rmmod hi3516a_h265e
	rmmod hi3516a_chnl
	rmmod hi3516a_venc

	rmmod hifb
	rmmod hi3516a_vou
	rmmod hi3516a_vpss
	rmmod hi3516a_viu
	rmmod hi_mipi

	rmmod ssp_ad9020
	rmmod hi3516a_vgs
	rmmod hi3516a_region
	rmmod hi3516a_tde

	rmmod sensor_i2c
	rmmod piris
	rmmod hi3516a_isp
	rmmod hi3516a_sys
	rmmod hi3516a_base
	rmmod hi_media
	rmmod mmz
}

sys_restore()
{
	####################################################
	pinmux_hi3516a.sh > /dev/null

	clkcfg_hi3516a.sh > /dev/null

	# system configuration
	sysctl_hi3516a.sh $b_arg_online > /dev/null

	insert_sns;
}

load_usage()
{
	echo "Usage:  ./load3516a [-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: ar0130]"
	echo "    -osmem os_mem_size       config os mem size [unit: M, default: 64]"
	echo "    -offline                 vi/vpss offline"
	echo "    -h                       help information"
	echo -e "Available sensors: imx185, mn34220, etc"
	echo -e "notes: osmem option can't be used when mmz zone partition is enable\n\n"
	echo -e "for example online:   ./load3516a -a -sensor mn34220 -osmem 64\n"
	echo -e "            offline:  ./load3516a -a -sensor mn34220 -osmem 64 -offline\n\n"
	echo -e "Notes: hi3516d (16bit ddr) can only support sensor which resolution is 3M below"
}

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_sensor=0
b_arg_insmod=0
b_arg_remove=0
b_arg_online=1
b_arg_restore=0

for arg in $@
do
	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

		calc_mmz_info;
	fi

	if [ $b_arg_sensor -eq 1 ] ; then
		b_arg_sensor=0
		SNS_TYPE=$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;
			;;
		"-sensor")
			b_arg_sensor=1;
			;;
		"-osmem")
			b_arg_os_mem=1;
			;;
		"-restore")
			b_arg_restore=1;
			;;
		"-offline")
			b_arg_online=0;
			;;
	esac
done
#######################parse arg end########################

#######################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


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

1 participant