ASoC: max98090: remove 24-bit format support if RJ is 0
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@chromium.org> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
cbc0fa7b6e
commit
5628c89796
|
@ -1909,6 +1909,21 @@ static int max98090_configure_dmic(struct max98090_priv *max98090,
|
||||||
return 0;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
static int max98090_dai_hw_params(struct snd_pcm_substream *substream,
|
static int max98090_dai_hw_params(struct snd_pcm_substream *substream,
|
||||||
struct snd_pcm_hw_params *params,
|
struct snd_pcm_hw_params *params,
|
||||||
struct snd_soc_dai *dai)
|
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)
|
#define MAX98090_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE)
|
||||||
|
|
||||||
static const struct snd_soc_dai_ops max98090_dai_ops = {
|
static const struct snd_soc_dai_ops max98090_dai_ops = {
|
||||||
|
.startup = max98090_dai_startup,
|
||||||
.set_sysclk = max98090_dai_set_sysclk,
|
.set_sysclk = max98090_dai_set_sysclk,
|
||||||
.set_fmt = max98090_dai_set_fmt,
|
.set_fmt = max98090_dai_set_fmt,
|
||||||
.set_tdm_slot = max98090_set_tdm_slot,
|
.set_tdm_slot = max98090_set_tdm_slot,
|
||||||
|
|
Loading…
Reference in New Issue