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; }