Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 372004
b: refs/heads/master
c: 71a45cd
h: refs/heads/master
v: v3
  • Loading branch information
Lars-Peter Clausen authored and Mark Brown committed Apr 17, 2013
1 parent 2e80757 commit ebc8091
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 24 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 8b1b054f6be2c3f94bf027ad37bc85d9ec67677f
refs/heads/master: 71a45cda444f9c47bd63516cf4c24fb6d1ccb151
4 changes: 4 additions & 0 deletions trunk/include/sound/soc.h
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,10 @@ int snd_soc_poweroff(struct device *dev);
int snd_soc_register_platform(struct device *dev,
const struct snd_soc_platform_driver *platform_drv);
void snd_soc_unregister_platform(struct device *dev);
int snd_soc_add_platform(struct device *dev, struct snd_soc_platform *platform,
const struct snd_soc_platform_driver *platform_drv);
void snd_soc_remove_platform(struct snd_soc_platform *platform);
struct snd_soc_platform *snd_soc_lookup_platform(struct device *dev);
int snd_soc_register_codec(struct device *dev,
const struct snd_soc_codec_driver *codec_drv,
struct snd_soc_dai_driver *dai_drv, int num_dai);
Expand Down
85 changes: 62 additions & 23 deletions trunk/sound/soc/soc-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -3901,21 +3901,14 @@ void snd_soc_unregister_dais(struct device *dev, size_t count)
EXPORT_SYMBOL_GPL(snd_soc_unregister_dais);

/**
* snd_soc_register_platform - Register a platform with the ASoC core
*
* @platform: platform to register
* snd_soc_add_platform - Add a platform to the ASoC core
* @dev: The parent device for the platform
* @platform: The platform to add
* @platform_driver: The driver for the platform
*/
int snd_soc_register_platform(struct device *dev,
int snd_soc_add_platform(struct device *dev, struct snd_soc_platform *platform,
const struct snd_soc_platform_driver *platform_drv)
{
struct snd_soc_platform *platform;

dev_dbg(dev, "ASoC: platform register %s\n", dev_name(dev));

platform = kzalloc(sizeof(struct snd_soc_platform), GFP_KERNEL);
if (platform == NULL)
return -ENOMEM;

/* create platform component name */
platform->name = fmt_single_name(dev, &platform->id);
if (platform->name == NULL) {
Expand All @@ -3938,30 +3931,76 @@ int snd_soc_register_platform(struct device *dev,

return 0;
}
EXPORT_SYMBOL_GPL(snd_soc_register_platform);
EXPORT_SYMBOL_GPL(snd_soc_add_platform);

/**
* snd_soc_unregister_platform - Unregister a platform from the ASoC core
* snd_soc_register_platform - Register a platform with the ASoC core
*
* @platform: platform to unregister
* @platform: platform to register
*/
void snd_soc_unregister_platform(struct device *dev)
int snd_soc_register_platform(struct device *dev,
const struct snd_soc_platform_driver *platform_drv)
{
struct snd_soc_platform *platform;
int ret;

list_for_each_entry(platform, &platform_list, list) {
if (dev == platform->dev)
goto found;
}
return;
dev_dbg(dev, "ASoC: platform register %s\n", dev_name(dev));

found:
platform = kzalloc(sizeof(struct snd_soc_platform), GFP_KERNEL);
if (platform == NULL)
return -ENOMEM;

ret = snd_soc_add_platform(dev, platform, platform_drv);
if (ret)
kfree(platform);

return ret;
}
EXPORT_SYMBOL_GPL(snd_soc_register_platform);

/**
* snd_soc_remove_platform - Remove a platform from the ASoC core
* @platform: the platform to remove
*/
void snd_soc_remove_platform(struct snd_soc_platform *platform)
{
mutex_lock(&client_mutex);
list_del(&platform->list);
mutex_unlock(&client_mutex);

dev_dbg(dev, "ASoC: Unregistered platform '%s'\n", platform->name);
dev_dbg(platform->dev, "ASoC: Unregistered platform '%s'\n",
platform->name);
kfree(platform->name);
}
EXPORT_SYMBOL_GPL(snd_soc_remove_platform);

struct snd_soc_platform *snd_soc_lookup_platform(struct device *dev)
{
struct snd_soc_platform *platform;

list_for_each_entry(platform, &platform_list, list) {
if (dev == platform->dev)
return platform;
}

return NULL;
}
EXPORT_SYMBOL_GPL(snd_soc_lookup_platform);

/**
* snd_soc_unregister_platform - Unregister a platform from the ASoC core
*
* @platform: platform to unregister
*/
void snd_soc_unregister_platform(struct device *dev)
{
struct snd_soc_platform *platform;

platform = snd_soc_lookup_platform(dev);
if (!platform)
return;

snd_soc_remove_platform(platform);
kfree(platform);
}
EXPORT_SYMBOL_GPL(snd_soc_unregister_platform);
Expand Down

0 comments on commit ebc8091

Please sign in to comment.