mirror of https://gitee.com/openkylin/linux.git
sdio: add modalias support
Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
This commit is contained in:
parent
9eb3a94d02
commit
d59b66c7a5
|
@ -68,7 +68,26 @@ static int
|
|||
sdio_bus_uevent(struct device *dev, char **envp, int num_envp, char *buf,
|
||||
int buf_size)
|
||||
{
|
||||
envp[0] = NULL;
|
||||
struct sdio_func *func = dev_to_sdio_func(dev);
|
||||
int i = 0, length = 0;
|
||||
|
||||
if (add_uevent_var(envp, num_envp, &i,
|
||||
buf, buf_size, &length,
|
||||
"SDIO_CLASS=%02X", func->class))
|
||||
return -ENOMEM;
|
||||
|
||||
if (add_uevent_var(envp, num_envp, &i,
|
||||
buf, buf_size, &length,
|
||||
"SDIO_ID=%04X:%04X", func->vendor, func->device))
|
||||
return -ENOMEM;
|
||||
|
||||
if (add_uevent_var(envp, num_envp, &i,
|
||||
buf, buf_size, &length,
|
||||
"MODALIAS=sdio:c%02Xv%04Xd%04X",
|
||||
func->class, func->vendor, func->device))
|
||||
return -ENOMEM;
|
||||
|
||||
envp[i] = NULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -484,6 +484,22 @@ static int do_parisc_entry(const char *filename, struct parisc_device_id *id,
|
|||
return 1;
|
||||
}
|
||||
|
||||
/* Looks like: sdio:cNvNdN. */
|
||||
static int do_sdio_entry(const char *filename,
|
||||
struct sdio_device_id *id, char *alias)
|
||||
{
|
||||
id->class = TO_NATIVE(id->class);
|
||||
id->vendor = TO_NATIVE(id->vendor);
|
||||
id->device = TO_NATIVE(id->device);
|
||||
|
||||
strcpy(alias, "sdio:");
|
||||
ADD(alias, "c", id->class != (__u8)SDIO_ANY_ID, id->class);
|
||||
ADD(alias, "v", id->vendor != (__u16)SDIO_ANY_ID, id->vendor);
|
||||
ADD(alias, "d", id->device != (__u16)SDIO_ANY_ID, id->device);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Ignore any prefix, eg. v850 prepends _ */
|
||||
static inline int sym_is(const char *symbol, const char *name)
|
||||
{
|
||||
|
@ -599,6 +615,10 @@ void handle_moddevtable(struct module *mod, struct elf_info *info,
|
|||
do_table(symval, sym->st_size,
|
||||
sizeof(struct parisc_device_id), "parisc",
|
||||
do_parisc_entry, mod);
|
||||
else if (sym_is(symname, "__mod_sdio_device_table"))
|
||||
do_table(symval, sym->st_size,
|
||||
sizeof(struct sdio_device_id), "sdio",
|
||||
do_sdio_entry, mod);
|
||||
}
|
||||
|
||||
/* Now add out buffered information to the generated C source */
|
||||
|
|
Loading…
Reference in New Issue