static int jz4740_codec_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params, struct snd_soc_dai *dai)
 {
-       struct jz4740_codec *jz4740_codec = snd_soc_codec_get_drvdata(dai->codec);
+       struct jz4740_codec *jz4740_codec = snd_soc_component_get_drvdata(dai->component);
        uint32_t val;
 
        switch (params_rate(params)) {
        regcache_sync(regmap);
 }
 
-static int jz4740_codec_set_bias_level(struct snd_soc_codec *codec,
+static int jz4740_codec_set_bias_level(struct snd_soc_component *component,
        enum snd_soc_bias_level level)
 {
-       struct jz4740_codec *jz4740_codec = snd_soc_codec_get_drvdata(codec);
+       struct jz4740_codec *jz4740_codec = snd_soc_component_get_drvdata(component);
        struct regmap *regmap = jz4740_codec->regmap;
        unsigned int mask;
        unsigned int value;
                break;
        case SND_SOC_BIAS_STANDBY:
                /* The only way to clear the suspend flag is to reset the codec */
-               if (snd_soc_codec_get_bias_level(codec) == SND_SOC_BIAS_OFF)
+               if (snd_soc_component_get_bias_level(component) == SND_SOC_BIAS_OFF)
                        jz4740_codec_wakeup(regmap);
 
                mask = JZ4740_CODEC_1_VREF_DISABLE |
        return 0;
 }
 
-static int jz4740_codec_dev_probe(struct snd_soc_codec *codec)
+static int jz4740_codec_dev_probe(struct snd_soc_component *component)
 {
-       struct jz4740_codec *jz4740_codec = snd_soc_codec_get_drvdata(codec);
+       struct jz4740_codec *jz4740_codec = snd_soc_component_get_drvdata(component);
 
        regmap_update_bits(jz4740_codec->regmap, JZ4740_REG_CODEC_1,
                        JZ4740_CODEC_1_SW2_ENABLE, JZ4740_CODEC_1_SW2_ENABLE);
        return 0;
 }
 
-static const struct snd_soc_codec_driver soc_codec_dev_jz4740_codec = {
-       .probe = jz4740_codec_dev_probe,
-       .set_bias_level = jz4740_codec_set_bias_level,
-       .suspend_bias_off = true,
-
-       .component_driver = {
-               .controls               = jz4740_codec_controls,
-               .num_controls           = ARRAY_SIZE(jz4740_codec_controls),
-               .dapm_widgets           = jz4740_codec_dapm_widgets,
-               .num_dapm_widgets       = ARRAY_SIZE(jz4740_codec_dapm_widgets),
-               .dapm_routes            = jz4740_codec_dapm_routes,
-               .num_dapm_routes        = ARRAY_SIZE(jz4740_codec_dapm_routes),
-       },
+static const struct snd_soc_component_driver soc_codec_dev_jz4740_codec = {
+       .probe                  = jz4740_codec_dev_probe,
+       .set_bias_level         = jz4740_codec_set_bias_level,
+       .controls               = jz4740_codec_controls,
+       .num_controls           = ARRAY_SIZE(jz4740_codec_controls),
+       .dapm_widgets           = jz4740_codec_dapm_widgets,
+       .num_dapm_widgets       = ARRAY_SIZE(jz4740_codec_dapm_widgets),
+       .dapm_routes            = jz4740_codec_dapm_routes,
+       .num_dapm_routes        = ARRAY_SIZE(jz4740_codec_dapm_routes),
+       .suspend_bias_off       = 1,
+       .idle_bias_on           = 1,
+       .use_pmdown_time        = 1,
+       .endianness             = 1,
+       .non_legacy_dai_naming  = 1,
+
 };
 
 static const struct regmap_config jz4740_codec_regmap_config = {
 
        platform_set_drvdata(pdev, jz4740_codec);
 
-       ret = snd_soc_register_codec(&pdev->dev,
+       ret = devm_snd_soc_register_component(&pdev->dev,
                        &soc_codec_dev_jz4740_codec, &jz4740_codec_dai, 1);
        if (ret)
                dev_err(&pdev->dev, "Failed to register codec\n");
        return ret;
 }
 
-static int jz4740_codec_remove(struct platform_device *pdev)
-{
-       snd_soc_unregister_codec(&pdev->dev);
-
-       return 0;
-}
-
 static struct platform_driver jz4740_codec_driver = {
        .probe = jz4740_codec_probe,
-       .remove = jz4740_codec_remove,
        .driver = {
                .name = "jz4740-codec",
        },