static int _switch_gate(mod_type_t type, int flag)
{
    int ret = 0;
    switch(type) {
        case MOD_VDEC:
            PRINT_INFO("turn %s vdec module\n", flag?"on":"off");
            if (flag) {               
                GATE_ON(DOS);
            } else {
                GATE_OFF(DOS);
            }
            break;
        case MOD_AUDIO:
            PRINT_INFO("turn %s audio module\n", flag?"on":"off");
            if (flag) {
                GATE_ON(AIU_AMCLK_MEASURE);
                GATE_ON(AIU_AIFIFO2);
                GATE_ON(AIU_AUD_MIXER);
                GATE_ON(AIU_MIXER_REG);
                
                GATE_ON(AIU_IEC958);
                GATE_ON(AIU_AI_TOP_GLUE);
                GATE_ON(AUD_BUF);
                GATE_ON(AIU_I2S_OUT);
                GATE_ON(AIU_AMCLK); //this gate should not be turned off
                GATE_ON(AIU_ICE958_AMCLK);
                GATE_ON(AIU_AOCLK);   
                //GATE_ON(AUD_IN);
                GATE_ON(AIU_ADC);
                GATE_ON(AIU_AUDIN_SCLK);
            } else {   
            	  GATE_OFF(AIU_AMCLK_MEASURE);
                GATE_OFF(AIU_AIFIFO2);
                GATE_OFF(AIU_AUD_MIXER);
                GATE_OFF(AIU_MIXER_REG);
                
                GATE_OFF(AIU_IEC958);
                GATE_OFF(AIU_AI_TOP_GLUE);
                GATE_OFF(AUD_BUF);
                GATE_OFF(AIU_I2S_OUT);         
                GATE_OFF(AIU_AMCLK); //this gate should not be turned off
                GATE_OFF(AIU_ICE958_AMCLK);
                GATE_OFF(AIU_AOCLK);
                //GATE_OFF(AUD_IN);
                GATE_OFF(AIU_ADC);
                GATE_OFF(AIU_AUDIN_SCLK);
            }
            break;
        case MOD_HDMI:
            PRINT_INFO("turn %s hdmi module\n", flag?"on":"off");
            if (flag) {
                GATE_ON(HDMI_INTR_SYNC);
                GATE_ON(HDMI_PCLK);
                GATE_ON(VCLK1_HDMI);
            } else {
                GATE_OFF(HDMI_INTR_SYNC);
                GATE_OFF(HDMI_PCLK);
                GATE_OFF(VCLK1_HDMI);
            }            
            break;
        case MOD_VENC:
            PRINT_INFO("turn %s venc module\n", flag?"on":"off");
            if (flag) {
                GATE_ON(VCLK2_VENCI);
                GATE_ON(VCLK2_VENCI1);
                GATE_ON(VCLK2_VENCP);
                GATE_ON(VCLK2_VENCP1);
                GATE_ON(VENC_P_TOP);
                GATE_ON(VENC_I_TOP);
                GATE_ON(VENCI_INT);
                GATE_ON(VENCP_INT);
                GATE_ON(VCLK2_ENCI);
                GATE_ON(VCLK2_ENCP);
                GATE_ON(VCLK2_VENCT);
                GATE_ON(VCLK2_VENCT1);
                GATE_ON(VCLK2_OTHER);
                GATE_ON(VCLK2_OTHER1);
                GATE_ON(ENC480P);
                GATE_ON(VENC_DAC);
                GATE_ON(DAC_CLK);
            } else {
                GATE_OFF(VCLK2_VENCI);
                GATE_OFF(VCLK2_VENCI1);
                GATE_OFF(VCLK2_VENCP);
                GATE_OFF(VCLK2_VENCP1);
                GATE_OFF(VENC_P_TOP);
                GATE_OFF(VENC_I_TOP);
                GATE_OFF(VENCI_INT);
                GATE_OFF(VENCP_INT);
                GATE_OFF(VCLK2_ENCI);
                GATE_OFF(VCLK2_ENCP);
                GATE_OFF(VCLK2_VENCT);
                GATE_OFF(VCLK2_VENCT1);
                GATE_OFF(VCLK2_OTHER);
                GATE_OFF(VCLK2_OTHER1);
                GATE_OFF(ENC480P);
                GATE_OFF(VENC_DAC);
                GATE_OFF(DAC_CLK);
            }
            break;
        case MOD_TCON:
            PRINT_INFO("turn %s tcon module\n", flag?"on":"off");
            if (flag) {
                GATE_ON(VENC_T_TOP);
                GATE_ON(VENCT_INT);
                GATE_ON(VCLK2_ENCT);
            } else {
                GATE_OFF(VENC_T_TOP);
                GATE_OFF(VENCT_INT);
                GATE_OFF(VCLK2_ENCT);
            }
            break;
        case MOD_LVDS:
            PRINT_INFO("turn %s lvds module\n", flag?"on":"off");
            if (flag) {
                GATE_ON(VENC_L_TOP);
                GATE_ON(VENCL_INT);
                GATE_ON(VCLK2_ENCL);
            } else {
                GATE_OFF(VENC_L_TOP);
                GATE_OFF(VENCL_INT);
                GATE_OFF(VCLK2_ENCL);
            }
            break;
        case MOD_MIPI:
            PRINT_INFO("turn %s mipi module\n", flag?"on":"off");
            if (flag) {
                GATE_ON(MIPI_APB_CLK);
                GATE_ON(MIPI_SYS_CLK);
                GATE_ON(MIPI_PHY);
            } else {
                GATE_OFF(MIPI_APB_CLK);
                GATE_OFF(MIPI_SYS_CLK);
                GATE_OFF(MIPI_PHY);
            }
            break;
        case MOD_BT656:
            PRINT_INFO("turn %s bt656 module\n", flag?"on":"off");
            if (flag) {
                GATE_ON(BT656_IN);
            } else {
                GATE_OFF(BT656_IN);
            }
            break;
        case MOD_SPI:
            PRINT_INFO("turn %s spi module\n", flag?"on":"off");
            if (flag) {
                GATE_ON(SPICC);
                GATE_ON(SPI1);
                GATE_ON(SPI2);
            } else {
                GATE_OFF(SPICC);
                GATE_OFF(SPI1);
                GATE_OFF(SPI2);
            }
            break;
        case MOD_UART0:
            PRINT_INFO("turn %s uart0 module\n", flag?"on":"off");
            if (flag) {
                GATE_ON(UART0);
            } else {
                GATE_OFF(UART0);
            }
            break;
        case MOD_UART1:
            PRINT_INFO("turn %s uart1 module\n", flag?"on":"off");
            if (flag) {
                GATE_ON(UART1);
            } else {
                GATE_OFF(UART1);
            }
            break;
        case MOD_UART2:
            PRINT_INFO("turn %s uart2 module\n", flag?"on":"off");
            if (flag) {
                GATE_ON(UART2);
            } else {
                GATE_OFF(UART2);
            }
            break;
        case MOD_UART3:
            PRINT_INFO("turn %s uart3 module\n", flag?"on":"off");
            if (flag) {
                GATE_ON(UART3);
            } else {
                GATE_OFF(UART3);
            }
            break;
        case MOD_ROM:
            PRINT_INFO("turn %s rom module\n", flag?"on":"off");
            if (flag) {
                GATE_ON(ROM_CLK);
            } else {
                GATE_OFF(ROM_CLK);
            }
            break;
        case MOD_EFUSE:
            PRINT_INFO("turn %s efuse module\n", flag?"on":"off");
            if (flag) {
                GATE_ON(EFUSE);
            } else {
                GATE_OFF(EFUSE);
            }
            break;
        case MOD_RANDOM_NUM_GEN:
            PRINT_INFO("turn %s random_num_gen module\n", flag?"on":"off");
            if (flag) {
                GATE_ON(RANDOM_NUM_GEN);
            } else {
                GATE_OFF(RANDOM_NUM_GEN);
            }
            break;
        case MOD_ETHERNET:
            PRINT_INFO("turn %s ethernet module\n", flag?"on":"off");
            if (flag) {
                GATE_ON(ETHERNET);
            } else {
                GATE_OFF(ETHERNET);
            }
            break;
        case MOD_MEDIA_CPU:
            PRINT_INFO("trun %s Audio DSP\n", flag? " on" : "off");
            if(flag){
                GATE_ON(MEDIA_CPU);
            }else{
                 GATE_OFF(MEDIA_CPU);
            }
            break;
        case MOD_GE2D:
            PRINT_INFO("trun %s GE2D\n", flag? " on" : "off");
            if(flag){
                GATE_ON(GE2D);
            }else{
                GATE_OFF(GE2D);
            }
            break;
        case MOD_VIDEO_IN:
            PRINT_INFO("trun %s video_in\n", flag? " on" : "off");
            if(flag){
                GATE_ON(VIDEO_IN);
            }else{
                GATE_OFF(VIDEO_IN);
            }
            break;
        case MOD_VIU2:
            PRINT_INFO("trun %s viu2\n", flag? " on" : "off");
            if(flag){
                GATE_ON(VIU2);
            }else{
                GATE_OFF(VIU2);
            }
            break;
        case MOD_AUD_IN:
            PRINT_INFO("trun %s audio_in\n", flag? " on" : "off");
            #if 0
            if(flag){
                GATE_ON(AIU_ADC);
                GATE_ON(AIU_AUDIN_SCLK);
            }else{
                GATE_OFF(AIU_ADC);
                GATE_OFF(AIU_AUDIN_SCLK);
            }
            #endif
            break;
        case MOD_AUD_OUT:
            PRINT_INFO("trun %s audio_out\n", flag? " on" : "off");
            if(flag){

            }else{

            }
            break;
        case MOD_AHB:
            PRINT_INFO("trun %s ahb\n", flag? " on" : "off");
            if(flag){
                GATE_ON(AHB_ARB0);
                GATE_ON(AHB_BRIDGE);
                GATE_ON(AHB_DATA_BUS);
                GATE_ON(AHB_CONTROL_BUS);
            }else{
                GATE_OFF(AHB_ARB0);
                GATE_OFF(AHB_BRIDGE);
                GATE_OFF(AHB_DATA_BUS);
                GATE_OFF(AHB_CONTROL_BUS);
            }
            break;
        case MOD_DEMUX:
            PRINT_INFO("trun %s demux\n", flag? " on" : "off");
            if(flag){
                GATE_ON(DEMUX);
            }else{
                GATE_OFF(DEMUX);
            }
            break;
        case MOD_SMART_CARD:
            PRINT_INFO("trun %s smart card\n", flag? " on" : "off");
            if(flag){
                GATE_ON(SMART_CARD_MPEG_DOMAIN);
            }else{
                GATE_OFF(SMART_CARD_MPEG_DOMAIN);
            }
            break;
        case MOD_SDHC:
            PRINT_INFO("trun %s sdhc\n", flag? " on" : "off");
            if(flag){
                GATE_ON(SDHC);
            }else{
                GATE_OFF(SDHC);
            }
            break;
        case MOD_STREAM:
            PRINT_INFO("trun %s stream\n", flag? " on" : "off");
            if(flag){
                GATE_ON(STREAM);
            }else{
                GATE_OFF(STREAM);
            }
            break;
        case MOD_BLK_MOV:
            PRINT_INFO("trun %s blk_mov\n", flag? " on" : "off");
            if(flag){
                GATE_ON(BLK_MOV);
            }else{
                GATE_OFF(BLK_MOV);
            }
            break;
        case MOD_MISC_DVIN:
            PRINT_INFO("trun %s dvin\n", flag? " on" : "off");
            if(flag){
                GATE_ON(MISC_DVIN);
            }else{
                GATE_OFF(MISC_DVIN);
            }
            break;
        case MOD_MISC_RDMA:
            PRINT_INFO("trun %s rdma\n", flag? " on" : "off");
            if(flag){
                GATE_ON(MISC_RDMA);
            }else{
                GATE_OFF(MISC_RDMA);
            }
            break;
        case MOD_USB0:
            PRINT_INFO("trun %s rdma\n", flag? " on" : "off");
            if(flag){
                GATE_ON(USB0);
                GATE_ON(MISC_USB0_TO_DDR);
            }else{
                GATE_OFF(USB0);
                GATE_ON(MISC_USB0_TO_DDR);
            }
            break;
        case MOD_USB1:
            PRINT_INFO("trun %s rdma\n", flag? " on" : "off");
            if(flag){
                GATE_ON(USB1);
                GATE_ON(MISC_USB1_TO_DDR);
            }else{
                GATE_OFF(USB1);
                GATE_ON(MISC_USB1_TO_DDR);
            }
            break;
        case MOD_SDIO:
            PRINT_INFO("trun %s rdma\n", flag? " on" : "off");
            if(flag){
                GATE_ON(SDIO);
            }else{
                GATE_OFF(SDIO);
            }
            break;
        case MOD_VI_CORE:
            PRINT_INFO("trun %s vi core\n", flag? " on" : "off");
            if(flag){
                GATE_ON(VI_CORE);
            }else{
                GATE_OFF(VI_CORE);
            }
            break;
        case MOD_LED_PWM:
            PRINT_INFO("trun %s led pwm\n", flag? " on" : "off");
            if(flag){
                GATE_ON(LED_PWM);
            }else{
                GATE_OFF(LED_PWM);
            }
            break;
        default:
            PRINT_INFO("mod type not support\n");
            ret = -1;
            break;
    }
    return ret;
}
};

/* List of clock dividers present on S3C6410. */
DIV_CLOCKS(s3c6410_div_clks) __initdata = {
	DIV(ARMCLK, "armclk", "mout_apll", CLK_DIV0, 0, 4),
	DIV(DOUT_FIMC, "dout_fimc", "hclk", CLK_DIV1, 24, 4),
	DIV(DOUT_AUDIO2, "dout_audio2", "mout_audio2", CLK_DIV2, 24, 4),
};

/* List of clock gates present on all S3C64xx SoCs. */
GATE_CLOCKS(s3c64xx_gate_clks) __initdata = {
	GATE_BUS(HCLK_UHOST, "hclk_uhost", "hclk", HCLK_GATE, 29),
	GATE_BUS(HCLK_SECUR, "hclk_secur", "hclk", HCLK_GATE, 28),
	GATE_BUS(HCLK_SDMA1, "hclk_sdma1", "hclk", HCLK_GATE, 27),
	GATE_BUS(HCLK_SDMA0, "hclk_sdma0", "hclk", HCLK_GATE, 26),
	GATE_ON(HCLK_DDR1, "hclk_ddr1", "hclk", HCLK_GATE, 24),
	GATE_BUS(HCLK_USB, "hclk_usb", "hclk", HCLK_GATE, 20),
	GATE_BUS(HCLK_HSMMC2, "hclk_hsmmc2", "hclk", HCLK_GATE, 19),
	GATE_BUS(HCLK_HSMMC1, "hclk_hsmmc1", "hclk", HCLK_GATE, 18),
	GATE_BUS(HCLK_HSMMC0, "hclk_hsmmc0", "hclk", HCLK_GATE, 17),
	GATE_BUS(HCLK_MDP, "hclk_mdp", "hclk", HCLK_GATE, 16),
	GATE_BUS(HCLK_DHOST, "hclk_dhost", "hclk", HCLK_GATE, 15),
	GATE_BUS(HCLK_IHOST, "hclk_ihost", "hclk", HCLK_GATE, 14),
	GATE_BUS(HCLK_DMA1, "hclk_dma1", "hclk", HCLK_GATE, 13),
	GATE_BUS(HCLK_DMA0, "hclk_dma0", "hclk", HCLK_GATE, 12),
	GATE_BUS(HCLK_JPEG, "hclk_jpeg", "hclk", HCLK_GATE, 11),
	GATE_BUS(HCLK_CAMIF, "hclk_camif", "hclk", HCLK_GATE, 10),
	GATE_BUS(HCLK_SCALER, "hclk_scaler", "hclk", HCLK_GATE, 9),
	GATE_BUS(HCLK_2D, "hclk_2d", "hclk", HCLK_GATE, 8),
	GATE_BUS(HCLK_TV, "hclk_tv", "hclk", HCLK_GATE, 7),
	GATE_BUS(HCLK_POST0, "hclk_post0", "hclk", HCLK_GATE, 5),