Exemple #1
0
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;
}
Exemple #2
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 */
Exemple #3
0
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;
}
Exemple #4
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;
}
Exemple #5
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 */
Exemple #6
0
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 */