ASoC: arizona: Log thermal events
Help with debuggability. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
56447e1324
commit
899817e27a
|
@ -122,6 +122,42 @@ static int arizona_spk_ev(struct snd_soc_dapm_widget *w,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static irqreturn_t arizona_thermal_warn(int irq, void *data)
|
||||||
|
{
|
||||||
|
struct arizona *arizona = data;
|
||||||
|
unsigned int val;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = regmap_read(arizona->regmap, ARIZONA_INTERRUPT_RAW_STATUS_3,
|
||||||
|
&val);
|
||||||
|
if (ret != 0) {
|
||||||
|
dev_err(arizona->dev, "Failed to read thermal status: %d\n",
|
||||||
|
ret);
|
||||||
|
} else if (val & ARIZONA_SPK_SHUTDOWN_WARN_STS) {
|
||||||
|
dev_crit(arizona->dev, "Thermal warning\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
return IRQ_HANDLED;
|
||||||
|
}
|
||||||
|
|
||||||
|
static irqreturn_t arizona_thermal_shutdown(int irq, void *data)
|
||||||
|
{
|
||||||
|
struct arizona *arizona = data;
|
||||||
|
unsigned int val;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = regmap_read(arizona->regmap, ARIZONA_INTERRUPT_RAW_STATUS_3,
|
||||||
|
&val);
|
||||||
|
if (ret != 0) {
|
||||||
|
dev_err(arizona->dev, "Failed to read thermal status: %d\n",
|
||||||
|
ret);
|
||||||
|
} else if (val & ARIZONA_SPK_SHUTDOWN_STS) {
|
||||||
|
dev_crit(arizona->dev, "Thermal shutdown\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
return IRQ_HANDLED;
|
||||||
|
}
|
||||||
|
|
||||||
static const struct snd_soc_dapm_widget arizona_spkl =
|
static const struct snd_soc_dapm_widget arizona_spkl =
|
||||||
SND_SOC_DAPM_PGA_E("OUT4L", ARIZONA_OUTPUT_ENABLES_1,
|
SND_SOC_DAPM_PGA_E("OUT4L", ARIZONA_OUTPUT_ENABLES_1,
|
||||||
ARIZONA_OUT4L_ENA_SHIFT, 0, NULL, 0, arizona_spk_ev,
|
ARIZONA_OUT4L_ENA_SHIFT, 0, NULL, 0, arizona_spk_ev,
|
||||||
|
@ -134,6 +170,8 @@ static const struct snd_soc_dapm_widget arizona_spkr =
|
||||||
|
|
||||||
int arizona_init_spk(struct snd_soc_codec *codec)
|
int arizona_init_spk(struct snd_soc_codec *codec)
|
||||||
{
|
{
|
||||||
|
struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
|
||||||
|
struct arizona *arizona = priv->arizona;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = snd_soc_dapm_new_controls(&codec->dapm, &arizona_spkl, 1);
|
ret = snd_soc_dapm_new_controls(&codec->dapm, &arizona_spkl, 1);
|
||||||
|
@ -144,6 +182,22 @@ int arizona_init_spk(struct snd_soc_codec *codec)
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
ret = arizona_request_irq(arizona, ARIZONA_IRQ_SPK_SHUTDOWN_WARN,
|
||||||
|
"Thermal warning", arizona_thermal_warn,
|
||||||
|
arizona);
|
||||||
|
if (ret != 0)
|
||||||
|
dev_err(arizona->dev,
|
||||||
|
"Failed to get thermal warning IRQ: %d\n",
|
||||||
|
ret);
|
||||||
|
|
||||||
|
ret = arizona_request_irq(arizona, ARIZONA_IRQ_SPK_SHUTDOWN,
|
||||||
|
"Thermal shutdown", arizona_thermal_shutdown,
|
||||||
|
arizona);
|
||||||
|
if (ret != 0)
|
||||||
|
dev_err(arizona->dev,
|
||||||
|
"Failed to get thermal shutdown IRQ: %d\n",
|
||||||
|
ret);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(arizona_init_spk);
|
EXPORT_SYMBOL_GPL(arizona_init_spk);
|
||||||
|
|
Loading…
Reference in a new issue