struct snd_pcm_hw_params *params,
                struct snd_soc_dai *dai)
 {
-       struct ad1836_priv *ad1836 = snd_soc_codec_get_drvdata(dai->codec);
+       struct ad1836_priv *ad1836 = snd_soc_component_get_drvdata(dai->component);
        int word_len = 0;
 
        /* bit size */
 };
 
 #ifdef CONFIG_PM
-static int ad1836_suspend(struct snd_soc_codec *codec)
+static int ad1836_suspend(struct snd_soc_component *component)
 {
-       struct ad1836_priv *ad1836 = snd_soc_codec_get_drvdata(codec);
+       struct ad1836_priv *ad1836 = snd_soc_component_get_drvdata(component);
        /* reset clock control mode */
        return regmap_update_bits(ad1836->regmap, AD1836_ADC_CTRL2,
                AD1836_ADC_SERFMT_MASK, 0);
 }
 
-static int ad1836_resume(struct snd_soc_codec *codec)
+static int ad1836_resume(struct snd_soc_component *component)
 {
-       struct ad1836_priv *ad1836 = snd_soc_codec_get_drvdata(codec);
+       struct ad1836_priv *ad1836 = snd_soc_component_get_drvdata(component);
        /* restore clock control mode */
        return regmap_update_bits(ad1836->regmap, AD1836_ADC_CTRL2,
                AD1836_ADC_SERFMT_MASK, AD1836_ADC_AUX);
 #define ad1836_resume  NULL
 #endif
 
-static int ad1836_probe(struct snd_soc_codec *codec)
+static int ad1836_probe(struct snd_soc_component *component)
 {
-       struct ad1836_priv *ad1836 = snd_soc_codec_get_drvdata(codec);
-       struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
+       struct ad1836_priv *ad1836 = snd_soc_component_get_drvdata(component);
+       struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
        int num_dacs, num_adcs;
        int ret = 0;
        int i;
        if (ad1836->type == AD1836) {
                /* left/right diff:PGA/MUX */
                regmap_write(ad1836->regmap, AD1836_ADC_CTRL3, 0x3A);
-               ret = snd_soc_add_codec_controls(codec, ad1836_controls,
+               ret = snd_soc_add_component_controls(component, ad1836_controls,
                                ARRAY_SIZE(ad1836_controls));
                if (ret)
                        return ret;
                regmap_write(ad1836->regmap, AD1836_ADC_CTRL3, 0x00);
        }
 
-       ret = snd_soc_add_codec_controls(codec, ad183x_dac_controls, num_dacs * 2);
+       ret = snd_soc_add_component_controls(component, ad183x_dac_controls, num_dacs * 2);
        if (ret)
                return ret;
 
-       ret = snd_soc_add_codec_controls(codec, ad183x_adc_controls, num_adcs);
+       ret = snd_soc_add_component_controls(component, ad183x_adc_controls, num_adcs);
        if (ret)
                return ret;
 
 }
 
 /* power down chip */
-static int ad1836_remove(struct snd_soc_codec *codec)
+static void ad1836_remove(struct snd_soc_component *component)
 {
-       struct ad1836_priv *ad1836 = snd_soc_codec_get_drvdata(codec);
+       struct ad1836_priv *ad1836 = snd_soc_component_get_drvdata(component);
        /* reset clock control mode */
-       return regmap_update_bits(ad1836->regmap, AD1836_ADC_CTRL2,
+       regmap_update_bits(ad1836->regmap, AD1836_ADC_CTRL2,
                AD1836_ADC_SERFMT_MASK, 0);
 }
 
-static const struct snd_soc_codec_driver soc_codec_dev_ad1836 = {
-       .probe = ad1836_probe,
-       .remove = ad1836_remove,
-       .suspend = ad1836_suspend,
-       .resume = ad1836_resume,
-
-       .component_driver = {
-               .controls               = ad183x_controls,
-               .num_controls           = ARRAY_SIZE(ad183x_controls),
-               .dapm_widgets           = ad183x_dapm_widgets,
-               .num_dapm_widgets       = ARRAY_SIZE(ad183x_dapm_widgets),
-               .dapm_routes            = ad183x_dapm_routes,
-               .num_dapm_routes        = ARRAY_SIZE(ad183x_dapm_routes),
-       },
+static const struct snd_soc_component_driver soc_component_dev_ad1836 = {
+       .probe                  = ad1836_probe,
+       .remove                 = ad1836_remove,
+       .suspend                = ad1836_suspend,
+       .resume                 = ad1836_resume,
+       .controls               = ad183x_controls,
+       .num_controls           = ARRAY_SIZE(ad183x_controls),
+       .dapm_widgets           = ad183x_dapm_widgets,
+       .num_dapm_widgets       = ARRAY_SIZE(ad183x_dapm_widgets),
+       .dapm_routes            = ad183x_dapm_routes,
+       .num_dapm_routes        = ARRAY_SIZE(ad183x_dapm_routes),
+       .idle_bias_on           = 1,
+       .use_pmdown_time        = 1,
+       .endianness             = 1,
+       .non_legacy_dai_naming  = 1,
 };
 
 static const struct reg_default ad1836_reg_defaults[] = {
 
        spi_set_drvdata(spi, ad1836);
 
-       ret = snd_soc_register_codec(&spi->dev,
-                       &soc_codec_dev_ad1836, &ad183x_dais[ad1836->type], 1);
+       ret = devm_snd_soc_register_component(&spi->dev,
+                       &soc_component_dev_ad1836, &ad183x_dais[ad1836->type], 1);
        return ret;
 }
 
-static int ad1836_spi_remove(struct spi_device *spi)
-{
-       snd_soc_unregister_codec(&spi->dev);
-       return 0;
-}
-
 static const struct spi_device_id ad1836_ids[] = {
        { "ad1835", AD1835 },
        { "ad1836", AD1836 },
                .name   = "ad1836",
        },
        .probe          = ad1836_spi_probe,
-       .remove         = ad1836_spi_remove,
        .id_table       = ad1836_ids,
 };