diff options
author | Takashi Iwai <tiwai@suse.de> | 2010-10-23 17:01:17 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2010-10-23 17:01:17 +0200 |
commit | b11bdb5254ff17cb63e4ae5088b73fdcd2cc2602 (patch) | |
tree | b5d57f358bf83d31ccdad3604b4a6e82a47ff612 /sound/soc/codecs/tpa6130a2.c | |
parent | ASoC: max98088: Staticise m98088_eq_band (diff) | |
parent | ASoC: tlv320dac33: Use usleep_range for delays (diff) | |
download | linux-b11bdb5254ff17cb63e4ae5088b73fdcd2cc2602.tar.xz linux-b11bdb5254ff17cb63e4ae5088b73fdcd2cc2602.zip |
Merge branch 'for-2.6.37' of git://git.kernel.org/pub/scm/linux/kernel/git/lrg/asoc-2.6 into topic/asoc
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, |