ASoC: soc-core: snd_soc_unregister_component() unregister all component
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Mon, 7 Aug 2017 02:06:55 +0000 (02:06 +0000)
committerMark Brown <broonie@kernel.org>
Wed, 16 Aug 2017 12:05:14 +0000 (13:05 +0100)
Current snd_soc_unregister_component() unregisters first found
component only which was specified by dev.
This style can't specify concrete component if system registered some
component with same dev. And system need to call this function many
times.
This patch unregister all related component by 1 call.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/soc-core.c

index b1860b14b0757ac4327e0864b66c02b7250687b4..50c8dba5464975a212843b0691900c265feaad23 100644 (file)
@@ -3365,11 +3365,12 @@ err_free:
 EXPORT_SYMBOL_GPL(snd_soc_register_component);
 
 /**
- * snd_soc_unregister_component - Unregister a component from the ASoC core
+ * snd_soc_unregister_component - Unregister all related component
+ * from the ASoC core
  *
  * @dev: The device to unregister
  */
-void snd_soc_unregister_component(struct device *dev)
+static int __snd_soc_unregister_component(struct device *dev)
 {
        struct snd_soc_component *component;
        int found = 0;
@@ -3391,6 +3392,13 @@ void snd_soc_unregister_component(struct device *dev)
                snd_soc_component_cleanup(component);
                kfree(component);
        }
+
+       return found;
+}
+
+void snd_soc_unregister_component(struct device *dev)
+{
+       while (__snd_soc_unregister_component(dev));
 }
 EXPORT_SYMBOL_GPL(snd_soc_unregister_component);