Commit 6e0b73a0 authored by Lars-Peter Clausen's avatar Lars-Peter Clausen Committed by Mark Brown

ASoC: wm9705: Use core AC'97 reset helper

Use the new snd_ac97_reset() helper and the reset functionality provided by
snd_soc_new_ac97_codec() to perform the device reset rather than
open-coding it.
Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
Reviewed-by: default avatarTakashi Iwai <tiwai@suse.de>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 017e800a
...@@ -22,6 +22,9 @@ ...@@ -22,6 +22,9 @@
#include "wm9705.h" #include "wm9705.h"
#define WM9705_VENDOR_ID 0x574d4c05
#define WM9705_VENDOR_ID_MASK 0xffffffff
/* /*
* WM9705 register cache * WM9705 register cache
*/ */
...@@ -293,21 +296,6 @@ static struct snd_soc_dai_driver wm9705_dai[] = { ...@@ -293,21 +296,6 @@ static struct snd_soc_dai_driver wm9705_dai[] = {
} }
}; };
static int wm9705_reset(struct snd_soc_codec *codec)
{
struct snd_ac97 *ac97 = snd_soc_codec_get_drvdata(codec);
if (soc_ac97_ops->reset) {
soc_ac97_ops->reset(ac97);
if (ac97_read(codec, 0) == wm9705_reg[0])
return 0; /* Success */
}
dev_err(codec->dev, "Failed to reset: AC97 link error\n");
return -EIO;
}
#ifdef CONFIG_PM #ifdef CONFIG_PM
static int wm9705_soc_suspend(struct snd_soc_codec *codec) static int wm9705_soc_suspend(struct snd_soc_codec *codec)
{ {
...@@ -324,7 +312,8 @@ static int wm9705_soc_resume(struct snd_soc_codec *codec) ...@@ -324,7 +312,8 @@ static int wm9705_soc_resume(struct snd_soc_codec *codec)
int i, ret; int i, ret;
u16 *cache = codec->reg_cache; u16 *cache = codec->reg_cache;
ret = wm9705_reset(codec); ret = snd_ac97_reset(ac97, true, WM9705_VENDOR_ID,
WM9705_VENDOR_ID_MASK);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -342,30 +331,17 @@ static int wm9705_soc_resume(struct snd_soc_codec *codec) ...@@ -342,30 +331,17 @@ static int wm9705_soc_resume(struct snd_soc_codec *codec)
static int wm9705_soc_probe(struct snd_soc_codec *codec) static int wm9705_soc_probe(struct snd_soc_codec *codec)
{ {
struct snd_ac97 *ac97; struct snd_ac97 *ac97;
int ret = 0;
ac97 = snd_soc_alloc_ac97_codec(codec); ac97 = snd_soc_new_ac97_codec(codec, WM9705_VENDOR_ID,
WM9705_VENDOR_ID_MASK);
if (IS_ERR(ac97)) { if (IS_ERR(ac97)) {
ret = PTR_ERR(ac97);
dev_err(codec->dev, "Failed to register AC97 codec\n"); dev_err(codec->dev, "Failed to register AC97 codec\n");
return ret; return PTR_ERR(ac97);
} }
ret = wm9705_reset(codec);
if (ret)
goto err_put_device;
ret = device_add(&ac97->dev);
if (ret)
goto err_put_device;
snd_soc_codec_set_drvdata(codec, ac97); snd_soc_codec_set_drvdata(codec, ac97);
return 0; return 0;
err_put_device:
put_device(&ac97->dev);
return ret;
} }
static int wm9705_soc_remove(struct snd_soc_codec *codec) static int wm9705_soc_remove(struct snd_soc_codec *codec)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment