{ 48000, ES8328_DACCONTROL6_DEEMPH_48k },
 };
 
-static int es8328_set_deemph(struct snd_soc_codec *codec)
+static int es8328_set_deemph(struct snd_soc_component *component)
 {
-       struct es8328_priv *es8328 = snd_soc_codec_get_drvdata(codec);
+       struct es8328_priv *es8328 = snd_soc_component_get_drvdata(component);
        int val, i, best;
 
        /*
                val = ES8328_DACCONTROL6_DEEMPH_OFF;
        }
 
-       dev_dbg(codec->dev, "Set deemphasis %d\n", val);
+       dev_dbg(component->dev, "Set deemphasis %d\n", val);
 
-       return snd_soc_update_bits(codec, ES8328_DACCONTROL6,
+       return snd_soc_component_update_bits(component, ES8328_DACCONTROL6,
                        ES8328_DACCONTROL6_DEEMPH_MASK, val);
 }
 
 static int es8328_get_deemph(struct snd_kcontrol *kcontrol,
                             struct snd_ctl_elem_value *ucontrol)
 {
-       struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
-       struct es8328_priv *es8328 = snd_soc_codec_get_drvdata(codec);
+       struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
+       struct es8328_priv *es8328 = snd_soc_component_get_drvdata(component);
 
        ucontrol->value.integer.value[0] = es8328->deemph;
        return 0;
 static int es8328_put_deemph(struct snd_kcontrol *kcontrol,
                             struct snd_ctl_elem_value *ucontrol)
 {
-       struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
-       struct es8328_priv *es8328 = snd_soc_codec_get_drvdata(codec);
+       struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
+       struct es8328_priv *es8328 = snd_soc_component_get_drvdata(component);
        unsigned int deemph = ucontrol->value.integer.value[0];
        int ret;
 
        if (deemph > 1)
                return -EINVAL;
 
-       ret = es8328_set_deemph(codec);
+       ret = es8328_set_deemph(component);
        if (ret < 0)
                return ret;
 
 
 static int es8328_mute(struct snd_soc_dai *dai, int mute)
 {
-       return snd_soc_update_bits(dai->codec, ES8328_DACCONTROL3,
+       return snd_soc_component_update_bits(dai->component, ES8328_DACCONTROL3,
                        ES8328_DACCONTROL3_DACMUTE,
                        mute ? ES8328_DACCONTROL3_DACMUTE : 0);
 }
 static int es8328_startup(struct snd_pcm_substream *substream,
                          struct snd_soc_dai *dai)
 {
-       struct snd_soc_codec *codec = dai->codec;
-       struct es8328_priv *es8328 = snd_soc_codec_get_drvdata(codec);
+       struct snd_soc_component *component = dai->component;
+       struct es8328_priv *es8328 = snd_soc_component_get_drvdata(component);
 
        if (es8328->master && es8328->sysclk_constraints)
                snd_pcm_hw_constraint_list(substream->runtime, 0,
        struct snd_pcm_hw_params *params,
        struct snd_soc_dai *dai)
 {
-       struct snd_soc_codec *codec = dai->codec;
-       struct es8328_priv *es8328 = snd_soc_codec_get_drvdata(codec);
+       struct snd_soc_component *component = dai->component;
+       struct es8328_priv *es8328 = snd_soc_component_get_drvdata(component);
        int i;
        int reg;
        int wl;
 
        if (es8328->master) {
                if (!es8328->sysclk_constraints) {
-                       dev_err(codec->dev, "No MCLK configured\n");
+                       dev_err(component->dev, "No MCLK configured\n");
                        return -EINVAL;
                }
 
                                break;
 
                if (i == es8328->sysclk_constraints->count) {
-                       dev_err(codec->dev,
+                       dev_err(component->dev,
                                "LRCLK %d unsupported with current clock\n",
                                params_rate(params));
                        return -EINVAL;
                es8328->mclkdiv2 = 0;
        }
 
-       snd_soc_update_bits(codec, ES8328_MASTERMODE,
+       snd_soc_component_update_bits(component, ES8328_MASTERMODE,
                        ES8328_MASTERMODE_MCLKDIV2,
                        es8328->mclkdiv2 ? ES8328_MASTERMODE_MCLKDIV2 : 0);
 
        }
 
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
-               snd_soc_update_bits(codec, ES8328_DACCONTROL1,
+               snd_soc_component_update_bits(component, ES8328_DACCONTROL1,
                                ES8328_DACCONTROL1_DACWL_MASK,
                                wl << ES8328_DACCONTROL1_DACWL_SHIFT);
 
                es8328->playback_fs = params_rate(params);
-               es8328_set_deemph(codec);
+               es8328_set_deemph(component);
        } else
-               snd_soc_update_bits(codec, ES8328_ADCCONTROL4,
+               snd_soc_component_update_bits(component, ES8328_ADCCONTROL4,
                                ES8328_ADCCONTROL4_ADCWL_MASK,
                                wl << ES8328_ADCCONTROL4_ADCWL_SHIFT);
 
-       return snd_soc_update_bits(codec, reg, ES8328_RATEMASK, ratio);
+       return snd_soc_component_update_bits(component, reg, ES8328_RATEMASK, ratio);
 }
 
 static int es8328_set_sysclk(struct snd_soc_dai *codec_dai,
                int clk_id, unsigned int freq, int dir)
 {
-       struct snd_soc_codec *codec = codec_dai->codec;
-       struct es8328_priv *es8328 = snd_soc_codec_get_drvdata(codec);
+       struct snd_soc_component *component = codec_dai->component;
+       struct es8328_priv *es8328 = snd_soc_component_get_drvdata(component);
        int mclkdiv2 = 0;
 
        switch (freq) {
 static int es8328_set_dai_fmt(struct snd_soc_dai *codec_dai,
                unsigned int fmt)
 {
-       struct snd_soc_codec *codec = codec_dai->codec;
-       struct es8328_priv *es8328 = snd_soc_codec_get_drvdata(codec);
+       struct snd_soc_component *component = codec_dai->component;
+       struct es8328_priv *es8328 = snd_soc_component_get_drvdata(component);
        u8 dac_mode = 0;
        u8 adc_mode = 0;
 
        switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
        case SND_SOC_DAIFMT_CBM_CFM:
                /* Master serial port mode, with BCLK generated automatically */
-               snd_soc_update_bits(codec, ES8328_MASTERMODE,
+               snd_soc_component_update_bits(component, ES8328_MASTERMODE,
                                    ES8328_MASTERMODE_MSC,
                                    ES8328_MASTERMODE_MSC);
                es8328->master = true;
                break;
        case SND_SOC_DAIFMT_CBS_CFS:
                /* Slave serial port mode */
-               snd_soc_update_bits(codec, ES8328_MASTERMODE,
+               snd_soc_component_update_bits(component, ES8328_MASTERMODE,
                                    ES8328_MASTERMODE_MSC, 0);
                es8328->master = false;
                break;
        if ((fmt & SND_SOC_DAIFMT_INV_MASK) != SND_SOC_DAIFMT_NB_NF)
                return -EINVAL;
 
-       snd_soc_update_bits(codec, ES8328_DACCONTROL1,
+       snd_soc_component_update_bits(component, ES8328_DACCONTROL1,
                        ES8328_DACCONTROL1_DACFORMAT_MASK, dac_mode);
-       snd_soc_update_bits(codec, ES8328_ADCCONTROL4,
+       snd_soc_component_update_bits(component, ES8328_ADCCONTROL4,
                        ES8328_ADCCONTROL4_ADCFORMAT_MASK, adc_mode);
 
        return 0;
 }
 
-static int es8328_set_bias_level(struct snd_soc_codec *codec,
+static int es8328_set_bias_level(struct snd_soc_component *component,
                                 enum snd_soc_bias_level level)
 {
        switch (level) {
 
        case SND_SOC_BIAS_PREPARE:
                /* VREF, VMID=2x50k, digital enabled */
-               snd_soc_write(codec, ES8328_CHIPPOWER, 0);
-               snd_soc_update_bits(codec, ES8328_CONTROL1,
+               snd_soc_component_write(component, ES8328_CHIPPOWER, 0);
+               snd_soc_component_update_bits(component, ES8328_CONTROL1,
                                ES8328_CONTROL1_VMIDSEL_MASK |
                                ES8328_CONTROL1_ENREF,
                                ES8328_CONTROL1_VMIDSEL_50k |
                break;
 
        case SND_SOC_BIAS_STANDBY:
-               if (snd_soc_codec_get_bias_level(codec) == SND_SOC_BIAS_OFF) {
-                       snd_soc_update_bits(codec, ES8328_CONTROL1,
+               if (snd_soc_component_get_bias_level(component) == SND_SOC_BIAS_OFF) {
+                       snd_soc_component_update_bits(component, ES8328_CONTROL1,
                                        ES8328_CONTROL1_VMIDSEL_MASK |
                                        ES8328_CONTROL1_ENREF,
                                        ES8328_CONTROL1_VMIDSEL_5k |
                        msleep(100);
                }
 
-               snd_soc_write(codec, ES8328_CONTROL2,
+               snd_soc_component_write(component, ES8328_CONTROL2,
                                ES8328_CONTROL2_OVERCURRENT_ON |
                                ES8328_CONTROL2_THERMAL_SHUTDOWN_ON);
 
                /* VREF, VMID=2*500k, digital stopped */
-               snd_soc_update_bits(codec, ES8328_CONTROL1,
+               snd_soc_component_update_bits(component, ES8328_CONTROL1,
                                ES8328_CONTROL1_VMIDSEL_MASK |
                                ES8328_CONTROL1_ENREF,
                                ES8328_CONTROL1_VMIDSEL_500k |
                break;
 
        case SND_SOC_BIAS_OFF:
-               snd_soc_update_bits(codec, ES8328_CONTROL1,
+               snd_soc_component_update_bits(component, ES8328_CONTROL1,
                                ES8328_CONTROL1_VMIDSEL_MASK |
                                ES8328_CONTROL1_ENREF,
                                0);
        .symmetric_rates = 1,
 };
 
-static int es8328_suspend(struct snd_soc_codec *codec)
+static int es8328_suspend(struct snd_soc_component *component)
 {
        struct es8328_priv *es8328;
        int ret;
 
-       es8328 = snd_soc_codec_get_drvdata(codec);
+       es8328 = snd_soc_component_get_drvdata(component);
 
        clk_disable_unprepare(es8328->clk);
 
        ret = regulator_bulk_disable(ARRAY_SIZE(es8328->supplies),
                        es8328->supplies);
        if (ret) {
-               dev_err(codec->dev, "unable to disable regulators\n");
+               dev_err(component->dev, "unable to disable regulators\n");
                return ret;
        }
        return 0;
 }
 
-static int es8328_resume(struct snd_soc_codec *codec)
+static int es8328_resume(struct snd_soc_component *component)
 {
-       struct regmap *regmap = dev_get_regmap(codec->dev, NULL);
+       struct regmap *regmap = dev_get_regmap(component->dev, NULL);
        struct es8328_priv *es8328;
        int ret;
 
-       es8328 = snd_soc_codec_get_drvdata(codec);
+       es8328 = snd_soc_component_get_drvdata(component);
 
        ret = clk_prepare_enable(es8328->clk);
        if (ret) {
-               dev_err(codec->dev, "unable to enable clock\n");
+               dev_err(component->dev, "unable to enable clock\n");
                return ret;
        }
 
        ret = regulator_bulk_enable(ARRAY_SIZE(es8328->supplies),
                                        es8328->supplies);
        if (ret) {
-               dev_err(codec->dev, "unable to enable regulators\n");
+               dev_err(component->dev, "unable to enable regulators\n");
                return ret;
        }
 
        regcache_mark_dirty(regmap);
        ret = regcache_sync(regmap);
        if (ret) {
-               dev_err(codec->dev, "unable to sync regcache\n");
+               dev_err(component->dev, "unable to sync regcache\n");
                return ret;
        }
 
        return 0;
 }
 
-static int es8328_codec_probe(struct snd_soc_codec *codec)
+static int es8328_component_probe(struct snd_soc_component *component)
 {
        struct es8328_priv *es8328;
        int ret;
 
-       es8328 = snd_soc_codec_get_drvdata(codec);
+       es8328 = snd_soc_component_get_drvdata(component);
 
        ret = regulator_bulk_enable(ARRAY_SIZE(es8328->supplies),
                                        es8328->supplies);
        if (ret) {
-               dev_err(codec->dev, "unable to enable regulators\n");
+               dev_err(component->dev, "unable to enable regulators\n");
                return ret;
        }
 
        /* Setup clocks */
-       es8328->clk = devm_clk_get(codec->dev, NULL);
+       es8328->clk = devm_clk_get(component->dev, NULL);
        if (IS_ERR(es8328->clk)) {
-               dev_err(codec->dev, "codec clock missing or invalid\n");
+               dev_err(component->dev, "codec clock missing or invalid\n");
                ret = PTR_ERR(es8328->clk);
                goto clk_fail;
        }
 
        ret = clk_prepare_enable(es8328->clk);
        if (ret) {
-               dev_err(codec->dev, "unable to prepare codec clk\n");
+               dev_err(component->dev, "unable to prepare codec clk\n");
                goto clk_fail;
        }
 
        return ret;
 }
 
-static int es8328_remove(struct snd_soc_codec *codec)
+static void es8328_remove(struct snd_soc_component *component)
 {
        struct es8328_priv *es8328;
 
-       es8328 = snd_soc_codec_get_drvdata(codec);
+       es8328 = snd_soc_component_get_drvdata(component);
 
        if (es8328->clk)
                clk_disable_unprepare(es8328->clk);
 
        regulator_bulk_disable(ARRAY_SIZE(es8328->supplies),
                               es8328->supplies);
-
-       return 0;
 }
 
 const struct regmap_config es8328_regmap_config = {
 };
 EXPORT_SYMBOL_GPL(es8328_regmap_config);
 
-static const struct snd_soc_codec_driver es8328_codec_driver = {
-       .probe            = es8328_codec_probe,
-       .suspend          = es8328_suspend,
-       .resume           = es8328_resume,
-       .remove           = es8328_remove,
-       .set_bias_level   = es8328_set_bias_level,
-       .suspend_bias_off = true,
-
-       .component_driver = {
-               .controls               = es8328_snd_controls,
-               .num_controls           = ARRAY_SIZE(es8328_snd_controls),
-               .dapm_widgets           = es8328_dapm_widgets,
-               .num_dapm_widgets       = ARRAY_SIZE(es8328_dapm_widgets),
-               .dapm_routes            = es8328_dapm_routes,
-               .num_dapm_routes        = ARRAY_SIZE(es8328_dapm_routes),
-       },
+static const struct snd_soc_component_driver es8328_component_driver = {
+       .probe                  = es8328_component_probe,
+       .remove                 = es8328_remove,
+       .suspend                = es8328_suspend,
+       .resume                 = es8328_resume,
+       .set_bias_level         = es8328_set_bias_level,
+       .controls               = es8328_snd_controls,
+       .num_controls           = ARRAY_SIZE(es8328_snd_controls),
+       .dapm_widgets           = es8328_dapm_widgets,
+       .num_dapm_widgets       = ARRAY_SIZE(es8328_dapm_widgets),
+       .dapm_routes            = es8328_dapm_routes,
+       .num_dapm_routes        = ARRAY_SIZE(es8328_dapm_routes),
+       .suspend_bias_off       = 1,
+       .idle_bias_on           = 1,
+       .use_pmdown_time        = 1,
+       .endianness             = 1,
+       .non_legacy_dai_naming  = 1,
 };
 
 int es8328_probe(struct device *dev, struct regmap *regmap)
 
        dev_set_drvdata(dev, es8328);
 
-       return snd_soc_register_codec(dev,
-                       &es8328_codec_driver, &es8328_dai, 1);
+       return devm_snd_soc_register_component(dev,
+                       &es8328_component_driver, &es8328_dai, 1);
 }
 EXPORT_SYMBOL_GPL(es8328_probe);