diff options
author | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2010-11-01 13:58:18 -0400 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2010-11-01 13:58:18 -0400 |
commit | 6e1bd1ab1d9ab8e83cdc940df82fbf8418e2593f (patch) | |
tree | f1324a39f155375221ed88db0626f61b75c51db6 /sound/soc/codecs/tpa6130a2.c | |
parent | ASoC: Store DC offset correction for wm_hubs devices in class W mode (diff) | |
parent | ASoC: Include cx20442 to SND_SOC_ALL_CODECS (diff) | |
download | linux-dev-6e1bd1ab1d9ab8e83cdc940df82fbf8418e2593f.tar.xz linux-dev-6e1bd1ab1d9ab8e83cdc940df82fbf8418e2593f.zip |
Merge branch 'for-2.6.37' into for-2.6.38
Diffstat (limited to 'sound/soc/codecs/tpa6130a2.c')
-rw-r--r-- | sound/soc/codecs/tpa6130a2.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/sound/soc/codecs/tpa6130a2.c b/sound/soc/codecs/tpa6130a2.c index 99b70e5978a2..329acc1a2074 100644 --- a/sound/soc/codecs/tpa6130a2.c +++ b/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, |