]> git.karo-electronics.de Git - linux-beck.git/commitdiff
ASoC: Automatically initialize regmap for all components
authorLars-Peter Clausen <lars@metafoo.de>
Tue, 19 Aug 2014 13:51:28 +0000 (15:51 +0200)
committerMark Brown <broonie@linaro.org>
Tue, 19 Aug 2014 15:59:47 +0000 (10:59 -0500)
So far regmap is only automatically initialized for CODECs. Now that we have the
infrastructure in place to let components have DAPM widgets and controls that
want to use the generic regmap based IO also make sure to automatically
initialize regmap for all components.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Mark Brown <broonie@linaro.org>
include/sound/soc.h
sound/soc/soc-core.c
sound/soc/soc-io.c

index 3a0031e1f9b41df825f0e92b8f6e0653b6618856..8ebee30311e37e944bd5985503cc9617e91d5812 100644 (file)
@@ -1289,9 +1289,6 @@ void snd_soc_component_async_complete(struct snd_soc_component *component);
 int snd_soc_component_test_bits(struct snd_soc_component *component,
        unsigned int reg, unsigned int mask, unsigned int value);
 
-int snd_soc_component_init_io(struct snd_soc_component *component,
-       struct regmap *regmap);
-
 /* device driver data */
 
 static inline void snd_soc_card_set_drvdata(struct snd_soc_card *card,
index 140f43f9163570c8c7efc1186a40903800019181..96f286643ca16d28c0d7893f83f4bef684fd170e 100644 (file)
@@ -4032,8 +4032,23 @@ static int snd_soc_component_initialize(struct snd_soc_component *component,
        return 0;
 }
 
+static void snd_soc_component_init_regmap(struct snd_soc_component *component)
+{
+       if (!component->regmap)
+               component->regmap = dev_get_regmap(component->dev, NULL);
+       if (component->regmap) {
+               int val_bytes = regmap_get_val_bytes(component->regmap);
+               /* Errors are legitimate for non-integer byte multiples */
+               if (val_bytes > 0)
+                       component->val_bytes = val_bytes;
+       }
+}
+
 static void snd_soc_component_add_unlocked(struct snd_soc_component *component)
 {
+       if (!component->write && !component->read)
+               snd_soc_component_init_regmap(component);
+
        list_add(&component->list, &component_list);
 }
 
@@ -4371,7 +4386,6 @@ int snd_soc_register_codec(struct device *dev,
 {
        struct snd_soc_codec *codec;
        struct snd_soc_dai *dai;
-       struct regmap *regmap;
        int ret, i;
 
        dev_dbg(dev, "codec register %s\n", dev_name(dev));
@@ -4425,23 +4439,8 @@ int snd_soc_register_codec(struct device *dev,
        codec->component.debugfs_prefix = "codec";
 #endif
 
-       if (!codec->component.write) {
-               if (codec_drv->get_regmap)
-                       regmap = codec_drv->get_regmap(dev);
-               else
-                       regmap = dev_get_regmap(dev, NULL);
-
-               if (regmap) {
-                       ret = snd_soc_component_init_io(&codec->component,
-                               regmap);
-                       if (ret) {
-                               dev_err(codec->dev,
-                                               "Failed to set cache I/O:%d\n",
-                                               ret);
-                               goto err_cleanup;
-                       }
-               }
-       }
+       if (codec_drv->get_regmap)
+               codec->component.regmap = codec_drv->get_regmap(dev);
 
        for (i = 0; i < num_dai; i++) {
                fixup_codec_formats(&dai_drv[i].playback);
index 7767fbd73eb7a464434c805a901fa94fe64a5e04..9b3939049cefc357581200063108124c3adf8907 100644 (file)
@@ -271,31 +271,3 @@ int snd_soc_platform_write(struct snd_soc_platform *platform,
        return snd_soc_component_write(&platform->component, reg, val);
 }
 EXPORT_SYMBOL_GPL(snd_soc_platform_write);
-
-/**
- * snd_soc_component_init_io() - Initialize regmap IO
- *
- * @component: component to initialize
- * @regmap: regmap instance to use for IO operations
- *
- * Return: 0 on success, a negative error code otherwise
- */
-int snd_soc_component_init_io(struct snd_soc_component *component,
-       struct regmap *regmap)
-{
-       int ret;
-
-       if (!regmap)
-               return -EINVAL;
-
-       ret = regmap_get_val_bytes(regmap);
-       /* Errors are legitimate for non-integer byte
-        * multiples */
-       if (ret > 0)
-               component->val_bytes = ret;
-
-       component->regmap = regmap;
-
-       return 0;
-}
-EXPORT_SYMBOL_GPL(snd_soc_component_init_io);