diff --git a/hid-linux.c b/hid-linux.c
-index f2e0bce..c011dbd 100644
+index f2e0bce..5581479 100644
--- a/hid-linux.c
+++ b/hid-linux.c
@@ -43,11 +43,8 @@
#define DEBUG_HID_LINUX
-@@ -64,468 +61,602 @@ while (0);
+@@ -64,468 +61,605 @@ while (0);
# define DEBUG(_format_, args...) (void)0
#endif
- if (fd != -1)
- close(fd);
+
++/* Kick off the periodic scan for devices */
++ if (!linux_hid_driver.scan_timer)
++ linux_hid_driver.scan_timer =
++ qemu_new_timer (rt_clock, hid_linux_scan, NULL);
++
+/* Schedule ourselves */
+ qemu_mod_timer (linux_hid_driver.scan_timer,
+ qemu_get_clock (rt_clock) + 2000);
-void hid_linux_init(void)
+
-+
+void
-+hid_linux_init (void)
++hid_linux_probe (int grab)
{
- hid_linux_driver.keyboard_fds[0] = -1;
- hid_linux_driver.mouse_fds[0] = -1;
- hid_linux_driver.controller_paths[0] = NULL;
-+ int i;
++ hid_linux_scan (NULL);
++}
- while (hid_linux_driver.keyboard_fds[0] == -1)
- {
- hid_linux_probe(0);
- usleep(100000); /* 10 ms */
- }
++
++void
++hid_linux_init (void)
++{
++ int i;
+ for (i = 0; i < N_DEVS; ++i)
+ linux_hid_driver.fds[i] = -1;
-+
+ linux_hid_driver.keyboard_grabbed = 0;
+ linux_hid_driver.mouse_grabbed = 0;
-+
-+/* Kick off the periodic scan for devices */
-+ if (!linux_hid_driver.scan_timer)
-+ linux_hid_driver.scan_timer =
-+ qemu_new_timer (rt_clock, hid_linux_scan, NULL);
-+
+ hid_linux_scan (NULL);
}