static int max9867_dai_hw_params(struct snd_pcm_substream *substream,
                struct snd_pcm_hw_params *params, struct snd_soc_dai *dai)
 {
-       struct snd_soc_codec *codec = dai->codec;
-       struct max9867_priv *max9867 = snd_soc_codec_get_drvdata(codec);
+       struct snd_soc_component *component = dai->component;
+       struct max9867_priv *max9867 = snd_soc_component_get_drvdata(component);
        unsigned int ni_h, ni_l;
        int value;
 
                                bclk_value = MAX9867_IFC1B_PCLK_16;
                                break;
                        default:
-                               dev_err(codec->dev,
+                               dev_err(component->dev,
                                        "unsupported sampling rate\n");
                                return -EINVAL;
                        }
                        bclk_value = MAX9867_IFC1B_32BIT;
                        break;
                default:
-                       dev_err(codec->dev, "unsupported sampling rate\n");
+                       dev_err(component->dev, "unsupported sampling rate\n");
                        return -EINVAL;
                }
                regmap_update_bits(max9867->regmap, MAX9867_IFC1B,
 static int max9867_prepare(struct snd_pcm_substream *substream,
                         struct snd_soc_dai *dai)
 {
-       struct snd_soc_codec *codec = dai->codec;
-       struct max9867_priv *max9867 = snd_soc_codec_get_drvdata(codec);
+       struct snd_soc_component *component = dai->component;
+       struct max9867_priv *max9867 = snd_soc_component_get_drvdata(component);
 
        regmap_update_bits(max9867->regmap, MAX9867_PWRMAN,
                MAX9867_SHTDOWN_MASK, MAX9867_SHTDOWN_MASK);
 
 static int max9867_mute(struct snd_soc_dai *dai, int mute)
 {
-       struct snd_soc_codec *codec = dai->codec;
-       struct max9867_priv *max9867 = snd_soc_codec_get_drvdata(codec);
+       struct snd_soc_component *component = dai->component;
+       struct max9867_priv *max9867 = snd_soc_component_get_drvdata(component);
 
        if (mute)
                regmap_update_bits(max9867->regmap, MAX9867_DACLEVEL,
 static int max9867_set_dai_sysclk(struct snd_soc_dai *codec_dai,
                int clk_id, unsigned int freq, int dir)
 {
-       struct snd_soc_codec *codec = codec_dai->codec;
-       struct max9867_priv *max9867 = snd_soc_codec_get_drvdata(codec);
+       struct snd_soc_component *component = codec_dai->component;
+       struct max9867_priv *max9867 = snd_soc_component_get_drvdata(component);
        int value = 0;
 
        /* Set the prescaler based on the master clock frequency*/
 static int max9867_dai_set_fmt(struct snd_soc_dai *codec_dai,
                unsigned int fmt)
 {
-       struct snd_soc_codec *codec = codec_dai->codec;
-       struct max9867_priv *max9867 = snd_soc_codec_get_drvdata(codec);
+       struct snd_soc_component *component = codec_dai->component;
+       struct max9867_priv *max9867 = snd_soc_component_get_drvdata(component);
        u8 iface1A = 0, iface1B = 0;
 
        switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
 }
 #endif
 
-static int max9867_probe(struct snd_soc_codec *codec)
+static int max9867_probe(struct snd_soc_component *component)
 {
-       struct max9867_priv *max9867 = snd_soc_codec_get_drvdata(codec);
+       struct max9867_priv *max9867 = snd_soc_component_get_drvdata(component);
 
-       dev_dbg(codec->dev, "max98090_probe\n");
-       max9867->codec = codec;
+       dev_dbg(component->dev, "max98090_probe\n");
+       max9867->component = component;
        return 0;
 }
 
-static const struct snd_soc_codec_driver max9867_codec = {
-       .probe = max9867_probe,
-       .component_driver = {
-               .controls               = max9867_snd_controls,
-               .num_controls           = ARRAY_SIZE(max9867_snd_controls),
-               .dapm_routes            = max9867_audio_map,
-               .num_dapm_routes        = ARRAY_SIZE(max9867_audio_map),
-               .dapm_widgets           = max9867_dapm_widgets,
-               .num_dapm_widgets       = ARRAY_SIZE(max9867_dapm_widgets),
-       },
+static const struct snd_soc_component_driver max9867_component = {
+       .probe                  = max9867_probe,
+       .controls               = max9867_snd_controls,
+       .num_controls           = ARRAY_SIZE(max9867_snd_controls),
+       .dapm_routes            = max9867_audio_map,
+       .num_dapm_routes        = ARRAY_SIZE(max9867_audio_map),
+       .dapm_widgets           = max9867_dapm_widgets,
+       .num_dapm_widgets       = ARRAY_SIZE(max9867_dapm_widgets),
+       .idle_bias_on           = 1,
+       .use_pmdown_time        = 1,
+       .endianness             = 1,
+       .non_legacy_dai_naming  = 1,
 };
 
 static bool max9867_volatile_register(struct device *dev, unsigned int reg)
                return ret;
        }
        dev_info(&i2c->dev, "device revision: %x\n", reg);
-       ret = snd_soc_register_codec(&i2c->dev, &max9867_codec,
+       ret = devm_snd_soc_register_component(&i2c->dev, &max9867_component,
                        max9867_dai, ARRAY_SIZE(max9867_dai));
        if (ret < 0) {
-               dev_err(&i2c->dev, "Failed to register codec: %d\n", ret);
+               dev_err(&i2c->dev, "Failed to register component: %d\n", ret);
                return ret;
        }
        return ret;
 }
 
-static int max9867_i2c_remove(struct i2c_client *client)
-{
-       snd_soc_unregister_codec(&client->dev);
-       return 0;
-}
-
 static const struct i2c_device_id max9867_i2c_id[] = {
        { "max9867", 0 },
        { }
                .pm = &max9867_pm_ops,
        },
        .probe  = max9867_i2c_probe,
-       .remove = max9867_i2c_remove,
        .id_table = max9867_i2c_id,
 };