Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 631476d7 authored by Mark Brown's avatar Mark Brown
Browse files

Merge remote-tracking branch 'asoc/topic/rt298' into asoc-next

parents ad2ab00c 9ff49ce4
Loading
Loading
Loading
Loading
+23 −28
Original line number Diff line number Diff line
@@ -276,6 +276,8 @@ static int rt298_jack_detect(struct rt298_priv *rt298, bool *hp, bool *mic)
		} else {
			*mic = false;
			regmap_write(rt298->regmap, RT298_SET_MIC1, 0x20);
			regmap_update_bits(rt298->regmap,
				RT298_CBJ_CTRL1, 0x0400, 0x0000);
		}
	} else {
		regmap_read(rt298->regmap, RT298_GET_HP_SENSE, &buf);
@@ -482,6 +484,26 @@ static int rt298_adc_event(struct snd_soc_dapm_widget *w,
		snd_soc_update_bits(codec,
			VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, nid, 0),
			0x7080, 0x7000);
		 /* If MCLK doesn't exist, reset AD filter */
		if (!(snd_soc_read(codec, RT298_VAD_CTRL) & 0x200)) {
			pr_info("NO MCLK\n");
			switch (nid) {
			case RT298_ADC_IN1:
				snd_soc_update_bits(codec,
					RT298_D_FILTER_CTRL, 0x2, 0x2);
				mdelay(10);
				snd_soc_update_bits(codec,
					RT298_D_FILTER_CTRL, 0x2, 0x0);
				break;
			case RT298_ADC_IN2:
				snd_soc_update_bits(codec,
					RT298_D_FILTER_CTRL, 0x4, 0x4);
				mdelay(10);
				snd_soc_update_bits(codec,
					RT298_D_FILTER_CTRL, 0x4, 0x0);
				break;
			}
		}
		break;
	case SND_SOC_DAPM_PRE_PMD:
		snd_soc_update_bits(codec,
@@ -520,30 +542,12 @@ static int rt298_mic1_event(struct snd_soc_dapm_widget *w,
	return 0;
}

static int rt298_vref_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);

	switch (event) {
	case SND_SOC_DAPM_PRE_PMU:
		snd_soc_update_bits(codec,
			RT298_CBJ_CTRL1, 0x0400, 0x0000);
		mdelay(50);
		break;
	default:
		return 0;
	}

	return 0;
}

static const struct snd_soc_dapm_widget rt298_dapm_widgets[] = {

	SND_SOC_DAPM_SUPPLY_S("HV", 1, RT298_POWER_CTRL1,
		12, 1, NULL, 0),
	SND_SOC_DAPM_SUPPLY("VREF", RT298_POWER_CTRL1,
		0, 1, rt298_vref_event, SND_SOC_DAPM_PRE_PMU),
		0, 1, NULL, 0),
	SND_SOC_DAPM_SUPPLY_S("BG_MBIAS", 1, RT298_POWER_CTRL2,
		1, 0, NULL, 0),
	SND_SOC_DAPM_SUPPLY_S("LDO1", 1, RT298_POWER_CTRL2,
@@ -934,18 +938,9 @@ static int rt298_set_bias_level(struct snd_soc_codec *codec,
		}
		break;

	case SND_SOC_BIAS_ON:
		mdelay(30);
		snd_soc_update_bits(codec,
			RT298_CBJ_CTRL1, 0x0400, 0x0400);

		break;

	case SND_SOC_BIAS_STANDBY:
		snd_soc_write(codec,
			RT298_SET_AUDIO_POWER, AC_PWRST_D3);
		snd_soc_update_bits(codec,
			RT298_CBJ_CTRL1, 0x0400, 0x0000);
		break;

	default:
+2 −0
Original line number Diff line number Diff line
@@ -137,6 +137,7 @@
#define RT298_A_BIAS_CTRL2	0x02
#define RT298_POWER_CTRL1	0x03
#define RT298_A_BIAS_CTRL3	0x04
#define RT298_D_FILTER_CTRL	0x05
#define RT298_POWER_CTRL2	0x08
#define RT298_I2S_CTRL1		0x09
#define RT298_I2S_CTRL2		0x0a
@@ -148,6 +149,7 @@
#define RT298_IRQ_CTRL		0x33
#define RT298_WIND_FILTER_CTRL	0x46
#define RT298_PLL_CTRL1		0x49
#define RT298_VAD_CTRL		0x4e
#define RT298_CBJ_CTRL1		0x4f
#define RT298_CBJ_CTRL2		0x50
#define RT298_PLL_CTRL		0x63