static int usf_release(struct inode *inode, struct file *file) { struct usf_type *usf = file->private_data; pr_debug("%s: release entry\n", __func__); usf_release_input(usf); usf_disable(&usf->usf_tx); usf_disable(&usf->usf_rx); s_opened_devs[usf->dev_ind] = 0; kfree(usf); pr_debug("%s: release exit\n", __func__); return 0; }
static int usf_stop_tx(struct usf_type *usf) { struct usf_xx_type *usf_xx = &usf->usf_tx; usf_release_input(usf); usf_disable(usf_xx); return 0; } /* usf_stop_tx */
static int usf_release(struct inode *inode, struct file *file) { struct usf_type *usf = file->private_data; pr_info("%s: release entry\n", __func__); if (usf->input_if != NULL) { input_unregister_device(usf->input_if); usf->input_if = NULL; pr_info("%s input_unregister_device\n", __func__); } usf_disable(&usf->usf_tx); usf_disable(&usf->usf_rx); s_opened_devs[usf->dev_ind] = 0; kfree(usf); pr_info("%s: release exit\n", __func__); return 0; }
static int usf_release(struct inode *inode, struct file *file) { struct usf_type *usf = file->private_data; mutex_lock(&session_lock); pr_debug("%s: release entry\n", __func__); usf_release_input(usf); usf_disable(&usf->usf_tx); usf_disable(&usf->usf_rx); s_opened_devs[usf->dev_ind] = 0; kfree(usf); #ifdef SKY_ULTRASOUNDPEN_FEATURE touch_clear_finger(0); #endif pr_debug("%s: release exit\n", __func__); mutex_unlock(&session_lock); return 0; }
static int usf_stop_tx(struct usf_type *usf) { struct usf_xx_type *usf_xx = &usf->usf_tx; if (usf->input_if != NULL) { input_unregister_device(usf->input_if); usf->input_if = NULL; pr_info("%s input_unregister_device", __func__); } usf_disable(usf_xx); return 0; } /* usf_stop_tx */
static long usf_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { int rc = 0; struct usf_type *usf = file->private_data; struct usf_xx_type *usf_xx = NULL; switch (cmd) { case US_START_TX: { usf_xx = &usf->usf_tx; if (usf_xx->usf_state == USF_CONFIGURED_STATE) rc = usf_start_tx(usf_xx); else { pr_err("%s: start_tx: wrong state[%d]\n", __func__, usf_xx->usf_state); return -EBADFD; } break; } case US_START_RX: { usf_xx = &usf->usf_rx; if (usf_xx->usf_state == USF_CONFIGURED_STATE) rc = usf_start_rx(usf_xx); else { pr_err("%s: start_rx: wrong state[%d]\n", __func__, usf_xx->usf_state); return -EBADFD; } break; } case US_SET_TX_INFO: { usf_xx = &usf->usf_tx; if (usf_xx->usf_state == USF_OPENED_STATE) rc = usf_set_tx_info(usf, arg); else { pr_err("%s: set_tx_info: wrong state[%d]\n", __func__, usf_xx->usf_state); return -EBADFD; } break; } /* US_SET_TX_INFO */ case US_SET_RX_INFO: { usf_xx = &usf->usf_rx; if (usf_xx->usf_state == USF_OPENED_STATE) rc = usf_set_rx_info(usf, arg); else { pr_err("%s: set_rx_info: wrong state[%d]\n", __func__, usf_xx->usf_state); return -EBADFD; } break; } /* US_SET_RX_INFO */ case US_GET_TX_UPDATE: { struct usf_xx_type *usf_xx = &usf->usf_tx; if (usf_xx->usf_state == USF_WORK_STATE) rc = usf_get_tx_update(usf, arg); else { pr_err("%s: get_tx_update: wrong state[%d]\n", __func__, usf_xx->usf_state); rc = -EBADFD; } break; } /* US_GET_TX_UPDATE */ case US_SET_RX_UPDATE: { struct usf_xx_type *usf_xx = &usf->usf_rx; if (usf_xx->usf_state == USF_WORK_STATE) rc = usf_set_rx_update(usf_xx, arg); else { pr_err("%s: set_rx_update: wrong state[%d]\n", __func__, usf_xx->usf_state); rc = -EBADFD; } break; } /* US_SET_RX_UPDATE */ case US_STOP_TX: { usf_xx = &usf->usf_tx; if (usf_xx->usf_state == USF_WORK_STATE) rc = usf_stop_tx(usf); else { pr_err("%s: stop_tx: wrong state[%d]\n", __func__, usf_xx->usf_state); return -EBADFD; } break; } /* US_STOP_TX */ case US_STOP_RX: { usf_xx = &usf->usf_rx; if (usf_xx->usf_state == USF_WORK_STATE) usf_disable(usf_xx); else { pr_err("%s: stop_rx: wrong state[%d]\n", __func__, usf_xx->usf_state); return -EBADFD; } break; } /* US_STOP_RX */ case US_SET_DETECTION: { struct usf_xx_type *usf_xx = &usf->usf_tx; if (usf_xx->usf_state == USF_WORK_STATE) rc = usf_set_us_detection(usf, arg); else { pr_err("%s: set us detection: wrong state[%d]\n", __func__, usf_xx->usf_state); rc = -EBADFD; } break; } /* US_SET_DETECTION */ case US_GET_VERSION: { rc = usf_get_version(arg); break; } /* US_GET_VERSION */ default: pr_err("%s: unsupported IOCTL command [%d]\n", __func__, cmd); rc = -ENOTTY; break; } if (rc && ((cmd == US_SET_TX_INFO) || (cmd == US_SET_RX_INFO))) release_xx(usf_xx); return rc; } /* usf_ioctl */