Merge branch 'pdc' into release
[linux-2.6.git] / sound / core / pcm_timer.c
index d94ed16..b01d948 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  Digital Audio (PCM) abstract layer
- *  Copyright (c) by Jaroslav Kysela <perex@suse.cz>
+ *  Copyright (c) by Jaroslav Kysela <perex@perex.cz>
  *
  *
  *   This program is free software; you can redistribute it and/or modify
@@ -19,8 +19,8 @@
  *
  */
 
-#include <sound/driver.h>
 #include <linux/time.h>
+#include <linux/gcd.h>
 #include <sound/core.h>
 #include <sound/pcm.h>
 #include <sound/timer.h>
  *  Timer functions
  */
 
-/* Greatest common divisor */
-static unsigned long gcd(unsigned long a, unsigned long b)
-{
-       unsigned long r;
-       if (a < b) {
-               r = a;
-               a = b;
-               b = r;
-       }
-       while ((r = a % b) != 0) {
-               a = b;
-               b = r;
-       }
-       return b;
-}
-
 void snd_pcm_timer_resolution_change(struct snd_pcm_substream *substream)
 {
        unsigned long rate, mult, fsize, l, post;
@@ -52,12 +36,14 @@ void snd_pcm_timer_resolution_change(struct snd_pcm_substream *substream)
        
         mult = 1000000000;
        rate = runtime->rate;
-       snd_assert(rate != 0, return);
+       if (snd_BUG_ON(!rate))
+               return;
        l = gcd(mult, rate);
        mult /= l;
        rate /= l;
        fsize = runtime->period_size;
-       snd_assert(fsize != 0, return);
+       if (snd_BUG_ON(!fsize))
+               return;
        l = gcd(rate, fsize);
        rate /= l;
        fsize /= l;
@@ -84,25 +70,19 @@ static unsigned long snd_pcm_timer_resolution(struct snd_timer * timer)
 
 static int snd_pcm_timer_start(struct snd_timer * timer)
 {
-       unsigned long flags;
        struct snd_pcm_substream *substream;
        
        substream = snd_timer_chip(timer);
-       spin_lock_irqsave(&substream->timer_lock, flags);
        substream->timer_running = 1;
-       spin_unlock_irqrestore(&substream->timer_lock, flags);
        return 0;
 }
 
 static int snd_pcm_timer_stop(struct snd_timer * timer)
 {
-       unsigned long flags;
        struct snd_pcm_substream *substream;
        
        substream = snd_timer_chip(timer);
-       spin_lock_irqsave(&substream->timer_lock, flags);
        substream->timer_running = 0;
-       spin_unlock_irqrestore(&substream->timer_lock, flags);
        return 0;
 }