diff options
Diffstat (limited to 'scripts/mod/file2alias.c')
-rw-r--r-- | scripts/mod/file2alias.c | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c index 37d5c363fbcd..4fa1f3ad2513 100644 --- a/scripts/mod/file2alias.c +++ b/scripts/mod/file2alias.c @@ -340,11 +340,18 @@ static int do_acpi_entry(const char *filename, } /* 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 *symval, unsigned long size, } /* 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); + } } } } @@ -613,7 +623,7 @@ static int do_i2c_entry(const char *filename, struct i2c_device_id *id, return 1; } -/* Ignore any prefix, eg. v850 prepends _ */ +/* Ignore any prefix, eg. some architectures prepend _ */ static inline int sym_is(const char *symbol, const char *name) { const char *match; @@ -701,9 +711,7 @@ void handle_moddevtable(struct module *mod, struct elf_info *info, 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")) |