summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@bitplanet.net>2013-12-16 11:01:56 -0800
committerKristian Høgsberg <krh@bitplanet.net>2013-12-16 15:11:30 -0800
commitd24a64ea30f1b21dca17f91988d89b56baa06989 (patch)
tree2a8af8288a7cf778fd85691c507e5327b47200a9 /src
parent1aaf3e42e2f09af84846c26b3e9e6c05acedd685 (diff)
evdev: Combine evdev_handle_device() and evdev_configure_device()
We split the device probing and idenfication somewhat arbitrarily between these two functions. This commit combines them into one. Return of -1 indicates error, 0 success, but succesful probing can return a device with device->caps == 0, which means we don't handle the device.
Diffstat (limited to 'src')
-rw-r--r--src/evdev.c18
1 files changed, 7 insertions, 11 deletions
diff --git a/src/evdev.c b/src/evdev.c
index ec18d99d..efc6894f 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -437,7 +437,7 @@ evdev_device_data(int fd, uint32_t mask, void *data)
}
static int
-evdev_handle_device(struct evdev_device *device)
+evdev_configure_device(struct evdev_device *device)
{
struct input_absinfo absinfo;
unsigned long ev_bits[NBITS(EV_MAX)];
@@ -498,6 +498,7 @@ evdev_handle_device(struct evdev_device *device)
if (!TEST_BIT(abs_bits, ABS_MT_SLOT)) {
device->mtdev = mtdev_new_open(device->fd);
if (!device->mtdev) {
+ device->caps = 0;
weston_log("mtdev required but failed to open for %s\n",
device->devnode);
return 0;
@@ -557,15 +558,10 @@ evdev_handle_device(struct evdev_device *device)
weston_log("input device %s, %s "
"ignored: unsupported device type\n",
device->devname, device->devnode);
+ device->caps = 0;
return 0;
}
- return 1;
-}
-
-static int
-evdev_configure_device(struct evdev_device *device)
-{
if ((device->caps & (EVDEV_MOTION_ABS | EVDEV_MOTION_REL)) &&
(device->caps & EVDEV_BUTTON)) {
weston_seat_init_pointer(device->seat);
@@ -625,14 +621,14 @@ evdev_device_create(struct weston_seat *seat, const char *path, int device_fd)
devname[sizeof(devname) - 1] = '\0';
device->devname = strdup(devname);
- if (!evdev_handle_device(device)) {
+ if (evdev_configure_device(device) == -1)
+ goto err;
+
+ if (device->seat_caps == 0) {
evdev_device_destroy(device);
return EVDEV_UNHANDLED_DEVICE;
}
- if (evdev_configure_device(device) == -1)
- goto err;
-
/* If the dispatch was not set up use the fallback. */
if (device->dispatch == NULL)
device->dispatch = fallback_dispatch_create();