INT32 wmt_ctrl_hw_pwr_on(P_WMT_CTRL_DATA pWmtCtrlData) { INT32 iret; /*psm should be enabled right after wmt_ic_init */ P_DEV_WMT pDev = &gDevWmt; if (osal_test_and_set_bit(WMT_STAT_PWR, &pDev->state)) { WMT_WARN_FUNC("already on\n"); iret = 0; } else { WMT_DBG_FUNC("off->on\n"); iret = wmt_plat_pwr_ctrl(FUNC_ON); } return iret; }
INT32 wmt_ctrl_ul_cmd ( P_DEV_WMT pWmtDev, const UCHAR *pCmdStr ) { INT32 waitRet = -1; P_OSAL_SIGNAL pCmdSignal; P_OSAL_EVENT pCmdReq; if (osal_test_and_set_bit(WMT_STAT_CMD, &pWmtDev->state)) { WMT_WARN_FUNC("cmd buf is occupied by (%s) \n", pWmtDev->cCmd); return -1; } /* indicate baud rate change to user space app */ #if 0 INIT_COMPLETION(pWmtDev->cmd_comp); pWmtDev->cmd_result = -1; strncpy(pWmtDev->cCmd, pCmdStr, NAME_MAX); pWmtDev->cCmd[NAME_MAX] = '\0'; wake_up_interruptible(&pWmtDev->cmd_wq); #endif pCmdSignal = &pWmtDev->cmdResp; osal_signal_init(pCmdSignal); pCmdSignal->timeoutValue = 2000; osal_strncpy(pWmtDev->cCmd, pCmdStr, NAME_MAX); pWmtDev->cCmd[NAME_MAX] = '\0'; pCmdReq = &pWmtDev->cmdReq; osal_trigger_event(&pWmtDev->cmdReq); WMT_DBG_FUNC("str(%s) request ok\n", pCmdStr); // waitRet = wait_for_completion_interruptible_timeout(&pWmtDev->cmd_comp, msecs_to_jiffies(2000)); waitRet = osal_wait_for_signal_timeout(pCmdSignal); WMT_LOUD_FUNC("wait signal iRet:%d\n", waitRet); if (0 == waitRet) { WMT_ERR_FUNC("wait signal timeout \n"); return -2; } WMT_INFO_FUNC("str(%s) result(%d)\n", pCmdStr, pWmtDev->cmdResult); return pWmtDev->cmdResult; }
INT32 wmt_ctrl_sdio_hw(P_WMT_CTRL_DATA pWmtCtrlData) { INT32 iRet = 0; UINT32 statBit = WMT_STAT_SDIO1_ON; P_DEV_WMT pDev = &gDevWmt; /* single instance */ WMT_SDIO_SLOT_NUM sdioSlotNum = pWmtCtrlData->au4CtrlData[0]; ENUM_FUNC_STATE funcState = pWmtCtrlData->au4CtrlData[1]; if ((WMT_SDIO_SLOT_INVALID == sdioSlotNum) || (WMT_SDIO_SLOT_MAX <= sdioSlotNum)) { WMT_WARN_FUNC("CTRL_SDIO_SLOT(%d) but invalid slot num \n", sdioSlotNum); return -1; } WMT_DBG_FUNC("WMT_CTRL_SDIO_HW (0x%x, %d)\n", sdioSlotNum, funcState); if (WMT_SDIO_SLOT_SDIO2 == sdioSlotNum) { statBit = WMT_STAT_SDIO2_ON; } if (funcState) { if (osal_test_and_set_bit(statBit, &pDev->state)) { WMT_WARN_FUNC("CTRL_SDIO_SLOT slotNum(%d) already ON \n", sdioSlotNum); //still return 0 iRet = 0; } else { iRet = wmt_plat_sdio_ctrl(sdioSlotNum, FUNC_ON); } } else { if (osal_test_and_clear_bit(statBit, &pDev->state)) { iRet = wmt_plat_sdio_ctrl(sdioSlotNum, FUNC_OFF); } else { WMT_WARN_FUNC("CTRL_SDIO_SLOT slotNum(%d) already OFF \n", sdioSlotNum); //still return 0 iRet = 0; } } return iRet; }