Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d59b66c7 authored by Pierre Ossman's avatar Pierre Ossman
Browse files

sdio: add modalias support



Signed-off-by: default avatarPierre Ossman <drzeus@drzeus.cx>
parent 9eb3a94d
Loading
Loading
Loading
Loading
+20 −1
Original line number Diff line number Diff line
@@ -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;
}
+20 −0
Original line number Diff line number Diff line
@@ -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 */