ASoC: Register non-AC97 codec DAIs
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Mon, 8 Dec 2008 19:17:58 +0000 (19:17 +0000)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Tue, 9 Dec 2008 10:49:29 +0000 (10:49 +0000)
Currently this is done at module probe time since ASoC ties in codec
device probe to the instantiation of the entire ASoC device. Subsequent
patches will refactor the codec drivers to handle probing separately.
Note that the core does not yet use this information.

AC97 is special since the codec is controlled over the AC97 link but
we want to give the machine driver a chance to set up the system before
trying to instantiate since it may need to do configuration before the
AC97 link will operate

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
21 files changed:
sound/soc/codecs/ad73311.c
sound/soc/codecs/ak4535.c
sound/soc/codecs/cs4270.c
sound/soc/codecs/pcm3008.c
sound/soc/codecs/ssm2602.c
sound/soc/codecs/tlv320aic23.c
sound/soc/codecs/tlv320aic26.c
sound/soc/codecs/tlv320aic3x.c
sound/soc/codecs/twl4030.c
sound/soc/codecs/uda134x.c
sound/soc/codecs/uda1380.c
sound/soc/codecs/wm8510.c
sound/soc/codecs/wm8580.c
sound/soc/codecs/wm8728.c
sound/soc/codecs/wm8731.c
sound/soc/codecs/wm8750.c
sound/soc/codecs/wm8753.c
sound/soc/codecs/wm8900.c
sound/soc/codecs/wm8903.c
sound/soc/codecs/wm8971.c
sound/soc/codecs/wm8990.c

index 500f9f3363d1fad0dc6100690534a0dfedfcab8a..e32f55034e64477dc512580608cca46c9b086cc7 100644 (file)
@@ -98,6 +98,18 @@ struct snd_soc_codec_device soc_codec_dev_ad73311 = {
 };
 EXPORT_SYMBOL_GPL(soc_codec_dev_ad73311);
 
+static int __devinit ad73311_init(void)
+{
+       return snd_soc_register_dai(&ad73311_dai);
+}
+module_init(ad73311_init);
+
+static void __exit ad73311_exit(void)
+{
+       snd_soc_unregister_dai(&ad73311_dai);
+}
+module_exit(ad73311_exit);
+
 MODULE_DESCRIPTION("ASoC ad73311 driver");
 MODULE_AUTHOR("Cliff Cai ");
 MODULE_LICENSE("GPL");
index 23062c952e857170d38a5936f8d6699837e04327..94148fba911952dd5ab106219d789e1903e8ceee 100644 (file)
@@ -688,6 +688,18 @@ struct snd_soc_codec_device soc_codec_dev_ak4535 = {
 };
 EXPORT_SYMBOL_GPL(soc_codec_dev_ak4535);
 
+static int __devinit ak4535_modinit(void)
+{
+       return snd_soc_register_dai(&ak4535_dai);
+}
+module_init(ak4535_modinit);
+
+static void __exit ak4535_exit(void)
+{
+       snd_soc_unregister_dai(&ak4535_dai);
+}
+module_exit(ak4535_exit);
+
 MODULE_DESCRIPTION("Soc AK4535 driver");
 MODULE_AUTHOR("Richard Purdie");
 MODULE_LICENSE("GPL");
index 4667a07b566ced0654c7bcfa42ae7a66ab2b2cd4..73aaf249d782a6007dc032f2d55fa35c06328cf3 100644 (file)
@@ -774,6 +774,18 @@ struct snd_soc_codec_device soc_codec_device_cs4270 = {
 };
 EXPORT_SYMBOL_GPL(soc_codec_device_cs4270);
 
+static int __devinit cs4270_init(void)
+{
+       return snd_soc_register_dai(&cs4270_dai);
+}
+module_init(cs4270_init);
+
+static void __exit cs4270_exit(void)
+{
+       snd_soc_unregister_dai(&cs4270_dai);
+}
+module_exit(cs4270_exit);
+
 MODULE_AUTHOR("Timur Tabi <timur@freescale.com>");
 MODULE_DESCRIPTION("Cirrus Logic CS4270 ALSA SoC Codec Driver");
 MODULE_LICENSE("GPL");
index a5862555b44498075ee4da6afd82bdc513273801..f333e88ee255a631f16e65cbdcae1185a35a1d15 100644 (file)
@@ -195,6 +195,18 @@ struct snd_soc_codec_device soc_codec_dev_pcm3008 = {
 };
 EXPORT_SYMBOL_GPL(soc_codec_dev_pcm3008);
 
+static int __devinit pcm3008_init(void)
+{
+       return snd_soc_register_dai(&pcm3008_dai);
+}
+module_init(pcm3008_init);
+
+static void __exit pcm3008_exit(void)
+{
+       snd_soc_unregister_dai(&pcm3008_dai);
+}
+module_exit(pcm3008_exit);
+
 MODULE_DESCRIPTION("Soc PCM3008 driver");
 MODULE_AUTHOR("Hugo Villeneuve");
 MODULE_LICENSE("GPL");
index 973844973fe1d8dab50062b623123be5de4d8a66..77fdcb4b9a1b43943535dc8cd0764925b7416797 100644 (file)
@@ -793,6 +793,18 @@ struct snd_soc_codec_device soc_codec_dev_ssm2602 = {
 };
 EXPORT_SYMBOL_GPL(soc_codec_dev_ssm2602);
 
+static int __devinit ssm2602_modinit(void)
+{
+       return snd_soc_register_dai(&ssm2602_dai);
+}
+module_init(ssm2602_modinit);
+
+static void __exit ssm2602_exit(void)
+{
+       snd_soc_unregister_dai(&ssm2602_dai);
+}
+module_exit(ssm2602_exit);
+
 MODULE_DESCRIPTION("ASoC ssm2602 driver");
 MODULE_AUTHOR("Cliff Cai");
 MODULE_LICENSE("GPL");
index d209bec02a69d668c4e5f92a28a7fb3d79883f6d..eac449b92bd57f23fdca3264569083aad0d07611 100644 (file)
@@ -847,6 +847,18 @@ struct snd_soc_codec_device soc_codec_dev_tlv320aic23 = {
 };
 EXPORT_SYMBOL_GPL(soc_codec_dev_tlv320aic23);
 
+static int __devinit tlv320aic23_modinit(void)
+{
+       return snd_soc_register_dai(&tlv320aic23_dai);
+}
+module_init(tlv320aic23_modinit);
+
+static void __exit tlv320aic23_exit(void)
+{
+       snd_soc_unregister_dai(&tlv320aic23_dai);
+}
+module_exit(tlv320aic23_exit);
+
 MODULE_DESCRIPTION("ASoC TLV320AIC23 codec driver");
 MODULE_AUTHOR("Arun KS <arunks@mistralsolutions.com>");
 MODULE_LICENSE("GPL");
index e33fb7e00d1ed1d0b9694fa1770876e5095dccff..29f2f1a017fde8744816005584ca9b676d6fdfa5 100644 (file)
@@ -426,7 +426,7 @@ static DEVICE_ATTR(keyclick, 0644, aic26_keyclick_show, aic26_keyclick_set);
 static int aic26_spi_probe(struct spi_device *spi)
 {
        struct aic26 *aic26;
-       int rc, i, reg;
+       int ret, i, reg;
 
        dev_dbg(&spi->dev, "probing tlv320aic26 spi device\n");
 
@@ -456,6 +456,14 @@ static int aic26_spi_probe(struct spi_device *spi)
        aic26->codec.reg_cache_size = AIC26_NUM_REGS;
        aic26->codec.reg_cache = aic26->reg_cache;
 
+       aic26_dai.dev = &spi->dev;
+       ret = snd_soc_register_dai(&aic26_dai);
+       if (ret != 0) {
+               dev_err(&spi->dev, "Failed to register DAI: %d\n", ret);
+               kfree(aic26);
+               return ret;
+       }
+
        /* Reset the codec to power on defaults */
        aic26_reg_write(&aic26->codec, AIC26_REG_RESET, 0xBB00);
 
@@ -474,8 +482,8 @@ static int aic26_spi_probe(struct spi_device *spi)
 
        /* Register the sysfs files for debugging */
        /* Create SysFS files */
-       rc = device_create_file(&spi->dev, &dev_attr_keyclick);
-       if (rc)
+       ret = device_create_file(&spi->dev, &dev_attr_keyclick);
+       if (ret)
                dev_info(&spi->dev, "error creating sysfs files\n");
 
 #if defined(CONFIG_SND_SOC_OF_SIMPLE)
@@ -492,6 +500,7 @@ static int aic26_spi_remove(struct spi_device *spi)
 {
        struct aic26 *aic26 = dev_get_drvdata(&spi->dev);
 
+       snd_soc_unregister_dai(&aic26_dai);
        kfree(aic26);
 
        return 0;
index 6a058298a3c35eff6d2e2a24771dbba8315a924b..ccd575961869369b8ee03187c269e90a4cfb043e 100644 (file)
@@ -1411,6 +1411,18 @@ struct snd_soc_codec_device soc_codec_dev_aic3x = {
 };
 EXPORT_SYMBOL_GPL(soc_codec_dev_aic3x);
 
+static int __devinit aic3x_modinit(void)
+{
+       return snd_soc_register_dai(&aic3x_dai);
+}
+module_init(aic3x_modinit);
+
+static void __exit aic3x_exit(void)
+{
+       snd_soc_unregister_dai(&aic3x_dai);
+}
+module_exit(aic3x_exit);
+
 MODULE_DESCRIPTION("ASoC TLV320AIC3X codec driver");
 MODULE_AUTHOR("Vladimir Barinov");
 MODULE_LICENSE("GPL");
index 358aa2b1aae2301faa8a0758862f50cc1ae1f3d6..373daa486cea65806e1d5390bcad03b83159caa2 100644 (file)
@@ -358,7 +358,7 @@ static int outmixer_event(struct snd_soc_dapm_widget *w,
        .put = snd_soc_put_volsw_r2_twl4030, \
        .private_value = (unsigned long)&(struct soc_mixer_control) \
                {.reg = reg_left, .rreg = reg_right, .shift = xshift, \
-               .max = xmax, .invert = xinvert} }
+                .rshift = xshift, .max = xmax, .invert = xinvert} }
 #define SOC_SINGLE_TLV_TWL4030(xname, xreg, xshift, xmax, xinvert, tlv_array) \
        SOC_DOUBLE_TLV_TWL4030(xname, xreg, xshift, xshift, xmax, \
                               xinvert, tlv_array)
@@ -1275,6 +1275,18 @@ struct snd_soc_codec_device soc_codec_dev_twl4030 = {
 };
 EXPORT_SYMBOL_GPL(soc_codec_dev_twl4030);
 
+static int __devinit twl4030_init(void)
+{
+       return snd_soc_register_dai(&twl4030_dai);
+}
+module_init(twl4030_init);
+
+static void __exit twl4030_exit(void)
+{
+       snd_soc_unregister_dai(&twl4030_dai);
+}
+module_exit(twl4030_exit);
+
 MODULE_DESCRIPTION("ASoC TWL4030 codec driver");
 MODULE_AUTHOR("Steve Sakoman");
 MODULE_LICENSE("GPL");
index 58de749185e6bcc530e3ff8c47dbe0bae8f72bcc..8e035b5d733ff51586d220ab53cbf21b93b72a78 100644 (file)
@@ -651,6 +651,18 @@ struct snd_soc_codec_device soc_codec_dev_uda134x = {
 };
 EXPORT_SYMBOL_GPL(soc_codec_dev_uda134x);
 
+static int __devinit uda134x_init(void)
+{
+       return snd_soc_register_dai(&uda134x_dai);
+}
+module_init(uda134x_init);
+
+static void __exit uda134x_exit(void)
+{
+       snd_soc_unregister_dai(&uda134x_dai);
+}
+module_exit(uda134x_exit);
+
 MODULE_DESCRIPTION("UDA134X ALSA soc codec driver");
 MODULE_AUTHOR("Zoltan Devai, Christian Pellegrin <chripell@evolware.org>");
 MODULE_LICENSE("GPL");
index 42491650593f6f59e8f272e0a3b8285e410367a2..55a99b6a68a1efc484b6b5adae8cb7716fe07134 100644 (file)
@@ -841,6 +841,18 @@ struct snd_soc_codec_device soc_codec_dev_uda1380 = {
 };
 EXPORT_SYMBOL_GPL(soc_codec_dev_uda1380);
 
+static int __devinit uda1380_modinit(void)
+{
+       return snd_soc_register_dais(uda1380_dai, ARRAY_SIZE(uda1380_dai));
+}
+module_init(uda1380_modinit);
+
+static void __exit uda1380_exit(void)
+{
+       snd_soc_unregister_dais(uda1380_dai, ARRAY_SIZE(uda1380_dai));
+}
+module_exit(uda1380_exit);
+
 MODULE_AUTHOR("Giorgio Padrin");
 MODULE_DESCRIPTION("Audio support for codec Philips UDA1380");
 MODULE_LICENSE("GPL");
index 126c70f749d16a8ce80f5781d0baa46f0eb74379..a2af04bb4e9fc632281acfae7ce759aeab203031 100644 (file)
@@ -889,6 +889,18 @@ struct snd_soc_codec_device soc_codec_dev_wm8510 = {
 };
 EXPORT_SYMBOL_GPL(soc_codec_dev_wm8510);
 
+static int __devinit wm8510_modinit(void)
+{
+       return snd_soc_register_dai(&wm8510_dai);
+}
+module_init(wm8510_modinit);
+
+static void __exit wm8510_exit(void)
+{
+       snd_soc_unregister_dai(&wm8510_dai);
+}
+module_exit(wm8510_exit);
+
 MODULE_DESCRIPTION("ASoC WM8510 driver");
 MODULE_AUTHOR("Liam Girdwood");
 MODULE_LICENSE("GPL");
index 572a31de3219b892c786de597fd1e1279e55e2fe..391ec2978aed3921efb338b06935c1bb1f872fa0 100644 (file)
@@ -1042,6 +1042,18 @@ struct snd_soc_codec_device soc_codec_dev_wm8580 = {
 };
 EXPORT_SYMBOL_GPL(soc_codec_dev_wm8580);
 
+static int __devinit wm8580_modinit(void)
+{
+       return snd_soc_register_dais(wm8580_dai, ARRAY_SIZE(wm8580_dai));
+}
+module_init(wm8580_modinit);
+
+static void __exit wm8580_exit(void)
+{
+       snd_soc_unregister_dais(wm8580_dai, ARRAY_SIZE(wm8580_dai));
+}
+module_exit(wm8580_exit);
+
 MODULE_DESCRIPTION("ASoC WM8580 driver");
 MODULE_AUTHOR("Mark Brown <broonie@opensource.wolfsonmicro.com>");
 MODULE_LICENSE("GPL");
index 28f12c6a6ac88728462b36a7f2dc24a092a5a6be..d905e25b1a93db3cbedda096be69ead49b4ccc94 100644 (file)
@@ -568,6 +568,18 @@ struct snd_soc_codec_device soc_codec_dev_wm8728 = {
 };
 EXPORT_SYMBOL_GPL(soc_codec_dev_wm8728);
 
+static int __devinit wm8728_modinit(void)
+{
+       return snd_soc_register_dai(&wm8728_dai);
+}
+module_init(wm8728_modinit);
+
+static void __exit wm8728_exit(void)
+{
+       snd_soc_unregister_dai(&wm8728_dai);
+}
+module_exit(wm8728_exit);
+
 MODULE_DESCRIPTION("ASoC WM8728 driver");
 MODULE_AUTHOR("Mark Brown <broonie@opensource.wolfsonmicro.com>");
 MODULE_LICENSE("GPL");
index 403dea13b5d9c288bb8063d9f2baec6a6396a64d..7b455a60d719338488138d61548e945fed2920ec 100644 (file)
@@ -793,6 +793,18 @@ struct snd_soc_codec_device soc_codec_dev_wm8731 = {
 };
 EXPORT_SYMBOL_GPL(soc_codec_dev_wm8731);
 
+static int __devinit wm8731_modinit(void)
+{
+       return snd_soc_register_dai(&wm8731_dai);
+}
+module_init(wm8731_modinit);
+
+static void __exit wm8731_exit(void)
+{
+       snd_soc_unregister_dai(&wm8731_dai);
+}
+module_exit(wm8731_exit);
+
 MODULE_DESCRIPTION("ASoC WM8731 driver");
 MODULE_AUTHOR("Richard Purdie");
 MODULE_LICENSE("GPL");
index 979446f5c983eb5e578afdebf731e311d781444d..84a6307de9070be1024d3dee823bec33999f9028 100644 (file)
@@ -1085,6 +1085,18 @@ struct snd_soc_codec_device soc_codec_dev_wm8750 = {
 };
 EXPORT_SYMBOL_GPL(soc_codec_dev_wm8750);
 
+static int __devinit wm8750_modinit(void)
+{
+       return snd_soc_register_dai(&wm8750_dai);
+}
+module_init(wm8750_modinit);
+
+static void __exit wm8750_exit(void)
+{
+       snd_soc_unregister_dai(&wm8750_dai);
+}
+module_exit(wm8750_exit);
+
 MODULE_DESCRIPTION("ASoC WM8750 driver");
 MODULE_AUTHOR("Liam Girdwood");
 MODULE_LICENSE("GPL");
index 96c0453fffb36f1fc9b74bc4c9d2d73505ba2a2d..1caca30d081293e9be2727bc0a19e98b4129caac 100644 (file)
@@ -1874,6 +1874,18 @@ struct snd_soc_codec_device soc_codec_dev_wm8753 = {
 };
 EXPORT_SYMBOL_GPL(soc_codec_dev_wm8753);
 
+static int __devinit wm8753_modinit(void)
+{
+       return snd_soc_register_dais(wm8753_dai, ARRAY_SIZE(wm8753_dai));
+}
+module_init(wm8753_modinit);
+
+static void __exit wm8753_exit(void)
+{
+       snd_soc_unregister_dais(wm8753_dai, ARRAY_SIZE(wm8753_dai));
+}
+module_exit(wm8753_exit);
+
 MODULE_DESCRIPTION("ASoC WM8753 driver");
 MODULE_AUTHOR("Liam Girdwood");
 MODULE_LICENSE("GPL");
index 29cd83991c5ba68231aea62a8ccbcd1b89c5398f..02bb1c999ba19c586864f390d4605aad33292dc0 100644 (file)
@@ -1530,6 +1530,18 @@ struct snd_soc_codec_device soc_codec_dev_wm8900 = {
 };
 EXPORT_SYMBOL_GPL(soc_codec_dev_wm8900);
 
+static int __devinit wm8900_modinit(void)
+{
+       return snd_soc_register_dai(&wm8900_dai);
+}
+module_init(wm8900_modinit);
+
+static void __exit wm8900_exit(void)
+{
+       snd_soc_unregister_dai(&wm8900_dai);
+}
+module_exit(wm8900_exit);
+
 MODULE_DESCRIPTION("ASoC WM8900 driver");
 MODULE_AUTHOR("Mark Brown <broonie@opensource.wolfonmicro.com>");
 MODULE_LICENSE("GPL");
index 3c83b79730742f18915a72827e2453ca2a656f6d..5d8fe7e1571e5cdc1787c322082b583657196fc0 100644 (file)
@@ -1809,6 +1809,18 @@ struct snd_soc_codec_device soc_codec_dev_wm8903 = {
 };
 EXPORT_SYMBOL_GPL(soc_codec_dev_wm8903);
 
+static int __devinit wm8903_modinit(void)
+{
+       return snd_soc_register_dai(&wm8903_dai);
+}
+module_init(wm8903_modinit);
+
+static void __exit wm8903_exit(void)
+{
+       snd_soc_unregister_dai(&wm8903_dai);
+}
+module_exit(wm8903_exit);
+
 MODULE_DESCRIPTION("ASoC WM8903 driver");
 MODULE_AUTHOR("Mark Brown <broonie@opensource.wolfsonmicro.cm>");
 MODULE_LICENSE("GPL");
index 53e6937e9ba1a77a13709432f8c5068d53c85f29..2979fc4f44f14296aad292d92776407887231524 100644 (file)
@@ -935,6 +935,18 @@ struct snd_soc_codec_device soc_codec_dev_wm8971 = {
 
 EXPORT_SYMBOL_GPL(soc_codec_dev_wm8971);
 
+static int __devinit wm8971_modinit(void)
+{
+       return snd_soc_register_dai(&wm8971_dai);
+}
+module_init(wm8971_modinit);
+
+static void __exit wm8971_exit(void)
+{
+       snd_soc_unregister_dai(&wm8971_dai);
+}
+module_exit(wm8971_exit);
+
 MODULE_DESCRIPTION("ASoC WM8971 driver");
 MODULE_AUTHOR("Lab126");
 MODULE_LICENSE("GPL");
index 5c5128b6b4538f3dc60f16edcf5f7de39169e16c..53e71aafe6c6d252beb387c0957edea0e5d97af0 100644 (file)
@@ -1643,6 +1643,18 @@ struct snd_soc_codec_device soc_codec_dev_wm8990 = {
 };
 EXPORT_SYMBOL_GPL(soc_codec_dev_wm8990);
 
+static int __devinit wm8990_modinit(void)
+{
+       return snd_soc_register_dai(&wm8990_dai);
+}
+module_init(wm8990_modinit);
+
+static void __exit wm8990_exit(void)
+{
+       snd_soc_unregister_dai(&wm8990_dai);
+}
+module_exit(wm8990_exit);
+
 MODULE_DESCRIPTION("ASoC WM8990 driver");
 MODULE_AUTHOR("Liam Girdwood");
 MODULE_LICENSE("GPL");