patch-2_6_7-vs1_9_1_12
[linux-2.6.git] / sound / core / pcm_memory.c
index 8789b6e..ab70ba7 100644 (file)
 #include <asm/io.h>
 #include <linux/time.h>
 #include <linux/init.h>
+#include <linux/moduleparam.h>
 #include <sound/core.h>
 #include <sound/pcm.h>
 #include <sound/info.h>
 #include <sound/initval.h>
 
 static int preallocate_dma = 1;
-MODULE_PARM(preallocate_dma, "i");
+module_param(preallocate_dma, int, 0444);
 MODULE_PARM_DESC(preallocate_dma, "Preallocate DMA memory when the PCM devices are initialized.");
 MODULE_PARM_SYNTAX(preallocate_dma, SNDRV_BOOLEAN_TRUE_DESC);
 
 static int maximum_substreams = 4;
-MODULE_PARM(maximum_substreams, "i");
+module_param(maximum_substreams, int, 0444);
 MODULE_PARM_DESC(maximum_substreams, "Maximum substreams with preallocated DMA memory.");
 MODULE_PARM_SYNTAX(maximum_substreams, SNDRV_BOOLEAN_TRUE_DESC);
 
@@ -223,9 +224,13 @@ static int snd_pcm_lib_preallocate_pages1(snd_pcm_substream_t *substream,
  */
 static inline void setup_pcm_id(snd_pcm_substream_t *subs)
 {
-       if (! subs->dma_device.id)
+       if (! subs->dma_device.id) {
                subs->dma_device.id = subs->pcm->device << 16 |
                        subs->stream << 8 | (subs->number + 1);
+               if (subs->dma_device.type == SNDRV_DMA_TYPE_CONTINUOUS ||
+                   subs->dma_device.dev == NULL)
+                       subs->dma_device.id |= (subs->pcm->card->number + 1) << 24;
+       }
 }
 
 /**