Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
INT32  wmt_ctrl_stp_open(P_WMT_CTRL_DATA pWmtCtrlData)
{
    P_DEV_WMT pDev = &gDevWmt; /* single instance */
    INT32 iRet;

	iRet = mtk_wcn_stp_open_btif();
	if(iRet){
		WMT_WARN_FUNC("mtk_wcn_stp_open_btif fail(%d)\n", iRet);
        return -1;
	}

	/*register stp rx call back to btif*/
	iRet = mtk_wcn_stp_rxcb_register((MTK_WCN_BTIF_RX_CB)mtk_wcn_stp_parser_data);
	if(iRet){
		WMT_WARN_FUNC("mtk_wcn_stp_rxcb_register fail(%d)\n", iRet);
        return -2;
	}
    /* register to STP-core for rx */
    iRet = mtk_wcn_stp_register_event_cb(WMT_TASK_INDX, wmt_dev_rx_event_cb); /* mtk_wcn_stp_register_event_cb */
    if (iRet) {
        WMT_WARN_FUNC("stp_reg cb fail(%d)\n", iRet);
        return -3;
    }

    osal_set_bit(WMT_STAT_STP_OPEN, &pDev->state);

#if 0
	iRet = mtk_wcn_stp_lpbk_ctrl(1);
#endif

    return 0;
}
Ejemplo n.º 3
0
static int GPS_close(struct inode *inode, struct file *file)
{
    printk("%s: major %d minor %d (pid %d)\n", __func__,
        imajor(inode),
        iminor(inode),
        current->pid
        );
	if(retflag == 1)
	{
		GPS_WARN_FUNC("whole chip resetting...\n");
		return -EPERM;
	}
    /*Flush Rx Queue*/
    mtk_wcn_stp_register_event_cb(GPS_TASK_INDX, 0x0);  // unregister event callback function
    mtk_wcn_wmt_msgcb_unreg(WMTDRV_TYPE_GPS);
    
    if (MTK_WCN_BOOL_FALSE == mtk_wcn_wmt_func_off(WMTDRV_TYPE_GPS)) {
        GPS_WARN_FUNC("WMT turn off GPS fail!\n");
        return -EIO;    //mostly, native programer does not care this return vlaue, but we still return error code.
    }
    else {       
        GPS_INFO_FUNC("WMT turn off GPS OK!\n");
    }

    return 0;
}
Ejemplo n.º 4
0
INT32  wmt_ctrl_stp_open(P_WMT_CTRL_DATA pWmtCtrlData)
{
    P_DEV_WMT pDev = &gDevWmt; /* single instance */
    INT32 iRet;
    UCHAR cmdStr[NAME_MAX + 1] = {0};

    if (WMT_HIF_UART == pDev->rWmtHifConf.hifType) {
        osal_snprintf(cmdStr, NAME_MAX, "open_stp");
        iRet = wmt_ctrl_ul_cmd(pDev, cmdStr);
        if (iRet) {
            WMT_WARN_FUNC("wmt_ctrl_ul_cmd fail(%d)\n", iRet);
            return -1;
        }
    }

    /* register to STP-core for rx */
    iRet = mtk_wcn_stp_register_event_cb(WMT_TASK_INDX, wmt_dev_rx_event_cb); /* mtk_wcn_stp_register_event_cb */
    if (iRet) {
        WMT_WARN_FUNC("stp_reg cb fail(%d)\n", iRet);
        return -2;
    }

    osal_set_bit(WMT_STAT_STP_OPEN, &pDev->state);

    return 0;
}
Ejemplo n.º 5
0
INT32 wmt_ctrl_stp_close(P_WMT_CTRL_DATA pWmtCtrlData)
{
    P_DEV_WMT pDev = &gDevWmt;	/* single instance */
    INT32 iRet = 0;
    UINT8 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;
}
static int BT_open(struct inode *inode, struct file *file)
{
    BT_INFO_FUNC("%s: major %d minor %d (pid %d)\n", __func__,
        imajor(inode),
        iminor(inode),
        current->pid
        );

#if 1 /* GeorgeKuo: turn on function before check stp ready */
     /* turn on BT */
    if (MTK_WCN_BOOL_FALSE == mtk_wcn_wmt_func_on(WMTDRV_TYPE_BT)) {
        BT_WARN_FUNC("WMT turn on BT fail!\n");
        return -ENODEV;
    }else{
        retflag = 0;
        mtk_wcn_wmt_msgcb_reg(WMTDRV_TYPE_BT, bt_cdev_rst_cb);
        BT_INFO_FUNC("WMT register BT rst cb!\n");
    }
#endif

    if (mtk_wcn_stp_is_ready()) {
#if 0 /* GeorgeKuo: turn on function before check stp ready */
         /* turn on BT */
        if (MTK_WCN_BOOL_FALSE == mtk_wcn_wmt_func_on(WMTDRV_TYPE_BT)) {
            BT_WARN_FUNC("WMT turn on BT fail!\n");
            return -ENODEV;
        }
#endif
        mtk_wcn_stp_set_bluez(0);

        BT_INFO_FUNC("Now it's in MTK Bluetooth Mode\n");
        BT_INFO_FUNC("WMT turn on BT OK!\n");
        BT_INFO_FUNC("STP is ready!\n");
        platform_load_nvram_data(BT_NVRAM_CUSTOM_NAME,
            (char *)&g_nvram_btdata, sizeof(g_nvram_btdata));

        BT_INFO_FUNC("Read NVRAM : BD address %02x%02x%02x%02x%02x%02x Cap 0x%02x Codec 0x%02x\n",
            g_nvram_btdata[0], g_nvram_btdata[1], g_nvram_btdata[2],
            g_nvram_btdata[3], g_nvram_btdata[4], g_nvram_btdata[5],
            g_nvram_btdata[6], g_nvram_btdata[7]);

        mtk_wcn_stp_register_event_cb(BT_TASK_INDX, BT_event_cb);
		BT_INFO_FUNC("mtk_wcn_stp_register_event_cb finish\n");
    }
    else {
        BT_ERR_FUNC("STP is not ready\n");

        /*return error code*/
        return -ENODEV;
    }

//    init_MUTEX(&wr_mtx);
    sema_init(&wr_mtx, 1);
//    init_MUTEX(&rd_mtx);
    sema_init(&rd_mtx, 1);
	BT_INFO_FUNC("finish\n");

    return 0;
}
Ejemplo n.º 7
0
static int BT_init(void)
{
	dev_t dev = MKDEV(BT_major, 0);
	INT32 alloc_ret = 0;
	INT32 cdev_err = 0;
#if REMOVE_MK_NODE
	struct device *stpbt_dev = NULL;
#endif

	/*static allocate chrdev */
	alloc_ret = register_chrdev_region(dev, 1, BT_DRIVER_NAME);
	if (alloc_ret) {
		BT_ERR_FUNC("fail to register chrdev\n");
		return alloc_ret;
	}

	cdev_init(&BT_cdev, &BT_fops);
	BT_cdev.owner = THIS_MODULE;

	cdev_err = cdev_add(&BT_cdev, dev, BT_devs);
	if (cdev_err)
		goto error;
#if REMOVE_MK_NODE		/* mknod replace */

	stpbt_class = class_create(THIS_MODULE, "stpbt");
	if (IS_ERR(stpbt_class))
		goto error;
	stpbt_dev = device_create(stpbt_class, NULL, dev, NULL, "stpbt");
	if (IS_ERR(stpbt_dev))
		goto error;
#endif

	BT_INFO_FUNC("%s driver(major %d) installed.\n", BT_DRIVER_NAME, BT_major);
	retflag = 0;
	mtk_wcn_stp_register_event_cb(BT_TASK_INDX, NULL);

	/* init wait queue */
	init_waitqueue_head(&(inq));

	return 0;

error:

#if REMOVE_MK_NODE
	if (!IS_ERR(stpbt_dev))
		device_destroy(stpbt_class, dev);
	if (!IS_ERR(stpbt_class)) {
		class_destroy(stpbt_class);
		stpbt_class = NULL;
	}
#endif
	if (cdev_err == 0)
		cdev_del(&BT_cdev);

	if (alloc_ret == 0)
		unregister_chrdev_region(dev, BT_devs);

	return -1;
}
Ejemplo n.º 8
0
fm_s32 fm_request_eint(void (*parser)(void))
{
    WCN_DBG(FM_NTC|EINT,"%s\n", __func__);

    mtk_wcn_stp_register_event_cb(FM_TASK_INDX, parser);
    
	return 0;
}
static void BT_exit(void)
{
    dev_t dev = MKDEV(BT_major, 0);
    retflag = 0;
    mtk_wcn_stp_register_event_cb(BT_TASK_INDX, NULL);  // unregister event callback function

    cdev_del(&BT_cdev);
    unregister_chrdev_region(dev, BT_devs);

    BT_INFO_FUNC("%s driver removed.\n", BT_DRIVER_NAME);
}
Ejemplo n.º 10
0
static void BT_exit(void)
{
	dev_t dev = MKDEV(BT_major, 0);
	retflag = 0;
	mtk_wcn_stp_register_event_cb(BT_TASK_INDX, NULL);	/* unregister event callback function */
#if REMOVE_MK_NODE
	device_destroy(stpbt_class, dev);
	class_destroy(stpbt_class);
	stpbt_class = NULL;
#endif

	cdev_del(&BT_cdev);
	unregister_chrdev_region(dev, BT_devs);

	BT_INFO_FUNC("%s driver removed.\n", BT_DRIVER_NAME);
}
Ejemplo n.º 11
0
static int GPS_open(struct inode *inode, struct file *file)
{
    printk("%s: major %d minor %d (pid %d)\n", __func__,
        imajor(inode),
        iminor(inode),
        current->pid
        );
	if(retflag == 1)
	{
		GPS_WARN_FUNC("whole chip resetting...\n");
		return -EPERM;
	}
#if 1 /* GeorgeKuo: turn on function before check stp ready */
     /* turn on BT */

    if (MTK_WCN_BOOL_FALSE == mtk_wcn_wmt_func_on(WMTDRV_TYPE_GPS)) {
        GPS_WARN_FUNC("WMT turn on GPS fail!\n");
        return -ENODEV;
    } else {
        mtk_wcn_wmt_msgcb_reg(WMTDRV_TYPE_GPS, gps_cdev_rst_cb);
        GPS_INFO_FUNC("WMT turn on GPS OK!\n");
    }
#endif

    if (mtk_wcn_stp_is_ready()) {
#if 0
        if (MTK_WCN_BOOL_FALSE == mtk_wcn_wmt_func_on(WMTDRV_TYPE_GPS)) {
            GPS_WARN_FUNC("WMT turn on GPS fail!\n");
            return -ENODEV;
        }
        GPS_INFO_FUNC("WMT turn on GPS OK!\n");
#endif
        mtk_wcn_stp_register_event_cb(GPS_TASK_INDX, GPS_event_cb);
    }  else {        
        GPS_ERR_FUNC("STP is not ready, Cannot open GPS Devices\n\r");
        
        /*return error code*/
        return -ENODEV;
    }

    //init_MUTEX(&wr_mtx);
    sema_init(&wr_mtx, 1);
    //init_MUTEX(&rd_mtx);
    sema_init(&rd_mtx, 1);
    
    return 0;
}
Ejemplo n.º 12
0
static int BT_close(struct inode *inode, struct file *file)
{
	BT_INFO_FUNC("%s: major %d minor %d (pid %d)\n", __func__, imajor(inode), iminor(inode), current->pid);
	if (current->pid == 1)
		return 0;
	retflag = 0;
	mtk_wcn_wmt_msgcb_unreg(WMTDRV_TYPE_BT);
	mtk_wcn_stp_register_event_cb(BT_TASK_INDX, NULL);

	if (MTK_WCN_BOOL_FALSE == mtk_wcn_wmt_func_off(WMTDRV_TYPE_BT)) {
		BT_INFO_FUNC("WMT turn off BT fail!\n");
		return -EIO;	/* mostly, native programmer will not check this return value. */
	} else {
		BT_INFO_FUNC("WMT turn off BT OK!\n");
	}

	return 0;
}
Ejemplo n.º 13
0
static int BT_open(struct inode *inode, struct file *file)
{
	BT_INFO_FUNC("%s: major %d minor %d pid %d\n", __func__, imajor(inode), iminor(inode), current->pid);
	if (current->pid == 1)
		return 0;

	/* Turn on BT */
	if (MTK_WCN_BOOL_FALSE == mtk_wcn_wmt_func_on(WMTDRV_TYPE_BT)) {
		BT_WARN_FUNC("WMT turn on BT fail!\n");
		return -ENODEV;
	}

	BT_INFO_FUNC("WMT turn on BT OK!\n");
	rstflag = 0;

	if (mtk_wcn_stp_is_ready()) {

		mtk_wcn_stp_set_bluez(0);

		BT_INFO_FUNC("Now it's in MTK Bluetooth Mode\n");
		BT_INFO_FUNC("STP is ready!\n");

		BT_DBG_FUNC("Register BT event callback!\n");
		mtk_wcn_stp_register_event_cb(BT_TASK_INDX, BT_event_cb);
	} else {
		BT_ERR_FUNC("STP is not ready\n");
		mtk_wcn_wmt_func_off(WMTDRV_TYPE_BT);
		return -ENODEV;
	}

	BT_DBG_FUNC("Register BT reset callback!\n");
	mtk_wcn_wmt_msgcb_reg(WMTDRV_TYPE_BT, bt_cdev_rst_cb);

/* init_MUTEX(&wr_mtx); */
	sema_init(&wr_mtx, 1);
/* init_MUTEX(&rd_mtx); */
	sema_init(&rd_mtx, 1);
	BT_INFO_FUNC("%s: finish\n", __func__);

	return 0;
}
static void BT_exit(void)
{
    dev_t dev = MKDEV(BT_major, 0);
    retflag = 0;
    mtk_wcn_stp_register_event_cb(BT_TASK_INDX, NULL);  // unregister event callback function
#if WMT_CREATE_NODE_DYNAMIC
	if(bt_dev)
	{
		device_destroy(bt_class,dev);
		bt_dev = NULL;
	}
	if(bt_class)
	{
		class_destroy(bt_class);
		bt_class = NULL;
	}
#endif
    cdev_del(&BT_cdev);
    unregister_chrdev_region(dev, BT_devs);

    BT_INFO_FUNC("%s driver removed.\n", BT_DRIVER_NAME);
}
Ejemplo n.º 15
0
static int BT_init(void)
{
	dev_t dev = MKDEV(BT_major, 0);
	int alloc_ret = 0;
	int cdev_err = 0;

/*static allocate chrdev*/
	alloc_ret = register_chrdev_region(dev, 1, BT_DRIVER_NAME);
	if (alloc_ret) {
		BT_ERR_FUNC("fail to register chrdev\n");
		return alloc_ret;
	}

	cdev_init(&BT_cdev, &BT_fops);
	BT_cdev.owner = THIS_MODULE;

	cdev_err = cdev_add(&BT_cdev, dev, BT_devs);
	if (cdev_err)
		goto error;

	BT_INFO_FUNC("%s driver(major %d) installed.\n",
		     BT_DRIVER_NAME, BT_major);
	retflag = 0;
	mtk_wcn_stp_register_event_cb(BT_TASK_INDX, NULL);

/* init wait queue */
	init_waitqueue_head(&(inq));

	return 0;

error:
	if (cdev_err == 0)
		cdev_del(&BT_cdev);

	if (alloc_ret == 0)
		unregister_chrdev_region(dev, BT_devs);

	return -1;
}