ASoC: rsnd: spin lock for interrupt handler
[deliverable/linux.git] / sound / soc / sh / rcar / src.c
index 3beb32eb412a103db4135a20e96948f4a1c88c80..fbe9166e26d1b8647452db9de117fa247f1f7baa 100644 (file)
@@ -673,10 +673,13 @@ static int _rsnd_src_stop_gen2(struct rsnd_mod *mod)
 static irqreturn_t rsnd_src_interrupt_gen2(int irq, void *data)
 {
        struct rsnd_mod *mod = data;
-       struct rsnd_dai_stream *io = rsnd_mod_to_io(mod);
+       struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
+
+       spin_lock(&priv->lock);
 
-       if (!io)
-               return IRQ_NONE;
+       /* ignore all cases if not working */
+       if (!rsnd_mod_is_working(mod))
+               goto rsnd_src_interrupt_gen2_out;
 
        if (rsnd_src_error_record_gen2(mod)) {
                struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
@@ -692,6 +695,8 @@ static irqreturn_t rsnd_src_interrupt_gen2(int irq, void *data)
                else
                        dev_warn(dev, "no more SRC restart\n");
        }
+rsnd_src_interrupt_gen2_out:
+       spin_unlock(&priv->lock);
 
        return IRQ_HANDLED;
 }
This page took 0.024971 seconds and 5 git commands to generate.