mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	ALSA: hdac: remove memory allocation from snd_hdac_ext_bus_device_init
Remove memory allocation within snd_hdac_ext_bus_device_init, to make its behaviour identical to snd_hdac_bus_device_init. So that caller can allocate the parent data structure containing hdac_device. This API change helps in reusing the legacy HDA codec drivers with ASoC platform drivers. Signed-off-by: Rakesh Ughreja <rakesh.a.ughreja@intel.com> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
		
							parent
							
								
									24494d3f93
								
							
						
					
					
						commit
						6298542fa3
					
				
					 3 changed files with 11 additions and 8 deletions
				
			
		| 
						 | 
				
			
			@ -9,7 +9,8 @@ int snd_hdac_ext_bus_init(struct hdac_bus *bus, struct device *dev,
 | 
			
		|||
		      const struct hdac_io_ops *io_ops);
 | 
			
		||||
 | 
			
		||||
void snd_hdac_ext_bus_exit(struct hdac_bus *bus);
 | 
			
		||||
int snd_hdac_ext_bus_device_init(struct hdac_bus *bus, int addr);
 | 
			
		||||
int snd_hdac_ext_bus_device_init(struct hdac_bus *bus, int addr,
 | 
			
		||||
						struct hdac_device *hdev);
 | 
			
		||||
void snd_hdac_ext_bus_device_exit(struct hdac_device *hdev);
 | 
			
		||||
void snd_hdac_ext_bus_device_remove(struct hdac_bus *bus);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -135,16 +135,12 @@ static void default_release(struct device *dev)
 | 
			
		|||
 *
 | 
			
		||||
 * Returns zero for success or a negative error code.
 | 
			
		||||
 */
 | 
			
		||||
int snd_hdac_ext_bus_device_init(struct hdac_bus *bus, int addr)
 | 
			
		||||
int snd_hdac_ext_bus_device_init(struct hdac_bus *bus, int addr,
 | 
			
		||||
					struct hdac_device *hdev)
 | 
			
		||||
{
 | 
			
		||||
	struct hdac_device *hdev = NULL;
 | 
			
		||||
	char name[15];
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
	hdev = kzalloc(sizeof(*hdev), GFP_KERNEL);
 | 
			
		||||
	if (!hdev)
 | 
			
		||||
		return -ENOMEM;
 | 
			
		||||
 | 
			
		||||
	hdev->bus = bus;
 | 
			
		||||
 | 
			
		||||
	snprintf(name, sizeof(name), "ehdaudio%dD%d", bus->idx, addr);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -635,6 +635,8 @@ static int probe_codec(struct hdac_bus *bus, int addr)
 | 
			
		|||
	unsigned int cmd = (addr << 28) | (AC_NODE_ROOT << 20) |
 | 
			
		||||
		(AC_VERB_PARAMETERS << 8) | AC_PAR_VENDOR_ID;
 | 
			
		||||
	unsigned int res = -1;
 | 
			
		||||
	struct skl *skl = bus_to_skl(bus);
 | 
			
		||||
	struct hdac_device *hdev;
 | 
			
		||||
 | 
			
		||||
	mutex_lock(&bus->cmd_mutex);
 | 
			
		||||
	snd_hdac_bus_send_cmd(bus, cmd);
 | 
			
		||||
| 
						 | 
				
			
			@ -644,7 +646,11 @@ static int probe_codec(struct hdac_bus *bus, int addr)
 | 
			
		|||
		return -EIO;
 | 
			
		||||
	dev_dbg(bus->dev, "codec #%d probed OK\n", addr);
 | 
			
		||||
 | 
			
		||||
	return snd_hdac_ext_bus_device_init(bus, addr);
 | 
			
		||||
	hdev = devm_kzalloc(&skl->pci->dev, sizeof(*hdev), GFP_KERNEL);
 | 
			
		||||
	if (!hdev)
 | 
			
		||||
		return -ENOMEM;
 | 
			
		||||
 | 
			
		||||
	return snd_hdac_ext_bus_device_init(bus, addr, hdev);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Codec initialization */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue