From kay.sievers@vrfy.org Wed May 28 14:21:22 2008 From: Kay Sievers Date: Wed, 28 May 2008 23:06:47 +0200 Subject: pnp: add acpi:* modalias entries Message-ID: <1212008807.2548.2.camel@linux.site> Along with the non-modalias conformant "pnp:*" aliases, we add "acpi:*" entries to PNP drivers, to allow module autoloading by ACPI PNP device entries, which export proper modalias information, without any specific userspace modprobe mangling. Cc: Adam Belay Cc: Thomas Renninger Signed-off-by: Kay Sievers Signed-off-by: Greg Kroah-Hartman --- scripts/mod/file2alias.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) --- a/scripts/mod/file2alias.c +++ b/scripts/mod/file2alias.c @@ -340,11 +340,18 @@ static int do_acpi_entry(const char *fil } /* looks like: "pnp:dD" */ -static int do_pnp_entry(const char *filename, - struct pnp_device_id *id, char *alias) +static void do_pnp_device_entry(void *symval, unsigned long size, + struct module *mod) { - sprintf(alias, "pnp:d%s*", id->id); - return 1; + const unsigned long id_size = sizeof(struct pnp_device_id); + const struct pnp_device_id *id = symval; + + device_id_check(mod->name, "pnp", size, id_size, symval); + + buf_printf(&mod->dev_table_buf, + "MODULE_ALIAS(\"pnp:d%s*\");\n", id->id); + buf_printf(&mod->dev_table_buf, + "MODULE_ALIAS(\"acpi*:%s:*\");\n", id->id); } /* looks like: "pnp:dD" for every device of the card */ @@ -388,9 +395,12 @@ static void do_pnp_card_entries(void *sy } /* add an individual alias for every device entry */ - if (!dup) + if (!dup) { buf_printf(&mod->dev_table_buf, "MODULE_ALIAS(\"pnp:d%s*\");\n", id); + buf_printf(&mod->dev_table_buf, + "MODULE_ALIAS(\"acpi*:%s:*\");\n", id); + } } } } @@ -701,9 +711,7 @@ void handle_moddevtable(struct module *m sizeof(struct acpi_device_id), "acpi", do_acpi_entry, mod); else if (sym_is(symname, "__mod_pnp_device_table")) - do_table(symval, sym->st_size, - sizeof(struct pnp_device_id), "pnp", - do_pnp_entry, mod); + do_pnp_device_entry(symval, sym->st_size, mod); else if (sym_is(symname, "__mod_pnp_card_device_table")) do_pnp_card_entries(symval, sym->st_size, mod); else if (sym_is(symname, "__mod_pcmcia_device_table"))