Beispiel #1
0
static int uinput_dev_upload_effect(struct input_dev *dev, struct ff_effect *effect, struct ff_effect *old)
{
	struct uinput_device *udev = input_get_drvdata(dev);
	struct uinput_request request;
	int retval;

	/*
	 * uinput driver does not currently support periodic effects with
	 * custom waveform since it does not have a way to pass buffer of
	 * samples (custom_data) to userspace. If ever there is a device
	 * supporting custom waveforms we would need to define an additional
	 * ioctl (UI_UPLOAD_SAMPLES) but for now we just bail out.
	 */
	if (effect->type == FF_PERIODIC &&
			effect->u.periodic.waveform == FF_CUSTOM)
		return -EINVAL;

	request.id = -1;
	init_completion(&request.done);
	request.code = UI_FF_UPLOAD;
	request.u.upload.effect = effect;
	request.u.upload.old = old;

	retval = uinput_request_submit(udev, &request);
	if (!retval) {
		wait_for_completion(&request.done);
		retval = request.retval;
	}

	return retval;
}
Beispiel #2
0
static int uinput_dev_upload_effect(struct input_dev *dev, struct ff_effect *effect, struct ff_effect *old)
{
	struct uinput_device *udev = input_get_drvdata(dev);
	struct uinput_request request;
	int retval;

	if (effect->type == FF_PERIODIC &&
			effect->u.periodic.waveform == FF_CUSTOM)
		return -EINVAL;

	
	request.retval= 0;
	request.id = -1;
	init_completion(&request.done);
	request.code = UI_FF_UPLOAD;
	request.u.upload.effect = effect;
	request.u.upload.old = old;

	retval = uinput_request_submit(udev, &request);
	if (!retval) {
		wait_for_completion(&request.done);
		retval = request.retval;
	}

	return retval;
}
Beispiel #3
0
static int uinput_dev_erase_effect(struct input_dev *dev, int effect_id)
{
    struct uinput_device *udev = input_get_drvdata(dev);
    struct uinput_request request;

    if (!test_bit(EV_FF, dev->evbit))
        return -ENOSYS;

    request.code = UI_FF_ERASE;
    request.u.effect_id = effect_id;

    return uinput_request_submit(udev, &request);
}
Beispiel #4
0
static int uinput_dev_upload_effect(struct input_dev *dev, struct ff_effect *effect, struct ff_effect *old)
{
    struct uinput_request request;
    int retval;

    request.id = -1;
    init_completion(&request.done);
    request.code = UI_FF_UPLOAD;
    request.u.upload.effect = effect;
    request.u.upload.old = old;

    retval = uinput_request_reserve_slot(input_get_drvdata(dev), &request);
    if (!retval)
        retval = uinput_request_submit(dev, &request);

    return retval;
}
Beispiel #5
0
static int uinput_dev_erase_effect(struct input_dev *dev, int effect_id)
{
    struct uinput_request request;
    int retval;

    if (!test_bit(EV_FF, dev->evbit))
        return -ENOSYS;

    request.id = -1;
    init_completion(&request.done);
    request.code = UI_FF_ERASE;
    request.u.effect_id = effect_id;

    retval = uinput_request_reserve_slot(input_get_drvdata(dev), &request);
    if (!retval)
        retval = uinput_request_submit(dev, &request);

    return retval;
}