#!/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: d1,960h,hd,8720p,8bt656,1hd12d1
#

SDK_TYPE=960h

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


if [ $SDK_TYPE = "d1" ]; then
    echo "SDK_TYPE type is $SDK_TYPE"
elif [ $SDK_TYPE = "960h" ]; then
    echo "SDK_TYPE type is $SDK_TYPE" 
elif [ $SDK_TYPE = "hd" ]; 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 = "d1" ]; then
        sh ./pinctrl_16D1_hi3531.sh > /dev/null
    fi
    
    if [ $SDK_TYPE = "960h" ]; then
        sh ./pinctrl_16X960H_hi3531.sh > /dev/null
    fi
    
    if [ $SDK_TYPE = "hd" ]; 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_192M_CMD=`grep -i 'mem=192M' /proc/cmdline`
		BOOT_224M_CMD=`grep -i 'mem=224M' /proc/cmdline`
		BOOT_256M_CMD=`grep -i 'mem=256M' /proc/cmdline`
		BOOT_208M_CMD=`grep -i 'mem=208M' /proc/cmdline`
		BOOT_240M_CMD=`grep -i 'mem=240M' /proc/cmdline`
		BOOT_304M_CMD=`grep -i 'mem=304M' /proc/cmdline`
		BOOT_320M_CMD=`grep -i 'mem=320M' /proc/cmdline`
		if [ "$BOOT_192M_CMD" != "" ]; then
			echo "current system default mem=192M"
			insmod mmz.ko mmz=anonymous,0,0x8C000000,314M:jpeg,0,0x9fa00000,5M:ddr1,0,0xC0400000,412M: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,0xC0400000,412M: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,0xC0400000,412M:vo,0,0xdce00000,42M anony=1 || report_error
				else
					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,0xC0400000,412M: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,0xC0400000,412M:vo,0,0xdce00000,42M anony=1 || report_error
						else
							if [ "$BOOT_304M_CMD" != "" ]; then
								echo "current system used mem=304M"
								insmod mmz.ko mmz=anonymous,0,0x93000000,202M:jpeg,0,0x9fa00000,5M:ddr1,0,0xC0400000,412M:vo,0,0xdce00000,42M anony=1 || report_error
							else
								if [ "$BOOT_320M_CMD" != "" ]; then
									echo "current system used mem=304M"
									insmod mmz.ko mmz=anonymous,0,0x94000000,186M:jpeg,0,0x9fa00000,5M:ddr1,0,0xC0400000,274M:vo,0,0xdce00000,42M anony=1 || report_error
								else
									echo "current system used mem=400M"
									insmod mmz.ko mmz=anonymous,0,0x99000000,106M:jpeg,0,0x9fa00000,5M:ddr1,0,0xC0400000,412M:vo,0,0xdce00000,42M anony=1 || report_error
								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 = "hd" -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
        insmod extdrv/ncdecoder.ko
    fi
    
    insmod extdrv/nvp6124.ko
	insmod extdrv/tp2802.ko
    #insmod extdrv/tp2802_720p.ko
    insmod extdrv/ds1307.ko
    mknod /dev/ds1307 c 50 0
    
    EXTGPIODRV_INS=`grep -i '(dvz' /proc/cmdline`
    if [ "$EXTGPIODRV_INS" != "" -o $SDK_TYPE = "8720p" ]; then
    	echo "current produce 3224heb or 720p insert gpio"
    	insmod extdrv/wdt.ko
    	insmod extdrv/fgpio.ko
    	insmod extdrv/hi_ir.ko
    fi
    
    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 ssp
    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/pcit_dma_host.ko
    insmod pcie/boot_device.ko
    insmod pcie/mcc_drv_host.ko shm_phys_addr=0xC0000000 shm_size=0x400000
    insmod pcie/mcc_usrdev_host.ko

    insmod hi3531_pciv_fmw.ko
    insmod hi3531_pciv.ko
}

remove_pci()
{
    rmmod mcc_usrdev_host.ko
    rmmod mcc_drv_host.ko
    rmmod pcit_dma_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
    /mnt/mtd/modules/pci_boot/booter
    #sleep 3
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
