diff options
author | Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de> | 2008-09-14 15:32:33 -0400 |
---|---|---|
committer | Jaroslav Kysela <perex@perex.cz> | 2008-09-23 02:17:58 -0400 |
commit | 418c8f89911dd3d4930221def3bd56b38b051789 (patch) | |
tree | afef7286cb6e10ef767c86c79c4eeefbc4f7d902 /sound/sh/aica.c | |
parent | f7cf0a7ce56eb91752fa441cff2669f8d61d4e5e (diff) |
ALSA: Fix section for snd-aica platform driver
Don't use __init but __devinit to define probe function. A pointer to
snd_aica_probe is passed to the core via platform_driver_register and so the
function must not disappear after the module is loaded. Using __init
and having HOTPLUG=y and SND_AICA=m the following probably oopses:
echo -n AICA > /sys/bus/platform/driver/AICA/unbind
echo -n AICA > /sys/bus/platform/driver/AICA/bind
Strange enough add_aicamixer_controls which is only called by
snd_aica_probe was already using __devinit.
While at it move the remove function to .devexit.text section.
Signed-off-by: Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de>
Cc: Adrian McMenamin <adrian@mcmen.demon.co.uk>
Cc: Paul Mundt <lethal@linux-sh.org>
Cc: Jaroslav Kysela <perex@perex.cz>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Diffstat (limited to 'sound/sh/aica.c')
-rw-r--r-- | sound/sh/aica.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/sound/sh/aica.c b/sound/sh/aica.c index 55031d0a6558..7c920f3e7fe3 100644 --- a/sound/sh/aica.c +++ b/sound/sh/aica.c | |||
@@ -590,7 +590,7 @@ static int __devinit add_aicamixer_controls(struct snd_card_aica | |||
590 | return 0; | 590 | return 0; |
591 | } | 591 | } |
592 | 592 | ||
593 | static int snd_aica_remove(struct platform_device *devptr) | 593 | static int __devexit snd_aica_remove(struct platform_device *devptr) |
594 | { | 594 | { |
595 | struct snd_card_aica *dreamcastcard; | 595 | struct snd_card_aica *dreamcastcard; |
596 | dreamcastcard = platform_get_drvdata(devptr); | 596 | dreamcastcard = platform_get_drvdata(devptr); |
@@ -602,7 +602,7 @@ static int snd_aica_remove(struct platform_device *devptr) | |||
602 | return 0; | 602 | return 0; |
603 | } | 603 | } |
604 | 604 | ||
605 | static int __init snd_aica_probe(struct platform_device *devptr) | 605 | static int __devinit snd_aica_probe(struct platform_device *devptr) |
606 | { | 606 | { |
607 | int err; | 607 | int err; |
608 | struct snd_card_aica *dreamcastcard; | 608 | struct snd_card_aica *dreamcastcard; |
@@ -651,7 +651,7 @@ static int __init snd_aica_probe(struct platform_device *devptr) | |||
651 | 651 | ||
652 | static struct platform_driver snd_aica_driver = { | 652 | static struct platform_driver snd_aica_driver = { |
653 | .probe = snd_aica_probe, | 653 | .probe = snd_aica_probe, |
654 | .remove = snd_aica_remove, | 654 | .remove = __devexit_p(snd_aica_remove), |
655 | .driver = { | 655 | .driver = { |
656 | .name = SND_AICA_DRIVER}, | 656 | .name = SND_AICA_DRIVER}, |
657 | }; | 657 | }; |