diff options
Diffstat (limited to 'sound/isa/cs423x/cs4231.c')
-rw-r--r-- | sound/isa/cs423x/cs4231.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/sound/isa/cs423x/cs4231.c b/sound/isa/cs423x/cs4231.c index b5252a5d7412..ab67b5c2590d 100644 --- a/sound/isa/cs423x/cs4231.c +++ b/sound/isa/cs423x/cs4231.c | |||
@@ -66,6 +66,8 @@ MODULE_PARM_DESC(dma1, "DMA1 # for CS4231 driver."); | |||
66 | module_param_array(dma2, int, NULL, 0444); | 66 | module_param_array(dma2, int, NULL, 0444); |
67 | MODULE_PARM_DESC(dma2, "DMA2 # for CS4231 driver."); | 67 | MODULE_PARM_DESC(dma2, "DMA2 # for CS4231 driver."); |
68 | 68 | ||
69 | static struct platform_device *devices[SNDRV_CARDS]; | ||
70 | |||
69 | 71 | ||
70 | static int __init snd_cs4231_probe(struct platform_device *pdev) | 72 | static int __init snd_cs4231_probe(struct platform_device *pdev) |
71 | { | 73 | { |
@@ -183,6 +185,15 @@ static struct platform_driver snd_cs4231_driver = { | |||
183 | }, | 185 | }, |
184 | }; | 186 | }; |
185 | 187 | ||
188 | static void __init_or_module snd_cs4231_unregister_all(void) | ||
189 | { | ||
190 | int i; | ||
191 | |||
192 | for (i = 0; i < ARRAY_SIZE(devices); ++i) | ||
193 | platform_device_unregister(devices[i]); | ||
194 | platform_driver_unregister(&snd_cs4231_driver); | ||
195 | } | ||
196 | |||
186 | static int __init alsa_card_cs4231_init(void) | 197 | static int __init alsa_card_cs4231_init(void) |
187 | { | 198 | { |
188 | int i, cards, err; | 199 | int i, cards, err; |
@@ -200,6 +211,7 @@ static int __init alsa_card_cs4231_init(void) | |||
200 | err = PTR_ERR(device); | 211 | err = PTR_ERR(device); |
201 | goto errout; | 212 | goto errout; |
202 | } | 213 | } |
214 | devices[i] = device; | ||
203 | cards++; | 215 | cards++; |
204 | } | 216 | } |
205 | if (!cards) { | 217 | if (!cards) { |
@@ -212,13 +224,13 @@ static int __init alsa_card_cs4231_init(void) | |||
212 | return 0; | 224 | return 0; |
213 | 225 | ||
214 | errout: | 226 | errout: |
215 | platform_driver_unregister(&snd_cs4231_driver); | 227 | snd_cs4231_unregister_all(); |
216 | return err; | 228 | return err; |
217 | } | 229 | } |
218 | 230 | ||
219 | static void __exit alsa_card_cs4231_exit(void) | 231 | static void __exit alsa_card_cs4231_exit(void) |
220 | { | 232 | { |
221 | platform_driver_unregister(&snd_cs4231_driver); | 233 | snd_cs4231_unregister_all(); |
222 | } | 234 | } |
223 | 235 | ||
224 | module_init(alsa_card_cs4231_init) | 236 | module_init(alsa_card_cs4231_init) |