|
@@ -418,6 +418,8 @@ static const DECLARE_TLV_DB_SCALE(mic_vol_tlv, 0, 1000, 0);
|
|
|
static const struct snd_kcontrol_new rt286_snd_controls[] = {
|
|
|
SOC_DOUBLE_R_TLV("DAC0 Playback Volume", RT286_DACL_GAIN,
|
|
|
RT286_DACR_GAIN, 0, 0x7f, 0, out_vol_tlv),
|
|
|
+ SOC_DOUBLE_R("ADC0 Capture Switch", RT286_ADCL_GAIN,
|
|
|
+ RT286_ADCR_GAIN, 7, 1, 1),
|
|
|
SOC_DOUBLE_R_TLV("ADC0 Capture Volume", RT286_ADCL_GAIN,
|
|
|
RT286_ADCR_GAIN, 0, 0x7f, 0, out_vol_tlv),
|
|
|
SOC_SINGLE_TLV("AMIC Volume", RT286_MIC_GAIN,
|
|
@@ -539,32 +541,6 @@ static int rt286_set_dmic1_event(struct snd_soc_dapm_widget *w,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int rt286_adc_event(struct snd_soc_dapm_widget *w,
|
|
|
- struct snd_kcontrol *kcontrol, int event)
|
|
|
-{
|
|
|
- struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
|
|
- unsigned int nid;
|
|
|
-
|
|
|
- nid = (w->reg >> 20) & 0xff;
|
|
|
-
|
|
|
- switch (event) {
|
|
|
- case SND_SOC_DAPM_POST_PMU:
|
|
|
- snd_soc_update_bits(codec,
|
|
|
- VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, nid, 0),
|
|
|
- 0x7080, 0x7000);
|
|
|
- break;
|
|
|
- case SND_SOC_DAPM_PRE_PMD:
|
|
|
- snd_soc_update_bits(codec,
|
|
|
- VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, nid, 0),
|
|
|
- 0x7080, 0x7080);
|
|
|
- break;
|
|
|
- default:
|
|
|
- return 0;
|
|
|
- }
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
static int rt286_vref_event(struct snd_soc_dapm_widget *w,
|
|
|
struct snd_kcontrol *kcontrol, int event)
|
|
|
{
|
|
@@ -668,12 +644,10 @@ static const struct snd_soc_dapm_widget rt286_dapm_widgets[] = {
|
|
|
SND_SOC_DAPM_ADC("ADC 1", NULL, SND_SOC_NOPM, 0, 0),
|
|
|
|
|
|
/* ADC Mux */
|
|
|
- SND_SOC_DAPM_MUX_E("ADC 0 Mux", RT286_SET_POWER(RT286_ADC_IN1), 0, 1,
|
|
|
- &rt286_adc0_mux, rt286_adc_event, SND_SOC_DAPM_PRE_PMD |
|
|
|
- SND_SOC_DAPM_POST_PMU),
|
|
|
- SND_SOC_DAPM_MUX_E("ADC 1 Mux", RT286_SET_POWER(RT286_ADC_IN2), 0, 1,
|
|
|
- &rt286_adc1_mux, rt286_adc_event, SND_SOC_DAPM_PRE_PMD |
|
|
|
- SND_SOC_DAPM_POST_PMU),
|
|
|
+ SND_SOC_DAPM_MUX("ADC 0 Mux", RT286_SET_POWER(RT286_ADC_IN1), 0, 1,
|
|
|
+ &rt286_adc0_mux),
|
|
|
+ SND_SOC_DAPM_MUX("ADC 1 Mux", RT286_SET_POWER(RT286_ADC_IN2), 0, 1,
|
|
|
+ &rt286_adc1_mux),
|
|
|
|
|
|
/* Audio Interface */
|
|
|
SND_SOC_DAPM_AIF_IN("AIF1RX", "AIF1 Playback", 0, SND_SOC_NOPM, 0, 0),
|
|
@@ -862,10 +836,8 @@ static int rt286_hw_params(struct snd_pcm_substream *substream,
|
|
|
RT286_I2S_CTRL1, 0x0018, d_len_code << 3);
|
|
|
dev_dbg(codec->dev, "format val = 0x%x\n", val);
|
|
|
|
|
|
- if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
|
|
|
- snd_soc_update_bits(codec, RT286_DAC_FORMAT, 0x407f, val);
|
|
|
- else
|
|
|
- snd_soc_update_bits(codec, RT286_ADC_FORMAT, 0x407f, val);
|
|
|
+ snd_soc_update_bits(codec, RT286_DAC_FORMAT, 0x407f, val);
|
|
|
+ snd_soc_update_bits(codec, RT286_ADC_FORMAT, 0x407f, val);
|
|
|
|
|
|
return 0;
|
|
|
}
|