diff -u linux-2.6.11-rc2-mm1.orig/include/linux/input.h linux-2.6.11-rc2-mm1/include/linux/input.h --- linux-2.6.11-rc2-mm1.orig/include/linux/input.h 2005-01-28 13:01:08.000000000 +1100 +++ linux-2.6.11-rc2-mm1/include/linux/input.h 2005-02-01 11:32:40.000000000 +1100 @@ -1012,5 +1012,9 @@ extern struct class_simple *input_class; +#define MODULE_ALIAS_INPUT(minorbase) \ + MODULE_ALIAS("char-major-" __stringify(INPUT_MAJOR) "-" \ + __stringify(minorbase)) + #endif #endif diff -u linux-2.6.11-rc2-mm1.orig/drivers/input/input.c linux-2.6.11-rc2-mm1/drivers/input/input.c --- linux-2.6.11-rc2-mm1.orig/drivers/input/input.c 2005-01-28 13:00:29.000000000 +1100 +++ linux-2.6.11-rc2-mm1/drivers/input/input.c 2005-02-01 11:40:44.000000000 +1100 @@ -536,8 +536,13 @@ struct file_operations *old_fops, *new_fops = NULL; int err; - /* No load-on-demand here? */ - if (!handler || !(new_fops = fops_get(handler->fops))) + if (!handler) + { + request_module("char-major-%d-%d", INPUT_MAJOR, iminor(inode)); + /* The module will register itself upon loading */ + handler = input_table[iminor(inode) >> 5]; + } + if (!handler || !(new_fops = fops_get(handler->fops))) return -ENODEV; /* diff -u linux-2.6.11-rc2-mm1.orig/drivers/input/mousedev.c linux-2.6.11-rc2-mm1/drivers/input/mousedev.c --- linux-2.6.11-rc2-mm1.orig/drivers/input/mousedev.c 2005-01-28 13:00:30.000000000 +1100 +++ linux-2.6.11-rc2-mm1/drivers/input/mousedev.c 2005-02-01 11:32:53.000000000 +1100 @@ -32,6 +32,7 @@ MODULE_AUTHOR("Vojtech Pavlik "); MODULE_DESCRIPTION("Mouse (ExplorerPS/2) device interfaces"); MODULE_LICENSE("GPL"); +MODULE_ALIAS_INPUT(MOUSEDEV_MINOR_BASE); #ifndef CONFIG_INPUT_MOUSEDEV_SCREEN_X #define CONFIG_INPUT_MOUSEDEV_SCREEN_X 1024