Index: uspace/drv/usbhid/hiddev.c
===================================================================
--- uspace/drv/usbhid/hiddev.c	(revision d3594362e35f5d1c50c217a03b8801f5620ceddc)
+++ uspace/drv/usbhid/hiddev.c	(revision 24d943f974b02668876afb8a55c651168796a2d7)
@@ -206,4 +206,10 @@
 	assert(endpoint_mapping[0].interface != NULL);
 	
+	/*
+	 * Save polling interval
+	 */
+	hid_dev->poll_interval = endpoint_mapping[0].descriptor->poll_interval;
+	assert(hid_dev->poll_interval > 0);
+	
 	rc = usbhid_dev_get_report_descriptor(hid_dev,
 	    descriptors, descriptors_size,
Index: uspace/drv/usbhid/hiddev.h
===================================================================
--- uspace/drv/usbhid/hiddev.h	(revision d3594362e35f5d1c50c217a03b8801f5620ceddc)
+++ uspace/drv/usbhid/hiddev.h	(revision 24d943f974b02668876afb8a55c651168796a2d7)
@@ -57,4 +57,6 @@
 	usb_endpoint_pipe_t poll_pipe;
 	
+	short poll_interval;
+	
 	uint16_t iface;
 	
Index: uspace/drv/usbhid/kbddev.c
===================================================================
--- uspace/drv/usbhid/kbddev.c	(revision d3594362e35f5d1c50c217a03b8801f5620ceddc)
+++ uspace/drv/usbhid/kbddev.c	(revision 24d943f974b02668876afb8a55c651168796a2d7)
@@ -593,6 +593,4 @@
 
 	while (true) {
-		async_usleep(1000 * 10);
-
 		sess_rc = usb_endpoint_pipe_start_session(
 		    &kbd_dev->hid_dev->poll_pipe);
@@ -635,4 +633,6 @@
 		usb_log_debug("Calling usbhid_kbd_process_data()\n");
 		usbhid_kbd_process_data(kbd_dev, buffer, actual_size);
+		
+		async_usleep(kbd_dev->hid_dev->poll_interval);
 	}
 
