#include <linux/device.h>
 #include <sound/core.h>
 #include <sound/pcm.h>
-#include <sound/ac97_codec.h>
 #include <sound/initval.h>
 #include <sound/soc.h>
 
                        SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 |\
                        SNDRV_PCM_RATE_192000)
 
-
 static struct snd_soc_dai_driver wm8727_dai = {
        .name = "wm8727-hifi",
        .playback = {
                },
 };
 
-static const struct snd_soc_codec_driver soc_codec_dev_wm8727 = {
-       .component_driver = {
-               .dapm_widgets           = wm8727_dapm_widgets,
-               .num_dapm_widgets       = ARRAY_SIZE(wm8727_dapm_widgets),
-               .dapm_routes            = wm8727_dapm_routes,
-               .num_dapm_routes        = ARRAY_SIZE(wm8727_dapm_routes),
-       },
+static const struct snd_soc_component_driver soc_component_dev_wm8727 = {
+       .dapm_widgets           = wm8727_dapm_widgets,
+       .num_dapm_widgets       = ARRAY_SIZE(wm8727_dapm_widgets),
+       .dapm_routes            = wm8727_dapm_routes,
+       .num_dapm_routes        = ARRAY_SIZE(wm8727_dapm_routes),
+       .idle_bias_on           = 1,
+       .use_pmdown_time        = 1,
+       .endianness             = 1,
+       .non_legacy_dai_naming  = 1,
 };
 
 static int wm8727_probe(struct platform_device *pdev)
 {
-       return snd_soc_register_codec(&pdev->dev,
-                       &soc_codec_dev_wm8727, &wm8727_dai, 1);
-}
-
-static int wm8727_remove(struct platform_device *pdev)
-{
-       snd_soc_unregister_codec(&pdev->dev);
-       return 0;
+       return devm_snd_soc_register_component(&pdev->dev,
+                       &soc_component_dev_wm8727, &wm8727_dai, 1);
 }
 
 static struct platform_driver wm8727_codec_driver = {
        },
 
        .probe = wm8727_probe,
-       .remove = wm8727_remove,
 };
 
 module_platform_driver(wm8727_codec_driver);