diff options
Diffstat (limited to 'sound')
-rw-r--r-- | sound/isa/ad1848/ad1848_lib.c | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/sound/isa/ad1848/ad1848_lib.c b/sound/isa/ad1848/ad1848_lib.c index 31209e11cee5..a901cd1ee692 100644 --- a/sound/isa/ad1848/ad1848_lib.c +++ b/sound/isa/ad1848/ad1848_lib.c | |||
@@ -378,11 +378,9 @@ static int snd_ad1848_open(struct snd_ad1848 *chip, unsigned int mode) | |||
378 | { | 378 | { |
379 | unsigned long flags; | 379 | unsigned long flags; |
380 | 380 | ||
381 | mutex_lock(&chip->open_mutex); | 381 | if (chip->mode & AD1848_MODE_OPEN) |
382 | if (chip->mode & AD1848_MODE_OPEN) { | ||
383 | mutex_unlock(&chip->open_mutex); | ||
384 | return -EAGAIN; | 382 | return -EAGAIN; |
385 | } | 383 | |
386 | snd_ad1848_mce_down(chip); | 384 | snd_ad1848_mce_down(chip); |
387 | 385 | ||
388 | #ifdef SNDRV_DEBUG_MCE | 386 | #ifdef SNDRV_DEBUG_MCE |
@@ -423,7 +421,6 @@ static int snd_ad1848_open(struct snd_ad1848 *chip, unsigned int mode) | |||
423 | spin_unlock_irqrestore(&chip->reg_lock, flags); | 421 | spin_unlock_irqrestore(&chip->reg_lock, flags); |
424 | 422 | ||
425 | chip->mode = mode; | 423 | chip->mode = mode; |
426 | mutex_unlock(&chip->open_mutex); | ||
427 | 424 | ||
428 | return 0; | 425 | return 0; |
429 | } | 426 | } |
@@ -432,11 +429,8 @@ static void snd_ad1848_close(struct snd_ad1848 *chip) | |||
432 | { | 429 | { |
433 | unsigned long flags; | 430 | unsigned long flags; |
434 | 431 | ||
435 | mutex_lock(&chip->open_mutex); | 432 | if (!chip->mode) |
436 | if (!chip->mode) { | ||
437 | mutex_unlock(&chip->open_mutex); | ||
438 | return; | 433 | return; |
439 | } | ||
440 | /* disable IRQ */ | 434 | /* disable IRQ */ |
441 | spin_lock_irqsave(&chip->reg_lock, flags); | 435 | spin_lock_irqsave(&chip->reg_lock, flags); |
442 | outb(0, AD1848P(chip, STATUS)); /* clear IRQ */ | 436 | outb(0, AD1848P(chip, STATUS)); /* clear IRQ */ |
@@ -462,7 +456,6 @@ static void snd_ad1848_close(struct snd_ad1848 *chip) | |||
462 | spin_unlock_irqrestore(&chip->reg_lock, flags); | 456 | spin_unlock_irqrestore(&chip->reg_lock, flags); |
463 | 457 | ||
464 | chip->mode = 0; | 458 | chip->mode = 0; |
465 | mutex_unlock(&chip->open_mutex); | ||
466 | } | 459 | } |
467 | 460 | ||
468 | /* | 461 | /* |
@@ -880,7 +873,6 @@ int snd_ad1848_create(struct snd_card *card, | |||
880 | if (chip == NULL) | 873 | if (chip == NULL) |
881 | return -ENOMEM; | 874 | return -ENOMEM; |
882 | spin_lock_init(&chip->reg_lock); | 875 | spin_lock_init(&chip->reg_lock); |
883 | mutex_init(&chip->open_mutex); | ||
884 | chip->card = card; | 876 | chip->card = card; |
885 | chip->port = port; | 877 | chip->port = port; |
886 | chip->irq = -1; | 878 | chip->irq = -1; |