ASoC: codecs: ad193x: Add runtime support for DSP_A and I2S modes
The driver only supports DPS_A for DAC, which is configured at probe. This patch adds support for DSP_A and I2S modes by using the set_fmt() callback. A trivial break is also removed from a case's default branch. Signed-off-by: Codrin Ciubotariu <codrin.ciubotariu@microchip.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Родитель
90f6e68031
Коммит
bccf9c7e14
|
@ -188,23 +188,26 @@ static int ad193x_set_dai_fmt(struct snd_soc_dai *codec_dai,
|
|||
{
|
||||
struct ad193x_priv *ad193x = snd_soc_component_get_drvdata(codec_dai->component);
|
||||
unsigned int adc_serfmt = 0;
|
||||
unsigned int dac_serfmt = 0;
|
||||
unsigned int adc_fmt = 0;
|
||||
unsigned int dac_fmt = 0;
|
||||
|
||||
/* At present, the driver only support AUX ADC mode(SND_SOC_DAIFMT_I2S
|
||||
* with TDM) and ADC&DAC TDM mode(SND_SOC_DAIFMT_DSP_A)
|
||||
* with TDM), ADC&DAC TDM mode(SND_SOC_DAIFMT_DSP_A) and DAC I2S mode
|
||||
* (SND_SOC_DAIFMT_I2S)
|
||||
*/
|
||||
switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
|
||||
case SND_SOC_DAIFMT_I2S:
|
||||
adc_serfmt |= AD193X_ADC_SERFMT_TDM;
|
||||
dac_serfmt |= AD193X_DAC_SERFMT_STEREO;
|
||||
break;
|
||||
case SND_SOC_DAIFMT_DSP_A:
|
||||
adc_serfmt |= AD193X_ADC_SERFMT_AUX;
|
||||
dac_serfmt |= AD193X_DAC_SERFMT_TDM;
|
||||
break;
|
||||
default:
|
||||
if (ad193x_has_adc(ad193x))
|
||||
return -EINVAL;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
|
||||
|
@ -261,6 +264,8 @@ static int ad193x_set_dai_fmt(struct snd_soc_dai *codec_dai,
|
|||
regmap_update_bits(ad193x->regmap, AD193X_ADC_CTRL2,
|
||||
AD193X_ADC_FMT_MASK, adc_fmt);
|
||||
}
|
||||
regmap_update_bits(ad193x->regmap, AD193X_DAC_CTRL0,
|
||||
AD193X_DAC_SERFMT_MASK, dac_serfmt);
|
||||
regmap_update_bits(ad193x->regmap, AD193X_DAC_CTRL1,
|
||||
AD193X_DAC_FMT_MASK, dac_fmt);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче