diff options
author | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2008-12-03 14:40:30 -0500 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2008-12-09 05:49:27 -0500 |
commit | 12a48a8c0087ba39d926cf1d63938ccbdb9752c3 (patch) | |
tree | 4fc400e27b9f524a908ec24b854131c435be2722 /sound | |
parent | 3f4b783cfdebb559814690572041a17bc9744cf3 (diff) |
ASoC: Add platform registration API
ASoC v2 allows platform drivers to instantiate independantly of the
overall ASoC card. This API allows drivers to notify the core when
they are registered.
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound')
-rw-r--r-- | sound/soc/soc-core.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index 03460b068f1e..ffae370b45df 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c | |||
@@ -46,6 +46,7 @@ static struct dentry *debugfs_root; | |||
46 | static DEFINE_MUTEX(client_mutex); | 46 | static DEFINE_MUTEX(client_mutex); |
47 | static LIST_HEAD(card_list); | 47 | static LIST_HEAD(card_list); |
48 | static LIST_HEAD(dai_list); | 48 | static LIST_HEAD(dai_list); |
49 | static LIST_HEAD(platform_list); | ||
49 | 50 | ||
50 | static int snd_soc_register_card(struct snd_soc_card *card); | 51 | static int snd_soc_register_card(struct snd_soc_card *card); |
51 | static int snd_soc_unregister_card(struct snd_soc_card *card); | 52 | static int snd_soc_unregister_card(struct snd_soc_card *card); |
@@ -2102,6 +2103,43 @@ void snd_soc_unregister_dais(struct snd_soc_dai *dai, size_t count) | |||
2102 | } | 2103 | } |
2103 | EXPORT_SYMBOL_GPL(snd_soc_unregister_dais); | 2104 | EXPORT_SYMBOL_GPL(snd_soc_unregister_dais); |
2104 | 2105 | ||
2106 | /** | ||
2107 | * snd_soc_register_platform - Register a platform with the ASoC core | ||
2108 | * | ||
2109 | * @param platform platform to register | ||
2110 | */ | ||
2111 | int snd_soc_register_platform(struct snd_soc_platform *platform) | ||
2112 | { | ||
2113 | if (!platform->name) | ||
2114 | return -EINVAL; | ||
2115 | |||
2116 | INIT_LIST_HEAD(&platform->list); | ||
2117 | |||
2118 | mutex_lock(&client_mutex); | ||
2119 | list_add(&platform->list, &platform_list); | ||
2120 | mutex_unlock(&client_mutex); | ||
2121 | |||
2122 | pr_debug("Registered platform '%s'\n", platform->name); | ||
2123 | |||
2124 | return 0; | ||
2125 | } | ||
2126 | EXPORT_SYMBOL_GPL(snd_soc_register_platform); | ||
2127 | |||
2128 | /** | ||
2129 | * snd_soc_unregister_platform - Unregister a platform from the ASoC core | ||
2130 | * | ||
2131 | * @param platform platform to unregister | ||
2132 | */ | ||
2133 | void snd_soc_unregister_platform(struct snd_soc_platform *platform) | ||
2134 | { | ||
2135 | mutex_lock(&client_mutex); | ||
2136 | list_del(&platform->list); | ||
2137 | mutex_unlock(&client_mutex); | ||
2138 | |||
2139 | pr_debug("Unregistered platform '%s'\n", platform->name); | ||
2140 | } | ||
2141 | EXPORT_SYMBOL_GPL(snd_soc_unregister_platform); | ||
2142 | |||
2105 | static int __devinit snd_soc_init(void) | 2143 | static int __devinit snd_soc_init(void) |
2106 | { | 2144 | { |
2107 | #ifdef CONFIG_DEBUG_FS | 2145 | #ifdef CONFIG_DEBUG_FS |