ASoC: pxa: Convert tosa to use snd_soc_register_card()
authorAxel Lin <axel.lin@gmail.com>
Thu, 15 Dec 2011 02:57:22 +0000 (10:57 +0800)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Sat, 17 Dec 2011 09:31:30 +0000 (09:31 +0000)
Use snd_soc_register_card() instead of creating a "soc-audio" platform device.

Signed-off-by: Axel Lin <axel.lin@gmail.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
arch/arm/mach-pxa/tosa.c
sound/soc/pxa/tosa.c

index 402b0c96613baa424941d50e650ca4d5b51cc882..9346d848e8d5d3a7a939b630b2a42751479a78de 100644 (file)
@@ -889,6 +889,11 @@ static struct platform_device wm9712_device = {
        .id     = -1,
 };
 
+static struct platform_device tosa_audio_device = {
+       .name   = "tosa-audio",
+       .id     = -1,
+};
+
 static struct platform_device *devices[] __initdata = {
        &tosascoop_device,
        &tosascoop_jc_device,
@@ -901,6 +906,7 @@ static struct platform_device *devices[] __initdata = {
        &sharpsl_rom_device,
        &wm9712_device,
        &tosa_gpio_vbus,
+       &tosa_audio_device,
 };
 
 static void tosa_poweroff(void)
index 620fc69ae6324507a6feab69f3ea66d33f2d5d6d..3f394de297a2d0b18f18a5fb0c30a4e79e8d3203 100644 (file)
@@ -34,8 +34,6 @@
 #include "../codecs/wm9712.h"
 #include "pxa2xx-ac97.h"
 
-static struct snd_soc_card tosa;
-
 #define TOSA_HP        0
 #define TOSA_MIC_INT   1
 #define TOSA_HEADSET   2
@@ -236,70 +234,55 @@ static struct snd_soc_dai_link tosa_dai[] = {
 },
 };
 
-static int tosa_probe(struct snd_soc_card *card)
-{
-       int ret;
-
-       ret = gpio_request(TOSA_GPIO_L_MUTE, "Headphone Jack");
-       if (ret)
-               return ret;
-       ret = gpio_direction_output(TOSA_GPIO_L_MUTE, 0);
-       if (ret)
-               gpio_free(TOSA_GPIO_L_MUTE);
-
-       return ret;
-}
-
-static int tosa_remove(struct snd_soc_card *card)
-{
-       gpio_free(TOSA_GPIO_L_MUTE);
-       return 0;
-}
-
 static struct snd_soc_card tosa = {
        .name = "Tosa",
        .dai_link = tosa_dai,
        .num_links = ARRAY_SIZE(tosa_dai),
-       .probe = tosa_probe,
-       .remove = tosa_remove,
 };
 
-static struct platform_device *tosa_snd_device;
-
-static int __init tosa_init(void)
+static int __devinit tosa_probe(struct platform_device *pdev)
 {
+       struct snd_soc_card *card = &tosa;
        int ret;
 
-       if (!machine_is_tosa())
-               return -ENODEV;
-
-       tosa_snd_device = platform_device_alloc("soc-audio", -1);
-       if (!tosa_snd_device) {
-               ret = -ENOMEM;
-               goto err_alloc;
-       }
-
-       platform_set_drvdata(tosa_snd_device, &tosa);
-       ret = platform_device_add(tosa_snd_device);
-
-       if (!ret)
-               return 0;
+       ret = gpio_request_one(TOSA_GPIO_L_MUTE, GPIOF_OUT_INIT_LOW,
+                              "Headphone Jack");
+       if (ret)
+               return ret;
 
-       platform_device_put(tosa_snd_device);
+       card->dev = &pdev->dev;
 
-err_alloc:
+       ret = snd_soc_register_card(card);
+       if (ret) {
+               dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n",
+                       ret);
+               gpio_free(TOSA_GPIO_L_MUTE);
+       }
        return ret;
 }
 
-static void __exit tosa_exit(void)
+static int __devexit tosa_remove(struct platform_device *pdev)
 {
-       platform_device_unregister(tosa_snd_device);
+       struct snd_soc_card *card = platform_get_drvdata(pdev);
+
+       gpio_free(TOSA_GPIO_L_MUTE);
+       snd_soc_unregister_card(card);
+       return 0;
 }
 
-module_init(tosa_init);
-module_exit(tosa_exit);
+static struct platform_driver tosa_driver = {
+       .driver         = {
+               .name   = "tosa-audio",
+               .owner  = THIS_MODULE,
+       },
+       .probe          = tosa_probe,
+       .remove         = __devexit_p(tosa_remove),
+};
+
+module_platform_driver(tosa_driver);
 
 /* Module information */
 MODULE_AUTHOR("Richard Purdie");
 MODULE_DESCRIPTION("ALSA SoC Tosa");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:tosa-audio");