Index: uspace/srv/hid/output/port/chardev.c
===================================================================
--- uspace/srv/hid/output/port/chardev.c	(revision cecba66ea48d60cfa59865e98aeda663808e42c7)
+++ uspace/srv/hid/output/port/chardev.c	(revision e7588a831a1d2d5847475a67a5b1bc4b10366d7c)
@@ -30,15 +30,15 @@
  */
 
+#include <async.h>
+#include <config.h>
+#include <errno.h>
+#include <fibril_synch.h>
+#include <io/chardev.h>
+#include <loc.h>
 #include <stddef.h>
 #include <stdint.h>
-#include <char_dev_iface.h>
 #include <stdio.h>
 #include <stdlib.h>
-#include <async.h>
-#include <fibril_synch.h>
-#include <loc.h>
-#include <errno.h>
 #include <str.h>
-#include <config.h>
 #include "../ctl/serial.h"
 #include "../output.h"
@@ -48,4 +48,5 @@
 
 static async_sess_t *sess;
+static chardev_t *chardev;
 static service_id_t serial_cat_id;
 
@@ -57,10 +58,14 @@
 {
 	uint8_t byte = (uint8_t) ch;
-	char_dev_write(sess, &byte, 1); 
+	size_t nwr;
+	chardev_write(chardev, &byte, 1, &nwr);
+	/* XXX Handle error */
 }
 
 static void chardev_control_puts(const char *str)
 {
-	char_dev_write(sess, (void *) str, str_size(str));
+	size_t nwr;
+	chardev_write(chardev, (void *) str, str_size(str), &nwr);
+	/* XXX Handle error */
 }
 
@@ -126,4 +131,12 @@
 		return;
 	}
+
+	rc = chardev_open(sess, &chardev);
+	if (rc != EOK) {
+		fibril_mutex_unlock(&discovery_lock);
+		printf("%s: Failed opening character device\n", NAME);
+		return;
+	}
+
 	serial_init(chardev_putchar, chardev_control_puts);
 
