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: Kay Sievers <kay.sievers@vrfy.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
fc3a8828b1
commit
22454cb99f
@@ -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,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 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,
|
|||||||
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"))
|
||||||
|
Reference in New Issue
Block a user