mirror of
https://github.com/torvalds/linux.git
synced 2026-06-07 05:55:44 +02:00
Merge remote-tracking branches 'asoc/fix/adau17x1', 'asoc/fix/davinci' and 'asoc/fix/max98090' into asoc-linus
This commit is contained in:
commit
39b540ec8d
|
|
@ -90,6 +90,27 @@ static int adau17x1_pll_event(struct snd_soc_dapm_widget *w,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int adau17x1_adc_fixup(struct snd_soc_dapm_widget *w,
|
||||||
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
struct adau *adau = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we are capturing, toggle the ADOSR bit in Converter Control 0 to
|
||||||
|
* avoid losing SNR (workaround from ADI). This must be done after
|
||||||
|
* the ADC(s) have been enabled. According to the data sheet, it is
|
||||||
|
* normally illegal to set this bit when the sampling rate is 96 kHz,
|
||||||
|
* but according to ADI it is acceptable for this workaround.
|
||||||
|
*/
|
||||||
|
regmap_update_bits(adau->regmap, ADAU17X1_CONVERTER0,
|
||||||
|
ADAU17X1_CONVERTER0_ADOSR, ADAU17X1_CONVERTER0_ADOSR);
|
||||||
|
regmap_update_bits(adau->regmap, ADAU17X1_CONVERTER0,
|
||||||
|
ADAU17X1_CONVERTER0_ADOSR, 0);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static const char * const adau17x1_mono_stereo_text[] = {
|
static const char * const adau17x1_mono_stereo_text[] = {
|
||||||
"Stereo",
|
"Stereo",
|
||||||
"Mono Left Channel (L+R)",
|
"Mono Left Channel (L+R)",
|
||||||
|
|
@ -121,7 +142,8 @@ static const struct snd_soc_dapm_widget adau17x1_dapm_widgets[] = {
|
||||||
SND_SOC_DAPM_MUX("Right DAC Mode Mux", SND_SOC_NOPM, 0, 0,
|
SND_SOC_DAPM_MUX("Right DAC Mode Mux", SND_SOC_NOPM, 0, 0,
|
||||||
&adau17x1_dac_mode_mux),
|
&adau17x1_dac_mode_mux),
|
||||||
|
|
||||||
SND_SOC_DAPM_ADC("Left Decimator", NULL, ADAU17X1_ADC_CONTROL, 0, 0),
|
SND_SOC_DAPM_ADC_E("Left Decimator", NULL, ADAU17X1_ADC_CONTROL, 0, 0,
|
||||||
|
adau17x1_adc_fixup, SND_SOC_DAPM_POST_PMU),
|
||||||
SND_SOC_DAPM_ADC("Right Decimator", NULL, ADAU17X1_ADC_CONTROL, 1, 0),
|
SND_SOC_DAPM_ADC("Right Decimator", NULL, ADAU17X1_ADC_CONTROL, 1, 0),
|
||||||
SND_SOC_DAPM_DAC("Left DAC", NULL, ADAU17X1_DAC_CONTROL0, 0, 0),
|
SND_SOC_DAPM_DAC("Left DAC", NULL, ADAU17X1_DAC_CONTROL0, 0, 0),
|
||||||
SND_SOC_DAPM_DAC("Right DAC", NULL, ADAU17X1_DAC_CONTROL0, 1, 0),
|
SND_SOC_DAPM_DAC("Right DAC", NULL, ADAU17X1_DAC_CONTROL0, 1, 0),
|
||||||
|
|
|
||||||
|
|
@ -129,5 +129,7 @@ bool adau17x1_has_dsp(struct adau *adau);
|
||||||
|
|
||||||
#define ADAU17X1_CONVERTER0_CONVSR_MASK 0x7
|
#define ADAU17X1_CONVERTER0_CONVSR_MASK 0x7
|
||||||
|
|
||||||
|
#define ADAU17X1_CONVERTER0_ADOSR BIT(3)
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -2115,7 +2115,7 @@ static void max98090_pll_work(struct work_struct *work)
|
||||||
if (!snd_soc_codec_is_active(codec))
|
if (!snd_soc_codec_is_active(codec))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
dev_info(codec->dev, "PLL unlocked\n");
|
dev_info_ratelimited(codec->dev, "PLL unlocked\n");
|
||||||
|
|
||||||
/* Toggle shutdown OFF then ON */
|
/* Toggle shutdown OFF then ON */
|
||||||
snd_soc_update_bits(codec, M98090_REG_DEVICE_SHUTDOWN,
|
snd_soc_update_bits(codec, M98090_REG_DEVICE_SHUTDOWN,
|
||||||
|
|
|
||||||
|
|
@ -1982,8 +1982,10 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
|
|
||||||
if (!mcasp->chconstr[SNDRV_PCM_STREAM_PLAYBACK].list ||
|
if (!mcasp->chconstr[SNDRV_PCM_STREAM_PLAYBACK].list ||
|
||||||
!mcasp->chconstr[SNDRV_PCM_STREAM_CAPTURE].list)
|
!mcasp->chconstr[SNDRV_PCM_STREAM_CAPTURE].list) {
|
||||||
return -ENOMEM;
|
ret = -ENOMEM;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
ret = davinci_mcasp_set_ch_constraints(mcasp);
|
ret = davinci_mcasp_set_ch_constraints(mcasp);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user