#!/bin/sh
# Useage: ./load [ -r|-i|-a ][type]
#         -r : rmmod all modules
#         -i : insmod all modules
#    default : rmmod all moules and then insmod them
#        type: 16d1,16960h,4hd,8720p,8bt656,1hd12d1
#

SDK_TYPE=16d1

if [ $# -ge 2 ]; then
    SDK_TYPE=$2
fi


if [ $SDK_TYPE = "16d1" ]; then
    echo "SDK_TYPE type is $SDK_TYPE"
elif [ $SDK_TYPE = "16960h" ]; then
    echo "SDK_TYPE type is $SDK_TYPE" 
elif [ $SDK_TYPE = "4hd" ]; then
    echo "SDK_TYPE type is $SDK_TYPE" 
elif [ $SDK_TYPE = "8720p" ]; then
    echo "SDK_TYPE type is $SDK_TYPE" 
elif [ $SDK_TYPE = "8bt656" ]; then
    echo "SDK_TYPE type is $SDK_TYPE" 
elif [ $SDK_TYPE = "1hd12d1" ]; then
    echo "SDK_TYPE type is $SDK_TYPE" 
else
    SDK_TYPE=16d1
    echo "SDK_TYPE type is $SDK_TYPE"
fi

report_error()
{
    echo "******* Error!! Shell exit for error *****"
    exit 1
}

insert_audio()
{
    insmod hidmac.ko
    #insmod extdrv/tlv_320aic31.ko > /dev/null
    insmod hi3531_sio.ko
    insmod hi3531_ai.ko
    insmod hi3531_ao.ko
    insmod hi3531_aenc.ko
    insmod hi3531_adec.ko
}

remove_audio()
{
    rmmod hi3531_adec
    rmmod hi3531_aenc
    rmmod hi3531_ao
    rmmod hi3531_ai
    rmmod hi3531_sio
    #rmmod tlv_320aic31
    rmmod hidmac
}

insert_ko()
{
    if [ $SDK_TYPE = "16d1" ]; then
        sh ./pinctrl_16D1_hi3531.sh > /dev/null
    fi
    
    if [ $SDK_TYPE = "16960h" ]; then
        sh ./pinctrl_16X960H_hi3531.sh > /dev/null
    fi
    
    if [ $SDK_TYPE = "4hd" ]; then
        sh ./pinctrl_4HD_hi3531.sh > /dev/null
    fi
    
    if [ $SDK_TYPE = "8720p" ]; then
        sh ./pinctrl_8X720P_hi3531.sh > /dev/null
    fi
    
    if [ $SDK_TYPE = "8bt656" ]; then
        sh ./pinctrl_8BT656_hi3531.sh > /dev/null
    fi
    
    if [ $SDK_TYPE = "1hd12d1" ]; then
        sh ./pinctrl_1HD+12D1_hi3531.sh > /dev/null
    fi
    
    sh ./clkcfg_hi3531.sh > /dev/null

		BOOT_128M_CMD=`grep -i 'mem=128M' /proc/cmdline`
		BOOT_144M_CMD=`grep -i 'mem=144M' /proc/cmdline`
		BOOT_208M_CMD=`grep -i 'mem=208M' /proc/cmdline`
		BOOT_224M_CMD=`grep -i 'mem=224M' /proc/cmdline`
		BOOT_240M_CMD=`grep -i 'mem=240M' /proc/cmdline`
		BOOT_256M_CMD=`grep -i 'mem=256M' /proc/cmdline`
		BOOT_272M_CMD=`grep -i 'mem=272M' /proc/cmdline`
		BOOT_288M_CMD=`grep -i 'mem=288M' /proc/cmdline`
		if [ "$BOOT_208M_CMD" != "" ]; then
			echo "current system used mem=208M"
			insmod mmz.ko mmz=anonymous,0,0x8d000000,298M:jpeg,0,0x9fa00000,5M:ddr1,0,0xC0000000,462M:vo,0,0xdce00000,42M anony=1 || report_error
		else
			if [ "$BOOT_224M_CMD" != "" ]; then
				echo "current system used mem=224M"
				insmod mmz.ko mmz=anonymous,0,0x8E000000,282M:jpeg,0,0x9fa00000,5M:ddr1,0,0xC0000000,462M:vo,0,0xdce00000,42M anony=1 || report_error
			else
				if [ "$BOOT_240M_CMD" != "" ]; then
					echo "current system used mem=240M"
					insmod mmz.ko mmz=anonymous,0,0x8f000000,266M:jpeg,0,0x9fa00000,5M:ddr1,0,0xC0000000,462M:vo,0,0xdce00000,42M anony=1 || report_error
				else
					if [ "$BOOT_128M_CMD" != "" ]; then
						echo "current system default mem=128M"
						insmod mmz.ko mmz=anonymous,0,0x88000000,378M:jpeg,0,0x9fa00000,5M:ddr1,0,0xC0000000,462M:vo,0,0xdce00000,42M anony=1 || report_error
					else
						if [ "$BOOT_144M_CMD" != "" ]; then
						echo "current system default mem=144M"
							insmod mmz.ko mmz=anonymous,0,0x89000000,362M:jpeg,0,0x9fa00000,5M:ddr1,0,0xC0000000,462M:vo,0,0xdce00000,42M anony=1 || report_error
						else
							if [ "$BOOT_288M_CMD" != "" ]; then
								echo "current system used mem=288M"
								insmod mmz.ko mmz=anonymous,0,0x92000000,218M:jpeg,0,0x9fa00000,5M:ddr1,0,0xC0000000,462M:vo,0,0xdce00000,42M anony=1 || report_error
							else
								if [ "$BOOT_272M_CMD" != "" ]; then
									echo "current system used mem=272M"
									insmod mmz.ko mmz=anonymous,0,0x91000000,234M:jpeg,0,0x9fa00000,5M:ddr1,0,0xC0000000,462M:vo,0,0xdce00000,42M anony=1 || report_error
								else	
									if [ "$BOOT_256M_CMD" != "" ]; then
										echo "current system used mem=256M"
										insmod mmz.ko mmz=anonymous,0,0x90000000,250M:jpeg,0,0x9fa00000,5M:ddr1,0,0xC0000000,462M:vo,0,0xdce00000,42M anony=1 || report_error
									else
										echo "current system default mem=192M"
										insmod mmz.ko mmz=anonymous,0,0x8C000000,314M:jpeg,0,0x9fa00000,5M:ddr1,0,0xC0000000,462M:vo,0,0xdce00000,42M anony=1 || report_error
									fi
								fi
							fi
						fi
					fi
				fi
			fi
		fi
    
    insmod hiuser.ko
    insmod hi3531_base.ko
    insmod hi3531_sys.ko
    insmod hi3531_tde.ko g_pszTdeMmzName="mmzname" g_u32TdeTmpBufW=800 g_u32TdeTmpBufH=600
    insmod hi3531_dsu.ko
    insmod hi3531_venc.ko
    insmod hi3531_group.ko
    insmod hi3531_chnl.ko
    insmod hi3531_h264e.ko
    insmod hi3531_rc.ko
    insmod hi3531_jpege.ko
    insmod hi3531_mpeg4e.ko
    if [ $SDK_TYPE = "4hd" -o $SDK_TYPE = "8720p" ]; then
    	insmod hi3531_viu.ko detect_err_frame=1
    else
    	insmod hi3531_viu.ko detect_err_frame=1
    fi
    insmod hi3531_vou.ko
    insmod hi3531_vpss.ko
    insmod hi3531_region.ko
    insmod hi3531_ive.ko
    insmod hi3531_vda.ko
    insmod vcmp.ko
    insmod hifb.ko video="hifb:vram0_size:1,vram1_size:1,vram2_size:1,vram3_size:1,vram4_size:8100,vram5_size:128,vram6_size:1" softcursor="off" apszLayerMmzNames="mmzname0","mmzname1",,"graphics",,"mmzname0"
    insmod hi3531_vdec.ko
    insmod hi3531_vfmw.ko
    insmod hi3531_hdmi.ko
    insmod jpeg.ko
    
    insmod extdrv/gpioi2c.ko
    insmod extdrv/cx25930.ko
    EXT_CX25930_KO_INS=`grep -i 'cx25930' /proc/modules`
    if [ "$EXT_CX25930_KO_INS" != "" ]; then
    	echo "current decode chip type is CX25930"
    	sleep 10
    fi
    insmod extdrv/es8323.ko
    insmod extdrv/nvp1918.ko
    EXT_NVP1918_KO_INS=`grep -i 'nvp1918' /proc/modules`
    if [ "$EXT_NVP1918_KO_INS" = "" ]; then
    	if [ $SDK_TYPE = "16960h" ]; then
        insmod extdrv/tw2960.ko
    	else
    		#insmod extdrv/tw2865.ko
    		insmod extdrv/ncdecoder.ko
    	fi
    else
    	echo "current decode chip type is nvp1918"
    fi
    
    if [ $SDK_TYPE = "8720p" ]; then
    	echo "insmod fpga_jtag.ko, wait please..."
        insmod extdrv/fpga_jtag.ko
    fi
    
	insmod extdrv/nvp6124.ko
    insmod extdrv/tp2802.ko
    insmod extdrv/nvp6114_ex.ko
    insmod extdrv/ds1307.ko
    mknod /dev/ds1307 c 50 0   
    insmod extdrv/wdt.ko
    insmod extdrv/fgpio.ko
    insmod extdrv/hi_ir.ko
    insmod extdrv/crypto_memory.ko
    
    #insmod extdrv/sil9024.ko norm=1;  #480I60_4X3
    #insmod extdrv/sil9024.ko norm=2;  #576I50_4X3
    #insmod extdrv/sil9024.ko norm=3;  #480P60_4X3
    #insmod extdrv/sil9024.ko norm=4;  #576P50_4X3
    #insmod extdrv/sil9024.ko norm=5;  #720P60
    #insmod extdrv/sil9024.ko norm=6;   #720P50
    #insmod extdrv/sil9024.ko norm=7;  #1080I60
    #insmod extdrv/sil9024.ko norm=8;  #1080I50
    ##insmod extdrv/sil9024.ko norm=9;  #1080P60,zzy
    #insmod extdrv/sil9024.ko norm=10;  #1080P50
    #insmod extdrv/sil9024.ko norm=11;  #1080P25
    #insmod extdrv/sil9024.ko norm=12;  #1080P30
    
    insmod extdrv/ssp.ko
    if [ $SDK_TYPE = "8bt656" ]; then
    insmod extdrv/adv_7179.ko  #confilct with tw2865(0x56 chip) in hi3531demo A, if you want to use both of them, please use demo B
    fi

    insert_audio

    #sh ./sysctl_hi3531_fpga.sh > /dev/null
    sh ./sysctl_hi3531.sh > /dev/null
}

remove_ko()
{
    remove_audio
    rmmod adv_7179.ko
    rmmod sil9024
    rmmod tw2865.ko
    rmmod tw2960.ko
    rmmod gpioi2c
    rmmod hifb
    rmmod vcmp
    rmmod hi3531_hdmi.ko
    rmmod hi3531_vda.ko
    rmmod hi3531_ive.ko
    rmmod hi3531_region
    rmmod hi3531_vpss
    rmmod hi3531_vou
    rmmod hi3531_viu
    rmmod jpeg.ko
    rmmod hi3531_vfmw.ko
    rmmod hi3531_vdec.ko   
    rmmod hi3531_jpege
    rmmod hi3531_rc
    rmmod hi3531_h264e
    rmmod hi3531_mpeg4e
    rmmod hi3531_chnl
    rmmod hi3531_group
    rmmod hi3531_venc
    rmmod hi3531_dsu
    rmmod hi3531_tde
    rmmod hi3531_sys
    rmmod hi3531_base
    rmmod mmz
    rmmod hiuser
}

insert_pci()
{
    insmod pcie/hi35xx_dev_host.ko
    insmod pcie/boot_device.ko
    insmod pcie/mcc_drv_host.ko shm_phys_addr=0x9ff00000 shm_size=0x100000
    insmod pcie/mcc_usrdev_host.ko
    insmod pcie/pcit_dma_host.ko

    insmod hi3531_pciv_fmw.ko
    insmod hi3531_pciv.ko
}

remove_pci()
{
    rmmod pcit_dma_host.ko
    rmmod mcc_usrdev_host.ko
    rmmod mcc_drv_host.ko
    rmmod pcie/boot_device.ko
    rmmod hi35xx_dev_host.ko
    

    rmmod hi3531_pciv.ko
    rmmod hi3531_pciv_fmw.ko
}

# load module.
if [ "$1" = "-i" ]
then
    insert_ko
    #insert_pci
fi

if [ "$1" = "-r" ]
then
    #remove_pci
    remove_ko
fi

if [ $# -eq 0 ] || [ "$1" = "-a" ]
then
    #remove_pci
    remove_ko
    insert_ko
    #insert_pci
fi
