Skip to content

Commit

Permalink
ASoC: wm8737: Move regulator acquisition to device registration
Browse files Browse the repository at this point in the history
This is better style as we acquire resources we will need before we go into
the ASoC card probe.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
  • Loading branch information
Mark Brown committed Sep 12, 2012
1 parent d16383e commit 4f69bb3
Showing 1 changed file with 23 additions and 18 deletions.
41 changes: 23 additions & 18 deletions sound/soc/codecs/wm8737.c
Original file line number Diff line number Diff line change
Expand Up @@ -557,24 +557,14 @@ static int wm8737_resume(struct snd_soc_codec *codec)
static int wm8737_probe(struct snd_soc_codec *codec)
{
struct wm8737_priv *wm8737 = snd_soc_codec_get_drvdata(codec);
int ret, i;
int ret;

ret = snd_soc_codec_set_cache_io(codec, 7, 9, wm8737->control_type);
if (ret != 0) {
dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
return ret;
}

for (i = 0; i < ARRAY_SIZE(wm8737->supplies); i++)
wm8737->supplies[i].supply = wm8737_supply_names[i];

ret = regulator_bulk_get(codec->dev, ARRAY_SIZE(wm8737->supplies),
wm8737->supplies);
if (ret != 0) {
dev_err(codec->dev, "Failed to request supplies: %d\n", ret);
return ret;
}

ret = regulator_bulk_enable(ARRAY_SIZE(wm8737->supplies),
wm8737->supplies);
if (ret != 0) {
Expand Down Expand Up @@ -607,17 +597,12 @@ static int wm8737_probe(struct snd_soc_codec *codec)
err_enable:
regulator_bulk_disable(ARRAY_SIZE(wm8737->supplies), wm8737->supplies);
err_get:
regulator_bulk_free(ARRAY_SIZE(wm8737->supplies), wm8737->supplies);

return ret;
}

static int wm8737_remove(struct snd_soc_codec *codec)
{
struct wm8737_priv *wm8737 = snd_soc_codec_get_drvdata(codec);

wm8737_set_bias_level(codec, SND_SOC_BIAS_OFF);
regulator_bulk_free(ARRAY_SIZE(wm8737->supplies), wm8737->supplies);
return 0;
}

Expand Down Expand Up @@ -645,13 +630,23 @@ static __devinit int wm8737_i2c_probe(struct i2c_client *i2c,
const struct i2c_device_id *id)
{
struct wm8737_priv *wm8737;
int ret;
int ret, i;

wm8737 = devm_kzalloc(&i2c->dev, sizeof(struct wm8737_priv),
GFP_KERNEL);
if (wm8737 == NULL)
return -ENOMEM;

for (i = 0; i < ARRAY_SIZE(wm8737->supplies); i++)
wm8737->supplies[i].supply = wm8737_supply_names[i];

ret = devm_regulator_bulk_get(&i2c->dev, ARRAY_SIZE(wm8737->supplies),
wm8737->supplies);
if (ret != 0) {
dev_err(&i2c->dev, "Failed to request supplies: %d\n", ret);
return ret;
}

i2c_set_clientdata(i2c, wm8737);
wm8737->control_type = SND_SOC_I2C;

Expand Down Expand Up @@ -691,13 +686,23 @@ static struct i2c_driver wm8737_i2c_driver = {
static int __devinit wm8737_spi_probe(struct spi_device *spi)
{
struct wm8737_priv *wm8737;
int ret;
int ret, i;

wm8737 = devm_kzalloc(&spi->dev, sizeof(struct wm8737_priv),
GFP_KERNEL);
if (wm8737 == NULL)
return -ENOMEM;

for (i = 0; i < ARRAY_SIZE(wm8737->supplies); i++)
wm8737->supplies[i].supply = wm8737_supply_names[i];

ret = devm_regulator_bulk_get(&spi->dev, ARRAY_SIZE(wm8737->supplies),
wm8737->supplies);
if (ret != 0) {
dev_err(&spi->dev, "Failed to request supplies: %d\n", ret);
return ret;
}

wm8737->control_type = SND_SOC_SPI;
spi_set_drvdata(spi, wm8737);

Expand Down

0 comments on commit 4f69bb3

Please sign in to comment.