[alsa-devel] [PATCH v4] ASoC: max98090: remove 24-bit format support if RJ is 0
Yu-hsuan Hsu
yuhsuan at google.com
Thu Jun 6 01:09:28 CEST 2019
Thanks!
How about adding a new condition to check whether tdm_slots is 0?
If true, we can remove 24 bit format. Is it acceptable?
On Tue, Jun 4, 2019 at 10:48 PM Pierre-Louis Bossart <
pierre-louis.bossart at linux.intel.com> wrote:
> On 6/4/19 5:49 AM, Yu-Hsuan Hsu wrote:
> > The supported formats are S16_LE and S24_LE now. However, by datasheet
> > of max98090, S24_LE is only supported when it is in the right justified
> > mode. We should remove 24-bit format if it is not in that mode to avoid
> > triggering error.
> >
> > Signed-off-by: Yu-Hsuan Hsu <yuhsuan at chromium.org>
> > ---
> > Remove Change-Id.
> >
> > sound/soc/codecs/max98090.c | 16 ++++++++++++++++
> > 1 file changed, 16 insertions(+)
> >
> > diff --git a/sound/soc/codecs/max98090.c b/sound/soc/codecs/max98090.c
> > index 7619ea31ab50..ada8c25e643d 100644
> > --- a/sound/soc/codecs/max98090.c
> > +++ b/sound/soc/codecs/max98090.c
> > @@ -1909,6 +1909,21 @@ static int max98090_configure_dmic(struct
> max98090_priv *max98090,
> > return 0;
> > }
> >
> > +static int max98090_dai_startup(struct snd_pcm_substream *substream,
> > + struct snd_soc_dai *dai)
> > +{
> > + struct snd_soc_component *component = dai->component;
> > + struct max98090_priv *max98090 =
> snd_soc_component_get_drvdata(component);
> > + unsigned int fmt = max98090->dai_fmt;
> > +
> > + /* Remove 24-bit format support if it is not in right justified
> mode. */
> > + if ((fmt & SND_SOC_DAIFMT_FORMAT_MASK) != SND_SOC_DAIFMT_RIGHT_J) {
> > + substream->runtime->hw.formats = SNDRV_PCM_FMTBIT_S16_LE;
> > + snd_pcm_hw_constraint_msbits(substream->runtime, 0, 16,
> 16);
> > + }
> > + return 0;
> > +}
>
> The data sheet is ambiguous, it states that 24-bit data is supported in
> RJ mode when TDM is 0. It doesn't say TDM can only support 16 bits.
>
> That said, it's not clear to me if TDM is supported or not in this
> driver, there are multiple references to tdm_slots but DSP_A and DSP_B
> are not supported.
>
> > +
> > static int max98090_dai_hw_params(struct snd_pcm_substream *substream,
> > struct snd_pcm_hw_params *params,
> > struct snd_soc_dai *dai)
> > @@ -2316,6 +2331,7 @@ EXPORT_SYMBOL_GPL(max98090_mic_detect);
> > #define MAX98090_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |
> SNDRV_PCM_FMTBIT_S24_LE)
> >
> > static const struct snd_soc_dai_ops max98090_dai_ops = {
> > + .startup = max98090_dai_startup,
> > .set_sysclk = max98090_dai_set_sysclk,
> > .set_fmt = max98090_dai_set_fmt,
> > .set_tdm_slot = max98090_set_tdm_slot,
> >
>
>
More information about the Alsa-devel
mailing list