Index: uspace/drv/usbhid/main.c
===================================================================
--- uspace/drv/usbhid/main.c	(revision 92574f413b9e9e99c9c0d1cf1c3a3b1bdf6ccbcb)
+++ uspace/drv/usbhid/main.c	(revision e7b7ebd5e96175031036df4ff860785f933cd500)
@@ -557,5 +557,4 @@
 	// TODO: get descriptors, parse descriptors and save endpoints
 	usb_endpoint_pipe_start_session(&kbd_dev->ctrl_pipe);
-	//usb_request_set_configuration(&kbd_dev->ctrl_pipe, 1);
 	rc = usbkbd_process_descriptors(kbd_dev);
 	usb_endpoint_pipe_end_session(&kbd_dev->ctrl_pipe);
@@ -563,5 +562,22 @@
 		goto error_leave;
 	}
-
+	
+	// save the size of the report
+	kbd_dev->keycode_count = BOOTP_REPORT_SIZE;
+	kbd_dev->keycodes = (uint8_t *)calloc(
+	    kbd_dev->keycode_count, sizeof(uint8_t));
+	
+	if (kbd_dev->keycodes == NULL) {
+		usb_log_fatal("No memory!\n");
+		goto error_leave;
+	}
+	
+	// set configuration to the first one
+	// TODO: handle case with no configurations
+	usb_endpoint_pipe_start_session(&kbd_dev->ctrl_pipe);
+	usb_request_set_configuration(&kbd_dev->ctrl_pipe, 
+	    kbd_dev->conf->config_descriptor.configuration_number);
+	usb_endpoint_pipe_end_session(&kbd_dev->ctrl_pipe);
+	
 	return kbd_dev;
 
