diff options
author | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2011-08-15 23:01:27 -0400 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2011-08-16 11:49:03 -0400 |
commit | f0b182b003e22320efac5a33cacc460e0079c135 (patch) | |
tree | cc251a0cc1ce1b5399f485b82b14eb0808c09570 /sound/soc/codecs/wm8994.c | |
parent | 1ddc07d0f13a753f8e345e0538562e1899d2bc26 (diff) |
ASoC: Implement WM8994 thermal warning and shutdown interrupt support
ALSA doesn't really have good mechanisms for dealing with these so we just
log them - the hardware already has automatic shutdown support.
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc/codecs/wm8994.c')
-rw-r--r-- | sound/soc/codecs/wm8994.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c index a0d6274ec280..94124913bb3e 100644 --- a/sound/soc/codecs/wm8994.c +++ b/sound/soc/codecs/wm8994.c | |||
@@ -3045,6 +3045,24 @@ static irqreturn_t wm8994_fifo_error(int irq, void *data) | |||
3045 | return IRQ_HANDLED; | 3045 | return IRQ_HANDLED; |
3046 | } | 3046 | } |
3047 | 3047 | ||
3048 | static irqreturn_t wm8994_temp_warn(int irq, void *data) | ||
3049 | { | ||
3050 | struct snd_soc_codec *codec = data; | ||
3051 | |||
3052 | dev_err(codec->dev, "Thermal warning\n"); | ||
3053 | |||
3054 | return IRQ_HANDLED; | ||
3055 | } | ||
3056 | |||
3057 | static irqreturn_t wm8994_temp_shut(int irq, void *data) | ||
3058 | { | ||
3059 | struct snd_soc_codec *codec = data; | ||
3060 | |||
3061 | dev_crit(codec->dev, "Thermal shutdown\n"); | ||
3062 | |||
3063 | return IRQ_HANDLED; | ||
3064 | } | ||
3065 | |||
3048 | static int wm8994_codec_probe(struct snd_soc_codec *codec) | 3066 | static int wm8994_codec_probe(struct snd_soc_codec *codec) |
3049 | { | 3067 | { |
3050 | struct wm8994 *control; | 3068 | struct wm8994 *control; |
@@ -3123,6 +3141,10 @@ static int wm8994_codec_probe(struct snd_soc_codec *codec) | |||
3123 | 3141 | ||
3124 | wm8994_request_irq(codec->control_data, WM8994_IRQ_FIFOS_ERR, | 3142 | wm8994_request_irq(codec->control_data, WM8994_IRQ_FIFOS_ERR, |
3125 | wm8994_fifo_error, "FIFO error", codec); | 3143 | wm8994_fifo_error, "FIFO error", codec); |
3144 | wm8994_request_irq(wm8994->wm8994, WM8994_IRQ_TEMP_WARN, | ||
3145 | wm8994_temp_warn, "Thermal warning", codec); | ||
3146 | wm8994_request_irq(wm8994->wm8994, WM8994_IRQ_TEMP_SHUT, | ||
3147 | wm8994_temp_shut, "Thermal shutdown", codec); | ||
3126 | 3148 | ||
3127 | ret = wm8994_request_irq(codec->control_data, WM8994_IRQ_DCS_DONE, | 3149 | ret = wm8994_request_irq(codec->control_data, WM8994_IRQ_DCS_DONE, |
3128 | wm_hubs_dcs_done, "DC servo done", | 3150 | wm_hubs_dcs_done, "DC servo done", |
@@ -3387,6 +3409,8 @@ err_irq: | |||
3387 | wm8994_free_irq(codec->control_data, WM8994_IRQ_DCS_DONE, | 3409 | wm8994_free_irq(codec->control_data, WM8994_IRQ_DCS_DONE, |
3388 | &wm8994->hubs); | 3410 | &wm8994->hubs); |
3389 | wm8994_free_irq(codec->control_data, WM8994_IRQ_FIFOS_ERR, codec); | 3411 | wm8994_free_irq(codec->control_data, WM8994_IRQ_FIFOS_ERR, codec); |
3412 | wm8994_free_irq(codec->control_data, WM8994_IRQ_TEMP_SHUT, codec); | ||
3413 | wm8994_free_irq(codec->control_data, WM8994_IRQ_TEMP_WARN, codec); | ||
3390 | err: | 3414 | err: |
3391 | kfree(wm8994); | 3415 | kfree(wm8994); |
3392 | return ret; | 3416 | return ret; |
@@ -3409,6 +3433,8 @@ static int wm8994_codec_remove(struct snd_soc_codec *codec) | |||
3409 | wm8994_free_irq(codec->control_data, WM8994_IRQ_DCS_DONE, | 3433 | wm8994_free_irq(codec->control_data, WM8994_IRQ_DCS_DONE, |
3410 | &wm8994->hubs); | 3434 | &wm8994->hubs); |
3411 | wm8994_free_irq(codec->control_data, WM8994_IRQ_FIFOS_ERR, codec); | 3435 | wm8994_free_irq(codec->control_data, WM8994_IRQ_FIFOS_ERR, codec); |
3436 | wm8994_free_irq(codec->control_data, WM8994_IRQ_TEMP_SHUT, codec); | ||
3437 | wm8994_free_irq(codec->control_data, WM8994_IRQ_TEMP_WARN, codec); | ||
3412 | 3438 | ||
3413 | switch (control->type) { | 3439 | switch (control->type) { |
3414 | case WM8994: | 3440 | case WM8994: |