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