From: Rusty Russell You can't call module_param et al inside a function. It doesn't make sense, and it doesn't work. Signed-off-by: Rusty Russell Signed-off-by: Andrew Morton --- 25-akpm/drivers/acpi/ibm_acpi.c | 49 ++++++++++++++++++++++------------------ 1 files changed, 27 insertions(+), 22 deletions(-) diff -puN drivers/acpi/ibm_acpi.c~fix-parameter-handling-in-ibm_acpic drivers/acpi/ibm_acpi.c --- 25/drivers/acpi/ibm_acpi.c~fix-parameter-handling-in-ibm_acpic Mon Nov 29 13:05:44 2004 +++ 25-akpm/drivers/acpi/ibm_acpi.c Mon Nov 29 13:05:44 2004 @@ -1147,21 +1147,26 @@ static int ibm_handle_init(char *name, object##_paths, sizeof(object##_paths)/sizeof(char*), required) -static void ibm_param(char *feature, char *cmd) +static int set_ibm_param(const char *val, struct kernel_param *kp) { - int i; + unsigned int i; + char arg_with_comma[32]; + + if (strlen(val) > 30) + return -ENOSPC; + + strcpy(arg_with_comma, val); + strcat(arg_with_comma, ","); - strcat(cmd, ","); for (i=0; iname) == 0) + return ibms[i].write(&ibms[i], arg_with_comma); + BUG(); + return -EINVAL; +} + +#define IBM_PARAM(feature) \ + module_param_call(feature, set_ibm_param, NULL, NULL, 0) static void __exit acpi_ibm_exit(void) { @@ -1216,16 +1221,6 @@ static int __init acpi_ibm_init(void) } } - IBM_PARAM(hotkey); - IBM_PARAM(bluetooth); - IBM_PARAM(video); - IBM_PARAM(light); - IBM_PARAM(dock); - IBM_PARAM(bay); - IBM_PARAM(cmos); - IBM_PARAM(led); - IBM_PARAM(beep); - return 0; } @@ -1235,3 +1230,13 @@ module_exit(acpi_ibm_exit); MODULE_AUTHOR("Borislav Deianov"); MODULE_DESCRIPTION(IBM_DESC); MODULE_LICENSE("GPL"); + +IBM_PARAM(hotkey); +IBM_PARAM(bluetooth); +IBM_PARAM(video); +IBM_PARAM(light); +IBM_PARAM(dock); +IBM_PARAM(bay); +IBM_PARAM(cmos); +IBM_PARAM(led); +IBM_PARAM(beep); _