|
@@ -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) {
|
|
@@ -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);
|