#!/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=4hd

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    
    sh ./sysctl_hi3531.sh > /dev/null   #The ddr priority must be set before inserting all modules, otherwise vou will be low bandwidth(or flicker) when the machine is starting up.

    #insmod mmz.ko mmz=anonymous,0,0x84000000,447M:ddr1,0,0xC0000000,511M anony=1 || report_error
    #insmod mmz.ko mmz=anonymous,0,0x88000000,378M:jpeg,0,0x9fa00000,5M:ddr1,0,0xC0000000,511M anony=1 || report_error
	insmod mmz.ko mmz=anonymous,0,0x90000000,250M:jpeg,0,0x9fa00000,5M:ddr1,0,0xC0000000,511M anony=1 || report_error
    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
    insmod hi3531_viu.ko
    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:7200,vram1_size:7200,vram2_size:3240,vram3_size:3240,\
                vram4_size:7200,vram5_size:128,vram6_size:128" softcursor="off" u32VcmpBufNum=2\
                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/ssp.ko
	insmod extdrv/alpu_c.ko
	#insmod extdrv/sil9293x4.ko
    #insmod extdrv/ds1339.ko
    insert_audio
}

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/mcc_drv_host.ko shm_phys_addr=0x9ff00000 shm_size=0x100000
    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 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
