mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 16:54:21 +00:00 
			
		
		
		
	sound: oss: Use kernel_read_file_from_path() for mod_firmware_load()
Since recently we have kernel_read_file_from_path(), and it's doing the same thing as our own home-baked mod_firmware_load(). Let's use the official API function and clean up the old code. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
		
							parent
							
								
									4a6baf1b35
								
							
						
					
					
						commit
						0984d159c8
					
				
					 3 changed files with 28 additions and 79 deletions
				
			
		|  | @ -2,7 +2,6 @@ | ||||||
| #
 | #
 | ||||||
| 
 | 
 | ||||||
| obj-$(CONFIG_SOUND) += soundcore.o | obj-$(CONFIG_SOUND) += soundcore.o | ||||||
| obj-$(CONFIG_SOUND_PRIME) += sound_firmware.o |  | ||||||
| obj-$(CONFIG_SOUND_PRIME) += oss/ | obj-$(CONFIG_SOUND_PRIME) += oss/ | ||||||
| obj-$(CONFIG_DMASOUND) += oss/ | obj-$(CONFIG_DMASOUND) += oss/ | ||||||
| obj-$(CONFIG_SND) += core/ i2c/ drivers/ isa/ pci/ ppc/ arm/ sh/ synth/ usb/ \
 | obj-$(CONFIG_SND) += core/ i2c/ drivers/ isa/ pci/ ppc/ arm/ sh/ synth/ usb/ \
 | ||||||
|  |  | ||||||
|  | @ -1,2 +1,29 @@ | ||||||
| extern int mod_firmware_load(const char *fn, char **fp); | #include <linux/fs.h> | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  *	mod_firmware_load - load sound driver firmware | ||||||
|  |  *	@fn: filename | ||||||
|  |  *	@fp: return for the buffer. | ||||||
|  |  * | ||||||
|  |  *	Load the firmware for a sound module (up to 128K) into a buffer. | ||||||
|  |  *	The buffer is returned in *fp. It is allocated with vmalloc so is | ||||||
|  |  *	virtually linear and not DMAable. The caller should free it with | ||||||
|  |  *	vfree when finished. | ||||||
|  |  * | ||||||
|  |  *	The length of the buffer is returned on a successful load, the | ||||||
|  |  *	value zero on a failure. | ||||||
|  |  * | ||||||
|  |  *	Caution: This API is not recommended. Firmware should be loaded via | ||||||
|  |  *	request_firmware. | ||||||
|  |  */ | ||||||
|  | static inline int mod_firmware_load(const char *fn, char **fp) | ||||||
|  | { | ||||||
|  | 	loff_t size; | ||||||
|  | 	int err; | ||||||
|  | 
 | ||||||
|  | 	err = kernel_read_file_from_path((char *)fn, (void **)fp, &size, | ||||||
|  | 					 131072, READING_FIRMWARE); | ||||||
|  | 	if (err < 0) | ||||||
|  | 		return 0; | ||||||
|  | 	return size; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -1,77 +0,0 @@ | ||||||
| #include <linux/vmalloc.h> |  | ||||||
| #include <linux/module.h> |  | ||||||
| #include <linux/fs.h> |  | ||||||
| #include <linux/file.h> |  | ||||||
| #include <linux/mm.h> |  | ||||||
| #include <linux/sched.h> |  | ||||||
| #include <asm/uaccess.h> |  | ||||||
| #include "oss/sound_firmware.h" |  | ||||||
| 
 |  | ||||||
| static int do_mod_firmware_load(const char *fn, char **fp) |  | ||||||
| { |  | ||||||
| 	struct file* filp; |  | ||||||
| 	long l; |  | ||||||
| 	char *dp; |  | ||||||
| 
 |  | ||||||
| 	filp = filp_open(fn, 0, 0); |  | ||||||
| 	if (IS_ERR(filp)) |  | ||||||
| 	{ |  | ||||||
| 		printk(KERN_INFO "Unable to load '%s'.\n", fn); |  | ||||||
| 		return 0; |  | ||||||
| 	} |  | ||||||
| 	l = i_size_read(file_inode(filp)); |  | ||||||
| 	if (l <= 0 || l > 131072) |  | ||||||
| 	{ |  | ||||||
| 		printk(KERN_INFO "Invalid firmware '%s'\n", fn); |  | ||||||
| 		fput(filp); |  | ||||||
| 		return 0; |  | ||||||
| 	} |  | ||||||
| 	dp = vmalloc(l); |  | ||||||
| 	if (dp == NULL) |  | ||||||
| 	{ |  | ||||||
| 		printk(KERN_INFO "Out of memory loading '%s'.\n", fn); |  | ||||||
| 		fput(filp); |  | ||||||
| 		return 0; |  | ||||||
| 	} |  | ||||||
| 	if (kernel_read(filp, 0, dp, l) != l) |  | ||||||
| 	{ |  | ||||||
| 		printk(KERN_INFO "Failed to read '%s'.\n", fn); |  | ||||||
| 		vfree(dp); |  | ||||||
| 		fput(filp); |  | ||||||
| 		return 0; |  | ||||||
| 	} |  | ||||||
| 	fput(filp); |  | ||||||
| 	*fp = dp; |  | ||||||
| 	return (int) l; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /**
 |  | ||||||
|  *	mod_firmware_load - load sound driver firmware |  | ||||||
|  *	@fn: filename |  | ||||||
|  *	@fp: return for the buffer. |  | ||||||
|  * |  | ||||||
|  *	Load the firmware for a sound module (up to 128K) into a buffer. |  | ||||||
|  *	The buffer is returned in *fp. It is allocated with vmalloc so is |  | ||||||
|  *	virtually linear and not DMAable. The caller should free it with |  | ||||||
|  *	vfree when finished. |  | ||||||
|  * |  | ||||||
|  *	The length of the buffer is returned on a successful load, the |  | ||||||
|  *	value zero on a failure. |  | ||||||
|  * |  | ||||||
|  *	Caution: This API is not recommended. Firmware should be loaded via |  | ||||||
|  *	request_firmware. |  | ||||||
|  */ |  | ||||||
|   |  | ||||||
| int mod_firmware_load(const char *fn, char **fp) |  | ||||||
| { |  | ||||||
| 	int r; |  | ||||||
| 	mm_segment_t fs = get_fs(); |  | ||||||
| 
 |  | ||||||
| 	set_fs(get_ds()); |  | ||||||
| 	r = do_mod_firmware_load(fn, fp); |  | ||||||
| 	set_fs(fs); |  | ||||||
| 	return r; |  | ||||||
| } |  | ||||||
| EXPORT_SYMBOL(mod_firmware_load); |  | ||||||
| 
 |  | ||||||
| MODULE_LICENSE("GPL"); |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Takashi Iwai
						Takashi Iwai