static int
_mt_combo_plt_do_deep_idle(COMBO_IF src, int enter) {
    int ret = -1;

    const char *combo_if_name[] =
    {   "COMBO_IF_UART",
        "COMBO_IF_MSDC"
    };

    if(src != COMBO_IF_UART && src!= COMBO_IF_MSDC){
        CMB_STUB_LOG_WARN("src = %d is error\n", src);
        return ret;
    }

    if(src >= 0 && src < COMBO_IF_MAX){
        CMB_STUB_LOG_INFO("src = %s, to enter deep idle? %d \n",
            combo_if_name[src],
            enter);
    }

    /*TODO: For Common SDIO configuration, we need to do some judgement between STP and WIFI
            to decide if the msdc will enter deep idle safely*/

    switch(src){
        case COMBO_IF_UART:
            if(enter == 0){
                //clr_device_working_ability(MT65XX_PDN_PERI_UART3, DEEP_IDLE_STATE);
                //disable_dpidle_by_bit(MT65XX_PDN_PERI_UART2);
                ret = mtk_uart_pdn_enable(wmt_uart_port_desc, 0);
                if (ret < 0) {
                    CMB_STUB_LOG_WARN("[CMB] %s exit deep idle failed\n", wmt_uart_port_desc);
                }
            } else {
                //set_device_working_ability(MT65XX_PDN_PERI_UART3, DEEP_IDLE_STATE);
                //enable_dpidle_by_bit(MT65XX_PDN_PERI_UART2);
                ret = mtk_uart_pdn_enable(wmt_uart_port_desc, 1);
                if (ret < 0) {
                    CMB_STUB_LOG_WARN("[CMB] %s enter deep idle failed\n", wmt_uart_port_desc);
                }
            }
            ret = 0;
            break;

        case COMBO_IF_MSDC:
            if(enter == 0){
                //clr_device_working_ability(MT65XX_PDN_PERI_MSDC2, DEEP_IDLE_STATE);
            } else {
                //set_device_working_ability(MT65XX_PDN_PERI_MSDC2, DEEP_IDLE_STATE);
            }
            ret = 0;
            break;

        default:
            ret = -1;
            break;
    }

    return ret;
}
static int
_mt_combo_plt_do_deep_idle(COMBO_IF src, int enter) {
    int ret = -1;

#if 0
    const char *combo_if_name[] =
    {   "COMBO_IF_UART",
        "COMBO_IF_MSDC"
    };
#endif

    if(src != COMBO_IF_UART && src!= COMBO_IF_MSDC && src != COMBO_IF_BTIF){
        CMB_STUB_LOG_WARN("src = %d is error\n", src);
        return ret;
    }
#if 0
    if(src >= 0 && src < COMBO_IF_MAX){
        CMB_STUB_LOG_INFO("src = %s, to enter deep idle? %d \n",
            combo_if_name[src],
            enter);
    }
#endif
    /*TODO: For Common SDIO configuration, we need to do some judgement between STP and WIFI
            to decide if the msdc will enter deep idle safely*/

    switch(src){
        case COMBO_IF_UART:
            if(enter == 0){
                //clr_device_working_ability(MT65XX_PDN_PERI_UART3, DEEP_IDLE_STATE);
                //disable_dpidle_by_bit(MT65XX_PDN_PERI_UART2);
#ifdef MTK_WCN_COMBO_CHIP_SUPPORT
                ret = mtk_uart_pdn_enable(wmt_uart_port_desc, 0);
                if (ret < 0) {
                    CMB_STUB_LOG_WARN("[CMB] %s exit deep idle failed\n", wmt_uart_port_desc);
                }
#endif
            } else {
                //set_device_working_ability(MT65XX_PDN_PERI_UART3, DEEP_IDLE_STATE);
                //enable_dpidle_by_bit(MT65XX_PDN_PERI_UART2);
#ifdef MTK_WCN_COMBO_CHIP_SUPPORT
                ret = mtk_uart_pdn_enable(wmt_uart_port_desc, 1);
                if (ret < 0) {
                    CMB_STUB_LOG_WARN("[CMB] %s enter deep idle failed\n", wmt_uart_port_desc);
                }
#endif
            }
            ret = 0;
            break;

        case COMBO_IF_MSDC:
            if(enter == 0){
                //clr_device_working_ability(MT65XX_PDN_PERI_MSDC2, DEEP_IDLE_STATE);
            } else {
                //set_device_working_ability(MT65XX_PDN_PERI_MSDC2, DEEP_IDLE_STATE);
            }
            ret = 0;
            break;
			
		case COMBO_IF_BTIF:
			if(cmb_stub_deep_idle_ctrl_cb)
			{
				ret = (*cmb_stub_deep_idle_ctrl_cb)(enter);
			}else
			{
				CMB_STUB_LOG_WARN("NULL function pointer\n");
			}
			if(ret)
			{
				CMB_STUB_LOG_WARN("%s deep idle fail(%d)\n",enter == 1?"enter":"exit",ret);
			}else
			{
				CMB_STUB_LOG_DBG("%s deep idle ok(%d)\n",enter == 1?"enter":"exit",ret);
			}
			
            break;

        default:
            ret = -1;
            break;
    }

    return ret;
}