]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
ASoC: core: Two step component registration
authorCezary Rojewski <cezary.rojewski@intel.com>
Fri, 31 Jul 2020 14:41:46 +0000 (16:41 +0200)
committerMark Brown <broonie@kernel.org>
Fri, 31 Jul 2020 18:35:59 +0000 (19:35 +0100)
Modify snd_soc_add_component so it calls snd_soc_component_initialize
no longer and thus providing true two-step registration. Drivers may
choose to change component's fields before actually adding it to ASoC
subsystem.

Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
Link: https://lore.kernel.org/r/20200731144146.6678-4-cezary.rojewski@intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
include/sound/soc.h
sound/soc/soc-core.c
sound/soc/soc-generic-dmaengine-pcm.c
sound/soc/stm/stm32_adfsdm.c

index 787374362f832f741855f64dcbb20a7c2cdce826..5e3919ffb00c505c1ecd83262b9f310bae59b3a2 100644 (file)
@@ -417,11 +417,9 @@ int snd_soc_poweroff(struct device *dev);
 int snd_soc_component_initialize(struct snd_soc_component *component,
                                 const struct snd_soc_component_driver *driver,
                                 struct device *dev);
-int snd_soc_add_component(struct device *dev,
-               struct snd_soc_component *component,
-               const struct snd_soc_component_driver *component_driver,
-               struct snd_soc_dai_driver *dai_drv,
-               int num_dai);
+int snd_soc_add_component(struct snd_soc_component *component,
+                         struct snd_soc_dai_driver *dai_drv,
+                         int num_dai);
 int snd_soc_register_component(struct device *dev,
                         const struct snd_soc_component_driver *component_driver,
                         struct snd_soc_dai_driver *dai_drv, int num_dai);
index d8155402c5e1fdfaf0165762e8eb47ca63f5dcc4..fe23e936e2d155ae336c6ae9f013f2782f4917a9 100644 (file)
@@ -2460,22 +2460,16 @@ int snd_soc_component_initialize(struct snd_soc_component *component,
 }
 EXPORT_SYMBOL_GPL(snd_soc_component_initialize);
 
-int snd_soc_add_component(struct device *dev,
-                       struct snd_soc_component *component,
-                       const struct snd_soc_component_driver *component_driver,
-                       struct snd_soc_dai_driver *dai_drv,
-                       int num_dai)
+int snd_soc_add_component(struct snd_soc_component *component,
+                         struct snd_soc_dai_driver *dai_drv,
+                         int num_dai)
 {
        int ret;
        int i;
 
        mutex_lock(&client_mutex);
 
-       ret = snd_soc_component_initialize(component, component_driver, dev);
-       if (ret)
-               goto err_free;
-
-       if (component_driver->endianness) {
+       if (component->driver->endianness) {
                for (i = 0; i < num_dai; i++) {
                        convert_endianness_formats(&dai_drv[i].playback);
                        convert_endianness_formats(&dai_drv[i].capture);
@@ -2484,7 +2478,8 @@ int snd_soc_add_component(struct device *dev,
 
        ret = snd_soc_register_dais(component, dai_drv, num_dai);
        if (ret < 0) {
-               dev_err(dev, "ASoC: Failed to register DAIs: %d\n", ret);
+               dev_err(component->dev, "ASoC: Failed to register DAIs: %d\n",
+                       ret);
                goto err_cleanup;
        }
 
@@ -2502,7 +2497,7 @@ int snd_soc_add_component(struct device *dev,
 err_cleanup:
        if (ret < 0)
                snd_soc_del_component_unlocked(component);
-err_free:
+
        mutex_unlock(&client_mutex);
 
        if (ret == 0)
@@ -2518,13 +2513,17 @@ int snd_soc_register_component(struct device *dev,
                        int num_dai)
 {
        struct snd_soc_component *component;
+       int ret;
 
        component = devm_kzalloc(dev, sizeof(*component), GFP_KERNEL);
        if (!component)
                return -ENOMEM;
 
-       return snd_soc_add_component(dev, component, component_driver,
-                                    dai_drv, num_dai);
+       ret = snd_soc_component_initialize(component, component_driver, dev);
+       if (ret < 0)
+               return ret;
+
+       return snd_soc_add_component(component, dai_drv, num_dai);
 }
 EXPORT_SYMBOL_GPL(snd_soc_register_component);
 
index d17b4bf1dbe38841c2953e33ec45aa7b880bfcfa..fb95c1464e66d4e21da00173ec77fbdcf2046128 100644 (file)
@@ -424,6 +424,7 @@ static void dmaengine_pcm_release_chan(struct dmaengine_pcm *pcm)
 int snd_dmaengine_pcm_register(struct device *dev,
        const struct snd_dmaengine_pcm_config *config, unsigned int flags)
 {
+       const struct snd_soc_component_driver *driver;
        struct dmaengine_pcm *pcm;
        int ret;
 
@@ -442,12 +443,15 @@ int snd_dmaengine_pcm_register(struct device *dev,
                goto err_free_dma;
 
        if (config && config->process)
-               ret = snd_soc_add_component(dev, &pcm->component,
-                                           &dmaengine_pcm_component_process,
-                                           NULL, 0);
+               driver = &dmaengine_pcm_component_process;
        else
-               ret = snd_soc_add_component(dev, &pcm->component,
-                                           &dmaengine_pcm_component, NULL, 0);
+               driver = &dmaengine_pcm_component;
+
+       ret = snd_soc_component_initialize(&pcm->component, driver, dev);
+       if (ret)
+               goto err_free_dma;
+
+       ret = snd_soc_add_component(&pcm->component, NULL, 0);
        if (ret)
                goto err_free_dma;
 
index c1433c20b08b78aee869e69d853bd458b271acd8..ec27c13af04f66aeee863c79636bd62394262590 100644 (file)
@@ -344,12 +344,17 @@ static int stm32_adfsdm_probe(struct platform_device *pdev)
        component = devm_kzalloc(&pdev->dev, sizeof(*component), GFP_KERNEL);
        if (!component)
                return -ENOMEM;
+
+       ret = snd_soc_component_initialize(component,
+                                          &stm32_adfsdm_soc_platform,
+                                          &pdev->dev);
+       if (ret < 0)
+               return ret;
 #ifdef CONFIG_DEBUG_FS
        component->debugfs_prefix = "pcm";
 #endif
 
-       ret = snd_soc_add_component(&pdev->dev, component,
-                                   &stm32_adfsdm_soc_platform, NULL, 0);
+       ret = snd_soc_add_component(component, NULL, 0);
        if (ret < 0)
                dev_err(&pdev->dev, "%s: Failed to register PCM platform\n",
                        __func__);