summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXiubo Li <Li.Xiubo@freescale.com>2014-03-11 05:43:22 +0100
committerMark Brown <broonie@linaro.org>2014-03-11 10:59:06 +0100
commita32c17b87c17f5e2e68edcf4d163ee42f9490652 (patch)
tree3f1d0b9e20208ce3d62d57444352b981b61682cb
parentASoC: io: New signature for snd_soc_codec_set_cache_io() (diff)
downloadlinux-a32c17b87c17f5e2e68edcf4d163ee42f9490652.tar.xz
linux-a32c17b87c17f5e2e68edcf4d163ee42f9490652.zip
ASoC: core: Fix check before setting default I/O up try regmap
Since the CODEC driver could specify its own I/O(read and write) while registering the CODEC for some reason, maybe the MFDs is used, etc. So just do check it, if they are not specified by CODEC driver then try to set up the default regmap I/O if regmap is used. Signed-off-by: Xiubo Li <Li.Xiubo@freescale.com> Signed-off-by: Mark Brown <broonie@linaro.org>
-rw-r--r--sound/soc/soc-core.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index 6510a8e4a5af..cbddbd595213 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -1137,9 +1137,15 @@ static int soc_probe_codec(struct snd_soc_card *card,
codec->dapm.idle_bias_off = driver->idle_bias_off;
- /* Set the default I/O up try regmap */
- if (dev_get_regmap(codec->dev, NULL))
- snd_soc_codec_set_cache_io(codec, NULL);
+ if (!codec->write && dev_get_regmap(codec->dev, NULL)) {
+ /* Set the default I/O up try regmap */
+ ret = snd_soc_codec_set_cache_io(codec, NULL);
+ if (ret < 0) {
+ dev_err(codec->dev,
+ "Failed to set cache I/O: %d\n", ret);
+ goto err_probe;
+ }
+ }
if (driver->probe) {
ret = driver->probe(codec);