Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1491206

[PATCH] ASoC: tpa6130a2: unmerge power enable error path from power disable path

From Nikita Yushchenko <nikita.yoush@cogentembedded.com>
Newsgroups linux.kernel
Subject [PATCH] ASoC: tpa6130a2: unmerge power enable error path from power disable path
Date 2016-09-26 12:40 +0200
Message-ID <slBui-2Jb-21@gated-at.bofh.it> (permalink)
References <slaNr-2Yy-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


Code undo operations in power enable errror path explicitly, instead of
reusing power disable path and playing with return values there.

Signed-off-by: Nikita Yushchenko <nikita.yoush@cogentembedded.com>
---
I doubt that copying 7 lines into error path is better than having a tiny
logic with return values, but still here it is.

 sound/soc/codecs/tpa6130a2.c | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/sound/soc/codecs/tpa6130a2.c b/sound/soc/codecs/tpa6130a2.c
index 3b6faed91d7e..3712db0881d0 100644
--- a/sound/soc/codecs/tpa6130a2.c
+++ b/sound/soc/codecs/tpa6130a2.c
@@ -71,7 +71,14 @@ static int tpa6130a2_power(struct tpa6130a2_data *data, bool enable)
 		if (ret != 0) {
 			dev_err(data->dev,
 				"Failed to sync registers: %d\n", ret);
-			goto regcache_sync_failed;
+			regcache_cache_only(data->regmap, true);
+			if (data->power_gpio >= 0)
+				gpio_set_value(data->power_gpio, 0);
+			ret2 = regulator_disable(data->supply);
+			if (ret2 != 0)
+				dev_err(data->dev,
+					"Failed to disable supply: %d\n", ret2);
+			return ret;
 		}
 	} else {
 		/* Powered off device does not retain registers. While device
@@ -79,18 +86,17 @@ static int tpa6130a2_power(struct tpa6130a2_data *data, bool enable)
 		 * happen in cache only.
 		 */
 		regcache_mark_dirty(data->regmap);
-regcache_sync_failed:
 		regcache_cache_only(data->regmap, true);
 
 		/* Power off */
 		if (data->power_gpio >= 0)
 			gpio_set_value(data->power_gpio, 0);
 
-		ret2 = regulator_disable(data->supply);
-		if (ret2 != 0) {
+		ret = regulator_disable(data->supply);
+		if (ret != 0) {
 			dev_err(data->dev,
-				"Failed to disable supply: %d\n", ret2);
-			return ret ? ret : ret2;
+				"Failed to disable supply: %d\n", ret);
+			return ret;
 		}
 	}
 
-- 
2.1.4

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Re: [PATCH] ASoC: tpa6130a2: fix volume setting when no stream is  running Mark Brown <broonie@kernel.org> - 2016-09-25 08:10 +0200
  [PATCH] ASoC: tpa6130a2: unmerge power enable error path from power disable path Nikita Yushchenko <nikita.yoush@cogentembedded.com> - 2016-09-26 12:40 +0200
    Re: [PATCH] ASoC: tpa6130a2: unmerge power enable error path from  power disable path Mark Brown <broonie@kernel.org> - 2016-09-26 18:10 +0200
      Re: [PATCH] ASoC: tpa6130a2: unmerge power enable error path from  power disable path Nikita Yushchenko <nikita.yoush@cogentembedded.com> - 2016-09-26 18:20 +0200
    Applied "ASoC: tpa6130a2: unmerge power enable error path from power disable path" to the asoc tree Mark Brown <broonie@kernel.org> - 2016-09-26 18:20 +0200

csiph-web