diff options
Diffstat (limited to 'sound/soc/ep93xx/simone.c')
-rw-r--r-- | sound/soc/ep93xx/simone.c | 64 |
1 files changed, 36 insertions, 28 deletions
diff --git a/sound/soc/ep93xx/simone.c b/sound/soc/ep93xx/simone.c index 286817946c56..968cb316d511 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 | ||
41 | static struct platform_device *simone_snd_ac97_device; | 41 | static struct platform_device *simone_snd_ac97_device; |
42 | static struct platform_device *simone_snd_device; | ||
43 | 42 | ||
44 | static int __init simone_init(void) | 43 | static 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; | 65 | static 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 | ||
72 | fail3: | 75 | static struct platform_driver simone_driver = { |
73 | platform_device_put(simone_snd_device); | 76 | .driver = { |
74 | fail2: | 77 | .name = "simone-audio", |
75 | platform_device_del(simone_snd_ac97_device); | 78 | .owner = THIS_MODULE, |
76 | fail1: | 79 | }, |
77 | platform_device_put(simone_snd_ac97_device); | 80 | .probe = simone_probe, |
78 | return ret; | 81 | .remove = __devexit_p(simone_remove), |
82 | }; | ||
83 | |||
84 | static int __init simone_init(void) | ||
85 | { | ||
86 | return platform_driver_register(&simone_driver); | ||
79 | } | 87 | } |
80 | module_init(simone_init); | 88 | module_init(simone_init); |
81 | 89 | ||
82 | static void __exit simone_exit(void) | 90 | static 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 | } |
87 | module_exit(simone_exit); | 94 | module_exit(simone_exit); |
88 | 95 | ||
89 | MODULE_DESCRIPTION("ALSA SoC Simplemachines Sim.One"); | 96 | MODULE_DESCRIPTION("ALSA SoC Simplemachines Sim.One"); |
90 | MODULE_AUTHOR("Mika Westerberg <mika.westerberg@iki.fi>"); | 97 | MODULE_AUTHOR("Mika Westerberg <mika.westerberg@iki.fi>"); |
91 | MODULE_LICENSE("GPL"); | 98 | MODULE_LICENSE("GPL"); |
99 | MODULE_ALIAS("platform:simone-audio"); | ||