struct snd_kcontrol *kcontrol,
                                                int event)
 {
-       struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
+       struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
 
        switch (event) {
        case SND_SOC_DAPM_POST_PMU:
                /* apply the digital gain after the interpolator is enabled */
                usleep_range(10000, 10100);
-               snd_soc_write(codec, rx_gain_reg[w->shift],
-                             snd_soc_read(codec, rx_gain_reg[w->shift]));
+               snd_soc_component_write(component, rx_gain_reg[w->shift],
+                             snd_soc_component_read32(component, rx_gain_reg[w->shift]));
                break;
        }
        return 0;
                                          struct snd_kcontrol *kcontrol,
                                          int event)
 {
-       struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
+       struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
        unsigned int decimator = w->shift + 1;
        u16 dec_reset_reg, tx_vol_ctl_reg, tx_mux_ctl_reg;
        u8 dec_hpf_cut_of_freq;
        switch (event) {
        case SND_SOC_DAPM_PRE_PMU:
                /* Enable TX digital mute */
-               snd_soc_update_bits(codec, tx_vol_ctl_reg,
+               snd_soc_component_update_bits(component, tx_vol_ctl_reg,
                                    TX_VOL_CTL_CFG_MUTE_EN_MASK,
                                    TX_VOL_CTL_CFG_MUTE_EN_ENABLE);
-               dec_hpf_cut_of_freq = snd_soc_read(codec, tx_mux_ctl_reg) &
+               dec_hpf_cut_of_freq = snd_soc_component_read32(component, tx_mux_ctl_reg) &
                                        TX_MUX_CTL_CUT_OFF_FREQ_MASK;
                dec_hpf_cut_of_freq >>= TX_MUX_CTL_CUT_OFF_FREQ_SHIFT;
                if (dec_hpf_cut_of_freq != TX_MUX_CTL_CF_NEG_3DB_150HZ) {
                        /* set cut of freq to CF_MIN_3DB_150HZ (0x1) */
-                       snd_soc_update_bits(codec, tx_mux_ctl_reg,
+                       snd_soc_component_update_bits(component, tx_mux_ctl_reg,
                                            TX_MUX_CTL_CUT_OFF_FREQ_MASK,
                                            TX_MUX_CTL_CF_NEG_3DB_150HZ);
                }
                break;
        case SND_SOC_DAPM_POST_PMU:
                /* enable HPF */
-               snd_soc_update_bits(codec, tx_mux_ctl_reg,
+               snd_soc_component_update_bits(component, tx_mux_ctl_reg,
                                    TX_MUX_CTL_HPF_BP_SEL_MASK,
                                    TX_MUX_CTL_HPF_BP_SEL_NO_BYPASS);
                /* apply the digital gain after the decimator is enabled */
-               snd_soc_write(codec, tx_gain_reg[w->shift],
-                             snd_soc_read(codec, tx_gain_reg[w->shift]));
-               snd_soc_update_bits(codec, tx_vol_ctl_reg,
+               snd_soc_component_write(component, tx_gain_reg[w->shift],
+                             snd_soc_component_read32(component, tx_gain_reg[w->shift]));
+               snd_soc_component_update_bits(component, tx_vol_ctl_reg,
                                    TX_VOL_CTL_CFG_MUTE_EN_MASK, 0);
                break;
        case SND_SOC_DAPM_PRE_PMD:
-               snd_soc_update_bits(codec, tx_vol_ctl_reg,
+               snd_soc_component_update_bits(component, tx_vol_ctl_reg,
                                    TX_VOL_CTL_CFG_MUTE_EN_MASK,
                                    TX_VOL_CTL_CFG_MUTE_EN_ENABLE);
-               snd_soc_update_bits(codec, tx_mux_ctl_reg,
+               snd_soc_component_update_bits(component, tx_mux_ctl_reg,
                                    TX_MUX_CTL_HPF_BP_SEL_MASK,
                                    TX_MUX_CTL_HPF_BP_SEL_BYPASS);
                break;
        case SND_SOC_DAPM_POST_PMD:
-               snd_soc_update_bits(codec, dec_reset_reg, 1 << w->shift,
+               snd_soc_component_update_bits(component, dec_reset_reg, 1 << w->shift,
                                    1 << w->shift);
-               snd_soc_update_bits(codec, dec_reset_reg, 1 << w->shift, 0x0);
-               snd_soc_update_bits(codec, tx_mux_ctl_reg,
+               snd_soc_component_update_bits(component, dec_reset_reg, 1 << w->shift, 0x0);
+               snd_soc_component_update_bits(component, tx_mux_ctl_reg,
                                    TX_MUX_CTL_HPF_BP_SEL_MASK,
                                    TX_MUX_CTL_HPF_BP_SEL_BYPASS);
-               snd_soc_update_bits(codec, tx_vol_ctl_reg,
+               snd_soc_component_update_bits(component, tx_vol_ctl_reg,
                                    TX_VOL_CTL_CFG_MUTE_EN_MASK, 0);
                break;
        }
                                           struct snd_kcontrol *kcontrol,
                                           int event)
 {
-       struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
+       struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
        unsigned int dmic;
        int ret;
        /* get dmic number out of widget name */
        char *dmic_num = strpbrk(w->name, "12");
 
        if (dmic_num == NULL) {
-               dev_err(codec->dev, "Invalid DMIC\n");
+               dev_err(component->dev, "Invalid DMIC\n");
                return -EINVAL;
        }
        ret = kstrtouint(dmic_num, 10, &dmic);
        if (ret < 0 || dmic > 2) {
-               dev_err(codec->dev, "Invalid DMIC line on the codec\n");
+               dev_err(component->dev, "Invalid DMIC line on the component\n");
                return -EINVAL;
        }
 
        switch (event) {
        case SND_SOC_DAPM_PRE_PMU:
-               snd_soc_update_bits(codec, LPASS_CDC_CLK_DMIC_B1_CTL,
+               snd_soc_component_update_bits(component, LPASS_CDC_CLK_DMIC_B1_CTL,
                                    DMIC_B1_CTL_DMIC0_CLK_SEL_MASK,
                                    DMIC_B1_CTL_DMIC0_CLK_SEL_DIV3);
                switch (dmic) {
                case 1:
-                       snd_soc_update_bits(codec, LPASS_CDC_TX1_DMIC_CTL,
+                       snd_soc_component_update_bits(component, LPASS_CDC_TX1_DMIC_CTL,
                                            TXN_DMIC_CTL_CLK_SEL_MASK,
                                            TXN_DMIC_CTL_CLK_SEL_DIV3);
                        break;
                case 2:
-                       snd_soc_update_bits(codec, LPASS_CDC_TX2_DMIC_CTL,
+                       snd_soc_component_update_bits(component, LPASS_CDC_TX2_DMIC_CTL,
                                            TXN_DMIC_CTL_CLK_SEL_MASK,
                                            TXN_DMIC_CTL_CLK_SEL_DIV3);
                        break;
        return 0;
 }
 
-static int msm8916_wcd_digital_codec_probe(struct snd_soc_codec *codec)
+static int msm8916_wcd_digital_component_probe(struct snd_soc_component *component)
 {
-       struct msm8916_wcd_digital_priv *priv = dev_get_drvdata(codec->dev);
+       struct msm8916_wcd_digital_priv *priv = dev_get_drvdata(component->dev);
 
-       snd_soc_codec_set_drvdata(codec, priv);
+       snd_soc_component_set_drvdata(component, priv);
 
        return 0;
 }
 
-static int msm8916_wcd_digital_codec_set_sysclk(struct snd_soc_codec *codec,
+static int msm8916_wcd_digital_component_set_sysclk(struct snd_soc_component *component,
                                                int clk_id, int source,
                                                unsigned int freq, int dir)
 {
-       struct msm8916_wcd_digital_priv *p = dev_get_drvdata(codec->dev);
+       struct msm8916_wcd_digital_priv *p = dev_get_drvdata(component->dev);
 
        return clk_set_rate(p->mclk, freq);
 }
                rx_fs_rate = RX_I2S_CTL_RX_I2S_FS_RATE_F_48_KHZ;
                break;
        default:
-               dev_err(dai->codec->dev, "Invalid sampling rate %d\n",
+               dev_err(dai->component->dev, "Invalid sampling rate %d\n",
                        params_rate(params));
                return -EINVAL;
        }
 
        switch (substream->stream) {
        case SNDRV_PCM_STREAM_CAPTURE:
-               snd_soc_update_bits(dai->codec, LPASS_CDC_CLK_TX_I2S_CTL,
+               snd_soc_component_update_bits(dai->component, LPASS_CDC_CLK_TX_I2S_CTL,
                                    TX_I2S_CTL_TX_I2S_FS_RATE_MASK, tx_fs_rate);
                break;
        case SNDRV_PCM_STREAM_PLAYBACK:
-               snd_soc_update_bits(dai->codec, LPASS_CDC_CLK_RX_I2S_CTL,
+               snd_soc_component_update_bits(dai->component, LPASS_CDC_CLK_RX_I2S_CTL,
                                    RX_I2S_CTL_RX_I2S_FS_RATE_MASK, rx_fs_rate);
                break;
        default:
 
        switch (params_format(params)) {
        case SNDRV_PCM_FORMAT_S16_LE:
-               snd_soc_update_bits(dai->codec, LPASS_CDC_CLK_TX_I2S_CTL,
+               snd_soc_component_update_bits(dai->component, LPASS_CDC_CLK_TX_I2S_CTL,
                                    TX_I2S_CTL_TX_I2S_MODE_MASK,
                                    TX_I2S_CTL_TX_I2S_MODE_16);
-               snd_soc_update_bits(dai->codec, LPASS_CDC_CLK_RX_I2S_CTL,
+               snd_soc_component_update_bits(dai->component, LPASS_CDC_CLK_RX_I2S_CTL,
                                    RX_I2S_CTL_RX_I2S_MODE_MASK,
                                    RX_I2S_CTL_RX_I2S_MODE_16);
                break;
+
        case SNDRV_PCM_FORMAT_S32_LE:
-               snd_soc_update_bits(dai->codec, LPASS_CDC_CLK_TX_I2S_CTL,
+               snd_soc_component_update_bits(dai->component, LPASS_CDC_CLK_TX_I2S_CTL,
                                    TX_I2S_CTL_TX_I2S_MODE_MASK,
                                    TX_I2S_CTL_TX_I2S_MODE_32);
-               snd_soc_update_bits(dai->codec, LPASS_CDC_CLK_RX_I2S_CTL,
+               snd_soc_component_update_bits(dai->component, LPASS_CDC_CLK_RX_I2S_CTL,
                                    RX_I2S_CTL_RX_I2S_MODE_MASK,
                                    RX_I2S_CTL_RX_I2S_MODE_32);
                break;
 static int msm8916_wcd_digital_startup(struct snd_pcm_substream *substream,
                                       struct snd_soc_dai *dai)
 {
-       struct snd_soc_codec *codec = dai->codec;
+       struct snd_soc_component *component = dai->component;
        struct msm8916_wcd_digital_priv *msm8916_wcd;
        unsigned long mclk_rate;
 
-       msm8916_wcd = snd_soc_codec_get_drvdata(codec);
-       snd_soc_update_bits(codec, LPASS_CDC_CLK_MCLK_CTL,
+       msm8916_wcd = snd_soc_component_get_drvdata(component);
+       snd_soc_component_update_bits(component, LPASS_CDC_CLK_MCLK_CTL,
                            MCLK_CTL_MCLK_EN_MASK,
                            MCLK_CTL_MCLK_EN_ENABLE);
-       snd_soc_update_bits(codec, LPASS_CDC_CLK_PDM_CTL,
+       snd_soc_component_update_bits(component, LPASS_CDC_CLK_PDM_CTL,
                            LPASS_CDC_CLK_PDM_CTL_PDM_CLK_SEL_MASK,
                            LPASS_CDC_CLK_PDM_CTL_PDM_CLK_SEL_FB);
 
        mclk_rate = clk_get_rate(msm8916_wcd->mclk);
        switch (mclk_rate) {
        case 12288000:
-               snd_soc_update_bits(codec, LPASS_CDC_TOP_CTL,
+               snd_soc_component_update_bits(component, LPASS_CDC_TOP_CTL,
                                    TOP_CTL_DIG_MCLK_FREQ_MASK,
                                    TOP_CTL_DIG_MCLK_FREQ_F_12_288MHZ);
                break;
        case 9600000:
-               snd_soc_update_bits(codec, LPASS_CDC_TOP_CTL,
+               snd_soc_component_update_bits(component, LPASS_CDC_TOP_CTL,
                                    TOP_CTL_DIG_MCLK_FREQ_MASK,
                                    TOP_CTL_DIG_MCLK_FREQ_F_9_6MHZ);
                break;
        default:
-               dev_err(codec->dev, "Invalid mclk rate %ld\n", mclk_rate);
+               dev_err(component->dev, "Invalid mclk rate %ld\n", mclk_rate);
                break;
        }
        return 0;
 static void msm8916_wcd_digital_shutdown(struct snd_pcm_substream *substream,
                                         struct snd_soc_dai *dai)
 {
-       snd_soc_update_bits(dai->codec, LPASS_CDC_CLK_PDM_CTL,
+       snd_soc_component_update_bits(dai->component, LPASS_CDC_CLK_PDM_CTL,
                            LPASS_CDC_CLK_PDM_CTL_PDM_CLK_SEL_MASK, 0);
 }
 
               },
 };
 
-static const struct snd_soc_codec_driver msm8916_wcd_digital = {
-       .probe = msm8916_wcd_digital_codec_probe,
-       .set_sysclk = msm8916_wcd_digital_codec_set_sysclk,
-       .component_driver = {
-               .controls = msm8916_wcd_digital_snd_controls,
-               .num_controls = ARRAY_SIZE(msm8916_wcd_digital_snd_controls),
-               .dapm_widgets = msm8916_wcd_digital_dapm_widgets,
-               .num_dapm_widgets =
-                                ARRAY_SIZE(msm8916_wcd_digital_dapm_widgets),
-               .dapm_routes = msm8916_wcd_digital_audio_map,
-               .num_dapm_routes = ARRAY_SIZE(msm8916_wcd_digital_audio_map),
-       },
+static const struct snd_soc_component_driver msm8916_wcd_digital = {
+       .probe                  = msm8916_wcd_digital_component_probe,
+       .set_sysclk             = msm8916_wcd_digital_component_set_sysclk,
+       .controls               = msm8916_wcd_digital_snd_controls,
+       .num_controls           = ARRAY_SIZE(msm8916_wcd_digital_snd_controls),
+       .dapm_widgets           = msm8916_wcd_digital_dapm_widgets,
+       .num_dapm_widgets       = ARRAY_SIZE(msm8916_wcd_digital_dapm_widgets),
+       .dapm_routes            = msm8916_wcd_digital_audio_map,
+       .num_dapm_routes        = ARRAY_SIZE(msm8916_wcd_digital_audio_map),
+       .idle_bias_on           = 1,
+       .use_pmdown_time        = 1,
+       .endianness             = 1,
+       .non_legacy_dai_naming  = 1,
 };
 
 static const struct regmap_config msm8916_codec_regmap_config = {
 
        dev_set_drvdata(dev, priv);
 
-       return snd_soc_register_codec(dev, &msm8916_wcd_digital,
+       return devm_snd_soc_register_component(dev, &msm8916_wcd_digital,
                                      msm8916_wcd_digital_dai,
                                      ARRAY_SIZE(msm8916_wcd_digital_dai));
 }
 {
        struct msm8916_wcd_digital_priv *priv = dev_get_drvdata(&pdev->dev);
 
-       snd_soc_unregister_codec(&pdev->dev);
        clk_disable_unprepare(priv->mclk);
        clk_disable_unprepare(priv->ahbclk);