From 800757731bb60abaee42764a078d303a302e1637 Mon Sep 17 00:00:00 2001 From: Peter Ujfalusi Date: Thu, 21 Oct 2010 15:03:03 +0300 Subject: [PATCH] --- yaml --- r: 216656 b: refs/heads/master c: 872a64d7e73f0e4dc435295da393db25332172b8 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/sound/soc/codecs/tpa6130a2.c | 28 ++++++++++++++++++++++------ 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index d919aeffe230..fa19293a4fe1 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: cf4bb69884c8f6a5791e0e251f0b9dc5d32fc256 +refs/heads/master: 872a64d7e73f0e4dc435295da393db25332172b8 diff --git a/trunk/sound/soc/codecs/tpa6130a2.c b/trunk/sound/soc/codecs/tpa6130a2.c index 99b70e5978a2..329acc1a2074 100644 --- a/trunk/sound/soc/codecs/tpa6130a2.c +++ b/trunk/sound/soc/codecs/tpa6130a2.c @@ -98,16 +98,21 @@ static u8 tpa6130a2_read(int reg) return data->regs[reg]; } -static void tpa6130a2_initialize(void) +static int tpa6130a2_initialize(void) { struct tpa6130a2_data *data; - int i; + int i, ret = 0; BUG_ON(tpa6130a2_client == NULL); data = i2c_get_clientdata(tpa6130a2_client); - for (i = 1; i < TPA6130A2_REG_VERSION; i++) - tpa6130a2_i2c_write(i, data->regs[i]); + for (i = 1; i < TPA6130A2_REG_VERSION; i++) { + ret = tpa6130a2_i2c_write(i, data->regs[i]); + if (ret < 0) + break; + } + + return ret; } static int tpa6130a2_power(int power) @@ -133,7 +138,16 @@ static int tpa6130a2_power(int power) } data->power_state = 1; - tpa6130a2_initialize(); + ret = tpa6130a2_initialize(); + if (ret < 0) { + dev_err(&tpa6130a2_client->dev, + "Failed to initialize chip\n"); + if (data->power_gpio >= 0) + gpio_set_value(data->power_gpio, 0); + regulator_disable(data->supply); + data->power_state = 0; + goto exit; + } /* Clear SWS */ val = tpa6130a2_read(TPA6130A2_REG_CONTROL); @@ -375,7 +389,9 @@ int tpa6130a2_add_controls(struct snd_soc_codec *codec) { struct tpa6130a2_data *data; - BUG_ON(tpa6130a2_client == NULL); + if (tpa6130a2_client == NULL) + return -ENODEV; + data = i2c_get_clientdata(tpa6130a2_client); snd_soc_dapm_new_controls(codec, tpa6130a2_dapm_widgets,