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

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
...@@ -311,7 +311,14 @@ static int uinput_open(struct inode *inode, struct file *file) ...@@ -311,7 +311,14 @@ static int uinput_open(struct inode *inode, struct file *file)
static int uinput_validate_absbits(struct input_dev *dev) static int uinput_validate_absbits(struct input_dev *dev)
{ {
unsigned int cnt; 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++) { for (cnt = 0; cnt < ABS_CNT; cnt++) {
int min, max; int min, max;
...@@ -327,8 +334,7 @@ static int uinput_validate_absbits(struct input_dev *dev) ...@@ -327,8 +334,7 @@ static int uinput_validate_absbits(struct input_dev *dev)
UINPUT_NAME, cnt, UINPUT_NAME, cnt,
input_abs_get_min(dev, cnt), input_abs_get_min(dev, cnt),
input_abs_get_max(dev, cnt)); input_abs_get_max(dev, cnt));
retval = -EINVAL; return -EINVAL;
break;
} }
if (input_abs_get_flat(dev, cnt) > if (input_abs_get_flat(dev, cnt) >
...@@ -340,11 +346,18 @@ static int uinput_validate_absbits(struct input_dev *dev) ...@@ -340,11 +346,18 @@ static int uinput_validate_absbits(struct input_dev *dev)
input_abs_get_flat(dev, cnt), input_abs_get_flat(dev, cnt),
input_abs_get_min(dev, cnt), input_abs_get_min(dev, cnt),
input_abs_get_max(dev, cnt)); input_abs_get_max(dev, cnt));
retval = -EINVAL; return -EINVAL;
break;
} }
} }
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) static int uinput_allocate_device(struct uinput_device *udev)
...@@ -410,19 +423,9 @@ static int uinput_setup_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]); input_abs_set_flat(dev, i, user_dev->absflat[i]);
} }
/* check if absmin/absmax/absfuzz/absflat are filled as retval = uinput_validate_absbits(dev);
* told in Documentation/input/input-programming.txt */ if (retval < 0)
if (test_bit(EV_ABS, dev->evbit)) { goto exit;
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; udev->state = UIST_SETUP_COMPLETE;
retval = count; retval = count;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment