Skip to content

Commit

Permalink
ASoC: Implement WM8994 thermal warning and shutdown interrupt support
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Mark Brown committed Aug 16, 2011
1 parent 1ddc07d commit f0b182b
Showing 1 changed file with 26 additions and 0 deletions.
26 changes: 26 additions & 0 deletions sound/soc/codecs/wm8994.c
Original file line number Diff line number Diff line change
Expand Up @@ -3045,6 +3045,24 @@ static irqreturn_t wm8994_fifo_error(int irq, void *data)
return IRQ_HANDLED;
}

static irqreturn_t wm8994_temp_warn(int irq, void *data)
{
struct snd_soc_codec *codec = data;

dev_err(codec->dev, "Thermal warning\n");

return IRQ_HANDLED;
}

static irqreturn_t wm8994_temp_shut(int irq, void *data)
{
struct snd_soc_codec *codec = data;

dev_crit(codec->dev, "Thermal shutdown\n");

return IRQ_HANDLED;
}

static int wm8994_codec_probe(struct snd_soc_codec *codec)
{
struct wm8994 *control;
Expand Down Expand Up @@ -3123,6 +3141,10 @@ static int wm8994_codec_probe(struct snd_soc_codec *codec)

wm8994_request_irq(codec->control_data, WM8994_IRQ_FIFOS_ERR,
wm8994_fifo_error, "FIFO error", codec);
wm8994_request_irq(wm8994->wm8994, WM8994_IRQ_TEMP_WARN,
wm8994_temp_warn, "Thermal warning", codec);
wm8994_request_irq(wm8994->wm8994, WM8994_IRQ_TEMP_SHUT,
wm8994_temp_shut, "Thermal shutdown", codec);

ret = wm8994_request_irq(codec->control_data, WM8994_IRQ_DCS_DONE,
wm_hubs_dcs_done, "DC servo done",
Expand Down Expand Up @@ -3387,6 +3409,8 @@ static int wm8994_codec_probe(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);
wm8994_free_irq(codec->control_data, WM8994_IRQ_TEMP_SHUT, codec);
wm8994_free_irq(codec->control_data, WM8994_IRQ_TEMP_WARN, codec);
err:
kfree(wm8994);
return ret;
Expand All @@ -3409,6 +3433,8 @@ 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);
wm8994_free_irq(codec->control_data, WM8994_IRQ_TEMP_SHUT, codec);
wm8994_free_irq(codec->control_data, WM8994_IRQ_TEMP_WARN, codec);

switch (control->type) {
case WM8994:
Expand Down

0 comments on commit f0b182b

Please sign in to comment.