]> git.hungrycats.org Git - linux/commitdiff
[PATCH] sgalaxy cleanup and check_region() removal
authorAlexander Viro <viro@www.linux.org.uk>
Fri, 27 Aug 2004 12:11:55 +0000 (05:11 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Fri, 27 Aug 2004 12:11:55 +0000 (05:11 -0700)
probing cleaned up, handling of ports mostly fixed.

Signed-off-by: Al Viro <viro@parcelfarce.linux.org.uk>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
sound/oss/sgalaxy.c

index 1e310971653d04030ce396633147322498b4afd4..78c9477204203601b0b37d8fc61baf6cfc44f36c 100644 (file)
@@ -86,18 +86,20 @@ static int __init sb_cmd( int base, unsigned char val )
 
 static int __init probe_sgalaxy( struct address_info *ai )
 {
+       int n;
+
        if ( check_region( ai->io_base, 8 ) ) {
                printk(KERN_ERR "sgalaxy: WSS IO port 0x%03x not available\n", ai->io_base);
                return 0;
        }
-        
-       if ( ad1848_detect( ai->io_base+4, NULL, ai->osp ) )
-               return probe_ms_sound(ai);  /* The card is already active, check irq etc... */
 
-       if ( check_region( ai->ai_sgbase, 0x10 ) ) {
+       if (!request_region( ai->ai_sgbase, 0x10, "SoundGalaxy SB")) {
                printk(KERN_ERR "sgalaxy: SB IO port 0x%03x not available\n", ai->ai_sgbase);
                return 0;
        }
+
+       if ( ad1848_detect( ai->io_base+4, NULL, ai->osp ) )
+               goto out;
         
        /* switch to MSS/WSS mode */
    
@@ -108,15 +110,12 @@ static int __init probe_sgalaxy( struct address_info *ai )
 
        sleep( HZ/10 );
 
-       return probe_ms_sound(ai);
-}
+out:
+       if (!probe_ms_sound(ai)) {
+               release_region(ai->ai_sgbase, 0x10);
+               return 0;
+       }
 
-static void __init attach_sgalaxy( struct address_info *ai )
-{
-       int n;
-       
-       request_region( ai->ai_sgbase, 0x10, "SoundGalaxy SB" );
- 
        attach_ms_sound(ai, THIS_MODULE);
        n=ai->slots[0];
        
@@ -125,6 +124,7 @@ static void __init attach_sgalaxy( struct address_info *ai )
                AD1848_REROUTE( SOUND_MIXER_LINE2, SOUND_MIXER_SYNTH );  /* FM+Wavetable*/
                AD1848_REROUTE( SOUND_MIXER_LINE3, SOUND_MIXER_CD );     /* CD */
        }
+       return 1;
 }
 
 static void __exit unload_sgalaxy( struct address_info *ai )
@@ -163,8 +163,6 @@ static int __init init_sgalaxy(void)
        if ( probe_sgalaxy(&cfg) == 0 )
                return -ENODEV;
 
-       attach_sgalaxy(&cfg);
-
        return 0;
 }