aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/ep93xx/simone.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/ep93xx/simone.c')
-rw-r--r--sound/soc/ep93xx/simone.c64
1 files changed, 36 insertions, 28 deletions
diff --git a/sound/soc/ep93xx/simone.c b/sound/soc/ep93xx/simone.c
index 286817946c5..968cb316d51 100644
--- a/sound/soc/ep93xx/simone.c
+++ b/sound/soc/ep93xx/simone.c
@@ -39,53 +39,61 @@ static struct snd_soc_card snd_soc_simone = {
39}; 39};
40 40
41static struct platform_device *simone_snd_ac97_device; 41static struct platform_device *simone_snd_ac97_device;
42static struct platform_device *simone_snd_device;
43 42
44static int __init simone_init(void) 43static int __devinit simone_probe(struct platform_device *pdev)
45{ 44{
45 struct snd_soc_card *card = &snd_soc_simone;
46 int ret; 46 int ret;
47 47
48 if (!machine_is_sim_one()) 48 simone_snd_ac97_device = platform_device_register_simple("ac97-codec",
49 return -ENODEV; 49 -1, NULL, 0);
50 50 if (IS_ERR(simone_snd_ac97_device))
51 simone_snd_ac97_device = platform_device_alloc("ac97-codec", -1); 51 return PTR_ERR(simone_snd_ac97_device);
52 if (!simone_snd_ac97_device)
53 return -ENOMEM;
54 52
55 ret = platform_device_add(simone_snd_ac97_device); 53 card->dev = &pdev->dev;
56 if (ret)
57 goto fail1;
58 54
59 simone_snd_device = platform_device_alloc("soc-audio", -1); 55 ret = snd_soc_register_card(card);
60 if (!simone_snd_device) { 56 if (ret) {
61 ret = -ENOMEM; 57 dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n",
62 goto fail2; 58 ret);
59 platform_device_unregister(simone_snd_ac97_device);
63 } 60 }
64 61
65 platform_set_drvdata(simone_snd_device, &snd_soc_simone); 62 return ret;
66 ret = platform_device_add(simone_snd_device); 63}
67 if (ret) 64
68 goto fail3; 65static int __devexit simone_remove(struct platform_device *pdev)
66{
67 struct snd_soc_card *card = platform_get_drvdata(pdev);
68
69 snd_soc_unregister_card(card);
70 platform_device_unregister(simone_snd_ac97_device);
69 71
70 return 0; 72 return 0;
73}
71 74
72fail3: 75static struct platform_driver simone_driver = {
73 platform_device_put(simone_snd_device); 76 .driver = {
74fail2: 77 .name = "simone-audio",
75 platform_device_del(simone_snd_ac97_device); 78 .owner = THIS_MODULE,
76fail1: 79 },
77 platform_device_put(simone_snd_ac97_device); 80 .probe = simone_probe,
78 return ret; 81 .remove = __devexit_p(simone_remove),
82};
83
84static int __init simone_init(void)
85{
86 return platform_driver_register(&simone_driver);
79} 87}
80module_init(simone_init); 88module_init(simone_init);
81 89
82static void __exit simone_exit(void) 90static void __exit simone_exit(void)
83{ 91{
84 platform_device_unregister(simone_snd_device); 92 platform_driver_unregister(&simone_driver);
85 platform_device_unregister(simone_snd_ac97_device);
86} 93}
87module_exit(simone_exit); 94module_exit(simone_exit);
88 95
89MODULE_DESCRIPTION("ALSA SoC Simplemachines Sim.One"); 96MODULE_DESCRIPTION("ALSA SoC Simplemachines Sim.One");
90MODULE_AUTHOR("Mika Westerberg <mika.westerberg@iki.fi>"); 97MODULE_AUTHOR("Mika Westerberg <mika.westerberg@iki.fi>");
91MODULE_LICENSE("GPL"); 98MODULE_LICENSE("GPL");
99MODULE_ALIAS("platform:simone-audio");