Example #1
0
INT32 wmt_ctrl_hw_pwr_off(P_WMT_CTRL_DATA pWmtCtrlData)
{
    INT32 iret;

    /*psm should be disabled before wmt_ic_deinit*/
    P_DEV_WMT pDev = &gDevWmt;
    if (osal_test_and_clear_bit(WMT_STAT_PWR, &pDev->state)) {
        WMT_DBG_FUNC("on->off\n");
        iret = wmt_plat_pwr_ctrl(FUNC_OFF);
    } else {
        WMT_WARN_FUNC("already off\n");
        iret = 0;
    }

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