File xf86-input-synaptics-wait.diff of Package xorg-x11-driver-input
--- src/eventcomm.c.orig 2009-11-14 01:50:20.000000000 +0000
+++ src/eventcomm.c 2009-11-14 01:51:30.000000000 +0000
@@ -404,7 +404,10 @@ EventAutoDevProbe(LocalDevicePtr local)
int i;
Bool touchpad_found = FALSE;
struct dirent **namelist;
+ int wait = 0;
+ const int max_wait = 2000;
+ while (wait <= max_wait && !touchpad_found) {
i = scandir(DEV_INPUT_EVENT, &namelist, EventDevOnly, alphasort);
if (i < 0) {
xf86Msg(X_ERROR, "Couldn't open %s\n", DEV_INPUT_EVENT);
@@ -429,8 +432,8 @@ EventAutoDevProbe(LocalDevicePtr local)
if (event_query_is_touchpad(fd, TRUE)) {
touchpad_found = TRUE;
- xf86Msg(X_PROBED, "%s auto-dev sets device to %s\n",
- local->name, fname);
+ xf86Msg(X_PROBED, "%s auto-dev sets device to %s (waited %d msec)\n",
+ local->name, fname, wait);
local->options =
xf86ReplaceStrOption(local->options, "Device", fname);
}
@@ -438,6 +441,13 @@ EventAutoDevProbe(LocalDevicePtr local)
}
free(namelist[i]);
}
+ if (!touchpad_found) {
+ ErrorF("%s waiting 100 msec to become devices ready\n", local->name);
+ usleep(100*1000);
+ wait += 100;
+ ErrorF("%s waiting time total: %d\n", local->name, wait);
+ }
+ } /* while (wait <= max_wait && !touchpad_found) */
free(namelist);
if (!touchpad_found) {