Index: uspace/drv/hid/xtkbd/xtkbd.c
===================================================================
--- uspace/drv/hid/xtkbd/xtkbd.c	(revision b7155d7afd4c423375b9108bfa861575b8eb6a04)
+++ uspace/drv/hid/xtkbd/xtkbd.c	(revision bb4ba929aaa2c6657c0adbc6627c17b869af4fd1)
@@ -1,5 +1,5 @@
 /*
+ * Copyright (c) 2022 Jiri Svoboda
  * Copyright (c) 2011 Jan Vesely
- * Copyright (c) 2017 Jiri Svoboda
  * All rights reserved.
  *
@@ -198,4 +198,27 @@
 }
 
+/** Get one scancode byte from the keyboard.
+ *
+ * @param kbd Keyboard
+ * @param code Place to store scancode byte
+ * @return EOK on success or an error code
+ */
+static errno_t xtkbd_get_code(xt_kbd_t *kbd, uint8_t *code)
+{
+	errno_t rc;
+	size_t nread;
+
+	*code = 0;
+	rc = chardev_read(kbd->chardev, code, 1, &nread, chardev_f_none);
+	if (rc != EOK) {
+		ddf_msg(LVL_WARN, "Error reading from keyboard device.");
+		return EIO;
+	}
+
+	ddf_msg(LVL_DEBUG, "Read scancode: 0x%02hhx", *code);
+
+	return EOK;
+}
+
 /** Get data and parse scancodes.
  *
@@ -208,5 +231,4 @@
 {
 	xt_kbd_t *kbd = arg;
-	size_t nread;
 	errno_t rc;
 
@@ -216,5 +238,5 @@
 
 		uint8_t code = 0;
-		rc = chardev_read(kbd->chardev, &code, 1, &nread, chardev_f_none);
+		rc = xtkbd_get_code(kbd, &code);
 		if (rc != EOK)
 			return EIO;
@@ -229,6 +251,5 @@
 			map_size = sizeof(scanmap_e0) / sizeof(unsigned int);
 
-			rc = chardev_read(kbd->chardev, &code, 1, &nread,
-			    chardev_f_none);
+			rc = xtkbd_get_code(kbd, &code);
 			if (rc != EOK)
 				return EIO;
@@ -237,6 +258,5 @@
 
 			if (code == 0x2a) {  /* Print Screen */
-				rc = chardev_read(kbd->chardev, &code, 1, &nread,
-				    chardev_f_none);
+				rc = xtkbd_get_code(kbd, &code);
 				if (rc != EOK)
 					return EIO;
@@ -245,6 +265,5 @@
 					continue;
 
-				rc = chardev_read(kbd->chardev, &code, 1, &nread,
-				    chardev_f_none);
+				rc = xtkbd_get_code(kbd, &code);
 				if (rc != EOK)
 					return EIO;
@@ -257,6 +276,5 @@
 
 			if (code == 0x46) {  /* Break */
-				rc = chardev_read(kbd->chardev, &code, 1, &nread,
-				    chardev_f_none);
+				rc = xtkbd_get_code(kbd, &code);
 				if (rc != EOK)
 					return EIO;
@@ -265,6 +283,5 @@
 					continue;
 
-				rc = chardev_read(kbd->chardev, &code, 1, &nread,
-				    chardev_f_none);
+				rc = xtkbd_get_code(kbd, &code);
 				if (rc != EOK)
 					return EIO;
@@ -279,6 +296,5 @@
 		/* Extended special set */
 		if (code == KBD_SCANCODE_SET_EXTENDED_SPECIAL) {
-			rc = chardev_read(kbd->chardev, &code, 1, &nread,
-			    chardev_f_none);
+			rc = xtkbd_get_code(kbd, &code);
 			if (rc != EOK)
 				return EIO;
@@ -287,6 +303,5 @@
 				continue;
 
-			rc = chardev_read(kbd->chardev, &code, 1, &nread,
-			    chardev_f_none);
+			rc = xtkbd_get_code(kbd, &code);
 			if (rc != EOK)
 				return EIO;
@@ -295,6 +310,5 @@
 				continue;
 
-			rc = chardev_read(kbd->chardev, &code, 1, &nread,
-			    chardev_f_none);
+			rc = xtkbd_get_code(kbd, &code);
 			if (rc != EOK)
 				return EIO;
@@ -303,6 +317,5 @@
 				continue;
 
-			rc = chardev_read(kbd->chardev, &code, 1, &nread,
-			    chardev_f_none);
+			rc = xtkbd_get_code(kbd, &code);
 			if (rc != EOK)
 				return EIO;
@@ -311,6 +324,5 @@
 				continue;
 
-			rc = chardev_read(kbd->chardev, &code, 1, &nread,
-			    chardev_f_none);
+			rc = xtkbd_get_code(kbd, &code);
 			if (rc != EOK)
 				return EIO;
