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
	
	Block a user