INT32  wmt_ctrl_stp_close(P_WMT_CTRL_DATA pWmtCtrlData)
{
    P_DEV_WMT pDev = &gDevWmt; /* single instance */
    INT32 iRet = 0;
    /* un-register to STP-core for rx */
    iRet = mtk_wcn_stp_register_event_cb(WMT_TASK_INDX, NULL); /* mtk_wcn_stp_register_event_cb */
    if (iRet) {
        WMT_WARN_FUNC("stp_reg cb unregister fail(%d)\n", iRet);
        return -1;
    }

	/*un-register rxcb to btif*/
	iRet = mtk_wcn_stp_rxcb_register(NULL);
	if(iRet){
		WMT_WARN_FUNC("mtk_wcn_stp_rxcb_unregister fail(%d)\n", iRet);
        return -2;
	}

	iRet = mtk_wcn_stp_close_btif();
	if(iRet){
		WMT_WARN_FUNC("mtk_wcn_stp_close_btif fail(%d)\n", iRet);
        return -3;
	}
    osal_clear_bit(WMT_STAT_STP_OPEN, &pDev->state);

    return 0;
}
INT32  wmt_ctrl_stp_conf(P_WMT_CTRL_DATA pWmtCtrlData)
{
    INT32 iRet = -1;
    P_DEV_WMT pDev = &gDevWmt; /* single instance */
    UINT32 type;
    UINT32 value;
    if (!osal_test_bit(WMT_STAT_STP_OPEN, &pDev->state)) {
        WMT_WARN_FUNC("CTRL_STP_ENABLE but invalid Handle of WmtStp \n");
        return -1;
    }

    type = pWmtCtrlData->au4CtrlData[0];
    value = pWmtCtrlData->au4CtrlData[1];
    iRet = wmt_ctrl_stp_conf_ex(type, value);

    if (!iRet) {
        if (WMT_STP_CONF_EN == type) {
            if (value) {
                osal_set_bit(WMT_STAT_STP_EN, &pDev->state);
                WMT_DBG_FUNC("enable STP\n");
            }
            else {
                osal_clear_bit(WMT_STAT_STP_EN, &pDev->state);
                WMT_DBG_FUNC("disable STP\n");
            }
        }
    }

    return iRet;
}
Example #3
0
INT32 wmt_func_gps_off(P_WMT_IC_OPS pOps, P_WMT_GEN_CONF pConf)
{
    INT32 iRet = 0;
	UINT32 ctrlPa1 = 0;
	UINT32 ctrlPa2 = 0;
	
    iRet = wmt_func_gps_pre_off(pOps, pConf);
    if (0 == iRet)
    {
        iRet = wmt_func_gps_ctrl(FUNC_OFF);
		if(!iRet)
		{
				osal_clear_bit(WMT_GPS_ON, &gBtWifiGpsState);
				if((osal_test_bit(WMT_BT_ON,&gBtWifiGpsState)) || (osal_test_bit(WMT_WIFI_ON,&gBtWifiGpsState)))
				{
					//send msg to GPS native for stop sending de-sense CMD
					ctrlPa1 = 0;
					ctrlPa2 = 0;
					wmt_core_ctrl(WMT_CTRL_BGW_DESENSE_CTRL,&ctrlPa1,&ctrlPa2);
				}
		}
    }
    return iRet;

}
INT32  wmt_ctrl_stp_close(P_WMT_CTRL_DATA pWmtCtrlData)
{
    P_DEV_WMT pDev = &gDevWmt; /* single instance */
    INT32 iRet = 0;
    UCHAR cmdStr[NAME_MAX + 1] = {0};
    /* un-register to STP-core for rx */
    iRet = mtk_wcn_stp_register_event_cb(WMT_TASK_INDX, NULL); /* mtk_wcn_stp_register_event_cb */
    if (iRet) {
        WMT_WARN_FUNC("stp_reg cb unregister fail(%d)\n", iRet);
        return -1;
    }

    if (WMT_HIF_UART == pDev->rWmtHifConf.hifType) {

        osal_snprintf(cmdStr, NAME_MAX, "close_stp");

        iRet = wmt_ctrl_ul_cmd(pDev, cmdStr);
        if (iRet) {
            WMT_WARN_FUNC("wmt_ctrl_ul_cmd fail(%d)\n", iRet);
            return -2;
        }
    }

    osal_clear_bit(WMT_STAT_STP_OPEN, &pDev->state);

    return 0;
}
Example #5
0
INT32 wmt_func_bt_off(P_WMT_IC_OPS pOps, P_WMT_GEN_CONF pConf)
{
    //return wmt_func_bt_ctrl(FUNC_OFF);
    INT32 iRet1 = -1;
	INT32 iRet2 = -1;
   	UINT32 ctrlPa1;
   	UINT32 ctrlPa2;
    iRet1 = wmt_core_func_ctrl_cmd(WMTDRV_TYPE_BT, MTK_WCN_BOOL_FALSE);
	if(iRet1){
		WMT_ERR_FUNC("wmt-func: wmt_core_func_ctrl_cmd(bt_off) failed(%d)\n",iRet1);
	}
	ctrlPa1 = BT_PALDO;
	ctrlPa2 = PALDO_OFF;
	iRet2 = wmt_core_ctrl(WMT_CTRL_SOC_PALDO_CTRL,&ctrlPa1,&ctrlPa2);
	if(iRet2){
		WMT_ERR_FUNC("wmt-func: wmt_ctrl_soc_paldo_ctrl(bt_off) failed(%d)\n",iRet2);
	}
	if(iRet1 + iRet2)
	{
		return -1;
	}

	osal_clear_bit(WMT_BT_ON,&gBtWifiGpsState);
	if((!osal_test_bit(WMT_WIFI_ON,&gBtWifiGpsState)) && (osal_test_bit(WMT_GPS_ON,&gBtWifiGpsState)))
	{
		//send msg to GPS native for stopping send de-sense CMD
		ctrlPa1 = 0;
		ctrlPa2 = 0;
		wmt_core_ctrl(WMT_CTRL_BGW_DESENSE_CTRL,&ctrlPa1,&ctrlPa2);
	}
	return 0;
}
Example #6
0
INT32 wmt_func_bt_off(P_WMT_IC_OPS pOps, P_WMT_GEN_CONF pConf)
{
	/* return wmt_func_bt_ctrl(FUNC_OFF); */
	INT32 iRet1 = -1;
	INT32 iRet2 = -1;
	UINT32 ctrlPa1;
	UINT32 ctrlPa2;
	iRet1 = wmt_core_func_ctrl_cmd(WMTDRV_TYPE_BT, MTK_WCN_BOOL_FALSE);
	if (iRet1)
		WMT_ERR_FUNC("wmt-func: wmt_core_func_ctrl_cmd(bt_off) failed(%d)\n", iRet1);

	ctrlPa1 = BT_PALDO;
	ctrlPa2 = PALDO_OFF;
	iRet2 = wmt_core_ctrl(WMT_CTRL_SOC_PALDO_CTRL, &ctrlPa1, &ctrlPa2);
	if (iRet2)
		WMT_ERR_FUNC("wmt-func: wmt_ctrl_soc_paldo_ctrl(bt_off) failed(%d)\n", iRet2);

	if (iRet1 + iRet2) {
		/*do coredump when bt off fail */
		wmt_core_set_coredump_state(DRV_STS_FUNC_ON);
		ctrlPa1 = WMTDRV_TYPE_BT;
		ctrlPa2 = 32;
		wmt_core_ctrl(WMT_CTRL_EVT_ERR_TRG_ASSERT, &ctrlPa1, &ctrlPa2);
		return -1;
	}

	osal_clear_bit(WMT_BT_ON, &gBtWifiGpsState);
	if ((!osal_test_bit(WMT_WIFI_ON, &gBtWifiGpsState)) && (osal_test_bit(WMT_GPS_ON, &gBtWifiGpsState))) {
		/* send msg to GPS native for stopping send de-sense CMD */
		ctrlPa1 = 0;
		ctrlPa2 = 0;
		wmt_core_ctrl(WMT_CTRL_BGW_DESENSE_CTRL, &ctrlPa1, &ctrlPa2);
	}
	return 0;
}
Example #7
0
INT32 wmt_func_gps_off(P_WMT_IC_OPS pOps, P_WMT_GEN_CONF pConf)
{
	INT32 iRet = 0;
	UINT32 ctrlPa1 = 0;
	UINT32 ctrlPa2 = 0;
	UINT8 co_clock_type = (pConf->co_clock_flag & 0x0f);

	iRet = wmt_func_gps_pre_off(pOps, pConf);
	if (0 == iRet) {
		iRet = wmt_func_gps_ctrl(FUNC_OFF);
		if (!iRet) {
			osal_clear_bit(WMT_GPS_ON, &gBtWifiGpsState);
			if ((osal_test_bit(WMT_BT_ON, &gBtWifiGpsState))
			    || (osal_test_bit(WMT_WIFI_ON, &gBtWifiGpsState))) {
				/* send msg to GPS native for stop sending de-sense CMD */
				ctrlPa1 = 0;
				ctrlPa2 = 0;
				wmt_core_ctrl(WMT_CTRL_BGW_DESENSE_CTRL, &ctrlPa1, &ctrlPa2);
			}
		}
	}

	if ((co_clock_type) && (0 == pConf->wmt_gps_lna_enable)) {	/* use SOC external LNA */
		if (osal_test_bit(WMT_FM_ON, &gGpsFmState))
			WMT_INFO_FUNC("FM is still on, do not turn off LDO VCN28\n");
		else {
			ctrlPa1 = GPS_PALDO;
			ctrlPa2 = PALDO_OFF;
			wmt_core_ctrl(WMT_CTRL_SOC_PALDO_CTRL, &ctrlPa1, &ctrlPa2);
		}

		osal_clear_bit(WMT_GPS_ON, &gGpsFmState);
	}

	return iRet;

}
Example #8
0
INT32 wmt_func_wifi_off(P_WMT_IC_OPS pOps, P_WMT_GEN_CONF pConf)
{
	int iRet = 0;

	UINT32 ctrlPa1 = 0;
	UINT32 ctrlPa2 = 0;
	
	if(NULL != mtk_wcn_wlan_remove){
		
		WMT_INFO_FUNC("WMT-FUNC: wmt wlan func on befor wlan remove\n");
		iRet = (*mtk_wcn_wlan_remove)();
		if(iRet){
			WMT_ERR_FUNC("WMT-FUNC: wmt call wlan remove fail(%d)\n",iRet);
			iRet = -1;
		}else{
			WMT_INFO_FUNC("WMT-FUNC: wmt call wlan remove ok\n");
		}
	}else{
		WMT_ERR_FUNC("WMT-FUNC: null pointer mtk_wcn_wlan_remove\n");
		iRet = -2;
	}

	if(!iRet)
	{
		osal_clear_bit(WMT_WIFI_ON,&gBtWifiGpsState);
		if((!osal_test_bit(WMT_BT_ON,&gBtWifiGpsState)) && (osal_test_bit(WMT_GPS_ON,&gBtWifiGpsState)))
		{
			//send msg to GPS native for stopping send de-sense CMD
			ctrlPa1 = 0;
			ctrlPa2 = 0;
			wmt_core_ctrl(WMT_CTRL_BGW_DESENSE_CTRL,&ctrlPa1,&ctrlPa2);
		}
	}
	return iRet; 
#if 0
    return wmt_func_wifi_ctrl(FUNC_OFF);
#endif
}
Example #9
0
INT32 wmt_func_fm_off(P_WMT_IC_OPS pOps, P_WMT_GEN_CONF pConf)
{
	/* return wmt_func_fm_ctrl(FUNC_OFF); */
	UINT32 ctrlPa1 = 0;
	UINT32 ctrlPa2 = 0;
	INT32 iRet = -1;
	UINT8 co_clock_type = (pConf->co_clock_flag & 0x0f);

	iRet = wmt_core_func_ctrl_cmd(WMTDRV_TYPE_FM, MTK_WCN_BOOL_FALSE);

	if (co_clock_type) {
		if (osal_test_bit(WMT_GPS_ON, &gGpsFmState)) {
			WMT_INFO_FUNC("GPS is still on, do not turn off LDO VCN28\n");
		} else {
			ctrlPa1 = FM_PALDO;
			ctrlPa2 = PALDO_OFF;
			wmt_core_ctrl(WMT_CTRL_SOC_PALDO_CTRL, &ctrlPa1, &ctrlPa2);
		}

		osal_clear_bit(WMT_FM_ON, &gGpsFmState);
	}

	return iRet;
}
INT32  wmt_ctrl_sdio_func(P_WMT_CTRL_DATA pWmtCtrlData)
{
    INT32 iRet = -1;
    UINT32 statBit = WMT_STAT_SDIO_WIFI_ON;
    INT32 retry = 10;
    P_DEV_WMT pDev = &gDevWmt; /* single instance */
    WMT_SDIO_FUNC_TYPE sdioFuncType = pWmtCtrlData->au4CtrlData[0];
    UINT32 u4On = pWmtCtrlData->au4CtrlData[1];

    if (WMT_SDIO_FUNC_MAX <= sdioFuncType) {
        WMT_ERR_FUNC("CTRL_SDIO_FUNC, invalid func type (%d) \n", sdioFuncType);
        return -1;
    }

    if (WMT_SDIO_FUNC_STP == sdioFuncType) {
        statBit = WMT_STAT_SDIO_STP_ON;
    }

    if (u4On) {
        if (osal_test_bit(statBit, &pDev->state)) {
            WMT_WARN_FUNC("CTRL_SDIO_FUNC(%d) but already ON \n", sdioFuncType);
            iRet = 0;
        }
        else {
            while (retry-- > 0 && iRet != 0) {
                if (iRet) {
                    /* sleep 150ms before sdio slot ON ready */
                    osal_sleep_ms(150);
                }
                iRet = mtk_wcn_hif_sdio_wmt_control(sdioFuncType, MTK_WCN_BOOL_TRUE);
                if (HIF_SDIO_ERR_NOT_PROBED == iRet) {
                    /* not probed case, retry */
                    continue;
                }
                else if (HIF_SDIO_ERR_CLT_NOT_REG == iRet){
                    /* For WiFi, client not reg yet, no need to retry, WiFi function can work any time when wlan.ko is insert into system*/
                    iRet = 0;
                }
                else
                {
                    /* other fail cases, stop */
                    break;
                }
            }
            if (!retry || iRet) {
                WMT_ERR_FUNC("mtk_wcn_hif_sdio_wmt_control(%d, TRUE) fail(%d) retry(%d)\n", sdioFuncType, iRet, retry);
            }
            else
            {
                osal_set_bit(statBit, &pDev->state);
            }
        }
    }
    else  {
        if (osal_test_bit(statBit, &pDev->state)) {
            iRet = mtk_wcn_hif_sdio_wmt_control(sdioFuncType, MTK_WCN_BOOL_FALSE);
            if (iRet) {
                WMT_ERR_FUNC("mtk_wcn_hif_sdio_wmt_control(%d, FALSE) fail(%d)\n", sdioFuncType, iRet);
            }
            /*any way, set to OFF state*/
            osal_clear_bit(statBit, &pDev->state);
        }
        else {
            WMT_WARN_FUNC("CTRL_SDIO_FUNC(%d) but already OFF \n", sdioFuncType);
            iRet = 0;
        }
    }

    return iRet;
}