[alsa-devel] [PATCH 161/187] ASoC: arizona/cs47l24/wm5102/wm5110/wm8997/wm8998/wm_adsp: replace codec to component

Charles Keepax ckeepax at opensource.cirrus.com
Wed Jan 24 16:10:18 CET 2018


On Fri, Jan 12, 2018 at 01:54:17AM +0000, Kuninori Morimoto wrote:
> 

I would perhaps update the patch subject to just ASoC: arizona:,
that is what we usually do for patches that touch all the Arizona
CODECs.

Mostly this patch looks fine but I do have a couple of very minor
formatting nits.

Also you can add an:

Tested-by: Charles Keepax <ckeepax at opensource.cirrus.com>

> Now we can replace Codec to Component. Let's do it.
> 
> Because there are many drivers which are using arizona,
> we need to update these all related drivers in same time.
> Otherwise compile error/warning happen
> 
> Note:
> 
> cs47l24
> 	xxx_codec_xxx()		->	xxx_component_xxx()
> 	.idle_bias_off = 1	->	.idle_bias_on = 0
> 	.ignore_pmdown_time = 0	->	.pmdown_time = 1
> 	-			->	.endianness = 1
> 	-			->	.non_legacy_dai_naming = 1
> 
> wm5102
> 	xxx_codec_xxx()		->	xxx_component_xxx()
> 	.idle_bias_off = 1	->	.idle_bias_on = 0
> 	.ignore_pmdown_time = 0	->	.pmdown_time = 1
> 	-			->	.endianness = 1
> 	-			->	.non_legacy_dai_naming = 1
> 
> wm5110
> 	xxx_codec_xxx()		->	xxx_component_xxx()
> 	.idle_bias_off = 1	->	.idle_bias_on = 0
> 	.ignore_pmdown_time = 0	->	.pmdown_time = 1
> 	-			->	.endianness = 1
> 	-			->	.non_legacy_dai_naming = 1
> 
> wm8997
> 	xxx_codec_xxx()		->	xxx_component_xxx()
> 	.idle_bias_off = 1	->	.idle_bias_on = 0
> 	.ignore_pmdown_time = 0	->	.pmdown_time = 1
> 	-			->	.endianness = 1
> 	-			->	.non_legacy_dai_naming = 1
> 
> wm8998
> 	xxx_codec_xxx()		->	xxx_component_xxx()
> 	.idle_bias_off = 1	->	.idle_bias_on = 0
> 	.ignore_pmdown_time = 0	->	.pmdown_time = 1
> 	-			->	.endianness = 1
> 	-			->	.non_legacy_dai_naming = 1
> 
> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx at renesas.com>
> ---
>  sound/soc/codecs/arizona.c     | 208 ++++++++++++++++++++---------------------
>  sound/soc/codecs/arizona.h     |  24 ++---
>  sound/soc/codecs/cs47l24.c     |  86 ++++++++---------
>  sound/soc/codecs/wm5102.c      | 106 ++++++++++-----------
>  sound/soc/codecs/wm5110.c      | 140 +++++++++++++--------------
>  sound/soc/codecs/wm8997.c      |  62 ++++++------
>  sound/soc/codecs/wm8998.c      |  88 ++++++++---------
>  sound/soc/codecs/wm_adsp.c     |  58 ++++++------
>  sound/soc/codecs/wm_adsp.h     |   6 +-
>  sound/soc/samsung/tm2_wm5110.c |  54 +++++------
>  10 files changed, 400 insertions(+), 432 deletions(-)
> 
> diff --git a/sound/soc/codecs/arizona.c b/sound/soc/codecs/arizona.c
> index b3375e1..ffcfe8e 100644
> --- a/sound/soc/codecs/arizona.c
> +++ b/sound/soc/codecs/arizona.c
> @@ -84,13 +84,13 @@ static int arizona_spk_ev(struct snd_soc_dapm_widget *w,
>  			  struct snd_kcontrol *kcontrol,
>  			  int event)
>  {
> -	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
> -	struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
> +	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
> +	struct arizona *arizona = dev_get_drvdata(component->dev->parent);
>  	int val;
>  
>  	switch (event) {
>  	case SND_SOC_DAPM_POST_PMU:
> -		val = snd_soc_read(codec, ARIZONA_INTERRUPT_RAW_STATUS_3);
> +		val = snd_soc_component_read32(component, ARIZONA_INTERRUPT_RAW_STATUS_3);

Can we wrap the second argument down a line.

>  		if (val & ARIZONA_SPK_OVERHEAT_STS) {
>  			dev_crit(arizona->dev,
>  				 "Speaker not enabled due to temperature\n");
> @@ -169,10 +169,10 @@ static irqreturn_t arizona_thermal_shutdown(int irq, void *data)
>  			   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
>  			   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD);
>  
> -int arizona_init_spk(struct snd_soc_codec *codec)
> +int arizona_init_spk(struct snd_soc_component *component)
>  {
> -	struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
> -	struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  	struct arizona *arizona = priv->arizona;
>  	int ret;
>  
> @@ -238,10 +238,10 @@ int arizona_free_spk_irqs(struct arizona *arizona)
>  	{ "OUT6R", NULL, "OUT6L" },
>  };
>  
> -int arizona_init_mono(struct snd_soc_codec *codec)
> +int arizona_init_mono(struct snd_soc_component *component)
>  {
> -	struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
> -	struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  	struct arizona *arizona = priv->arizona;
>  	int i;
>  
> @@ -255,11 +255,9 @@ int arizona_init_mono(struct snd_soc_codec *codec)
>  }
>  EXPORT_SYMBOL_GPL(arizona_init_mono);
>  
> -int arizona_init_gpio(struct snd_soc_codec *codec)
> +int arizona_init_gpio(struct snd_soc_component *component)
>  {
> -	struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
> -	struct snd_soc_component *component = snd_soc_dapm_to_component(dapm);
> -	struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  	struct arizona *arizona = priv->arizona;
>  	int i;
>  
> @@ -882,9 +880,9 @@ const char *arizona_sample_rate_val_to_name(unsigned int rate_val)
>  };
>  EXPORT_SYMBOL_GPL(arizona_voice_trigger_switch);
>  
> -static void arizona_in_set_vu(struct snd_soc_codec *codec, int ena)
> +static void arizona_in_set_vu(struct snd_soc_component *component, int ena)
>  {
> -	struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  	unsigned int val;
>  	int i;
>  
> @@ -894,15 +892,15 @@ static void arizona_in_set_vu(struct snd_soc_codec *codec, int ena)
>  		val = 0;
>  
>  	for (i = 0; i < priv->num_inputs; i++)
> -		snd_soc_update_bits(codec,
> +		snd_soc_component_update_bits(component,
>  				    ARIZONA_ADC_DIGITAL_VOLUME_1L + (i * 4),
>  				    ARIZONA_IN_VU, val);

Can we update the indenting of the arguments here to match the
new function length?

>  }
>  
> -bool arizona_input_analog(struct snd_soc_codec *codec, int shift)
> +bool arizona_input_analog(struct snd_soc_component *component, int shift)
>  {
>  	unsigned int reg = ARIZONA_IN1L_CONTROL + ((shift / 2) * 8);
> -	unsigned int val = snd_soc_read(codec, reg);
> +	unsigned int val = snd_soc_component_read32(component, reg);
>  
>  	return !(val & ARIZONA_IN1_MODE_MASK);
>  }
> @@ -911,8 +909,8 @@ bool arizona_input_analog(struct snd_soc_codec *codec, int shift)
>  int arizona_in_ev(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol,
>  		  int event)
>  {
> -	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
> -	struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  	unsigned int reg;
>  
>  	if (w->shift % 2)
> @@ -925,25 +923,25 @@ int arizona_in_ev(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol,
>  		priv->in_pending++;
>  		break;
>  	case SND_SOC_DAPM_POST_PMU:
> -		snd_soc_update_bits(codec, reg, ARIZONA_IN1L_MUTE, 0);
> +		snd_soc_component_update_bits(component, reg, ARIZONA_IN1L_MUTE, 0);

wrap

>  
>  		/* If this is the last input pending then allow VU */
>  		priv->in_pending--;
>  		if (priv->in_pending == 0) {
>  			msleep(1);
> -			arizona_in_set_vu(codec, 1);
> +			arizona_in_set_vu(component, 1);
>  		}
>  		break;
>  	case SND_SOC_DAPM_PRE_PMD:
> -		snd_soc_update_bits(codec, reg,
> +		snd_soc_component_update_bits(component, reg,
>  				    ARIZONA_IN1L_MUTE | ARIZONA_IN_VU,
>  				    ARIZONA_IN1L_MUTE | ARIZONA_IN_VU);

align.

>  		break;
>  	case SND_SOC_DAPM_POST_PMD:
>  		/* Disable volume updates if no inputs are enabled */
> -		reg = snd_soc_read(codec, ARIZONA_INPUT_ENABLES);
> +		reg = snd_soc_component_read32(component, ARIZONA_INPUT_ENABLES);
>  		if (reg == 0)
> -			arizona_in_set_vu(codec, 0);
> +			arizona_in_set_vu(component, 0);
>  		break;
>  	default:
>  		break;
> @@ -957,8 +955,8 @@ int arizona_out_ev(struct snd_soc_dapm_widget *w,
>  		   struct snd_kcontrol *kcontrol,
>  		   int event)
>  {
> -	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
> -	struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  	struct arizona *arizona = priv->arizona;
>  
>  	switch (event) {
> @@ -1001,7 +999,7 @@ int arizona_out_ev(struct snd_soc_dapm_widget *w,
>  		case ARIZONA_OUT4R_ENA_SHIFT:
>  			priv->out_up_pending--;
>  			if (!priv->out_up_pending && priv->out_up_delay) {
> -				dev_dbg(codec->dev, "Power up delay: %d\n",
> +				dev_dbg(component->dev, "Power up delay: %d\n",
>  					priv->out_up_delay);
>  				msleep(priv->out_up_delay);
>  				priv->out_up_delay = 0;
> @@ -1054,7 +1052,7 @@ int arizona_out_ev(struct snd_soc_dapm_widget *w,
>  		case ARIZONA_OUT4R_ENA_SHIFT:
>  			priv->out_down_pending--;
>  			if (!priv->out_down_pending && priv->out_down_delay) {
> -				dev_dbg(codec->dev, "Power down delay: %d\n",
> +				dev_dbg(component->dev, "Power down delay: %d\n",
>  					priv->out_down_delay);
>  				msleep(priv->out_down_delay);
>  				priv->out_down_delay = 0;
> @@ -1076,8 +1074,8 @@ int arizona_hp_ev(struct snd_soc_dapm_widget *w,
>  		   struct snd_kcontrol *kcontrol,
>  		   int event)
>  {
> -	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
> -	struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  	struct arizona *arizona = priv->arizona;
>  	unsigned int mask = 1 << w->shift;
>  	unsigned int val;
> @@ -1111,15 +1109,15 @@ int arizona_hp_ev(struct snd_soc_dapm_widget *w,
>  }
>  EXPORT_SYMBOL_GPL(arizona_hp_ev);
>  
> -static int arizona_dvfs_enable(struct snd_soc_codec *codec)
> +static int arizona_dvfs_enable(struct snd_soc_component *component)
>  {
> -	const struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	const struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  	struct arizona *arizona = priv->arizona;
>  	int ret;
>  
>  	ret = regulator_set_voltage(arizona->dcvdd, 1800000, 1800000);
>  	if (ret) {
> -		dev_err(codec->dev, "Failed to boost DCVDD: %d\n", ret);
> +		dev_err(component->dev, "Failed to boost DCVDD: %d\n", ret);
>  		return ret;
>  	}
>  
> @@ -1128,7 +1126,7 @@ static int arizona_dvfs_enable(struct snd_soc_codec *codec)
>  				 ARIZONA_SUBSYS_MAX_FREQ,
>  				 ARIZONA_SUBSYS_MAX_FREQ);
>  	if (ret) {
> -		dev_err(codec->dev, "Failed to enable subsys max: %d\n", ret);
> +		dev_err(component->dev, "Failed to enable subsys max: %d\n", ret);
>  		regulator_set_voltage(arizona->dcvdd, 1200000, 1800000);
>  		return ret;
>  	}
> @@ -1136,9 +1134,9 @@ static int arizona_dvfs_enable(struct snd_soc_codec *codec)
>  	return 0;
>  }
>  
> -static int arizona_dvfs_disable(struct snd_soc_codec *codec)
> +static int arizona_dvfs_disable(struct snd_soc_component *component)
>  {
> -	const struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	const struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  	struct arizona *arizona = priv->arizona;
>  	int ret;
>  
> @@ -1146,28 +1144,28 @@ static int arizona_dvfs_disable(struct snd_soc_codec *codec)
>  				 ARIZONA_DYNAMIC_FREQUENCY_SCALING_1,
>  				 ARIZONA_SUBSYS_MAX_FREQ, 0);
>  	if (ret) {
> -		dev_err(codec->dev, "Failed to disable subsys max: %d\n", ret);
> +		dev_err(component->dev, "Failed to disable subsys max: %d\n", ret);
>  		return ret;
>  	}
>  
>  	ret = regulator_set_voltage(arizona->dcvdd, 1200000, 1800000);
>  	if (ret) {
> -		dev_err(codec->dev, "Failed to unboost DCVDD: %d\n", ret);
> +		dev_err(component->dev, "Failed to unboost DCVDD: %d\n", ret);
>  		return ret;
>  	}
>  
>  	return 0;
>  }
>  
> -int arizona_dvfs_up(struct snd_soc_codec *codec, unsigned int flags)
> +int arizona_dvfs_up(struct snd_soc_component *component, unsigned int flags)
>  {
> -	struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  	int ret = 0;
>  
>  	mutex_lock(&priv->dvfs_lock);
>  
>  	if (!priv->dvfs_cached && !priv->dvfs_reqs) {
> -		ret = arizona_dvfs_enable(codec);
> +		ret = arizona_dvfs_enable(component);
>  		if (ret)
>  			goto err;
>  	}
> @@ -1179,9 +1177,9 @@ int arizona_dvfs_up(struct snd_soc_codec *codec, unsigned int flags)
>  }
>  EXPORT_SYMBOL_GPL(arizona_dvfs_up);
>  
> -int arizona_dvfs_down(struct snd_soc_codec *codec, unsigned int flags)
> +int arizona_dvfs_down(struct snd_soc_component *component, unsigned int flags)
>  {
> -	struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  	unsigned int old_reqs;
>  	int ret = 0;
>  
> @@ -1191,7 +1189,7 @@ int arizona_dvfs_down(struct snd_soc_codec *codec, unsigned int flags)
>  	priv->dvfs_reqs &= ~flags;
>  
>  	if (!priv->dvfs_cached && old_reqs && !priv->dvfs_reqs)
> -		ret = arizona_dvfs_disable(codec);
> +		ret = arizona_dvfs_disable(component);
>  
>  	mutex_unlock(&priv->dvfs_lock);
>  	return ret;
> @@ -1201,8 +1199,8 @@ int arizona_dvfs_down(struct snd_soc_codec *codec, unsigned int flags)
>  int arizona_dvfs_sysclk_ev(struct snd_soc_dapm_widget *w,
>  			   struct snd_kcontrol *kcontrol, int event)
>  {
> -	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
> -	struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  	int ret = 0;
>  
>  	mutex_lock(&priv->dvfs_lock);
> @@ -1210,7 +1208,7 @@ int arizona_dvfs_sysclk_ev(struct snd_soc_dapm_widget *w,
>  	switch (event) {
>  	case SND_SOC_DAPM_POST_PMU:
>  		if (priv->dvfs_reqs)
> -			ret = arizona_dvfs_enable(codec);
> +			ret = arizona_dvfs_enable(component);
>  
>  		priv->dvfs_cached = false;
>  		break;
> @@ -1222,7 +1220,7 @@ int arizona_dvfs_sysclk_ev(struct snd_soc_dapm_widget *w,
>  		priv->dvfs_cached = true;
>  
>  		if (priv->dvfs_reqs)
> -			ret = arizona_dvfs_disable(codec);
> +			ret = arizona_dvfs_disable(component);
>  		break;
>  	default:
>  		break;
> @@ -1243,7 +1241,7 @@ int arizona_anc_ev(struct snd_soc_dapm_widget *w,
>  		   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 val;
>  
>  	switch (event) {
> @@ -1257,7 +1255,7 @@ int arizona_anc_ev(struct snd_soc_dapm_widget *w,
>  		return 0;
>  	}
>  
> -	snd_soc_write(codec, ARIZONA_CLOCK_CONTROL, val);
> +	snd_soc_component_write(component, ARIZONA_CLOCK_CONTROL, val);
>  
>  	return 0;
>  }
> @@ -1277,10 +1275,10 @@ int arizona_anc_ev(struct snd_soc_dapm_widget *w,
>  	45158400,
>  };
>  
> -static int arizona_set_opclk(struct snd_soc_codec *codec, unsigned int clk,
> +static int arizona_set_opclk(struct snd_soc_component *component, unsigned int clk,
>  			     unsigned int freq)

Might as well move clk down to the line with freq.

>  {
> -	struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  	unsigned int reg;
>  	unsigned int *rates;
>  	int ref, div, refclk;
> @@ -1308,9 +1306,9 @@ static int arizona_set_opclk(struct snd_soc_codec *codec, unsigned int clk,
>  		div = 1;
>  		while (rates[ref] / div >= freq && div < 32) {
>  			if (rates[ref] / div == freq) {
> -				dev_dbg(codec->dev, "Configured %dHz OPCLK\n",
> +				dev_dbg(component->dev, "Configured %dHz OPCLK\n",
>  					freq);
> -				snd_soc_update_bits(codec, reg,
> +				snd_soc_component_update_bits(component, reg,
>  						    ARIZONA_OPCLK_DIV_MASK |
>  						    ARIZONA_OPCLK_SEL_MASK,
>  						    (div <<

align

> @@ -1322,22 +1320,22 @@ static int arizona_set_opclk(struct snd_soc_codec *codec, unsigned int clk,
>  		}
>  	}
>  
> -	dev_err(codec->dev, "Unable to generate %dHz OPCLK\n", freq);
> +	dev_err(component->dev, "Unable to generate %dHz OPCLK\n", freq);
>  	return -EINVAL;
>  }
>  
>  int arizona_clk_ev(struct snd_soc_dapm_widget *w,
>  		   struct snd_kcontrol *kcontrol, int event)
>  {
> -	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
> -	struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
> +	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
> +	struct arizona *arizona = dev_get_drvdata(component->dev->parent);
>  	unsigned int val;
>  	int clk_idx;
>  	int ret;
>  
>  	ret = regmap_read(arizona->regmap, w->reg, &val);
>  	if (ret) {
> -		dev_err(codec->dev, "Failed to check clock source: %d\n", ret);
> +		dev_err(component->dev, "Failed to check clock source: %d\n", ret);
>  		return ret;
>  	}
>  
> @@ -1366,10 +1364,10 @@ int arizona_clk_ev(struct snd_soc_dapm_widget *w,
>  }
>  EXPORT_SYMBOL_GPL(arizona_clk_ev);
>  
> -int arizona_set_sysclk(struct snd_soc_codec *codec, int clk_id,
> +int arizona_set_sysclk(struct snd_soc_component *component, int clk_id,
>  		       int source, unsigned int freq, int dir)
>  {
> -	struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  	struct arizona *arizona = priv->arizona;
>  	char *name;
>  	unsigned int reg;
> @@ -1391,7 +1389,7 @@ int arizona_set_sysclk(struct snd_soc_codec *codec, int clk_id,
>  		break;
>  	case ARIZONA_CLK_OPCLK:
>  	case ARIZONA_CLK_ASYNC_OPCLK:
> -		return arizona_set_opclk(codec, clk_id, freq);
> +		return arizona_set_opclk(component, clk_id, freq);
>  	default:
>  		return -EINVAL;
>  	}
> @@ -1445,8 +1443,8 @@ int arizona_set_sysclk(struct snd_soc_codec *codec, int clk_id,
>  
>  static int arizona_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
>  {
> -	struct snd_soc_codec *codec = dai->codec;
> -	struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct snd_soc_component *component = dai->component;
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  	struct arizona *arizona = priv->arizona;
>  	int lrclk, bclk, mode, base;
>  
> @@ -1620,8 +1618,8 @@ static int arizona_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
>  static int arizona_startup(struct snd_pcm_substream *substream,
>  			   struct snd_soc_dai *dai)
>  {
> -	struct snd_soc_codec *codec = dai->codec;
> -	struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct snd_soc_component *component = dai->component;
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  	struct arizona_dai_priv *dai_priv = &priv->dai[dai->id - 1];
>  	unsigned int base_rate;
>  
> @@ -1651,10 +1649,10 @@ static int arizona_startup(struct snd_pcm_substream *substream,
>  					  &dai_priv->constraint);
>  }
>  
> -static void arizona_wm5102_set_dac_comp(struct snd_soc_codec *codec,
> +static void arizona_wm5102_set_dac_comp(struct snd_soc_component *component,
>  					unsigned int rate)
>  {
> -	struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  	struct arizona *arizona = priv->arizona;
>  	struct reg_sequence dac_comp[] = {
>  		{ 0x80, 0x3 },
> @@ -1680,8 +1678,8 @@ static int arizona_hw_params_rate(struct snd_pcm_substream *substream,
>  				  struct snd_pcm_hw_params *params,
>  				  struct snd_soc_dai *dai)
>  {
> -	struct snd_soc_codec *codec = dai->codec;
> -	struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct snd_soc_component *component = dai->component;
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  	struct arizona_dai_priv *dai_priv = &priv->dai[dai->id - 1];
>  	int base = dai->driver->base;
>  	int i, sr_val, ret;
> @@ -1704,9 +1702,9 @@ static int arizona_hw_params_rate(struct snd_pcm_substream *substream,
>  	case WM5102:
>  	case WM8997:
>  		if (arizona_sr_vals[sr_val] >= 88200)
> -			ret = arizona_dvfs_up(codec, ARIZONA_DVFS_SR1_RQ);
> +			ret = arizona_dvfs_up(component, ARIZONA_DVFS_SR1_RQ);
>  		else
> -			ret = arizona_dvfs_down(codec, ARIZONA_DVFS_SR1_RQ);
> +			ret = arizona_dvfs_down(component, ARIZONA_DVFS_SR1_RQ);
>  
>  		if (ret) {
>  			arizona_aif_err(dai, "Failed to change DVFS %d\n", ret);
> @@ -1721,24 +1719,24 @@ static int arizona_hw_params_rate(struct snd_pcm_substream *substream,
>  	case ARIZONA_CLK_SYSCLK:
>  		switch (priv->arizona->type) {
>  		case WM5102:
> -			arizona_wm5102_set_dac_comp(codec,
> +			arizona_wm5102_set_dac_comp(component,
>  						    params_rate(params));
>  			break;
>  		default:
>  			break;
>  		}
>  
> -		snd_soc_update_bits(codec, ARIZONA_SAMPLE_RATE_1,
> +		snd_soc_component_update_bits(component, ARIZONA_SAMPLE_RATE_1,
>  				    ARIZONA_SAMPLE_RATE_1_MASK, sr_val);

align

>  		if (base)
> -			snd_soc_update_bits(codec, base + ARIZONA_AIF_RATE_CTRL,
> +			snd_soc_component_update_bits(component, base + ARIZONA_AIF_RATE_CTRL,
>  					    ARIZONA_AIF1_RATE_MASK, 0);

align

>  		break;
>  	case ARIZONA_CLK_ASYNCCLK:
> -		snd_soc_update_bits(codec, ARIZONA_ASYNC_SAMPLE_RATE_1,
> +		snd_soc_component_update_bits(component, ARIZONA_ASYNC_SAMPLE_RATE_1,
>  				    ARIZONA_ASYNC_SAMPLE_RATE_1_MASK, sr_val);

align

>  		if (base)
> -			snd_soc_update_bits(codec, base + ARIZONA_AIF_RATE_CTRL,
> +			snd_soc_component_update_bits(component, base + ARIZONA_AIF_RATE_CTRL,
>  					    ARIZONA_AIF1_RATE_MASK,
>  					    8 << ARIZONA_AIF1_RATE_SHIFT);

align

>  		break;
> @@ -1750,20 +1748,20 @@ static int arizona_hw_params_rate(struct snd_pcm_substream *substream,
>  	return 0;
>  }
>  
> -static bool arizona_aif_cfg_changed(struct snd_soc_codec *codec,
> +static bool arizona_aif_cfg_changed(struct snd_soc_component *component,
>  				    int base, int bclk, int lrclk, int frame)
>  {
>  	int val;
>  
> -	val = snd_soc_read(codec, base + ARIZONA_AIF_BCLK_CTRL);
> +	val = snd_soc_component_read32(component, base + ARIZONA_AIF_BCLK_CTRL);
>  	if (bclk != (val & ARIZONA_AIF1_BCLK_FREQ_MASK))
>  		return true;
>  
> -	val = snd_soc_read(codec, base + ARIZONA_AIF_TX_BCLK_RATE);
> +	val = snd_soc_component_read32(component, base + ARIZONA_AIF_TX_BCLK_RATE);
>  	if (lrclk != (val & ARIZONA_AIF1TX_BCPF_MASK))
>  		return true;
>  
> -	val = snd_soc_read(codec, base + ARIZONA_AIF_FRAME_CTRL_1);
> +	val = snd_soc_component_read32(component, base + ARIZONA_AIF_FRAME_CTRL_1);
>  	if (frame != (val & (ARIZONA_AIF1TX_WL_MASK |
>  			     ARIZONA_AIF1TX_SLOT_LEN_MASK)))
>  		return true;
> @@ -1775,8 +1773,8 @@ static int arizona_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 arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct snd_soc_component *component = dai->component;
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  	struct arizona *arizona = priv->arizona;
>  	int base = dai->driver->base;
>  	const int *rates;
> @@ -1813,7 +1811,7 @@ static int arizona_hw_params(struct snd_pcm_substream *substream,
>  	}
>  
>  	/* Force multiple of 2 channels for I2S mode */
> -	val = snd_soc_read(codec, base + ARIZONA_AIF_FORMAT);
> +	val = snd_soc_component_read32(component, base + ARIZONA_AIF_FORMAT);
>  	val &= ARIZONA_AIF1_FMT_MASK;
>  	if ((channels & 1) && (val == ARIZONA_FMT_I2S_MODE)) {
>  		arizona_aif_dbg(dai, "Forcing stereo mode\n");
> @@ -1841,13 +1839,13 @@ static int arizona_hw_params(struct snd_pcm_substream *substream,
>  
>  	frame = wl << ARIZONA_AIF1TX_WL_SHIFT | tdm_width;
>  
> -	reconfig = arizona_aif_cfg_changed(codec, base, bclk, lrclk, frame);
> +	reconfig = arizona_aif_cfg_changed(component, base, bclk, lrclk, frame);
>  
>  	if (reconfig) {
>  		/* Save AIF TX/RX state */
> -		aif_tx_state = snd_soc_read(codec,
> +		aif_tx_state = snd_soc_component_read32(component,
>  					    base + ARIZONA_AIF_TX_ENABLES);

align

> -		aif_rx_state = snd_soc_read(codec,
> +		aif_rx_state = snd_soc_component_read32(component,
>  					    base + ARIZONA_AIF_RX_ENABLES);

align

>  		/* Disable AIF TX/RX before reconfiguring it */
>  		regmap_update_bits_async(arizona->regmap,
> @@ -1908,9 +1906,9 @@ static const char *arizona_dai_clk_str(int clk_id)
>  static int arizona_dai_set_sysclk(struct snd_soc_dai *dai,
>  				  int clk_id, unsigned int freq, int dir)
>  {
> -	struct snd_soc_codec *codec = dai->codec;
> -	struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
> -	struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct snd_soc_component *component = dai->component;
> +	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  	struct arizona_dai_priv *dai_priv = &priv->dai[dai->id - 1];
>  	struct snd_soc_dapm_route routes[2];
>  
> @@ -1926,12 +1924,12 @@ static int arizona_dai_set_sysclk(struct snd_soc_dai *dai,
>  		return 0;
>  
>  	if (dai->active) {
> -		dev_err(codec->dev, "Can't change clock on active DAI %d\n",
> +		dev_err(component->dev, "Can't change clock on active DAI %d\n",
>  			dai->id);
>  		return -EBUSY;
>  	}
>  
> -	dev_dbg(codec->dev, "Setting AIF%d to %s\n", dai->id + 1,
> +	dev_dbg(component->dev, "Setting AIF%d to %s\n", dai->id + 1,
>  		arizona_dai_clk_str(clk_id));
>  
>  	memset(&routes, 0, sizeof(routes));
> @@ -1953,7 +1951,7 @@ static int arizona_dai_set_sysclk(struct snd_soc_dai *dai,
>  
>  static int arizona_set_tristate(struct snd_soc_dai *dai, int tristate)
>  {
> -	struct snd_soc_codec *codec = dai->codec;
> +	struct snd_soc_component *component = dai->component;
>  	int base = dai->driver->base;
>  	unsigned int reg;
>  
> @@ -1962,7 +1960,7 @@ static int arizona_set_tristate(struct snd_soc_dai *dai, int tristate)
>  	else
>  		reg = 0;
>  
> -	return snd_soc_update_bits(codec, base + ARIZONA_AIF_RATE_CTRL,
> +	return snd_soc_component_update_bits(component, base + ARIZONA_AIF_RATE_CTRL,
>  				   ARIZONA_AIF1_TRI, reg);

align

>  }
>  
> @@ -1970,8 +1968,8 @@ static void arizona_set_channels_to_mask(struct snd_soc_dai *dai,
>  					 unsigned int base,
>  					 int channels, unsigned int mask)
>  {
> -	struct snd_soc_codec *codec = dai->codec;
> -	struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct snd_soc_component *component = dai->component;
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  	struct arizona *arizona = priv->arizona;
>  	int slot, i;
>  
> @@ -1992,8 +1990,8 @@ static void arizona_set_channels_to_mask(struct snd_soc_dai *dai,
>  static int arizona_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
>  				unsigned int rx_mask, int slots, int slot_width)
>  {
> -	struct snd_soc_codec *codec = dai->codec;
> -	struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct snd_soc_component *component = dai->component;
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  	struct arizona *arizona = priv->arizona;
>  	int base = dai->driver->base;
>  	int rx_max_chan = dai->driver->playback.channels_max;
> @@ -2645,7 +2643,7 @@ int arizona_init_fll(struct arizona *arizona, int id, int base, int lock_irq,
>  /**
>   * arizona_set_output_mode - Set the mode of the specified output
>   *
> - * @codec: Device to configure
> + * @component: Device to configure
>   * @output: Output number
>   * @diff: True to set the output to differential mode
>   *
> @@ -2658,7 +2656,7 @@ int arizona_init_fll(struct arizona *arizona, int id, int base, int lock_irq,
>   * Most systems have a single static configuration and should use
>   * platform data instead.
>   */
> -int arizona_set_output_mode(struct snd_soc_codec *codec, int output, bool diff)
> +int arizona_set_output_mode(struct snd_soc_component *component, int output, bool diff)
>  {
>  	unsigned int reg, val;
>  
> @@ -2672,7 +2670,7 @@ int arizona_set_output_mode(struct snd_soc_codec *codec, int output, bool diff)
>  	else
>  		val = 0;
>  
> -	return snd_soc_update_bits(codec, reg, ARIZONA_OUT1_MONO, val);
> +	return snd_soc_component_update_bits(component, reg, ARIZONA_OUT1_MONO, val);
>  }
>  EXPORT_SYMBOL_GPL(arizona_set_output_mode);
>  
> @@ -2721,8 +2719,8 @@ static bool arizona_eq_filter_unstable(bool mode, __be16 _a, __be16 _b)
>  int arizona_eq_coeff_put(struct snd_kcontrol *kcontrol,
>  			 struct snd_ctl_elem_value *ucontrol)
>  {
> -	struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
> -	struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
> +	struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
> +	struct arizona *arizona = dev_get_drvdata(component->dev->parent);
>  	struct soc_bytes *params = (void *)kcontrol->private_value;
>  	unsigned int val;
>  	__be16 *data;
> @@ -2765,8 +2763,8 @@ int arizona_eq_coeff_put(struct snd_kcontrol *kcontrol,
>  int arizona_lhpf_coeff_put(struct snd_kcontrol *kcontrol,
>  			   struct snd_ctl_elem_value *ucontrol)
>  {
> -	struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
> -	struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
> +	struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
> +	struct arizona *arizona = dev_get_drvdata(component->dev->parent);
>  	__be16 *data = (__be16 *)ucontrol->value.bytes.data;
>  	s16 val = be16_to_cpu(*data);
>  
> diff --git a/sound/soc/codecs/arizona.h b/sound/soc/codecs/arizona.h
> index dfdf6d8..e3ccee5 100644
> --- a/sound/soc/codecs/arizona.h
> +++ b/sound/soc/codecs/arizona.h
> @@ -273,7 +273,7 @@ int arizona_lhpf_coeff_put(struct snd_kcontrol *kcontrol,
>  
>  int arizona_clk_ev(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol,
>  		   int event);
> -int arizona_set_sysclk(struct snd_soc_codec *codec, int clk_id, int source,
> +int arizona_set_sysclk(struct snd_soc_component *component, int clk_id, int source,
>  		       unsigned int freq, int dir);
>  
>  extern const struct snd_soc_dai_ops arizona_dai_ops;
> @@ -297,8 +297,8 @@ struct arizona_fll {
>  	char clock_ok_name[ARIZONA_FLL_NAME_LEN];
>  };
>  
> -int arizona_dvfs_up(struct snd_soc_codec *codec, unsigned int flags);
> -int arizona_dvfs_down(struct snd_soc_codec *codec, unsigned int flags);
> +int arizona_dvfs_up(struct snd_soc_component *component, unsigned int flags);
> +int arizona_dvfs_down(struct snd_soc_component *component, unsigned int flags);
>  int arizona_dvfs_sysclk_ev(struct snd_soc_dapm_widget *w,
>  			   struct snd_kcontrol *kcontrol, int event);
>  void arizona_init_dvfs(struct arizona_priv *priv);
> @@ -310,9 +310,9 @@ int arizona_set_fll_refclk(struct arizona_fll *fll, int source,
>  int arizona_set_fll(struct arizona_fll *fll, int source,
>  		    unsigned int Fref, unsigned int Fout);
>  
> -int arizona_init_spk(struct snd_soc_codec *codec);
> -int arizona_init_gpio(struct snd_soc_codec *codec);
> -int arizona_init_mono(struct snd_soc_codec *codec);
> +int arizona_init_spk(struct snd_soc_component *component);
> +int arizona_init_gpio(struct snd_soc_component *component);
> +int arizona_init_mono(struct snd_soc_component *component);
>  
>  int arizona_init_common(struct arizona *arizona);
>  int arizona_init_vol_limit(struct arizona *arizona);
> @@ -322,20 +322,20 @@ int arizona_set_fll(struct arizona_fll *fll, int source,
>  
>  int arizona_init_dai(struct arizona_priv *priv, int dai);
>  
> -int arizona_set_output_mode(struct snd_soc_codec *codec, int output,
> +int arizona_set_output_mode(struct snd_soc_component *component, int output,
>  			    bool diff);
>  
> -bool arizona_input_analog(struct snd_soc_codec *codec, int shift);
> +bool arizona_input_analog(struct snd_soc_component *component, int shift);
>  
>  const char *arizona_sample_rate_val_to_name(unsigned int rate_val);
>  
> -static inline int arizona_register_notifier(struct snd_soc_codec *codec,
> +static inline int arizona_register_notifier(struct snd_soc_component *component,
>  					    struct notifier_block *nb,
>  					    int (*notify)
>  					    (struct notifier_block *nb,
>  					    unsigned long action, void *data))
>  {
> -	struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  	struct arizona *arizona = priv->arizona;
>  
>  	nb->notifier_call = notify;
> @@ -343,10 +343,10 @@ static inline int arizona_register_notifier(struct snd_soc_codec *codec,
>  	return blocking_notifier_chain_register(&arizona->notifier, nb);
>  }
>  
> -static inline int arizona_unregister_notifier(struct snd_soc_codec *codec,
> +static inline int arizona_unregister_notifier(struct snd_soc_component *component,
>  					      struct notifier_block *nb)
>  {
> -	struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  	struct arizona *arizona = priv->arizona;
>  
>  	return blocking_notifier_chain_unregister(&arizona->notifier, nb);
> diff --git a/sound/soc/codecs/cs47l24.c b/sound/soc/codecs/cs47l24.c
> index 3f34de5..2aaa866 100644
> --- a/sound/soc/codecs/cs47l24.c
> +++ b/sound/soc/codecs/cs47l24.c
> @@ -62,14 +62,14 @@ struct cs47l24_priv {
>  static int cs47l24_adsp_power_ev(struct snd_soc_dapm_widget *w,
>  				 struct snd_kcontrol *kcontrol, int event)
>  {
> -	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
> -	struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
> +	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
> +	struct arizona *arizona = dev_get_drvdata(component->dev->parent);
>  	unsigned int v;
>  	int ret;
>  
>  	ret = regmap_read(arizona->regmap, ARIZONA_SYSTEM_CLOCK_1, &v);
>  	if (ret != 0) {
> -		dev_err(codec->dev, "Failed to read SYSCLK state: %d\n", ret);
> +		dev_err(component->dev, "Failed to read SYSCLK state: %d\n", ret);
>  		return ret;
>  	}
>  
> @@ -931,10 +931,10 @@ static int cs47l24_adsp_power_ev(struct snd_soc_dapm_widget *w,
>  	{ "DSP3 Voice Trigger", "Switch", "DSP3" },
>  };
>  
> -static int cs47l24_set_fll(struct snd_soc_codec *codec, int fll_id, int source,
> +static int cs47l24_set_fll(struct snd_soc_component *component, int fll_id, int source,
>  			  unsigned int Fref, unsigned int Fout)
>  {
> -	struct cs47l24_priv *cs47l24 = snd_soc_codec_get_drvdata(codec);
> +	struct cs47l24_priv *cs47l24 = snd_soc_component_get_drvdata(component);
>  
>  	switch (fll_id) {
>  	case CS47L24_FLL1:
> @@ -1118,33 +1118,32 @@ static irqreturn_t cs47l24_adsp2_irq(int irq, void *data)
>  	return IRQ_HANDLED;
>  }
>  
> -static int cs47l24_codec_probe(struct snd_soc_codec *codec)
> +static int cs47l24_component_probe(struct snd_soc_component *component)
>  {
> -	struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
> -	struct snd_soc_component *component = snd_soc_dapm_to_component(dapm);
> -	struct cs47l24_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
> +	struct cs47l24_priv *priv = snd_soc_component_get_drvdata(component);
>  	struct arizona *arizona = priv->core.arizona;
>  	int ret;
>  
>  	arizona->dapm = dapm;
> -	snd_soc_codec_init_regmap(codec, arizona->regmap);
> +	snd_soc_component_init_regmap(component, arizona->regmap);
>  
> -	ret = arizona_init_spk(codec);
> +	ret = arizona_init_spk(component);
>  	if (ret < 0)
>  		return ret;
>  
> -	arizona_init_gpio(codec);
> -	arizona_init_mono(codec);
> +	arizona_init_gpio(component);
> +	arizona_init_mono(component);
>  
> -	ret = wm_adsp2_codec_probe(&priv->core.adsp[1], codec);
> +	ret = wm_adsp2_component_probe(&priv->core.adsp[1], component);
>  	if (ret)
>  		goto err_adsp2_codec_probe;
>  
> -	ret = wm_adsp2_codec_probe(&priv->core.adsp[2], codec);
> +	ret = wm_adsp2_component_probe(&priv->core.adsp[2], component);
>  	if (ret)
>  		goto err_adsp2_codec_probe;
>  
> -	ret = snd_soc_add_codec_controls(codec,
> +	ret = snd_soc_add_component_controls(component,
>  					 &arizona_adsp2_rate_controls[1], 2);
>  	if (ret)
>  		goto err_adsp2_codec_probe;
> @@ -1154,22 +1153,20 @@ static int cs47l24_codec_probe(struct snd_soc_codec *codec)
>  	return 0;
>  
>  err_adsp2_codec_probe:
> -	wm_adsp2_codec_remove(&priv->core.adsp[1], codec);
> -	wm_adsp2_codec_remove(&priv->core.adsp[2], codec);
> +	wm_adsp2_component_remove(&priv->core.adsp[1], component);
> +	wm_adsp2_component_remove(&priv->core.adsp[2], component);
>  
>  	return ret;
>  }
>  
> -static int cs47l24_codec_remove(struct snd_soc_codec *codec)
> +static void cs47l24_component_remove(struct snd_soc_component *component)
>  {
> -	struct cs47l24_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct cs47l24_priv *priv = snd_soc_component_get_drvdata(component);
>  
> -	wm_adsp2_codec_remove(&priv->core.adsp[1], codec);
> -	wm_adsp2_codec_remove(&priv->core.adsp[2], codec);
> +	wm_adsp2_component_remove(&priv->core.adsp[1], component);
> +	wm_adsp2_component_remove(&priv->core.adsp[2], component);
>  
>  	priv->core.arizona->dapm = NULL;
> -
> -	return 0;
>  }
>  
>  #define CS47L24_DIG_VU 0x0200
> @@ -1190,25 +1187,22 @@ static int cs47l24_codec_remove(struct snd_soc_codec *codec)
>  	.copy		= wm_adsp_compr_copy,
>  };
>  
> -static const struct snd_soc_codec_driver soc_codec_dev_cs47l24 = {
> -	.probe = cs47l24_codec_probe,
> -	.remove = cs47l24_codec_remove,
> -
> -	.idle_bias_off = true,
> -
> -	.set_sysclk = arizona_set_sysclk,
> -	.set_pll = cs47l24_set_fll,
> -
> -	.component_driver = {
> -		.name			= DRV_NAME,
> -		.compr_ops		= &cs47l24_compr_ops,
> -		.controls		= cs47l24_snd_controls,
> -		.num_controls		= ARRAY_SIZE(cs47l24_snd_controls),
> -		.dapm_widgets		= cs47l24_dapm_widgets,
> -		.num_dapm_widgets	= ARRAY_SIZE(cs47l24_dapm_widgets),
> -		.dapm_routes		= cs47l24_dapm_routes,
> -		.num_dapm_routes	= ARRAY_SIZE(cs47l24_dapm_routes),
> -	},
> +static const struct snd_soc_component_driver soc_component_dev_cs47l24 = {
> +	.probe			= cs47l24_component_probe,
> +	.remove			= cs47l24_component_remove,
> +	.set_sysclk		= arizona_set_sysclk,
> +	.set_pll		= cs47l24_set_fll,
> +	.name			= DRV_NAME,
> +	.compr_ops		= &cs47l24_compr_ops,
> +	.controls		= cs47l24_snd_controls,
> +	.num_controls		= ARRAY_SIZE(cs47l24_snd_controls),
> +	.dapm_widgets		= cs47l24_dapm_widgets,
> +	.num_dapm_widgets	= ARRAY_SIZE(cs47l24_dapm_widgets),
> +	.dapm_routes		= cs47l24_dapm_routes,
> +	.num_dapm_routes	= ARRAY_SIZE(cs47l24_dapm_routes),
> +	.pmdown_time		= 1,
> +	.endianness		= 1,
> +	.non_legacy_dai_naming	= 1,
>  };
>  
>  static int cs47l24_probe(struct platform_device *pdev)
> @@ -1299,10 +1293,11 @@ static int cs47l24_probe(struct platform_device *pdev)
>  	if (ret < 0)
>  		goto err_dsp_irq;
>  
> -	ret = snd_soc_register_codec(&pdev->dev, &soc_codec_dev_cs47l24,
> +	ret = devm_snd_soc_register_component(&pdev->dev,
> +				      &soc_component_dev_cs47l24,
>  				      cs47l24_dai, ARRAY_SIZE(cs47l24_dai));

align

>  	if (ret < 0) {
> -		dev_err(&pdev->dev, "Failed to register codec: %d\n", ret);
> +		dev_err(&pdev->dev, "Failed to register component: %d\n", ret);
>  		goto err_spk_irqs;
>  	}
>  
> @@ -1321,7 +1316,6 @@ static int cs47l24_remove(struct platform_device *pdev)
>  	struct cs47l24_priv *cs47l24 = platform_get_drvdata(pdev);
>  	struct arizona *arizona = cs47l24->core.arizona;
>  
> -	snd_soc_unregister_codec(&pdev->dev);
>  	pm_runtime_disable(&pdev->dev);
>  
>  	wm_adsp2_remove(&cs47l24->core.adsp[1]);
> diff --git a/sound/soc/codecs/wm5102.c b/sound/soc/codecs/wm5102.c
> index a568050..68bd418 100644
> --- a/sound/soc/codecs/wm5102.c
> +++ b/sound/soc/codecs/wm5102.c
> @@ -583,8 +583,8 @@ struct wm5102_priv {
>  static int wm5102_sysclk_ev(struct snd_soc_dapm_widget *w,
>  			    struct snd_kcontrol *kcontrol, int event)
>  {
> -	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
> -	struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
> +	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
> +	struct arizona *arizona = dev_get_drvdata(component->dev->parent);
>  	struct regmap *regmap = arizona->regmap;
>  	const struct reg_default *patch = NULL;
>  	int i, patch_size;
> @@ -622,8 +622,8 @@ static int wm5102_sysclk_ev(struct snd_soc_dapm_widget *w,
>  static int wm5102_adsp_power_ev(struct snd_soc_dapm_widget *w,
>  		   struct snd_kcontrol *kcontrol, int event)
>  {
> -	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
> -	struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
> +	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
> +	struct arizona *arizona = dev_get_drvdata(component->dev->parent);
>  	unsigned int v = 0;
>  	int ret;
>  
> @@ -631,7 +631,7 @@ static int wm5102_adsp_power_ev(struct snd_soc_dapm_widget *w,
>  	case SND_SOC_DAPM_PRE_PMU:
>  		ret = regmap_read(arizona->regmap, ARIZONA_SYSTEM_CLOCK_1, &v);
>  		if (ret != 0) {
> -			dev_err(codec->dev,
> +			dev_err(component->dev,
>  				"Failed to read SYSCLK state: %d\n", ret);
>  			return -EIO;
>  		}
> @@ -639,9 +639,9 @@ static int wm5102_adsp_power_ev(struct snd_soc_dapm_widget *w,
>  		v = (v & ARIZONA_SYSCLK_FREQ_MASK) >> ARIZONA_SYSCLK_FREQ_SHIFT;
>  
>  		if (v >= 3) {
> -			ret = arizona_dvfs_up(codec, ARIZONA_DVFS_ADSP1_RQ);
> +			ret = arizona_dvfs_up(component, ARIZONA_DVFS_ADSP1_RQ);
>  			if (ret) {
> -				dev_err(codec->dev,
> +				dev_err(component->dev,
>  					"Failed to raise DVFS: %d\n", ret);
>  				return ret;
>  			}
> @@ -649,9 +649,9 @@ static int wm5102_adsp_power_ev(struct snd_soc_dapm_widget *w,
>  		break;
>  
>  	case SND_SOC_DAPM_POST_PMD:
> -		ret = arizona_dvfs_down(codec, ARIZONA_DVFS_ADSP1_RQ);
> +		ret = arizona_dvfs_down(component, ARIZONA_DVFS_ADSP1_RQ);
>  		if (ret)
> -			dev_warn(codec->dev,
> +			dev_warn(component->dev,
>  				 "Failed to lower DVFS: %d\n", ret);
>  		break;
>  
> @@ -665,8 +665,8 @@ static int wm5102_adsp_power_ev(struct snd_soc_dapm_widget *w,
>  static int wm5102_out_comp_coeff_get(struct snd_kcontrol *kcontrol,
>  				     struct snd_ctl_elem_value *ucontrol)
>  {
> -	struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
> -	struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
> +	struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
> +	struct arizona *arizona = dev_get_drvdata(component->dev->parent);
>  
>  	mutex_lock(&arizona->dac_comp_lock);
>  	put_unaligned_be16(arizona->dac_comp_coeff,
> @@ -679,8 +679,8 @@ static int wm5102_out_comp_coeff_get(struct snd_kcontrol *kcontrol,
>  static int wm5102_out_comp_coeff_put(struct snd_kcontrol *kcontrol,
>  				     struct snd_ctl_elem_value *ucontrol)
>  {
> -	struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
> -	struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
> +	struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
> +	struct arizona *arizona = dev_get_drvdata(component->dev->parent);
>  
>  	mutex_lock(&arizona->dac_comp_lock);
>  	memcpy(&arizona->dac_comp_coeff, ucontrol->value.bytes.data,
> @@ -694,8 +694,8 @@ static int wm5102_out_comp_coeff_put(struct snd_kcontrol *kcontrol,
>  static int wm5102_out_comp_switch_get(struct snd_kcontrol *kcontrol,
>  				      struct snd_ctl_elem_value *ucontrol)
>  {
> -	struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
> -	struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
> +	struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
> +	struct arizona *arizona = dev_get_drvdata(component->dev->parent);
>  
>  	mutex_lock(&arizona->dac_comp_lock);
>  	ucontrol->value.integer.value[0] = arizona->dac_comp_enabled;
> @@ -707,8 +707,8 @@ static int wm5102_out_comp_switch_get(struct snd_kcontrol *kcontrol,
>  static int wm5102_out_comp_switch_put(struct snd_kcontrol *kcontrol,
>  				      struct snd_ctl_elem_value *ucontrol)
>  {
> -	struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
> -	struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
> +	struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
> +	struct arizona *arizona = dev_get_drvdata(component->dev->parent);
>  
>  	mutex_lock(&arizona->dac_comp_lock);
>  	arizona->dac_comp_enabled = ucontrol->value.integer.value[0];
> @@ -1736,10 +1736,10 @@ static int wm5102_out_comp_switch_put(struct snd_kcontrol *kcontrol,
>  	{ "DRC1 Signal Activity", NULL, "DRC1R" },
>  };
>  
> -static int wm5102_set_fll(struct snd_soc_codec *codec, int fll_id, int source,
> +static int wm5102_set_fll(struct snd_soc_component *component, int fll_id, int source,
>  			  unsigned int Fref, unsigned int Fout)
>  {
> -	struct wm5102_priv *wm5102 = snd_soc_codec_get_drvdata(codec);
> +	struct wm5102_priv *wm5102 = snd_soc_component_get_drvdata(component);
>  
>  	switch (fll_id) {
>  	case WM5102_FLL1:
> @@ -1933,30 +1933,29 @@ static irqreturn_t wm5102_adsp2_irq(int irq, void *data)
>  	return IRQ_HANDLED;
>  }
>  
> -static int wm5102_codec_probe(struct snd_soc_codec *codec)
> +static int wm5102_component_probe(struct snd_soc_component *component)
>  {
> -	struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
> -	struct snd_soc_component *component = snd_soc_dapm_to_component(dapm);
> -	struct wm5102_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
> +	struct wm5102_priv *priv = snd_soc_component_get_drvdata(component);
>  	struct arizona *arizona = priv->core.arizona;
>  	int ret;
>  
> -	snd_soc_codec_init_regmap(codec, arizona->regmap);
> +	snd_soc_component_init_regmap(component, arizona->regmap);
>  
> -	ret = wm_adsp2_codec_probe(&priv->core.adsp[0], codec);
> +	ret = wm_adsp2_component_probe(&priv->core.adsp[0], component);
>  	if (ret)
>  		return ret;
>  
> -	ret = snd_soc_add_codec_controls(codec,
> +	ret = snd_soc_add_component_controls(component,
>  					 arizona_adsp2_rate_controls, 1);
>  	if (ret)

align

>  		goto err_adsp2_codec_probe;
>  
> -	ret = arizona_init_spk(codec);
> +	ret = arizona_init_spk(component);
>  	if (ret < 0)
>  		return ret;
>  
> -	arizona_init_gpio(codec);
> +	arizona_init_gpio(component);
>  
>  	snd_soc_component_disable_pin(component, "HAPTICS");
>  
> @@ -1965,20 +1964,18 @@ static int wm5102_codec_probe(struct snd_soc_codec *codec)
>  	return 0;
>  
>  err_adsp2_codec_probe:
> -	wm_adsp2_codec_remove(&priv->core.adsp[0], codec);
> +	wm_adsp2_component_remove(&priv->core.adsp[0], component);
>  
>  	return ret;
>  }
>  
> -static int wm5102_codec_remove(struct snd_soc_codec *codec)
> +static void wm5102_component_remove(struct snd_soc_component *component)
>  {
> -	struct wm5102_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct wm5102_priv *priv = snd_soc_component_get_drvdata(component);
>  
> -	wm_adsp2_codec_remove(&priv->core.adsp[0], codec);
> +	wm_adsp2_component_remove(&priv->core.adsp[0], component);
>  
>  	priv->core.arizona->dapm = NULL;
> -
> -	return 0;
>  }
>  
>  #define WM5102_DIG_VU 0x0200
> @@ -2005,25 +2002,22 @@ static int wm5102_codec_remove(struct snd_soc_codec *codec)
>  	.copy		= wm_adsp_compr_copy,
>  };
>  
> -static const struct snd_soc_codec_driver soc_codec_dev_wm5102 = {
> -	.probe = wm5102_codec_probe,
> -	.remove = wm5102_codec_remove,
> -
> -	.idle_bias_off = true,
> -
> -	.set_sysclk = arizona_set_sysclk,
> -	.set_pll = wm5102_set_fll,
> -
> -	.component_driver = {
> -		.name			= DRV_NAME,
> -		.compr_ops		= &wm5102_compr_ops,
> -		.controls		= wm5102_snd_controls,
> -		.num_controls		= ARRAY_SIZE(wm5102_snd_controls),
> -		.dapm_widgets		= wm5102_dapm_widgets,
> -		.num_dapm_widgets	= ARRAY_SIZE(wm5102_dapm_widgets),
> -		.dapm_routes		= wm5102_dapm_routes,
> -		.num_dapm_routes	= ARRAY_SIZE(wm5102_dapm_routes),
> -	},
> +static const struct snd_soc_component_driver soc_component_dev_wm5102 = {
> +	.probe			= wm5102_component_probe,
> +	.remove			= wm5102_component_remove,
> +	.set_sysclk		= arizona_set_sysclk,
> +	.set_pll		= wm5102_set_fll,
> +	.name			= DRV_NAME,
> +	.compr_ops		= &wm5102_compr_ops,
> +	.controls		= wm5102_snd_controls,
> +	.num_controls		= ARRAY_SIZE(wm5102_snd_controls),
> +	.dapm_widgets		= wm5102_dapm_widgets,
> +	.num_dapm_widgets	= ARRAY_SIZE(wm5102_dapm_widgets),
> +	.dapm_routes		= wm5102_dapm_routes,
> +	.num_dapm_routes	= ARRAY_SIZE(wm5102_dapm_routes),
> +	.pmdown_time		= 1,
> +	.endianness		= 1,
> +	.non_legacy_dai_naming	= 1,
>  };
>  
>  static int wm5102_probe(struct platform_device *pdev)
> @@ -2110,10 +2104,11 @@ static int wm5102_probe(struct platform_device *pdev)
>  	if (ret < 0)
>  		goto err_dsp_irq;
>  
> -	ret = snd_soc_register_codec(&pdev->dev, &soc_codec_dev_wm5102,
> +	ret = devm_snd_soc_register_component(&pdev->dev,
> +				      &soc_component_dev_wm5102,
>  				      wm5102_dai, ARRAY_SIZE(wm5102_dai));

align

>  	if (ret < 0) {
> -		dev_err(&pdev->dev, "Failed to register codec: %d\n", ret);
> +		dev_err(&pdev->dev, "Failed to register component: %d\n", ret);
>  		goto err_spk_irqs;
>  	}
>  
> @@ -2132,7 +2127,6 @@ static int wm5102_remove(struct platform_device *pdev)
>  	struct wm5102_priv *wm5102 = platform_get_drvdata(pdev);
>  	struct arizona *arizona = wm5102->core.arizona;
>  
> -	snd_soc_unregister_codec(&pdev->dev);
>  	pm_runtime_disable(&pdev->dev);
>  
>  	wm_adsp2_remove(&wm5102->core.adsp[0]);
> diff --git a/sound/soc/codecs/wm5110.c b/sound/soc/codecs/wm5110.c
> index d5ece6c..1159338 100644
> --- a/sound/soc/codecs/wm5110.c
> +++ b/sound/soc/codecs/wm5110.c
> @@ -161,8 +161,8 @@ struct wm5110_priv {
>  static int wm5110_sysclk_ev(struct snd_soc_dapm_widget *w,
>  			    struct snd_kcontrol *kcontrol, int event)
>  {
> -	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
> -	struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
> +	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
> +	struct arizona *arizona = dev_get_drvdata(component->dev->parent);
>  	struct regmap *regmap = arizona->regmap;
>  	const struct reg_default *patch = NULL;
>  	int i, patch_size;
> @@ -198,14 +198,14 @@ static int wm5110_sysclk_ev(struct snd_soc_dapm_widget *w,
>  static int wm5110_adsp_power_ev(struct snd_soc_dapm_widget *w,
>  				struct snd_kcontrol *kcontrol, int event)
>  {
> -	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
> -	struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
> +	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
> +	struct arizona *arizona = dev_get_drvdata(component->dev->parent);
>  	unsigned int v;
>  	int ret;
>  
>  	ret = regmap_read(arizona->regmap, ARIZONA_SYSTEM_CLOCK_1, &v);
>  	if (ret != 0) {
> -		dev_err(codec->dev, "Failed to read SYSCLK state: %d\n", ret);
> +		dev_err(component->dev, "Failed to read SYSCLK state: %d\n", ret);
>  		return ret;
>  	}
>  
> @@ -288,10 +288,10 @@ static int wm5110_adsp_power_ev(struct snd_soc_dapm_widget *w,
>  
>  static int wm5110_hp_pre_enable(struct snd_soc_dapm_widget *w)
>  {
> -	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
> -	struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  	struct arizona *arizona = priv->arizona;
> -	unsigned int val = snd_soc_read(codec, ARIZONA_DRE_ENABLE);
> +	unsigned int val = snd_soc_component_read32(component, ARIZONA_DRE_ENABLE);
>  	const struct reg_sequence *wseq;
>  	int nregs;
>  
> @@ -325,25 +325,25 @@ static int wm5110_hp_pre_enable(struct snd_soc_dapm_widget *w)
>  
>  static int wm5110_hp_pre_disable(struct snd_soc_dapm_widget *w)
>  {
> -	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
> -	struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> -	unsigned int val = snd_soc_read(codec, ARIZONA_DRE_ENABLE);
> +	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
> +	unsigned int val = snd_soc_component_read32(component, ARIZONA_DRE_ENABLE);
>  
>  	switch (w->shift) {
>  	case ARIZONA_OUT1L_ENA_SHIFT:
>  		if (!(val & ARIZONA_DRE1L_ENA_MASK)) {
> -			snd_soc_update_bits(codec, ARIZONA_SPARE_TRIGGERS,
> +			snd_soc_component_update_bits(component, ARIZONA_SPARE_TRIGGERS,
>  					    ARIZONA_WS_TRG1, ARIZONA_WS_TRG1);

align

> -			snd_soc_update_bits(codec, ARIZONA_SPARE_TRIGGERS,
> +			snd_soc_component_update_bits(component, ARIZONA_SPARE_TRIGGERS,
>  					    ARIZONA_WS_TRG1, 0);

align

>  			priv->out_down_delay += 27;
>  		}
>  		break;
>  	case ARIZONA_OUT1R_ENA_SHIFT:
>  		if (!(val & ARIZONA_DRE1R_ENA_MASK)) {
> -			snd_soc_update_bits(codec, ARIZONA_SPARE_TRIGGERS,
> +			snd_soc_component_update_bits(component, ARIZONA_SPARE_TRIGGERS,
>  					    ARIZONA_WS_TRG2, ARIZONA_WS_TRG2);

align

> -			snd_soc_update_bits(codec, ARIZONA_SPARE_TRIGGERS,
> +			snd_soc_component_update_bits(component, ARIZONA_SPARE_TRIGGERS,
>  					    ARIZONA_WS_TRG2, 0);

align

>  			priv->out_down_delay += 27;
>  		}
> @@ -358,8 +358,8 @@ static int wm5110_hp_pre_disable(struct snd_soc_dapm_widget *w)
>  static int wm5110_hp_ev(struct snd_soc_dapm_widget *w,
>  			struct snd_kcontrol *kcontrol, int event)
>  {
> -	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
> -	struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  
>  	switch (priv->arizona->rev) {
>  	case 0 ... 3:
> @@ -397,9 +397,9 @@ static int wm5110_clear_pga_volume(struct arizona *arizona, int output)
>  static int wm5110_put_dre(struct snd_kcontrol *kcontrol,
>  			  struct snd_ctl_elem_value *ucontrol)
>  {
> -	struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
> -	struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
> -	struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
> +	struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
> +	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
> +	struct arizona *arizona = dev_get_drvdata(component->dev->parent);
>  	struct soc_mixer_control *mc =
>  		(struct soc_mixer_control *)kcontrol->private_value;
>  	unsigned int ena, dre;
> @@ -458,8 +458,8 @@ static int wm5110_put_dre(struct snd_kcontrol *kcontrol,
>  static int wm5110_in_pga_get(struct snd_kcontrol *kcontrol,
>  			     struct snd_ctl_elem_value *ucontrol)
>  {
> -	struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
> -	struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
> +	struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
> +	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
>  	int ret;
>  
>  	/*
> @@ -478,8 +478,8 @@ static int wm5110_in_pga_get(struct snd_kcontrol *kcontrol,
>  static int wm5110_in_pga_put(struct snd_kcontrol *kcontrol,
>  			     struct snd_ctl_elem_value *ucontrol)
>  {
> -	struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
> -	struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
> +	struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
> +	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
>  	int ret;
>  
>  	/*
> @@ -498,9 +498,9 @@ static int wm5110_in_pga_put(struct snd_kcontrol *kcontrol,
>  static int wm5110_in_analog_ev(struct snd_soc_dapm_widget *w,
>  			       struct snd_kcontrol *kcontrol, int event)
>  {
> -	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
> -	struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> -	struct wm5110_priv *wm5110 = snd_soc_codec_get_drvdata(codec);
> +	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
> +	struct wm5110_priv *wm5110 = snd_soc_component_get_drvdata(component);
>  	struct arizona *arizona = priv->arizona;
>  	unsigned int reg, mask;
>  	struct reg_sequence analog_seq[] = {
> @@ -519,9 +519,9 @@ static int wm5110_in_analog_ev(struct snd_soc_dapm_widget *w,
>  		wm5110->in_post_pending++;
>  		return 0;
>  	case SND_SOC_DAPM_PRE_PMU:
> -		wm5110->in_pga_cache[w->shift] = snd_soc_read(codec, reg);
> +		wm5110->in_pga_cache[w->shift] = snd_soc_component_read32(component, reg);

Probably should wrap something here.
>  
> -		snd_soc_update_bits(codec, reg, mask,
> +		snd_soc_component_update_bits(component, reg, mask,
>  				    0x40 << ARIZONA_IN1L_PGA_VOL_SHIFT);
>  

align

>  		wm5110->in_pre_pending--;
> @@ -538,7 +538,7 @@ static int wm5110_in_analog_ev(struct snd_soc_dapm_widget *w,
>  
>  		break;
>  	case SND_SOC_DAPM_POST_PMU:
> -		snd_soc_update_bits(codec, reg, mask,
> +		snd_soc_component_update_bits(component, reg, mask,
>  				    wm5110->in_pga_cache[w->shift]);
>  

align

>  		wm5110->in_post_pending--;
> @@ -557,13 +557,13 @@ static int wm5110_in_analog_ev(struct snd_soc_dapm_widget *w,
>  static int wm5110_in_ev(struct snd_soc_dapm_widget *w,
>  			struct snd_kcontrol *kcontrol, int event)
>  {
> -	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
> -	struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
> +	struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
>  	struct arizona *arizona = priv->arizona;
>  
>  	switch (arizona->rev) {
>  	case 0 ... 4:
> -		if (arizona_input_analog(codec, w->shift))
> +		if (arizona_input_analog(component, w->shift))
>  			wm5110_in_analog_ev(w, kcontrol, event);
>  
>  		break;
> @@ -2034,10 +2034,10 @@ static int wm5110_in_ev(struct snd_soc_dapm_widget *w,
>  	{ "DSP3 Voice Trigger", "Switch", "DSP3" },
>  };
>  
> -static int wm5110_set_fll(struct snd_soc_codec *codec, int fll_id, int source,
> +static int wm5110_set_fll(struct snd_soc_component *component, int fll_id, int source,
>  			  unsigned int Fref, unsigned int Fout)
>  {
> -	struct wm5110_priv *wm5110 = snd_soc_codec_get_drvdata(codec);
> +	struct wm5110_priv *wm5110 = snd_soc_component_get_drvdata(component);
>  
>  	switch (fll_id) {
>  	case WM5110_FLL1:
> @@ -2278,31 +2278,30 @@ static irqreturn_t wm5110_adsp2_irq(int irq, void *data)
>  	return IRQ_HANDLED;
>  }
>  
> -static int wm5110_codec_probe(struct snd_soc_codec *codec)
> +static int wm5110_component_probe(struct snd_soc_component *component)
>  {
> -	struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
> -	struct snd_soc_component *component = snd_soc_dapm_to_component(dapm);
> -	struct wm5110_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
> +	struct wm5110_priv *priv = snd_soc_component_get_drvdata(component);
>  	struct arizona *arizona = priv->core.arizona;
>  	int i, ret;
>  
>  	arizona->dapm = dapm;
> -	snd_soc_codec_init_regmap(codec, arizona->regmap);
> +	snd_soc_component_init_regmap(component, arizona->regmap);
>  
> -	ret = arizona_init_spk(codec);
> +	ret = arizona_init_spk(component);
>  	if (ret < 0)
>  		return ret;
>  
> -	arizona_init_gpio(codec);
> -	arizona_init_mono(codec);
> +	arizona_init_gpio(component);
> +	arizona_init_mono(component);
>  
>  	for (i = 0; i < WM5110_NUM_ADSP; ++i) {
> -		ret = wm_adsp2_codec_probe(&priv->core.adsp[i], codec);
> +		ret = wm_adsp2_component_probe(&priv->core.adsp[i], component);
>  		if (ret)
>  			goto err_adsp2_codec_probe;
>  	}
>  
> -	ret = snd_soc_add_codec_controls(codec,
> +	ret = snd_soc_add_component_controls(component,
>  					 arizona_adsp2_rate_controls,
>  					 WM5110_NUM_ADSP);

align

>  	if (ret)
> @@ -2314,22 +2313,20 @@ static int wm5110_codec_probe(struct snd_soc_codec *codec)
>  
>  err_adsp2_codec_probe:
>  	for (--i; i >= 0; --i)
> -		wm_adsp2_codec_remove(&priv->core.adsp[i], codec);
> +		wm_adsp2_component_remove(&priv->core.adsp[i], component);
>  
>  	return ret;
>  }
>  
> -static int wm5110_codec_remove(struct snd_soc_codec *codec)
> +static void wm5110_component_remove(struct snd_soc_component *component)
>  {
> -	struct wm5110_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct wm5110_priv *priv = snd_soc_component_get_drvdata(component);
>  	int i;
>  
>  	for (i = 0; i < WM5110_NUM_ADSP; ++i)
> -		wm_adsp2_codec_remove(&priv->core.adsp[i], codec);
> +		wm_adsp2_component_remove(&priv->core.adsp[i], component);
>  
>  	priv->core.arizona->dapm = NULL;
> -
> -	return 0;
>  }
>  
>  #define WM5110_DIG_VU 0x0200
> @@ -2359,25 +2356,22 @@ static int wm5110_codec_remove(struct snd_soc_codec *codec)
>  	.copy		= wm_adsp_compr_copy,
>  };
>  
> -static const struct snd_soc_codec_driver soc_codec_dev_wm5110 = {
> -	.probe = wm5110_codec_probe,
> -	.remove = wm5110_codec_remove,
> -
> -	.idle_bias_off = true,
> -
> -	.set_sysclk = arizona_set_sysclk,
> -	.set_pll = wm5110_set_fll,
> -
> -	.component_driver = {
> -		.name			= DRV_NAME,
> -		.compr_ops		= &wm5110_compr_ops,
> -		.controls		= wm5110_snd_controls,
> -		.num_controls		= ARRAY_SIZE(wm5110_snd_controls),
> -		.dapm_widgets		= wm5110_dapm_widgets,
> -		.num_dapm_widgets	= ARRAY_SIZE(wm5110_dapm_widgets),
> -		.dapm_routes		= wm5110_dapm_routes,
> -		.num_dapm_routes	= ARRAY_SIZE(wm5110_dapm_routes),
> -	},
> +static const struct snd_soc_component_driver soc_component_dev_wm5110 = {
> +	.probe			= wm5110_component_probe,
> +	.remove			= wm5110_component_remove,
> +	.set_sysclk		= arizona_set_sysclk,
> +	.set_pll		= wm5110_set_fll,
> +	.name			= DRV_NAME,
> +	.compr_ops		= &wm5110_compr_ops,
> +	.controls		= wm5110_snd_controls,
> +	.num_controls		= ARRAY_SIZE(wm5110_snd_controls),
> +	.dapm_widgets		= wm5110_dapm_widgets,
> +	.num_dapm_widgets	= ARRAY_SIZE(wm5110_dapm_widgets),
> +	.dapm_routes		= wm5110_dapm_routes,
> +	.num_dapm_routes	= ARRAY_SIZE(wm5110_dapm_routes),
> +	.pmdown_time		= 1,
> +	.endianness		= 1,
> +	.non_legacy_dai_naming	= 1,
>  };
>  
>  static int wm5110_probe(struct platform_device *pdev)
> @@ -2465,10 +2459,11 @@ static int wm5110_probe(struct platform_device *pdev)
>  	if (ret < 0)
>  		goto err_dsp_irq;
>  
> -	ret = snd_soc_register_codec(&pdev->dev, &soc_codec_dev_wm5110,
> +	ret = devm_snd_soc_register_component(&pdev->dev,
> +				      &soc_component_dev_wm5110,
>  				      wm5110_dai, ARRAY_SIZE(wm5110_dai));

align

>  	if (ret < 0) {
> -		dev_err(&pdev->dev, "Failed to register codec: %d\n", ret);
> +		dev_err(&pdev->dev, "Failed to register component: %d\n", ret);
>  		goto err_spk_irqs;
>  	}
>  
> @@ -2488,7 +2483,6 @@ static int wm5110_remove(struct platform_device *pdev)
>  	struct arizona *arizona = wm5110->core.arizona;
>  	int i;
>  
> -	snd_soc_unregister_codec(&pdev->dev);
>  	pm_runtime_disable(&pdev->dev);
>  
>  	for (i = 0; i < WM5110_NUM_ADSP; i++)
> diff --git a/sound/soc/codecs/wm8997.c b/sound/soc/codecs/wm8997.c
> index cac9b3e..39df315 100644
> --- a/sound/soc/codecs/wm8997.c
> +++ b/sound/soc/codecs/wm8997.c
> @@ -84,8 +84,8 @@ struct wm8997_priv {
>  static int wm8997_sysclk_ev(struct snd_soc_dapm_widget *w,
>  			    struct snd_kcontrol *kcontrol, int event)
>  {
> -	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
> -	struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
> +	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
> +	struct arizona *arizona = dev_get_drvdata(component->dev->parent);
>  	struct regmap *regmap = arizona->regmap;
>  	const struct reg_default *patch = NULL;
>  	int i, patch_size;
> @@ -927,10 +927,10 @@ static int wm8997_sysclk_ev(struct snd_soc_dapm_widget *w,
>  	{ "MICSUPP", NULL, "SYSCLK" },
>  };
>  
> -static int wm8997_set_fll(struct snd_soc_codec *codec, int fll_id, int source,
> +static int wm8997_set_fll(struct snd_soc_component *component, int fll_id, int source,
>  			  unsigned int Fref, unsigned int Fout)
>  {
> -	struct wm8997_priv *wm8997 = snd_soc_codec_get_drvdata(codec);
> +	struct wm8997_priv *wm8997 = snd_soc_component_get_drvdata(component);
>  
>  	switch (fll_id) {
>  	case WM8997_FLL1:
> @@ -1057,17 +1057,16 @@ static int wm8997_set_fll(struct snd_soc_codec *codec, int fll_id, int source,
>  	},
>  };
>  
> -static int wm8997_codec_probe(struct snd_soc_codec *codec)
> +static int wm8997_component_probe(struct snd_soc_component *component)
>  {
> -	struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
> -	struct snd_soc_component *component = snd_soc_dapm_to_component(dapm);
> -	struct wm8997_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
> +	struct wm8997_priv *priv = snd_soc_component_get_drvdata(component);
>  	struct arizona *arizona = priv->core.arizona;
>  	int ret;
>  
> -	snd_soc_codec_init_regmap(codec, arizona->regmap);
> +	snd_soc_component_init_regmap(component, arizona->regmap);
>  
> -	ret = arizona_init_spk(codec);
> +	ret = arizona_init_spk(component);
>  	if (ret < 0)
>  		return ret;
>  
> @@ -1078,13 +1077,11 @@ static int wm8997_codec_probe(struct snd_soc_codec *codec)
>  	return 0;
>  }
>  
> -static int wm8997_codec_remove(struct snd_soc_codec *codec)
> +static void wm8997_component_remove(struct snd_soc_component *component)
>  {
> -	struct wm8997_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct wm8997_priv *priv = snd_soc_component_get_drvdata(component);
>  
>  	priv->core.arizona->dapm = NULL;
> -
> -	return 0;
>  }
>  
>  #define WM8997_DIG_VU 0x0200
> @@ -1098,23 +1095,20 @@ static int wm8997_codec_remove(struct snd_soc_codec *codec)
>  	ARIZONA_DAC_DIGITAL_VOLUME_5R,
>  };
>  
> -static const struct snd_soc_codec_driver soc_codec_dev_wm8997 = {
> -	.probe = wm8997_codec_probe,
> -	.remove = wm8997_codec_remove,
> -
> -	.idle_bias_off = true,
> -
> -	.set_sysclk = arizona_set_sysclk,
> -	.set_pll = wm8997_set_fll,
> -
> -	.component_driver = {
> -		.controls		= wm8997_snd_controls,
> -		.num_controls		= ARRAY_SIZE(wm8997_snd_controls),
> -		.dapm_widgets		= wm8997_dapm_widgets,
> -		.num_dapm_widgets	= ARRAY_SIZE(wm8997_dapm_widgets),
> -		.dapm_routes		= wm8997_dapm_routes,
> -		.num_dapm_routes	= ARRAY_SIZE(wm8997_dapm_routes),
> -	},
> +static const struct snd_soc_component_driver soc_component_dev_wm8997 = {
> +	.probe			= wm8997_component_probe,
> +	.remove			= wm8997_component_remove,
> +	.set_sysclk		= arizona_set_sysclk,
> +	.set_pll		= wm8997_set_fll,
> +	.controls		= wm8997_snd_controls,
> +	.num_controls		= ARRAY_SIZE(wm8997_snd_controls),
> +	.dapm_widgets		= wm8997_dapm_widgets,
> +	.num_dapm_widgets	= ARRAY_SIZE(wm8997_dapm_widgets),
> +	.dapm_routes		= wm8997_dapm_routes,
> +	.num_dapm_routes	= ARRAY_SIZE(wm8997_dapm_routes),
> +	.pmdown_time		= 1,
> +	.endianness		= 1,
> +	.non_legacy_dai_naming	= 1,
>  };
>  
>  static int wm8997_probe(struct platform_device *pdev)
> @@ -1178,10 +1172,11 @@ static int wm8997_probe(struct platform_device *pdev)
>  	if (ret < 0)
>  		return ret;
>  
> -	ret = snd_soc_register_codec(&pdev->dev, &soc_codec_dev_wm8997,
> +	ret = devm_snd_soc_register_component(&pdev->dev,
> +				     &soc_component_dev_wm8997,
>  				     wm8997_dai, ARRAY_SIZE(wm8997_dai));

align

>  	if (ret < 0) {
> -		dev_err(&pdev->dev, "Failed to register codec: %d\n", ret);
> +		dev_err(&pdev->dev, "Failed to register component: %d\n", ret);
>  		goto err_spk_irqs;
>  	}
>  
> @@ -1196,7 +1191,6 @@ static int wm8997_remove(struct platform_device *pdev)
>  	struct wm8997_priv *wm8997 = platform_get_drvdata(pdev);
>  	struct arizona *arizona = wm8997->core.arizona;
>  
> -	snd_soc_unregister_codec(&pdev->dev);
>  	pm_runtime_disable(&pdev->dev);
>  
>  	arizona_free_spk_irqs(arizona);
> diff --git a/sound/soc/codecs/wm8998.c b/sound/soc/codecs/wm8998.c
> index 1288e1f..13a4e9f 100644
> --- a/sound/soc/codecs/wm8998.c
> +++ b/sound/soc/codecs/wm8998.c
> @@ -41,12 +41,12 @@ static int wm8998_asrc_ev(struct snd_soc_dapm_widget *w,
>  			  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 val;
>  
>  	switch (event) {
>  	case SND_SOC_DAPM_PRE_PMU:
> -		val = snd_soc_read(codec, ARIZONA_ASRC_RATE1);
> +		val = snd_soc_component_read32(component, ARIZONA_ASRC_RATE1);
>  		val &= ARIZONA_ASRC_RATE1_MASK;
>  		val >>= ARIZONA_ASRC_RATE1_SHIFT;
>  
> @@ -54,23 +54,23 @@ static int wm8998_asrc_ev(struct snd_soc_dapm_widget *w,
>  		case 0:
>  		case 1:
>  		case 2:
> -			val = snd_soc_read(codec,
> +			val = snd_soc_component_read32(component,
>  					   ARIZONA_SAMPLE_RATE_1 + val);

align

>  			if (val >= 0x11) {
> -				dev_warn(codec->dev,
> +				dev_warn(component->dev,
>  					 "Unsupported ASRC rate1 (%s)\n",
>  					 arizona_sample_rate_val_to_name(val));
>  			return -EINVAL;
>  			}
>  			break;
>  		default:
> -			dev_err(codec->dev,
> +			dev_err(component->dev,
>  				"Illegal ASRC rate1 selector (0x%x)\n",
>  				val);
>  			return -EINVAL;
>  		}
>  
> -		val = snd_soc_read(codec, ARIZONA_ASRC_RATE2);
> +		val = snd_soc_component_read32(component, ARIZONA_ASRC_RATE2);
>  		val &= ARIZONA_ASRC_RATE2_MASK;
>  		val >>= ARIZONA_ASRC_RATE2_SHIFT;
>  
> @@ -78,17 +78,17 @@ static int wm8998_asrc_ev(struct snd_soc_dapm_widget *w,
>  		case 8:
>  		case 9:
>  			val -= 0x8;
> -			val = snd_soc_read(codec,
> +			val = snd_soc_component_read32(component,
>  					   ARIZONA_ASYNC_SAMPLE_RATE_1 + val);

align

>  			if (val >= 0x11) {
> -				dev_warn(codec->dev,
> +				dev_warn(component->dev,
>  					 "Unsupported ASRC rate2 (%s)\n",
>  					 arizona_sample_rate_val_to_name(val));
>  				return -EINVAL;
>  			}
>  			break;
>  		default:
> -			dev_err(codec->dev,
> +			dev_err(component->dev,
>  				"Illegal ASRC rate2 selector (0x%x)\n",
>  				val);
>  			return -EINVAL;
> @@ -104,9 +104,9 @@ static int wm8998_asrc_ev(struct snd_soc_dapm_widget *w,
>  static int wm8998_inmux_put(struct snd_kcontrol *kcontrol,
>  			    struct snd_ctl_elem_value *ucontrol)
>  {
> -	struct snd_soc_codec *codec = snd_soc_dapm_kcontrol_codec(kcontrol);
> -	struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
> -	struct wm8998_priv *wm8998 = snd_soc_codec_get_drvdata(codec);
> +	struct snd_soc_component *component = snd_soc_dapm_kcontrol_component(kcontrol);
> +	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
> +	struct wm8998_priv *wm8998 = snd_soc_component_get_drvdata(component);
>  	struct arizona *arizona = wm8998->core.arizona;
>  	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
>  	unsigned int mode_reg, mode_index;
> @@ -137,9 +137,9 @@ static int wm8998_inmux_put(struct snd_kcontrol *kcontrol,
>  	if (inmode & ARIZONA_INMODE_SE)
>  		src_val |= 1 << ARIZONA_IN1L_SRC_SE_SHIFT;
>  
> -	snd_soc_update_bits(codec, mode_reg, ARIZONA_IN1_MODE_MASK, mode_val);
> +	snd_soc_component_update_bits(component, mode_reg, ARIZONA_IN1_MODE_MASK, mode_val);

wrap

>  
> -	snd_soc_update_bits(codec, e->reg,
> +	snd_soc_component_update_bits(component, e->reg,
>  			    ARIZONA_IN1L_SRC_MASK | ARIZONA_IN1L_SRC_SE_MASK,
>  			    src_val);

align

>  
> @@ -1249,10 +1249,10 @@ static SOC_VALUE_ENUM_SINGLE_DECL(wm8998_aec2_loopback,
>  	},
>  };
>  
> -static int wm8998_set_fll(struct snd_soc_codec *codec, int fll_id, int source,
> +static int wm8998_set_fll(struct snd_soc_component *component, int fll_id, int source,
>  			  unsigned int Fref, unsigned int Fout)
>  {
> -	struct wm8998_priv *wm8998 = snd_soc_codec_get_drvdata(codec);
> +	struct wm8998_priv *wm8998 = snd_soc_component_get_drvdata(component);
>  
>  	switch (fll_id) {
>  	case WM8998_FLL1:
> @@ -1270,35 +1270,32 @@ static int wm8998_set_fll(struct snd_soc_codec *codec, int fll_id, int source,
>  	}
>  }
>  
> -static int wm8998_codec_probe(struct snd_soc_codec *codec)
> +static int wm8998_component_probe(struct snd_soc_component *component)
>  {
> -	struct wm8998_priv *priv = snd_soc_codec_get_drvdata(codec);
> -	struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
> -	struct snd_soc_component *component = snd_soc_dapm_to_component(dapm);
> +	struct wm8998_priv *priv = snd_soc_component_get_drvdata(component);
> +	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
>  	struct arizona *arizona = priv->core.arizona;
>  	int ret;
>  
>  	arizona->dapm = dapm;
> -	snd_soc_codec_init_regmap(codec, arizona->regmap);
> +	snd_soc_component_init_regmap(component, arizona->regmap);
>  
> -	ret = arizona_init_spk(codec);
> +	ret = arizona_init_spk(component);
>  	if (ret < 0)
>  		return ret;
>  
> -	arizona_init_gpio(codec);
> +	arizona_init_gpio(component);
>  
>  	snd_soc_component_disable_pin(component, "HAPTICS");
>  
>  	return 0;
>  }
>  
> -static int wm8998_codec_remove(struct snd_soc_codec *codec)
> +static void wm8998_component_remove(struct snd_soc_component *component)
>  {
> -	struct wm8998_priv *priv = snd_soc_codec_get_drvdata(codec);
> +	struct wm8998_priv *priv = snd_soc_component_get_drvdata(component);
>  
>  	priv->core.arizona->dapm = NULL;
> -
> -	return 0;
>  }
>  
>  #define WM8998_DIG_VU 0x0200
> @@ -1315,23 +1312,20 @@ static int wm8998_codec_remove(struct snd_soc_codec *codec)
>  	ARIZONA_DAC_DIGITAL_VOLUME_5R,
>  };
>  
> -static const struct snd_soc_codec_driver soc_codec_dev_wm8998 = {
> -	.probe = wm8998_codec_probe,
> -	.remove = wm8998_codec_remove,
> -
> -	.idle_bias_off = true,
> -
> -	.set_sysclk = arizona_set_sysclk,
> -	.set_pll = wm8998_set_fll,
> -
> -	.component_driver = {
> -		.controls		= wm8998_snd_controls,
> -		.num_controls		= ARRAY_SIZE(wm8998_snd_controls),
> -		.dapm_widgets		= wm8998_dapm_widgets,
> -		.num_dapm_widgets	= ARRAY_SIZE(wm8998_dapm_widgets),
> -		.dapm_routes		= wm8998_dapm_routes,
> -		.num_dapm_routes	= ARRAY_SIZE(wm8998_dapm_routes),
> -	},
> +static const struct snd_soc_component_driver soc_component_dev_wm8998 = {
> +	.probe			= wm8998_component_probe,
> +	.remove			= wm8998_component_remove,
> +	.set_sysclk		= arizona_set_sysclk,
> +	.set_pll		= wm8998_set_fll,
> +	.controls		= wm8998_snd_controls,
> +	.num_controls		= ARRAY_SIZE(wm8998_snd_controls),
> +	.dapm_widgets		= wm8998_dapm_widgets,
> +	.num_dapm_widgets	= ARRAY_SIZE(wm8998_dapm_widgets),
> +	.dapm_routes		= wm8998_dapm_routes,
> +	.num_dapm_routes	= ARRAY_SIZE(wm8998_dapm_routes),
> +	.pmdown_time		= 1,
> +	.endianness		= 1,
> +	.non_legacy_dai_naming	= 1,
>  };
>  
>  static int wm8998_probe(struct platform_device *pdev)
> @@ -1384,10 +1378,11 @@ static int wm8998_probe(struct platform_device *pdev)
>  	if (ret < 0)
>  		return ret;
>  
> -	ret = snd_soc_register_codec(&pdev->dev, &soc_codec_dev_wm8998,
> +	ret = devm_snd_soc_register_component(&pdev->dev,
> +				     &soc_component_dev_wm8998,
>  				     wm8998_dai, ARRAY_SIZE(wm8998_dai));

align

>  	if (ret < 0) {
> -		dev_err(&pdev->dev, "Failed to register codec: %d\n", ret);
> +		dev_err(&pdev->dev, "Failed to register component: %d\n", ret);
>  		goto err_spk_irqs;
>  	}
>  
> @@ -1404,7 +1399,6 @@ static int wm8998_remove(struct platform_device *pdev)
>  	struct wm8998_priv *wm8998 = platform_get_drvdata(pdev);
>  	struct arizona *arizona = wm8998->core.arizona;
>  
> -	snd_soc_unregister_codec(&pdev->dev);
>  	pm_runtime_disable(&pdev->dev);
>  
>  	arizona_free_spk_irqs(arizona);
> diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c
> index 66e32f5..4847e94 100644
> --- a/sound/soc/codecs/wm_adsp.c
> +++ b/sound/soc/codecs/wm_adsp.c
> @@ -605,13 +605,13 @@ static ssize_t wm_adsp_debugfs_bin_read(struct file *file,
>  };
>  
>  static void wm_adsp2_init_debugfs(struct wm_adsp *dsp,
> -				  struct snd_soc_codec *codec)
> +				  struct snd_soc_component *component)
>  {
>  	struct dentry *root = NULL;
>  	char *root_name;
>  	int i;
>  
> -	if (!codec->component.debugfs_root) {
> +	if (!component->debugfs_root) {
>  		adsp_err(dsp, "No codec debugfs root\n");
>  		goto err;
>  	}
> @@ -621,7 +621,7 @@ static void wm_adsp2_init_debugfs(struct wm_adsp *dsp,
>  		goto err;
>  
>  	snprintf(root_name, PAGE_SIZE, "dsp%d", dsp->num);
> -	root = debugfs_create_dir(root_name, codec->component.debugfs_root);
> +	root = debugfs_create_dir(root_name, component->debugfs_root);
>  	kfree(root_name);
>  
>  	if (!root)
> @@ -662,7 +662,7 @@ static void wm_adsp2_cleanup_debugfs(struct wm_adsp *dsp)
>  }
>  #else
>  static inline void wm_adsp2_init_debugfs(struct wm_adsp *dsp,
> -					 struct snd_soc_codec *codec)
> +					 struct snd_soc_component *component)
>  {
>  }
>  
> @@ -688,9 +688,9 @@ static inline void wm_adsp_debugfs_clear(struct wm_adsp *dsp)
>  static int wm_adsp_fw_get(struct snd_kcontrol *kcontrol,
>  			  struct snd_ctl_elem_value *ucontrol)
>  {
> -	struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
> +	struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
>  	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
> -	struct wm_adsp *dsp = snd_soc_codec_get_drvdata(codec);
> +	struct wm_adsp *dsp = snd_soc_component_get_drvdata(component);
>  
>  	ucontrol->value.enumerated.item[0] = dsp[e->shift_l].fw;
>  
> @@ -700,9 +700,9 @@ static int wm_adsp_fw_get(struct snd_kcontrol *kcontrol,
>  static int wm_adsp_fw_put(struct snd_kcontrol *kcontrol,
>  			  struct snd_ctl_elem_value *ucontrol)
>  {
> -	struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
> +	struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
>  	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
> -	struct wm_adsp *dsp = snd_soc_codec_get_drvdata(codec);
> +	struct wm_adsp *dsp = snd_soc_component_get_drvdata(component);
>  	int ret = 0;
>  
>  	if (ucontrol->value.enumerated.item[0] == dsp[e->shift_l].fw)
> @@ -1213,7 +1213,7 @@ static int wmfw_add_ctl(struct wm_adsp *dsp, struct wm_coeff_ctl *ctl)
>  		break;
>  	}
>  
> -	ret = snd_soc_add_codec_controls(dsp->codec, kcontrol, 1);
> +	ret = snd_soc_add_component_controls(dsp->component, kcontrol, 1);
>  	if (ret < 0)
>  		goto err_kcontrol;
>  
> @@ -2396,14 +2396,14 @@ int wm_adsp1_event(struct snd_soc_dapm_widget *w,
>  		   struct snd_kcontrol *kcontrol,
>  		   int event)
>  {
> -	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
> -	struct wm_adsp *dsps = snd_soc_codec_get_drvdata(codec);
> +	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
> +	struct wm_adsp *dsps = snd_soc_component_get_drvdata(component);
>  	struct wm_adsp *dsp = &dsps[w->shift];
>  	struct wm_coeff_ctl *ctl;
>  	int ret;
>  	unsigned int val;
>  
> -	dsp->codec = codec;
> +	dsp->component = component;
>  
>  	mutex_lock(&dsp->pwr_lock);
>  
> @@ -2633,8 +2633,8 @@ static void wm_adsp2_set_dspclk(struct wm_adsp *dsp, unsigned int freq)
>  int wm_adsp2_preloader_get(struct snd_kcontrol *kcontrol,
>  			   struct snd_ctl_elem_value *ucontrol)
>  {
> -	struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
> -	struct wm_adsp *dsp = snd_soc_codec_get_drvdata(codec);
> +	struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
> +	struct wm_adsp *dsp = snd_soc_component_get_drvdata(component);
>  
>  	ucontrol->value.integer.value[0] = dsp->preloaded;
>  
> @@ -2645,9 +2645,9 @@ int wm_adsp2_preloader_get(struct snd_kcontrol *kcontrol,
>  int wm_adsp2_preloader_put(struct snd_kcontrol *kcontrol,
>  			   struct snd_ctl_elem_value *ucontrol)
>  {
> -	struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
> -	struct wm_adsp *dsp = snd_soc_codec_get_drvdata(codec);
> -	struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
> +	struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
> +	struct wm_adsp *dsp = snd_soc_component_get_drvdata(component);
> +	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
>  	struct soc_mixer_control *mc =
>  		(struct soc_mixer_control *)kcontrol->private_value;
>  	char preload[32];
> @@ -2683,8 +2683,8 @@ int wm_adsp2_early_event(struct snd_soc_dapm_widget *w,
>  			 struct snd_kcontrol *kcontrol, int event,
>  			 unsigned int freq)
>  {
> -	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
> -	struct wm_adsp *dsps = snd_soc_codec_get_drvdata(codec);
> +	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
> +	struct wm_adsp *dsps = snd_soc_component_get_drvdata(component);
>  	struct wm_adsp *dsp = &dsps[w->shift];
>  	struct wm_coeff_ctl *ctl;
>  
> @@ -2726,8 +2726,8 @@ int wm_adsp2_early_event(struct snd_soc_dapm_widget *w,
>  int wm_adsp2_event(struct snd_soc_dapm_widget *w,
>  		   struct snd_kcontrol *kcontrol, int event)
>  {
> -	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
> -	struct wm_adsp *dsps = snd_soc_codec_get_drvdata(codec);
> +	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
> +	struct wm_adsp *dsps = snd_soc_component_get_drvdata(component);
>  	struct wm_adsp *dsp = &dsps[w->shift];
>  	int ret;
>  
> @@ -2841,31 +2841,31 @@ int wm_adsp2_event(struct snd_soc_dapm_widget *w,
>  }
>  EXPORT_SYMBOL_GPL(wm_adsp2_event);
>  
> -int wm_adsp2_codec_probe(struct wm_adsp *dsp, struct snd_soc_codec *codec)
> +int wm_adsp2_component_probe(struct wm_adsp *dsp, struct snd_soc_component *component)

Wrap

>  {
> -	struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
> +	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
>  	char preload[32];
>  
>  	snprintf(preload, ARRAY_SIZE(preload), "DSP%d Preload", dsp->num);
>  	snd_soc_dapm_disable_pin(dapm, preload);
>  
> -	wm_adsp2_init_debugfs(dsp, codec);
> +	wm_adsp2_init_debugfs(dsp, component);
>  
> -	dsp->codec = codec;
> +	dsp->component = component;
>  
> -	return snd_soc_add_codec_controls(codec,
> +	return snd_soc_add_component_controls(component,
>  					  &wm_adsp_fw_controls[dsp->num - 1],
>  					  1);

align

>  }
> -EXPORT_SYMBOL_GPL(wm_adsp2_codec_probe);
> +EXPORT_SYMBOL_GPL(wm_adsp2_component_probe);
>  
> -int wm_adsp2_codec_remove(struct wm_adsp *dsp, struct snd_soc_codec *codec)
> +int wm_adsp2_component_remove(struct wm_adsp *dsp, struct snd_soc_component *component)

Wrap

>  {
>  	wm_adsp2_cleanup_debugfs(dsp);
>  
>  	return 0;
>  }
> -EXPORT_SYMBOL_GPL(wm_adsp2_codec_remove);
> +EXPORT_SYMBOL_GPL(wm_adsp2_component_remove);
>  
>  int wm_adsp2_init(struct wm_adsp *dsp)
>  {
> diff --git a/sound/soc/codecs/wm_adsp.h b/sound/soc/codecs/wm_adsp.h
> index 41cc11c..82d651f 100644
> --- a/sound/soc/codecs/wm_adsp.h
> +++ b/sound/soc/codecs/wm_adsp.h
> @@ -62,7 +62,7 @@ struct wm_adsp {
>  	int type;
>  	struct device *dev;
>  	struct regmap *regmap;
> -	struct snd_soc_codec *codec;
> +	struct snd_soc_component *component;
>  
>  	int base;
>  	int sysclk_reg;
> @@ -126,8 +126,8 @@ struct wm_adsp {
>  int wm_adsp1_init(struct wm_adsp *dsp);
>  int wm_adsp2_init(struct wm_adsp *dsp);
>  void wm_adsp2_remove(struct wm_adsp *dsp);
> -int wm_adsp2_codec_probe(struct wm_adsp *dsp, struct snd_soc_codec *codec);
> -int wm_adsp2_codec_remove(struct wm_adsp *dsp, struct snd_soc_codec *codec);
> +int wm_adsp2_component_probe(struct wm_adsp *dsp, struct snd_soc_component *component);
> +int wm_adsp2_component_remove(struct wm_adsp *dsp, struct snd_soc_component *component);

Wrap

>  int wm_adsp1_event(struct snd_soc_dapm_widget *w,
>  		   struct snd_kcontrol *kcontrol, int event);
>  int wm_adsp2_early_event(struct snd_soc_dapm_widget *w,

Thanks,
Charles


More information about the Alsa-devel mailing list