mirror of
https://github.com/torvalds/linux.git
synced 2024-11-12 15:11:50 +00:00
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: Lars-Peter Clausen <lars@metafoo.de> Reviewed-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
017e800af9
commit
6e0b73a0a1
@ -22,6 +22,9 @@
|
||||
|
||||
#include "wm9705.h"
|
||||
|
||||
#define WM9705_VENDOR_ID 0x574d4c05
|
||||
#define WM9705_VENDOR_ID_MASK 0xffffffff
|
||||
|
||||
/*
|
||||
* WM9705 register cache
|
||||
*/
|
||||
@ -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
|
||||
static int wm9705_soc_suspend(struct snd_soc_codec *codec)
|
||||
{
|
||||
@ -324,7 +312,8 @@ static int wm9705_soc_resume(struct snd_soc_codec *codec)
|
||||
int i, ret;
|
||||
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)
|
||||
return ret;
|
||||
|
||||
@ -342,30 +331,17 @@ static int wm9705_soc_resume(struct snd_soc_codec *codec)
|
||||
static int wm9705_soc_probe(struct snd_soc_codec *codec)
|
||||
{
|
||||
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)) {
|
||||
ret = PTR_ERR(ac97);
|
||||
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);
|
||||
|
||||
return 0;
|
||||
|
||||
err_put_device:
|
||||
put_device(&ac97->dev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int wm9705_soc_remove(struct snd_soc_codec *codec)
|
||||
|
Loading…
Reference in New Issue
Block a user