Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+8 −32
Original line number Diff line number Diff line
@@ -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)