Merge branch 'clk-fixes' into clk-next
[deliverable/linux.git] / sound / soc / codecs / wm9712.c
index 1fda104dfc455cafcf83e13ed210302f8b825fbe..488a92224249f064922e4c019ab5065f07b87c74 100644 (file)
@@ -23,6 +23,9 @@
 #include <sound/tlv.h>
 #include "wm9712.h"
 
+#define WM9712_VENDOR_ID 0x574d4c12
+#define WM9712_VENDOR_ID_MASK 0xffffffff
+
 struct wm9712_priv {
        struct snd_ac97 *ac97;
        unsigned int hp_mixer[2];
@@ -613,35 +616,14 @@ static int wm9712_set_bias_level(struct snd_soc_codec *codec,
        return 0;
 }
 
-static int wm9712_reset(struct snd_soc_codec *codec, int try_warm)
-{
-       struct wm9712_priv *wm9712 = snd_soc_codec_get_drvdata(codec);
-
-       if (try_warm && soc_ac97_ops->warm_reset) {
-               soc_ac97_ops->warm_reset(wm9712->ac97);
-               if (ac97_read(codec, 0) == wm9712_reg[0])
-                       return 1;
-       }
-
-       soc_ac97_ops->reset(wm9712->ac97);
-       if (soc_ac97_ops->warm_reset)
-               soc_ac97_ops->warm_reset(wm9712->ac97);
-       if (ac97_read(codec, 0) != wm9712_reg[0])
-               goto err;
-       return 0;
-
-err:
-       dev_err(codec->dev, "Failed to reset: AC97 link error\n");
-       return -EIO;
-}
-
 static int wm9712_soc_resume(struct snd_soc_codec *codec)
 {
        struct wm9712_priv *wm9712 = snd_soc_codec_get_drvdata(codec);
        int i, ret;
        u16 *cache = codec->reg_cache;
 
-       ret = wm9712_reset(codec, 1);
+       ret = snd_ac97_reset(wm9712->ac97, true, WM9712_VENDOR_ID,
+               WM9712_VENDOR_ID_MASK);
        if (ret < 0)
                return ret;
 
@@ -663,31 +645,20 @@ static int wm9712_soc_resume(struct snd_soc_codec *codec)
 static int wm9712_soc_probe(struct snd_soc_codec *codec)
 {
        struct wm9712_priv *wm9712 = snd_soc_codec_get_drvdata(codec);
-       int ret = 0;
+       int ret;
 
-       wm9712->ac97 = snd_soc_alloc_ac97_codec(codec);
+       wm9712->ac97 = snd_soc_new_ac97_codec(codec, WM9712_VENDOR_ID,
+               WM9712_VENDOR_ID_MASK);
        if (IS_ERR(wm9712->ac97)) {
                ret = PTR_ERR(wm9712->ac97);
                dev_err(codec->dev, "Failed to register AC97 codec: %d\n", ret);
                return ret;
        }
 
-       ret = wm9712_reset(codec, 0);
-       if (ret < 0)
-               goto err_put_device;
-
-       ret = device_add(&wm9712->ac97->dev);
-       if (ret)
-               goto err_put_device;
-
        /* set alc mux to none */
        ac97_write(codec, AC97_VIDEO, ac97_read(codec, AC97_VIDEO) | 0x3000);
 
        return 0;
-
-err_put_device:
-       put_device(&wm9712->ac97->dev);
-       return ret;
 }
 
 static int wm9712_soc_remove(struct snd_soc_codec *codec)
This page took 0.025309 seconds and 5 git commands to generate.