Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bcb898e5 authored by David Herrmann's avatar David Herrmann Committed by Dmitry Torokhov
Browse files

Input: uinput - uinput_validate_absbits() cleanup



This moves basic checks and setup from uinput_setup_device() into
uinput_validate_absbits() to make it easier to use. This way, we can call
it from other places without copying the boilerplate code.

Reviewed-by: default avatarPeter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: default avatarDavid Herrmann <dh.herrmann@gmail.com>
Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent 39740370
Loading
Loading
Loading
Loading
+22 −19
Original line number Diff line number Diff line
@@ -311,7 +311,14 @@ static int uinput_open(struct inode *inode, struct file *file)
static int uinput_validate_absbits(struct input_dev *dev)
{
	unsigned int cnt;
	int retval = 0;
	int nslot;

	if (!test_bit(EV_ABS, dev->evbit))
		return 0;

	/*
	 * Check if absmin/absmax/absfuzz/absflat are sane.
	 */

	for (cnt = 0; cnt < ABS_CNT; cnt++) {
		int min, max;
@@ -327,8 +334,7 @@ static int uinput_validate_absbits(struct input_dev *dev)
				UINPUT_NAME, cnt,
				input_abs_get_min(dev, cnt),
				input_abs_get_max(dev, cnt));
			retval = -EINVAL;
			break;
			return -EINVAL;
		}

		if (input_abs_get_flat(dev, cnt) >
@@ -340,11 +346,18 @@ static int uinput_validate_absbits(struct input_dev *dev)
				input_abs_get_flat(dev, cnt),
				input_abs_get_min(dev, cnt),
				input_abs_get_max(dev, cnt));
			retval = -EINVAL;
			break;
			return -EINVAL;
		}
	}
	return retval;

	if (test_bit(ABS_MT_SLOT, dev->absbit)) {
		nslot = input_abs_get_max(dev, ABS_MT_SLOT) + 1;
		input_mt_init_slots(dev, nslot, 0);
	} else if (test_bit(ABS_MT_POSITION_X, dev->absbit)) {
		input_set_events_per_packet(dev, 60);
	}

	return 0;
}

static int uinput_allocate_device(struct uinput_device *udev)
@@ -410,19 +423,9 @@ static int uinput_setup_device(struct uinput_device *udev,
		input_abs_set_flat(dev, i, user_dev->absflat[i]);
	}

	/* check if absmin/absmax/absfuzz/absflat are filled as
	 * told in Documentation/input/input-programming.txt */
	if (test_bit(EV_ABS, dev->evbit)) {
	retval = uinput_validate_absbits(dev);
	if (retval < 0)
		goto exit;
		if (test_bit(ABS_MT_SLOT, dev->absbit)) {
			int nslot = input_abs_get_max(dev, ABS_MT_SLOT) + 1;
			input_mt_init_slots(dev, nslot, 0);
		} else if (test_bit(ABS_MT_POSITION_X, dev->absbit)) {
			input_set_events_per_packet(dev, 60);
		}
	}

	udev->state = UIST_SETUP_COMPLETE;
	retval = count;