aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/sound/soc.h8
-rw-r--r--sound/soc/atmel/atmel-classd.c6
-rw-r--r--sound/soc/atmel/atmel-pdmic.c20
-rw-r--r--sound/soc/codecs/88pm860x-codec.c14
-rw-r--r--sound/soc/codecs/ab8500-codec.c14
-rw-r--r--sound/soc/codecs/ac97.c10
-rw-r--r--sound/soc/codecs/ad1836.c14
-rw-r--r--sound/soc/codecs/ad193x.c14
-rw-r--r--sound/soc/codecs/ad1980.c14
-rw-r--r--sound/soc/codecs/ad73311.c10
-rw-r--r--sound/soc/codecs/adau1373.c14
-rw-r--r--sound/soc/codecs/adau1701.c15
-rw-r--r--sound/soc/codecs/adau1761.c14
-rw-r--r--sound/soc/codecs/adau1781.c14
-rw-r--r--sound/soc/codecs/adau1977.c14
-rw-r--r--sound/soc/codecs/adau7002.c10
-rw-r--r--sound/soc/codecs/adav80x.c14
-rw-r--r--sound/soc/codecs/ads117x.c10
-rw-r--r--sound/soc/codecs/ak4104.c15
-rw-r--r--sound/soc/codecs/ak4535.c14
-rw-r--r--sound/soc/codecs/ak4554.c10
-rw-r--r--sound/soc/codecs/ak4613.c14
-rw-r--r--sound/soc/codecs/ak4641.c14
-rw-r--r--sound/soc/codecs/ak4642.c14
-rw-r--r--sound/soc/codecs/ak4671.c14
-rw-r--r--sound/soc/codecs/ak5386.c10
-rw-r--r--sound/soc/codecs/alc5632.c14
-rw-r--r--sound/soc/codecs/arizona.c64
-rw-r--r--sound/soc/codecs/arizona.h17
-rw-r--r--sound/soc/codecs/bt-sco.c10
-rw-r--r--sound/soc/codecs/cq93vc.c6
-rw-r--r--sound/soc/codecs/cs35l32.c15
-rw-r--r--sound/soc/codecs/cs35l33.c15
-rw-r--r--sound/soc/codecs/cs4265.c15
-rw-r--r--sound/soc/codecs/cs4270.c14
-rw-r--r--sound/soc/codecs/cs4271.c14
-rw-r--r--sound/soc/codecs/cs42l51.c14
-rw-r--r--sound/soc/codecs/cs42l52.c15
-rw-r--r--sound/soc/codecs/cs42l56.c15
-rw-r--r--sound/soc/codecs/cs42l73.c15
-rw-r--r--sound/soc/codecs/cs42xx8.c14
-rw-r--r--sound/soc/codecs/cs4349.c15
-rw-r--r--sound/soc/codecs/cs47l24.c26
-rw-r--r--sound/soc/codecs/cs53l30.c15
-rw-r--r--sound/soc/codecs/cx20442.c10
-rw-r--r--sound/soc/codecs/da7210.c15
-rw-r--r--sound/soc/codecs/da7213.c15
-rw-r--r--sound/soc/codecs/da7218.c15
-rw-r--r--sound/soc/codecs/da7219.c15
-rw-r--r--sound/soc/codecs/da732x.c14
-rw-r--r--sound/soc/codecs/da9055.c15
-rw-r--r--sound/soc/codecs/dmic.c10
-rw-r--r--sound/soc/codecs/es8328.c14
-rw-r--r--sound/soc/codecs/gtm601.c10
-rw-r--r--sound/soc/codecs/hdmi-codec.c79
-rw-r--r--sound/soc/codecs/inno_rk3036.c14
-rw-r--r--sound/soc/codecs/isabelle.c14
-rw-r--r--sound/soc/codecs/jz4740.c14
-rw-r--r--sound/soc/codecs/lm49453.c14
-rw-r--r--sound/soc/codecs/max98088.c14
-rw-r--r--sound/soc/codecs/max98095.c14
-rw-r--r--sound/soc/codecs/max98357a.c10
-rw-r--r--sound/soc/codecs/max9850.c14
-rw-r--r--sound/soc/codecs/max9860.c14
-rw-r--r--sound/soc/codecs/max9867.c14
-rw-r--r--sound/soc/codecs/max98925.c14
-rw-r--r--sound/soc/codecs/max98926.c14
-rw-r--r--sound/soc/codecs/mc13783.c14
-rw-r--r--sound/soc/codecs/ml26124.c14
-rw-r--r--sound/soc/codecs/nau8825.c14
-rw-r--r--sound/soc/codecs/pcm1681.c14
-rw-r--r--sound/soc/codecs/pcm179x.c14
-rw-r--r--sound/soc/codecs/pcm3008.c10
-rw-r--r--sound/soc/codecs/pcm3168a.c14
-rw-r--r--sound/soc/codecs/pcm512x.c14
-rw-r--r--sound/soc/codecs/rt286.c14
-rw-r--r--sound/soc/codecs/rt298.c14
-rw-r--r--sound/soc/codecs/rt5514.c14
-rw-r--r--sound/soc/codecs/rt5616.c14
-rw-r--r--sound/soc/codecs/rt5631.c14
-rw-r--r--sound/soc/codecs/rt5640.c14
-rw-r--r--sound/soc/codecs/rt5645.c14
-rw-r--r--sound/soc/codecs/rt5651.c14
-rw-r--r--sound/soc/codecs/rt5659.c14
-rw-r--r--sound/soc/codecs/rt5670.c14
-rw-r--r--sound/soc/codecs/rt5677.c14
-rw-r--r--sound/soc/codecs/sgtl5000.c14
-rw-r--r--sound/soc/codecs/si476x.c10
-rw-r--r--sound/soc/codecs/sn95031.c14
-rw-r--r--sound/soc/codecs/spdif_receiver.c10
-rw-r--r--sound/soc/codecs/spdif_transmitter.c10
-rw-r--r--sound/soc/codecs/ssm2518.c14
-rw-r--r--sound/soc/codecs/ssm2602.c14
-rw-r--r--sound/soc/codecs/ssm4567.c14
-rw-r--r--sound/soc/codecs/sta32x.c14
-rw-r--r--sound/soc/codecs/sta350.c14
-rw-r--r--sound/soc/codecs/sta529.c6
-rw-r--r--sound/soc/codecs/stac9766.c6
-rw-r--r--sound/soc/codecs/sti-sas.c8
-rw-r--r--sound/soc/codecs/tas2552.c14
-rw-r--r--sound/soc/codecs/tas5086.c14
-rw-r--r--sound/soc/codecs/tas571x.c14
-rw-r--r--sound/soc/codecs/tas5720.c14
-rw-r--r--sound/soc/codecs/tfa9879.c15
-rw-r--r--sound/soc/codecs/tlv320aic23.c14
-rw-r--r--sound/soc/codecs/tlv320aic26.c14
-rw-r--r--sound/soc/codecs/tlv320aic31xx.c14
-rw-r--r--sound/soc/codecs/tlv320aic32x4.c14
-rw-r--r--sound/soc/codecs/tlv320aic3x.c14
-rw-r--r--sound/soc/codecs/tlv320dac33.c14
-rw-r--r--sound/soc/codecs/twl4030.c14
-rw-r--r--sound/soc/codecs/twl6040.c14
-rw-r--r--sound/soc/codecs/uda134x.c10
-rw-r--r--sound/soc/codecs/uda1380.c14
-rw-r--r--sound/soc/codecs/wl1273.c14
-rw-r--r--sound/soc/codecs/wm0010.c12
-rw-r--r--sound/soc/codecs/wm1250-ev1.c13
-rw-r--r--sound/soc/codecs/wm2000.c16
-rw-r--r--sound/soc/codecs/wm2200.c16
-rw-r--r--sound/soc/codecs/wm5100.c16
-rw-r--r--sound/soc/codecs/wm5102.c27
-rw-r--r--sound/soc/codecs/wm5110.c28
-rw-r--r--sound/soc/codecs/wm8350.c16
-rw-r--r--sound/soc/codecs/wm8400.c16
-rw-r--r--sound/soc/codecs/wm8510.c16
-rw-r--r--sound/soc/codecs/wm8523.c16
-rw-r--r--sound/soc/codecs/wm8580.c16
-rw-r--r--sound/soc/codecs/wm8711.c16
-rw-r--r--sound/soc/codecs/wm8727.c12
-rw-r--r--sound/soc/codecs/wm8728.c16
-rw-r--r--sound/soc/codecs/wm8731.c16
-rw-r--r--sound/soc/codecs/wm8737.c16
-rw-r--r--sound/soc/codecs/wm8741.c12
-rw-r--r--sound/soc/codecs/wm8750.c16
-rw-r--r--sound/soc/codecs/wm8753.c16
-rw-r--r--sound/soc/codecs/wm8770.c16
-rw-r--r--sound/soc/codecs/wm8776.c16
-rw-r--r--sound/soc/codecs/wm8782.c12
-rw-r--r--sound/soc/codecs/wm8804.c10
-rw-r--r--sound/soc/codecs/wm8900.c16
-rw-r--r--sound/soc/codecs/wm8903.c16
-rw-r--r--sound/soc/codecs/wm8904.c2
-rw-r--r--sound/soc/codecs/wm8940.c16
-rw-r--r--sound/soc/codecs/wm8955.c16
-rw-r--r--sound/soc/codecs/wm8960.c2
-rw-r--r--sound/soc/codecs/wm8961.c16
-rw-r--r--sound/soc/codecs/wm8962.c2
-rw-r--r--sound/soc/codecs/wm8971.c16
-rw-r--r--sound/soc/codecs/wm8974.c16
-rw-r--r--sound/soc/codecs/wm8978.c16
-rw-r--r--sound/soc/codecs/wm8983.c16
-rw-r--r--sound/soc/codecs/wm8985.c16
-rw-r--r--sound/soc/codecs/wm8988.c14
-rw-r--r--sound/soc/codecs/wm8990.c16
-rw-r--r--sound/soc/codecs/wm8991.c16
-rw-r--r--sound/soc/codecs/wm8993.c2
-rw-r--r--sound/soc/codecs/wm8994.c2
-rw-r--r--sound/soc/codecs/wm8995.c14
-rw-r--r--sound/soc/codecs/wm8996.c16
-rw-r--r--sound/soc/codecs/wm8997.c16
-rw-r--r--sound/soc/codecs/wm8998.c26
-rw-r--r--sound/soc/codecs/wm9081.c16
-rw-r--r--sound/soc/codecs/wm9090.c2
-rw-r--r--sound/soc/codecs/wm9705.c16
-rw-r--r--sound/soc/codecs/wm9712.c16
-rw-r--r--sound/soc/codecs/wm9713.c16
-rw-r--r--sound/soc/codecs/wm_adsp.c88
-rw-r--r--sound/soc/codecs/wm_adsp.h7
-rw-r--r--sound/soc/img/pistachio-internal-dac.c14
-rw-r--r--sound/soc/soc-ac97.c2
-rw-r--r--sound/soc/soc-core.c13
-rw-r--r--sound/soc/sunxi/sun4i-codec.c14
172 files changed, 1495 insertions, 1033 deletions
diff --git a/include/sound/soc.h b/include/sound/soc.h
index 6144882cc96a..5eb2b38c3437 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -898,14 +898,6 @@ struct snd_soc_codec_driver {
898 int (*resume)(struct snd_soc_codec *); 898 int (*resume)(struct snd_soc_codec *);
899 struct snd_soc_component_driver component_driver; 899 struct snd_soc_component_driver component_driver;
900 900
901 /* Default control and setup, added after probe() is run */
902 const struct snd_kcontrol_new *controls;
903 int num_controls;
904 const struct snd_soc_dapm_widget *dapm_widgets;
905 int num_dapm_widgets;
906 const struct snd_soc_dapm_route *dapm_routes;
907 int num_dapm_routes;
908
909 /* codec wide operations */ 901 /* codec wide operations */
910 int (*set_sysclk)(struct snd_soc_codec *codec, 902 int (*set_sysclk)(struct snd_soc_codec *codec,
911 int clk_id, int source, unsigned int freq, int dir); 903 int clk_id, int source, unsigned int freq, int dir);
diff --git a/sound/soc/atmel/atmel-classd.c b/sound/soc/atmel/atmel-classd.c
index 6d9b8b44e2da..89ac5f5a93eb 100644
--- a/sound/soc/atmel/atmel-classd.c
+++ b/sound/soc/atmel/atmel-classd.c
@@ -308,9 +308,11 @@ static struct regmap *atmel_classd_codec_get_remap(struct device *dev)
308 308
309static struct snd_soc_codec_driver soc_codec_dev_classd = { 309static struct snd_soc_codec_driver soc_codec_dev_classd = {
310 .probe = atmel_classd_codec_probe, 310 .probe = atmel_classd_codec_probe,
311 .controls = atmel_classd_snd_controls,
312 .num_controls = ARRAY_SIZE(atmel_classd_snd_controls),
313 .get_regmap = atmel_classd_codec_get_remap, 311 .get_regmap = atmel_classd_codec_get_remap,
312 .component_driver = {
313 .controls = atmel_classd_snd_controls,
314 .num_controls = ARRAY_SIZE(atmel_classd_snd_controls),
315 },
314}; 316};
315 317
316/* codec dai component */ 318/* codec dai component */
diff --git a/sound/soc/atmel/atmel-pdmic.c b/sound/soc/atmel/atmel-pdmic.c
index 5f56da60c92f..c917df7715d1 100644
--- a/sound/soc/atmel/atmel-pdmic.c
+++ b/sound/soc/atmel/atmel-pdmic.c
@@ -80,7 +80,7 @@ static struct atmel_pdmic_pdata *atmel_pdmic_dt_init(struct device *dev)
80 80
81 if (pdata->mic_max_freq < pdata->mic_min_freq) { 81 if (pdata->mic_max_freq < pdata->mic_min_freq) {
82 dev_err(dev, 82 dev_err(dev,
83 "mic-max-freq should not less than mic-min-freq\n"); 83 "mic-max-freq should not be less than mic-min-freq\n");
84 return ERR_PTR(-EINVAL); 84 return ERR_PTR(-EINVAL);
85 } 85 }
86 86
@@ -115,8 +115,10 @@ static int atmel_pdmic_cpu_dai_startup(struct snd_pcm_substream *substream,
115 return ret; 115 return ret;
116 116
117 ret = clk_prepare_enable(dd->pclk); 117 ret = clk_prepare_enable(dd->pclk);
118 if (ret) 118 if (ret) {
119 clk_disable_unprepare(dd->gclk);
119 return ret; 120 return ret;
121 }
120 122
121 /* Clear all bits in the Control Register(PDMIC_CR) */ 123 /* Clear all bits in the Control Register(PDMIC_CR) */
122 regmap_write(dd->regmap, PDMIC_CR, 0); 124 regmap_write(dd->regmap, PDMIC_CR, 0);
@@ -283,7 +285,7 @@ static const DECLARE_TLV_DB_RANGE(mic_gain_tlv,
283 8, ARRAY_SIZE(mic_gain_table)-1, TLV_DB_SCALE_ITEM(-6500, 100, 0), 285 8, ARRAY_SIZE(mic_gain_table)-1, TLV_DB_SCALE_ITEM(-6500, 100, 0),
284); 286);
285 287
286int pdmic_get_mic_volsw(struct snd_kcontrol *kcontrol, 288static int pdmic_get_mic_volsw(struct snd_kcontrol *kcontrol,
287 struct snd_ctl_elem_value *ucontrol) 289 struct snd_ctl_elem_value *ucontrol)
288{ 290{
289 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); 291 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
@@ -357,8 +359,10 @@ static int atmel_pdmic_codec_probe(struct snd_soc_codec *codec)
357 359
358static struct snd_soc_codec_driver soc_codec_dev_pdmic = { 360static struct snd_soc_codec_driver soc_codec_dev_pdmic = {
359 .probe = atmel_pdmic_codec_probe, 361 .probe = atmel_pdmic_codec_probe,
360 .controls = atmel_pdmic_snd_controls, 362 .component_driver = {
361 .num_controls = ARRAY_SIZE(atmel_pdmic_snd_controls), 363 .controls = atmel_pdmic_snd_controls,
364 .num_controls = ARRAY_SIZE(atmel_pdmic_snd_controls),
365 },
362}; 366};
363 367
364/* codec dai component */ 368/* codec dai component */
@@ -596,7 +600,7 @@ static int atmel_pdmic_probe(struct platform_device *pdev)
596 dd->irq = platform_get_irq(pdev, 0); 600 dd->irq = platform_get_irq(pdev, 0);
597 if (dd->irq < 0) { 601 if (dd->irq < 0) {
598 ret = dd->irq; 602 ret = dd->irq;
599 dev_err(dev, "failed to could not get irq: %d\n", ret); 603 dev_err(dev, "failed to get irq: %d\n", ret);
600 return ret; 604 return ret;
601 } 605 }
602 606
@@ -614,7 +618,7 @@ static int atmel_pdmic_probe(struct platform_device *pdev)
614 return ret; 618 return ret;
615 } 619 }
616 620
617 /* The gclk clock frequency must always be tree times 621 /* The gclk clock frequency must always be three times
618 * lower than the pclk clock frequency 622 * lower than the pclk clock frequency
619 */ 623 */
620 ret = clk_set_rate(dd->gclk, clk_get_rate(dd->pclk)/3); 624 ret = clk_set_rate(dd->gclk, clk_get_rate(dd->pclk)/3);
@@ -649,7 +653,7 @@ static int atmel_pdmic_probe(struct platform_device *pdev)
649 return ret; 653 return ret;
650 } 654 }
651 655
652 /* Get the minimal and maximal sample rate that micphone supports */ 656 /* Get the minimal and maximal sample rate that the microphone supports */
653 atmel_pdmic_get_sample_rate(dd, &rate_min, &rate_max); 657 atmel_pdmic_get_sample_rate(dd, &rate_min, &rate_max);
654 658
655 /* register cpu dai */ 659 /* register cpu dai */
diff --git a/sound/soc/codecs/88pm860x-codec.c b/sound/soc/codecs/88pm860x-codec.c
index e8bed6b0c9db..b013a4c62b63 100644
--- a/sound/soc/codecs/88pm860x-codec.c
+++ b/sound/soc/codecs/88pm860x-codec.c
@@ -1361,12 +1361,14 @@ static struct snd_soc_codec_driver soc_codec_dev_pm860x = {
1361 .set_bias_level = pm860x_set_bias_level, 1361 .set_bias_level = pm860x_set_bias_level,
1362 .get_regmap = pm860x_get_regmap, 1362 .get_regmap = pm860x_get_regmap,
1363 1363
1364 .controls = pm860x_snd_controls, 1364 .component_driver = {
1365 .num_controls = ARRAY_SIZE(pm860x_snd_controls), 1365 .controls = pm860x_snd_controls,
1366 .dapm_widgets = pm860x_dapm_widgets, 1366 .num_controls = ARRAY_SIZE(pm860x_snd_controls),
1367 .num_dapm_widgets = ARRAY_SIZE(pm860x_dapm_widgets), 1367 .dapm_widgets = pm860x_dapm_widgets,
1368 .dapm_routes = pm860x_dapm_routes, 1368 .num_dapm_widgets = ARRAY_SIZE(pm860x_dapm_widgets),
1369 .num_dapm_routes = ARRAY_SIZE(pm860x_dapm_routes), 1369 .dapm_routes = pm860x_dapm_routes,
1370 .num_dapm_routes = ARRAY_SIZE(pm860x_dapm_routes),
1371 },
1370}; 1372};
1371 1373
1372static int pm860x_codec_probe(struct platform_device *pdev) 1374static int pm860x_codec_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/ab8500-codec.c b/sound/soc/codecs/ab8500-codec.c
index 2fc89155f14a..3056487ed5a9 100644
--- a/sound/soc/codecs/ab8500-codec.c
+++ b/sound/soc/codecs/ab8500-codec.c
@@ -2525,12 +2525,14 @@ static int ab8500_codec_probe(struct snd_soc_codec *codec)
2525 2525
2526static struct snd_soc_codec_driver ab8500_codec_driver = { 2526static struct snd_soc_codec_driver ab8500_codec_driver = {
2527 .probe = ab8500_codec_probe, 2527 .probe = ab8500_codec_probe,
2528 .controls = ab8500_ctrls, 2528 .component_driver = {
2529 .num_controls = ARRAY_SIZE(ab8500_ctrls), 2529 .controls = ab8500_ctrls,
2530 .dapm_widgets = ab8500_dapm_widgets, 2530 .num_controls = ARRAY_SIZE(ab8500_ctrls),
2531 .num_dapm_widgets = ARRAY_SIZE(ab8500_dapm_widgets), 2531 .dapm_widgets = ab8500_dapm_widgets,
2532 .dapm_routes = ab8500_dapm_routes, 2532 .num_dapm_widgets = ARRAY_SIZE(ab8500_dapm_widgets),
2533 .num_dapm_routes = ARRAY_SIZE(ab8500_dapm_routes), 2533 .dapm_routes = ab8500_dapm_routes,
2534 .num_dapm_routes = ARRAY_SIZE(ab8500_dapm_routes),
2535 },
2534}; 2536};
2535 2537
2536static int ab8500_codec_driver_probe(struct platform_device *pdev) 2538static int ab8500_codec_driver_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/ac97.c b/sound/soc/codecs/ac97.c
index 5b3224c63943..f7f04c6be01e 100644
--- a/sound/soc/codecs/ac97.c
+++ b/sound/soc/codecs/ac97.c
@@ -117,10 +117,12 @@ static struct snd_soc_codec_driver soc_codec_dev_ac97 = {
117 .suspend = ac97_soc_suspend, 117 .suspend = ac97_soc_suspend,
118 .resume = ac97_soc_resume, 118 .resume = ac97_soc_resume,
119 119
120 .dapm_widgets = ac97_widgets, 120 .component_driver = {
121 .num_dapm_widgets = ARRAY_SIZE(ac97_widgets), 121 .dapm_widgets = ac97_widgets,
122 .dapm_routes = ac97_routes, 122 .num_dapm_widgets = ARRAY_SIZE(ac97_widgets),
123 .num_dapm_routes = ARRAY_SIZE(ac97_routes), 123 .dapm_routes = ac97_routes,
124 .num_dapm_routes = ARRAY_SIZE(ac97_routes),
125 },
124}; 126};
125 127
126static int ac97_probe(struct platform_device *pdev) 128static int ac97_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/ad1836.c b/sound/soc/codecs/ad1836.c
index e2ce6c4d7ece..a478239aadac 100644
--- a/sound/soc/codecs/ad1836.c
+++ b/sound/soc/codecs/ad1836.c
@@ -327,12 +327,14 @@ static struct snd_soc_codec_driver soc_codec_dev_ad1836 = {
327 .suspend = ad1836_suspend, 327 .suspend = ad1836_suspend,
328 .resume = ad1836_resume, 328 .resume = ad1836_resume,
329 329
330 .controls = ad183x_controls, 330 .component_driver = {
331 .num_controls = ARRAY_SIZE(ad183x_controls), 331 .controls = ad183x_controls,
332 .dapm_widgets = ad183x_dapm_widgets, 332 .num_controls = ARRAY_SIZE(ad183x_controls),
333 .num_dapm_widgets = ARRAY_SIZE(ad183x_dapm_widgets), 333 .dapm_widgets = ad183x_dapm_widgets,
334 .dapm_routes = ad183x_dapm_routes, 334 .num_dapm_widgets = ARRAY_SIZE(ad183x_dapm_widgets),
335 .num_dapm_routes = ARRAY_SIZE(ad183x_dapm_routes), 335 .dapm_routes = ad183x_dapm_routes,
336 .num_dapm_routes = ARRAY_SIZE(ad183x_dapm_routes),
337 },
336}; 338};
337 339
338static const struct reg_default ad1836_reg_defaults[] = { 340static const struct reg_default ad1836_reg_defaults[] = {
diff --git a/sound/soc/codecs/ad193x.c b/sound/soc/codecs/ad193x.c
index 3a3f3f2343d7..d643557d89a7 100644
--- a/sound/soc/codecs/ad193x.c
+++ b/sound/soc/codecs/ad193x.c
@@ -410,12 +410,14 @@ static int ad193x_codec_probe(struct snd_soc_codec *codec)
410 410
411static struct snd_soc_codec_driver soc_codec_dev_ad193x = { 411static struct snd_soc_codec_driver soc_codec_dev_ad193x = {
412 .probe = ad193x_codec_probe, 412 .probe = ad193x_codec_probe,
413 .controls = ad193x_snd_controls, 413 .component_driver = {
414 .num_controls = ARRAY_SIZE(ad193x_snd_controls), 414 .controls = ad193x_snd_controls,
415 .dapm_widgets = ad193x_dapm_widgets, 415 .num_controls = ARRAY_SIZE(ad193x_snd_controls),
416 .num_dapm_widgets = ARRAY_SIZE(ad193x_dapm_widgets), 416 .dapm_widgets = ad193x_dapm_widgets,
417 .dapm_routes = audio_paths, 417 .num_dapm_widgets = ARRAY_SIZE(ad193x_dapm_widgets),
418 .num_dapm_routes = ARRAY_SIZE(audio_paths), 418 .dapm_routes = audio_paths,
419 .num_dapm_routes = ARRAY_SIZE(audio_paths),
420 },
419}; 421};
420 422
421const struct regmap_config ad193x_regmap_config = { 423const struct regmap_config ad193x_regmap_config = {
diff --git a/sound/soc/codecs/ad1980.c b/sound/soc/codecs/ad1980.c
index 9ef20dbccbe3..b7c1b9f4bf5f 100644
--- a/sound/soc/codecs/ad1980.c
+++ b/sound/soc/codecs/ad1980.c
@@ -299,12 +299,14 @@ static struct snd_soc_codec_driver soc_codec_dev_ad1980 = {
299 .probe = ad1980_soc_probe, 299 .probe = ad1980_soc_probe,
300 .remove = ad1980_soc_remove, 300 .remove = ad1980_soc_remove,
301 301
302 .controls = ad1980_snd_ac97_controls, 302 .component_driver = {
303 .num_controls = ARRAY_SIZE(ad1980_snd_ac97_controls), 303 .controls = ad1980_snd_ac97_controls,
304 .dapm_widgets = ad1980_dapm_widgets, 304 .num_controls = ARRAY_SIZE(ad1980_snd_ac97_controls),
305 .num_dapm_widgets = ARRAY_SIZE(ad1980_dapm_widgets), 305 .dapm_widgets = ad1980_dapm_widgets,
306 .dapm_routes = ad1980_dapm_routes, 306 .num_dapm_widgets = ARRAY_SIZE(ad1980_dapm_widgets),
307 .num_dapm_routes = ARRAY_SIZE(ad1980_dapm_routes), 307 .dapm_routes = ad1980_dapm_routes,
308 .num_dapm_routes = ARRAY_SIZE(ad1980_dapm_routes),
309 },
308}; 310};
309 311
310static int ad1980_probe(struct platform_device *pdev) 312static int ad1980_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/ad73311.c b/sound/soc/codecs/ad73311.c
index a9400aef60b5..3e358a49442d 100644
--- a/sound/soc/codecs/ad73311.c
+++ b/sound/soc/codecs/ad73311.c
@@ -55,10 +55,12 @@ static struct snd_soc_dai_driver ad73311_dai = {
55}; 55};
56 56
57static struct snd_soc_codec_driver soc_codec_dev_ad73311 = { 57static struct snd_soc_codec_driver soc_codec_dev_ad73311 = {
58 .dapm_widgets = ad73311_dapm_widgets, 58 .component_driver = {
59 .num_dapm_widgets = ARRAY_SIZE(ad73311_dapm_widgets), 59 .dapm_widgets = ad73311_dapm_widgets,
60 .dapm_routes = ad73311_dapm_routes, 60 .num_dapm_widgets = ARRAY_SIZE(ad73311_dapm_widgets),
61 .num_dapm_routes = ARRAY_SIZE(ad73311_dapm_routes), 61 .dapm_routes = ad73311_dapm_routes,
62 .num_dapm_routes = ARRAY_SIZE(ad73311_dapm_routes),
63 },
62}; 64};
63 65
64static int ad73311_probe(struct platform_device *pdev) 66static int ad73311_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/adau1373.c b/sound/soc/codecs/adau1373.c
index 1556b360fa15..8fa9045571ff 100644
--- a/sound/soc/codecs/adau1373.c
+++ b/sound/soc/codecs/adau1373.c
@@ -1466,12 +1466,14 @@ static struct snd_soc_codec_driver adau1373_codec_driver = {
1466 1466
1467 .set_pll = adau1373_set_pll, 1467 .set_pll = adau1373_set_pll,
1468 1468
1469 .controls = adau1373_controls, 1469 .component_driver = {
1470 .num_controls = ARRAY_SIZE(adau1373_controls), 1470 .controls = adau1373_controls,
1471 .dapm_widgets = adau1373_dapm_widgets, 1471 .num_controls = ARRAY_SIZE(adau1373_controls),
1472 .num_dapm_widgets = ARRAY_SIZE(adau1373_dapm_widgets), 1472 .dapm_widgets = adau1373_dapm_widgets,
1473 .dapm_routes = adau1373_dapm_routes, 1473 .num_dapm_widgets = ARRAY_SIZE(adau1373_dapm_widgets),
1474 .num_dapm_routes = ARRAY_SIZE(adau1373_dapm_routes), 1474 .dapm_routes = adau1373_dapm_routes,
1475 .num_dapm_routes = ARRAY_SIZE(adau1373_dapm_routes),
1476 },
1475}; 1477};
1476 1478
1477static int adau1373_i2c_probe(struct i2c_client *client, 1479static int adau1373_i2c_probe(struct i2c_client *client,
diff --git a/sound/soc/codecs/adau1701.c b/sound/soc/codecs/adau1701.c
index de53c0d7bf10..3bad1bc8c00a 100644
--- a/sound/soc/codecs/adau1701.c
+++ b/sound/soc/codecs/adau1701.c
@@ -765,13 +765,14 @@ static struct snd_soc_codec_driver adau1701_codec_drv = {
765 .set_bias_level = adau1701_set_bias_level, 765 .set_bias_level = adau1701_set_bias_level,
766 .idle_bias_off = true, 766 .idle_bias_off = true,
767 767
768 .controls = adau1701_controls, 768 .component_driver = {
769 .num_controls = ARRAY_SIZE(adau1701_controls), 769 .controls = adau1701_controls,
770 .dapm_widgets = adau1701_dapm_widgets, 770 .num_controls = ARRAY_SIZE(adau1701_controls),
771 .num_dapm_widgets = ARRAY_SIZE(adau1701_dapm_widgets), 771 .dapm_widgets = adau1701_dapm_widgets,
772 .dapm_routes = adau1701_dapm_routes, 772 .num_dapm_widgets = ARRAY_SIZE(adau1701_dapm_widgets),
773 .num_dapm_routes = ARRAY_SIZE(adau1701_dapm_routes), 773 .dapm_routes = adau1701_dapm_routes,
774 774 .num_dapm_routes = ARRAY_SIZE(adau1701_dapm_routes),
775 },
775 .set_sysclk = adau1701_set_sysclk, 776 .set_sysclk = adau1701_set_sysclk,
776}; 777};
777 778
diff --git a/sound/soc/codecs/adau1761.c b/sound/soc/codecs/adau1761.c
index b95d29dbd13d..3bc3cc559dde 100644
--- a/sound/soc/codecs/adau1761.c
+++ b/sound/soc/codecs/adau1761.c
@@ -719,12 +719,14 @@ static const struct snd_soc_codec_driver adau1761_codec_driver = {
719 .set_bias_level = adau1761_set_bias_level, 719 .set_bias_level = adau1761_set_bias_level,
720 .suspend_bias_off = true, 720 .suspend_bias_off = true,
721 721
722 .controls = adau1761_controls, 722 .component_driver = {
723 .num_controls = ARRAY_SIZE(adau1761_controls), 723 .controls = adau1761_controls,
724 .dapm_widgets = adau1x61_dapm_widgets, 724 .num_controls = ARRAY_SIZE(adau1761_controls),
725 .num_dapm_widgets = ARRAY_SIZE(adau1x61_dapm_widgets), 725 .dapm_widgets = adau1x61_dapm_widgets,
726 .dapm_routes = adau1x61_dapm_routes, 726 .num_dapm_widgets = ARRAY_SIZE(adau1x61_dapm_widgets),
727 .num_dapm_routes = ARRAY_SIZE(adau1x61_dapm_routes), 727 .dapm_routes = adau1x61_dapm_routes,
728 .num_dapm_routes = ARRAY_SIZE(adau1x61_dapm_routes),
729 },
728}; 730};
729 731
730#define ADAU1761_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE | \ 732#define ADAU1761_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE | \
diff --git a/sound/soc/codecs/adau1781.c b/sound/soc/codecs/adau1781.c
index bc1bb56dae63..546071c6c0d0 100644
--- a/sound/soc/codecs/adau1781.c
+++ b/sound/soc/codecs/adau1781.c
@@ -432,12 +432,14 @@ static const struct snd_soc_codec_driver adau1781_codec_driver = {
432 .set_bias_level = adau1781_set_bias_level, 432 .set_bias_level = adau1781_set_bias_level,
433 .suspend_bias_off = true, 433 .suspend_bias_off = true,
434 434
435 .controls = adau1781_controls, 435 .component_driver = {
436 .num_controls = ARRAY_SIZE(adau1781_controls), 436 .controls = adau1781_controls,
437 .dapm_widgets = adau1781_dapm_widgets, 437 .num_controls = ARRAY_SIZE(adau1781_controls),
438 .num_dapm_widgets = ARRAY_SIZE(adau1781_dapm_widgets), 438 .dapm_widgets = adau1781_dapm_widgets,
439 .dapm_routes = adau1781_dapm_routes, 439 .num_dapm_widgets = ARRAY_SIZE(adau1781_dapm_widgets),
440 .num_dapm_routes = ARRAY_SIZE(adau1781_dapm_routes), 440 .dapm_routes = adau1781_dapm_routes,
441 .num_dapm_routes = ARRAY_SIZE(adau1781_dapm_routes),
442 },
441}; 443};
442 444
443#define ADAU1781_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE | \ 445#define ADAU1781_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE | \
diff --git a/sound/soc/codecs/adau1977.c b/sound/soc/codecs/adau1977.c
index 9bdd15f408c1..b319db6a69f8 100644
--- a/sound/soc/codecs/adau1977.c
+++ b/sound/soc/codecs/adau1977.c
@@ -873,12 +873,14 @@ static struct snd_soc_codec_driver adau1977_codec_driver = {
873 .set_sysclk = adau1977_set_sysclk, 873 .set_sysclk = adau1977_set_sysclk,
874 .idle_bias_off = true, 874 .idle_bias_off = true,
875 875
876 .controls = adau1977_snd_controls, 876 .component_driver = {
877 .num_controls = ARRAY_SIZE(adau1977_snd_controls), 877 .controls = adau1977_snd_controls,
878 .dapm_widgets = adau1977_dapm_widgets, 878 .num_controls = ARRAY_SIZE(adau1977_snd_controls),
879 .num_dapm_widgets = ARRAY_SIZE(adau1977_dapm_widgets), 879 .dapm_widgets = adau1977_dapm_widgets,
880 .dapm_routes = adau1977_dapm_routes, 880 .num_dapm_widgets = ARRAY_SIZE(adau1977_dapm_widgets),
881 .num_dapm_routes = ARRAY_SIZE(adau1977_dapm_routes), 881 .dapm_routes = adau1977_dapm_routes,
882 .num_dapm_routes = ARRAY_SIZE(adau1977_dapm_routes),
883 },
882}; 884};
883 885
884static int adau1977_setup_micbias(struct adau1977 *adau1977) 886static int adau1977_setup_micbias(struct adau1977 *adau1977)
diff --git a/sound/soc/codecs/adau7002.c b/sound/soc/codecs/adau7002.c
index 9df72c6adcca..6384c5491de8 100644
--- a/sound/soc/codecs/adau7002.c
+++ b/sound/soc/codecs/adau7002.c
@@ -39,10 +39,12 @@ static struct snd_soc_dai_driver adau7002_dai = {
39}; 39};
40 40
41static const struct snd_soc_codec_driver adau7002_codec_driver = { 41static const struct snd_soc_codec_driver adau7002_codec_driver = {
42 .dapm_widgets = adau7002_widgets, 42 .component_driver = {
43 .num_dapm_widgets = ARRAY_SIZE(adau7002_widgets), 43 .dapm_widgets = adau7002_widgets,
44 .dapm_routes = adau7002_routes, 44 .num_dapm_widgets = ARRAY_SIZE(adau7002_widgets),
45 .num_dapm_routes = ARRAY_SIZE(adau7002_routes), 45 .dapm_routes = adau7002_routes,
46 .num_dapm_routes = ARRAY_SIZE(adau7002_routes),
47 },
46}; 48};
47 49
48static int adau7002_probe(struct platform_device *pdev) 50static int adau7002_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/adav80x.c b/sound/soc/codecs/adav80x.c
index acff8d62059c..6e793ebb5883 100644
--- a/sound/soc/codecs/adav80x.c
+++ b/sound/soc/codecs/adav80x.c
@@ -834,12 +834,14 @@ static struct snd_soc_codec_driver adav80x_codec_driver = {
834 .set_pll = adav80x_set_pll, 834 .set_pll = adav80x_set_pll,
835 .set_sysclk = adav80x_set_sysclk, 835 .set_sysclk = adav80x_set_sysclk,
836 836
837 .controls = adav80x_controls, 837 .component_driver = {
838 .num_controls = ARRAY_SIZE(adav80x_controls), 838 .controls = adav80x_controls,
839 .dapm_widgets = adav80x_dapm_widgets, 839 .num_controls = ARRAY_SIZE(adav80x_controls),
840 .num_dapm_widgets = ARRAY_SIZE(adav80x_dapm_widgets), 840 .dapm_widgets = adav80x_dapm_widgets,
841 .dapm_routes = adav80x_dapm_routes, 841 .num_dapm_widgets = ARRAY_SIZE(adav80x_dapm_widgets),
842 .num_dapm_routes = ARRAY_SIZE(adav80x_dapm_routes), 842 .dapm_routes = adav80x_dapm_routes,
843 .num_dapm_routes = ARRAY_SIZE(adav80x_dapm_routes),
844 },
843}; 845};
844 846
845int adav80x_bus_probe(struct device *dev, struct regmap *regmap) 847int adav80x_bus_probe(struct device *dev, struct regmap *regmap)
diff --git a/sound/soc/codecs/ads117x.c b/sound/soc/codecs/ads117x.c
index c5be1bdc2c9a..90c756d183b4 100644
--- a/sound/soc/codecs/ads117x.c
+++ b/sound/soc/codecs/ads117x.c
@@ -59,10 +59,12 @@ static struct snd_soc_dai_driver ads117x_dai = {
59}; 59};
60 60
61static struct snd_soc_codec_driver soc_codec_dev_ads117x = { 61static struct snd_soc_codec_driver soc_codec_dev_ads117x = {
62 .dapm_widgets = ads117x_dapm_widgets, 62 .component_driver = {
63 .num_dapm_widgets = ARRAY_SIZE(ads117x_dapm_widgets), 63 .dapm_widgets = ads117x_dapm_widgets,
64 .dapm_routes = ads117x_dapm_routes, 64 .num_dapm_widgets = ARRAY_SIZE(ads117x_dapm_widgets),
65 .num_dapm_routes = ARRAY_SIZE(ads117x_dapm_routes), 65 .dapm_routes = ads117x_dapm_routes,
66 .num_dapm_routes = ARRAY_SIZE(ads117x_dapm_routes),
67 },
66}; 68};
67 69
68static int ads117x_probe(struct platform_device *pdev) 70static int ads117x_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/ak4104.c b/sound/soc/codecs/ak4104.c
index 595d02d7602c..1a9d233c94d0 100644
--- a/sound/soc/codecs/ak4104.c
+++ b/sound/soc/codecs/ak4104.c
@@ -163,7 +163,10 @@ static struct snd_soc_dai_driver ak4104_dai = {
163 .stream_name = "Playback", 163 .stream_name = "Playback",
164 .channels_min = 2, 164 .channels_min = 2,
165 .channels_max = 2, 165 .channels_max = 2,
166 .rates = SNDRV_PCM_RATE_8000_192000, 166 .rates = SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 |
167 SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 |
168 SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000 |
169 SNDRV_PCM_RATE_176400 | SNDRV_PCM_RATE_192000,
167 .formats = SNDRV_PCM_FMTBIT_S16_LE | 170 .formats = SNDRV_PCM_FMTBIT_S16_LE |
168 SNDRV_PCM_FMTBIT_S24_3LE | 171 SNDRV_PCM_FMTBIT_S24_3LE |
169 SNDRV_PCM_FMTBIT_S24_LE 172 SNDRV_PCM_FMTBIT_S24_LE
@@ -245,10 +248,12 @@ static struct snd_soc_codec_driver soc_codec_device_ak4104 = {
245 .suspend = ak4104_soc_suspend, 248 .suspend = ak4104_soc_suspend,
246 .resume = ak4104_soc_resume, 249 .resume = ak4104_soc_resume,
247 250
248 .dapm_widgets = ak4104_dapm_widgets, 251 .component_driver = {
249 .num_dapm_widgets = ARRAY_SIZE(ak4104_dapm_widgets), 252 .dapm_widgets = ak4104_dapm_widgets,
250 .dapm_routes = ak4104_dapm_routes, 253 .num_dapm_widgets = ARRAY_SIZE(ak4104_dapm_widgets),
251 .num_dapm_routes = ARRAY_SIZE(ak4104_dapm_routes), 254 .dapm_routes = ak4104_dapm_routes,
255 .num_dapm_routes = ARRAY_SIZE(ak4104_dapm_routes),
256 }
252}; 257};
253 258
254static const struct regmap_config ak4104_regmap = { 259static const struct regmap_config ak4104_regmap = {
diff --git a/sound/soc/codecs/ak4535.c b/sound/soc/codecs/ak4535.c
index 54428c64387b..66cfffde9a12 100644
--- a/sound/soc/codecs/ak4535.c
+++ b/sound/soc/codecs/ak4535.c
@@ -395,12 +395,14 @@ static struct snd_soc_codec_driver soc_codec_dev_ak4535 = {
395 .set_bias_level = ak4535_set_bias_level, 395 .set_bias_level = ak4535_set_bias_level,
396 .suspend_bias_off = true, 396 .suspend_bias_off = true,
397 397
398 .controls = ak4535_snd_controls, 398 .component_driver = {
399 .num_controls = ARRAY_SIZE(ak4535_snd_controls), 399 .controls = ak4535_snd_controls,
400 .dapm_widgets = ak4535_dapm_widgets, 400 .num_controls = ARRAY_SIZE(ak4535_snd_controls),
401 .num_dapm_widgets = ARRAY_SIZE(ak4535_dapm_widgets), 401 .dapm_widgets = ak4535_dapm_widgets,
402 .dapm_routes = ak4535_audio_map, 402 .num_dapm_widgets = ARRAY_SIZE(ak4535_dapm_widgets),
403 .num_dapm_routes = ARRAY_SIZE(ak4535_audio_map), 403 .dapm_routes = ak4535_audio_map,
404 .num_dapm_routes = ARRAY_SIZE(ak4535_audio_map),
405 },
404}; 406};
405 407
406static int ak4535_i2c_probe(struct i2c_client *i2c, 408static int ak4535_i2c_probe(struct i2c_client *i2c,
diff --git a/sound/soc/codecs/ak4554.c b/sound/soc/codecs/ak4554.c
index 298dedc05140..b92c548b9d29 100644
--- a/sound/soc/codecs/ak4554.c
+++ b/sound/soc/codecs/ak4554.c
@@ -65,10 +65,12 @@ static struct snd_soc_dai_driver ak4554_dai = {
65}; 65};
66 66
67static struct snd_soc_codec_driver soc_codec_dev_ak4554 = { 67static struct snd_soc_codec_driver soc_codec_dev_ak4554 = {
68 .dapm_widgets = ak4554_dapm_widgets, 68 .component_driver = {
69 .num_dapm_widgets = ARRAY_SIZE(ak4554_dapm_widgets), 69 .dapm_widgets = ak4554_dapm_widgets,
70 .dapm_routes = ak4554_dapm_routes, 70 .num_dapm_widgets = ARRAY_SIZE(ak4554_dapm_widgets),
71 .num_dapm_routes = ARRAY_SIZE(ak4554_dapm_routes), 71 .dapm_routes = ak4554_dapm_routes,
72 .num_dapm_routes = ARRAY_SIZE(ak4554_dapm_routes),
73 },
72}; 74};
73 75
74static int ak4554_soc_probe(struct platform_device *pdev) 76static int ak4554_soc_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/ak4613.c b/sound/soc/codecs/ak4613.c
index 97798d250f08..e819dd8c82fd 100644
--- a/sound/soc/codecs/ak4613.c
+++ b/sound/soc/codecs/ak4613.c
@@ -458,12 +458,14 @@ static struct snd_soc_codec_driver soc_codec_dev_ak4613 = {
458 .suspend = ak4613_suspend, 458 .suspend = ak4613_suspend,
459 .resume = ak4613_resume, 459 .resume = ak4613_resume,
460 .set_bias_level = ak4613_set_bias_level, 460 .set_bias_level = ak4613_set_bias_level,
461 .controls = ak4613_snd_controls, 461 .component_driver = {
462 .num_controls = ARRAY_SIZE(ak4613_snd_controls), 462 .controls = ak4613_snd_controls,
463 .dapm_widgets = ak4613_dapm_widgets, 463 .num_controls = ARRAY_SIZE(ak4613_snd_controls),
464 .num_dapm_widgets = ARRAY_SIZE(ak4613_dapm_widgets), 464 .dapm_widgets = ak4613_dapm_widgets,
465 .dapm_routes = ak4613_intercon, 465 .num_dapm_widgets = ARRAY_SIZE(ak4613_dapm_widgets),
466 .num_dapm_routes = ARRAY_SIZE(ak4613_intercon), 466 .dapm_routes = ak4613_intercon,
467 .num_dapm_routes = ARRAY_SIZE(ak4613_intercon),
468 },
467}; 469};
468 470
469static void ak4613_parse_of(struct ak4613_priv *priv, 471static void ak4613_parse_of(struct ak4613_priv *priv,
diff --git a/sound/soc/codecs/ak4641.c b/sound/soc/codecs/ak4641.c
index b14176f8d884..c91717d08513 100644
--- a/sound/soc/codecs/ak4641.c
+++ b/sound/soc/codecs/ak4641.c
@@ -505,12 +505,14 @@ static struct snd_soc_dai_driver ak4641_dai[] = {
505}; 505};
506 506
507static struct snd_soc_codec_driver soc_codec_dev_ak4641 = { 507static struct snd_soc_codec_driver soc_codec_dev_ak4641 = {
508 .controls = ak4641_snd_controls, 508 .component_driver = {
509 .num_controls = ARRAY_SIZE(ak4641_snd_controls), 509 .controls = ak4641_snd_controls,
510 .dapm_widgets = ak4641_dapm_widgets, 510 .num_controls = ARRAY_SIZE(ak4641_snd_controls),
511 .num_dapm_widgets = ARRAY_SIZE(ak4641_dapm_widgets), 511 .dapm_widgets = ak4641_dapm_widgets,
512 .dapm_routes = ak4641_audio_map, 512 .num_dapm_widgets = ARRAY_SIZE(ak4641_dapm_widgets),
513 .num_dapm_routes = ARRAY_SIZE(ak4641_audio_map), 513 .dapm_routes = ak4641_audio_map,
514 .num_dapm_routes = ARRAY_SIZE(ak4641_audio_map),
515 },
514 .set_bias_level = ak4641_set_bias_level, 516 .set_bias_level = ak4641_set_bias_level,
515 .suspend_bias_off = true, 517 .suspend_bias_off = true,
516}; 518};
diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c
index cc941d66ec3d..2609f95b7d19 100644
--- a/sound/soc/codecs/ak4642.c
+++ b/sound/soc/codecs/ak4642.c
@@ -555,12 +555,14 @@ static struct snd_soc_codec_driver soc_codec_dev_ak4642 = {
555 .suspend = ak4642_suspend, 555 .suspend = ak4642_suspend,
556 .resume = ak4642_resume, 556 .resume = ak4642_resume,
557 .set_bias_level = ak4642_set_bias_level, 557 .set_bias_level = ak4642_set_bias_level,
558 .controls = ak4642_snd_controls, 558 .component_driver = {
559 .num_controls = ARRAY_SIZE(ak4642_snd_controls), 559 .controls = ak4642_snd_controls,
560 .dapm_widgets = ak4642_dapm_widgets, 560 .num_controls = ARRAY_SIZE(ak4642_snd_controls),
561 .num_dapm_widgets = ARRAY_SIZE(ak4642_dapm_widgets), 561 .dapm_widgets = ak4642_dapm_widgets,
562 .dapm_routes = ak4642_intercon, 562 .num_dapm_widgets = ARRAY_SIZE(ak4642_dapm_widgets),
563 .num_dapm_routes = ARRAY_SIZE(ak4642_intercon), 563 .dapm_routes = ak4642_intercon,
564 .num_dapm_routes = ARRAY_SIZE(ak4642_intercon),
565 },
564}; 566};
565 567
566static const struct regmap_config ak4642_regmap = { 568static const struct regmap_config ak4642_regmap = {
diff --git a/sound/soc/codecs/ak4671.c b/sound/soc/codecs/ak4671.c
index c73a9f6914b6..6088afaabf62 100644
--- a/sound/soc/codecs/ak4671.c
+++ b/sound/soc/codecs/ak4671.c
@@ -612,12 +612,14 @@ static struct snd_soc_dai_driver ak4671_dai = {
612 612
613static struct snd_soc_codec_driver soc_codec_dev_ak4671 = { 613static struct snd_soc_codec_driver soc_codec_dev_ak4671 = {
614 .set_bias_level = ak4671_set_bias_level, 614 .set_bias_level = ak4671_set_bias_level,
615 .controls = ak4671_snd_controls, 615 .component_driver = {
616 .num_controls = ARRAY_SIZE(ak4671_snd_controls), 616 .controls = ak4671_snd_controls,
617 .dapm_widgets = ak4671_dapm_widgets, 617 .num_controls = ARRAY_SIZE(ak4671_snd_controls),
618 .num_dapm_widgets = ARRAY_SIZE(ak4671_dapm_widgets), 618 .dapm_widgets = ak4671_dapm_widgets,
619 .dapm_routes = ak4671_intercon, 619 .num_dapm_widgets = ARRAY_SIZE(ak4671_dapm_widgets),
620 .num_dapm_routes = ARRAY_SIZE(ak4671_intercon), 620 .dapm_routes = ak4671_intercon,
621 .num_dapm_routes = ARRAY_SIZE(ak4671_intercon),
622 },
621}; 623};
622 624
623static const struct regmap_config ak4671_regmap = { 625static const struct regmap_config ak4671_regmap = {
diff --git a/sound/soc/codecs/ak5386.c b/sound/soc/codecs/ak5386.c
index afa95360826d..0ef2df223336 100644
--- a/sound/soc/codecs/ak5386.c
+++ b/sound/soc/codecs/ak5386.c
@@ -74,10 +74,12 @@ static struct snd_soc_codec_driver soc_codec_ak5386 = {
74 .remove = ak5386_soc_remove, 74 .remove = ak5386_soc_remove,
75 .suspend = ak5386_soc_suspend, 75 .suspend = ak5386_soc_suspend,
76 .resume = ak5386_soc_resume, 76 .resume = ak5386_soc_resume,
77 .dapm_widgets = ak5386_dapm_widgets, 77 .component_driver = {
78 .num_dapm_widgets = ARRAY_SIZE(ak5386_dapm_widgets), 78 .dapm_widgets = ak5386_dapm_widgets,
79 .dapm_routes = ak5386_dapm_routes, 79 .num_dapm_widgets = ARRAY_SIZE(ak5386_dapm_widgets),
80 .num_dapm_routes = ARRAY_SIZE(ak5386_dapm_routes), 80 .dapm_routes = ak5386_dapm_routes,
81 .num_dapm_routes = ARRAY_SIZE(ak5386_dapm_routes),
82 },
81}; 83};
82 84
83static int ak5386_set_dai_fmt(struct snd_soc_dai *codec_dai, 85static int ak5386_set_dai_fmt(struct snd_soc_dai *codec_dai,
diff --git a/sound/soc/codecs/alc5632.c b/sound/soc/codecs/alc5632.c
index 4d3ba33eb6f9..adb80d8719bd 100644
--- a/sound/soc/codecs/alc5632.c
+++ b/sound/soc/codecs/alc5632.c
@@ -1072,12 +1072,14 @@ static const struct snd_soc_codec_driver soc_codec_device_alc5632 = {
1072 .set_bias_level = alc5632_set_bias_level, 1072 .set_bias_level = alc5632_set_bias_level,
1073 .suspend_bias_off = true, 1073 .suspend_bias_off = true,
1074 1074
1075 .controls = alc5632_snd_controls, 1075 .component_driver = {
1076 .num_controls = ARRAY_SIZE(alc5632_snd_controls), 1076 .controls = alc5632_snd_controls,
1077 .dapm_widgets = alc5632_dapm_widgets, 1077 .num_controls = ARRAY_SIZE(alc5632_snd_controls),
1078 .num_dapm_widgets = ARRAY_SIZE(alc5632_dapm_widgets), 1078 .dapm_widgets = alc5632_dapm_widgets,
1079 .dapm_routes = alc5632_dapm_routes, 1079 .num_dapm_widgets = ARRAY_SIZE(alc5632_dapm_widgets),
1080 .num_dapm_routes = ARRAY_SIZE(alc5632_dapm_routes), 1080 .dapm_routes = alc5632_dapm_routes,
1081 .num_dapm_routes = ARRAY_SIZE(alc5632_dapm_routes),
1082 },
1081}; 1083};
1082 1084
1083static const struct regmap_config alc5632_regmap = { 1085static const struct regmap_config alc5632_regmap = {
diff --git a/sound/soc/codecs/arizona.c b/sound/soc/codecs/arizona.c
index ded235f3090f..846ca079845f 100644
--- a/sound/soc/codecs/arizona.c
+++ b/sound/soc/codecs/arizona.c
@@ -109,7 +109,7 @@ static int arizona_spk_ev(struct snd_soc_dapm_widget *w,
109 break; 109 break;
110 } 110 }
111 111
112 return 0; 112 return arizona_out_ev(w, kcontrol, event);
113} 113}
114 114
115static irqreturn_t arizona_thermal_warn(int irq, void *data) 115static irqreturn_t arizona_thermal_warn(int irq, void *data)
@@ -159,12 +159,14 @@ static irqreturn_t arizona_thermal_shutdown(int irq, void *data)
159static const struct snd_soc_dapm_widget arizona_spkl = 159static const struct snd_soc_dapm_widget arizona_spkl =
160 SND_SOC_DAPM_PGA_E("OUT4L", SND_SOC_NOPM, 160 SND_SOC_DAPM_PGA_E("OUT4L", SND_SOC_NOPM,
161 ARIZONA_OUT4L_ENA_SHIFT, 0, NULL, 0, arizona_spk_ev, 161 ARIZONA_OUT4L_ENA_SHIFT, 0, NULL, 0, arizona_spk_ev,
162 SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU); 162 SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
163 SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD);
163 164
164static const struct snd_soc_dapm_widget arizona_spkr = 165static const struct snd_soc_dapm_widget arizona_spkr =
165 SND_SOC_DAPM_PGA_E("OUT4R", SND_SOC_NOPM, 166 SND_SOC_DAPM_PGA_E("OUT4R", SND_SOC_NOPM,
166 ARIZONA_OUT4R_ENA_SHIFT, 0, NULL, 0, arizona_spk_ev, 167 ARIZONA_OUT4R_ENA_SHIFT, 0, NULL, 0, arizona_spk_ev,
167 SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU); 168 SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
169 SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD);
168 170
169int arizona_init_spk(struct snd_soc_codec *codec) 171int arizona_init_spk(struct snd_soc_codec *codec)
170{ 172{
@@ -864,6 +866,7 @@ int arizona_out_ev(struct snd_soc_dapm_widget *w,
864{ 866{
865 struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); 867 struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
866 struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec); 868 struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
869 struct arizona *arizona = priv->arizona;
867 870
868 switch (event) { 871 switch (event) {
869 case SND_SOC_DAPM_PRE_PMU: 872 case SND_SOC_DAPM_PRE_PMU:
@@ -877,6 +880,18 @@ int arizona_out_ev(struct snd_soc_dapm_widget *w,
877 priv->out_up_pending++; 880 priv->out_up_pending++;
878 priv->out_up_delay += 17; 881 priv->out_up_delay += 17;
879 break; 882 break;
883 case ARIZONA_OUT4L_ENA_SHIFT:
884 case ARIZONA_OUT4R_ENA_SHIFT:
885 priv->out_up_pending++;
886 switch (arizona->type) {
887 case WM5102:
888 case WM8997:
889 break;
890 default:
891 priv->out_up_delay += 10;
892 break;
893 }
894 break;
880 default: 895 default:
881 break; 896 break;
882 } 897 }
@@ -889,8 +904,12 @@ int arizona_out_ev(struct snd_soc_dapm_widget *w,
889 case ARIZONA_OUT2R_ENA_SHIFT: 904 case ARIZONA_OUT2R_ENA_SHIFT:
890 case ARIZONA_OUT3L_ENA_SHIFT: 905 case ARIZONA_OUT3L_ENA_SHIFT:
891 case ARIZONA_OUT3R_ENA_SHIFT: 906 case ARIZONA_OUT3R_ENA_SHIFT:
907 case ARIZONA_OUT4L_ENA_SHIFT:
908 case ARIZONA_OUT4R_ENA_SHIFT:
892 priv->out_up_pending--; 909 priv->out_up_pending--;
893 if (!priv->out_up_pending) { 910 if (!priv->out_up_pending && priv->out_up_delay) {
911 dev_dbg(codec->dev, "Power up delay: %d\n",
912 priv->out_up_delay);
894 msleep(priv->out_up_delay); 913 msleep(priv->out_up_delay);
895 priv->out_up_delay = 0; 914 priv->out_up_delay = 0;
896 } 915 }
@@ -911,6 +930,21 @@ int arizona_out_ev(struct snd_soc_dapm_widget *w,
911 priv->out_down_pending++; 930 priv->out_down_pending++;
912 priv->out_down_delay++; 931 priv->out_down_delay++;
913 break; 932 break;
933 case ARIZONA_OUT4L_ENA_SHIFT:
934 case ARIZONA_OUT4R_ENA_SHIFT:
935 priv->out_down_pending++;
936 switch (arizona->type) {
937 case WM5102:
938 case WM8997:
939 break;
940 case WM8998:
941 case WM1814:
942 priv->out_down_delay += 5;
943 break;
944 default:
945 priv->out_down_delay++;
946 break;
947 }
914 default: 948 default:
915 break; 949 break;
916 } 950 }
@@ -923,8 +957,12 @@ int arizona_out_ev(struct snd_soc_dapm_widget *w,
923 case ARIZONA_OUT2R_ENA_SHIFT: 957 case ARIZONA_OUT2R_ENA_SHIFT:
924 case ARIZONA_OUT3L_ENA_SHIFT: 958 case ARIZONA_OUT3L_ENA_SHIFT:
925 case ARIZONA_OUT3R_ENA_SHIFT: 959 case ARIZONA_OUT3R_ENA_SHIFT:
960 case ARIZONA_OUT4L_ENA_SHIFT:
961 case ARIZONA_OUT4R_ENA_SHIFT:
926 priv->out_down_pending--; 962 priv->out_down_pending--;
927 if (!priv->out_down_pending) { 963 if (!priv->out_down_pending && priv->out_down_delay) {
964 dev_dbg(codec->dev, "Power down delay: %d\n",
965 priv->out_down_delay);
928 msleep(priv->out_down_delay); 966 msleep(priv->out_down_delay);
929 priv->out_down_delay = 0; 967 priv->out_down_delay = 0;
930 } 968 }
@@ -2188,13 +2226,13 @@ static void arizona_apply_fll(struct arizona *arizona, unsigned int base,
2188 ARIZONA_FLL1_CTRL_UPD | cfg->n); 2226 ARIZONA_FLL1_CTRL_UPD | cfg->n);
2189} 2227}
2190 2228
2191static int arizona_is_enabled_fll(struct arizona_fll *fll) 2229static int arizona_is_enabled_fll(struct arizona_fll *fll, int base)
2192{ 2230{
2193 struct arizona *arizona = fll->arizona; 2231 struct arizona *arizona = fll->arizona;
2194 unsigned int reg; 2232 unsigned int reg;
2195 int ret; 2233 int ret;
2196 2234
2197 ret = regmap_read(arizona->regmap, fll->base + 1, &reg); 2235 ret = regmap_read(arizona->regmap, base + 1, &reg);
2198 if (ret != 0) { 2236 if (ret != 0) {
2199 arizona_fll_err(fll, "Failed to read current state: %d\n", 2237 arizona_fll_err(fll, "Failed to read current state: %d\n",
2200 ret); 2238 ret);
@@ -2208,13 +2246,16 @@ static int arizona_enable_fll(struct arizona_fll *fll)
2208{ 2246{
2209 struct arizona *arizona = fll->arizona; 2247 struct arizona *arizona = fll->arizona;
2210 bool use_sync = false; 2248 bool use_sync = false;
2211 int already_enabled = arizona_is_enabled_fll(fll); 2249 int already_enabled = arizona_is_enabled_fll(fll, fll->base);
2250 int sync_enabled = arizona_is_enabled_fll(fll, fll->base + 0x10);
2212 struct arizona_fll_cfg cfg; 2251 struct arizona_fll_cfg cfg;
2213 int i; 2252 int i;
2214 unsigned int val; 2253 unsigned int val;
2215 2254
2216 if (already_enabled < 0) 2255 if (already_enabled < 0)
2217 return already_enabled; 2256 return already_enabled;
2257 if (sync_enabled < 0)
2258 return sync_enabled;
2218 2259
2219 if (already_enabled) { 2260 if (already_enabled) {
2220 /* Facilitate smooth refclk across the transition */ 2261 /* Facilitate smooth refclk across the transition */
@@ -2259,6 +2300,9 @@ static int arizona_enable_fll(struct arizona_fll *fll)
2259 return -EINVAL; 2300 return -EINVAL;
2260 } 2301 }
2261 2302
2303 if (already_enabled && !!sync_enabled != use_sync)
2304 arizona_fll_warn(fll, "Synchroniser changed on active FLL\n");
2305
2262 /* 2306 /*
2263 * Increase the bandwidth if we're not using a low frequency 2307 * Increase the bandwidth if we're not using a low frequency
2264 * sync source. 2308 * sync source.
@@ -2274,12 +2318,12 @@ static int arizona_enable_fll(struct arizona_fll *fll)
2274 if (!already_enabled) 2318 if (!already_enabled)
2275 pm_runtime_get_sync(arizona->dev); 2319 pm_runtime_get_sync(arizona->dev);
2276 2320
2277 regmap_update_bits_async(arizona->regmap, fll->base + 1,
2278 ARIZONA_FLL1_ENA, ARIZONA_FLL1_ENA);
2279 if (use_sync) 2321 if (use_sync)
2280 regmap_update_bits_async(arizona->regmap, fll->base + 0x11, 2322 regmap_update_bits_async(arizona->regmap, fll->base + 0x11,
2281 ARIZONA_FLL1_SYNC_ENA, 2323 ARIZONA_FLL1_SYNC_ENA,
2282 ARIZONA_FLL1_SYNC_ENA); 2324 ARIZONA_FLL1_SYNC_ENA);
2325 regmap_update_bits_async(arizona->regmap, fll->base + 1,
2326 ARIZONA_FLL1_ENA, ARIZONA_FLL1_ENA);
2283 2327
2284 if (already_enabled) 2328 if (already_enabled)
2285 regmap_update_bits_async(arizona->regmap, fll->base + 1, 2329 regmap_update_bits_async(arizona->regmap, fll->base + 1,
diff --git a/sound/soc/codecs/arizona.h b/sound/soc/codecs/arizona.h
index 69da1ef3a17c..850aa338ba29 100644
--- a/sound/soc/codecs/arizona.h
+++ b/sound/soc/codecs/arizona.h
@@ -190,20 +190,21 @@ extern unsigned int arizona_mixer_values[ARIZONA_NUM_MIXER_INPUTS];
190 190
191#define ARIZONA_DSP_ROUTES(name) \ 191#define ARIZONA_DSP_ROUTES(name) \
192 { name, NULL, name " Preloader"}, \ 192 { name, NULL, name " Preloader"}, \
193 { name " Preloader", NULL, name " Aux 1" }, \ 193 { name " Preloader", NULL, "SYSCLK" }, \
194 { name " Preloader", NULL, name " Aux 2" }, \ 194 { name, NULL, name " Aux 1" }, \
195 { name " Preloader", NULL, name " Aux 3" }, \ 195 { name, NULL, name " Aux 2" }, \
196 { name " Preloader", NULL, name " Aux 4" }, \ 196 { name, NULL, name " Aux 3" }, \
197 { name " Preloader", NULL, name " Aux 5" }, \ 197 { name, NULL, name " Aux 4" }, \
198 { name " Preloader", NULL, name " Aux 6" }, \ 198 { name, NULL, name " Aux 5" }, \
199 { name, NULL, name " Aux 6" }, \
199 ARIZONA_MIXER_INPUT_ROUTES(name " Aux 1"), \ 200 ARIZONA_MIXER_INPUT_ROUTES(name " Aux 1"), \
200 ARIZONA_MIXER_INPUT_ROUTES(name " Aux 2"), \ 201 ARIZONA_MIXER_INPUT_ROUTES(name " Aux 2"), \
201 ARIZONA_MIXER_INPUT_ROUTES(name " Aux 3"), \ 202 ARIZONA_MIXER_INPUT_ROUTES(name " Aux 3"), \
202 ARIZONA_MIXER_INPUT_ROUTES(name " Aux 4"), \ 203 ARIZONA_MIXER_INPUT_ROUTES(name " Aux 4"), \
203 ARIZONA_MIXER_INPUT_ROUTES(name " Aux 5"), \ 204 ARIZONA_MIXER_INPUT_ROUTES(name " Aux 5"), \
204 ARIZONA_MIXER_INPUT_ROUTES(name " Aux 6"), \ 205 ARIZONA_MIXER_INPUT_ROUTES(name " Aux 6"), \
205 ARIZONA_MIXER_ROUTES(name " Preloader", name "L"), \ 206 ARIZONA_MIXER_ROUTES(name, name "L"), \
206 ARIZONA_MIXER_ROUTES(name " Preloader", name "R") 207 ARIZONA_MIXER_ROUTES(name, name "R")
207 208
208#define ARIZONA_EQ_CONTROL(xname, xbase) \ 209#define ARIZONA_EQ_CONTROL(xname, xbase) \
209{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ 210{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
diff --git a/sound/soc/codecs/bt-sco.c b/sound/soc/codecs/bt-sco.c
index 2a8d0ee141d4..8014e697d540 100644
--- a/sound/soc/codecs/bt-sco.c
+++ b/sound/soc/codecs/bt-sco.c
@@ -63,10 +63,12 @@ static struct snd_soc_dai_driver bt_sco_dai[] = {
63}; 63};
64 64
65static struct snd_soc_codec_driver soc_codec_dev_bt_sco = { 65static struct snd_soc_codec_driver soc_codec_dev_bt_sco = {
66 .dapm_widgets = bt_sco_widgets, 66 .component_driver = {
67 .num_dapm_widgets = ARRAY_SIZE(bt_sco_widgets), 67 .dapm_widgets = bt_sco_widgets,
68 .dapm_routes = bt_sco_routes, 68 .num_dapm_widgets = ARRAY_SIZE(bt_sco_widgets),
69 .num_dapm_routes = ARRAY_SIZE(bt_sco_routes), 69 .dapm_routes = bt_sco_routes,
70 .num_dapm_routes = ARRAY_SIZE(bt_sco_routes),
71 },
70}; 72};
71 73
72static int bt_sco_probe(struct platform_device *pdev) 74static int bt_sco_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/cq93vc.c b/sound/soc/codecs/cq93vc.c
index 1c895a53001d..7a2d9a2ee427 100644
--- a/sound/soc/codecs/cq93vc.c
+++ b/sound/soc/codecs/cq93vc.c
@@ -131,8 +131,10 @@ static struct regmap *cq93vc_get_regmap(struct device *dev)
131static struct snd_soc_codec_driver soc_codec_dev_cq93vc = { 131static struct snd_soc_codec_driver soc_codec_dev_cq93vc = {
132 .set_bias_level = cq93vc_set_bias_level, 132 .set_bias_level = cq93vc_set_bias_level,
133 .get_regmap = cq93vc_get_regmap, 133 .get_regmap = cq93vc_get_regmap,
134 .controls = cq93vc_snd_controls, 134 .component_driver = {
135 .num_controls = ARRAY_SIZE(cq93vc_snd_controls), 135 .controls = cq93vc_snd_controls,
136 .num_controls = ARRAY_SIZE(cq93vc_snd_controls),
137 },
136}; 138};
137 139
138static int cq93vc_platform_probe(struct platform_device *pdev) 140static int cq93vc_platform_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/cs35l32.c b/sound/soc/codecs/cs35l32.c
index 287d13740be4..7e9806206648 100644
--- a/sound/soc/codecs/cs35l32.c
+++ b/sound/soc/codecs/cs35l32.c
@@ -231,13 +231,14 @@ static int cs35l32_codec_set_sysclk(struct snd_soc_codec *codec,
231static const struct snd_soc_codec_driver soc_codec_dev_cs35l32 = { 231static const struct snd_soc_codec_driver soc_codec_dev_cs35l32 = {
232 .set_sysclk = cs35l32_codec_set_sysclk, 232 .set_sysclk = cs35l32_codec_set_sysclk,
233 233
234 .dapm_widgets = cs35l32_dapm_widgets, 234 .component_driver = {
235 .num_dapm_widgets = ARRAY_SIZE(cs35l32_dapm_widgets), 235 .controls = cs35l32_snd_controls,
236 .dapm_routes = cs35l32_audio_map, 236 .num_controls = ARRAY_SIZE(cs35l32_snd_controls),
237 .num_dapm_routes = ARRAY_SIZE(cs35l32_audio_map), 237 .dapm_widgets = cs35l32_dapm_widgets,
238 238 .num_dapm_widgets = ARRAY_SIZE(cs35l32_dapm_widgets),
239 .controls = cs35l32_snd_controls, 239 .dapm_routes = cs35l32_audio_map,
240 .num_controls = ARRAY_SIZE(cs35l32_snd_controls), 240 .num_dapm_routes = ARRAY_SIZE(cs35l32_audio_map),
241 },
241}; 242};
242 243
243/* Current and threshold powerup sequence Pg37 in datasheet */ 244/* Current and threshold powerup sequence Pg37 in datasheet */
diff --git a/sound/soc/codecs/cs35l33.c b/sound/soc/codecs/cs35l33.c
index 6f9c1addcd7f..6df29fa30fb9 100644
--- a/sound/soc/codecs/cs35l33.c
+++ b/sound/soc/codecs/cs35l33.c
@@ -837,13 +837,14 @@ static struct snd_soc_codec_driver soc_codec_dev_cs35l33 = {
837 .set_bias_level = cs35l33_set_bias_level, 837 .set_bias_level = cs35l33_set_bias_level,
838 .set_sysclk = cs35l33_codec_set_sysclk, 838 .set_sysclk = cs35l33_codec_set_sysclk,
839 839
840 .dapm_widgets = cs35l33_dapm_widgets, 840 .component_driver = {
841 .num_dapm_widgets = ARRAY_SIZE(cs35l33_dapm_widgets), 841 .controls = cs35l33_snd_controls,
842 .dapm_routes = cs35l33_audio_map, 842 .num_controls = ARRAY_SIZE(cs35l33_snd_controls),
843 .num_dapm_routes = ARRAY_SIZE(cs35l33_audio_map), 843 .dapm_widgets = cs35l33_dapm_widgets,
844 .controls = cs35l33_snd_controls, 844 .num_dapm_widgets = ARRAY_SIZE(cs35l33_dapm_widgets),
845 .num_controls = ARRAY_SIZE(cs35l33_snd_controls), 845 .dapm_routes = cs35l33_audio_map,
846 846 .num_dapm_routes = ARRAY_SIZE(cs35l33_audio_map),
847 },
847 .idle_bias_off = true, 848 .idle_bias_off = true,
848}; 849};
849 850
diff --git a/sound/soc/codecs/cs4265.c b/sound/soc/codecs/cs4265.c
index 55db19ddc5ff..fd966bb851cb 100644
--- a/sound/soc/codecs/cs4265.c
+++ b/sound/soc/codecs/cs4265.c
@@ -547,13 +547,14 @@ static struct snd_soc_dai_driver cs4265_dai[] = {
547static const struct snd_soc_codec_driver soc_codec_cs4265 = { 547static const struct snd_soc_codec_driver soc_codec_cs4265 = {
548 .set_bias_level = cs4265_set_bias_level, 548 .set_bias_level = cs4265_set_bias_level,
549 549
550 .dapm_widgets = cs4265_dapm_widgets, 550 .component_driver = {
551 .num_dapm_widgets = ARRAY_SIZE(cs4265_dapm_widgets), 551 .controls = cs4265_snd_controls,
552 .dapm_routes = cs4265_audio_map, 552 .num_controls = ARRAY_SIZE(cs4265_snd_controls),
553 .num_dapm_routes = ARRAY_SIZE(cs4265_audio_map), 553 .dapm_widgets = cs4265_dapm_widgets,
554 554 .num_dapm_widgets = ARRAY_SIZE(cs4265_dapm_widgets),
555 .controls = cs4265_snd_controls, 555 .dapm_routes = cs4265_audio_map,
556 .num_controls = ARRAY_SIZE(cs4265_snd_controls), 556 .num_dapm_routes = ARRAY_SIZE(cs4265_audio_map),
557 },
557}; 558};
558 559
559static const struct regmap_config cs4265_regmap = { 560static const struct regmap_config cs4265_regmap = {
diff --git a/sound/soc/codecs/cs4270.c b/sound/soc/codecs/cs4270.c
index e07807d96b68..18baea2f7d65 100644
--- a/sound/soc/codecs/cs4270.c
+++ b/sound/soc/codecs/cs4270.c
@@ -617,12 +617,14 @@ static const struct snd_soc_codec_driver soc_codec_device_cs4270 = {
617 .suspend = cs4270_soc_suspend, 617 .suspend = cs4270_soc_suspend,
618 .resume = cs4270_soc_resume, 618 .resume = cs4270_soc_resume,
619 619
620 .controls = cs4270_snd_controls, 620 .component_driver = {
621 .num_controls = ARRAY_SIZE(cs4270_snd_controls), 621 .controls = cs4270_snd_controls,
622 .dapm_widgets = cs4270_dapm_widgets, 622 .num_controls = ARRAY_SIZE(cs4270_snd_controls),
623 .num_dapm_widgets = ARRAY_SIZE(cs4270_dapm_widgets), 623 .dapm_widgets = cs4270_dapm_widgets,
624 .dapm_routes = cs4270_dapm_routes, 624 .num_dapm_widgets = ARRAY_SIZE(cs4270_dapm_widgets),
625 .num_dapm_routes = ARRAY_SIZE(cs4270_dapm_routes), 625 .dapm_routes = cs4270_dapm_routes,
626 .num_dapm_routes = ARRAY_SIZE(cs4270_dapm_routes),
627 },
626}; 628};
627 629
628/* 630/*
diff --git a/sound/soc/codecs/cs4271.c b/sound/soc/codecs/cs4271.c
index 0c0010b25421..8c0f3b89b5bc 100644
--- a/sound/soc/codecs/cs4271.c
+++ b/sound/soc/codecs/cs4271.c
@@ -645,12 +645,14 @@ static struct snd_soc_codec_driver soc_codec_dev_cs4271 = {
645 .suspend = cs4271_soc_suspend, 645 .suspend = cs4271_soc_suspend,
646 .resume = cs4271_soc_resume, 646 .resume = cs4271_soc_resume,
647 647
648 .controls = cs4271_snd_controls, 648 .component_driver = {
649 .num_controls = ARRAY_SIZE(cs4271_snd_controls), 649 .controls = cs4271_snd_controls,
650 .dapm_widgets = cs4271_dapm_widgets, 650 .num_controls = ARRAY_SIZE(cs4271_snd_controls),
651 .num_dapm_widgets = ARRAY_SIZE(cs4271_dapm_widgets), 651 .dapm_widgets = cs4271_dapm_widgets,
652 .dapm_routes = cs4271_dapm_routes, 652 .num_dapm_widgets = ARRAY_SIZE(cs4271_dapm_widgets),
653 .num_dapm_routes = ARRAY_SIZE(cs4271_dapm_routes), 653 .dapm_routes = cs4271_dapm_routes,
654 .num_dapm_routes = ARRAY_SIZE(cs4271_dapm_routes),
655 },
654}; 656};
655 657
656static int cs4271_common_probe(struct device *dev, 658static int cs4271_common_probe(struct device *dev,
diff --git a/sound/soc/codecs/cs42l51.c b/sound/soc/codecs/cs42l51.c
index 35488f14e237..96cfe38943cd 100644
--- a/sound/soc/codecs/cs42l51.c
+++ b/sound/soc/codecs/cs42l51.c
@@ -507,12 +507,14 @@ static int cs42l51_codec_probe(struct snd_soc_codec *codec)
507static struct snd_soc_codec_driver soc_codec_device_cs42l51 = { 507static struct snd_soc_codec_driver soc_codec_device_cs42l51 = {
508 .probe = cs42l51_codec_probe, 508 .probe = cs42l51_codec_probe,
509 509
510 .controls = cs42l51_snd_controls, 510 .component_driver = {
511 .num_controls = ARRAY_SIZE(cs42l51_snd_controls), 511 .controls = cs42l51_snd_controls,
512 .dapm_widgets = cs42l51_dapm_widgets, 512 .num_controls = ARRAY_SIZE(cs42l51_snd_controls),
513 .num_dapm_widgets = ARRAY_SIZE(cs42l51_dapm_widgets), 513 .dapm_widgets = cs42l51_dapm_widgets,
514 .dapm_routes = cs42l51_routes, 514 .num_dapm_widgets = ARRAY_SIZE(cs42l51_dapm_widgets),
515 .num_dapm_routes = ARRAY_SIZE(cs42l51_routes), 515 .dapm_routes = cs42l51_routes,
516 .num_dapm_routes = ARRAY_SIZE(cs42l51_routes),
517 },
516}; 518};
517 519
518const struct regmap_config cs42l51_regmap = { 520const struct regmap_config cs42l51_regmap = {
diff --git a/sound/soc/codecs/cs42l52.c b/sound/soc/codecs/cs42l52.c
index 47b97fcefb0b..0d9c4a57301b 100644
--- a/sound/soc/codecs/cs42l52.c
+++ b/sound/soc/codecs/cs42l52.c
@@ -1056,13 +1056,14 @@ static const struct snd_soc_codec_driver soc_codec_dev_cs42l52 = {
1056 .set_bias_level = cs42l52_set_bias_level, 1056 .set_bias_level = cs42l52_set_bias_level,
1057 .suspend_bias_off = true, 1057 .suspend_bias_off = true,
1058 1058
1059 .dapm_widgets = cs42l52_dapm_widgets, 1059 .component_driver = {
1060 .num_dapm_widgets = ARRAY_SIZE(cs42l52_dapm_widgets), 1060 .controls = cs42l52_snd_controls,
1061 .dapm_routes = cs42l52_audio_map, 1061 .num_controls = ARRAY_SIZE(cs42l52_snd_controls),
1062 .num_dapm_routes = ARRAY_SIZE(cs42l52_audio_map), 1062 .dapm_widgets = cs42l52_dapm_widgets,
1063 1063 .num_dapm_widgets = ARRAY_SIZE(cs42l52_dapm_widgets),
1064 .controls = cs42l52_snd_controls, 1064 .dapm_routes = cs42l52_audio_map,
1065 .num_controls = ARRAY_SIZE(cs42l52_snd_controls), 1065 .num_dapm_routes = ARRAY_SIZE(cs42l52_audio_map),
1066 },
1066}; 1067};
1067 1068
1068/* Current and threshold powerup sequence Pg37 */ 1069/* Current and threshold powerup sequence Pg37 */
diff --git a/sound/soc/codecs/cs42l56.c b/sound/soc/codecs/cs42l56.c
index eec1ff853b98..54c1768bc818 100644
--- a/sound/soc/codecs/cs42l56.c
+++ b/sound/soc/codecs/cs42l56.c
@@ -1121,13 +1121,14 @@ static const struct snd_soc_codec_driver soc_codec_dev_cs42l56 = {
1121 .set_bias_level = cs42l56_set_bias_level, 1121 .set_bias_level = cs42l56_set_bias_level,
1122 .suspend_bias_off = true, 1122 .suspend_bias_off = true,
1123 1123
1124 .dapm_widgets = cs42l56_dapm_widgets, 1124 .component_driver = {
1125 .num_dapm_widgets = ARRAY_SIZE(cs42l56_dapm_widgets), 1125 .controls = cs42l56_snd_controls,
1126 .dapm_routes = cs42l56_audio_map, 1126 .num_controls = ARRAY_SIZE(cs42l56_snd_controls),
1127 .num_dapm_routes = ARRAY_SIZE(cs42l56_audio_map), 1127 .dapm_widgets = cs42l56_dapm_widgets,
1128 1128 .num_dapm_widgets = ARRAY_SIZE(cs42l56_dapm_widgets),
1129 .controls = cs42l56_snd_controls, 1129 .dapm_routes = cs42l56_audio_map,
1130 .num_controls = ARRAY_SIZE(cs42l56_snd_controls), 1130 .num_dapm_routes = ARRAY_SIZE(cs42l56_audio_map),
1131 },
1131}; 1132};
1132 1133
1133static const struct regmap_config cs42l56_regmap = { 1134static const struct regmap_config cs42l56_regmap = {
diff --git a/sound/soc/codecs/cs42l73.c b/sound/soc/codecs/cs42l73.c
index 42a8fd4e1f9b..01b573ab7036 100644
--- a/sound/soc/codecs/cs42l73.c
+++ b/sound/soc/codecs/cs42l73.c
@@ -1257,13 +1257,14 @@ static const struct snd_soc_codec_driver soc_codec_dev_cs42l73 = {
1257 .set_bias_level = cs42l73_set_bias_level, 1257 .set_bias_level = cs42l73_set_bias_level,
1258 .suspend_bias_off = true, 1258 .suspend_bias_off = true,
1259 1259
1260 .dapm_widgets = cs42l73_dapm_widgets, 1260 .component_driver = {
1261 .num_dapm_widgets = ARRAY_SIZE(cs42l73_dapm_widgets), 1261 .controls = cs42l73_snd_controls,
1262 .dapm_routes = cs42l73_audio_map, 1262 .num_controls = ARRAY_SIZE(cs42l73_snd_controls),
1263 .num_dapm_routes = ARRAY_SIZE(cs42l73_audio_map), 1263 .dapm_widgets = cs42l73_dapm_widgets,
1264 1264 .num_dapm_widgets = ARRAY_SIZE(cs42l73_dapm_widgets),
1265 .controls = cs42l73_snd_controls, 1265 .dapm_routes = cs42l73_audio_map,
1266 .num_controls = ARRAY_SIZE(cs42l73_snd_controls), 1266 .num_dapm_routes = ARRAY_SIZE(cs42l73_audio_map),
1267 },
1267}; 1268};
1268 1269
1269static const struct regmap_config cs42l73_regmap = { 1270static const struct regmap_config cs42l73_regmap = {
diff --git a/sound/soc/codecs/cs42xx8.c b/sound/soc/codecs/cs42xx8.c
index 1179101b2b05..b4d87379d2bc 100644
--- a/sound/soc/codecs/cs42xx8.c
+++ b/sound/soc/codecs/cs42xx8.c
@@ -411,12 +411,14 @@ static const struct snd_soc_codec_driver cs42xx8_driver = {
411 .probe = cs42xx8_codec_probe, 411 .probe = cs42xx8_codec_probe,
412 .idle_bias_off = true, 412 .idle_bias_off = true,
413 413
414 .controls = cs42xx8_snd_controls, 414 .component_driver = {
415 .num_controls = ARRAY_SIZE(cs42xx8_snd_controls), 415 .controls = cs42xx8_snd_controls,
416 .dapm_widgets = cs42xx8_dapm_widgets, 416 .num_controls = ARRAY_SIZE(cs42xx8_snd_controls),
417 .num_dapm_widgets = ARRAY_SIZE(cs42xx8_dapm_widgets), 417 .dapm_widgets = cs42xx8_dapm_widgets,
418 .dapm_routes = cs42xx8_dapm_routes, 418 .num_dapm_widgets = ARRAY_SIZE(cs42xx8_dapm_widgets),
419 .num_dapm_routes = ARRAY_SIZE(cs42xx8_dapm_routes), 419 .dapm_routes = cs42xx8_dapm_routes,
420 .num_dapm_routes = ARRAY_SIZE(cs42xx8_dapm_routes),
421 },
420}; 422};
421 423
422const struct cs42xx8_driver_data cs42448_data = { 424const struct cs42xx8_driver_data cs42448_data = {
diff --git a/sound/soc/codecs/cs4349.c b/sound/soc/codecs/cs4349.c
index 0ac8fc5ed4ae..231ca935cdf3 100644
--- a/sound/soc/codecs/cs4349.c
+++ b/sound/soc/codecs/cs4349.c
@@ -256,13 +256,14 @@ static struct snd_soc_dai_driver cs4349_dai = {
256}; 256};
257 257
258static struct snd_soc_codec_driver soc_codec_dev_cs4349 = { 258static struct snd_soc_codec_driver soc_codec_dev_cs4349 = {
259 .controls = cs4349_snd_controls, 259 .component_driver = {
260 .num_controls = ARRAY_SIZE(cs4349_snd_controls), 260 .controls = cs4349_snd_controls,
261 261 .num_controls = ARRAY_SIZE(cs4349_snd_controls),
262 .dapm_widgets = cs4349_dapm_widgets, 262 .dapm_widgets = cs4349_dapm_widgets,
263 .num_dapm_widgets = ARRAY_SIZE(cs4349_dapm_widgets), 263 .num_dapm_widgets = ARRAY_SIZE(cs4349_dapm_widgets),
264 .dapm_routes = cs4349_routes, 264 .dapm_routes = cs4349_routes,
265 .num_dapm_routes = ARRAY_SIZE(cs4349_routes), 265 .num_dapm_routes = ARRAY_SIZE(cs4349_routes),
266 },
266}; 267};
267 268
268static const struct regmap_config cs4349_regmap = { 269static const struct regmap_config cs4349_regmap = {
diff --git a/sound/soc/codecs/cs47l24.c b/sound/soc/codecs/cs47l24.c
index 954a4f5d3338..5b22564f037c 100644
--- a/sound/soc/codecs/cs47l24.c
+++ b/sound/soc/codecs/cs47l24.c
@@ -746,6 +746,16 @@ static const struct snd_soc_dapm_route cs47l24_dapm_routes[] = {
746 { "IN2L", NULL, "SYSCLK" }, 746 { "IN2L", NULL, "SYSCLK" },
747 { "IN2R", NULL, "SYSCLK" }, 747 { "IN2R", NULL, "SYSCLK" },
748 748
749 { "ASRC1L", NULL, "SYSCLK" },
750 { "ASRC1R", NULL, "SYSCLK" },
751 { "ASRC2L", NULL, "SYSCLK" },
752 { "ASRC2R", NULL, "SYSCLK" },
753
754 { "ASRC1L", NULL, "ASYNCCLK" },
755 { "ASRC1R", NULL, "ASYNCCLK" },
756 { "ASRC2L", NULL, "ASYNCCLK" },
757 { "ASRC2R", NULL, "ASYNCCLK" },
758
749 { "MICBIAS1", NULL, "MICVDD" }, 759 { "MICBIAS1", NULL, "MICVDD" },
750 { "MICBIAS2", NULL, "MICVDD" }, 760 { "MICBIAS2", NULL, "MICVDD" },
751 761
@@ -804,7 +814,6 @@ static const struct snd_soc_dapm_route cs47l24_dapm_routes[] = {
804 { "AIF3 Capture", NULL, "SYSCLK" }, 814 { "AIF3 Capture", NULL, "SYSCLK" },
805 815
806 { "Voice Control DSP", NULL, "DSP3" }, 816 { "Voice Control DSP", NULL, "DSP3" },
807 { "Voice Control DSP", NULL, "SYSCLK" },
808 817
809 { "IN1L PGA", NULL, "IN1L" }, 818 { "IN1L PGA", NULL, "IN1L" },
810 { "IN1R PGA", NULL, "IN1R" }, 819 { "IN1R PGA", NULL, "IN1R" },
@@ -813,7 +822,6 @@ static const struct snd_soc_dapm_route cs47l24_dapm_routes[] = {
813 { "IN2R PGA", NULL, "IN2R" }, 822 { "IN2R PGA", NULL, "IN2R" },
814 823
815 { "Audio Trace DSP", NULL, "DSP2" }, 824 { "Audio Trace DSP", NULL, "DSP2" },
816 { "Audio Trace DSP", NULL, "SYSCLK" },
817 825
818 ARIZONA_MIXER_ROUTES("OUT1L", "HPOUT1L"), 826 ARIZONA_MIXER_ROUTES("OUT1L", "HPOUT1L"),
819 ARIZONA_MIXER_ROUTES("OUT1R", "HPOUT1R"), 827 ARIZONA_MIXER_ROUTES("OUT1R", "HPOUT1R"),
@@ -1190,12 +1198,14 @@ static struct snd_soc_codec_driver soc_codec_dev_cs47l24 = {
1190 .set_sysclk = arizona_set_sysclk, 1198 .set_sysclk = arizona_set_sysclk,
1191 .set_pll = cs47l24_set_fll, 1199 .set_pll = cs47l24_set_fll,
1192 1200
1193 .controls = cs47l24_snd_controls, 1201 .component_driver = {
1194 .num_controls = ARRAY_SIZE(cs47l24_snd_controls), 1202 .controls = cs47l24_snd_controls,
1195 .dapm_widgets = cs47l24_dapm_widgets, 1203 .num_controls = ARRAY_SIZE(cs47l24_snd_controls),
1196 .num_dapm_widgets = ARRAY_SIZE(cs47l24_dapm_widgets), 1204 .dapm_widgets = cs47l24_dapm_widgets,
1197 .dapm_routes = cs47l24_dapm_routes, 1205 .num_dapm_widgets = ARRAY_SIZE(cs47l24_dapm_widgets),
1198 .num_dapm_routes = ARRAY_SIZE(cs47l24_dapm_routes), 1206 .dapm_routes = cs47l24_dapm_routes,
1207 .num_dapm_routes = ARRAY_SIZE(cs47l24_dapm_routes),
1208 },
1199}; 1209};
1200 1210
1201static struct snd_compr_ops cs47l24_compr_ops = { 1211static struct snd_compr_ops cs47l24_compr_ops = {
diff --git a/sound/soc/codecs/cs53l30.c b/sound/soc/codecs/cs53l30.c
index 2c0d9c430a8c..e244e08b7da1 100644
--- a/sound/soc/codecs/cs53l30.c
+++ b/sound/soc/codecs/cs53l30.c
@@ -897,13 +897,14 @@ static struct snd_soc_codec_driver cs53l30_driver = {
897 .set_bias_level = cs53l30_set_bias_level, 897 .set_bias_level = cs53l30_set_bias_level,
898 .idle_bias_off = true, 898 .idle_bias_off = true,
899 899
900 .dapm_widgets = cs53l30_dapm_widgets, 900 .component_driver = {
901 .num_dapm_widgets = ARRAY_SIZE(cs53l30_dapm_widgets), 901 .controls = cs53l30_snd_controls,
902 .dapm_routes = cs53l30_dapm_routes, 902 .num_controls = ARRAY_SIZE(cs53l30_snd_controls),
903 .num_dapm_routes = ARRAY_SIZE(cs53l30_dapm_routes), 903 .dapm_widgets = cs53l30_dapm_widgets,
904 904 .num_dapm_widgets = ARRAY_SIZE(cs53l30_dapm_widgets),
905 .controls = cs53l30_snd_controls, 905 .dapm_routes = cs53l30_dapm_routes,
906 .num_controls = ARRAY_SIZE(cs53l30_snd_controls), 906 .num_dapm_routes = ARRAY_SIZE(cs53l30_dapm_routes),
907 },
907}; 908};
908 909
909static struct regmap_config cs53l30_regmap = { 910static struct regmap_config cs53l30_regmap = {
diff --git a/sound/soc/codecs/cx20442.c b/sound/soc/codecs/cx20442.c
index fb3885fe0afb..2c12471e42a6 100644
--- a/sound/soc/codecs/cx20442.c
+++ b/sound/soc/codecs/cx20442.c
@@ -407,10 +407,12 @@ static struct snd_soc_codec_driver cx20442_codec_dev = {
407 .reg_word_size = sizeof(u8), 407 .reg_word_size = sizeof(u8),
408 .read = cx20442_read_reg_cache, 408 .read = cx20442_read_reg_cache,
409 .write = cx20442_write, 409 .write = cx20442_write,
410 .dapm_widgets = cx20442_dapm_widgets, 410 .component_driver = {
411 .num_dapm_widgets = ARRAY_SIZE(cx20442_dapm_widgets), 411 .dapm_widgets = cx20442_dapm_widgets,
412 .dapm_routes = cx20442_audio_map, 412 .num_dapm_widgets = ARRAY_SIZE(cx20442_dapm_widgets),
413 .num_dapm_routes = ARRAY_SIZE(cx20442_audio_map), 413 .dapm_routes = cx20442_audio_map,
414 .num_dapm_routes = ARRAY_SIZE(cx20442_audio_map),
415 },
414}; 416};
415 417
416static int cx20442_platform_probe(struct platform_device *pdev) 418static int cx20442_platform_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/da7210.c b/sound/soc/codecs/da7210.c
index af23a61b7b28..17053dfc94cf 100644
--- a/sound/soc/codecs/da7210.c
+++ b/sound/soc/codecs/da7210.c
@@ -1167,13 +1167,14 @@ static int da7210_probe(struct snd_soc_codec *codec)
1167static struct snd_soc_codec_driver soc_codec_dev_da7210 = { 1167static struct snd_soc_codec_driver soc_codec_dev_da7210 = {
1168 .probe = da7210_probe, 1168 .probe = da7210_probe,
1169 1169
1170 .controls = da7210_snd_controls, 1170 .component_driver = {
1171 .num_controls = ARRAY_SIZE(da7210_snd_controls), 1171 .controls = da7210_snd_controls,
1172 1172 .num_controls = ARRAY_SIZE(da7210_snd_controls),
1173 .dapm_widgets = da7210_dapm_widgets, 1173 .dapm_widgets = da7210_dapm_widgets,
1174 .num_dapm_widgets = ARRAY_SIZE(da7210_dapm_widgets), 1174 .num_dapm_widgets = ARRAY_SIZE(da7210_dapm_widgets),
1175 .dapm_routes = da7210_audio_map, 1175 .dapm_routes = da7210_audio_map,
1176 .num_dapm_routes = ARRAY_SIZE(da7210_audio_map), 1176 .num_dapm_routes = ARRAY_SIZE(da7210_audio_map),
1177 },
1177}; 1178};
1178 1179
1179#if IS_ENABLED(CONFIG_I2C) 1180#if IS_ENABLED(CONFIG_I2C)
diff --git a/sound/soc/codecs/da7213.c b/sound/soc/codecs/da7213.c
index bcf1834c5648..fb9b2af44bc4 100644
--- a/sound/soc/codecs/da7213.c
+++ b/sound/soc/codecs/da7213.c
@@ -1740,13 +1740,14 @@ static struct snd_soc_codec_driver soc_codec_dev_da7213 = {
1740 .probe = da7213_probe, 1740 .probe = da7213_probe,
1741 .set_bias_level = da7213_set_bias_level, 1741 .set_bias_level = da7213_set_bias_level,
1742 1742
1743 .controls = da7213_snd_controls, 1743 .component_driver = {
1744 .num_controls = ARRAY_SIZE(da7213_snd_controls), 1744 .controls = da7213_snd_controls,
1745 1745 .num_controls = ARRAY_SIZE(da7213_snd_controls),
1746 .dapm_widgets = da7213_dapm_widgets, 1746 .dapm_widgets = da7213_dapm_widgets,
1747 .num_dapm_widgets = ARRAY_SIZE(da7213_dapm_widgets), 1747 .num_dapm_widgets = ARRAY_SIZE(da7213_dapm_widgets),
1748 .dapm_routes = da7213_audio_map, 1748 .dapm_routes = da7213_audio_map,
1749 .num_dapm_routes = ARRAY_SIZE(da7213_audio_map), 1749 .num_dapm_routes = ARRAY_SIZE(da7213_audio_map),
1750 },
1750}; 1751};
1751 1752
1752static const struct regmap_config da7213_regmap_config = { 1753static const struct regmap_config da7213_regmap_config = {
diff --git a/sound/soc/codecs/da7218.c b/sound/soc/codecs/da7218.c
index 99ce23e113bf..dcdda6c15cf7 100644
--- a/sound/soc/codecs/da7218.c
+++ b/sound/soc/codecs/da7218.c
@@ -3045,13 +3045,14 @@ static struct snd_soc_codec_driver soc_codec_dev_da7218 = {
3045 .resume = da7218_resume, 3045 .resume = da7218_resume,
3046 .set_bias_level = da7218_set_bias_level, 3046 .set_bias_level = da7218_set_bias_level,
3047 3047
3048 .controls = da7218_snd_controls, 3048 .component_driver = {
3049 .num_controls = ARRAY_SIZE(da7218_snd_controls), 3049 .controls = da7218_snd_controls,
3050 3050 .num_controls = ARRAY_SIZE(da7218_snd_controls),
3051 .dapm_widgets = da7218_dapm_widgets, 3051 .dapm_widgets = da7218_dapm_widgets,
3052 .num_dapm_widgets = ARRAY_SIZE(da7218_dapm_widgets), 3052 .num_dapm_widgets = ARRAY_SIZE(da7218_dapm_widgets),
3053 .dapm_routes = da7218_audio_map, 3053 .dapm_routes = da7218_audio_map,
3054 .num_dapm_routes = ARRAY_SIZE(da7218_audio_map), 3054 .num_dapm_routes = ARRAY_SIZE(da7218_audio_map),
3055 },
3055}; 3056};
3056 3057
3057 3058
diff --git a/sound/soc/codecs/da7219.c b/sound/soc/codecs/da7219.c
index 30f35e88bec2..1671c61c9529 100644
--- a/sound/soc/codecs/da7219.c
+++ b/sound/soc/codecs/da7219.c
@@ -1767,13 +1767,14 @@ static struct snd_soc_codec_driver soc_codec_dev_da7219 = {
1767 .resume = da7219_resume, 1767 .resume = da7219_resume,
1768 .set_bias_level = da7219_set_bias_level, 1768 .set_bias_level = da7219_set_bias_level,
1769 1769
1770 .controls = da7219_snd_controls, 1770 .component_driver = {
1771 .num_controls = ARRAY_SIZE(da7219_snd_controls), 1771 .controls = da7219_snd_controls,
1772 1772 .num_controls = ARRAY_SIZE(da7219_snd_controls),
1773 .dapm_widgets = da7219_dapm_widgets, 1773 .dapm_widgets = da7219_dapm_widgets,
1774 .num_dapm_widgets = ARRAY_SIZE(da7219_dapm_widgets), 1774 .num_dapm_widgets = ARRAY_SIZE(da7219_dapm_widgets),
1775 .dapm_routes = da7219_audio_map, 1775 .dapm_routes = da7219_audio_map,
1776 .num_dapm_routes = ARRAY_SIZE(da7219_audio_map), 1776 .num_dapm_routes = ARRAY_SIZE(da7219_audio_map),
1777 },
1777}; 1778};
1778 1779
1779 1780
diff --git a/sound/soc/codecs/da732x.c b/sound/soc/codecs/da732x.c
index 461506a4ca6a..c1cc1c1c28f2 100644
--- a/sound/soc/codecs/da732x.c
+++ b/sound/soc/codecs/da732x.c
@@ -1501,12 +1501,14 @@ static int da732x_set_bias_level(struct snd_soc_codec *codec,
1501 1501
1502static struct snd_soc_codec_driver soc_codec_dev_da732x = { 1502static struct snd_soc_codec_driver soc_codec_dev_da732x = {
1503 .set_bias_level = da732x_set_bias_level, 1503 .set_bias_level = da732x_set_bias_level,
1504 .controls = da732x_snd_controls, 1504 .component_driver = {
1505 .num_controls = ARRAY_SIZE(da732x_snd_controls), 1505 .controls = da732x_snd_controls,
1506 .dapm_widgets = da732x_dapm_widgets, 1506 .num_controls = ARRAY_SIZE(da732x_snd_controls),
1507 .num_dapm_widgets = ARRAY_SIZE(da732x_dapm_widgets), 1507 .dapm_widgets = da732x_dapm_widgets,
1508 .dapm_routes = da732x_dapm_routes, 1508 .num_dapm_widgets = ARRAY_SIZE(da732x_dapm_widgets),
1509 .num_dapm_routes = ARRAY_SIZE(da732x_dapm_routes), 1509 .dapm_routes = da732x_dapm_routes,
1510 .num_dapm_routes = ARRAY_SIZE(da732x_dapm_routes),
1511 },
1510 .set_pll = da732x_set_dai_pll, 1512 .set_pll = da732x_set_dai_pll,
1511}; 1513};
1512 1514
diff --git a/sound/soc/codecs/da9055.c b/sound/soc/codecs/da9055.c
index 0b2ede8db978..4efb5f897a0c 100644
--- a/sound/soc/codecs/da9055.c
+++ b/sound/soc/codecs/da9055.c
@@ -1455,13 +1455,14 @@ static struct snd_soc_codec_driver soc_codec_dev_da9055 = {
1455 .probe = da9055_probe, 1455 .probe = da9055_probe,
1456 .set_bias_level = da9055_set_bias_level, 1456 .set_bias_level = da9055_set_bias_level,
1457 1457
1458 .controls = da9055_snd_controls, 1458 .component_driver = {
1459 .num_controls = ARRAY_SIZE(da9055_snd_controls), 1459 .controls = da9055_snd_controls,
1460 1460 .num_controls = ARRAY_SIZE(da9055_snd_controls),
1461 .dapm_widgets = da9055_dapm_widgets, 1461 .dapm_widgets = da9055_dapm_widgets,
1462 .num_dapm_widgets = ARRAY_SIZE(da9055_dapm_widgets), 1462 .num_dapm_widgets = ARRAY_SIZE(da9055_dapm_widgets),
1463 .dapm_routes = da9055_audio_map, 1463 .dapm_routes = da9055_audio_map,
1464 .num_dapm_routes = ARRAY_SIZE(da9055_audio_map), 1464 .num_dapm_routes = ARRAY_SIZE(da9055_audio_map),
1465 },
1465}; 1466};
1466 1467
1467static const struct regmap_config da9055_regmap_config = { 1468static const struct regmap_config da9055_regmap_config = {
diff --git a/sound/soc/codecs/dmic.c b/sound/soc/codecs/dmic.c
index fde53251c047..c82b9dc41e9a 100644
--- a/sound/soc/codecs/dmic.c
+++ b/sound/soc/codecs/dmic.c
@@ -51,10 +51,12 @@ static const struct snd_soc_dapm_route intercon[] = {
51}; 51};
52 52
53static struct snd_soc_codec_driver soc_dmic = { 53static struct snd_soc_codec_driver soc_dmic = {
54 .dapm_widgets = dmic_dapm_widgets, 54 .component_driver = {
55 .num_dapm_widgets = ARRAY_SIZE(dmic_dapm_widgets), 55 .dapm_widgets = dmic_dapm_widgets,
56 .dapm_routes = intercon, 56 .num_dapm_widgets = ARRAY_SIZE(dmic_dapm_widgets),
57 .num_dapm_routes = ARRAY_SIZE(intercon), 57 .dapm_routes = intercon,
58 .num_dapm_routes = ARRAY_SIZE(intercon),
59 },
58}; 60};
59 61
60static int dmic_dev_probe(struct platform_device *pdev) 62static int dmic_dev_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/es8328.c b/sound/soc/codecs/es8328.c
index 2086d7107622..37722194b107 100644
--- a/sound/soc/codecs/es8328.c
+++ b/sound/soc/codecs/es8328.c
@@ -823,12 +823,14 @@ static struct snd_soc_codec_driver es8328_codec_driver = {
823 .set_bias_level = es8328_set_bias_level, 823 .set_bias_level = es8328_set_bias_level,
824 .suspend_bias_off = true, 824 .suspend_bias_off = true,
825 825
826 .controls = es8328_snd_controls, 826 .component_driver = {
827 .num_controls = ARRAY_SIZE(es8328_snd_controls), 827 .controls = es8328_snd_controls,
828 .dapm_widgets = es8328_dapm_widgets, 828 .num_controls = ARRAY_SIZE(es8328_snd_controls),
829 .num_dapm_widgets = ARRAY_SIZE(es8328_dapm_widgets), 829 .dapm_widgets = es8328_dapm_widgets,
830 .dapm_routes = es8328_dapm_routes, 830 .num_dapm_widgets = ARRAY_SIZE(es8328_dapm_widgets),
831 .num_dapm_routes = ARRAY_SIZE(es8328_dapm_routes), 831 .dapm_routes = es8328_dapm_routes,
832 .num_dapm_routes = ARRAY_SIZE(es8328_dapm_routes),
833 },
832}; 834};
833 835
834int es8328_probe(struct device *dev, struct regmap *regmap) 836int es8328_probe(struct device *dev, struct regmap *regmap)
diff --git a/sound/soc/codecs/gtm601.c b/sound/soc/codecs/gtm601.c
index 0b80052996d3..926b1a4e37d4 100644
--- a/sound/soc/codecs/gtm601.c
+++ b/sound/soc/codecs/gtm601.c
@@ -52,10 +52,12 @@ static struct snd_soc_dai_driver gtm601_dai = {
52}; 52};
53 53
54static const struct snd_soc_codec_driver soc_codec_dev_gtm601 = { 54static const struct snd_soc_codec_driver soc_codec_dev_gtm601 = {
55 .dapm_widgets = gtm601_dapm_widgets, 55 .component_driver = {
56 .num_dapm_widgets = ARRAY_SIZE(gtm601_dapm_widgets), 56 .dapm_widgets = gtm601_dapm_widgets,
57 .dapm_routes = gtm601_dapm_routes, 57 .num_dapm_widgets = ARRAY_SIZE(gtm601_dapm_widgets),
58 .num_dapm_routes = ARRAY_SIZE(gtm601_dapm_routes), 58 .dapm_routes = gtm601_dapm_routes,
59 .num_dapm_routes = ARRAY_SIZE(gtm601_dapm_routes),
60 },
59}; 61};
60 62
61static int gtm601_platform_probe(struct platform_device *pdev) 63static int gtm601_platform_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/hdmi-codec.c b/sound/soc/codecs/hdmi-codec.c
index f27d115626db..b904492d7744 100644
--- a/sound/soc/codecs/hdmi-codec.c
+++ b/sound/soc/codecs/hdmi-codec.c
@@ -24,6 +24,15 @@
24 24
25#include <drm/drm_crtc.h> /* This is only to get MAX_ELD_BYTES */ 25#include <drm/drm_crtc.h> /* This is only to get MAX_ELD_BYTES */
26 26
27struct hdmi_device {
28 struct device *dev;
29 struct list_head list;
30 int cnt;
31};
32#define pos_to_hdmi_device(pos) container_of((pos), struct hdmi_device, list)
33LIST_HEAD(hdmi_device_list);
34
35#define DAI_NAME_SIZE 16
27struct hdmi_codec_priv { 36struct hdmi_codec_priv {
28 struct hdmi_codec_pdata hcd; 37 struct hdmi_codec_pdata hcd;
29 struct snd_soc_dai_driver *daidrv; 38 struct snd_soc_dai_driver *daidrv;
@@ -320,7 +329,6 @@ static const struct snd_soc_dai_ops hdmi_dai_ops = {
320 SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S32_BE) 329 SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S32_BE)
321 330
322static struct snd_soc_dai_driver hdmi_i2s_dai = { 331static struct snd_soc_dai_driver hdmi_i2s_dai = {
323 .name = "i2s-hifi",
324 .id = DAI_ID_I2S, 332 .id = DAI_ID_I2S,
325 .playback = { 333 .playback = {
326 .stream_name = "Playback", 334 .stream_name = "Playback",
@@ -334,7 +342,6 @@ static struct snd_soc_dai_driver hdmi_i2s_dai = {
334}; 342};
335 343
336static const struct snd_soc_dai_driver hdmi_spdif_dai = { 344static const struct snd_soc_dai_driver hdmi_spdif_dai = {
337 .name = "spdif-hifi",
338 .id = DAI_ID_SPDIF, 345 .id = DAI_ID_SPDIF,
339 .playback = { 346 .playback = {
340 .stream_name = "Playback", 347 .stream_name = "Playback",
@@ -346,13 +353,37 @@ static const struct snd_soc_dai_driver hdmi_spdif_dai = {
346 .ops = &hdmi_dai_ops, 353 .ops = &hdmi_dai_ops,
347}; 354};
348 355
356static char hdmi_dai_name[][DAI_NAME_SIZE] = {
357 "hdmi-hifi.0",
358 "hdmi-hifi.1",
359 "hdmi-hifi.2",
360 "hdmi-hifi.3",
361};
362
363static int hdmi_of_xlate_dai_name(struct snd_soc_component *component,
364 struct of_phandle_args *args,
365 const char **dai_name)
366{
367 int id = args->args[0];
368
369 if (id < ARRAY_SIZE(hdmi_dai_name)) {
370 *dai_name = hdmi_dai_name[id];
371 return 0;
372 }
373
374 return -EAGAIN;
375}
376
349static struct snd_soc_codec_driver hdmi_codec = { 377static struct snd_soc_codec_driver hdmi_codec = {
350 .controls = hdmi_controls, 378 .component_driver = {
351 .num_controls = ARRAY_SIZE(hdmi_controls), 379 .controls = hdmi_controls,
352 .dapm_widgets = hdmi_widgets, 380 .num_controls = ARRAY_SIZE(hdmi_controls),
353 .num_dapm_widgets = ARRAY_SIZE(hdmi_widgets), 381 .dapm_widgets = hdmi_widgets,
354 .dapm_routes = hdmi_routes, 382 .num_dapm_widgets = ARRAY_SIZE(hdmi_widgets),
355 .num_dapm_routes = ARRAY_SIZE(hdmi_routes), 383 .dapm_routes = hdmi_routes,
384 .num_dapm_routes = ARRAY_SIZE(hdmi_routes),
385 .of_xlate_dai_name = hdmi_of_xlate_dai_name,
386 },
356}; 387};
357 388
358static int hdmi_codec_probe(struct platform_device *pdev) 389static int hdmi_codec_probe(struct platform_device *pdev)
@@ -360,6 +391,8 @@ static int hdmi_codec_probe(struct platform_device *pdev)
360 struct hdmi_codec_pdata *hcd = pdev->dev.platform_data; 391 struct hdmi_codec_pdata *hcd = pdev->dev.platform_data;
361 struct device *dev = &pdev->dev; 392 struct device *dev = &pdev->dev;
362 struct hdmi_codec_priv *hcp; 393 struct hdmi_codec_priv *hcp;
394 struct hdmi_device *hd;
395 struct list_head *pos;
363 int dai_count, i = 0; 396 int dai_count, i = 0;
364 int ret; 397 int ret;
365 398
@@ -381,6 +414,31 @@ static int hdmi_codec_probe(struct platform_device *pdev)
381 if (!hcp) 414 if (!hcp)
382 return -ENOMEM; 415 return -ENOMEM;
383 416
417 hd = NULL;
418 list_for_each(pos, &hdmi_device_list) {
419 struct hdmi_device *tmp = pos_to_hdmi_device(pos);
420
421 if (tmp->dev == dev->parent) {
422 hd = tmp;
423 break;
424 }
425 }
426
427 if (!hd) {
428 hd = devm_kzalloc(dev, sizeof(*hd), GFP_KERNEL);
429 if (!hd)
430 return -ENOMEM;
431
432 hd->dev = dev->parent;
433
434 list_add_tail(&hd->list, &hdmi_device_list);
435 }
436
437 if (hd->cnt >= ARRAY_SIZE(hdmi_dai_name)) {
438 dev_err(dev, "too many hdmi codec are deteced\n");
439 return -EINVAL;
440 }
441
384 hcp->hcd = *hcd; 442 hcp->hcd = *hcd;
385 mutex_init(&hcp->current_stream_lock); 443 mutex_init(&hcp->current_stream_lock);
386 444
@@ -393,11 +451,14 @@ static int hdmi_codec_probe(struct platform_device *pdev)
393 hcp->daidrv[i] = hdmi_i2s_dai; 451 hcp->daidrv[i] = hdmi_i2s_dai;
394 hcp->daidrv[i].playback.channels_max = 452 hcp->daidrv[i].playback.channels_max =
395 hcd->max_i2s_channels; 453 hcd->max_i2s_channels;
454 hcp->daidrv[i].name = hdmi_dai_name[hd->cnt++];
396 i++; 455 i++;
397 } 456 }
398 457
399 if (hcd->spdif) 458 if (hcd->spdif) {
400 hcp->daidrv[i] = hdmi_spdif_dai; 459 hcp->daidrv[i] = hdmi_spdif_dai;
460 hcp->daidrv[i].name = hdmi_dai_name[hd->cnt++];
461 }
401 462
402 ret = snd_soc_register_codec(dev, &hdmi_codec, hcp->daidrv, 463 ret = snd_soc_register_codec(dev, &hdmi_codec, hcp->daidrv,
403 dai_count); 464 dai_count);
diff --git a/sound/soc/codecs/inno_rk3036.c b/sound/soc/codecs/inno_rk3036.c
index 9b6e8840a1b5..b918ba5c8ce5 100644
--- a/sound/soc/codecs/inno_rk3036.c
+++ b/sound/soc/codecs/inno_rk3036.c
@@ -380,12 +380,14 @@ static struct snd_soc_codec_driver rk3036_codec_driver = {
380 .probe = rk3036_codec_probe, 380 .probe = rk3036_codec_probe,
381 .remove = rk3036_codec_remove, 381 .remove = rk3036_codec_remove,
382 .set_bias_level = rk3036_codec_set_bias_level, 382 .set_bias_level = rk3036_codec_set_bias_level,
383 .controls = rk3036_codec_dapm_controls, 383 .component_driver = {
384 .num_controls = ARRAY_SIZE(rk3036_codec_dapm_controls), 384 .controls = rk3036_codec_dapm_controls,
385 .dapm_routes = rk3036_codec_dapm_routes, 385 .num_controls = ARRAY_SIZE(rk3036_codec_dapm_controls),
386 .num_dapm_routes = ARRAY_SIZE(rk3036_codec_dapm_routes), 386 .dapm_routes = rk3036_codec_dapm_routes,
387 .dapm_widgets = rk3036_codec_dapm_widgets, 387 .num_dapm_routes = ARRAY_SIZE(rk3036_codec_dapm_routes),
388 .num_dapm_widgets = ARRAY_SIZE(rk3036_codec_dapm_widgets), 388 .dapm_widgets = rk3036_codec_dapm_widgets,
389 .num_dapm_widgets = ARRAY_SIZE(rk3036_codec_dapm_widgets),
390 },
389}; 391};
390 392
391static const struct regmap_config rk3036_codec_regmap_config = { 393static const struct regmap_config rk3036_codec_regmap_config = {
diff --git a/sound/soc/codecs/isabelle.c b/sound/soc/codecs/isabelle.c
index be448373d39a..a4b0eded984a 100644
--- a/sound/soc/codecs/isabelle.c
+++ b/sound/soc/codecs/isabelle.c
@@ -1089,12 +1089,14 @@ static struct snd_soc_dai_driver isabelle_dai[] = {
1089 1089
1090static struct snd_soc_codec_driver soc_codec_dev_isabelle = { 1090static struct snd_soc_codec_driver soc_codec_dev_isabelle = {
1091 .set_bias_level = isabelle_set_bias_level, 1091 .set_bias_level = isabelle_set_bias_level,
1092 .controls = isabelle_snd_controls, 1092 .component_driver = {
1093 .num_controls = ARRAY_SIZE(isabelle_snd_controls), 1093 .controls = isabelle_snd_controls,
1094 .dapm_widgets = isabelle_dapm_widgets, 1094 .num_controls = ARRAY_SIZE(isabelle_snd_controls),
1095 .num_dapm_widgets = ARRAY_SIZE(isabelle_dapm_widgets), 1095 .dapm_widgets = isabelle_dapm_widgets,
1096 .dapm_routes = isabelle_intercon, 1096 .num_dapm_widgets = ARRAY_SIZE(isabelle_dapm_widgets),
1097 .num_dapm_routes = ARRAY_SIZE(isabelle_intercon), 1097 .dapm_routes = isabelle_intercon,
1098 .num_dapm_routes = ARRAY_SIZE(isabelle_intercon),
1099 },
1098 .idle_bias_off = true, 1100 .idle_bias_off = true,
1099}; 1101};
1100 1102
diff --git a/sound/soc/codecs/jz4740.c b/sound/soc/codecs/jz4740.c
index 1f5ab99956ed..0290fab383da 100644
--- a/sound/soc/codecs/jz4740.c
+++ b/sound/soc/codecs/jz4740.c
@@ -298,12 +298,14 @@ static struct snd_soc_codec_driver soc_codec_dev_jz4740_codec = {
298 .set_bias_level = jz4740_codec_set_bias_level, 298 .set_bias_level = jz4740_codec_set_bias_level,
299 .suspend_bias_off = true, 299 .suspend_bias_off = true,
300 300
301 .controls = jz4740_codec_controls, 301 .component_driver = {
302 .num_controls = ARRAY_SIZE(jz4740_codec_controls), 302 .controls = jz4740_codec_controls,
303 .dapm_widgets = jz4740_codec_dapm_widgets, 303 .num_controls = ARRAY_SIZE(jz4740_codec_controls),
304 .num_dapm_widgets = ARRAY_SIZE(jz4740_codec_dapm_widgets), 304 .dapm_widgets = jz4740_codec_dapm_widgets,
305 .dapm_routes = jz4740_codec_dapm_routes, 305 .num_dapm_widgets = ARRAY_SIZE(jz4740_codec_dapm_widgets),
306 .num_dapm_routes = ARRAY_SIZE(jz4740_codec_dapm_routes), 306 .dapm_routes = jz4740_codec_dapm_routes,
307 .num_dapm_routes = ARRAY_SIZE(jz4740_codec_dapm_routes),
308 },
307}; 309};
308 310
309static const struct regmap_config jz4740_codec_regmap_config = { 311static const struct regmap_config jz4740_codec_regmap_config = {
diff --git a/sound/soc/codecs/lm49453.c b/sound/soc/codecs/lm49453.c
index 9af5640e3446..8d413c2677cc 100644
--- a/sound/soc/codecs/lm49453.c
+++ b/sound/soc/codecs/lm49453.c
@@ -1391,12 +1391,14 @@ static struct snd_soc_dai_driver lm49453_dai[] = {
1391 1391
1392static struct snd_soc_codec_driver soc_codec_dev_lm49453 = { 1392static struct snd_soc_codec_driver soc_codec_dev_lm49453 = {
1393 .set_bias_level = lm49453_set_bias_level, 1393 .set_bias_level = lm49453_set_bias_level,
1394 .controls = lm49453_snd_controls, 1394 .component_driver = {
1395 .num_controls = ARRAY_SIZE(lm49453_snd_controls), 1395 .controls = lm49453_snd_controls,
1396 .dapm_widgets = lm49453_dapm_widgets, 1396 .num_controls = ARRAY_SIZE(lm49453_snd_controls),
1397 .num_dapm_widgets = ARRAY_SIZE(lm49453_dapm_widgets), 1397 .dapm_widgets = lm49453_dapm_widgets,
1398 .dapm_routes = lm49453_audio_map, 1398 .num_dapm_widgets = ARRAY_SIZE(lm49453_dapm_widgets),
1399 .num_dapm_routes = ARRAY_SIZE(lm49453_audio_map), 1399 .dapm_routes = lm49453_audio_map,
1400 .num_dapm_routes = ARRAY_SIZE(lm49453_audio_map),
1401 },
1400 .idle_bias_off = true, 1402 .idle_bias_off = true,
1401}; 1403};
1402 1404
diff --git a/sound/soc/codecs/max98088.c b/sound/soc/codecs/max98088.c
index fc22804cabc5..72f77455582e 100644
--- a/sound/soc/codecs/max98088.c
+++ b/sound/soc/codecs/max98088.c
@@ -1704,12 +1704,14 @@ static struct snd_soc_codec_driver soc_codec_dev_max98088 = {
1704 .set_bias_level = max98088_set_bias_level, 1704 .set_bias_level = max98088_set_bias_level,
1705 .suspend_bias_off = true, 1705 .suspend_bias_off = true,
1706 1706
1707 .controls = max98088_snd_controls, 1707 .component_driver = {
1708 .num_controls = ARRAY_SIZE(max98088_snd_controls), 1708 .controls = max98088_snd_controls,
1709 .dapm_widgets = max98088_dapm_widgets, 1709 .num_controls = ARRAY_SIZE(max98088_snd_controls),
1710 .num_dapm_widgets = ARRAY_SIZE(max98088_dapm_widgets), 1710 .dapm_widgets = max98088_dapm_widgets,
1711 .dapm_routes = max98088_audio_map, 1711 .num_dapm_widgets = ARRAY_SIZE(max98088_dapm_widgets),
1712 .num_dapm_routes = ARRAY_SIZE(max98088_audio_map), 1712 .dapm_routes = max98088_audio_map,
1713 .num_dapm_routes = ARRAY_SIZE(max98088_audio_map),
1714 },
1713}; 1715};
1714 1716
1715static int max98088_i2c_probe(struct i2c_client *i2c, 1717static int max98088_i2c_probe(struct i2c_client *i2c,
diff --git a/sound/soc/codecs/max98095.c b/sound/soc/codecs/max98095.c
index 3577003f39cf..6f8a757876ed 100644
--- a/sound/soc/codecs/max98095.c
+++ b/sound/soc/codecs/max98095.c
@@ -2108,12 +2108,14 @@ static struct snd_soc_codec_driver soc_codec_dev_max98095 = {
2108 .suspend = max98095_suspend, 2108 .suspend = max98095_suspend,
2109 .resume = max98095_resume, 2109 .resume = max98095_resume,
2110 .set_bias_level = max98095_set_bias_level, 2110 .set_bias_level = max98095_set_bias_level,
2111 .controls = max98095_snd_controls, 2111 .component_driver = {
2112 .num_controls = ARRAY_SIZE(max98095_snd_controls), 2112 .controls = max98095_snd_controls,
2113 .dapm_widgets = max98095_dapm_widgets, 2113 .num_controls = ARRAY_SIZE(max98095_snd_controls),
2114 .num_dapm_widgets = ARRAY_SIZE(max98095_dapm_widgets), 2114 .dapm_widgets = max98095_dapm_widgets,
2115 .dapm_routes = max98095_audio_map, 2115 .num_dapm_widgets = ARRAY_SIZE(max98095_dapm_widgets),
2116 .num_dapm_routes = ARRAY_SIZE(max98095_audio_map), 2116 .dapm_routes = max98095_audio_map,
2117 .num_dapm_routes = ARRAY_SIZE(max98095_audio_map),
2118 },
2117}; 2119};
2118 2120
2119static int max98095_i2c_probe(struct i2c_client *i2c, 2121static int max98095_i2c_probe(struct i2c_client *i2c,
diff --git a/sound/soc/codecs/max98357a.c b/sound/soc/codecs/max98357a.c
index 5b1dfb1518fb..6a6b68a4cb52 100644
--- a/sound/soc/codecs/max98357a.c
+++ b/sound/soc/codecs/max98357a.c
@@ -74,10 +74,12 @@ static int max98357a_codec_probe(struct snd_soc_codec *codec)
74 74
75static struct snd_soc_codec_driver max98357a_codec_driver = { 75static struct snd_soc_codec_driver max98357a_codec_driver = {
76 .probe = max98357a_codec_probe, 76 .probe = max98357a_codec_probe,
77 .dapm_widgets = max98357a_dapm_widgets, 77 .component_driver = {
78 .num_dapm_widgets = ARRAY_SIZE(max98357a_dapm_widgets), 78 .dapm_widgets = max98357a_dapm_widgets,
79 .dapm_routes = max98357a_dapm_routes, 79 .num_dapm_widgets = ARRAY_SIZE(max98357a_dapm_widgets),
80 .num_dapm_routes = ARRAY_SIZE(max98357a_dapm_routes), 80 .dapm_routes = max98357a_dapm_routes,
81 .num_dapm_routes = ARRAY_SIZE(max98357a_dapm_routes),
82 },
81}; 83};
82 84
83static const struct snd_soc_dai_ops max98357a_dai_ops = { 85static const struct snd_soc_dai_ops max98357a_dai_ops = {
diff --git a/sound/soc/codecs/max9850.c b/sound/soc/codecs/max9850.c
index c14a79d026a1..0610840733d1 100644
--- a/sound/soc/codecs/max9850.c
+++ b/sound/soc/codecs/max9850.c
@@ -306,12 +306,14 @@ static struct snd_soc_codec_driver soc_codec_dev_max9850 = {
306 .set_bias_level = max9850_set_bias_level, 306 .set_bias_level = max9850_set_bias_level,
307 .suspend_bias_off = true, 307 .suspend_bias_off = true,
308 308
309 .controls = max9850_controls, 309 .component_driver = {
310 .num_controls = ARRAY_SIZE(max9850_controls), 310 .controls = max9850_controls,
311 .dapm_widgets = max9850_dapm_widgets, 311 .num_controls = ARRAY_SIZE(max9850_controls),
312 .num_dapm_widgets = ARRAY_SIZE(max9850_dapm_widgets), 312 .dapm_widgets = max9850_dapm_widgets,
313 .dapm_routes = max9850_dapm_routes, 313 .num_dapm_widgets = ARRAY_SIZE(max9850_dapm_widgets),
314 .num_dapm_routes = ARRAY_SIZE(max9850_dapm_routes), 314 .dapm_routes = max9850_dapm_routes,
315 .num_dapm_routes = ARRAY_SIZE(max9850_dapm_routes),
316 },
315}; 317};
316 318
317static int max9850_i2c_probe(struct i2c_client *i2c, 319static int max9850_i2c_probe(struct i2c_client *i2c,
diff --git a/sound/soc/codecs/max9860.c b/sound/soc/codecs/max9860.c
index 68074c92a7c0..499bdbfd0a2d 100644
--- a/sound/soc/codecs/max9860.c
+++ b/sound/soc/codecs/max9860.c
@@ -538,12 +538,14 @@ static struct snd_soc_codec_driver max9860_codec_driver = {
538 .set_bias_level = max9860_set_bias_level, 538 .set_bias_level = max9860_set_bias_level,
539 .idle_bias_off = true, 539 .idle_bias_off = true,
540 540
541 .controls = max9860_controls, 541 .component_driver = {
542 .num_controls = ARRAY_SIZE(max9860_controls), 542 .controls = max9860_controls,
543 .dapm_widgets = max9860_dapm_widgets, 543 .num_controls = ARRAY_SIZE(max9860_controls),
544 .num_dapm_widgets = ARRAY_SIZE(max9860_dapm_widgets), 544 .dapm_widgets = max9860_dapm_widgets,
545 .dapm_routes = max9860_dapm_routes, 545 .num_dapm_widgets = ARRAY_SIZE(max9860_dapm_widgets),
546 .num_dapm_routes = ARRAY_SIZE(max9860_dapm_routes), 546 .dapm_routes = max9860_dapm_routes,
547 .num_dapm_routes = ARRAY_SIZE(max9860_dapm_routes),
548 },
547}; 549};
548 550
549#ifdef CONFIG_PM 551#ifdef CONFIG_PM
diff --git a/sound/soc/codecs/max9867.c b/sound/soc/codecs/max9867.c
index 2a22fddeb6af..c9673235078d 100644
--- a/sound/soc/codecs/max9867.c
+++ b/sound/soc/codecs/max9867.c
@@ -417,12 +417,14 @@ static int max9867_probe(struct snd_soc_codec *codec)
417 417
418static struct snd_soc_codec_driver max9867_codec = { 418static struct snd_soc_codec_driver max9867_codec = {
419 .probe = max9867_probe, 419 .probe = max9867_probe,
420 .controls = max9867_snd_controls, 420 .component_driver = {
421 .num_controls = ARRAY_SIZE(max9867_snd_controls), 421 .controls = max9867_snd_controls,
422 .dapm_routes = max9867_audio_map, 422 .num_controls = ARRAY_SIZE(max9867_snd_controls),
423 .num_dapm_routes = ARRAY_SIZE(max9867_audio_map), 423 .dapm_routes = max9867_audio_map,
424 .dapm_widgets = max9867_dapm_widgets, 424 .num_dapm_routes = ARRAY_SIZE(max9867_audio_map),
425 .num_dapm_widgets = ARRAY_SIZE(max9867_dapm_widgets), 425 .dapm_widgets = max9867_dapm_widgets,
426 .num_dapm_widgets = ARRAY_SIZE(max9867_dapm_widgets),
427 },
426}; 428};
427 429
428static bool max9867_volatile_register(struct device *dev, unsigned int reg) 430static bool max9867_volatile_register(struct device *dev, unsigned int reg)
diff --git a/sound/soc/codecs/max98925.c b/sound/soc/codecs/max98925.c
index 5990de317999..327eaa25c9bd 100644
--- a/sound/soc/codecs/max98925.c
+++ b/sound/soc/codecs/max98925.c
@@ -540,12 +540,14 @@ static int max98925_probe(struct snd_soc_codec *codec)
540 540
541static const struct snd_soc_codec_driver soc_codec_dev_max98925 = { 541static const struct snd_soc_codec_driver soc_codec_dev_max98925 = {
542 .probe = max98925_probe, 542 .probe = max98925_probe,
543 .controls = max98925_snd_controls, 543 .component_driver = {
544 .num_controls = ARRAY_SIZE(max98925_snd_controls), 544 .controls = max98925_snd_controls,
545 .dapm_routes = max98925_audio_map, 545 .num_controls = ARRAY_SIZE(max98925_snd_controls),
546 .num_dapm_routes = ARRAY_SIZE(max98925_audio_map), 546 .dapm_routes = max98925_audio_map,
547 .dapm_widgets = max98925_dapm_widgets, 547 .num_dapm_routes = ARRAY_SIZE(max98925_audio_map),
548 .num_dapm_widgets = ARRAY_SIZE(max98925_dapm_widgets), 548 .dapm_widgets = max98925_dapm_widgets,
549 .num_dapm_widgets = ARRAY_SIZE(max98925_dapm_widgets),
550 },
549}; 551};
550 552
551static const struct regmap_config max98925_regmap = { 553static const struct regmap_config max98925_regmap = {
diff --git a/sound/soc/codecs/max98926.c b/sound/soc/codecs/max98926.c
index 8d14adae5cc5..5830a81e535a 100644
--- a/sound/soc/codecs/max98926.c
+++ b/sound/soc/codecs/max98926.c
@@ -498,12 +498,14 @@ static int max98926_probe(struct snd_soc_codec *codec)
498 498
499static struct snd_soc_codec_driver soc_codec_dev_max98926 = { 499static struct snd_soc_codec_driver soc_codec_dev_max98926 = {
500 .probe = max98926_probe, 500 .probe = max98926_probe,
501 .controls = max98926_snd_controls, 501 .component_driver = {
502 .num_controls = ARRAY_SIZE(max98926_snd_controls), 502 .controls = max98926_snd_controls,
503 .dapm_routes = max98926_audio_map, 503 .num_controls = ARRAY_SIZE(max98926_snd_controls),
504 .num_dapm_routes = ARRAY_SIZE(max98926_audio_map), 504 .dapm_routes = max98926_audio_map,
505 .dapm_widgets = max98926_dapm_widgets, 505 .num_dapm_routes = ARRAY_SIZE(max98926_audio_map),
506 .num_dapm_widgets = ARRAY_SIZE(max98926_dapm_widgets), 506 .dapm_widgets = max98926_dapm_widgets,
507 .num_dapm_widgets = ARRAY_SIZE(max98926_dapm_widgets),
508 },
507}; 509};
508 510
509static const struct regmap_config max98926_regmap = { 511static const struct regmap_config max98926_regmap = {
diff --git a/sound/soc/codecs/mc13783.c b/sound/soc/codecs/mc13783.c
index 3e770cbe7f0f..90562703dcfd 100644
--- a/sound/soc/codecs/mc13783.c
+++ b/sound/soc/codecs/mc13783.c
@@ -737,12 +737,14 @@ static struct snd_soc_codec_driver soc_codec_dev_mc13783 = {
737 .probe = mc13783_probe, 737 .probe = mc13783_probe,
738 .remove = mc13783_remove, 738 .remove = mc13783_remove,
739 .get_regmap = mc13783_get_regmap, 739 .get_regmap = mc13783_get_regmap,
740 .controls = mc13783_control_list, 740 .component_driver = {
741 .num_controls = ARRAY_SIZE(mc13783_control_list), 741 .controls = mc13783_control_list,
742 .dapm_widgets = mc13783_dapm_widgets, 742 .num_controls = ARRAY_SIZE(mc13783_control_list),
743 .num_dapm_widgets = ARRAY_SIZE(mc13783_dapm_widgets), 743 .dapm_widgets = mc13783_dapm_widgets,
744 .dapm_routes = mc13783_routes, 744 .num_dapm_widgets = ARRAY_SIZE(mc13783_dapm_widgets),
745 .num_dapm_routes = ARRAY_SIZE(mc13783_routes), 745 .dapm_routes = mc13783_routes,
746 .num_dapm_routes = ARRAY_SIZE(mc13783_routes),
747 },
746}; 748};
747 749
748static int __init mc13783_codec_probe(struct platform_device *pdev) 750static int __init mc13783_codec_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/ml26124.c b/sound/soc/codecs/ml26124.c
index f561c78b9e0e..69e5e18880c5 100644
--- a/sound/soc/codecs/ml26124.c
+++ b/sound/soc/codecs/ml26124.c
@@ -541,12 +541,14 @@ static struct snd_soc_codec_driver soc_codec_dev_ml26124 = {
541 .probe = ml26124_probe, 541 .probe = ml26124_probe,
542 .set_bias_level = ml26124_set_bias_level, 542 .set_bias_level = ml26124_set_bias_level,
543 .suspend_bias_off = true, 543 .suspend_bias_off = true,
544 .dapm_widgets = ml26124_dapm_widgets, 544 .component_driver = {
545 .num_dapm_widgets = ARRAY_SIZE(ml26124_dapm_widgets), 545 .controls = ml26124_snd_controls,
546 .dapm_routes = ml26124_intercon, 546 .num_controls = ARRAY_SIZE(ml26124_snd_controls),
547 .num_dapm_routes = ARRAY_SIZE(ml26124_intercon), 547 .dapm_widgets = ml26124_dapm_widgets,
548 .controls = ml26124_snd_controls, 548 .num_dapm_widgets = ARRAY_SIZE(ml26124_dapm_widgets),
549 .num_controls = ARRAY_SIZE(ml26124_snd_controls), 549 .dapm_routes = ml26124_intercon,
550 .num_dapm_routes = ARRAY_SIZE(ml26124_intercon),
551 },
550}; 552};
551 553
552static const struct regmap_config ml26124_i2c_regmap = { 554static const struct regmap_config ml26124_i2c_regmap = {
diff --git a/sound/soc/codecs/nau8825.c b/sound/soc/codecs/nau8825.c
index ff566376da40..e643be91d762 100644
--- a/sound/soc/codecs/nau8825.c
+++ b/sound/soc/codecs/nau8825.c
@@ -2256,12 +2256,14 @@ static struct snd_soc_codec_driver nau8825_codec_driver = {
2256 .suspend = nau8825_suspend, 2256 .suspend = nau8825_suspend,
2257 .resume = nau8825_resume, 2257 .resume = nau8825_resume,
2258 2258
2259 .controls = nau8825_controls, 2259 .component_driver = {
2260 .num_controls = ARRAY_SIZE(nau8825_controls), 2260 .controls = nau8825_controls,
2261 .dapm_widgets = nau8825_dapm_widgets, 2261 .num_controls = ARRAY_SIZE(nau8825_controls),
2262 .num_dapm_widgets = ARRAY_SIZE(nau8825_dapm_widgets), 2262 .dapm_widgets = nau8825_dapm_widgets,
2263 .dapm_routes = nau8825_dapm_routes, 2263 .num_dapm_widgets = ARRAY_SIZE(nau8825_dapm_widgets),
2264 .num_dapm_routes = ARRAY_SIZE(nau8825_dapm_routes), 2264 .dapm_routes = nau8825_dapm_routes,
2265 .num_dapm_routes = ARRAY_SIZE(nau8825_dapm_routes),
2266 },
2265}; 2267};
2266 2268
2267static void nau8825_reset_chip(struct regmap *regmap) 2269static void nau8825_reset_chip(struct regmap *regmap)
diff --git a/sound/soc/codecs/pcm1681.c b/sound/soc/codecs/pcm1681.c
index 33e1fc2d1598..0b14efab6280 100644
--- a/sound/soc/codecs/pcm1681.c
+++ b/sound/soc/codecs/pcm1681.c
@@ -289,12 +289,14 @@ static const struct regmap_config pcm1681_regmap = {
289}; 289};
290 290
291static struct snd_soc_codec_driver soc_codec_dev_pcm1681 = { 291static struct snd_soc_codec_driver soc_codec_dev_pcm1681 = {
292 .controls = pcm1681_controls, 292 .component_driver = {
293 .num_controls = ARRAY_SIZE(pcm1681_controls), 293 .controls = pcm1681_controls,
294 .dapm_widgets = pcm1681_dapm_widgets, 294 .num_controls = ARRAY_SIZE(pcm1681_controls),
295 .num_dapm_widgets = ARRAY_SIZE(pcm1681_dapm_widgets), 295 .dapm_widgets = pcm1681_dapm_widgets,
296 .dapm_routes = pcm1681_dapm_routes, 296 .num_dapm_widgets = ARRAY_SIZE(pcm1681_dapm_widgets),
297 .num_dapm_routes = ARRAY_SIZE(pcm1681_dapm_routes), 297 .dapm_routes = pcm1681_dapm_routes,
298 .num_dapm_routes = ARRAY_SIZE(pcm1681_dapm_routes),
299 },
298}; 300};
299 301
300static const struct i2c_device_id pcm1681_i2c_id[] = { 302static const struct i2c_device_id pcm1681_i2c_id[] = {
diff --git a/sound/soc/codecs/pcm179x.c b/sound/soc/codecs/pcm179x.c
index 88fbdd184aa0..b813a154ddd9 100644
--- a/sound/soc/codecs/pcm179x.c
+++ b/sound/soc/codecs/pcm179x.c
@@ -206,12 +206,14 @@ const struct regmap_config pcm179x_regmap_config = {
206EXPORT_SYMBOL_GPL(pcm179x_regmap_config); 206EXPORT_SYMBOL_GPL(pcm179x_regmap_config);
207 207
208static struct snd_soc_codec_driver soc_codec_dev_pcm179x = { 208static struct snd_soc_codec_driver soc_codec_dev_pcm179x = {
209 .controls = pcm179x_controls, 209 .component_driver = {
210 .num_controls = ARRAY_SIZE(pcm179x_controls), 210 .controls = pcm179x_controls,
211 .dapm_widgets = pcm179x_dapm_widgets, 211 .num_controls = ARRAY_SIZE(pcm179x_controls),
212 .num_dapm_widgets = ARRAY_SIZE(pcm179x_dapm_widgets), 212 .dapm_widgets = pcm179x_dapm_widgets,
213 .dapm_routes = pcm179x_dapm_routes, 213 .num_dapm_widgets = ARRAY_SIZE(pcm179x_dapm_widgets),
214 .num_dapm_routes = ARRAY_SIZE(pcm179x_dapm_routes), 214 .dapm_routes = pcm179x_dapm_routes,
215 .num_dapm_routes = ARRAY_SIZE(pcm179x_dapm_routes),
216 },
215}; 217};
216 218
217int pcm179x_common_init(struct device *dev, struct regmap *regmap) 219int pcm179x_common_init(struct device *dev, struct regmap *regmap)
diff --git a/sound/soc/codecs/pcm3008.c b/sound/soc/codecs/pcm3008.c
index 8fb445f33f6f..708af05486f6 100644
--- a/sound/soc/codecs/pcm3008.c
+++ b/sound/soc/codecs/pcm3008.c
@@ -99,10 +99,12 @@ static struct snd_soc_dai_driver pcm3008_dai = {
99}; 99};
100 100
101static struct snd_soc_codec_driver soc_codec_dev_pcm3008 = { 101static struct snd_soc_codec_driver soc_codec_dev_pcm3008 = {
102 .dapm_widgets = pcm3008_dapm_widgets, 102 .component_driver = {
103 .num_dapm_widgets = ARRAY_SIZE(pcm3008_dapm_widgets), 103 .dapm_widgets = pcm3008_dapm_widgets,
104 .dapm_routes = pcm3008_dapm_routes, 104 .num_dapm_widgets = ARRAY_SIZE(pcm3008_dapm_widgets),
105 .num_dapm_routes = ARRAY_SIZE(pcm3008_dapm_routes), 105 .dapm_routes = pcm3008_dapm_routes,
106 .num_dapm_routes = ARRAY_SIZE(pcm3008_dapm_routes),
107 },
106}; 108};
107 109
108static int pcm3008_codec_probe(struct platform_device *pdev) 110static int pcm3008_codec_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/pcm3168a.c b/sound/soc/codecs/pcm3168a.c
index 992a77edcd5d..39bc02d5bc5d 100644
--- a/sound/soc/codecs/pcm3168a.c
+++ b/sound/soc/codecs/pcm3168a.c
@@ -599,12 +599,14 @@ EXPORT_SYMBOL_GPL(pcm3168a_regmap);
599 599
600static const struct snd_soc_codec_driver pcm3168a_driver = { 600static const struct snd_soc_codec_driver pcm3168a_driver = {
601 .idle_bias_off = true, 601 .idle_bias_off = true,
602 .controls = pcm3168a_snd_controls, 602 .component_driver = {
603 .num_controls = ARRAY_SIZE(pcm3168a_snd_controls), 603 .controls = pcm3168a_snd_controls,
604 .dapm_widgets = pcm3168a_dapm_widgets, 604 .num_controls = ARRAY_SIZE(pcm3168a_snd_controls),
605 .num_dapm_widgets = ARRAY_SIZE(pcm3168a_dapm_widgets), 605 .dapm_widgets = pcm3168a_dapm_widgets,
606 .dapm_routes = pcm3168a_dapm_routes, 606 .num_dapm_widgets = ARRAY_SIZE(pcm3168a_dapm_widgets),
607 .num_dapm_routes = ARRAY_SIZE(pcm3168a_dapm_routes) 607 .dapm_routes = pcm3168a_dapm_routes,
608 .num_dapm_routes = ARRAY_SIZE(pcm3168a_dapm_routes)
609 },
608}; 610};
609 611
610int pcm3168a_probe(struct device *dev, struct regmap *regmap) 612int pcm3168a_probe(struct device *dev, struct regmap *regmap)
diff --git a/sound/soc/codecs/pcm512x.c b/sound/soc/codecs/pcm512x.c
index 047c48953a20..72b19e62f626 100644
--- a/sound/soc/codecs/pcm512x.c
+++ b/sound/soc/codecs/pcm512x.c
@@ -1348,12 +1348,14 @@ static struct snd_soc_codec_driver pcm512x_codec_driver = {
1348 .set_bias_level = pcm512x_set_bias_level, 1348 .set_bias_level = pcm512x_set_bias_level,
1349 .idle_bias_off = true, 1349 .idle_bias_off = true,
1350 1350
1351 .controls = pcm512x_controls, 1351 .component_driver = {
1352 .num_controls = ARRAY_SIZE(pcm512x_controls), 1352 .controls = pcm512x_controls,
1353 .dapm_widgets = pcm512x_dapm_widgets, 1353 .num_controls = ARRAY_SIZE(pcm512x_controls),
1354 .num_dapm_widgets = ARRAY_SIZE(pcm512x_dapm_widgets), 1354 .dapm_widgets = pcm512x_dapm_widgets,
1355 .dapm_routes = pcm512x_dapm_routes, 1355 .num_dapm_widgets = ARRAY_SIZE(pcm512x_dapm_widgets),
1356 .num_dapm_routes = ARRAY_SIZE(pcm512x_dapm_routes), 1356 .dapm_routes = pcm512x_dapm_routes,
1357 .num_dapm_routes = ARRAY_SIZE(pcm512x_dapm_routes),
1358 },
1357}; 1359};
1358 1360
1359static const struct regmap_range_cfg pcm512x_range = { 1361static const struct regmap_range_cfg pcm512x_range = {
diff --git a/sound/soc/codecs/rt286.c b/sound/soc/codecs/rt286.c
index 74c0e4eb3788..9c365a7f758d 100644
--- a/sound/soc/codecs/rt286.c
+++ b/sound/soc/codecs/rt286.c
@@ -1053,12 +1053,14 @@ static struct snd_soc_codec_driver soc_codec_dev_rt286 = {
1053 .resume = rt286_resume, 1053 .resume = rt286_resume,
1054 .set_bias_level = rt286_set_bias_level, 1054 .set_bias_level = rt286_set_bias_level,
1055 .idle_bias_off = true, 1055 .idle_bias_off = true,
1056 .controls = rt286_snd_controls, 1056 .component_driver = {
1057 .num_controls = ARRAY_SIZE(rt286_snd_controls), 1057 .controls = rt286_snd_controls,
1058 .dapm_widgets = rt286_dapm_widgets, 1058 .num_controls = ARRAY_SIZE(rt286_snd_controls),
1059 .num_dapm_widgets = ARRAY_SIZE(rt286_dapm_widgets), 1059 .dapm_widgets = rt286_dapm_widgets,
1060 .dapm_routes = rt286_dapm_routes, 1060 .num_dapm_widgets = ARRAY_SIZE(rt286_dapm_widgets),
1061 .num_dapm_routes = ARRAY_SIZE(rt286_dapm_routes), 1061 .dapm_routes = rt286_dapm_routes,
1062 .num_dapm_routes = ARRAY_SIZE(rt286_dapm_routes),
1063 },
1062}; 1064};
1063 1065
1064static const struct regmap_config rt286_regmap = { 1066static const struct regmap_config rt286_regmap = {
diff --git a/sound/soc/codecs/rt298.c b/sound/soc/codecs/rt298.c
index f80cfe4d2ef2..55558643166f 100644
--- a/sound/soc/codecs/rt298.c
+++ b/sound/soc/codecs/rt298.c
@@ -1095,12 +1095,14 @@ static struct snd_soc_codec_driver soc_codec_dev_rt298 = {
1095 .resume = rt298_resume, 1095 .resume = rt298_resume,
1096 .set_bias_level = rt298_set_bias_level, 1096 .set_bias_level = rt298_set_bias_level,
1097 .idle_bias_off = true, 1097 .idle_bias_off = true,
1098 .controls = rt298_snd_controls, 1098 .component_driver = {
1099 .num_controls = ARRAY_SIZE(rt298_snd_controls), 1099 .controls = rt298_snd_controls,
1100 .dapm_widgets = rt298_dapm_widgets, 1100 .num_controls = ARRAY_SIZE(rt298_snd_controls),
1101 .num_dapm_widgets = ARRAY_SIZE(rt298_dapm_widgets), 1101 .dapm_widgets = rt298_dapm_widgets,
1102 .dapm_routes = rt298_dapm_routes, 1102 .num_dapm_widgets = ARRAY_SIZE(rt298_dapm_widgets),
1103 .num_dapm_routes = ARRAY_SIZE(rt298_dapm_routes), 1103 .dapm_routes = rt298_dapm_routes,
1104 .num_dapm_routes = ARRAY_SIZE(rt298_dapm_routes),
1105 },
1104}; 1106};
1105 1107
1106static const struct regmap_config rt298_regmap = { 1108static const struct regmap_config rt298_regmap = {
diff --git a/sound/soc/codecs/rt5514.c b/sound/soc/codecs/rt5514.c
index bad41ae40c6d..f24b7cfd3a89 100644
--- a/sound/soc/codecs/rt5514.c
+++ b/sound/soc/codecs/rt5514.c
@@ -1023,12 +1023,14 @@ static struct snd_soc_codec_driver soc_codec_dev_rt5514 = {
1023 .probe = rt5514_probe, 1023 .probe = rt5514_probe,
1024 .idle_bias_off = true, 1024 .idle_bias_off = true,
1025 .set_bias_level = rt5514_set_bias_level, 1025 .set_bias_level = rt5514_set_bias_level,
1026 .controls = rt5514_snd_controls, 1026 .component_driver = {
1027 .num_controls = ARRAY_SIZE(rt5514_snd_controls), 1027 .controls = rt5514_snd_controls,
1028 .dapm_widgets = rt5514_dapm_widgets, 1028 .num_controls = ARRAY_SIZE(rt5514_snd_controls),
1029 .num_dapm_widgets = ARRAY_SIZE(rt5514_dapm_widgets), 1029 .dapm_widgets = rt5514_dapm_widgets,
1030 .dapm_routes = rt5514_dapm_routes, 1030 .num_dapm_widgets = ARRAY_SIZE(rt5514_dapm_widgets),
1031 .num_dapm_routes = ARRAY_SIZE(rt5514_dapm_routes), 1031 .dapm_routes = rt5514_dapm_routes,
1032 .num_dapm_routes = ARRAY_SIZE(rt5514_dapm_routes),
1033 },
1032}; 1034};
1033 1035
1034static const struct regmap_config rt5514_i2c_regmap = { 1036static const struct regmap_config rt5514_i2c_regmap = {
diff --git a/sound/soc/codecs/rt5616.c b/sound/soc/codecs/rt5616.c
index f527b5b2817b..e92a1490fa68 100644
--- a/sound/soc/codecs/rt5616.c
+++ b/sound/soc/codecs/rt5616.c
@@ -1302,12 +1302,14 @@ static struct snd_soc_codec_driver soc_codec_dev_rt5616 = {
1302 .resume = rt5616_resume, 1302 .resume = rt5616_resume,
1303 .set_bias_level = rt5616_set_bias_level, 1303 .set_bias_level = rt5616_set_bias_level,
1304 .idle_bias_off = true, 1304 .idle_bias_off = true,
1305 .controls = rt5616_snd_controls, 1305 .component_driver = {
1306 .num_controls = ARRAY_SIZE(rt5616_snd_controls), 1306 .controls = rt5616_snd_controls,
1307 .dapm_widgets = rt5616_dapm_widgets, 1307 .num_controls = ARRAY_SIZE(rt5616_snd_controls),
1308 .num_dapm_widgets = ARRAY_SIZE(rt5616_dapm_widgets), 1308 .dapm_widgets = rt5616_dapm_widgets,
1309 .dapm_routes = rt5616_dapm_routes, 1309 .num_dapm_widgets = ARRAY_SIZE(rt5616_dapm_widgets),
1310 .num_dapm_routes = ARRAY_SIZE(rt5616_dapm_routes), 1310 .dapm_routes = rt5616_dapm_routes,
1311 .num_dapm_routes = ARRAY_SIZE(rt5616_dapm_routes),
1312 },
1311}; 1313};
1312 1314
1313static const struct regmap_config rt5616_regmap = { 1315static const struct regmap_config rt5616_regmap = {
diff --git a/sound/soc/codecs/rt5631.c b/sound/soc/codecs/rt5631.c
index 1be2bab7dee3..0e418089c053 100644
--- a/sound/soc/codecs/rt5631.c
+++ b/sound/soc/codecs/rt5631.c
@@ -1657,12 +1657,14 @@ static struct snd_soc_codec_driver soc_codec_dev_rt5631 = {
1657 .probe = rt5631_probe, 1657 .probe = rt5631_probe,
1658 .set_bias_level = rt5631_set_bias_level, 1658 .set_bias_level = rt5631_set_bias_level,
1659 .suspend_bias_off = true, 1659 .suspend_bias_off = true,
1660 .controls = rt5631_snd_controls, 1660 .component_driver = {
1661 .num_controls = ARRAY_SIZE(rt5631_snd_controls), 1661 .controls = rt5631_snd_controls,
1662 .dapm_widgets = rt5631_dapm_widgets, 1662 .num_controls = ARRAY_SIZE(rt5631_snd_controls),
1663 .num_dapm_widgets = ARRAY_SIZE(rt5631_dapm_widgets), 1663 .dapm_widgets = rt5631_dapm_widgets,
1664 .dapm_routes = rt5631_dapm_routes, 1664 .num_dapm_widgets = ARRAY_SIZE(rt5631_dapm_widgets),
1665 .num_dapm_routes = ARRAY_SIZE(rt5631_dapm_routes), 1665 .dapm_routes = rt5631_dapm_routes,
1666 .num_dapm_routes = ARRAY_SIZE(rt5631_dapm_routes),
1667 },
1666}; 1668};
1667 1669
1668static const struct i2c_device_id rt5631_i2c_id[] = { 1670static const struct i2c_device_id rt5631_i2c_id[] = {
diff --git a/sound/soc/codecs/rt5640.c b/sound/soc/codecs/rt5640.c
index b0f6f0712ba1..3cc1135fc2cd 100644
--- a/sound/soc/codecs/rt5640.c
+++ b/sound/soc/codecs/rt5640.c
@@ -2264,12 +2264,14 @@ static struct snd_soc_codec_driver soc_codec_dev_rt5640 = {
2264 .resume = rt5640_resume, 2264 .resume = rt5640_resume,
2265 .set_bias_level = rt5640_set_bias_level, 2265 .set_bias_level = rt5640_set_bias_level,
2266 .idle_bias_off = true, 2266 .idle_bias_off = true,
2267 .controls = rt5640_snd_controls, 2267 .component_driver = {
2268 .num_controls = ARRAY_SIZE(rt5640_snd_controls), 2268 .controls = rt5640_snd_controls,
2269 .dapm_widgets = rt5640_dapm_widgets, 2269 .num_controls = ARRAY_SIZE(rt5640_snd_controls),
2270 .num_dapm_widgets = ARRAY_SIZE(rt5640_dapm_widgets), 2270 .dapm_widgets = rt5640_dapm_widgets,
2271 .dapm_routes = rt5640_dapm_routes, 2271 .num_dapm_widgets = ARRAY_SIZE(rt5640_dapm_widgets),
2272 .num_dapm_routes = ARRAY_SIZE(rt5640_dapm_routes), 2272 .dapm_routes = rt5640_dapm_routes,
2273 .num_dapm_routes = ARRAY_SIZE(rt5640_dapm_routes),
2274 },
2273}; 2275};
2274 2276
2275static const struct regmap_config rt5640_regmap = { 2277static const struct regmap_config rt5640_regmap = {
diff --git a/sound/soc/codecs/rt5645.c b/sound/soc/codecs/rt5645.c
index 490bfe661346..10c2a564a715 100644
--- a/sound/soc/codecs/rt5645.c
+++ b/sound/soc/codecs/rt5645.c
@@ -3484,12 +3484,14 @@ static struct snd_soc_codec_driver soc_codec_dev_rt5645 = {
3484 .resume = rt5645_resume, 3484 .resume = rt5645_resume,
3485 .set_bias_level = rt5645_set_bias_level, 3485 .set_bias_level = rt5645_set_bias_level,
3486 .idle_bias_off = true, 3486 .idle_bias_off = true,
3487 .controls = rt5645_snd_controls, 3487 .component_driver = {
3488 .num_controls = ARRAY_SIZE(rt5645_snd_controls), 3488 .controls = rt5645_snd_controls,
3489 .dapm_widgets = rt5645_dapm_widgets, 3489 .num_controls = ARRAY_SIZE(rt5645_snd_controls),
3490 .num_dapm_widgets = ARRAY_SIZE(rt5645_dapm_widgets), 3490 .dapm_widgets = rt5645_dapm_widgets,
3491 .dapm_routes = rt5645_dapm_routes, 3491 .num_dapm_widgets = ARRAY_SIZE(rt5645_dapm_widgets),
3492 .num_dapm_routes = ARRAY_SIZE(rt5645_dapm_routes), 3492 .dapm_routes = rt5645_dapm_routes,
3493 .num_dapm_routes = ARRAY_SIZE(rt5645_dapm_routes),
3494 },
3493}; 3495};
3494 3496
3495static const struct regmap_config rt5645_regmap = { 3497static const struct regmap_config rt5645_regmap = {
diff --git a/sound/soc/codecs/rt5651.c b/sound/soc/codecs/rt5651.c
index 7a6197042423..f5d34153e21f 100644
--- a/sound/soc/codecs/rt5651.c
+++ b/sound/soc/codecs/rt5651.c
@@ -1712,12 +1712,14 @@ static struct snd_soc_codec_driver soc_codec_dev_rt5651 = {
1712 .resume = rt5651_resume, 1712 .resume = rt5651_resume,
1713 .set_bias_level = rt5651_set_bias_level, 1713 .set_bias_level = rt5651_set_bias_level,
1714 .idle_bias_off = true, 1714 .idle_bias_off = true,
1715 .controls = rt5651_snd_controls, 1715 .component_driver = {
1716 .num_controls = ARRAY_SIZE(rt5651_snd_controls), 1716 .controls = rt5651_snd_controls,
1717 .dapm_widgets = rt5651_dapm_widgets, 1717 .num_controls = ARRAY_SIZE(rt5651_snd_controls),
1718 .num_dapm_widgets = ARRAY_SIZE(rt5651_dapm_widgets), 1718 .dapm_widgets = rt5651_dapm_widgets,
1719 .dapm_routes = rt5651_dapm_routes, 1719 .num_dapm_widgets = ARRAY_SIZE(rt5651_dapm_widgets),
1720 .num_dapm_routes = ARRAY_SIZE(rt5651_dapm_routes), 1720 .dapm_routes = rt5651_dapm_routes,
1721 .num_dapm_routes = ARRAY_SIZE(rt5651_dapm_routes),
1722 },
1721}; 1723};
1722 1724
1723static const struct regmap_config rt5651_regmap = { 1725static const struct regmap_config rt5651_regmap = {
diff --git a/sound/soc/codecs/rt5659.c b/sound/soc/codecs/rt5659.c
index 1b30914c2d91..59ddaf34705b 100644
--- a/sound/soc/codecs/rt5659.c
+++ b/sound/soc/codecs/rt5659.c
@@ -3722,12 +3722,14 @@ static struct snd_soc_codec_driver soc_codec_dev_rt5659 = {
3722 .resume = rt5659_resume, 3722 .resume = rt5659_resume,
3723 .set_bias_level = rt5659_set_bias_level, 3723 .set_bias_level = rt5659_set_bias_level,
3724 .idle_bias_off = true, 3724 .idle_bias_off = true,
3725 .controls = rt5659_snd_controls, 3725 .component_driver = {
3726 .num_controls = ARRAY_SIZE(rt5659_snd_controls), 3726 .controls = rt5659_snd_controls,
3727 .dapm_widgets = rt5659_dapm_widgets, 3727 .num_controls = ARRAY_SIZE(rt5659_snd_controls),
3728 .num_dapm_widgets = ARRAY_SIZE(rt5659_dapm_widgets), 3728 .dapm_widgets = rt5659_dapm_widgets,
3729 .dapm_routes = rt5659_dapm_routes, 3729 .num_dapm_widgets = ARRAY_SIZE(rt5659_dapm_widgets),
3730 .num_dapm_routes = ARRAY_SIZE(rt5659_dapm_routes), 3730 .dapm_routes = rt5659_dapm_routes,
3731 .num_dapm_routes = ARRAY_SIZE(rt5659_dapm_routes),
3732 },
3731}; 3733};
3732 3734
3733 3735
diff --git a/sound/soc/codecs/rt5670.c b/sound/soc/codecs/rt5670.c
index 8ef467f64f03..49caf1393aeb 100644
--- a/sound/soc/codecs/rt5670.c
+++ b/sound/soc/codecs/rt5670.c
@@ -2777,12 +2777,14 @@ static struct snd_soc_codec_driver soc_codec_dev_rt5670 = {
2777 .resume = rt5670_resume, 2777 .resume = rt5670_resume,
2778 .set_bias_level = rt5670_set_bias_level, 2778 .set_bias_level = rt5670_set_bias_level,
2779 .idle_bias_off = true, 2779 .idle_bias_off = true,
2780 .controls = rt5670_snd_controls, 2780 .component_driver = {
2781 .num_controls = ARRAY_SIZE(rt5670_snd_controls), 2781 .controls = rt5670_snd_controls,
2782 .dapm_widgets = rt5670_dapm_widgets, 2782 .num_controls = ARRAY_SIZE(rt5670_snd_controls),
2783 .num_dapm_widgets = ARRAY_SIZE(rt5670_dapm_widgets), 2783 .dapm_widgets = rt5670_dapm_widgets,
2784 .dapm_routes = rt5670_dapm_routes, 2784 .num_dapm_widgets = ARRAY_SIZE(rt5670_dapm_widgets),
2785 .num_dapm_routes = ARRAY_SIZE(rt5670_dapm_routes), 2785 .dapm_routes = rt5670_dapm_routes,
2786 .num_dapm_routes = ARRAY_SIZE(rt5670_dapm_routes),
2787 },
2786}; 2788};
2787 2789
2788static const struct regmap_config rt5670_regmap = { 2790static const struct regmap_config rt5670_regmap = {
diff --git a/sound/soc/codecs/rt5677.c b/sound/soc/codecs/rt5677.c
index da9483c1c6fb..68268f2d68ca 100644
--- a/sound/soc/codecs/rt5677.c
+++ b/sound/soc/codecs/rt5677.c
@@ -4974,12 +4974,14 @@ static struct snd_soc_codec_driver soc_codec_dev_rt5677 = {
4974 .resume = rt5677_resume, 4974 .resume = rt5677_resume,
4975 .set_bias_level = rt5677_set_bias_level, 4975 .set_bias_level = rt5677_set_bias_level,
4976 .idle_bias_off = true, 4976 .idle_bias_off = true,
4977 .controls = rt5677_snd_controls, 4977 .component_driver = {
4978 .num_controls = ARRAY_SIZE(rt5677_snd_controls), 4978 .controls = rt5677_snd_controls,
4979 .dapm_widgets = rt5677_dapm_widgets, 4979 .num_controls = ARRAY_SIZE(rt5677_snd_controls),
4980 .num_dapm_widgets = ARRAY_SIZE(rt5677_dapm_widgets), 4980 .dapm_widgets = rt5677_dapm_widgets,
4981 .dapm_routes = rt5677_dapm_routes, 4981 .num_dapm_widgets = ARRAY_SIZE(rt5677_dapm_widgets),
4982 .num_dapm_routes = ARRAY_SIZE(rt5677_dapm_routes), 4982 .dapm_routes = rt5677_dapm_routes,
4983 .num_dapm_routes = ARRAY_SIZE(rt5677_dapm_routes),
4984 },
4983}; 4985};
4984 4986
4985static const struct regmap_config rt5677_regmap_physical = { 4987static const struct regmap_config rt5677_regmap_physical = {
diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c
index 527b759c1562..a635bd09d637 100644
--- a/sound/soc/codecs/sgtl5000.c
+++ b/sound/soc/codecs/sgtl5000.c
@@ -1151,12 +1151,14 @@ static struct snd_soc_codec_driver sgtl5000_driver = {
1151 .remove = sgtl5000_remove, 1151 .remove = sgtl5000_remove,
1152 .set_bias_level = sgtl5000_set_bias_level, 1152 .set_bias_level = sgtl5000_set_bias_level,
1153 .suspend_bias_off = true, 1153 .suspend_bias_off = true,
1154 .controls = sgtl5000_snd_controls, 1154 .component_driver = {
1155 .num_controls = ARRAY_SIZE(sgtl5000_snd_controls), 1155 .controls = sgtl5000_snd_controls,
1156 .dapm_widgets = sgtl5000_dapm_widgets, 1156 .num_controls = ARRAY_SIZE(sgtl5000_snd_controls),
1157 .num_dapm_widgets = ARRAY_SIZE(sgtl5000_dapm_widgets), 1157 .dapm_widgets = sgtl5000_dapm_widgets,
1158 .dapm_routes = sgtl5000_dapm_routes, 1158 .num_dapm_widgets = ARRAY_SIZE(sgtl5000_dapm_widgets),
1159 .num_dapm_routes = ARRAY_SIZE(sgtl5000_dapm_routes), 1159 .dapm_routes = sgtl5000_dapm_routes,
1160 .num_dapm_routes = ARRAY_SIZE(sgtl5000_dapm_routes),
1161 },
1160}; 1162};
1161 1163
1162static const struct regmap_config sgtl5000_regmap = { 1164static const struct regmap_config sgtl5000_regmap = {
diff --git a/sound/soc/codecs/si476x.c b/sound/soc/codecs/si476x.c
index a8402d0af0ea..5344f4aa8fde 100644
--- a/sound/soc/codecs/si476x.c
+++ b/sound/soc/codecs/si476x.c
@@ -238,10 +238,12 @@ static struct regmap *si476x_get_regmap(struct device *dev)
238 238
239static struct snd_soc_codec_driver soc_codec_dev_si476x = { 239static struct snd_soc_codec_driver soc_codec_dev_si476x = {
240 .get_regmap = si476x_get_regmap, 240 .get_regmap = si476x_get_regmap,
241 .dapm_widgets = si476x_dapm_widgets, 241 .component_driver = {
242 .num_dapm_widgets = ARRAY_SIZE(si476x_dapm_widgets), 242 .dapm_widgets = si476x_dapm_widgets,
243 .dapm_routes = si476x_dapm_routes, 243 .num_dapm_widgets = ARRAY_SIZE(si476x_dapm_widgets),
244 .num_dapm_routes = ARRAY_SIZE(si476x_dapm_routes), 244 .dapm_routes = si476x_dapm_routes,
245 .num_dapm_routes = ARRAY_SIZE(si476x_dapm_routes),
246 },
245}; 247};
246 248
247static int si476x_platform_probe(struct platform_device *pdev) 249static int si476x_platform_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/sn95031.c b/sound/soc/codecs/sn95031.c
index 3a7de0159f24..eae54c37cff9 100644
--- a/sound/soc/codecs/sn95031.c
+++ b/sound/soc/codecs/sn95031.c
@@ -888,12 +888,14 @@ static struct snd_soc_codec_driver sn95031_codec = {
888 .set_bias_level = sn95031_set_vaud_bias, 888 .set_bias_level = sn95031_set_vaud_bias,
889 .idle_bias_off = true, 889 .idle_bias_off = true,
890 890
891 .controls = sn95031_snd_controls, 891 .component_driver = {
892 .num_controls = ARRAY_SIZE(sn95031_snd_controls), 892 .controls = sn95031_snd_controls,
893 .dapm_widgets = sn95031_dapm_widgets, 893 .num_controls = ARRAY_SIZE(sn95031_snd_controls),
894 .num_dapm_widgets = ARRAY_SIZE(sn95031_dapm_widgets), 894 .dapm_widgets = sn95031_dapm_widgets,
895 .dapm_routes = sn95031_audio_map, 895 .num_dapm_widgets = ARRAY_SIZE(sn95031_dapm_widgets),
896 .num_dapm_routes = ARRAY_SIZE(sn95031_audio_map), 896 .dapm_routes = sn95031_audio_map,
897 .num_dapm_routes = ARRAY_SIZE(sn95031_audio_map),
898 },
897}; 899};
898 900
899static int sn95031_device_probe(struct platform_device *pdev) 901static int sn95031_device_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/spdif_receiver.c b/sound/soc/codecs/spdif_receiver.c
index 3ec41ccbf4e2..234f87b54838 100644
--- a/sound/soc/codecs/spdif_receiver.c
+++ b/sound/soc/codecs/spdif_receiver.c
@@ -38,10 +38,12 @@ static const struct snd_soc_dapm_route dir_routes[] = {
38 SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE) 38 SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE)
39 39
40static struct snd_soc_codec_driver soc_codec_spdif_dir = { 40static struct snd_soc_codec_driver soc_codec_spdif_dir = {
41 .dapm_widgets = dir_widgets, 41 .component_driver = {
42 .num_dapm_widgets = ARRAY_SIZE(dir_widgets), 42 .dapm_widgets = dir_widgets,
43 .dapm_routes = dir_routes, 43 .num_dapm_widgets = ARRAY_SIZE(dir_widgets),
44 .num_dapm_routes = ARRAY_SIZE(dir_routes), 44 .dapm_routes = dir_routes,
45 .num_dapm_routes = ARRAY_SIZE(dir_routes),
46 },
45}; 47};
46 48
47static struct snd_soc_dai_driver dir_stub_dai = { 49static struct snd_soc_dai_driver dir_stub_dai = {
diff --git a/sound/soc/codecs/spdif_transmitter.c b/sound/soc/codecs/spdif_transmitter.c
index ef634a9ad673..ee367536a498 100644
--- a/sound/soc/codecs/spdif_transmitter.c
+++ b/sound/soc/codecs/spdif_transmitter.c
@@ -38,10 +38,12 @@ static const struct snd_soc_dapm_route dit_routes[] = {
38}; 38};
39 39
40static struct snd_soc_codec_driver soc_codec_spdif_dit = { 40static struct snd_soc_codec_driver soc_codec_spdif_dit = {
41 .dapm_widgets = dit_widgets, 41 .component_driver = {
42 .num_dapm_widgets = ARRAY_SIZE(dit_widgets), 42 .dapm_widgets = dit_widgets,
43 .dapm_routes = dit_routes, 43 .num_dapm_widgets = ARRAY_SIZE(dit_widgets),
44 .num_dapm_routes = ARRAY_SIZE(dit_routes), 44 .dapm_routes = dit_routes,
45 .num_dapm_routes = ARRAY_SIZE(dit_routes),
46 },
45}; 47};
46 48
47static struct snd_soc_dai_driver dit_stub_dai = { 49static struct snd_soc_dai_driver dit_stub_dai = {
diff --git a/sound/soc/codecs/ssm2518.c b/sound/soc/codecs/ssm2518.c
index e2e0bfa7ec20..38a85f3adc80 100644
--- a/sound/soc/codecs/ssm2518.c
+++ b/sound/soc/codecs/ssm2518.c
@@ -715,12 +715,14 @@ static struct snd_soc_codec_driver ssm2518_codec_driver = {
715 .set_sysclk = ssm2518_set_sysclk, 715 .set_sysclk = ssm2518_set_sysclk,
716 .idle_bias_off = true, 716 .idle_bias_off = true,
717 717
718 .controls = ssm2518_snd_controls, 718 .component_driver = {
719 .num_controls = ARRAY_SIZE(ssm2518_snd_controls), 719 .controls = ssm2518_snd_controls,
720 .dapm_widgets = ssm2518_dapm_widgets, 720 .num_controls = ARRAY_SIZE(ssm2518_snd_controls),
721 .num_dapm_widgets = ARRAY_SIZE(ssm2518_dapm_widgets), 721 .dapm_widgets = ssm2518_dapm_widgets,
722 .dapm_routes = ssm2518_routes, 722 .num_dapm_widgets = ARRAY_SIZE(ssm2518_dapm_widgets),
723 .num_dapm_routes = ARRAY_SIZE(ssm2518_routes), 723 .dapm_routes = ssm2518_routes,
724 .num_dapm_routes = ARRAY_SIZE(ssm2518_routes),
725 },
724}; 726};
725 727
726static const struct regmap_config ssm2518_regmap_config = { 728static const struct regmap_config ssm2518_regmap_config = {
diff --git a/sound/soc/codecs/ssm2602.c b/sound/soc/codecs/ssm2602.c
index 4452fea0b118..993bde29ca1b 100644
--- a/sound/soc/codecs/ssm2602.c
+++ b/sound/soc/codecs/ssm2602.c
@@ -597,12 +597,14 @@ static struct snd_soc_codec_driver soc_codec_dev_ssm2602 = {
597 .set_bias_level = ssm2602_set_bias_level, 597 .set_bias_level = ssm2602_set_bias_level,
598 .suspend_bias_off = true, 598 .suspend_bias_off = true,
599 599
600 .controls = ssm260x_snd_controls, 600 .component_driver = {
601 .num_controls = ARRAY_SIZE(ssm260x_snd_controls), 601 .controls = ssm260x_snd_controls,
602 .dapm_widgets = ssm260x_dapm_widgets, 602 .num_controls = ARRAY_SIZE(ssm260x_snd_controls),
603 .num_dapm_widgets = ARRAY_SIZE(ssm260x_dapm_widgets), 603 .dapm_widgets = ssm260x_dapm_widgets,
604 .dapm_routes = ssm260x_routes, 604 .num_dapm_widgets = ARRAY_SIZE(ssm260x_dapm_widgets),
605 .num_dapm_routes = ARRAY_SIZE(ssm260x_routes), 605 .dapm_routes = ssm260x_routes,
606 .num_dapm_routes = ARRAY_SIZE(ssm260x_routes),
607 },
606}; 608};
607 609
608static bool ssm2602_register_volatile(struct device *dev, unsigned int reg) 610static bool ssm2602_register_volatile(struct device *dev, unsigned int reg)
diff --git a/sound/soc/codecs/ssm4567.c b/sound/soc/codecs/ssm4567.c
index 080c78e88e10..2bb5a11c9ba1 100644
--- a/sound/soc/codecs/ssm4567.c
+++ b/sound/soc/codecs/ssm4567.c
@@ -421,12 +421,14 @@ static struct snd_soc_codec_driver ssm4567_codec_driver = {
421 .set_bias_level = ssm4567_set_bias_level, 421 .set_bias_level = ssm4567_set_bias_level,
422 .idle_bias_off = true, 422 .idle_bias_off = true,
423 423
424 .controls = ssm4567_snd_controls, 424 .component_driver = {
425 .num_controls = ARRAY_SIZE(ssm4567_snd_controls), 425 .controls = ssm4567_snd_controls,
426 .dapm_widgets = ssm4567_dapm_widgets, 426 .num_controls = ARRAY_SIZE(ssm4567_snd_controls),
427 .num_dapm_widgets = ARRAY_SIZE(ssm4567_dapm_widgets), 427 .dapm_widgets = ssm4567_dapm_widgets,
428 .dapm_routes = ssm4567_routes, 428 .num_dapm_widgets = ARRAY_SIZE(ssm4567_dapm_widgets),
429 .num_dapm_routes = ARRAY_SIZE(ssm4567_routes), 429 .dapm_routes = ssm4567_routes,
430 .num_dapm_routes = ARRAY_SIZE(ssm4567_routes),
431 },
430}; 432};
431 433
432static const struct regmap_config ssm4567_regmap_config = { 434static const struct regmap_config ssm4567_regmap_config = {
diff --git a/sound/soc/codecs/sta32x.c b/sound/soc/codecs/sta32x.c
index a9844b2ac829..0790ae8530d9 100644
--- a/sound/soc/codecs/sta32x.c
+++ b/sound/soc/codecs/sta32x.c
@@ -991,12 +991,14 @@ static const struct snd_soc_codec_driver sta32x_codec = {
991 .remove = sta32x_remove, 991 .remove = sta32x_remove,
992 .set_bias_level = sta32x_set_bias_level, 992 .set_bias_level = sta32x_set_bias_level,
993 .suspend_bias_off = true, 993 .suspend_bias_off = true,
994 .controls = sta32x_snd_controls, 994 .component_driver = {
995 .num_controls = ARRAY_SIZE(sta32x_snd_controls), 995 .controls = sta32x_snd_controls,
996 .dapm_widgets = sta32x_dapm_widgets, 996 .num_controls = ARRAY_SIZE(sta32x_snd_controls),
997 .num_dapm_widgets = ARRAY_SIZE(sta32x_dapm_widgets), 997 .dapm_widgets = sta32x_dapm_widgets,
998 .dapm_routes = sta32x_dapm_routes, 998 .num_dapm_widgets = ARRAY_SIZE(sta32x_dapm_widgets),
999 .num_dapm_routes = ARRAY_SIZE(sta32x_dapm_routes), 999 .dapm_routes = sta32x_dapm_routes,
1000 .num_dapm_routes = ARRAY_SIZE(sta32x_dapm_routes),
1001 },
1000}; 1002};
1001 1003
1002static const struct regmap_config sta32x_regmap = { 1004static const struct regmap_config sta32x_regmap = {
diff --git a/sound/soc/codecs/sta350.c b/sound/soc/codecs/sta350.c
index 33a4612f0a07..9644c20f44e3 100644
--- a/sound/soc/codecs/sta350.c
+++ b/sound/soc/codecs/sta350.c
@@ -1057,12 +1057,14 @@ static const struct snd_soc_codec_driver sta350_codec = {
1057 .remove = sta350_remove, 1057 .remove = sta350_remove,
1058 .set_bias_level = sta350_set_bias_level, 1058 .set_bias_level = sta350_set_bias_level,
1059 .suspend_bias_off = true, 1059 .suspend_bias_off = true,
1060 .controls = sta350_snd_controls, 1060 .component_driver = {
1061 .num_controls = ARRAY_SIZE(sta350_snd_controls), 1061 .controls = sta350_snd_controls,
1062 .dapm_widgets = sta350_dapm_widgets, 1062 .num_controls = ARRAY_SIZE(sta350_snd_controls),
1063 .num_dapm_widgets = ARRAY_SIZE(sta350_dapm_widgets), 1063 .dapm_widgets = sta350_dapm_widgets,
1064 .dapm_routes = sta350_dapm_routes, 1064 .num_dapm_widgets = ARRAY_SIZE(sta350_dapm_widgets),
1065 .num_dapm_routes = ARRAY_SIZE(sta350_dapm_routes), 1065 .dapm_routes = sta350_dapm_routes,
1066 .num_dapm_routes = ARRAY_SIZE(sta350_dapm_routes),
1067 },
1066}; 1068};
1067 1069
1068static const struct regmap_config sta350_regmap = { 1070static const struct regmap_config sta350_regmap = {
diff --git a/sound/soc/codecs/sta529.c b/sound/soc/codecs/sta529.c
index 2cdaca943a8c..d4b384e4b266 100644
--- a/sound/soc/codecs/sta529.c
+++ b/sound/soc/codecs/sta529.c
@@ -317,8 +317,10 @@ static const struct snd_soc_codec_driver sta529_codec_driver = {
317 .set_bias_level = sta529_set_bias_level, 317 .set_bias_level = sta529_set_bias_level,
318 .suspend_bias_off = true, 318 .suspend_bias_off = true,
319 319
320 .controls = sta529_snd_controls, 320 .component_driver = {
321 .num_controls = ARRAY_SIZE(sta529_snd_controls), 321 .controls = sta529_snd_controls,
322 .num_controls = ARRAY_SIZE(sta529_snd_controls),
323 },
322}; 324};
323 325
324static const struct regmap_config sta529_regmap = { 326static const struct regmap_config sta529_regmap = {
diff --git a/sound/soc/codecs/stac9766.c b/sound/soc/codecs/stac9766.c
index 0945c51df003..2c5941f3a234 100644
--- a/sound/soc/codecs/stac9766.c
+++ b/sound/soc/codecs/stac9766.c
@@ -320,8 +320,10 @@ static int stac9766_codec_remove(struct snd_soc_codec *codec)
320} 320}
321 321
322static struct snd_soc_codec_driver soc_codec_dev_stac9766 = { 322static struct snd_soc_codec_driver soc_codec_dev_stac9766 = {
323 .controls = stac9766_snd_ac97_controls, 323 .component_driver = {
324 .num_controls = ARRAY_SIZE(stac9766_snd_ac97_controls), 324 .controls = stac9766_snd_ac97_controls,
325 .num_controls = ARRAY_SIZE(stac9766_snd_ac97_controls),
326 },
325 .write = stac9766_ac97_write, 327 .write = stac9766_ac97_write,
326 .read = stac9766_ac97_read, 328 .read = stac9766_ac97_read,
327 .set_bias_level = stac9766_set_bias_level, 329 .set_bias_level = stac9766_set_bias_level,
diff --git a/sound/soc/codecs/sti-sas.c b/sound/soc/codecs/sti-sas.c
index 160d61a66204..7b31ee9b82bc 100644
--- a/sound/soc/codecs/sti-sas.c
+++ b/sound/soc/codecs/sti-sas.c
@@ -591,11 +591,11 @@ static int sti_sas_driver_probe(struct platform_device *pdev)
591 sti_sas_dai[STI_SAS_DAI_ANALOG_OUT].ops = drvdata->dev_data->dac_ops; 591 sti_sas_dai[STI_SAS_DAI_ANALOG_OUT].ops = drvdata->dev_data->dac_ops;
592 592
593 /* Set dapms*/ 593 /* Set dapms*/
594 sti_sas_driver.dapm_widgets = drvdata->dev_data->dapm_widgets; 594 sti_sas_driver.component_driver.dapm_widgets = drvdata->dev_data->dapm_widgets;
595 sti_sas_driver.num_dapm_widgets = drvdata->dev_data->num_dapm_widgets; 595 sti_sas_driver.component_driver.num_dapm_widgets = drvdata->dev_data->num_dapm_widgets;
596 596
597 sti_sas_driver.dapm_routes = drvdata->dev_data->dapm_routes; 597 sti_sas_driver.component_driver.dapm_routes = drvdata->dev_data->dapm_routes;
598 sti_sas_driver.num_dapm_routes = drvdata->dev_data->num_dapm_routes; 598 sti_sas_driver.component_driver.num_dapm_routes = drvdata->dev_data->num_dapm_routes;
599 599
600 /* Store context */ 600 /* Store context */
601 dev_set_drvdata(&pdev->dev, drvdata); 601 dev_set_drvdata(&pdev->dev, drvdata);
diff --git a/sound/soc/codecs/tas2552.c b/sound/soc/codecs/tas2552.c
index cc1d3981fa4b..baf455e8c2f7 100644
--- a/sound/soc/codecs/tas2552.c
+++ b/sound/soc/codecs/tas2552.c
@@ -667,12 +667,14 @@ static struct snd_soc_codec_driver soc_codec_dev_tas2552 = {
667 .resume = tas2552_resume, 667 .resume = tas2552_resume,
668 .ignore_pmdown_time = true, 668 .ignore_pmdown_time = true,
669 669
670 .controls = tas2552_snd_controls, 670 .component_driver = {
671 .num_controls = ARRAY_SIZE(tas2552_snd_controls), 671 .controls = tas2552_snd_controls,
672 .dapm_widgets = tas2552_dapm_widgets, 672 .num_controls = ARRAY_SIZE(tas2552_snd_controls),
673 .num_dapm_widgets = ARRAY_SIZE(tas2552_dapm_widgets), 673 .dapm_widgets = tas2552_dapm_widgets,
674 .dapm_routes = tas2552_audio_map, 674 .num_dapm_widgets = ARRAY_SIZE(tas2552_dapm_widgets),
675 .num_dapm_routes = ARRAY_SIZE(tas2552_audio_map), 675 .dapm_routes = tas2552_audio_map,
676 .num_dapm_routes = ARRAY_SIZE(tas2552_audio_map),
677 },
676}; 678};
677 679
678static const struct regmap_config tas2552_regmap_config = { 680static const struct regmap_config tas2552_regmap_config = {
diff --git a/sound/soc/codecs/tas5086.c b/sound/soc/codecs/tas5086.c
index d49d25d51957..c297b9fc8bf6 100644
--- a/sound/soc/codecs/tas5086.c
+++ b/sound/soc/codecs/tas5086.c
@@ -890,12 +890,14 @@ static struct snd_soc_codec_driver soc_codec_dev_tas5086 = {
890 .remove = tas5086_remove, 890 .remove = tas5086_remove,
891 .suspend = tas5086_soc_suspend, 891 .suspend = tas5086_soc_suspend,
892 .resume = tas5086_soc_resume, 892 .resume = tas5086_soc_resume,
893 .controls = tas5086_controls, 893 .component_driver = {
894 .num_controls = ARRAY_SIZE(tas5086_controls), 894 .controls = tas5086_controls,
895 .dapm_widgets = tas5086_dapm_widgets, 895 .num_controls = ARRAY_SIZE(tas5086_controls),
896 .num_dapm_widgets = ARRAY_SIZE(tas5086_dapm_widgets), 896 .dapm_widgets = tas5086_dapm_widgets,
897 .dapm_routes = tas5086_dapm_routes, 897 .num_dapm_widgets = ARRAY_SIZE(tas5086_dapm_widgets),
898 .num_dapm_routes = ARRAY_SIZE(tas5086_dapm_routes), 898 .dapm_routes = tas5086_dapm_routes,
899 .num_dapm_routes = ARRAY_SIZE(tas5086_dapm_routes),
900 },
899}; 901};
900 902
901static const struct i2c_device_id tas5086_i2c_id[] = { 903static const struct i2c_device_id tas5086_i2c_id[] = {
diff --git a/sound/soc/codecs/tas571x.c b/sound/soc/codecs/tas571x.c
index d8baca3f8413..df5e5cb33baa 100644
--- a/sound/soc/codecs/tas571x.c
+++ b/sound/soc/codecs/tas571x.c
@@ -658,10 +658,12 @@ static const struct snd_soc_codec_driver tas571x_codec = {
658 .set_bias_level = tas571x_set_bias_level, 658 .set_bias_level = tas571x_set_bias_level,
659 .idle_bias_off = true, 659 .idle_bias_off = true,
660 660
661 .dapm_widgets = tas571x_dapm_widgets, 661 .component_driver = {
662 .num_dapm_widgets = ARRAY_SIZE(tas571x_dapm_widgets), 662 .dapm_widgets = tas571x_dapm_widgets,
663 .dapm_routes = tas571x_dapm_routes, 663 .num_dapm_widgets = ARRAY_SIZE(tas571x_dapm_widgets),
664 .num_dapm_routes = ARRAY_SIZE(tas571x_dapm_routes), 664 .dapm_routes = tas571x_dapm_routes,
665 .num_dapm_routes = ARRAY_SIZE(tas571x_dapm_routes),
666 },
665}; 667};
666 668
667static struct snd_soc_dai_driver tas571x_dai = { 669static struct snd_soc_dai_driver tas571x_dai = {
@@ -754,8 +756,8 @@ static int tas571x_i2c_probe(struct i2c_client *client,
754 756
755 757
756 memcpy(&priv->codec_driver, &tas571x_codec, sizeof(priv->codec_driver)); 758 memcpy(&priv->codec_driver, &tas571x_codec, sizeof(priv->codec_driver));
757 priv->codec_driver.controls = priv->chip->controls; 759 priv->codec_driver.component_driver.controls = priv->chip->controls;
758 priv->codec_driver.num_controls = priv->chip->num_controls; 760 priv->codec_driver.component_driver.num_controls = priv->chip->num_controls;
759 761
760 if (priv->chip->vol_reg_size == 2) { 762 if (priv->chip->vol_reg_size == 2) {
761 /* 763 /*
diff --git a/sound/soc/codecs/tas5720.c b/sound/soc/codecs/tas5720.c
index f54fb46b77c2..c65b917598d2 100644
--- a/sound/soc/codecs/tas5720.c
+++ b/sound/soc/codecs/tas5720.c
@@ -489,12 +489,14 @@ static struct snd_soc_codec_driver soc_codec_dev_tas5720 = {
489 .suspend = tas5720_suspend, 489 .suspend = tas5720_suspend,
490 .resume = tas5720_resume, 490 .resume = tas5720_resume,
491 491
492 .controls = tas5720_snd_controls, 492 .component_driver = {
493 .num_controls = ARRAY_SIZE(tas5720_snd_controls), 493 .controls = tas5720_snd_controls,
494 .dapm_widgets = tas5720_dapm_widgets, 494 .num_controls = ARRAY_SIZE(tas5720_snd_controls),
495 .num_dapm_widgets = ARRAY_SIZE(tas5720_dapm_widgets), 495 .dapm_widgets = tas5720_dapm_widgets,
496 .dapm_routes = tas5720_audio_map, 496 .num_dapm_widgets = ARRAY_SIZE(tas5720_dapm_widgets),
497 .num_dapm_routes = ARRAY_SIZE(tas5720_audio_map), 497 .dapm_routes = tas5720_audio_map,
498 .num_dapm_routes = ARRAY_SIZE(tas5720_audio_map),
499 },
498}; 500};
499 501
500/* PCM rates supported by the TAS5720 driver */ 502/* PCM rates supported by the TAS5720 driver */
diff --git a/sound/soc/codecs/tfa9879.c b/sound/soc/codecs/tfa9879.c
index cb5310d89c0f..95e0a7abeb7a 100644
--- a/sound/soc/codecs/tfa9879.c
+++ b/sound/soc/codecs/tfa9879.c
@@ -231,13 +231,14 @@ static const struct snd_soc_dapm_route tfa9879_dapm_routes[] = {
231}; 231};
232 232
233static const struct snd_soc_codec_driver tfa9879_codec = { 233static const struct snd_soc_codec_driver tfa9879_codec = {
234 .controls = tfa9879_controls, 234 .component_driver = {
235 .num_controls = ARRAY_SIZE(tfa9879_controls), 235 .controls = tfa9879_controls,
236 236 .num_controls = ARRAY_SIZE(tfa9879_controls),
237 .dapm_widgets = tfa9879_dapm_widgets, 237 .dapm_widgets = tfa9879_dapm_widgets,
238 .num_dapm_widgets = ARRAY_SIZE(tfa9879_dapm_widgets), 238 .num_dapm_widgets = ARRAY_SIZE(tfa9879_dapm_widgets),
239 .dapm_routes = tfa9879_dapm_routes, 239 .dapm_routes = tfa9879_dapm_routes,
240 .num_dapm_routes = ARRAY_SIZE(tfa9879_dapm_routes), 240 .num_dapm_routes = ARRAY_SIZE(tfa9879_dapm_routes),
241 },
241}; 242};
242 243
243static const struct regmap_config tfa9879_regmap = { 244static const struct regmap_config tfa9879_regmap = {
diff --git a/sound/soc/codecs/tlv320aic23.c b/sound/soc/codecs/tlv320aic23.c
index cd8c02b6e4de..410cae0f2060 100644
--- a/sound/soc/codecs/tlv320aic23.c
+++ b/sound/soc/codecs/tlv320aic23.c
@@ -583,12 +583,14 @@ static struct snd_soc_codec_driver soc_codec_dev_tlv320aic23 = {
583 .set_bias_level = tlv320aic23_set_bias_level, 583 .set_bias_level = tlv320aic23_set_bias_level,
584 .suspend_bias_off = true, 584 .suspend_bias_off = true,
585 585
586 .controls = tlv320aic23_snd_controls, 586 .component_driver = {
587 .num_controls = ARRAY_SIZE(tlv320aic23_snd_controls), 587 .controls = tlv320aic23_snd_controls,
588 .dapm_widgets = tlv320aic23_dapm_widgets, 588 .num_controls = ARRAY_SIZE(tlv320aic23_snd_controls),
589 .num_dapm_widgets = ARRAY_SIZE(tlv320aic23_dapm_widgets), 589 .dapm_widgets = tlv320aic23_dapm_widgets,
590 .dapm_routes = tlv320aic23_intercon, 590 .num_dapm_widgets = ARRAY_SIZE(tlv320aic23_dapm_widgets),
591 .num_dapm_routes = ARRAY_SIZE(tlv320aic23_intercon), 591 .dapm_routes = tlv320aic23_intercon,
592 .num_dapm_routes = ARRAY_SIZE(tlv320aic23_intercon),
593 },
592}; 594};
593 595
594int tlv320aic23_probe(struct device *dev, struct regmap *regmap) 596int tlv320aic23_probe(struct device *dev, struct regmap *regmap)
diff --git a/sound/soc/codecs/tlv320aic26.c b/sound/soc/codecs/tlv320aic26.c
index 2c904d7150ad..14aa96d41719 100644
--- a/sound/soc/codecs/tlv320aic26.c
+++ b/sound/soc/codecs/tlv320aic26.c
@@ -321,12 +321,14 @@ static int aic26_probe(struct snd_soc_codec *codec)
321 321
322static struct snd_soc_codec_driver aic26_soc_codec_dev = { 322static struct snd_soc_codec_driver aic26_soc_codec_dev = {
323 .probe = aic26_probe, 323 .probe = aic26_probe,
324 .controls = aic26_snd_controls, 324 .component_driver = {
325 .num_controls = ARRAY_SIZE(aic26_snd_controls), 325 .controls = aic26_snd_controls,
326 .dapm_widgets = tlv320aic26_dapm_widgets, 326 .num_controls = ARRAY_SIZE(aic26_snd_controls),
327 .num_dapm_widgets = ARRAY_SIZE(tlv320aic26_dapm_widgets), 327 .dapm_widgets = tlv320aic26_dapm_widgets,
328 .dapm_routes = tlv320aic26_dapm_routes, 328 .num_dapm_widgets = ARRAY_SIZE(tlv320aic26_dapm_widgets),
329 .num_dapm_routes = ARRAY_SIZE(tlv320aic26_dapm_routes), 329 .dapm_routes = tlv320aic26_dapm_routes,
330 .num_dapm_routes = ARRAY_SIZE(tlv320aic26_dapm_routes),
331 },
330}; 332};
331 333
332static const struct regmap_config aic26_regmap = { 334static const struct regmap_config aic26_regmap = {
diff --git a/sound/soc/codecs/tlv320aic31xx.c b/sound/soc/codecs/tlv320aic31xx.c
index 3c5e1df01c19..e46fb472e48d 100644
--- a/sound/soc/codecs/tlv320aic31xx.c
+++ b/sound/soc/codecs/tlv320aic31xx.c
@@ -1114,12 +1114,14 @@ static struct snd_soc_codec_driver soc_codec_driver_aic31xx = {
1114 .set_bias_level = aic31xx_set_bias_level, 1114 .set_bias_level = aic31xx_set_bias_level,
1115 .suspend_bias_off = true, 1115 .suspend_bias_off = true,
1116 1116
1117 .controls = aic31xx_snd_controls, 1117 .component_driver = {
1118 .num_controls = ARRAY_SIZE(aic31xx_snd_controls), 1118 .controls = aic31xx_snd_controls,
1119 .dapm_widgets = aic31xx_dapm_widgets, 1119 .num_controls = ARRAY_SIZE(aic31xx_snd_controls),
1120 .num_dapm_widgets = ARRAY_SIZE(aic31xx_dapm_widgets), 1120 .dapm_widgets = aic31xx_dapm_widgets,
1121 .dapm_routes = aic31xx_audio_map, 1121 .num_dapm_widgets = ARRAY_SIZE(aic31xx_dapm_widgets),
1122 .num_dapm_routes = ARRAY_SIZE(aic31xx_audio_map), 1122 .dapm_routes = aic31xx_audio_map,
1123 .num_dapm_routes = ARRAY_SIZE(aic31xx_audio_map),
1124 },
1123}; 1125};
1124 1126
1125static const struct snd_soc_dai_ops aic31xx_dai_ops = { 1127static const struct snd_soc_dai_ops aic31xx_dai_ops = {
diff --git a/sound/soc/codecs/tlv320aic32x4.c b/sound/soc/codecs/tlv320aic32x4.c
index 85d4978d0384..28fdfc5ec544 100644
--- a/sound/soc/codecs/tlv320aic32x4.c
+++ b/sound/soc/codecs/tlv320aic32x4.c
@@ -797,12 +797,14 @@ static struct snd_soc_codec_driver soc_codec_dev_aic32x4 = {
797 .set_bias_level = aic32x4_set_bias_level, 797 .set_bias_level = aic32x4_set_bias_level,
798 .suspend_bias_off = true, 798 .suspend_bias_off = true,
799 799
800 .controls = aic32x4_snd_controls, 800 .component_driver = {
801 .num_controls = ARRAY_SIZE(aic32x4_snd_controls), 801 .controls = aic32x4_snd_controls,
802 .dapm_widgets = aic32x4_dapm_widgets, 802 .num_controls = ARRAY_SIZE(aic32x4_snd_controls),
803 .num_dapm_widgets = ARRAY_SIZE(aic32x4_dapm_widgets), 803 .dapm_widgets = aic32x4_dapm_widgets,
804 .dapm_routes = aic32x4_dapm_routes, 804 .num_dapm_widgets = ARRAY_SIZE(aic32x4_dapm_widgets),
805 .num_dapm_routes = ARRAY_SIZE(aic32x4_dapm_routes), 805 .dapm_routes = aic32x4_dapm_routes,
806 .num_dapm_routes = ARRAY_SIZE(aic32x4_dapm_routes),
807 },
806}; 808};
807 809
808static int aic32x4_parse_dt(struct aic32x4_priv *aic32x4, 810static int aic32x4_parse_dt(struct aic32x4_priv *aic32x4,
diff --git a/sound/soc/codecs/tlv320aic3x.c b/sound/soc/codecs/tlv320aic3x.c
index a564759845f9..5a8d96ec058c 100644
--- a/sound/soc/codecs/tlv320aic3x.c
+++ b/sound/soc/codecs/tlv320aic3x.c
@@ -1670,12 +1670,14 @@ static struct snd_soc_codec_driver soc_codec_dev_aic3x = {
1670 .idle_bias_off = true, 1670 .idle_bias_off = true,
1671 .probe = aic3x_probe, 1671 .probe = aic3x_probe,
1672 .remove = aic3x_remove, 1672 .remove = aic3x_remove,
1673 .controls = aic3x_snd_controls, 1673 .component_driver = {
1674 .num_controls = ARRAY_SIZE(aic3x_snd_controls), 1674 .controls = aic3x_snd_controls,
1675 .dapm_widgets = aic3x_dapm_widgets, 1675 .num_controls = ARRAY_SIZE(aic3x_snd_controls),
1676 .num_dapm_widgets = ARRAY_SIZE(aic3x_dapm_widgets), 1676 .dapm_widgets = aic3x_dapm_widgets,
1677 .dapm_routes = intercon, 1677 .num_dapm_widgets = ARRAY_SIZE(aic3x_dapm_widgets),
1678 .num_dapm_routes = ARRAY_SIZE(intercon), 1678 .dapm_routes = intercon,
1679 .num_dapm_routes = ARRAY_SIZE(intercon),
1680 },
1679}; 1681};
1680 1682
1681/* 1683/*
diff --git a/sound/soc/codecs/tlv320dac33.c b/sound/soc/codecs/tlv320dac33.c
index f7a6ce7e5fb1..d64eac74d1cc 100644
--- a/sound/soc/codecs/tlv320dac33.c
+++ b/sound/soc/codecs/tlv320dac33.c
@@ -1453,12 +1453,14 @@ static struct snd_soc_codec_driver soc_codec_dev_tlv320dac33 = {
1453 .probe = dac33_soc_probe, 1453 .probe = dac33_soc_probe,
1454 .remove = dac33_soc_remove, 1454 .remove = dac33_soc_remove,
1455 1455
1456 .controls = dac33_snd_controls, 1456 .component_driver = {
1457 .num_controls = ARRAY_SIZE(dac33_snd_controls), 1457 .controls = dac33_snd_controls,
1458 .dapm_widgets = dac33_dapm_widgets, 1458 .num_controls = ARRAY_SIZE(dac33_snd_controls),
1459 .num_dapm_widgets = ARRAY_SIZE(dac33_dapm_widgets), 1459 .dapm_widgets = dac33_dapm_widgets,
1460 .dapm_routes = audio_map, 1460 .num_dapm_widgets = ARRAY_SIZE(dac33_dapm_widgets),
1461 .num_dapm_routes = ARRAY_SIZE(audio_map), 1461 .dapm_routes = audio_map,
1462 .num_dapm_routes = ARRAY_SIZE(audio_map),
1463 },
1462}; 1464};
1463 1465
1464#define DAC33_RATES (SNDRV_PCM_RATE_44100 | \ 1466#define DAC33_RATES (SNDRV_PCM_RATE_44100 | \
diff --git a/sound/soc/codecs/twl4030.c b/sound/soc/codecs/twl4030.c
index a5a4e9f75c57..a2104d68169d 100644
--- a/sound/soc/codecs/twl4030.c
+++ b/sound/soc/codecs/twl4030.c
@@ -2199,12 +2199,14 @@ static struct snd_soc_codec_driver soc_codec_dev_twl4030 = {
2199 .set_bias_level = twl4030_set_bias_level, 2199 .set_bias_level = twl4030_set_bias_level,
2200 .idle_bias_off = true, 2200 .idle_bias_off = true,
2201 2201
2202 .controls = twl4030_snd_controls, 2202 .component_driver = {
2203 .num_controls = ARRAY_SIZE(twl4030_snd_controls), 2203 .controls = twl4030_snd_controls,
2204 .dapm_widgets = twl4030_dapm_widgets, 2204 .num_controls = ARRAY_SIZE(twl4030_snd_controls),
2205 .num_dapm_widgets = ARRAY_SIZE(twl4030_dapm_widgets), 2205 .dapm_widgets = twl4030_dapm_widgets,
2206 .dapm_routes = intercon, 2206 .num_dapm_widgets = ARRAY_SIZE(twl4030_dapm_widgets),
2207 .num_dapm_routes = ARRAY_SIZE(intercon), 2207 .dapm_routes = intercon,
2208 .num_dapm_routes = ARRAY_SIZE(intercon),
2209 },
2208}; 2210};
2209 2211
2210static int twl4030_codec_probe(struct platform_device *pdev) 2212static int twl4030_codec_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/twl6040.c b/sound/soc/codecs/twl6040.c
index 1f7081043566..748036e851ea 100644
--- a/sound/soc/codecs/twl6040.c
+++ b/sound/soc/codecs/twl6040.c
@@ -1156,12 +1156,14 @@ static struct snd_soc_codec_driver soc_codec_dev_twl6040 = {
1156 .suspend_bias_off = true, 1156 .suspend_bias_off = true,
1157 .ignore_pmdown_time = true, 1157 .ignore_pmdown_time = true,
1158 1158
1159 .controls = twl6040_snd_controls, 1159 .component_driver = {
1160 .num_controls = ARRAY_SIZE(twl6040_snd_controls), 1160 .controls = twl6040_snd_controls,
1161 .dapm_widgets = twl6040_dapm_widgets, 1161 .num_controls = ARRAY_SIZE(twl6040_snd_controls),
1162 .num_dapm_widgets = ARRAY_SIZE(twl6040_dapm_widgets), 1162 .dapm_widgets = twl6040_dapm_widgets,
1163 .dapm_routes = intercon, 1163 .num_dapm_widgets = ARRAY_SIZE(twl6040_dapm_widgets),
1164 .num_dapm_routes = ARRAY_SIZE(intercon), 1164 .dapm_routes = intercon,
1165 .num_dapm_routes = ARRAY_SIZE(intercon),
1166 },
1165}; 1167};
1166 1168
1167static int twl6040_codec_probe(struct platform_device *pdev) 1169static int twl6040_codec_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/uda134x.c b/sound/soc/codecs/uda134x.c
index e4c694c758b8..a4a3e9854086 100644
--- a/sound/soc/codecs/uda134x.c
+++ b/sound/soc/codecs/uda134x.c
@@ -523,10 +523,12 @@ static struct snd_soc_codec_driver soc_codec_dev_uda134x = {
523 .set_bias_level = uda134x_set_bias_level, 523 .set_bias_level = uda134x_set_bias_level,
524 .suspend_bias_off = true, 524 .suspend_bias_off = true,
525 525
526 .dapm_widgets = uda134x_dapm_widgets, 526 .component_driver = {
527 .num_dapm_widgets = ARRAY_SIZE(uda134x_dapm_widgets), 527 .dapm_widgets = uda134x_dapm_widgets,
528 .dapm_routes = uda134x_dapm_routes, 528 .num_dapm_widgets = ARRAY_SIZE(uda134x_dapm_widgets),
529 .num_dapm_routes = ARRAY_SIZE(uda134x_dapm_routes), 529 .dapm_routes = uda134x_dapm_routes,
530 .num_dapm_routes = ARRAY_SIZE(uda134x_dapm_routes),
531 },
530}; 532};
531 533
532static const struct regmap_config uda134x_regmap_config = { 534static const struct regmap_config uda134x_regmap_config = {
diff --git a/sound/soc/codecs/uda1380.c b/sound/soc/codecs/uda1380.c
index 35f0469ebb16..533e3bb444e4 100644
--- a/sound/soc/codecs/uda1380.c
+++ b/sound/soc/codecs/uda1380.c
@@ -765,12 +765,14 @@ static struct snd_soc_codec_driver soc_codec_dev_uda1380 = {
765 .reg_cache_default = uda1380_reg, 765 .reg_cache_default = uda1380_reg,
766 .reg_cache_step = 1, 766 .reg_cache_step = 1,
767 767
768 .controls = uda1380_snd_controls, 768 .component_driver = {
769 .num_controls = ARRAY_SIZE(uda1380_snd_controls), 769 .controls = uda1380_snd_controls,
770 .dapm_widgets = uda1380_dapm_widgets, 770 .num_controls = ARRAY_SIZE(uda1380_snd_controls),
771 .num_dapm_widgets = ARRAY_SIZE(uda1380_dapm_widgets), 771 .dapm_widgets = uda1380_dapm_widgets,
772 .dapm_routes = uda1380_dapm_routes, 772 .num_dapm_widgets = ARRAY_SIZE(uda1380_dapm_widgets),
773 .num_dapm_routes = ARRAY_SIZE(uda1380_dapm_routes), 773 .dapm_routes = uda1380_dapm_routes,
774 .num_dapm_routes = ARRAY_SIZE(uda1380_dapm_routes),
775 },
774}; 776};
775 777
776#if IS_ENABLED(CONFIG_I2C) 778#if IS_ENABLED(CONFIG_I2C)
diff --git a/sound/soc/codecs/wl1273.c b/sound/soc/codecs/wl1273.c
index 1b79778098d2..fcffb6e707d9 100644
--- a/sound/soc/codecs/wl1273.c
+++ b/sound/soc/codecs/wl1273.c
@@ -484,12 +484,14 @@ static struct snd_soc_codec_driver soc_codec_dev_wl1273 = {
484 .probe = wl1273_probe, 484 .probe = wl1273_probe,
485 .remove = wl1273_remove, 485 .remove = wl1273_remove,
486 486
487 .controls = wl1273_controls, 487 .component_driver = {
488 .num_controls = ARRAY_SIZE(wl1273_controls), 488 .controls = wl1273_controls,
489 .dapm_widgets = wl1273_dapm_widgets, 489 .num_controls = ARRAY_SIZE(wl1273_controls),
490 .num_dapm_widgets = ARRAY_SIZE(wl1273_dapm_widgets), 490 .dapm_widgets = wl1273_dapm_widgets,
491 .dapm_routes = wl1273_dapm_routes, 491 .num_dapm_widgets = ARRAY_SIZE(wl1273_dapm_widgets),
492 .num_dapm_routes = ARRAY_SIZE(wl1273_dapm_routes), 492 .dapm_routes = wl1273_dapm_routes,
493 .num_dapm_routes = ARRAY_SIZE(wl1273_dapm_routes),
494 },
493}; 495};
494 496
495static int wl1273_platform_probe(struct platform_device *pdev) 497static int wl1273_platform_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/wm0010.c b/sound/soc/codecs/wm0010.c
index e3c34bdc2772..0eb5dcf4c29d 100644
--- a/sound/soc/codecs/wm0010.c
+++ b/sound/soc/codecs/wm0010.c
@@ -789,16 +789,18 @@ static int wm0010_set_sysclk(struct snd_soc_codec *codec, int source,
789 789
790static int wm0010_probe(struct snd_soc_codec *codec); 790static int wm0010_probe(struct snd_soc_codec *codec);
791 791
792static struct snd_soc_codec_driver soc_codec_dev_wm0010 = { 792static const struct snd_soc_codec_driver soc_codec_dev_wm0010 = {
793 .probe = wm0010_probe, 793 .probe = wm0010_probe,
794 .set_bias_level = wm0010_set_bias_level, 794 .set_bias_level = wm0010_set_bias_level,
795 .set_sysclk = wm0010_set_sysclk, 795 .set_sysclk = wm0010_set_sysclk,
796 .idle_bias_off = true, 796 .idle_bias_off = true,
797 797
798 .dapm_widgets = wm0010_dapm_widgets, 798 .component_driver = {
799 .num_dapm_widgets = ARRAY_SIZE(wm0010_dapm_widgets), 799 .dapm_widgets = wm0010_dapm_widgets,
800 .dapm_routes = wm0010_dapm_routes, 800 .num_dapm_widgets = ARRAY_SIZE(wm0010_dapm_widgets),
801 .num_dapm_routes = ARRAY_SIZE(wm0010_dapm_routes), 801 .dapm_routes = wm0010_dapm_routes,
802 .num_dapm_routes = ARRAY_SIZE(wm0010_dapm_routes),
803 },
802}; 804};
803 805
804#define WM0010_RATES (SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000) 806#define WM0010_RATES (SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000)
diff --git a/sound/soc/codecs/wm1250-ev1.c b/sound/soc/codecs/wm1250-ev1.c
index ec45c5b220b1..cf5f0580df6a 100644
--- a/sound/soc/codecs/wm1250-ev1.c
+++ b/sound/soc/codecs/wm1250-ev1.c
@@ -141,12 +141,13 @@ static struct snd_soc_dai_driver wm1250_ev1_dai = {
141 .ops = &wm1250_ev1_ops, 141 .ops = &wm1250_ev1_ops,
142}; 142};
143 143
144static struct snd_soc_codec_driver soc_codec_dev_wm1250_ev1 = { 144static const struct snd_soc_codec_driver soc_codec_dev_wm1250_ev1 = {
145 .dapm_widgets = wm1250_ev1_dapm_widgets, 145 .component_driver = {
146 .num_dapm_widgets = ARRAY_SIZE(wm1250_ev1_dapm_widgets), 146 .dapm_widgets = wm1250_ev1_dapm_widgets,
147 .dapm_routes = wm1250_ev1_dapm_routes, 147 .num_dapm_widgets = ARRAY_SIZE(wm1250_ev1_dapm_widgets),
148 .num_dapm_routes = ARRAY_SIZE(wm1250_ev1_dapm_routes), 148 .dapm_routes = wm1250_ev1_dapm_routes,
149 149 .num_dapm_routes = ARRAY_SIZE(wm1250_ev1_dapm_routes),
150 },
150 .set_bias_level = wm1250_ev1_set_bias_level, 151 .set_bias_level = wm1250_ev1_set_bias_level,
151 .idle_bias_off = true, 152 .idle_bias_off = true,
152}; 153};
diff --git a/sound/soc/codecs/wm2000.c b/sound/soc/codecs/wm2000.c
index f2664396be6f..23cde3a0dc11 100644
--- a/sound/soc/codecs/wm2000.c
+++ b/sound/soc/codecs/wm2000.c
@@ -799,18 +799,20 @@ static int wm2000_remove(struct snd_soc_codec *codec)
799 return wm2000_anc_transition(wm2000, ANC_OFF); 799 return wm2000_anc_transition(wm2000, ANC_OFF);
800} 800}
801 801
802static struct snd_soc_codec_driver soc_codec_dev_wm2000 = { 802static const struct snd_soc_codec_driver soc_codec_dev_wm2000 = {
803 .probe = wm2000_probe, 803 .probe = wm2000_probe,
804 .remove = wm2000_remove, 804 .remove = wm2000_remove,
805 .suspend = wm2000_suspend, 805 .suspend = wm2000_suspend,
806 .resume = wm2000_resume, 806 .resume = wm2000_resume,
807 807
808 .dapm_widgets = wm2000_dapm_widgets, 808 .component_driver = {
809 .num_dapm_widgets = ARRAY_SIZE(wm2000_dapm_widgets), 809 .controls = wm2000_controls,
810 .dapm_routes = wm2000_audio_map, 810 .num_controls = ARRAY_SIZE(wm2000_controls),
811 .num_dapm_routes = ARRAY_SIZE(wm2000_audio_map), 811 .dapm_widgets = wm2000_dapm_widgets,
812 .controls = wm2000_controls, 812 .num_dapm_widgets = ARRAY_SIZE(wm2000_dapm_widgets),
813 .num_controls = ARRAY_SIZE(wm2000_controls), 813 .dapm_routes = wm2000_audio_map,
814 .num_dapm_routes = ARRAY_SIZE(wm2000_audio_map),
815 },
814}; 816};
815 817
816static int wm2000_i2c_probe(struct i2c_client *i2c, 818static int wm2000_i2c_probe(struct i2c_client *i2c,
diff --git a/sound/soc/codecs/wm2200.c b/sound/soc/codecs/wm2200.c
index fd1439ecb50a..606bf88abfc4 100644
--- a/sound/soc/codecs/wm2200.c
+++ b/sound/soc/codecs/wm2200.c
@@ -2103,7 +2103,7 @@ static struct snd_soc_dai_driver wm2200_dai = {
2103 .ops = &wm2200_dai_ops, 2103 .ops = &wm2200_dai_ops,
2104}; 2104};
2105 2105
2106static struct snd_soc_codec_driver soc_codec_wm2200 = { 2106static const struct snd_soc_codec_driver soc_codec_wm2200 = {
2107 .probe = wm2200_probe, 2107 .probe = wm2200_probe,
2108 2108
2109 .idle_bias_off = true, 2109 .idle_bias_off = true,
@@ -2111,12 +2111,14 @@ static struct snd_soc_codec_driver soc_codec_wm2200 = {
2111 .set_sysclk = wm2200_set_sysclk, 2111 .set_sysclk = wm2200_set_sysclk,
2112 .set_pll = wm2200_set_fll, 2112 .set_pll = wm2200_set_fll,
2113 2113
2114 .controls = wm2200_snd_controls, 2114 .component_driver = {
2115 .num_controls = ARRAY_SIZE(wm2200_snd_controls), 2115 .controls = wm2200_snd_controls,
2116 .dapm_widgets = wm2200_dapm_widgets, 2116 .num_controls = ARRAY_SIZE(wm2200_snd_controls),
2117 .num_dapm_widgets = ARRAY_SIZE(wm2200_dapm_widgets), 2117 .dapm_widgets = wm2200_dapm_widgets,
2118 .dapm_routes = wm2200_dapm_routes, 2118 .num_dapm_widgets = ARRAY_SIZE(wm2200_dapm_widgets),
2119 .num_dapm_routes = ARRAY_SIZE(wm2200_dapm_routes), 2119 .dapm_routes = wm2200_dapm_routes,
2120 .num_dapm_routes = ARRAY_SIZE(wm2200_dapm_routes),
2121 },
2120}; 2122};
2121 2123
2122static irqreturn_t wm2200_irq(int irq, void *data) 2124static irqreturn_t wm2200_irq(int irq, void *data)
diff --git a/sound/soc/codecs/wm5100.c b/sound/soc/codecs/wm5100.c
index 512a9d25fe6f..278467d3b1ac 100644
--- a/sound/soc/codecs/wm5100.c
+++ b/sound/soc/codecs/wm5100.c
@@ -2381,7 +2381,7 @@ static int wm5100_remove(struct snd_soc_codec *codec)
2381 return 0; 2381 return 0;
2382} 2382}
2383 2383
2384static struct snd_soc_codec_driver soc_codec_dev_wm5100 = { 2384static const struct snd_soc_codec_driver soc_codec_dev_wm5100 = {
2385 .probe = wm5100_probe, 2385 .probe = wm5100_probe,
2386 .remove = wm5100_remove, 2386 .remove = wm5100_remove,
2387 2387
@@ -2390,12 +2390,14 @@ static struct snd_soc_codec_driver soc_codec_dev_wm5100 = {
2390 .idle_bias_off = 1, 2390 .idle_bias_off = 1,
2391 2391
2392 .seq_notifier = wm5100_seq_notifier, 2392 .seq_notifier = wm5100_seq_notifier,
2393 .controls = wm5100_snd_controls, 2393 .component_driver = {
2394 .num_controls = ARRAY_SIZE(wm5100_snd_controls), 2394 .controls = wm5100_snd_controls,
2395 .dapm_widgets = wm5100_dapm_widgets, 2395 .num_controls = ARRAY_SIZE(wm5100_snd_controls),
2396 .num_dapm_widgets = ARRAY_SIZE(wm5100_dapm_widgets), 2396 .dapm_widgets = wm5100_dapm_widgets,
2397 .dapm_routes = wm5100_dapm_routes, 2397 .num_dapm_widgets = ARRAY_SIZE(wm5100_dapm_widgets),
2398 .num_dapm_routes = ARRAY_SIZE(wm5100_dapm_routes), 2398 .dapm_routes = wm5100_dapm_routes,
2399 .num_dapm_routes = ARRAY_SIZE(wm5100_dapm_routes),
2400 },
2399}; 2401};
2400 2402
2401static const struct regmap_config wm5100_regmap = { 2403static const struct regmap_config wm5100_regmap = {
diff --git a/sound/soc/codecs/wm5102.c b/sound/soc/codecs/wm5102.c
index 846deed6af41..93876c6d48ee 100644
--- a/sound/soc/codecs/wm5102.c
+++ b/sound/soc/codecs/wm5102.c
@@ -1521,6 +1521,16 @@ static const struct snd_soc_dapm_route wm5102_dapm_routes[] = {
1521 { "IN3L", NULL, "SYSCLK" }, 1521 { "IN3L", NULL, "SYSCLK" },
1522 { "IN3R", NULL, "SYSCLK" }, 1522 { "IN3R", NULL, "SYSCLK" },
1523 1523
1524 { "ASRC1L", NULL, "SYSCLK" },
1525 { "ASRC1R", NULL, "SYSCLK" },
1526 { "ASRC2L", NULL, "SYSCLK" },
1527 { "ASRC2R", NULL, "SYSCLK" },
1528
1529 { "ASRC1L", NULL, "ASYNCCLK" },
1530 { "ASRC1R", NULL, "ASYNCCLK" },
1531 { "ASRC2L", NULL, "ASYNCCLK" },
1532 { "ASRC2R", NULL, "ASYNCCLK" },
1533
1524 { "MICBIAS1", NULL, "MICVDD" }, 1534 { "MICBIAS1", NULL, "MICVDD" },
1525 { "MICBIAS2", NULL, "MICVDD" }, 1535 { "MICBIAS2", NULL, "MICVDD" },
1526 { "MICBIAS3", NULL, "MICVDD" }, 1536 { "MICBIAS3", NULL, "MICVDD" },
@@ -1600,7 +1610,6 @@ static const struct snd_soc_dapm_route wm5102_dapm_routes[] = {
1600 { "Slim3 Capture", NULL, "SYSCLK" }, 1610 { "Slim3 Capture", NULL, "SYSCLK" },
1601 1611
1602 { "Audio Trace DSP", NULL, "DSP1" }, 1612 { "Audio Trace DSP", NULL, "DSP1" },
1603 { "Audio Trace DSP", NULL, "SYSCLK" },
1604 1613
1605 { "IN1L PGA", NULL, "IN1L" }, 1614 { "IN1L PGA", NULL, "IN1L" },
1606 { "IN1R PGA", NULL, "IN1R" }, 1615 { "IN1R PGA", NULL, "IN1R" },
@@ -1990,7 +1999,7 @@ static struct regmap *wm5102_get_regmap(struct device *dev)
1990 return priv->core.arizona->regmap; 1999 return priv->core.arizona->regmap;
1991} 2000}
1992 2001
1993static struct snd_soc_codec_driver soc_codec_dev_wm5102 = { 2002static const struct snd_soc_codec_driver soc_codec_dev_wm5102 = {
1994 .probe = wm5102_codec_probe, 2003 .probe = wm5102_codec_probe,
1995 .remove = wm5102_codec_remove, 2004 .remove = wm5102_codec_remove,
1996 .get_regmap = wm5102_get_regmap, 2005 .get_regmap = wm5102_get_regmap,
@@ -2000,12 +2009,14 @@ static struct snd_soc_codec_driver soc_codec_dev_wm5102 = {
2000 .set_sysclk = arizona_set_sysclk, 2009 .set_sysclk = arizona_set_sysclk,
2001 .set_pll = wm5102_set_fll, 2010 .set_pll = wm5102_set_fll,
2002 2011
2003 .controls = wm5102_snd_controls, 2012 .component_driver = {
2004 .num_controls = ARRAY_SIZE(wm5102_snd_controls), 2013 .controls = wm5102_snd_controls,
2005 .dapm_widgets = wm5102_dapm_widgets, 2014 .num_controls = ARRAY_SIZE(wm5102_snd_controls),
2006 .num_dapm_widgets = ARRAY_SIZE(wm5102_dapm_widgets), 2015 .dapm_widgets = wm5102_dapm_widgets,
2007 .dapm_routes = wm5102_dapm_routes, 2016 .num_dapm_widgets = ARRAY_SIZE(wm5102_dapm_widgets),
2008 .num_dapm_routes = ARRAY_SIZE(wm5102_dapm_routes), 2017 .dapm_routes = wm5102_dapm_routes,
2018 .num_dapm_routes = ARRAY_SIZE(wm5102_dapm_routes),
2019 },
2009}; 2020};
2010 2021
2011static struct snd_compr_ops wm5102_compr_ops = { 2022static struct snd_compr_ops wm5102_compr_ops = {
diff --git a/sound/soc/codecs/wm5110.c b/sound/soc/codecs/wm5110.c
index 156547026a40..06bae3b23fce 100644
--- a/sound/soc/codecs/wm5110.c
+++ b/sound/soc/codecs/wm5110.c
@@ -1745,6 +1745,16 @@ static const struct snd_soc_dapm_route wm5110_dapm_routes[] = {
1745 { "IN4L", NULL, "SYSCLK" }, 1745 { "IN4L", NULL, "SYSCLK" },
1746 { "IN4R", NULL, "SYSCLK" }, 1746 { "IN4R", NULL, "SYSCLK" },
1747 1747
1748 { "ASRC1L", NULL, "SYSCLK" },
1749 { "ASRC1R", NULL, "SYSCLK" },
1750 { "ASRC2L", NULL, "SYSCLK" },
1751 { "ASRC2R", NULL, "SYSCLK" },
1752
1753 { "ASRC1L", NULL, "ASYNCCLK" },
1754 { "ASRC1R", NULL, "ASYNCCLK" },
1755 { "ASRC2L", NULL, "ASYNCCLK" },
1756 { "ASRC2R", NULL, "ASYNCCLK" },
1757
1748 { "MICBIAS1", NULL, "MICVDD" }, 1758 { "MICBIAS1", NULL, "MICVDD" },
1749 { "MICBIAS2", NULL, "MICVDD" }, 1759 { "MICBIAS2", NULL, "MICVDD" },
1750 { "MICBIAS3", NULL, "MICVDD" }, 1760 { "MICBIAS3", NULL, "MICVDD" },
@@ -1832,10 +1842,8 @@ static const struct snd_soc_dapm_route wm5110_dapm_routes[] = {
1832 { "Slim3 Capture", NULL, "SYSCLK" }, 1842 { "Slim3 Capture", NULL, "SYSCLK" },
1833 1843
1834 { "Voice Control DSP", NULL, "DSP3" }, 1844 { "Voice Control DSP", NULL, "DSP3" },
1835 { "Voice Control DSP", NULL, "SYSCLK" },
1836 1845
1837 { "Audio Trace DSP", NULL, "DSP1" }, 1846 { "Audio Trace DSP", NULL, "DSP1" },
1838 { "Audio Trace DSP", NULL, "SYSCLK" },
1839 1847
1840 { "IN1L PGA", NULL, "IN1L" }, 1848 { "IN1L PGA", NULL, "IN1L" },
1841 { "IN1R PGA", NULL, "IN1R" }, 1849 { "IN1R PGA", NULL, "IN1R" },
@@ -2347,7 +2355,7 @@ static struct regmap *wm5110_get_regmap(struct device *dev)
2347 return priv->core.arizona->regmap; 2355 return priv->core.arizona->regmap;
2348} 2356}
2349 2357
2350static struct snd_soc_codec_driver soc_codec_dev_wm5110 = { 2358static const struct snd_soc_codec_driver soc_codec_dev_wm5110 = {
2351 .probe = wm5110_codec_probe, 2359 .probe = wm5110_codec_probe,
2352 .remove = wm5110_codec_remove, 2360 .remove = wm5110_codec_remove,
2353 .get_regmap = wm5110_get_regmap, 2361 .get_regmap = wm5110_get_regmap,
@@ -2357,12 +2365,14 @@ static struct snd_soc_codec_driver soc_codec_dev_wm5110 = {
2357 .set_sysclk = arizona_set_sysclk, 2365 .set_sysclk = arizona_set_sysclk,
2358 .set_pll = wm5110_set_fll, 2366 .set_pll = wm5110_set_fll,
2359 2367
2360 .controls = wm5110_snd_controls, 2368 .component_driver = {
2361 .num_controls = ARRAY_SIZE(wm5110_snd_controls), 2369 .controls = wm5110_snd_controls,
2362 .dapm_widgets = wm5110_dapm_widgets, 2370 .num_controls = ARRAY_SIZE(wm5110_snd_controls),
2363 .num_dapm_widgets = ARRAY_SIZE(wm5110_dapm_widgets), 2371 .dapm_widgets = wm5110_dapm_widgets,
2364 .dapm_routes = wm5110_dapm_routes, 2372 .num_dapm_widgets = ARRAY_SIZE(wm5110_dapm_widgets),
2365 .num_dapm_routes = ARRAY_SIZE(wm5110_dapm_routes), 2373 .dapm_routes = wm5110_dapm_routes,
2374 .num_dapm_routes = ARRAY_SIZE(wm5110_dapm_routes),
2375 },
2366}; 2376};
2367 2377
2368static struct snd_compr_ops wm5110_compr_ops = { 2378static struct snd_compr_ops wm5110_compr_ops = {
diff --git a/sound/soc/codecs/wm8350.c b/sound/soc/codecs/wm8350.c
index ffbf3df8ae97..2efc5b41ad0f 100644
--- a/sound/soc/codecs/wm8350.c
+++ b/sound/soc/codecs/wm8350.c
@@ -1587,19 +1587,21 @@ static struct regmap *wm8350_get_regmap(struct device *dev)
1587 return wm8350->regmap; 1587 return wm8350->regmap;
1588} 1588}
1589 1589
1590static struct snd_soc_codec_driver soc_codec_dev_wm8350 = { 1590static const struct snd_soc_codec_driver soc_codec_dev_wm8350 = {
1591 .probe = wm8350_codec_probe, 1591 .probe = wm8350_codec_probe,
1592 .remove = wm8350_codec_remove, 1592 .remove = wm8350_codec_remove,
1593 .get_regmap = wm8350_get_regmap, 1593 .get_regmap = wm8350_get_regmap,
1594 .set_bias_level = wm8350_set_bias_level, 1594 .set_bias_level = wm8350_set_bias_level,
1595 .suspend_bias_off = true, 1595 .suspend_bias_off = true,
1596 1596
1597 .controls = wm8350_snd_controls, 1597 .component_driver = {
1598 .num_controls = ARRAY_SIZE(wm8350_snd_controls), 1598 .controls = wm8350_snd_controls,
1599 .dapm_widgets = wm8350_dapm_widgets, 1599 .num_controls = ARRAY_SIZE(wm8350_snd_controls),
1600 .num_dapm_widgets = ARRAY_SIZE(wm8350_dapm_widgets), 1600 .dapm_widgets = wm8350_dapm_widgets,
1601 .dapm_routes = wm8350_dapm_routes, 1601 .num_dapm_widgets = ARRAY_SIZE(wm8350_dapm_widgets),
1602 .num_dapm_routes = ARRAY_SIZE(wm8350_dapm_routes), 1602 .dapm_routes = wm8350_dapm_routes,
1603 .num_dapm_routes = ARRAY_SIZE(wm8350_dapm_routes),
1604 },
1603}; 1605};
1604 1606
1605static int wm8350_probe(struct platform_device *pdev) 1607static int wm8350_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/wm8400.c b/sound/soc/codecs/wm8400.c
index b1d346aa4696..6c59fb933bd6 100644
--- a/sound/soc/codecs/wm8400.c
+++ b/sound/soc/codecs/wm8400.c
@@ -1332,19 +1332,21 @@ static struct regmap *wm8400_get_regmap(struct device *dev)
1332 return wm8400->regmap; 1332 return wm8400->regmap;
1333} 1333}
1334 1334
1335static struct snd_soc_codec_driver soc_codec_dev_wm8400 = { 1335static const struct snd_soc_codec_driver soc_codec_dev_wm8400 = {
1336 .probe = wm8400_codec_probe, 1336 .probe = wm8400_codec_probe,
1337 .remove = wm8400_codec_remove, 1337 .remove = wm8400_codec_remove,
1338 .get_regmap = wm8400_get_regmap, 1338 .get_regmap = wm8400_get_regmap,
1339 .set_bias_level = wm8400_set_bias_level, 1339 .set_bias_level = wm8400_set_bias_level,
1340 .suspend_bias_off = true, 1340 .suspend_bias_off = true,
1341 1341
1342 .controls = wm8400_snd_controls, 1342 .component_driver = {
1343 .num_controls = ARRAY_SIZE(wm8400_snd_controls), 1343 .controls = wm8400_snd_controls,
1344 .dapm_widgets = wm8400_dapm_widgets, 1344 .num_controls = ARRAY_SIZE(wm8400_snd_controls),
1345 .num_dapm_widgets = ARRAY_SIZE(wm8400_dapm_widgets), 1345 .dapm_widgets = wm8400_dapm_widgets,
1346 .dapm_routes = wm8400_dapm_routes, 1346 .num_dapm_widgets = ARRAY_SIZE(wm8400_dapm_widgets),
1347 .num_dapm_routes = ARRAY_SIZE(wm8400_dapm_routes), 1347 .dapm_routes = wm8400_dapm_routes,
1348 .num_dapm_routes = ARRAY_SIZE(wm8400_dapm_routes),
1349 },
1348}; 1350};
1349 1351
1350static int wm8400_probe(struct platform_device *pdev) 1352static int wm8400_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/wm8510.c b/sound/soc/codecs/wm8510.c
index 99e40e629cca..119ceac684ae 100644
--- a/sound/soc/codecs/wm8510.c
+++ b/sound/soc/codecs/wm8510.c
@@ -581,17 +581,19 @@ static int wm8510_probe(struct snd_soc_codec *codec)
581 return 0; 581 return 0;
582} 582}
583 583
584static struct snd_soc_codec_driver soc_codec_dev_wm8510 = { 584static const struct snd_soc_codec_driver soc_codec_dev_wm8510 = {
585 .probe = wm8510_probe, 585 .probe = wm8510_probe,
586 .set_bias_level = wm8510_set_bias_level, 586 .set_bias_level = wm8510_set_bias_level,
587 .suspend_bias_off = true, 587 .suspend_bias_off = true,
588 588
589 .controls = wm8510_snd_controls, 589 .component_driver = {
590 .num_controls = ARRAY_SIZE(wm8510_snd_controls), 590 .controls = wm8510_snd_controls,
591 .dapm_widgets = wm8510_dapm_widgets, 591 .num_controls = ARRAY_SIZE(wm8510_snd_controls),
592 .num_dapm_widgets = ARRAY_SIZE(wm8510_dapm_widgets), 592 .dapm_widgets = wm8510_dapm_widgets,
593 .dapm_routes = wm8510_dapm_routes, 593 .num_dapm_widgets = ARRAY_SIZE(wm8510_dapm_widgets),
594 .num_dapm_routes = ARRAY_SIZE(wm8510_dapm_routes), 594 .dapm_routes = wm8510_dapm_routes,
595 .num_dapm_routes = ARRAY_SIZE(wm8510_dapm_routes),
596 },
595}; 597};
596 598
597static const struct of_device_id wm8510_of_match[] = { 599static const struct of_device_id wm8510_of_match[] = {
diff --git a/sound/soc/codecs/wm8523.c b/sound/soc/codecs/wm8523.c
index aa287a3965e7..deb2e075428e 100644
--- a/sound/soc/codecs/wm8523.c
+++ b/sound/soc/codecs/wm8523.c
@@ -413,17 +413,19 @@ static int wm8523_probe(struct snd_soc_codec *codec)
413 return 0; 413 return 0;
414} 414}
415 415
416static struct snd_soc_codec_driver soc_codec_dev_wm8523 = { 416static const struct snd_soc_codec_driver soc_codec_dev_wm8523 = {
417 .probe = wm8523_probe, 417 .probe = wm8523_probe,
418 .set_bias_level = wm8523_set_bias_level, 418 .set_bias_level = wm8523_set_bias_level,
419 .suspend_bias_off = true, 419 .suspend_bias_off = true,
420 420
421 .controls = wm8523_controls, 421 .component_driver = {
422 .num_controls = ARRAY_SIZE(wm8523_controls), 422 .controls = wm8523_controls,
423 .dapm_widgets = wm8523_dapm_widgets, 423 .num_controls = ARRAY_SIZE(wm8523_controls),
424 .num_dapm_widgets = ARRAY_SIZE(wm8523_dapm_widgets), 424 .dapm_widgets = wm8523_dapm_widgets,
425 .dapm_routes = wm8523_dapm_routes, 425 .num_dapm_widgets = ARRAY_SIZE(wm8523_dapm_widgets),
426 .num_dapm_routes = ARRAY_SIZE(wm8523_dapm_routes), 426 .dapm_routes = wm8523_dapm_routes,
427 .num_dapm_routes = ARRAY_SIZE(wm8523_dapm_routes),
428 },
427}; 429};
428 430
429static const struct of_device_id wm8523_of_match[] = { 431static const struct of_device_id wm8523_of_match[] = {
diff --git a/sound/soc/codecs/wm8580.c b/sound/soc/codecs/wm8580.c
index 66602bf02f6e..faa7287a5253 100644
--- a/sound/soc/codecs/wm8580.c
+++ b/sound/soc/codecs/wm8580.c
@@ -899,17 +899,19 @@ static int wm8580_remove(struct snd_soc_codec *codec)
899 return 0; 899 return 0;
900} 900}
901 901
902static struct snd_soc_codec_driver soc_codec_dev_wm8580 = { 902static const struct snd_soc_codec_driver soc_codec_dev_wm8580 = {
903 .probe = wm8580_probe, 903 .probe = wm8580_probe,
904 .remove = wm8580_remove, 904 .remove = wm8580_remove,
905 .set_bias_level = wm8580_set_bias_level, 905 .set_bias_level = wm8580_set_bias_level,
906 906
907 .controls = wm8580_snd_controls, 907 .component_driver = {
908 .num_controls = ARRAY_SIZE(wm8580_snd_controls), 908 .controls = wm8580_snd_controls,
909 .dapm_widgets = wm8580_dapm_widgets, 909 .num_controls = ARRAY_SIZE(wm8580_snd_controls),
910 .num_dapm_widgets = ARRAY_SIZE(wm8580_dapm_widgets), 910 .dapm_widgets = wm8580_dapm_widgets,
911 .dapm_routes = wm8580_dapm_routes, 911 .num_dapm_widgets = ARRAY_SIZE(wm8580_dapm_widgets),
912 .num_dapm_routes = ARRAY_SIZE(wm8580_dapm_routes), 912 .dapm_routes = wm8580_dapm_routes,
913 .num_dapm_routes = ARRAY_SIZE(wm8580_dapm_routes),
914 },
913}; 915};
914 916
915static const struct of_device_id wm8580_of_match[] = { 917static const struct of_device_id wm8580_of_match[] = {
diff --git a/sound/soc/codecs/wm8711.c b/sound/soc/codecs/wm8711.c
index c759ec068e97..2b376c9c99af 100644
--- a/sound/soc/codecs/wm8711.c
+++ b/sound/soc/codecs/wm8711.c
@@ -367,17 +367,19 @@ static int wm8711_probe(struct snd_soc_codec *codec)
367 367
368} 368}
369 369
370static struct snd_soc_codec_driver soc_codec_dev_wm8711 = { 370static const struct snd_soc_codec_driver soc_codec_dev_wm8711 = {
371 .probe = wm8711_probe, 371 .probe = wm8711_probe,
372 .set_bias_level = wm8711_set_bias_level, 372 .set_bias_level = wm8711_set_bias_level,
373 .suspend_bias_off = true, 373 .suspend_bias_off = true,
374 374
375 .controls = wm8711_snd_controls, 375 .component_driver = {
376 .num_controls = ARRAY_SIZE(wm8711_snd_controls), 376 .controls = wm8711_snd_controls,
377 .dapm_widgets = wm8711_dapm_widgets, 377 .num_controls = ARRAY_SIZE(wm8711_snd_controls),
378 .num_dapm_widgets = ARRAY_SIZE(wm8711_dapm_widgets), 378 .dapm_widgets = wm8711_dapm_widgets,
379 .dapm_routes = wm8711_intercon, 379 .num_dapm_widgets = ARRAY_SIZE(wm8711_dapm_widgets),
380 .num_dapm_routes = ARRAY_SIZE(wm8711_intercon), 380 .dapm_routes = wm8711_intercon,
381 .num_dapm_routes = ARRAY_SIZE(wm8711_intercon),
382 },
381}; 383};
382 384
383static const struct of_device_id wm8711_of_match[] = { 385static const struct of_device_id wm8711_of_match[] = {
diff --git a/sound/soc/codecs/wm8727.c b/sound/soc/codecs/wm8727.c
index bb25a75f92a2..7fde077a014b 100644
--- a/sound/soc/codecs/wm8727.c
+++ b/sound/soc/codecs/wm8727.c
@@ -53,11 +53,13 @@ static struct snd_soc_dai_driver wm8727_dai = {
53 }, 53 },
54}; 54};
55 55
56static struct snd_soc_codec_driver soc_codec_dev_wm8727 = { 56static const struct snd_soc_codec_driver soc_codec_dev_wm8727 = {
57 .dapm_widgets = wm8727_dapm_widgets, 57 .component_driver = {
58 .num_dapm_widgets = ARRAY_SIZE(wm8727_dapm_widgets), 58 .dapm_widgets = wm8727_dapm_widgets,
59 .dapm_routes = wm8727_dapm_routes, 59 .num_dapm_widgets = ARRAY_SIZE(wm8727_dapm_widgets),
60 .num_dapm_routes = ARRAY_SIZE(wm8727_dapm_routes), 60 .dapm_routes = wm8727_dapm_routes,
61 .num_dapm_routes = ARRAY_SIZE(wm8727_dapm_routes),
62 },
61}; 63};
62 64
63static int wm8727_probe(struct platform_device *pdev) 65static int wm8727_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/wm8728.c b/sound/soc/codecs/wm8728.c
index 1564e6926527..797cc6e7c70f 100644
--- a/sound/soc/codecs/wm8728.c
+++ b/sound/soc/codecs/wm8728.c
@@ -211,16 +211,18 @@ static struct snd_soc_dai_driver wm8728_dai = {
211 .ops = &wm8728_dai_ops, 211 .ops = &wm8728_dai_ops,
212}; 212};
213 213
214static struct snd_soc_codec_driver soc_codec_dev_wm8728 = { 214static const struct snd_soc_codec_driver soc_codec_dev_wm8728 = {
215 .set_bias_level = wm8728_set_bias_level, 215 .set_bias_level = wm8728_set_bias_level,
216 .suspend_bias_off = true, 216 .suspend_bias_off = true,
217 217
218 .controls = wm8728_snd_controls, 218 .component_driver = {
219 .num_controls = ARRAY_SIZE(wm8728_snd_controls), 219 .controls = wm8728_snd_controls,
220 .dapm_widgets = wm8728_dapm_widgets, 220 .num_controls = ARRAY_SIZE(wm8728_snd_controls),
221 .num_dapm_widgets = ARRAY_SIZE(wm8728_dapm_widgets), 221 .dapm_widgets = wm8728_dapm_widgets,
222 .dapm_routes = wm8728_intercon, 222 .num_dapm_widgets = ARRAY_SIZE(wm8728_dapm_widgets),
223 .num_dapm_routes = ARRAY_SIZE(wm8728_intercon), 223 .dapm_routes = wm8728_intercon,
224 .num_dapm_routes = ARRAY_SIZE(wm8728_intercon),
225 },
224}; 226};
225 227
226static const struct of_device_id wm8728_of_match[] = { 228static const struct of_device_id wm8728_of_match[] = {
diff --git a/sound/soc/codecs/wm8731.c b/sound/soc/codecs/wm8731.c
index d18261a44256..4f9a1eb28120 100644
--- a/sound/soc/codecs/wm8731.c
+++ b/sound/soc/codecs/wm8731.c
@@ -628,16 +628,18 @@ err_regulator_enable:
628 return ret; 628 return ret;
629} 629}
630 630
631static struct snd_soc_codec_driver soc_codec_dev_wm8731 = { 631static const struct snd_soc_codec_driver soc_codec_dev_wm8731 = {
632 .set_bias_level = wm8731_set_bias_level, 632 .set_bias_level = wm8731_set_bias_level,
633 .suspend_bias_off = true, 633 .suspend_bias_off = true,
634 634
635 .dapm_widgets = wm8731_dapm_widgets, 635 .component_driver = {
636 .num_dapm_widgets = ARRAY_SIZE(wm8731_dapm_widgets), 636 .controls = wm8731_snd_controls,
637 .dapm_routes = wm8731_intercon, 637 .num_controls = ARRAY_SIZE(wm8731_snd_controls),
638 .num_dapm_routes = ARRAY_SIZE(wm8731_intercon), 638 .dapm_widgets = wm8731_dapm_widgets,
639 .controls = wm8731_snd_controls, 639 .num_dapm_widgets = ARRAY_SIZE(wm8731_dapm_widgets),
640 .num_controls = ARRAY_SIZE(wm8731_snd_controls), 640 .dapm_routes = wm8731_intercon,
641 .num_dapm_routes = ARRAY_SIZE(wm8731_intercon),
642 },
641}; 643};
642 644
643static const struct of_device_id wm8731_of_match[] = { 645static const struct of_device_id wm8731_of_match[] = {
diff --git a/sound/soc/codecs/wm8737.c b/sound/soc/codecs/wm8737.c
index e7807601e675..f0cb1c4afe3c 100644
--- a/sound/soc/codecs/wm8737.c
+++ b/sound/soc/codecs/wm8737.c
@@ -573,17 +573,19 @@ err_get:
573 return ret; 573 return ret;
574} 574}
575 575
576static struct snd_soc_codec_driver soc_codec_dev_wm8737 = { 576static const struct snd_soc_codec_driver soc_codec_dev_wm8737 = {
577 .probe = wm8737_probe, 577 .probe = wm8737_probe,
578 .set_bias_level = wm8737_set_bias_level, 578 .set_bias_level = wm8737_set_bias_level,
579 .suspend_bias_off = true, 579 .suspend_bias_off = true,
580 580
581 .controls = wm8737_snd_controls, 581 .component_driver = {
582 .num_controls = ARRAY_SIZE(wm8737_snd_controls), 582 .controls = wm8737_snd_controls,
583 .dapm_widgets = wm8737_dapm_widgets, 583 .num_controls = ARRAY_SIZE(wm8737_snd_controls),
584 .num_dapm_widgets = ARRAY_SIZE(wm8737_dapm_widgets), 584 .dapm_widgets = wm8737_dapm_widgets,
585 .dapm_routes = intercon, 585 .num_dapm_widgets = ARRAY_SIZE(wm8737_dapm_widgets),
586 .num_dapm_routes = ARRAY_SIZE(intercon), 586 .dapm_routes = intercon,
587 .num_dapm_routes = ARRAY_SIZE(intercon),
588 },
587}; 589};
588 590
589static const struct of_device_id wm8737_of_match[] = { 591static const struct of_device_id wm8737_of_match[] = {
diff --git a/sound/soc/codecs/wm8741.c b/sound/soc/codecs/wm8741.c
index 36ef91fe0511..565d477cd790 100644
--- a/sound/soc/codecs/wm8741.c
+++ b/sound/soc/codecs/wm8741.c
@@ -497,15 +497,17 @@ static int wm8741_remove(struct snd_soc_codec *codec)
497 return 0; 497 return 0;
498} 498}
499 499
500static struct snd_soc_codec_driver soc_codec_dev_wm8741 = { 500static const struct snd_soc_codec_driver soc_codec_dev_wm8741 = {
501 .probe = wm8741_probe, 501 .probe = wm8741_probe,
502 .remove = wm8741_remove, 502 .remove = wm8741_remove,
503 .resume = wm8741_resume, 503 .resume = wm8741_resume,
504 504
505 .dapm_widgets = wm8741_dapm_widgets, 505 .component_driver = {
506 .num_dapm_widgets = ARRAY_SIZE(wm8741_dapm_widgets), 506 .dapm_widgets = wm8741_dapm_widgets,
507 .dapm_routes = wm8741_dapm_routes, 507 .num_dapm_widgets = ARRAY_SIZE(wm8741_dapm_widgets),
508 .num_dapm_routes = ARRAY_SIZE(wm8741_dapm_routes), 508 .dapm_routes = wm8741_dapm_routes,
509 .num_dapm_routes = ARRAY_SIZE(wm8741_dapm_routes),
510 },
509}; 511};
510 512
511static const struct of_device_id wm8741_of_match[] = { 513static const struct of_device_id wm8741_of_match[] = {
diff --git a/sound/soc/codecs/wm8750.c b/sound/soc/codecs/wm8750.c
index bd9dcd2161bc..0da2bbaf06d1 100644
--- a/sound/soc/codecs/wm8750.c
+++ b/sound/soc/codecs/wm8750.c
@@ -708,17 +708,19 @@ static int wm8750_probe(struct snd_soc_codec *codec)
708 return ret; 708 return ret;
709} 709}
710 710
711static struct snd_soc_codec_driver soc_codec_dev_wm8750 = { 711static const struct snd_soc_codec_driver soc_codec_dev_wm8750 = {
712 .probe = wm8750_probe, 712 .probe = wm8750_probe,
713 .set_bias_level = wm8750_set_bias_level, 713 .set_bias_level = wm8750_set_bias_level,
714 .suspend_bias_off = true, 714 .suspend_bias_off = true,
715 715
716 .controls = wm8750_snd_controls, 716 .component_driver = {
717 .num_controls = ARRAY_SIZE(wm8750_snd_controls), 717 .controls = wm8750_snd_controls,
718 .dapm_widgets = wm8750_dapm_widgets, 718 .num_controls = ARRAY_SIZE(wm8750_snd_controls),
719 .num_dapm_widgets = ARRAY_SIZE(wm8750_dapm_widgets), 719 .dapm_widgets = wm8750_dapm_widgets,
720 .dapm_routes = wm8750_dapm_routes, 720 .num_dapm_widgets = ARRAY_SIZE(wm8750_dapm_widgets),
721 .num_dapm_routes = ARRAY_SIZE(wm8750_dapm_routes), 721 .dapm_routes = wm8750_dapm_routes,
722 .num_dapm_routes = ARRAY_SIZE(wm8750_dapm_routes),
723 },
722}; 724};
723 725
724static const struct of_device_id wm8750_of_match[] = { 726static const struct of_device_id wm8750_of_match[] = {
diff --git a/sound/soc/codecs/wm8753.c b/sound/soc/codecs/wm8753.c
index cdcc91282e8a..9bdf5447f6f6 100644
--- a/sound/soc/codecs/wm8753.c
+++ b/sound/soc/codecs/wm8753.c
@@ -1478,18 +1478,20 @@ static int wm8753_probe(struct snd_soc_codec *codec)
1478 return 0; 1478 return 0;
1479} 1479}
1480 1480
1481static struct snd_soc_codec_driver soc_codec_dev_wm8753 = { 1481static const struct snd_soc_codec_driver soc_codec_dev_wm8753 = {
1482 .probe = wm8753_probe, 1482 .probe = wm8753_probe,
1483 .resume = wm8753_resume, 1483 .resume = wm8753_resume,
1484 .set_bias_level = wm8753_set_bias_level, 1484 .set_bias_level = wm8753_set_bias_level,
1485 .suspend_bias_off = true, 1485 .suspend_bias_off = true,
1486 1486
1487 .controls = wm8753_snd_controls, 1487 .component_driver = {
1488 .num_controls = ARRAY_SIZE(wm8753_snd_controls), 1488 .controls = wm8753_snd_controls,
1489 .dapm_widgets = wm8753_dapm_widgets, 1489 .num_controls = ARRAY_SIZE(wm8753_snd_controls),
1490 .num_dapm_widgets = ARRAY_SIZE(wm8753_dapm_widgets), 1490 .dapm_widgets = wm8753_dapm_widgets,
1491 .dapm_routes = wm8753_dapm_routes, 1491 .num_dapm_widgets = ARRAY_SIZE(wm8753_dapm_widgets),
1492 .num_dapm_routes = ARRAY_SIZE(wm8753_dapm_routes), 1492 .dapm_routes = wm8753_dapm_routes,
1493 .num_dapm_routes = ARRAY_SIZE(wm8753_dapm_routes),
1494 },
1493}; 1495};
1494 1496
1495static const struct of_device_id wm8753_of_match[] = { 1497static const struct of_device_id wm8753_of_match[] = {
diff --git a/sound/soc/codecs/wm8770.c b/sound/soc/codecs/wm8770.c
index df6178464b00..d6edcbbdec12 100644
--- a/sound/soc/codecs/wm8770.c
+++ b/sound/soc/codecs/wm8770.c
@@ -608,17 +608,19 @@ err_reg_enable:
608 return ret; 608 return ret;
609} 609}
610 610
611static struct snd_soc_codec_driver soc_codec_dev_wm8770 = { 611static const struct snd_soc_codec_driver soc_codec_dev_wm8770 = {
612 .probe = wm8770_probe, 612 .probe = wm8770_probe,
613 .set_bias_level = wm8770_set_bias_level, 613 .set_bias_level = wm8770_set_bias_level,
614 .idle_bias_off = true, 614 .idle_bias_off = true,
615 615
616 .controls = wm8770_snd_controls, 616 .component_driver = {
617 .num_controls = ARRAY_SIZE(wm8770_snd_controls), 617 .controls = wm8770_snd_controls,
618 .dapm_widgets = wm8770_dapm_widgets, 618 .num_controls = ARRAY_SIZE(wm8770_snd_controls),
619 .num_dapm_widgets = ARRAY_SIZE(wm8770_dapm_widgets), 619 .dapm_widgets = wm8770_dapm_widgets,
620 .dapm_routes = wm8770_intercon, 620 .num_dapm_widgets = ARRAY_SIZE(wm8770_dapm_widgets),
621 .num_dapm_routes = ARRAY_SIZE(wm8770_intercon), 621 .dapm_routes = wm8770_intercon,
622 .num_dapm_routes = ARRAY_SIZE(wm8770_intercon),
623 },
622}; 624};
623 625
624static const struct of_device_id wm8770_of_match[] = { 626static const struct of_device_id wm8770_of_match[] = {
diff --git a/sound/soc/codecs/wm8776.c b/sound/soc/codecs/wm8776.c
index 5af44f9a8cf2..ae30480b3976 100644
--- a/sound/soc/codecs/wm8776.c
+++ b/sound/soc/codecs/wm8776.c
@@ -425,17 +425,19 @@ static int wm8776_probe(struct snd_soc_codec *codec)
425 return ret; 425 return ret;
426} 426}
427 427
428static struct snd_soc_codec_driver soc_codec_dev_wm8776 = { 428static const struct snd_soc_codec_driver soc_codec_dev_wm8776 = {
429 .probe = wm8776_probe, 429 .probe = wm8776_probe,
430 .set_bias_level = wm8776_set_bias_level, 430 .set_bias_level = wm8776_set_bias_level,
431 .suspend_bias_off = true, 431 .suspend_bias_off = true,
432 432
433 .controls = wm8776_snd_controls, 433 .component_driver = {
434 .num_controls = ARRAY_SIZE(wm8776_snd_controls), 434 .controls = wm8776_snd_controls,
435 .dapm_widgets = wm8776_dapm_widgets, 435 .num_controls = ARRAY_SIZE(wm8776_snd_controls),
436 .num_dapm_widgets = ARRAY_SIZE(wm8776_dapm_widgets), 436 .dapm_widgets = wm8776_dapm_widgets,
437 .dapm_routes = routes, 437 .num_dapm_widgets = ARRAY_SIZE(wm8776_dapm_widgets),
438 .num_dapm_routes = ARRAY_SIZE(routes), 438 .dapm_routes = routes,
439 .num_dapm_routes = ARRAY_SIZE(routes),
440 },
439}; 441};
440 442
441static const struct of_device_id wm8776_of_match[] = { 443static const struct of_device_id wm8776_of_match[] = {
diff --git a/sound/soc/codecs/wm8782.c b/sound/soc/codecs/wm8782.c
index fb55fd845d27..bcda21018505 100644
--- a/sound/soc/codecs/wm8782.c
+++ b/sound/soc/codecs/wm8782.c
@@ -50,11 +50,13 @@ static struct snd_soc_dai_driver wm8782_dai = {
50 }, 50 },
51}; 51};
52 52
53static struct snd_soc_codec_driver soc_codec_dev_wm8782 = { 53static const struct snd_soc_codec_driver soc_codec_dev_wm8782 = {
54 .dapm_widgets = wm8782_dapm_widgets, 54 .component_driver = {
55 .num_dapm_widgets = ARRAY_SIZE(wm8782_dapm_widgets), 55 .dapm_widgets = wm8782_dapm_widgets,
56 .dapm_routes = wm8782_dapm_routes, 56 .num_dapm_widgets = ARRAY_SIZE(wm8782_dapm_widgets),
57 .num_dapm_routes = ARRAY_SIZE(wm8782_dapm_routes), 57 .dapm_routes = wm8782_dapm_routes,
58 .num_dapm_routes = ARRAY_SIZE(wm8782_dapm_routes),
59 },
58}; 60};
59 61
60static int wm8782_probe(struct platform_device *pdev) 62static int wm8782_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/wm8804.c b/sound/soc/codecs/wm8804.c
index 8d914702cae4..af95d648265b 100644
--- a/sound/soc/codecs/wm8804.c
+++ b/sound/soc/codecs/wm8804.c
@@ -545,10 +545,12 @@ static struct snd_soc_dai_driver wm8804_dai = {
545static const struct snd_soc_codec_driver soc_codec_dev_wm8804 = { 545static const struct snd_soc_codec_driver soc_codec_dev_wm8804 = {
546 .idle_bias_off = true, 546 .idle_bias_off = true,
547 547
548 .dapm_widgets = wm8804_dapm_widgets, 548 .component_driver = {
549 .num_dapm_widgets = ARRAY_SIZE(wm8804_dapm_widgets), 549 .dapm_widgets = wm8804_dapm_widgets,
550 .dapm_routes = wm8804_dapm_routes, 550 .num_dapm_widgets = ARRAY_SIZE(wm8804_dapm_widgets),
551 .num_dapm_routes = ARRAY_SIZE(wm8804_dapm_routes), 551 .dapm_routes = wm8804_dapm_routes,
552 .num_dapm_routes = ARRAY_SIZE(wm8804_dapm_routes),
553 },
552}; 554};
553 555
554const struct regmap_config wm8804_regmap_config = { 556const struct regmap_config wm8804_regmap_config = {
diff --git a/sound/soc/codecs/wm8900.c b/sound/soc/codecs/wm8900.c
index 5d8dca88d612..c77b49a29311 100644
--- a/sound/soc/codecs/wm8900.c
+++ b/sound/soc/codecs/wm8900.c
@@ -1208,18 +1208,20 @@ static int wm8900_probe(struct snd_soc_codec *codec)
1208 return 0; 1208 return 0;
1209} 1209}
1210 1210
1211static struct snd_soc_codec_driver soc_codec_dev_wm8900 = { 1211static const struct snd_soc_codec_driver soc_codec_dev_wm8900 = {
1212 .probe = wm8900_probe, 1212 .probe = wm8900_probe,
1213 .suspend = wm8900_suspend, 1213 .suspend = wm8900_suspend,
1214 .resume = wm8900_resume, 1214 .resume = wm8900_resume,
1215 .set_bias_level = wm8900_set_bias_level, 1215 .set_bias_level = wm8900_set_bias_level,
1216 1216
1217 .controls = wm8900_snd_controls, 1217 .component_driver = {
1218 .num_controls = ARRAY_SIZE(wm8900_snd_controls), 1218 .controls = wm8900_snd_controls,
1219 .dapm_widgets = wm8900_dapm_widgets, 1219 .num_controls = ARRAY_SIZE(wm8900_snd_controls),
1220 .num_dapm_widgets = ARRAY_SIZE(wm8900_dapm_widgets), 1220 .dapm_widgets = wm8900_dapm_widgets,
1221 .dapm_routes = wm8900_dapm_routes, 1221 .num_dapm_widgets = ARRAY_SIZE(wm8900_dapm_widgets),
1222 .num_dapm_routes = ARRAY_SIZE(wm8900_dapm_routes), 1222 .dapm_routes = wm8900_dapm_routes,
1223 .num_dapm_routes = ARRAY_SIZE(wm8900_dapm_routes),
1224 },
1223}; 1225};
1224 1226
1225static const struct regmap_config wm8900_regmap = { 1227static const struct regmap_config wm8900_regmap = {
diff --git a/sound/soc/codecs/wm8903.c b/sound/soc/codecs/wm8903.c
index a26ca490cf31..837c8b9f19e9 100644
--- a/sound/soc/codecs/wm8903.c
+++ b/sound/soc/codecs/wm8903.c
@@ -1874,18 +1874,20 @@ static void wm8903_free_gpio(struct wm8903_priv *wm8903)
1874} 1874}
1875#endif 1875#endif
1876 1876
1877static struct snd_soc_codec_driver soc_codec_dev_wm8903 = { 1877static const struct snd_soc_codec_driver soc_codec_dev_wm8903 = {
1878 .resume = wm8903_resume, 1878 .resume = wm8903_resume,
1879 .set_bias_level = wm8903_set_bias_level, 1879 .set_bias_level = wm8903_set_bias_level,
1880 .seq_notifier = wm8903_seq_notifier, 1880 .seq_notifier = wm8903_seq_notifier,
1881 .suspend_bias_off = true, 1881 .suspend_bias_off = true,
1882 1882
1883 .controls = wm8903_snd_controls, 1883 .component_driver = {
1884 .num_controls = ARRAY_SIZE(wm8903_snd_controls), 1884 .controls = wm8903_snd_controls,
1885 .dapm_widgets = wm8903_dapm_widgets, 1885 .num_controls = ARRAY_SIZE(wm8903_snd_controls),
1886 .num_dapm_widgets = ARRAY_SIZE(wm8903_dapm_widgets), 1886 .dapm_widgets = wm8903_dapm_widgets,
1887 .dapm_routes = wm8903_intercon, 1887 .num_dapm_widgets = ARRAY_SIZE(wm8903_dapm_widgets),
1888 .num_dapm_routes = ARRAY_SIZE(wm8903_intercon), 1888 .dapm_routes = wm8903_intercon,
1889 .num_dapm_routes = ARRAY_SIZE(wm8903_intercon),
1890 },
1889}; 1891};
1890 1892
1891static const struct regmap_config wm8903_regmap = { 1893static const struct regmap_config wm8903_regmap = {
diff --git a/sound/soc/codecs/wm8904.c b/sound/soc/codecs/wm8904.c
index edd7a7709194..4fd350e8420d 100644
--- a/sound/soc/codecs/wm8904.c
+++ b/sound/soc/codecs/wm8904.c
@@ -2086,7 +2086,7 @@ static int wm8904_remove(struct snd_soc_codec *codec)
2086 return 0; 2086 return 0;
2087} 2087}
2088 2088
2089static struct snd_soc_codec_driver soc_codec_dev_wm8904 = { 2089static const struct snd_soc_codec_driver soc_codec_dev_wm8904 = {
2090 .probe = wm8904_probe, 2090 .probe = wm8904_probe,
2091 .remove = wm8904_remove, 2091 .remove = wm8904_remove,
2092 .set_bias_level = wm8904_set_bias_level, 2092 .set_bias_level = wm8904_set_bias_level,
diff --git a/sound/soc/codecs/wm8940.c b/sound/soc/codecs/wm8940.c
index 1c600819f768..b5935625feeb 100644
--- a/sound/soc/codecs/wm8940.c
+++ b/sound/soc/codecs/wm8940.c
@@ -723,17 +723,19 @@ static int wm8940_probe(struct snd_soc_codec *codec)
723 return ret; 723 return ret;
724} 724}
725 725
726static struct snd_soc_codec_driver soc_codec_dev_wm8940 = { 726static const struct snd_soc_codec_driver soc_codec_dev_wm8940 = {
727 .probe = wm8940_probe, 727 .probe = wm8940_probe,
728 .set_bias_level = wm8940_set_bias_level, 728 .set_bias_level = wm8940_set_bias_level,
729 .suspend_bias_off = true, 729 .suspend_bias_off = true,
730 730
731 .controls = wm8940_snd_controls, 731 .component_driver = {
732 .num_controls = ARRAY_SIZE(wm8940_snd_controls), 732 .controls = wm8940_snd_controls,
733 .dapm_widgets = wm8940_dapm_widgets, 733 .num_controls = ARRAY_SIZE(wm8940_snd_controls),
734 .num_dapm_widgets = ARRAY_SIZE(wm8940_dapm_widgets), 734 .dapm_widgets = wm8940_dapm_widgets,
735 .dapm_routes = wm8940_dapm_routes, 735 .num_dapm_widgets = ARRAY_SIZE(wm8940_dapm_widgets),
736 .num_dapm_routes = ARRAY_SIZE(wm8940_dapm_routes), 736 .dapm_routes = wm8940_dapm_routes,
737 .num_dapm_routes = ARRAY_SIZE(wm8940_dapm_routes),
738 },
737}; 739};
738 740
739static const struct regmap_config wm8940_regmap = { 741static const struct regmap_config wm8940_regmap = {
diff --git a/sound/soc/codecs/wm8955.c b/sound/soc/codecs/wm8955.c
index 9db00d53abe7..1edc7b1df31d 100644
--- a/sound/soc/codecs/wm8955.c
+++ b/sound/soc/codecs/wm8955.c
@@ -940,17 +940,19 @@ err_enable:
940 return ret; 940 return ret;
941} 941}
942 942
943static struct snd_soc_codec_driver soc_codec_dev_wm8955 = { 943static const struct snd_soc_codec_driver soc_codec_dev_wm8955 = {
944 .probe = wm8955_probe, 944 .probe = wm8955_probe,
945 .set_bias_level = wm8955_set_bias_level, 945 .set_bias_level = wm8955_set_bias_level,
946 .suspend_bias_off = true, 946 .suspend_bias_off = true,
947 947
948 .controls = wm8955_snd_controls, 948 .component_driver = {
949 .num_controls = ARRAY_SIZE(wm8955_snd_controls), 949 .controls = wm8955_snd_controls,
950 .dapm_widgets = wm8955_dapm_widgets, 950 .num_controls = ARRAY_SIZE(wm8955_snd_controls),
951 .num_dapm_widgets = ARRAY_SIZE(wm8955_dapm_widgets), 951 .dapm_widgets = wm8955_dapm_widgets,
952 .dapm_routes = wm8955_dapm_routes, 952 .num_dapm_widgets = ARRAY_SIZE(wm8955_dapm_widgets),
953 .num_dapm_routes = ARRAY_SIZE(wm8955_dapm_routes), 953 .dapm_routes = wm8955_dapm_routes,
954 .num_dapm_routes = ARRAY_SIZE(wm8955_dapm_routes),
955 },
954}; 956};
955 957
956static const struct regmap_config wm8955_regmap = { 958static const struct regmap_config wm8955_regmap = {
diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c
index d7f444f87460..be3244361210 100644
--- a/sound/soc/codecs/wm8960.c
+++ b/sound/soc/codecs/wm8960.c
@@ -1264,7 +1264,7 @@ static int wm8960_probe(struct snd_soc_codec *codec)
1264 return 0; 1264 return 0;
1265} 1265}
1266 1266
1267static struct snd_soc_codec_driver soc_codec_dev_wm8960 = { 1267static const struct snd_soc_codec_driver soc_codec_dev_wm8960 = {
1268 .probe = wm8960_probe, 1268 .probe = wm8960_probe,
1269 .set_bias_level = wm8960_set_bias_level, 1269 .set_bias_level = wm8960_set_bias_level,
1270 .suspend_bias_off = true, 1270 .suspend_bias_off = true,
diff --git a/sound/soc/codecs/wm8961.c b/sound/soc/codecs/wm8961.c
index e30446a04740..e23ceac76015 100644
--- a/sound/soc/codecs/wm8961.c
+++ b/sound/soc/codecs/wm8961.c
@@ -882,18 +882,20 @@ static int wm8961_resume(struct snd_soc_codec *codec)
882#define wm8961_resume NULL 882#define wm8961_resume NULL
883#endif 883#endif
884 884
885static struct snd_soc_codec_driver soc_codec_dev_wm8961 = { 885static const struct snd_soc_codec_driver soc_codec_dev_wm8961 = {
886 .probe = wm8961_probe, 886 .probe = wm8961_probe,
887 .resume = wm8961_resume, 887 .resume = wm8961_resume,
888 .set_bias_level = wm8961_set_bias_level, 888 .set_bias_level = wm8961_set_bias_level,
889 .suspend_bias_off = true, 889 .suspend_bias_off = true,
890 890
891 .controls = wm8961_snd_controls, 891 .component_driver = {
892 .num_controls = ARRAY_SIZE(wm8961_snd_controls), 892 .controls = wm8961_snd_controls,
893 .dapm_widgets = wm8961_dapm_widgets, 893 .num_controls = ARRAY_SIZE(wm8961_snd_controls),
894 .num_dapm_widgets = ARRAY_SIZE(wm8961_dapm_widgets), 894 .dapm_widgets = wm8961_dapm_widgets,
895 .dapm_routes = audio_paths, 895 .num_dapm_widgets = ARRAY_SIZE(wm8961_dapm_widgets),
896 .num_dapm_routes = ARRAY_SIZE(audio_paths), 896 .dapm_routes = audio_paths,
897 .num_dapm_routes = ARRAY_SIZE(audio_paths),
898 },
897}; 899};
898 900
899static const struct regmap_config wm8961_regmap = { 901static const struct regmap_config wm8961_regmap = {
diff --git a/sound/soc/codecs/wm8962.c b/sound/soc/codecs/wm8962.c
index f3109da24769..392b92067011 100644
--- a/sound/soc/codecs/wm8962.c
+++ b/sound/soc/codecs/wm8962.c
@@ -3479,7 +3479,7 @@ static int wm8962_remove(struct snd_soc_codec *codec)
3479 return 0; 3479 return 0;
3480} 3480}
3481 3481
3482static struct snd_soc_codec_driver soc_codec_dev_wm8962 = { 3482static const struct snd_soc_codec_driver soc_codec_dev_wm8962 = {
3483 .probe = wm8962_probe, 3483 .probe = wm8962_probe,
3484 .remove = wm8962_remove, 3484 .remove = wm8962_remove,
3485 .set_bias_level = wm8962_set_bias_level, 3485 .set_bias_level = wm8962_set_bias_level,
diff --git a/sound/soc/codecs/wm8971.c b/sound/soc/codecs/wm8971.c
index 2cdde32c43c6..887d31cf3945 100644
--- a/sound/soc/codecs/wm8971.c
+++ b/sound/soc/codecs/wm8971.c
@@ -649,17 +649,19 @@ static int wm8971_probe(struct snd_soc_codec *codec)
649 return 0; 649 return 0;
650} 650}
651 651
652static struct snd_soc_codec_driver soc_codec_dev_wm8971 = { 652static const struct snd_soc_codec_driver soc_codec_dev_wm8971 = {
653 .probe = wm8971_probe, 653 .probe = wm8971_probe,
654 .set_bias_level = wm8971_set_bias_level, 654 .set_bias_level = wm8971_set_bias_level,
655 .suspend_bias_off = true, 655 .suspend_bias_off = true,
656 656
657 .controls = wm8971_snd_controls, 657 .component_driver = {
658 .num_controls = ARRAY_SIZE(wm8971_snd_controls), 658 .controls = wm8971_snd_controls,
659 .dapm_widgets = wm8971_dapm_widgets, 659 .num_controls = ARRAY_SIZE(wm8971_snd_controls),
660 .num_dapm_widgets = ARRAY_SIZE(wm8971_dapm_widgets), 660 .dapm_widgets = wm8971_dapm_widgets,
661 .dapm_routes = wm8971_dapm_routes, 661 .num_dapm_widgets = ARRAY_SIZE(wm8971_dapm_widgets),
662 .num_dapm_routes = ARRAY_SIZE(wm8971_dapm_routes), 662 .dapm_routes = wm8971_dapm_routes,
663 .num_dapm_routes = ARRAY_SIZE(wm8971_dapm_routes),
664 },
663}; 665};
664 666
665static const struct regmap_config wm8971_regmap = { 667static const struct regmap_config wm8971_regmap = {
diff --git a/sound/soc/codecs/wm8974.c b/sound/soc/codecs/wm8974.c
index dc8c3b1ebb6f..d414ddd6e197 100644
--- a/sound/soc/codecs/wm8974.c
+++ b/sound/soc/codecs/wm8974.c
@@ -676,17 +676,19 @@ static int wm8974_probe(struct snd_soc_codec *codec)
676 return 0; 676 return 0;
677} 677}
678 678
679static struct snd_soc_codec_driver soc_codec_dev_wm8974 = { 679static const struct snd_soc_codec_driver soc_codec_dev_wm8974 = {
680 .probe = wm8974_probe, 680 .probe = wm8974_probe,
681 .set_bias_level = wm8974_set_bias_level, 681 .set_bias_level = wm8974_set_bias_level,
682 .suspend_bias_off = true, 682 .suspend_bias_off = true,
683 683
684 .controls = wm8974_snd_controls, 684 .component_driver = {
685 .num_controls = ARRAY_SIZE(wm8974_snd_controls), 685 .controls = wm8974_snd_controls,
686 .dapm_widgets = wm8974_dapm_widgets, 686 .num_controls = ARRAY_SIZE(wm8974_snd_controls),
687 .num_dapm_widgets = ARRAY_SIZE(wm8974_dapm_widgets), 687 .dapm_widgets = wm8974_dapm_widgets,
688 .dapm_routes = wm8974_dapm_routes, 688 .num_dapm_widgets = ARRAY_SIZE(wm8974_dapm_widgets),
689 .num_dapm_routes = ARRAY_SIZE(wm8974_dapm_routes), 689 .dapm_routes = wm8974_dapm_routes,
690 .num_dapm_routes = ARRAY_SIZE(wm8974_dapm_routes),
691 },
690}; 692};
691 693
692static int wm8974_i2c_probe(struct i2c_client *i2c, 694static int wm8974_i2c_probe(struct i2c_client *i2c,
diff --git a/sound/soc/codecs/wm8978.c b/sound/soc/codecs/wm8978.c
index d36d6001fbb7..90b2d418ef60 100644
--- a/sound/soc/codecs/wm8978.c
+++ b/sound/soc/codecs/wm8978.c
@@ -993,18 +993,20 @@ static int wm8978_probe(struct snd_soc_codec *codec)
993 return 0; 993 return 0;
994} 994}
995 995
996static struct snd_soc_codec_driver soc_codec_dev_wm8978 = { 996static const struct snd_soc_codec_driver soc_codec_dev_wm8978 = {
997 .probe = wm8978_probe, 997 .probe = wm8978_probe,
998 .suspend = wm8978_suspend, 998 .suspend = wm8978_suspend,
999 .resume = wm8978_resume, 999 .resume = wm8978_resume,
1000 .set_bias_level = wm8978_set_bias_level, 1000 .set_bias_level = wm8978_set_bias_level,
1001 1001
1002 .controls = wm8978_snd_controls, 1002 .component_driver = {
1003 .num_controls = ARRAY_SIZE(wm8978_snd_controls), 1003 .controls = wm8978_snd_controls,
1004 .dapm_widgets = wm8978_dapm_widgets, 1004 .num_controls = ARRAY_SIZE(wm8978_snd_controls),
1005 .num_dapm_widgets = ARRAY_SIZE(wm8978_dapm_widgets), 1005 .dapm_widgets = wm8978_dapm_widgets,
1006 .dapm_routes = wm8978_dapm_routes, 1006 .num_dapm_widgets = ARRAY_SIZE(wm8978_dapm_widgets),
1007 .num_dapm_routes = ARRAY_SIZE(wm8978_dapm_routes), 1007 .dapm_routes = wm8978_dapm_routes,
1008 .num_dapm_routes = ARRAY_SIZE(wm8978_dapm_routes),
1009 },
1008}; 1010};
1009 1011
1010static const struct regmap_config wm8978_regmap_config = { 1012static const struct regmap_config wm8978_regmap_config = {
diff --git a/sound/soc/codecs/wm8983.c b/sound/soc/codecs/wm8983.c
index 0c002a5712cb..bfdbe72ee687 100644
--- a/sound/soc/codecs/wm8983.c
+++ b/sound/soc/codecs/wm8983.c
@@ -976,16 +976,18 @@ static struct snd_soc_dai_driver wm8983_dai = {
976 .symmetric_rates = 1 976 .symmetric_rates = 1
977}; 977};
978 978
979static struct snd_soc_codec_driver soc_codec_dev_wm8983 = { 979static const struct snd_soc_codec_driver soc_codec_dev_wm8983 = {
980 .probe = wm8983_probe, 980 .probe = wm8983_probe,
981 .set_bias_level = wm8983_set_bias_level, 981 .set_bias_level = wm8983_set_bias_level,
982 .suspend_bias_off = true, 982 .suspend_bias_off = true,
983 .controls = wm8983_snd_controls, 983 .component_driver = {
984 .num_controls = ARRAY_SIZE(wm8983_snd_controls), 984 .controls = wm8983_snd_controls,
985 .dapm_widgets = wm8983_dapm_widgets, 985 .num_controls = ARRAY_SIZE(wm8983_snd_controls),
986 .num_dapm_widgets = ARRAY_SIZE(wm8983_dapm_widgets), 986 .dapm_widgets = wm8983_dapm_widgets,
987 .dapm_routes = wm8983_audio_map, 987 .num_dapm_widgets = ARRAY_SIZE(wm8983_dapm_widgets),
988 .num_dapm_routes = ARRAY_SIZE(wm8983_audio_map), 988 .dapm_routes = wm8983_audio_map,
989 .num_dapm_routes = ARRAY_SIZE(wm8983_audio_map),
990 },
989}; 991};
990 992
991static const struct regmap_config wm8983_regmap = { 993static const struct regmap_config wm8983_regmap = {
diff --git a/sound/soc/codecs/wm8985.c b/sound/soc/codecs/wm8985.c
index 7347abff4b2c..05344f974ff3 100644
--- a/sound/soc/codecs/wm8985.c
+++ b/sound/soc/codecs/wm8985.c
@@ -1105,17 +1105,19 @@ static struct snd_soc_dai_driver wm8985_dai = {
1105 .symmetric_rates = 1 1105 .symmetric_rates = 1
1106}; 1106};
1107 1107
1108static struct snd_soc_codec_driver soc_codec_dev_wm8985 = { 1108static const struct snd_soc_codec_driver soc_codec_dev_wm8985 = {
1109 .probe = wm8985_probe, 1109 .probe = wm8985_probe,
1110 .set_bias_level = wm8985_set_bias_level, 1110 .set_bias_level = wm8985_set_bias_level,
1111 .suspend_bias_off = true, 1111 .suspend_bias_off = true,
1112 1112
1113 .controls = wm8985_common_snd_controls, 1113 .component_driver = {
1114 .num_controls = ARRAY_SIZE(wm8985_common_snd_controls), 1114 .controls = wm8985_common_snd_controls,
1115 .dapm_widgets = wm8985_common_dapm_widgets, 1115 .num_controls = ARRAY_SIZE(wm8985_common_snd_controls),
1116 .num_dapm_widgets = ARRAY_SIZE(wm8985_common_dapm_widgets), 1116 .dapm_widgets = wm8985_common_dapm_widgets,
1117 .dapm_routes = wm8985_common_dapm_routes, 1117 .num_dapm_widgets = ARRAY_SIZE(wm8985_common_dapm_widgets),
1118 .num_dapm_routes = ARRAY_SIZE(wm8985_common_dapm_routes), 1118 .dapm_routes = wm8985_common_dapm_routes,
1119 .num_dapm_routes = ARRAY_SIZE(wm8985_common_dapm_routes),
1120 },
1119}; 1121};
1120 1122
1121static const struct regmap_config wm8985_regmap = { 1123static const struct regmap_config wm8985_regmap = {
diff --git a/sound/soc/codecs/wm8988.c b/sound/soc/codecs/wm8988.c
index 895721a256f0..b0d0219532f2 100644
--- a/sound/soc/codecs/wm8988.c
+++ b/sound/soc/codecs/wm8988.c
@@ -817,12 +817,14 @@ static const struct snd_soc_codec_driver soc_codec_dev_wm8988 = {
817 .set_bias_level = wm8988_set_bias_level, 817 .set_bias_level = wm8988_set_bias_level,
818 .suspend_bias_off = true, 818 .suspend_bias_off = true,
819 819
820 .controls = wm8988_snd_controls, 820 .component_driver = {
821 .num_controls = ARRAY_SIZE(wm8988_snd_controls), 821 .controls = wm8988_snd_controls,
822 .dapm_widgets = wm8988_dapm_widgets, 822 .num_controls = ARRAY_SIZE(wm8988_snd_controls),
823 .num_dapm_widgets = ARRAY_SIZE(wm8988_dapm_widgets), 823 .dapm_widgets = wm8988_dapm_widgets,
824 .dapm_routes = wm8988_dapm_routes, 824 .num_dapm_widgets = ARRAY_SIZE(wm8988_dapm_widgets),
825 .num_dapm_routes = ARRAY_SIZE(wm8988_dapm_routes), 825 .dapm_routes = wm8988_dapm_routes,
826 .num_dapm_routes = ARRAY_SIZE(wm8988_dapm_routes),
827 },
826}; 828};
827 829
828static const struct regmap_config wm8988_regmap = { 830static const struct regmap_config wm8988_regmap = {
diff --git a/sound/soc/codecs/wm8990.c b/sound/soc/codecs/wm8990.c
index 23ecd30d8bca..a8945001e696 100644
--- a/sound/soc/codecs/wm8990.c
+++ b/sound/soc/codecs/wm8990.c
@@ -1294,17 +1294,19 @@ static int wm8990_probe(struct snd_soc_codec *codec)
1294 return 0; 1294 return 0;
1295} 1295}
1296 1296
1297static struct snd_soc_codec_driver soc_codec_dev_wm8990 = { 1297static const struct snd_soc_codec_driver soc_codec_dev_wm8990 = {
1298 .probe = wm8990_probe, 1298 .probe = wm8990_probe,
1299 .set_bias_level = wm8990_set_bias_level, 1299 .set_bias_level = wm8990_set_bias_level,
1300 .suspend_bias_off = true, 1300 .suspend_bias_off = true,
1301 1301
1302 .controls = wm8990_snd_controls, 1302 .component_driver = {
1303 .num_controls = ARRAY_SIZE(wm8990_snd_controls), 1303 .controls = wm8990_snd_controls,
1304 .dapm_widgets = wm8990_dapm_widgets, 1304 .num_controls = ARRAY_SIZE(wm8990_snd_controls),
1305 .num_dapm_widgets = ARRAY_SIZE(wm8990_dapm_widgets), 1305 .dapm_widgets = wm8990_dapm_widgets,
1306 .dapm_routes = wm8990_dapm_routes, 1306 .num_dapm_widgets = ARRAY_SIZE(wm8990_dapm_widgets),
1307 .num_dapm_routes = ARRAY_SIZE(wm8990_dapm_routes), 1307 .dapm_routes = wm8990_dapm_routes,
1308 .num_dapm_routes = ARRAY_SIZE(wm8990_dapm_routes),
1309 },
1308}; 1310};
1309 1311
1310static const struct regmap_config wm8990_regmap = { 1312static const struct regmap_config wm8990_regmap = {
diff --git a/sound/soc/codecs/wm8991.c b/sound/soc/codecs/wm8991.c
index c9ee0ac6a654..984379040794 100644
--- a/sound/soc/codecs/wm8991.c
+++ b/sound/soc/codecs/wm8991.c
@@ -1232,16 +1232,18 @@ static struct snd_soc_dai_driver wm8991_dai = {
1232 .ops = &wm8991_ops 1232 .ops = &wm8991_ops
1233}; 1233};
1234 1234
1235static struct snd_soc_codec_driver soc_codec_dev_wm8991 = { 1235static const struct snd_soc_codec_driver soc_codec_dev_wm8991 = {
1236 .set_bias_level = wm8991_set_bias_level, 1236 .set_bias_level = wm8991_set_bias_level,
1237 .suspend_bias_off = true, 1237 .suspend_bias_off = true,
1238 1238
1239 .controls = wm8991_snd_controls, 1239 .component_driver = {
1240 .num_controls = ARRAY_SIZE(wm8991_snd_controls), 1240 .controls = wm8991_snd_controls,
1241 .dapm_widgets = wm8991_dapm_widgets, 1241 .num_controls = ARRAY_SIZE(wm8991_snd_controls),
1242 .num_dapm_widgets = ARRAY_SIZE(wm8991_dapm_widgets), 1242 .dapm_widgets = wm8991_dapm_widgets,
1243 .dapm_routes = wm8991_dapm_routes, 1243 .num_dapm_widgets = ARRAY_SIZE(wm8991_dapm_widgets),
1244 .num_dapm_routes = ARRAY_SIZE(wm8991_dapm_routes), 1244 .dapm_routes = wm8991_dapm_routes,
1245 .num_dapm_routes = ARRAY_SIZE(wm8991_dapm_routes),
1246 },
1245}; 1247};
1246 1248
1247static const struct regmap_config wm8991_regmap = { 1249static const struct regmap_config wm8991_regmap = {
diff --git a/sound/soc/codecs/wm8993.c b/sound/soc/codecs/wm8993.c
index 8668c4c391b0..195f7bf6eb22 100644
--- a/sound/soc/codecs/wm8993.c
+++ b/sound/soc/codecs/wm8993.c
@@ -1613,7 +1613,7 @@ static const struct regmap_config wm8993_regmap = {
1613 .num_reg_defaults = ARRAY_SIZE(wm8993_reg_defaults), 1613 .num_reg_defaults = ARRAY_SIZE(wm8993_reg_defaults),
1614}; 1614};
1615 1615
1616static struct snd_soc_codec_driver soc_codec_dev_wm8993 = { 1616static const struct snd_soc_codec_driver soc_codec_dev_wm8993 = {
1617 .probe = wm8993_probe, 1617 .probe = wm8993_probe,
1618 .suspend = wm8993_suspend, 1618 .suspend = wm8993_suspend,
1619 .resume = wm8993_resume, 1619 .resume = wm8993_resume,
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c
index a18aecb49935..3896523b71e9 100644
--- a/sound/soc/codecs/wm8994.c
+++ b/sound/soc/codecs/wm8994.c
@@ -4439,7 +4439,7 @@ static struct regmap *wm8994_get_regmap(struct device *dev)
4439 return control->regmap; 4439 return control->regmap;
4440} 4440}
4441 4441
4442static struct snd_soc_codec_driver soc_codec_dev_wm8994 = { 4442static const struct snd_soc_codec_driver soc_codec_dev_wm8994 = {
4443 .probe = wm8994_codec_probe, 4443 .probe = wm8994_codec_probe,
4444 .remove = wm8994_codec_remove, 4444 .remove = wm8994_codec_remove,
4445 .suspend = wm8994_codec_suspend, 4445 .suspend = wm8994_codec_suspend,
diff --git a/sound/soc/codecs/wm8995.c b/sound/soc/codecs/wm8995.c
index 24500bafb0a8..19b08a5cae62 100644
--- a/sound/soc/codecs/wm8995.c
+++ b/sound/soc/codecs/wm8995.c
@@ -2192,12 +2192,14 @@ static const struct snd_soc_codec_driver soc_codec_dev_wm8995 = {
2192 .set_bias_level = wm8995_set_bias_level, 2192 .set_bias_level = wm8995_set_bias_level,
2193 .idle_bias_off = true, 2193 .idle_bias_off = true,
2194 2194
2195 .controls = wm8995_snd_controls, 2195 .component_driver = {
2196 .num_controls = ARRAY_SIZE(wm8995_snd_controls), 2196 .controls = wm8995_snd_controls,
2197 .dapm_widgets = wm8995_dapm_widgets, 2197 .num_controls = ARRAY_SIZE(wm8995_snd_controls),
2198 .num_dapm_widgets = ARRAY_SIZE(wm8995_dapm_widgets), 2198 .dapm_widgets = wm8995_dapm_widgets,
2199 .dapm_routes = wm8995_intercon, 2199 .num_dapm_widgets = ARRAY_SIZE(wm8995_dapm_widgets),
2200 .num_dapm_routes = ARRAY_SIZE(wm8995_intercon), 2200 .dapm_routes = wm8995_intercon,
2201 .num_dapm_routes = ARRAY_SIZE(wm8995_intercon),
2202 },
2201}; 2203};
2202 2204
2203static const struct regmap_config wm8995_regmap = { 2205static const struct regmap_config wm8995_regmap = {
diff --git a/sound/soc/codecs/wm8996.c b/sound/soc/codecs/wm8996.c
index a73044251218..5eba8ffba427 100644
--- a/sound/soc/codecs/wm8996.c
+++ b/sound/soc/codecs/wm8996.c
@@ -2684,18 +2684,20 @@ static int wm8996_remove(struct snd_soc_codec *codec)
2684 return 0; 2684 return 0;
2685} 2685}
2686 2686
2687static struct snd_soc_codec_driver soc_codec_dev_wm8996 = { 2687static const struct snd_soc_codec_driver soc_codec_dev_wm8996 = {
2688 .probe = wm8996_probe, 2688 .probe = wm8996_probe,
2689 .remove = wm8996_remove, 2689 .remove = wm8996_remove,
2690 .set_bias_level = wm8996_set_bias_level, 2690 .set_bias_level = wm8996_set_bias_level,
2691 .idle_bias_off = true, 2691 .idle_bias_off = true,
2692 .seq_notifier = wm8996_seq_notifier, 2692 .seq_notifier = wm8996_seq_notifier,
2693 .controls = wm8996_snd_controls, 2693 .component_driver = {
2694 .num_controls = ARRAY_SIZE(wm8996_snd_controls), 2694 .controls = wm8996_snd_controls,
2695 .dapm_widgets = wm8996_dapm_widgets, 2695 .num_controls = ARRAY_SIZE(wm8996_snd_controls),
2696 .num_dapm_widgets = ARRAY_SIZE(wm8996_dapm_widgets), 2696 .dapm_widgets = wm8996_dapm_widgets,
2697 .dapm_routes = wm8996_dapm_routes, 2697 .num_dapm_widgets = ARRAY_SIZE(wm8996_dapm_widgets),
2698 .num_dapm_routes = ARRAY_SIZE(wm8996_dapm_routes), 2698 .dapm_routes = wm8996_dapm_routes,
2699 .num_dapm_routes = ARRAY_SIZE(wm8996_dapm_routes),
2700 },
2699 .set_pll = wm8996_set_fll, 2701 .set_pll = wm8996_set_fll,
2700}; 2702};
2701 2703
diff --git a/sound/soc/codecs/wm8997.c b/sound/soc/codecs/wm8997.c
index 6b0785b5a5c5..2f2821b3382f 100644
--- a/sound/soc/codecs/wm8997.c
+++ b/sound/soc/codecs/wm8997.c
@@ -1095,7 +1095,7 @@ static struct regmap *wm8997_get_regmap(struct device *dev)
1095 return priv->core.arizona->regmap; 1095 return priv->core.arizona->regmap;
1096} 1096}
1097 1097
1098static struct snd_soc_codec_driver soc_codec_dev_wm8997 = { 1098static const struct snd_soc_codec_driver soc_codec_dev_wm8997 = {
1099 .probe = wm8997_codec_probe, 1099 .probe = wm8997_codec_probe,
1100 .remove = wm8997_codec_remove, 1100 .remove = wm8997_codec_remove,
1101 .get_regmap = wm8997_get_regmap, 1101 .get_regmap = wm8997_get_regmap,
@@ -1105,12 +1105,14 @@ static struct snd_soc_codec_driver soc_codec_dev_wm8997 = {
1105 .set_sysclk = arizona_set_sysclk, 1105 .set_sysclk = arizona_set_sysclk,
1106 .set_pll = wm8997_set_fll, 1106 .set_pll = wm8997_set_fll,
1107 1107
1108 .controls = wm8997_snd_controls, 1108 .component_driver = {
1109 .num_controls = ARRAY_SIZE(wm8997_snd_controls), 1109 .controls = wm8997_snd_controls,
1110 .dapm_widgets = wm8997_dapm_widgets, 1110 .num_controls = ARRAY_SIZE(wm8997_snd_controls),
1111 .num_dapm_widgets = ARRAY_SIZE(wm8997_dapm_widgets), 1111 .dapm_widgets = wm8997_dapm_widgets,
1112 .dapm_routes = wm8997_dapm_routes, 1112 .num_dapm_widgets = ARRAY_SIZE(wm8997_dapm_widgets),
1113 .num_dapm_routes = ARRAY_SIZE(wm8997_dapm_routes), 1113 .dapm_routes = wm8997_dapm_routes,
1114 .num_dapm_routes = ARRAY_SIZE(wm8997_dapm_routes),
1115 },
1114}; 1116};
1115 1117
1116static int wm8997_probe(struct platform_device *pdev) 1118static int wm8997_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/wm8998.c b/sound/soc/codecs/wm8998.c
index 3a5c896a2d13..bcc2e1060a6c 100644
--- a/sound/soc/codecs/wm8998.c
+++ b/sound/soc/codecs/wm8998.c
@@ -966,6 +966,16 @@ static const struct snd_soc_dapm_route wm8998_dapm_routes[] = {
966 { "IN2A", NULL, "SYSCLK" }, 966 { "IN2A", NULL, "SYSCLK" },
967 { "IN2B", NULL, "SYSCLK" }, 967 { "IN2B", NULL, "SYSCLK" },
968 968
969 { "ASRC1L", NULL, "SYSCLK" },
970 { "ASRC1R", NULL, "SYSCLK" },
971 { "ASRC2L", NULL, "SYSCLK" },
972 { "ASRC2R", NULL, "SYSCLK" },
973
974 { "ASRC1L", NULL, "ASYNCCLK" },
975 { "ASRC1R", NULL, "ASYNCCLK" },
976 { "ASRC2L", NULL, "ASYNCCLK" },
977 { "ASRC2R", NULL, "ASYNCCLK" },
978
969 { "SPD1", NULL, "SYSCLK" }, 979 { "SPD1", NULL, "SYSCLK" },
970 { "SPD1", NULL, "SPD1TX1" }, 980 { "SPD1", NULL, "SPD1TX1" },
971 { "SPD1", NULL, "SPD1TX2" }, 981 { "SPD1", NULL, "SPD1TX2" },
@@ -1351,7 +1361,7 @@ static struct regmap *wm8998_get_regmap(struct device *dev)
1351 return priv->core.arizona->regmap; 1361 return priv->core.arizona->regmap;
1352} 1362}
1353 1363
1354static struct snd_soc_codec_driver soc_codec_dev_wm8998 = { 1364static const struct snd_soc_codec_driver soc_codec_dev_wm8998 = {
1355 .probe = wm8998_codec_probe, 1365 .probe = wm8998_codec_probe,
1356 .remove = wm8998_codec_remove, 1366 .remove = wm8998_codec_remove,
1357 .get_regmap = wm8998_get_regmap, 1367 .get_regmap = wm8998_get_regmap,
@@ -1361,12 +1371,14 @@ static struct snd_soc_codec_driver soc_codec_dev_wm8998 = {
1361 .set_sysclk = arizona_set_sysclk, 1371 .set_sysclk = arizona_set_sysclk,
1362 .set_pll = wm8998_set_fll, 1372 .set_pll = wm8998_set_fll,
1363 1373
1364 .controls = wm8998_snd_controls, 1374 .component_driver = {
1365 .num_controls = ARRAY_SIZE(wm8998_snd_controls), 1375 .controls = wm8998_snd_controls,
1366 .dapm_widgets = wm8998_dapm_widgets, 1376 .num_controls = ARRAY_SIZE(wm8998_snd_controls),
1367 .num_dapm_widgets = ARRAY_SIZE(wm8998_dapm_widgets), 1377 .dapm_widgets = wm8998_dapm_widgets,
1368 .dapm_routes = wm8998_dapm_routes, 1378 .num_dapm_widgets = ARRAY_SIZE(wm8998_dapm_widgets),
1369 .num_dapm_routes = ARRAY_SIZE(wm8998_dapm_routes), 1379 .dapm_routes = wm8998_dapm_routes,
1380 .num_dapm_routes = ARRAY_SIZE(wm8998_dapm_routes),
1381 },
1370}; 1382};
1371 1383
1372static int wm8998_probe(struct platform_device *pdev) 1384static int wm8998_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/wm9081.c b/sound/soc/codecs/wm9081.c
index 363b3b667616..856867ec2813 100644
--- a/sound/soc/codecs/wm9081.c
+++ b/sound/soc/codecs/wm9081.c
@@ -1274,7 +1274,7 @@ static int wm9081_probe(struct snd_soc_codec *codec)
1274 return 0; 1274 return 0;
1275} 1275}
1276 1276
1277static struct snd_soc_codec_driver soc_codec_dev_wm9081 = { 1277static const struct snd_soc_codec_driver soc_codec_dev_wm9081 = {
1278 .probe = wm9081_probe, 1278 .probe = wm9081_probe,
1279 1279
1280 .set_sysclk = wm9081_set_sysclk, 1280 .set_sysclk = wm9081_set_sysclk,
@@ -1282,12 +1282,14 @@ static struct snd_soc_codec_driver soc_codec_dev_wm9081 = {
1282 1282
1283 .idle_bias_off = true, 1283 .idle_bias_off = true,
1284 1284
1285 .controls = wm9081_snd_controls, 1285 .component_driver = {
1286 .num_controls = ARRAY_SIZE(wm9081_snd_controls), 1286 .controls = wm9081_snd_controls,
1287 .dapm_widgets = wm9081_dapm_widgets, 1287 .num_controls = ARRAY_SIZE(wm9081_snd_controls),
1288 .num_dapm_widgets = ARRAY_SIZE(wm9081_dapm_widgets), 1288 .dapm_widgets = wm9081_dapm_widgets,
1289 .dapm_routes = wm9081_audio_paths, 1289 .num_dapm_widgets = ARRAY_SIZE(wm9081_dapm_widgets),
1290 .num_dapm_routes = ARRAY_SIZE(wm9081_audio_paths), 1290 .dapm_routes = wm9081_audio_paths,
1291 .num_dapm_routes = ARRAY_SIZE(wm9081_audio_paths),
1292 },
1291}; 1293};
1292 1294
1293static const struct regmap_config wm9081_regmap = { 1295static const struct regmap_config wm9081_regmap = {
diff --git a/sound/soc/codecs/wm9090.c b/sound/soc/codecs/wm9090.c
index 5d737290f547..5a131385cb2f 100644
--- a/sound/soc/codecs/wm9090.c
+++ b/sound/soc/codecs/wm9090.c
@@ -550,7 +550,7 @@ static int wm9090_probe(struct snd_soc_codec *codec)
550 return 0; 550 return 0;
551} 551}
552 552
553static struct snd_soc_codec_driver soc_codec_dev_wm9090 = { 553static const struct snd_soc_codec_driver soc_codec_dev_wm9090 = {
554 .probe = wm9090_probe, 554 .probe = wm9090_probe,
555 .set_bias_level = wm9090_set_bias_level, 555 .set_bias_level = wm9090_set_bias_level,
556 .suspend_bias_off = true, 556 .suspend_bias_off = true,
diff --git a/sound/soc/codecs/wm9705.c b/sound/soc/codecs/wm9705.c
index 744842c76a60..dcdd055db57b 100644
--- a/sound/soc/codecs/wm9705.c
+++ b/sound/soc/codecs/wm9705.c
@@ -352,7 +352,7 @@ static int wm9705_soc_remove(struct snd_soc_codec *codec)
352 return 0; 352 return 0;
353} 353}
354 354
355static struct snd_soc_codec_driver soc_codec_dev_wm9705 = { 355static const struct snd_soc_codec_driver soc_codec_dev_wm9705 = {
356 .probe = wm9705_soc_probe, 356 .probe = wm9705_soc_probe,
357 .remove = wm9705_soc_remove, 357 .remove = wm9705_soc_remove,
358 .suspend = wm9705_soc_suspend, 358 .suspend = wm9705_soc_suspend,
@@ -364,12 +364,14 @@ static struct snd_soc_codec_driver soc_codec_dev_wm9705 = {
364 .reg_cache_step = 2, 364 .reg_cache_step = 2,
365 .reg_cache_default = wm9705_reg, 365 .reg_cache_default = wm9705_reg,
366 366
367 .controls = wm9705_snd_ac97_controls, 367 .component_driver = {
368 .num_controls = ARRAY_SIZE(wm9705_snd_ac97_controls), 368 .controls = wm9705_snd_ac97_controls,
369 .dapm_widgets = wm9705_dapm_widgets, 369 .num_controls = ARRAY_SIZE(wm9705_snd_ac97_controls),
370 .num_dapm_widgets = ARRAY_SIZE(wm9705_dapm_widgets), 370 .dapm_widgets = wm9705_dapm_widgets,
371 .dapm_routes = wm9705_audio_map, 371 .num_dapm_widgets = ARRAY_SIZE(wm9705_dapm_widgets),
372 .num_dapm_routes = ARRAY_SIZE(wm9705_audio_map), 372 .dapm_routes = wm9705_audio_map,
373 .num_dapm_routes = ARRAY_SIZE(wm9705_audio_map),
374 },
373}; 375};
374 376
375static int wm9705_probe(struct platform_device *pdev) 377static int wm9705_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/wm9712.c b/sound/soc/codecs/wm9712.c
index 488a92224249..557709eac698 100644
--- a/sound/soc/codecs/wm9712.c
+++ b/sound/soc/codecs/wm9712.c
@@ -669,7 +669,7 @@ static int wm9712_soc_remove(struct snd_soc_codec *codec)
669 return 0; 669 return 0;
670} 670}
671 671
672static struct snd_soc_codec_driver soc_codec_dev_wm9712 = { 672static const struct snd_soc_codec_driver soc_codec_dev_wm9712 = {
673 .probe = wm9712_soc_probe, 673 .probe = wm9712_soc_probe,
674 .remove = wm9712_soc_remove, 674 .remove = wm9712_soc_remove,
675 .resume = wm9712_soc_resume, 675 .resume = wm9712_soc_resume,
@@ -682,12 +682,14 @@ static struct snd_soc_codec_driver soc_codec_dev_wm9712 = {
682 .reg_cache_step = 2, 682 .reg_cache_step = 2,
683 .reg_cache_default = wm9712_reg, 683 .reg_cache_default = wm9712_reg,
684 684
685 .controls = wm9712_snd_ac97_controls, 685 .component_driver = {
686 .num_controls = ARRAY_SIZE(wm9712_snd_ac97_controls), 686 .controls = wm9712_snd_ac97_controls,
687 .dapm_widgets = wm9712_dapm_widgets, 687 .num_controls = ARRAY_SIZE(wm9712_snd_ac97_controls),
688 .num_dapm_widgets = ARRAY_SIZE(wm9712_dapm_widgets), 688 .dapm_widgets = wm9712_dapm_widgets,
689 .dapm_routes = wm9712_audio_map, 689 .num_dapm_widgets = ARRAY_SIZE(wm9712_dapm_widgets),
690 .num_dapm_routes = ARRAY_SIZE(wm9712_audio_map), 690 .dapm_routes = wm9712_audio_map,
691 .num_dapm_routes = ARRAY_SIZE(wm9712_audio_map),
692 },
691}; 693};
692 694
693static int wm9712_probe(struct platform_device *pdev) 695static int wm9712_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/wm9713.c b/sound/soc/codecs/wm9713.c
index 9849643ef809..e4301ddb1b84 100644
--- a/sound/soc/codecs/wm9713.c
+++ b/sound/soc/codecs/wm9713.c
@@ -1235,19 +1235,21 @@ static int wm9713_soc_remove(struct snd_soc_codec *codec)
1235 return 0; 1235 return 0;
1236} 1236}
1237 1237
1238static struct snd_soc_codec_driver soc_codec_dev_wm9713 = { 1238static const struct snd_soc_codec_driver soc_codec_dev_wm9713 = {
1239 .probe = wm9713_soc_probe, 1239 .probe = wm9713_soc_probe,
1240 .remove = wm9713_soc_remove, 1240 .remove = wm9713_soc_remove,
1241 .suspend = wm9713_soc_suspend, 1241 .suspend = wm9713_soc_suspend,
1242 .resume = wm9713_soc_resume, 1242 .resume = wm9713_soc_resume,
1243 .set_bias_level = wm9713_set_bias_level, 1243 .set_bias_level = wm9713_set_bias_level,
1244 1244
1245 .controls = wm9713_snd_ac97_controls, 1245 .component_driver = {
1246 .num_controls = ARRAY_SIZE(wm9713_snd_ac97_controls), 1246 .controls = wm9713_snd_ac97_controls,
1247 .dapm_widgets = wm9713_dapm_widgets, 1247 .num_controls = ARRAY_SIZE(wm9713_snd_ac97_controls),
1248 .num_dapm_widgets = ARRAY_SIZE(wm9713_dapm_widgets), 1248 .dapm_widgets = wm9713_dapm_widgets,
1249 .dapm_routes = wm9713_audio_map, 1249 .num_dapm_widgets = ARRAY_SIZE(wm9713_dapm_widgets),
1250 .num_dapm_routes = ARRAY_SIZE(wm9713_audio_map), 1250 .dapm_routes = wm9713_audio_map,
1251 .num_dapm_routes = ARRAY_SIZE(wm9713_audio_map),
1252 },
1251}; 1253};
1252 1254
1253static int wm9713_probe(struct platform_device *pdev) 1255static int wm9713_probe(struct platform_device *pdev)
diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c
index 21fbe7d07063..b943dde8dbe5 100644
--- a/sound/soc/codecs/wm_adsp.c
+++ b/sound/soc/codecs/wm_adsp.c
@@ -480,7 +480,7 @@ static ssize_t wm_adsp_debugfs_wmfw_read(struct file *file,
480 480
481 mutex_lock(&dsp->pwr_lock); 481 mutex_lock(&dsp->pwr_lock);
482 482
483 if (!dsp->wmfw_file_name || !dsp->running) 483 if (!dsp->wmfw_file_name || !dsp->booted)
484 ret = 0; 484 ret = 0;
485 else 485 else
486 ret = simple_read_from_buffer(user_buf, count, ppos, 486 ret = simple_read_from_buffer(user_buf, count, ppos,
@@ -500,7 +500,7 @@ static ssize_t wm_adsp_debugfs_bin_read(struct file *file,
500 500
501 mutex_lock(&dsp->pwr_lock); 501 mutex_lock(&dsp->pwr_lock);
502 502
503 if (!dsp->bin_file_name || !dsp->running) 503 if (!dsp->bin_file_name || !dsp->booted)
504 ret = 0; 504 ret = 0;
505 else 505 else
506 ret = simple_read_from_buffer(user_buf, count, ppos, 506 ret = simple_read_from_buffer(user_buf, count, ppos,
@@ -554,6 +554,9 @@ static void wm_adsp2_init_debugfs(struct wm_adsp *dsp,
554 if (!root) 554 if (!root)
555 goto err; 555 goto err;
556 556
557 if (!debugfs_create_bool("booted", S_IRUGO, root, &dsp->booted))
558 goto err;
559
557 if (!debugfs_create_bool("running", S_IRUGO, root, &dsp->running)) 560 if (!debugfs_create_bool("running", S_IRUGO, root, &dsp->running))
558 goto err; 561 goto err;
559 562
@@ -637,7 +640,7 @@ static int wm_adsp_fw_put(struct snd_kcontrol *kcontrol,
637 640
638 mutex_lock(&dsp[e->shift_l].pwr_lock); 641 mutex_lock(&dsp[e->shift_l].pwr_lock);
639 642
640 if (dsp[e->shift_l].running || dsp[e->shift_l].compr) 643 if (dsp[e->shift_l].booted || dsp[e->shift_l].compr)
641 ret = -EBUSY; 644 ret = -EBUSY;
642 else 645 else
643 dsp[e->shift_l].fw = ucontrol->value.enumerated.item[0]; 646 dsp[e->shift_l].fw = ucontrol->value.enumerated.item[0];
@@ -789,7 +792,7 @@ static int wm_coeff_put(struct snd_kcontrol *kctl,
789 memcpy(ctl->cache, p, ctl->len); 792 memcpy(ctl->cache, p, ctl->len);
790 793
791 ctl->set = 1; 794 ctl->set = 1;
792 if (ctl->enabled) 795 if (ctl->enabled && ctl->dsp->running)
793 ret = wm_coeff_write_control(ctl, p, ctl->len); 796 ret = wm_coeff_write_control(ctl, p, ctl->len);
794 797
795 mutex_unlock(&ctl->dsp->pwr_lock); 798 mutex_unlock(&ctl->dsp->pwr_lock);
@@ -811,7 +814,7 @@ static int wm_coeff_tlv_put(struct snd_kcontrol *kctl,
811 ret = -EFAULT; 814 ret = -EFAULT;
812 } else { 815 } else {
813 ctl->set = 1; 816 ctl->set = 1;
814 if (ctl->enabled) 817 if (ctl->enabled && ctl->dsp->running)
815 ret = wm_coeff_write_control(ctl, ctl->cache, size); 818 ret = wm_coeff_write_control(ctl, ctl->cache, size);
816 } 819 }
817 820
@@ -871,12 +874,12 @@ static int wm_coeff_get(struct snd_kcontrol *kctl,
871 mutex_lock(&ctl->dsp->pwr_lock); 874 mutex_lock(&ctl->dsp->pwr_lock);
872 875
873 if (ctl->flags & WMFW_CTL_FLAG_VOLATILE) { 876 if (ctl->flags & WMFW_CTL_FLAG_VOLATILE) {
874 if (ctl->enabled) 877 if (ctl->enabled && ctl->dsp->running)
875 ret = wm_coeff_read_control(ctl, p, ctl->len); 878 ret = wm_coeff_read_control(ctl, p, ctl->len);
876 else 879 else
877 ret = -EPERM; 880 ret = -EPERM;
878 } else { 881 } else {
879 if (!ctl->flags && ctl->enabled) 882 if (!ctl->flags && ctl->enabled && ctl->dsp->running)
880 ret = wm_coeff_read_control(ctl, ctl->cache, ctl->len); 883 ret = wm_coeff_read_control(ctl, ctl->cache, ctl->len);
881 884
882 memcpy(p, ctl->cache, ctl->len); 885 memcpy(p, ctl->cache, ctl->len);
@@ -898,12 +901,12 @@ static int wm_coeff_tlv_get(struct snd_kcontrol *kctl,
898 mutex_lock(&ctl->dsp->pwr_lock); 901 mutex_lock(&ctl->dsp->pwr_lock);
899 902
900 if (ctl->flags & WMFW_CTL_FLAG_VOLATILE) { 903 if (ctl->flags & WMFW_CTL_FLAG_VOLATILE) {
901 if (ctl->enabled) 904 if (ctl->enabled && ctl->dsp->running)
902 ret = wm_coeff_read_control(ctl, ctl->cache, size); 905 ret = wm_coeff_read_control(ctl, ctl->cache, size);
903 else 906 else
904 ret = -EPERM; 907 ret = -EPERM;
905 } else { 908 } else {
906 if (!ctl->flags && ctl->enabled) 909 if (!ctl->flags && ctl->enabled && ctl->dsp->running)
907 ret = wm_coeff_read_control(ctl, ctl->cache, size); 910 ret = wm_coeff_read_control(ctl, ctl->cache, size);
908 } 911 }
909 912
@@ -2166,13 +2169,20 @@ int wm_adsp1_event(struct snd_soc_dapm_widget *w,
2166 if (ret != 0) 2169 if (ret != 0)
2167 goto err_ena; 2170 goto err_ena;
2168 2171
2172 dsp->booted = true;
2173
2169 /* Start the core running */ 2174 /* Start the core running */
2170 regmap_update_bits(dsp->regmap, dsp->base + ADSP1_CONTROL_30, 2175 regmap_update_bits(dsp->regmap, dsp->base + ADSP1_CONTROL_30,
2171 ADSP1_CORE_ENA | ADSP1_START, 2176 ADSP1_CORE_ENA | ADSP1_START,
2172 ADSP1_CORE_ENA | ADSP1_START); 2177 ADSP1_CORE_ENA | ADSP1_START);
2178
2179 dsp->running = true;
2173 break; 2180 break;
2174 2181
2175 case SND_SOC_DAPM_PRE_PMD: 2182 case SND_SOC_DAPM_PRE_PMD:
2183 dsp->running = false;
2184 dsp->booted = false;
2185
2176 /* Halt the core */ 2186 /* Halt the core */
2177 regmap_update_bits(dsp->regmap, dsp->base + ADSP1_CONTROL_30, 2187 regmap_update_bits(dsp->regmap, dsp->base + ADSP1_CONTROL_30,
2178 ADSP1_CORE_ENA | ADSP1_START, 0); 2188 ADSP1_CORE_ENA | ADSP1_START, 0);
@@ -2227,7 +2237,7 @@ static int wm_adsp2_ena(struct wm_adsp *dsp)
2227 if (val & ADSP2_RAM_RDY) 2237 if (val & ADSP2_RAM_RDY)
2228 break; 2238 break;
2229 2239
2230 msleep(1); 2240 usleep_range(250, 500);
2231 } 2241 }
2232 2242
2233 if (!(val & ADSP2_RAM_RDY)) { 2243 if (!(val & ADSP2_RAM_RDY)) {
@@ -2249,6 +2259,11 @@ static void wm_adsp2_boot_work(struct work_struct *work)
2249 2259
2250 mutex_lock(&dsp->pwr_lock); 2260 mutex_lock(&dsp->pwr_lock);
2251 2261
2262 ret = regmap_update_bits(dsp->regmap, dsp->base + ADSP2_CONTROL,
2263 ADSP2_MEM_ENA, ADSP2_MEM_ENA);
2264 if (ret != 0)
2265 goto err_mutex;
2266
2252 ret = wm_adsp2_ena(dsp); 2267 ret = wm_adsp2_ena(dsp);
2253 if (ret != 0) 2268 if (ret != 0)
2254 goto err_mutex; 2269 goto err_mutex;
@@ -2270,13 +2285,14 @@ static void wm_adsp2_boot_work(struct work_struct *work)
2270 if (ret != 0) 2285 if (ret != 0)
2271 goto err_ena; 2286 goto err_ena;
2272 2287
2273 /* Sync set controls */ 2288 dsp->booted = true;
2274 ret = wm_coeff_sync_controls(dsp); 2289
2290 /* Turn DSP back off until we are ready to run */
2291 ret = regmap_update_bits(dsp->regmap, dsp->base + ADSP2_CONTROL,
2292 ADSP2_SYS_ENA, 0);
2275 if (ret != 0) 2293 if (ret != 0)
2276 goto err_ena; 2294 goto err_ena;
2277 2295
2278 dsp->running = true;
2279
2280 mutex_unlock(&dsp->pwr_lock); 2296 mutex_unlock(&dsp->pwr_lock);
2281 2297
2282 return; 2298 return;
@@ -2307,6 +2323,7 @@ int wm_adsp2_early_event(struct snd_soc_dapm_widget *w,
2307 struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); 2323 struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
2308 struct wm_adsp *dsps = snd_soc_codec_get_drvdata(codec); 2324 struct wm_adsp *dsps = snd_soc_codec_get_drvdata(codec);
2309 struct wm_adsp *dsp = &dsps[w->shift]; 2325 struct wm_adsp *dsp = &dsps[w->shift];
2326 struct wm_coeff_ctl *ctl;
2310 2327
2311 dsp->card = codec->component.card; 2328 dsp->card = codec->component.card;
2312 2329
@@ -2315,6 +2332,24 @@ int wm_adsp2_early_event(struct snd_soc_dapm_widget *w,
2315 wm_adsp2_set_dspclk(dsp, freq); 2332 wm_adsp2_set_dspclk(dsp, freq);
2316 queue_work(system_unbound_wq, &dsp->boot_work); 2333 queue_work(system_unbound_wq, &dsp->boot_work);
2317 break; 2334 break;
2335 case SND_SOC_DAPM_PRE_PMD:
2336 wm_adsp_debugfs_clear(dsp);
2337
2338 dsp->fw_id = 0;
2339 dsp->fw_id_version = 0;
2340
2341 dsp->booted = false;
2342
2343 regmap_update_bits(dsp->regmap, dsp->base + ADSP2_CONTROL,
2344 ADSP2_MEM_ENA, 0);
2345
2346 list_for_each_entry(ctl, &dsp->ctl_list, list)
2347 ctl->enabled = 0;
2348
2349 wm_adsp_free_alg_regions(dsp);
2350
2351 adsp_dbg(dsp, "Shutdown complete\n");
2352 break;
2318 default: 2353 default:
2319 break; 2354 break;
2320 } 2355 }
@@ -2329,16 +2364,24 @@ int wm_adsp2_event(struct snd_soc_dapm_widget *w,
2329 struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); 2364 struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
2330 struct wm_adsp *dsps = snd_soc_codec_get_drvdata(codec); 2365 struct wm_adsp *dsps = snd_soc_codec_get_drvdata(codec);
2331 struct wm_adsp *dsp = &dsps[w->shift]; 2366 struct wm_adsp *dsp = &dsps[w->shift];
2332 struct wm_coeff_ctl *ctl;
2333 int ret; 2367 int ret;
2334 2368
2335 switch (event) { 2369 switch (event) {
2336 case SND_SOC_DAPM_POST_PMU: 2370 case SND_SOC_DAPM_POST_PMU:
2337 flush_work(&dsp->boot_work); 2371 flush_work(&dsp->boot_work);
2338 2372
2339 if (!dsp->running) 2373 if (!dsp->booted)
2340 return -EIO; 2374 return -EIO;
2341 2375
2376 ret = wm_adsp2_ena(dsp);
2377 if (ret != 0)
2378 goto err;
2379
2380 /* Sync set controls */
2381 ret = wm_coeff_sync_controls(dsp);
2382 if (ret != 0)
2383 goto err;
2384
2342 ret = regmap_update_bits(dsp->regmap, 2385 ret = regmap_update_bits(dsp->regmap,
2343 dsp->base + ADSP2_CONTROL, 2386 dsp->base + ADSP2_CONTROL,
2344 ADSP2_CORE_ENA | ADSP2_START, 2387 ADSP2_CORE_ENA | ADSP2_START,
@@ -2346,6 +2389,8 @@ int wm_adsp2_event(struct snd_soc_dapm_widget *w,
2346 if (ret != 0) 2389 if (ret != 0)
2347 goto err; 2390 goto err;
2348 2391
2392 dsp->running = true;
2393
2349 mutex_lock(&dsp->pwr_lock); 2394 mutex_lock(&dsp->pwr_lock);
2350 2395
2351 if (wm_adsp_fw[dsp->fw].num_caps != 0) 2396 if (wm_adsp_fw[dsp->fw].num_caps != 0)
@@ -2361,10 +2406,6 @@ int wm_adsp2_event(struct snd_soc_dapm_widget *w,
2361 2406
2362 mutex_lock(&dsp->pwr_lock); 2407 mutex_lock(&dsp->pwr_lock);
2363 2408
2364 wm_adsp_debugfs_clear(dsp);
2365
2366 dsp->fw_id = 0;
2367 dsp->fw_id_version = 0;
2368 dsp->running = false; 2409 dsp->running = false;
2369 2410
2370 regmap_update_bits(dsp->regmap, dsp->base + ADSP2_CONTROL, 2411 regmap_update_bits(dsp->regmap, dsp->base + ADSP2_CONTROL,
@@ -2378,17 +2419,12 @@ int wm_adsp2_event(struct snd_soc_dapm_widget *w,
2378 regmap_update_bits(dsp->regmap, dsp->base + ADSP2_CONTROL, 2419 regmap_update_bits(dsp->regmap, dsp->base + ADSP2_CONTROL,
2379 ADSP2_SYS_ENA, 0); 2420 ADSP2_SYS_ENA, 0);
2380 2421
2381 list_for_each_entry(ctl, &dsp->ctl_list, list)
2382 ctl->enabled = 0;
2383
2384 wm_adsp_free_alg_regions(dsp);
2385
2386 if (wm_adsp_fw[dsp->fw].num_caps != 0) 2422 if (wm_adsp_fw[dsp->fw].num_caps != 0)
2387 wm_adsp_buffer_free(dsp); 2423 wm_adsp_buffer_free(dsp);
2388 2424
2389 mutex_unlock(&dsp->pwr_lock); 2425 mutex_unlock(&dsp->pwr_lock);
2390 2426
2391 adsp_dbg(dsp, "Shutdown complete\n"); 2427 adsp_dbg(dsp, "Execution stopped\n");
2392 break; 2428 break;
2393 2429
2394 default: 2430 default:
diff --git a/sound/soc/codecs/wm_adsp.h b/sound/soc/codecs/wm_adsp.h
index be3b5bcb7f17..362dd7ce60d8 100644
--- a/sound/soc/codecs/wm_adsp.h
+++ b/sound/soc/codecs/wm_adsp.h
@@ -61,6 +61,8 @@ struct wm_adsp {
61 61
62 int fw; 62 int fw;
63 int fw_ver; 63 int fw_ver;
64
65 bool booted;
64 bool running; 66 bool running;
65 67
66 struct list_head ctl_list; 68 struct list_head ctl_list;
@@ -85,9 +87,10 @@ struct wm_adsp {
85 wm_adsp1_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD) 87 wm_adsp1_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD)
86 88
87#define WM_ADSP2(wname, num, event_fn) \ 89#define WM_ADSP2(wname, num, event_fn) \
88{ .id = snd_soc_dapm_dai_link, .name = wname " Preloader", \ 90{ .id = snd_soc_dapm_supply, .name = wname " Preloader", \
89 .reg = SND_SOC_NOPM, .shift = num, .event = event_fn, \ 91 .reg = SND_SOC_NOPM, .shift = num, .event = event_fn, \
90 .event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD }, \ 92 .event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD, \
93 .subseq = 100, /* Ensure we run after SYSCLK supply widget */ }, \
91{ .id = snd_soc_dapm_out_drv, .name = wname, \ 94{ .id = snd_soc_dapm_out_drv, .name = wname, \
92 .reg = SND_SOC_NOPM, .shift = num, .event = wm_adsp2_event, \ 95 .reg = SND_SOC_NOPM, .shift = num, .event = wm_adsp2_event, \
93 .event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD } 96 .event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD }
diff --git a/sound/soc/img/pistachio-internal-dac.c b/sound/soc/img/pistachio-internal-dac.c
index 162a0fd68c7b..53e11c6d4e22 100644
--- a/sound/soc/img/pistachio-internal-dac.c
+++ b/sound/soc/img/pistachio-internal-dac.c
@@ -134,12 +134,14 @@ static int pistachio_internal_dac_codec_probe(struct snd_soc_codec *codec)
134static const struct snd_soc_codec_driver pistachio_internal_dac_driver = { 134static const struct snd_soc_codec_driver pistachio_internal_dac_driver = {
135 .probe = pistachio_internal_dac_codec_probe, 135 .probe = pistachio_internal_dac_codec_probe,
136 .idle_bias_off = true, 136 .idle_bias_off = true,
137 .controls = pistachio_internal_dac_snd_controls, 137 .component_driver = {
138 .num_controls = ARRAY_SIZE(pistachio_internal_dac_snd_controls), 138 .controls = pistachio_internal_dac_snd_controls,
139 .dapm_widgets = pistachio_internal_dac_widgets, 139 .num_controls = ARRAY_SIZE(pistachio_internal_dac_snd_controls),
140 .num_dapm_widgets = ARRAY_SIZE(pistachio_internal_dac_widgets), 140 .dapm_widgets = pistachio_internal_dac_widgets,
141 .dapm_routes = pistachio_internal_dac_routes, 141 .num_dapm_widgets = ARRAY_SIZE(pistachio_internal_dac_widgets),
142 .num_dapm_routes = ARRAY_SIZE(pistachio_internal_dac_routes), 142 .dapm_routes = pistachio_internal_dac_routes,
143 .num_dapm_routes = ARRAY_SIZE(pistachio_internal_dac_routes),
144 },
143}; 145};
144 146
145static int pistachio_internal_dac_probe(struct platform_device *pdev) 147static int pistachio_internal_dac_probe(struct platform_device *pdev)
diff --git a/sound/soc/soc-ac97.c b/sound/soc/soc-ac97.c
index bc4a55bb3fd9..6c8b0b0c56ec 100644
--- a/sound/soc/soc-ac97.c
+++ b/sound/soc/soc-ac97.c
@@ -116,7 +116,7 @@ static int snd_soc_ac97_gpio_direction_out(struct gpio_chip *chip,
116 return snd_soc_update_bits(codec, AC97_GPIO_CFG, 1 << offset, 0); 116 return snd_soc_update_bits(codec, AC97_GPIO_CFG, 1 << offset, 0);
117} 117}
118 118
119static struct gpio_chip snd_soc_ac97_gpio_chip = { 119static const struct gpio_chip snd_soc_ac97_gpio_chip = {
120 .label = "snd_soc_ac97", 120 .label = "snd_soc_ac97",
121 .owner = THIS_MODULE, 121 .owner = THIS_MODULE,
122 .request = snd_soc_ac97_gpio_request, 122 .request = snd_soc_ac97_gpio_request,
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index 4afa8dba5e98..7440d16a2435 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -3332,19 +3332,6 @@ int snd_soc_register_codec(struct device *dev,
3332 if (ret) 3332 if (ret)
3333 goto err_free; 3333 goto err_free;
3334 3334
3335 if (codec_drv->controls) {
3336 codec->component.controls = codec_drv->controls;
3337 codec->component.num_controls = codec_drv->num_controls;
3338 }
3339 if (codec_drv->dapm_widgets) {
3340 codec->component.dapm_widgets = codec_drv->dapm_widgets;
3341 codec->component.num_dapm_widgets = codec_drv->num_dapm_widgets;
3342 }
3343 if (codec_drv->dapm_routes) {
3344 codec->component.dapm_routes = codec_drv->dapm_routes;
3345 codec->component.num_dapm_routes = codec_drv->num_dapm_routes;
3346 }
3347
3348 if (codec_drv->probe) 3335 if (codec_drv->probe)
3349 codec->component.probe = snd_soc_codec_drv_probe; 3336 codec->component.probe = snd_soc_codec_drv_probe;
3350 if (codec_drv->remove) 3337 if (codec_drv->remove)
diff --git a/sound/soc/sunxi/sun4i-codec.c b/sound/soc/sunxi/sun4i-codec.c
index 44f170c73b06..0e19c5070005 100644
--- a/sound/soc/sunxi/sun4i-codec.c
+++ b/sound/soc/sunxi/sun4i-codec.c
@@ -628,12 +628,14 @@ static const struct snd_soc_dapm_route sun4i_codec_codec_dapm_routes[] = {
628}; 628};
629 629
630static struct snd_soc_codec_driver sun4i_codec_codec = { 630static struct snd_soc_codec_driver sun4i_codec_codec = {
631 .controls = sun4i_codec_widgets, 631 .component_driver = {
632 .num_controls = ARRAY_SIZE(sun4i_codec_widgets), 632 .controls = sun4i_codec_widgets,
633 .dapm_widgets = sun4i_codec_codec_dapm_widgets, 633 .num_controls = ARRAY_SIZE(sun4i_codec_widgets),
634 .num_dapm_widgets = ARRAY_SIZE(sun4i_codec_codec_dapm_widgets), 634 .dapm_widgets = sun4i_codec_codec_dapm_widgets,
635 .dapm_routes = sun4i_codec_codec_dapm_routes, 635 .num_dapm_widgets = ARRAY_SIZE(sun4i_codec_codec_dapm_widgets),
636 .num_dapm_routes = ARRAY_SIZE(sun4i_codec_codec_dapm_routes), 636 .dapm_routes = sun4i_codec_codec_dapm_routes,
637 .num_dapm_routes = ARRAY_SIZE(sun4i_codec_codec_dapm_routes),
638 },
637}; 639};
638 640
639static const struct snd_soc_component_driver sun4i_codec_component = { 641static const struct snd_soc_component_driver sun4i_codec_component = {