[alsa-devel] [PATCH] ASoC: max98357a: Fix speaker pop when starting playback

Ezequiel Garcia ezequiel at collabora.com
Thu Mar 22 14:01:32 CET 2018


Hi Mark,

Thanks for reviewing this so quickly.

On Thu, 2018-03-22 at 09:54 +0800, Mark Brown wrote:
> On Wed, Mar 21, 2018 at 07:30:15PM -0300, Ezequiel Garcia wrote:
> 
> > +- sdmode-delay : specify a delay time for SD_MODE pin. According
> > +        to the DAC datasheet, if LRCLK is removed while BCLK is
> > present,
> > +        the DAC output can cause loud pop/crack noises. This
> > property
> > +        specifies a delay for the SD_MODE pin assert, required to
> > +        eliminate the noise.
> 
> Why is this configurable?  This sounds like something entirely within
> the digital domain of the device rather than something that depends
> on
> board configuration and it's hard to see how someone would configure
> this.
> 

The amount of delay needed seems specific to the CPU DAI,
not specific to the DAC. The CPU DAIs or the machine 
could specify this as a parameter, but I can't don't see how.

Perhaps it could be a driver parameter?

> > +static void max98357a_enable_sdmode_work(struct work_struct *work)
> > +{
> > +   struct max98357a_priv *max98357a = container_of(work,
> > +           struct max98357a_priv, enable_sdmode_work.work);
> > +   unsigned long flags;
> > +
> > +   spin_lock_irqsave(&max98357a->sdmode_lock, flags);
> > +   gpiod_set_value(max98357a->sdmode, max98357a-
> > >sdmode_enabled);
> > +   spin_unlock_irqrestore(&max98357a->sdmode_lock, flags);
> > +}
> 
> What is this lock supposed to accomplish?  We perform a single action
> under the lock which itself has internal locking, it's not going to
> have
> any meaningful effect.

I am under the impression it removes the race condition
between the gpiod_set_value() happening in the different
contexts.

Thanks,
Eze


More information about the Alsa-devel mailing list