Index: uspace/drv/usbkbd/main.c
===================================================================
--- uspace/drv/usbkbd/main.c	(revision c7137738c048f4d114777abf95ab228e771e4627)
+++ uspace/drv/usbkbd/main.c	(revision 91db50ac4a0d8739daf1220f83a40c68c562e4cd)
@@ -30,4 +30,39 @@
 #include <errno.h>
 
+#define BUFFER_SIZE 32
+
+/* Call this periodically to check keyboard status changes. */
+static void poll_keyboard(device_t *dev)
+{
+	int rc;
+	usb_handle_t handle;
+	char buffer[BUFFER_SIZE];
+	size_t actual_size;
+	usb_endpoint_t poll_endpoint = 1;
+
+	rc = usb_drv_async_interrupt_in(dev->parent_phone, poll_endpoint,
+	    buffer, BUFFER_SIZE, &actual_size, &handle);
+	if (rc != EOK) {
+		return;
+	}
+
+	rc = usb_drv_async_wait_for(handle);
+	if (rc != EOK) {
+		return;
+	}
+
+	/*
+	 * If the keyboard answered with NAK, it returned no data.
+	 * This implies that no change happened since last query.
+	 */
+	if (actual_size == 0) {
+		return;
+	}
+
+	/*
+	 * Process pressed keys.
+	 */
+}
+
 static int add_kbd_device(device_t *dev)
 {
@@ -38,12 +73,19 @@
 	 * When everything is okay, connect to "our" HC.
 	 */
-	int rc = usb_drv_hc_connect(dev, 0);
-	if (rc != EOK) {
+	int phone = usb_drv_hc_connect(dev, 0);
+	if (phone < 0) {
 		/*
 		 * Connecting to HC failed, roll-back and announce
 		 * failure.
 		 */
-		return rc;
+		return phone;
 	}
+
+	dev->parent_phone = phone;
+
+	/*
+	 * Just for fun ;-).
+	 */
+	poll_keyboard(dev);
 
 	/*
