Commit 22454cb9 authored by Kay Sievers's avatar Kay Sievers Committed by Greg Kroah-Hartman

pnp: add acpi:* modalias entries

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 <ambx1@neo.rr.com>
Cc: Thomas Renninger <trenn@suse.de>
Signed-off-by: default avatarKay Sievers <kay.sievers@vrfy.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent fc3a8828
...@@ -340,11 +340,18 @@ static int do_acpi_entry(const char *filename, ...@@ -340,11 +340,18 @@ static int do_acpi_entry(const char *filename,
} }
/* looks like: "pnp:dD" */ /* looks like: "pnp:dD" */
static int do_pnp_entry(const char *filename, static void do_pnp_device_entry(void *symval, unsigned long size,
struct pnp_device_id *id, char *alias) struct module *mod)
{ {
sprintf(alias, "pnp:d%s*", id->id); const unsigned long id_size = sizeof(struct pnp_device_id);
return 1; 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 */ /* looks like: "pnp:dD" for every device of the card */
...@@ -388,9 +395,12 @@ static void do_pnp_card_entries(void *symval, unsigned long size, ...@@ -388,9 +395,12 @@ static void do_pnp_card_entries(void *symval, unsigned long size,
} }
/* add an individual alias for every device entry */ /* add an individual alias for every device entry */
if (!dup) if (!dup) {
buf_printf(&mod->dev_table_buf, buf_printf(&mod->dev_table_buf,
"MODULE_ALIAS(\"pnp:d%s*\");\n", id); "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 *mod, struct elf_info *info, ...@@ -701,9 +711,7 @@ void handle_moddevtable(struct module *mod, struct elf_info *info,
sizeof(struct acpi_device_id), "acpi", sizeof(struct acpi_device_id), "acpi",
do_acpi_entry, mod); do_acpi_entry, mod);
else if (sym_is(symname, "__mod_pnp_device_table")) else if (sym_is(symname, "__mod_pnp_device_table"))
do_table(symval, sym->st_size, do_pnp_device_entry(symval, sym->st_size, mod);
sizeof(struct pnp_device_id), "pnp",
do_pnp_entry, mod);
else if (sym_is(symname, "__mod_pnp_card_device_table")) else if (sym_is(symname, "__mod_pnp_card_device_table"))
do_pnp_card_entries(symval, sym->st_size, mod); do_pnp_card_entries(symval, sym->st_size, mod);
else if (sym_is(symname, "__mod_pcmcia_device_table")) else if (sym_is(symname, "__mod_pcmcia_device_table"))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment