[alsa-devel] [PATCH] ASoC: tpa6130a2: Fix unbalanced regulator disables
This driver has unbalanced regulator_disable when doing module loading and unloading. This is because tpa6130a2_probe followed by tpa6130a2_remove calls twice tpa6130a2_power(0). Fix this by implementing a state checking in tpa6130a2_power.
Signed-off-by: Jarkko Nikula jhnikula@gmail.com Cc: Peter Ujfalusi peter.ujfalusi@nokia.com --- sound/soc/codecs/tpa6130a2.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/sound/soc/codecs/tpa6130a2.c b/sound/soc/codecs/tpa6130a2.c index 329acc1..83b5631 100644 --- a/sound/soc/codecs/tpa6130a2.c +++ b/sound/soc/codecs/tpa6130a2.c @@ -125,7 +125,7 @@ static int tpa6130a2_power(int power) data = i2c_get_clientdata(tpa6130a2_client);
mutex_lock(&data->mutex); - if (power) { + if (power && !data->power_state) { /* Power on */ if (data->power_gpio >= 0) gpio_set_value(data->power_gpio, 1); @@ -153,7 +153,7 @@ static int tpa6130a2_power(int power) val = tpa6130a2_read(TPA6130A2_REG_CONTROL); val &= ~TPA6130A2_SWS; tpa6130a2_i2c_write(TPA6130A2_REG_CONTROL, val); - } else { + } else if (!power && data->power_state) { /* set SWS */ val = tpa6130a2_read(TPA6130A2_REG_CONTROL); val |= TPA6130A2_SWS;
On Thursday 28 October 2010 14:05:40 ext Jarkko Nikula wrote:
This driver has unbalanced regulator_disable when doing module loading and unloading. This is because tpa6130a2_probe followed by tpa6130a2_remove calls twice tpa6130a2_power(0). Fix this by implementing a state checking in tpa6130a2_power.
Acked-by: Peter Ujfalusi peter.ujfalusi@nokia.com
On Thu, Oct 28, 2010 at 02:05:40PM +0300, Jarkko Nikula wrote:
This driver has unbalanced regulator_disable when doing module loading and unloading. This is because tpa6130a2_probe followed by tpa6130a2_remove calls twice tpa6130a2_power(0). Fix this by implementing a state checking in tpa6130a2_power.
Signed-off-by: Jarkko Nikula jhnikula@gmail.com Cc: Peter Ujfalusi peter.ujfalusi@nokia.com
Acked-by: Mark Brown broonie@opensource.wolfsonmicro.com
On Thu, 2010-10-28 at 19:33 +0100, Mark Brown wrote:
On Thu, Oct 28, 2010 at 02:05:40PM +0300, Jarkko Nikula wrote:
This driver has unbalanced regulator_disable when doing module loading and unloading. This is because tpa6130a2_probe followed by tpa6130a2_remove calls twice tpa6130a2_power(0). Fix this by implementing a state checking in tpa6130a2_power.
Signed-off-by: Jarkko Nikula jhnikula@gmail.com Cc: Peter Ujfalusi peter.ujfalusi@nokia.com
Acked-by: Mark Brown broonie@opensource.wolfsonmicro.com
Applied.
Thanks
Liam
At Thu, 28 Oct 2010 14:05:40 +0300, Jarkko Nikula wrote:
This driver has unbalanced regulator_disable when doing module loading and unloading. This is because tpa6130a2_probe followed by tpa6130a2_remove calls twice tpa6130a2_power(0). Fix this by implementing a state checking in tpa6130a2_power.
Signed-off-by: Jarkko Nikula jhnikula@gmail.com Cc: Peter Ujfalusi peter.ujfalusi@nokia.com
sound/soc/codecs/tpa6130a2.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/sound/soc/codecs/tpa6130a2.c b/sound/soc/codecs/tpa6130a2.c index 329acc1..83b5631 100644 --- a/sound/soc/codecs/tpa6130a2.c +++ b/sound/soc/codecs/tpa6130a2.c @@ -125,7 +125,7 @@ static int tpa6130a2_power(int power) data = i2c_get_clientdata(tpa6130a2_client);
mutex_lock(&data->mutex);
- if (power) {
- if (power && !data->power_state) { /* Power on */ if (data->power_gpio >= 0) gpio_set_value(data->power_gpio, 1);
@@ -153,7 +153,7 @@ static int tpa6130a2_power(int power) val = tpa6130a2_read(TPA6130A2_REG_CONTROL); val &= ~TPA6130A2_SWS; tpa6130a2_i2c_write(TPA6130A2_REG_CONTROL, val);
- } else {
- } else if (!power && data->power_state) { /* set SWS */ val = tpa6130a2_read(TPA6130A2_REG_CONTROL); val |= TPA6130A2_SWS;
This seems triggering a compile warning:
sound/soc/codecs/tpa6130a2.c:122:6: warning: ‘ret’ may be used uninitialized in this function
Takashi
On Wed, 03 Nov 2010 15:00:12 +0100 Takashi Iwai tiwai@suse.de wrote:
This seems triggering a compile warning:
sound/soc/codecs/tpa6130a2.c:122:6: warning: ‘ret’ may be used uninitialized in this function
My shame. I send a patch in a minute.
Patch "ASoC: tpa6130a2: Fix unbalanced regulator disables" introduced a compiler warning "‘ret’ may be used uninitialized in this function". Initialize ret to zero to get rid of it and making sure that the function does not return any random error code when the code is falling through.
Signed-off-by: Jarkko Nikula jhnikula@gmail.com --- sound/soc/codecs/tpa6130a2.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/sound/soc/codecs/tpa6130a2.c b/sound/soc/codecs/tpa6130a2.c index 83b5631..ee4fb20 100644 --- a/sound/soc/codecs/tpa6130a2.c +++ b/sound/soc/codecs/tpa6130a2.c @@ -119,7 +119,7 @@ static int tpa6130a2_power(int power) { struct tpa6130a2_data *data; u8 val; - int ret; + int ret = 0;
BUG_ON(tpa6130a2_client == NULL); data = i2c_get_clientdata(tpa6130a2_client);
At Wed, 3 Nov 2010 16:39:00 +0200, Jarkko Nikula wrote:
Patch "ASoC: tpa6130a2: Fix unbalanced regulator disables" introduced a compiler warning "‘ret’ may be used uninitialized in this function". Initialize ret to zero to get rid of it and making sure that the function does not return any random error code when the code is falling through.
Signed-off-by: Jarkko Nikula jhnikula@gmail.com
Thanks!
Applied now directly to sound git tree as I'm going to send a pull request soon later.
Mark, Liam, please pull back to your trees later on.
Takashi
sound/soc/codecs/tpa6130a2.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/sound/soc/codecs/tpa6130a2.c b/sound/soc/codecs/tpa6130a2.c index 83b5631..ee4fb20 100644 --- a/sound/soc/codecs/tpa6130a2.c +++ b/sound/soc/codecs/tpa6130a2.c @@ -119,7 +119,7 @@ static int tpa6130a2_power(int power) { struct tpa6130a2_data *data; u8 val;
- int ret;
int ret = 0;
BUG_ON(tpa6130a2_client == NULL); data = i2c_get_clientdata(tpa6130a2_client);
-- 1.7.2.3
participants (5)
-
Jarkko Nikula
-
Liam Girdwood
-
Mark Brown
-
Peter Ujfalusi
-
Takashi Iwai