Re: [patch, 2.5] opti92x-ad1848 second check_region fixup

From: Marcus Alanen (maalanen@ra.abo.fi)
Date: Mon Dec 30 2002 - 15:58:16 EST


Changes check_region in snd_card_opti9xx_detect() to request_region,
with appropriate release_region. opti9xx_free() releases this region
using chip->res_mc_base.

Since the _detect case now uses request_region, we can't do the same
request_region afterwards, that would fail. So we move it inside the
__ISAPNP__ case.

#
# create_patch: opti_2-2002-12-30-A.patch
# Date: Mon Dec 30 22:53:33 EET 2002
#
diff -Naurd --exclude-from=/home/maalanen/linux/base/diff_exclude opti_1-2.5.53/sound/isa/opti9xx/opti92x-ad1848.c opti_2-2.5.53/sound/isa/opti9xx/opti92x-ad1848.c
--- opti_1-2.5.53/sound/isa/opti9xx/opti92x-ad1848.c Mon Dec 30 20:19:47 2002
+++ opti_2-2.5.53/sound/isa/opti9xx/opti92x-ad1848.c Mon Dec 30 20:48:08 2002
@@ -1674,13 +1674,14 @@
                 if ((err = snd_opti9xx_init(chip, i)) < 0)
                         return err;
 
- if (check_region(chip->mc_base, chip->mc_base_size))
+ if ((chip->res_mc_base = request_region(chip->mc_base, chip->mc_base_size, "opti9xx_detect")) == NULL)
                         continue;
 
                 value = snd_opti9xx_read(chip, OPTi9XX_MC_REG(1));
                 if ((value != 0xff) && (value != inb(chip->mc_base + 1)))
                         if (value == snd_opti9xx_read(chip, OPTi9XX_MC_REG(1)))
                                 return 1;
+ release_region(chip->mc_base, chip->mc_base_size);
         }
 #else /* OPTi93X */
         for (i = OPTi9XX_HW_82C931; i >= OPTi9XX_HW_82C930; i--) {
@@ -1690,7 +1691,7 @@
                 if ((err = snd_opti9xx_init(chip, i)) < 0)
                         return err;
 
- if (check_region(chip->mc_base, chip->mc_base_size))
+ if ((chip->res_mc_base = request_region(chip->mc_base, chip->mc_base_size, "opti93x_detect")) == NULL)
                         continue;
 
                 spin_lock_irqsave(&chip->lock, flags);
@@ -1703,6 +1704,7 @@
                 snd_opti9xx_write(chip, OPTi9XX_MC_REG(7), 0xff - value);
                 if (snd_opti9xx_read(chip, OPTi9XX_MC_REG(7)) == 0xff - value)
                         return 1;
+ release_region(chip->mc_base, chip->mc_base_size);
         }
 #endif /* OPTi93X */
 
@@ -1993,6 +1995,12 @@
                 }
                 if (hw <= OPTi9XX_HW_82C930)
                         chip->mc_base -= 0x80;
+
+ if ((chip->res_mc_base = request_region(chip->mc_base, chip->mc_base_size, "OPTi9xx MC")) == NULL) {
+ snd_card_free(card);
+ return -ENOMEM;
+ }
+
         } else {
 #endif /* __ISAPNP__ */
                 if ((error = snd_card_opti9xx_detect(card, chip)) < 0) {
@@ -2002,11 +2010,6 @@
 #ifdef __ISAPNP__
         }
 #endif /* __ISAPNP__ */
-
- if ((chip->res_mc_base = request_region(chip->mc_base, chip->mc_base_size, "OPTi9xx MC")) == NULL) {
- snd_card_free(card);
- return -ENOMEM;
- }
 
 #ifdef __ISAPNP__
         if (!isapnp) {

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Tue Dec 31 2002 - 22:00:17 EST