ASoC: Log WM8994 FIFO errors from the interrupt
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Thu, 14 Jul 2011 03:38:18 +0000 (12:38 +0900)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Thu, 14 Jul 2011 08:17:23 +0000 (17:17 +0900)
We should spot them anyway on state changes but logging them gives us
better time information about when the misconfiguration happened.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/codecs/wm8994.c

index a49222246bf256747b2561352616523c9be32ecc..3acb1bda6c73c4dfa477c40f2d027ba001328459 100644 (file)
@@ -2874,6 +2874,15 @@ out:
        return IRQ_HANDLED;
 }
 
+static irqreturn_t wm8994_fifo_error(int irq, void *data)
+{
+       struct snd_soc_codec *codec = data;
+
+       dev_err(codec->dev, "FIFO error\n");
+
+       return IRQ_HANDLED;
+}
+
 static int wm8994_codec_probe(struct snd_soc_codec *codec)
 {
        struct wm8994 *control;
@@ -2948,6 +2957,9 @@ static int wm8994_codec_probe(struct snd_soc_codec *codec)
                break;
        }
 
+       wm8994_request_irq(codec->control_data, WM8994_IRQ_FIFOS_ERR,
+                          wm8994_fifo_error, "FIFO error", codec);
+
        ret = wm8994_request_irq(codec->control_data, WM8994_IRQ_DCS_DONE,
                                 wm_hubs_dcs_done, "DC servo done",
                                 &wm8994->hubs);
@@ -3210,6 +3222,7 @@ err_irq:
                                &wm8994->fll_locked[i]);
        wm8994_free_irq(codec->control_data, WM8994_IRQ_DCS_DONE,
                        &wm8994->hubs);
+       wm8994_free_irq(codec->control_data, WM8994_IRQ_FIFOS_ERR, codec);
 err:
        kfree(wm8994);
        return ret;
@@ -3231,6 +3244,7 @@ static int  wm8994_codec_remove(struct snd_soc_codec *codec)
 
        wm8994_free_irq(codec->control_data, WM8994_IRQ_DCS_DONE,
                        &wm8994->hubs);
+       wm8994_free_irq(codec->control_data, WM8994_IRQ_FIFOS_ERR, codec);
 
        switch (control->type) {
        case WM8994: