hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/sound/soc/soc-devres.c
....@@ -9,9 +9,48 @@
99 #include <sound/soc.h>
1010 #include <sound/dmaengine_pcm.h>
1111
12
+static void devm_dai_release(struct device *dev, void *res)
13
+{
14
+ snd_soc_unregister_dai(*(struct snd_soc_dai **)res);
15
+}
16
+
17
+/**
18
+ * devm_snd_soc_register_dai - resource-managed dai registration
19
+ * @dev: Device used to manage component
20
+ * @component: The component the DAIs are registered for
21
+ * @dai_drv: DAI driver to use for the DAI
22
+ * @legacy_dai_naming: if %true, use legacy single-name format;
23
+ * if %false, use multiple-name format;
24
+ */
25
+struct snd_soc_dai *devm_snd_soc_register_dai(struct device *dev,
26
+ struct snd_soc_component *component,
27
+ struct snd_soc_dai_driver *dai_drv,
28
+ bool legacy_dai_naming)
29
+{
30
+ struct snd_soc_dai **ptr;
31
+ struct snd_soc_dai *dai;
32
+
33
+ ptr = devres_alloc(devm_dai_release, sizeof(*ptr), GFP_KERNEL);
34
+ if (!ptr)
35
+ return NULL;
36
+
37
+ dai = snd_soc_register_dai(component, dai_drv, legacy_dai_naming);
38
+ if (dai) {
39
+ *ptr = dai;
40
+ devres_add(dev, ptr);
41
+ } else {
42
+ devres_free(ptr);
43
+ }
44
+
45
+ return dai;
46
+}
47
+EXPORT_SYMBOL_GPL(devm_snd_soc_register_dai);
48
+
1249 static void devm_component_release(struct device *dev, void *res)
1350 {
14
- snd_soc_unregister_component(*(struct device **)res);
51
+ const struct snd_soc_component_driver **cmpnt_drv = res;
52
+
53
+ snd_soc_unregister_component_by_driver(dev, *cmpnt_drv);
1554 }
1655
1756 /**
....@@ -28,7 +67,7 @@
2867 const struct snd_soc_component_driver *cmpnt_drv,
2968 struct snd_soc_dai_driver *dai_drv, int num_dai)
3069 {
31
- struct device **ptr;
70
+ const struct snd_soc_component_driver **ptr;
3271 int ret;
3372
3473 ptr = devres_alloc(devm_component_release, sizeof(*ptr), GFP_KERNEL);
....@@ -37,7 +76,7 @@
3776
3877 ret = snd_soc_register_component(dev, cmpnt_drv, dai_drv, num_dai);
3978 if (ret == 0) {
40
- *ptr = dev;
79
+ *ptr = cmpnt_drv;
4180 devres_add(dev, ptr);
4281 } else {
4382 devres_free(ptr);