Re: [PATCH v3 2/2] ASoC: codecs: add support for TAS5720 digital amplifier

From: Andreas Dannenberg
Date: Tue Apr 26 2016 - 14:01:34 EST


On Tue, Apr 26, 2016 at 06:29:36PM +0100, Mark Brown wrote:
> On Tue, Apr 26, 2016 at 11:22:40AM -0500, Andreas Dannenberg wrote:
> > On Tue, Apr 26, 2016 at 04:43:13PM +0100, Mark Brown wrote:
>
> > > If the driver doesn't do anything just remove the code.
>
> > Well it's doing something which is making sure the nobody passes in a
> > sample size that's not supported. Wouldn't we want to catch this?
>
> Is the device actually going to mess up if someone sends it something
> else or is it just going to ignore the extra bits (given that it's doing
> autodetection anyway).

Hi Mark,
well in any of the left-justified modes (which are the only ones the
driver supports) the device takes and processes as many bits as it can
given the clock and divider settings. Any extra bits provided will get
ignored, and the next sync happens on the frame sync signal and not by
counting bits so there is no downside also as confirmed by some bench
testing I did feeding in 32-bit long frames for one channel. This seems
like a case of preferring tolerance over strictly enforcing
datasheet-advertised bit-widths. Will take out the check code.

>
> > > > + if ((curr_fault & TAS5720_OCE) && !(tas5720->last_fault & TAS5720_OCE))
> > > > + dev_warn(dev, "The Class-D output stage has experienced an over current event\n");
>
> > > "Class D over current". The verbosity is making the line over long and
> > > the phrasing is a bit unclear (and makes it seem less critical than it
> > > really is). These should probably be dev_crit() or somthing too, over
> > > current and similar events on a speaker output are generally extremely
> > > serious.
>
> > The overlong line goes through checkpatch --strict and looks like an
> > accepted practice to prevent breaking "grep" for example. The text is
> > more or less from the datasheet to give people something they can
> > cross-associate. But I can try to short this a bit.
>
> It's not just the fact that it's wrapping round to the next line, it's
> also the fact that it's very weakly phrased for something which might
> reasonably indicate an actual fire risk. I'm pretty sure people will
> not struggle excessively to find the reference to over current in the
> datasheet.

Ok will tweak it.

> > conditions. For the "over temp" error condition (which is actually
> > really hard to create on the bench, I've to get the EVM up to like 150C
> > and things start smelling a bit) this should probably be dev_crit() as
>
> If the silicon is flagging an over temperature condition that tends to
> indicate a catastrophic physical failure in the system, it is likely
> that the speaker itself has failed or there's otherwise a short in the
> speaker output path and potentially other physical damage especially in
> smaller systems where you might find that for example there's thermal
> damage to the case (and possibly even the user).

Yes make sense. As suggested promoting this to dev_crit() and making sure
its adequately phrased will help.

>
> > well. And then, maybe leave the "DC error" as a warning, since it's less
> > critical than the other two conditions. Thoughts?
>
> If you're pushing DC through a speaker that will generally mean that you
> will shortly see one or both of the over current and over temperature
> errors, it's really not something they're designed for.

I had to actually craft my own DC "audio" file to play with aplay to
trigger this error during testing. So when this happens I'd think it is
likely something userspace is "doing wrong" (of course there could be
other reasons too such a broken-off SAIF DIN/DOUT trace) but let's make
this also for the sake of consistency a dev_crit() too.

Along these lines, earlier as I was rummaging through the existing
drivers looking for a solution I could model after I noticed that
most(?) ASoC codec drivers don't have any type of HW fault checking, at
at least whatever drivers I looked at. Not sure why this is but given
this discussion this seems like a general opportunity to make
improvements.

Regards,
Andreas