Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

ASoC: soc-core: merge snd_soc_unregister_component() and snd_soc_unregister_component_by_driver()

We have below 2 functions, but these are very similar

(A) snd_soc_unregister_component_by_driver()
(B) snd_soc_unregister_component()

(A) void snd_soc_unregister_component_by_driver(...)
{
...

(a) mutex_lock(&client_mutex);
^ (X) component = snd_soc_lookup_component_nolocked(dev, component_driver->name);
| if (!component) ^^^^^^^^^^^^^^^^^^^^^^
| goto out;
(b)
| snd_soc_del_component_unlocked(component);
v
out:
(c) mutex_unlock(&client_mutex);
}

(B) void snd_soc_unregister_component_by_driver(...)
{
(a) mutex_lock(&client_mutex);
^ while (1) {
| (X) struct snd_soc_component *component = snd_soc_lookup_component_nolocked(dev, NULL);
| ^^^^
(b) if (!component)
| break;
|
| snd_soc_del_component_unlocked(component);
v }
(c) mutex_unlock(&client_mutex);
}

Both are calling lock (a), find component and remove it (b), and
unlock (c). The big diff is whether use driver name for lookup() or
not (X).

Merge these into snd_soc_unregister_component_by_driver() (B), and
snd_soc_unregister_component_by_driver() (A) can be macro.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://patch.msgid.link/87h61qy2vn.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Kuninori Morimoto and committed by
Mark Brown
144d6dfc 321f9db5

+6 -26
+1 -1
include/sound/soc.h
··· 444 444 int devm_snd_soc_register_component(struct device *dev, 445 445 const struct snd_soc_component_driver *component_driver, 446 446 struct snd_soc_dai_driver *dai_drv, int num_dai); 447 - void snd_soc_unregister_component(struct device *dev); 447 + #define snd_soc_unregister_component(dev) snd_soc_unregister_component_by_driver(dev, NULL) 448 448 void snd_soc_unregister_component_by_driver(struct device *dev, 449 449 const struct snd_soc_component_driver *component_driver); 450 450 struct snd_soc_component *snd_soc_lookup_component_nolocked(struct device *dev,
+5 -25
sound/soc/soc-core.c
··· 2927 2927 void snd_soc_unregister_component_by_driver(struct device *dev, 2928 2928 const struct snd_soc_component_driver *component_driver) 2929 2929 { 2930 - struct snd_soc_component *component; 2930 + const char *driver_name = NULL; 2931 2931 2932 - if (!component_driver) 2933 - return; 2932 + if (component_driver) 2933 + driver_name = component_driver->name; 2934 2934 2935 - mutex_lock(&client_mutex); 2936 - component = snd_soc_lookup_component_nolocked(dev, component_driver->name); 2937 - if (!component) 2938 - goto out; 2939 - 2940 - snd_soc_del_component_unlocked(component); 2941 - 2942 - out: 2943 - mutex_unlock(&client_mutex); 2944 - } 2945 - EXPORT_SYMBOL_GPL(snd_soc_unregister_component_by_driver); 2946 - 2947 - /** 2948 - * snd_soc_unregister_component - Unregister all related component 2949 - * from the ASoC core 2950 - * 2951 - * @dev: The device to unregister 2952 - */ 2953 - void snd_soc_unregister_component(struct device *dev) 2954 - { 2955 2935 mutex_lock(&client_mutex); 2956 2936 while (1) { 2957 - struct snd_soc_component *component = snd_soc_lookup_component_nolocked(dev, NULL); 2937 + struct snd_soc_component *component = snd_soc_lookup_component_nolocked(dev, driver_name); 2958 2938 2959 2939 if (!component) 2960 2940 break; ··· 2943 2963 } 2944 2964 mutex_unlock(&client_mutex); 2945 2965 } 2946 - EXPORT_SYMBOL_GPL(snd_soc_unregister_component); 2966 + EXPORT_SYMBOL_GPL(snd_soc_unregister_component_by_driver); 2947 2967 2948 2968 /* Retrieve a card's name from device tree */ 2949 2969 int snd_soc_of_parse_card_name(struct snd_soc_card *card,