diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c
index c81c79d..a31b866 100644
--- a/drivers/input/evdev.c
+++ b/drivers/input/evdev.c
@@ -1425,6 +1425,7 @@ static int evdev_connect(struct input_handler *handler, struct input_dev *dev,
 	if (error)
 		goto err_cleanup_evdev;
 
+	evdev_open_device(evdev);
 	return 0;
 
  err_cleanup_evdev:
@@ -1445,6 +1446,7 @@ static void evdev_disconnect(struct input_handle *handle)
 	evdev_cleanup(evdev);
 	input_free_minor(MINOR(evdev->dev.devt));
 	input_unregister_handle(handle);
+	mutex_destroy(&evdev->mutex);
 	put_device(&evdev->dev);
 }
 
@@ -1456,8 +1458,7 @@ static const struct input_device_id evdev_ids[] = {
 MODULE_DEVICE_TABLE(input, evdev_ids);
 
 static struct input_handler evdev_handler = {
-	.event		= evdev_event,
-	.events		= evdev_events,
+	.event		= genode_evdev_event,
 	.connect	= evdev_connect,
 	.disconnect	= evdev_disconnect,
 	.legacy_minors	= true,
