Commit 5a0a03c5 authored by Mika Westerberg's avatar Mika Westerberg Committed by Mark Brown

ASoC: simone: convert to use snd_soc_register_card()

Current method for machine driver to register with the ASoC core is to
use snd_soc_register_card() instead of creating a "soc-audio" platform device.

In addition we use platform_device_register_simple() to create a platform
device for the codec. This function will handle putting and deleting the
device automatically which simplifies the error handling in the machine
driver.
Signed-off-by: default avatarMika Westerberg <mika.westerberg@iki.fi>
Reviewed-by: default avatarRyan Mallon <rmallon@gmail.com>
Acked-by: default avatarLiam Girdwood <lrg@ti.com>
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent 93068169
...@@ -39,53 +39,61 @@ static struct snd_soc_card snd_soc_simone = { ...@@ -39,53 +39,61 @@ static struct snd_soc_card snd_soc_simone = {
}; };
static struct platform_device *simone_snd_ac97_device; static struct platform_device *simone_snd_ac97_device;
static struct platform_device *simone_snd_device;
static int __init simone_init(void) static int __devinit simone_probe(struct platform_device *pdev)
{ {
struct snd_soc_card *card = &snd_soc_simone;
int ret; int ret;
if (!machine_is_sim_one()) simone_snd_ac97_device = platform_device_register_simple("ac97-codec",
return -ENODEV; -1, NULL, 0);
if (IS_ERR(simone_snd_ac97_device))
simone_snd_ac97_device = platform_device_alloc("ac97-codec", -1); return PTR_ERR(simone_snd_ac97_device);
if (!simone_snd_ac97_device)
return -ENOMEM;
ret = platform_device_add(simone_snd_ac97_device); card->dev = &pdev->dev;
if (ret)
goto fail1;
simone_snd_device = platform_device_alloc("soc-audio", -1); ret = snd_soc_register_card(card);
if (!simone_snd_device) { if (ret) {
ret = -ENOMEM; dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n",
goto fail2; ret);
platform_device_unregister(simone_snd_ac97_device);
} }
platform_set_drvdata(simone_snd_device, &snd_soc_simone); return ret;
ret = platform_device_add(simone_snd_device); }
if (ret)
goto fail3; static int __devexit simone_remove(struct platform_device *pdev)
{
struct snd_soc_card *card = platform_get_drvdata(pdev);
snd_soc_unregister_card(card);
platform_device_unregister(simone_snd_ac97_device);
return 0; return 0;
}
fail3: static struct platform_driver simone_driver = {
platform_device_put(simone_snd_device); .driver = {
fail2: .name = "simone-audio",
platform_device_del(simone_snd_ac97_device); .owner = THIS_MODULE,
fail1: },
platform_device_put(simone_snd_ac97_device); .probe = simone_probe,
return ret; .remove = __devexit_p(simone_remove),
};
static int __init simone_init(void)
{
return platform_driver_register(&simone_driver);
} }
module_init(simone_init); module_init(simone_init);
static void __exit simone_exit(void) static void __exit simone_exit(void)
{ {
platform_device_unregister(simone_snd_device); platform_driver_unregister(&simone_driver);
platform_device_unregister(simone_snd_ac97_device);
} }
module_exit(simone_exit); module_exit(simone_exit);
MODULE_DESCRIPTION("ALSA SoC Simplemachines Sim.One"); MODULE_DESCRIPTION("ALSA SoC Simplemachines Sim.One");
MODULE_AUTHOR("Mika Westerberg <mika.westerberg@iki.fi>"); MODULE_AUTHOR("Mika Westerberg <mika.westerberg@iki.fi>");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_ALIAS("platform:simone-audio");
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment