[alsa-devel] [PATCH 7/7] ASoC: wm9713: Use core AC'97 reset helper
Takashi Iwai
tiwai at suse.de
Wed Jul 22 10:46:47 CEST 2015
On Tue, 21 Jul 2015 21:53:06 +0200,
Lars-Peter Clausen wrote:
>
> 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 at metafoo.de>
Better to mention about the removal of the exported wm9713_reset().
I know it's not used anywhere else and safe to remove, but I had to go
git-grep for figuring it out.
thanks,
Takashi
> ---
> sound/soc/codecs/wm9713.c | 48 ++++++++---------------------------------------
> sound/soc/codecs/wm9713.h | 2 --
> 2 files changed, 8 insertions(+), 42 deletions(-)
>
> diff --git a/sound/soc/codecs/wm9713.c b/sound/soc/codecs/wm9713.c
> index 89cd2d6..955e651 100644
> --- a/sound/soc/codecs/wm9713.c
> +++ b/sound/soc/codecs/wm9713.c
> @@ -29,6 +29,9 @@
>
> #include "wm9713.h"
>
> +#define WM9713_VENDOR_ID 0x574d4c13
> +#define WM9713_VENDOR_ID_MASK 0xffffffff
> +
> struct wm9713_priv {
> struct snd_ac97 *ac97;
> u32 pll_in; /* PLL input frequency */
> @@ -1123,28 +1126,6 @@ static struct snd_soc_dai_driver wm9713_dai[] = {
> },
> };
>
> -int wm9713_reset(struct snd_soc_codec *codec, int try_warm)
> -{
> - struct wm9713_priv *wm9713 = snd_soc_codec_get_drvdata(codec);
> -
> - if (try_warm && soc_ac97_ops->warm_reset) {
> - soc_ac97_ops->warm_reset(wm9713->ac97);
> - if (ac97_read(codec, 0) == wm9713_reg[0])
> - return 1;
> - }
> -
> - soc_ac97_ops->reset(wm9713->ac97);
> - if (soc_ac97_ops->warm_reset)
> - soc_ac97_ops->warm_reset(wm9713->ac97);
> - if (ac97_read(codec, 0) != wm9713_reg[0]) {
> - dev_err(codec->dev, "Failed to reset: AC97 link error\n");
> - return -EIO;
> - }
> -
> - return 0;
> -}
> -EXPORT_SYMBOL_GPL(wm9713_reset);
> -
> static int wm9713_set_bias_level(struct snd_soc_codec *codec,
> enum snd_soc_bias_level level)
> {
> @@ -1196,7 +1177,8 @@ static int wm9713_soc_resume(struct snd_soc_codec *codec)
> int i, ret;
> u16 *cache = codec->reg_cache;
>
> - ret = wm9713_reset(codec, 1);
> + ret = snd_ac97_reset(wm9713->ac97, true, WM9713_VENDOR_ID,
> + WM9713_VENDOR_ID_MASK);
> if (ret < 0)
> return ret;
>
> @@ -1222,32 +1204,18 @@ static int wm9713_soc_resume(struct snd_soc_codec *codec)
> static int wm9713_soc_probe(struct snd_soc_codec *codec)
> {
> struct wm9713_priv *wm9713 = snd_soc_codec_get_drvdata(codec);
> - int ret = 0, reg;
> + int reg;
>
> - wm9713->ac97 = snd_soc_alloc_ac97_codec(codec);
> + wm9713->ac97 = snd_soc_new_ac97_codec(codec, WM9713_VENDOR_ID,
> + WM9713_VENDOR_ID_MASK);
> if (IS_ERR(wm9713->ac97))
> return PTR_ERR(wm9713->ac97);
>
> - /* do a cold reset for the controller and then try
> - * a warm reset followed by an optional cold reset for codec */
> - wm9713_reset(codec, 0);
> - ret = wm9713_reset(codec, 1);
> - if (ret < 0)
> - goto err_put_device;
> -
> - ret = device_add(&wm9713->ac97->dev);
> - if (ret)
> - goto err_put_device;
> -
> /* unmute the adc - move to kcontrol */
> reg = ac97_read(codec, AC97_CD) & 0x7fff;
> ac97_write(codec, AC97_CD, reg);
>
> return 0;
> -
> -err_put_device:
> - put_device(&wm9713->ac97->dev);
> - return ret;
> }
>
> static int wm9713_soc_remove(struct snd_soc_codec *codec)
> diff --git a/sound/soc/codecs/wm9713.h b/sound/soc/codecs/wm9713.h
> index 793da86..53df11b 100644
> --- a/sound/soc/codecs/wm9713.h
> +++ b/sound/soc/codecs/wm9713.h
> @@ -45,6 +45,4 @@
> #define WM9713_DAI_AC97_AUX 1
> #define WM9713_DAI_PCM_VOICE 2
>
> -int wm9713_reset(struct snd_soc_codec *codec, int try_warm);
> -
> #endif
> --
> 2.1.4
>
>
More information about the Alsa-devel
mailing list