From: Mark Brown <broonie@kernel.org>
To: Andreas Dannenberg <dannenberg@ti.com>
Cc: alsa-devel@alsa-project.org, devicetree@vger.kernel.org,
Liam Girdwood <lgirdwood@gmail.com>,
Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>,
Rob Herring <robh+dt@kernel.org>, Pawel Moll <pawel.moll@arm.com>,
Mark Rutland <mark.rutland@arm.com>,
Ian Campbell <ijc+devicetree@hellion.org.uk>,
Kumar Gala <galak@codeaurora.org>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 2/2] ASoC: codecs: add support for TAS5720 digital amplifier
Date: Mon, 28 Mar 2016 20:01:43 +0100 [thread overview]
Message-ID: <20160328190143.GC2350@sirena.org.uk> (raw)
In-Reply-To: <1458580107-4632-3-git-send-email-dannenberg@ti.com>
[-- Attachment #1: Type: text/plain, Size: 3666 bytes --]
On Mon, Mar 21, 2016 at 12:08:27PM -0500, Andreas Dannenberg wrote:
> +static int tas5720_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
> + unsigned int freq, int dir)
> +{
> + /*
> + * Nothing to configure here for TAS5720. It's a simple codec slave.
> + * However we need to keep this function in here otherwise the ASoC
> + * platform driver will throw an ENOTSUPP at us when trying to play
> + * audio.
> + */
> +
> + return 0;
> +}
Remove empty funnctions, -ENOTSUPP is expected behaviour for anything
that isn't explicitly supported by a driver.
> + if (unlikely(!tx_mask)) {
unlikely() is for optimising hot paths, just write the logic clearly
unless there's a reason for it.
> +static irqreturn_t tas5720_irq_handler(int irq, void *_dev)
> +{
> + /*
> + * Immediately disable TAS5720 FAULTZ interrupts inside the low-level
> + * handler to prevent the system getting saturated or even overrun
> + * by interrupt requests. Normally the fact that we create a threaded
> + * interrupt with IRQF_ONESHOT should take care of this as by design
> + * it masks interrupts while the thread is processed however testing
> + * has shown that at the high frequency the FAULTZ signal triggers
> + * (every 300us!) occasionally the system would lock up even with a
> + * threaded handler that's completely empty until the Kernel breaks the
> + * cycle, disables that interrupt, and reports a "nobody cared" error.
> + *
> + * Disabling the interrupt here combined with a deferred re-enabling
> + * after the thread has run not only prevents this lock condition but
> + * also helps to rate-limit the processing of FAULTZ interrupts.
> + */
> + disable_irq_nosync(irq);
No, this is completely broken. Whatever is going on in your system with
the interrupt core you need to address that at the appropriate level not
by putting a nonsensical bodge in here. The interrupt is disabled while
the threaded handler is running, if that's not having the desired effect
then whatever causes that needs to be fixed.
> +static int tas5720_dapm_post_event(struct snd_soc_dapm_widget *w,
> + struct snd_kcontrol *kcontrol, int event)
> +{
> + struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
> + int ret;
> +
> + switch (event) {
> + case SND_SOC_DAPM_POST_PMU:
> + /*
> + * Check if the codec is still powered up in which case exit
> + * right away also skipping the shutdown-to-active wait time.
> + */
> + ret = snd_soc_test_bits(codec, TAS5720_POWER_CTRL_REG,
> + TAS5720_SDZ, 0);
I don't understand this. Why on earth would we be calling the PMU
handler if the widget was not previously powered?
> + /*
> + * Take TAS5720 out of shutdown mode in preparation for widget
> + * power up.
> + */
> + ret = snd_soc_update_bits(codec, TAS5720_POWER_CTRL_REG,
> + TAS5720_SDZ, TAS5720_SDZ);
> + if (ret < 0) {
> + dev_err(codec->dev, "error waking codec: %d\n", ret);
> + return ret;
> + }
This is a _POST_PMU handler not a pre-PMU handler...
> + /* Events used to control the TAS5720 SHUTDOWN state */
> + SND_SOC_DAPM_PRE("Pre Event", tas5720_dapm_pre_event),
> + SND_SOC_DAPM_POST("Post Event", tas5720_dapm_post_event),
Oh, we're using _PRE() and _POST() events... this almost certainly
indicates a problem, there are very few circumstances where these are a
good idea and I'm not seeing anything in this driver which indicates
that this is going on. Please just use normal DAPM widgets (I'm
guessing a PGA) to represent the device and work within DAPM, don't
shoehorn some bodge around the side.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 473 bytes --]
next prev parent reply other threads:[~2016-03-28 19:01 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-21 17:08 [PATCH v2 0/2] ASoC: codecs: add support for TAS5720 digital amplifier Andreas Dannenberg
2016-03-21 17:08 ` [PATCH v2 1/2] ASoC: codecs: add TA5720 digital amplifier DT bindings Andreas Dannenberg
[not found] ` <1458580107-4632-2-git-send-email-dannenberg-l0cyMroinI0@public.gmane.org>
2016-03-23 14:55 ` Rob Herring
2016-03-21 17:08 ` [PATCH v2 2/2] ASoC: codecs: add support for TAS5720 digital amplifier Andreas Dannenberg
2016-03-28 19:01 ` Mark Brown [this message]
[not found] ` <20160328190143.GC2350-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2016-03-30 2:53 ` Andreas Dannenberg
2016-03-30 15:38 ` Mark Brown
2016-04-01 21:14 ` Andreas Dannenberg
2016-04-02 16:21 ` Mark Brown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160328190143.GC2350@sirena.org.uk \
--to=broonie@kernel.org \
--cc=alsa-devel@alsa-project.org \
--cc=dannenberg@ti.com \
--cc=devicetree@vger.kernel.org \
--cc=galak@codeaurora.org \
--cc=ijc+devicetree@hellion.org.uk \
--cc=lgirdwood@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=pawel.moll@arm.com \
--cc=perex@perex.cz \
--cc=robh+dt@kernel.org \
--cc=tiwai@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).