#!/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,8960h,2hd,4720p,1hd7d1
#

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 = "8960h" ]; then
    echo "SDK_TYPE type is $SDK_TYPE" 
elif [ $SDK_TYPE = "2hd" ]; then
    echo "SDK_TYPE type is $SDK_TYPE" 
elif [ $SDK_TYPE = "4720p" ]; then
    echo "SDK_TYPE type is $SDK_TYPE" 
elif [ $SDK_TYPE = "1hd7d1" ]; 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 extdrv/acodec.ko
    insmod hi3521_sio.ko
    insmod hi3521_ai.ko
    insmod hi3521_ao.ko
    insmod hi3521_aenc.ko
    insmod hi3521_adec.ko
}

remove_audio()
{
    rmmod hi3521_adec
    rmmod hi3521_aenc
    rmmod hi3521_ao
    rmmod hi3521_ai
    rmmod hi3521_sio
    #rmmod acodec
    rmmod tlv_320aic31
    rmmod hidmac
}

insert_netmac()
{
		insmod extdrv/stmmac.ko
		IS_NVR_USE_POE=`grep -i '(nvp' /proc/cmdline`
		if [ "$IS_NVR_USE_POE" == "" ];then
				echo "current net is not poe"
				
				ifconfig -a > /dev/1.txt
				HAS_SYS_MAC_DRV=`grep -i 'eth0' /dev/1.txt`
				rm -rf /dev/1.txt
				
				if [ "$HAS_SYS_MAC_DRV" == "" ];then
								
					echo "current sys kernel has not config net"
					
					insmod extdrv/hieth.ko
					
					insmod extdrv/sunrpc.ko
					insmod extdrv/auth_rpcgss.ko
					insmod extdrv/lockd.ko
					insmod extdrv/nfs_acl.ko
					insmod extdrv/nfs.ko		
					
				else
				
					lsmod > /dev/1.txt
					HAS_AUTH_RPCGSS_KO=`grep -i 'auth_rpcgss' /dev/1.txt`
					rm -rf /dev/1.txt
					
					echo "current sys kernel has config net"	
					
					if [ "$HAS_AUTH_RPCGSS_KO" == "" ];then
						insmod extdrv/sunrpc.ko
						insmod extdrv/auth_rpcgss.ko
						insmod extdrv/lockd.ko
						insmod extdrv/nfs_acl.ko
						insmod extdrv/nfs.ko							
					fi
					
				fi
		else
				echo "current net is poe device"
				insmod extdrv/hieth.ko
				insmod extdrv/rtl8306.ko
				insmod extdrv/net-pnp.ko

				insmod extdrv/sunrpc.ko
				insmod extdrv/auth_rpcgss.ko
				insmod extdrv/lockd.ko
				insmod extdrv/nfs_acl.ko
				insmod extdrv/nfs.ko		
		fi

}

insert_ko()
{
   if [ $SDK_TYPE = "16d1" ]; then
       sh ./pinmux_hi3521_16D1.sh > /dev/null
       himm 0x20110168  0x03ff2
   fi
   
   if [ $SDK_TYPE = "8960h" ]; then
       sh ./pinmux_hi3521_16D1.sh > /dev/null
   fi
   
   if [ $SDK_TYPE = "2hd" ]; then
       sh ./pinmux_hi3521_2X1080P.sh > /dev/null
   fi
   
   if [ $SDK_TYPE = "4720p" ]; then
       sh ./pinmux_hi3521_4X720P.sh > /dev/null
   fi
   
    if [ $SDK_TYPE = "1hd7d1" ]; then
        sh ./pinmux_hi3521_1XHD_7XD1.sh > /dev/null
    fi

    sh ./clkcfg_hi3521.sh > /dev/null
    #sh ./pinmux_16D1_LCD_hi3521.sh > /dev/null

		BSYS_MEM_192M=`grep -i 'mem=192M' /proc/cmdline`
		BSYS_MEM_176M=`grep -i 'mem=176M' /proc/cmdline`
		BSYS_MEM_136M=`grep -i 'mem=136M' /proc/cmdline`
		BSYS_MEM_128M=`grep -i 'mem=128M' /proc/cmdline`
		BSYS_MEM_160M=`grep -i 'mem=160M' /proc/cmdline`
		BSYS_MEM_112M=`grep -i 'mem=112M' /proc/cmdline`
		BSYS_MEM_96M=`grep -i 'mem=96M' /proc/cmdline`
		BSYS_MEM_88M=`grep -i 'mem=88M' /proc/cmdline`
		BSYS_MEM_80M=`grep -i 'mem=80M' /proc/cmdline`
		BSYS_MEM_72M=`grep -i 'mem=72M' /proc/cmdline`
		BSYS_MEM_64M=`grep -i 'mem=64M' /proc/cmdline`
	 
	if [ "$BSYS_MEM_136M" != "" ]; then                                           
 	        insmod mmz.ko mmz=anonymous,0,0x88800000,362M:jpeg,0,0x9fa00000,5M anony=1 || report_error
	else 
		if [ "$BSYS_MEM_64M" != "" ]; then
			insmod mmz.ko mmz=anonymous,0,0x84000000,434M:jpeg,0,0x9fa00000,5M anony=1 || report_error
		else
	    if [ "$BSYS_MEM_72M" != "" ]; then
	    	insmod mmz.ko mmz=anonymous,0,0x84800000,426M:jpeg,0,0x9fa00000,5M anony=1 || report_error
	    else
	    	if [ "$BSYS_MEM_80M" != "" ]; then
	    		insmod mmz.ko mmz=anonymous,0,0x85000000,418M:jpeg,0,0x9fa00000,5M anony=1 || report_error
	    	else
	    		if [ "$BSYS_MEM_88M" != "" ]; then
	    			insmod mmz.ko mmz=anonymous,0,0x85800000,410M:jpeg,0,0x9fa00000,5M anony=1 || report_error
	    		else
	    			if [ "$BSYS_MEM_96M" != "" ]; then
	    				insmod mmz.ko mmz=anonymous,0,0x86000000,402M:jpeg,0,0x9fa00000,5M anony=1 || report_error
	    			else
	    				if [ "$BSYS_MEM_112M" != "" ]; then
    						insmod mmz.ko mmz=anonymous,0,0x87000000,386M:jpeg,0,0x9fa00000,5M anony=1 || report_error
	    				else
		    				if [ "$BSYS_MEM_128M" != "" ]; then
	    						insmod mmz.ko mmz=anonymous,0,0x88000000,370M:jpeg,0,0x9fa00000,5M anony=1 || report_error
		    				else
			    				if [ "$BSYS_MEM_176M" != "" ]; then
		    						insmod mmz.ko mmz=anonymous,0,0x8B000000,322M:jpeg,0,0x9fa00000,5M anony=1 || report_error
			    				else
										if [ "$BSYS_MEM_192M" != "" ]; then
											insmod mmz.ko mmz=anonymous,0,0x8C000000,306M:jpeg,0,0x9fa00000,5M anony=1 || report_error
			    					else
											if [ "$BSYS_MEM_160M" != "" ]; then
												insmod mmz.ko mmz=anonymous,0,0x8a000000,338M:jpeg,0,0x9fa00000,5M anony=1 || report_error
											else
												insmod mmz.ko mmz=anonymous,0,0x8C000000,306M:jpeg,0,0x9fa00000,5M anony=1 || report_error
											fi
								  	fi
							  	fi
	    					fi
	    				fi
	    			fi
	    		fi	
	    	fi
	    fi
 		fi
	fi
		insmod extdrv/wdt.ko nodeamon=1
    insmod hiuser.ko
    insmod hi3521_base.ko
    insmod hi3521_sys.ko
    insmod hi3521_tde.ko g_u32TdeTmpBufW=0 g_u32TdeTmpBufH=0
    insmod hi3521_dsu.ko
    insmod hi3521_venc.ko
    insmod hi3521_group.ko
    insmod hi3521_chnl.ko
    insmod hi3521_h264e.ko
    insmod hi3521_rc.ko
    insmod hi3521_jpege.ko
    #insmod hi3516_mpeg4e.ko
    HISI_PRI=`grep -i '(dvh' /proc/cmdline`
		if [ "$HISI_PRI" != "" ]; then
			insmod hi3521_viu.ko  
		else
			insmod hi3521_viu.ko detect_err_frame=1 
		fi
		insmod hi3521_vou.ko
    insmod hi3521_vpss.ko
    insmod hi3521_ive.ko
    insmod hi3521_vda.ko
    insmod hi3521_region.ko
    insmod vcmp.ko
    insmod hifb.ko video="hifb:vram0_size:8100,vram1_size:1620,vram2_size:1620,vram3_size:32" softcursor="off" u32VcmpBufNum=2
    insmod hi3521_vdec.ko
    insmod hi3521_vfmw.ko
    insmod hi3521_hdmi.ko
    insmod jpeg.ko
    
    insmod extdrv/gpioi2c.ko
    insmod extdrv/nvp1918.ko
    EXT_NVP1918_KO_INS=`grep -i 'nvp1918' /proc/modules`
    if [ "$EXT_NVP1918_KO_INS" = "" ]; then
   		insmod extdrv/ncdecoder.ko
    else
    	echo "current decode chip type is nvp1918"
    fi
    
    insmod extdrv/fgpio.ko
    insmod extdrv/hi_ir.ko
    insmod extdrv/crypto_memory.ko
    
    insmod extdrv/ds1307.ko
    mknod /dev/ds1307 c 50 0   
    
    insmod extdrv/tp2802.ko
    insmod extdrv/nvp6114_ex.ko
    insmod extdrv/nvp6124.ko
	himm 0x20030094 0x1502
    insmod extdrv/es8323.ko
    #insmod extdrv/fpga_jtag.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
    #insmod extdrv/sil9024.ko norm=10;  #1080P50
    #insmod extdrv/sil9024.ko norm=11;  #1080P25
    #insmod extdrv/sil9024.ko norm=12;  #1080P30
    
    TDSH4101B_CHIPS=`grep -i '(dxs' /proc/cmdline`
    if [ "$TDSH4101B_CHIPS" != "" ]; then
    	
    	echo "current system used SH4101B chips"    	
    	
    	himm 0x200f0134 0x00000001 #GPIO8_3   / SPI_SCLK  / muxctrl_reg77
			himm 0x200f0138 0x00000001 #GPIO8_4   / SPI_SDO   / muxctrl_reg78
			himm 0x200f013c 0x00000001 #GPIO8_5   / SPI_SDI   / muxctrl_reg79
			himm 0x200f0140 0x00000001 #GPIO8_6   / SPI_CSN0  / muxctrl_reg80
			himm 0x200f0144 0x00000000 #SPI_CSN3  / NF_BOOT_PIN4  / CLK_TEST_OUT0/1/2/3

    	insmod extdrv/ssp.ko
    	#insmod extdrv/gpio2x_sh4101b.ko auto_hard_enable=0 his_spi_enable=1 check_crc_enable=1 multi_cs_enable=1
    	insmod extdrv/gpio2x_sh4101b.ko
    fi
    
    #insmod extdrv/ssp.ko
    #insmod extdrv/adv_7179.ko   #confilct with tw2865(0x56 chip)


    insert_audio

    if [ "$HISI_PRI" != "" ]; then
    	echo "current product used hisi sysctl_hi3521.sh"    	
		sh ./sysctl_hi3521_hisi.sh > /dev/null  
	else
	    echo "current product used tvt sysctl_hi3521.sh"    	
		sh ./sysctl_hi3521.sh > /dev/null 
	fi
}

remove_ko()
{
    remove_audio
    rmmod adv_7179.ko
    rmmod sil9024
    rmmod tw2960.ko
    rmmod tw2865.ko
    rmmod gpioi2c
    rmmod hifb
    rmmod vcmp
    rmmod hi3521_region
    rmmod hi3521_ive
    rmmod hi3521_vda
    rmmod hi3521_vpss
    rmmod hi3521_vou
    rmmod hi3521_viu
    rmmod jpeg
    rmmod hi3521_hdmi.ko
    rmmod hi3521_vfmw.ko
    rmmod hi3521_vdec.ko   
    rmmod hi3521_jpege
    rmmod hi3521_rc
    rmmod hi3521_h264e
    #rmmod hi3526_mpeg4e
    rmmod hi3521_chnl
    rmmod hi3521_group
    rmmod hi3521_venc
    rmmod hi3521_dsu
    rmmod hi3521_tde
    rmmod hi3521_sys
    rmmod hi3521_base
    rmmod mmz
    rmmod hiuser
}

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

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

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