diff options
Diffstat (limited to 'sound')
| -rw-r--r-- | sound/soc/codecs/twl4030.c | 48 | 
1 files changed, 12 insertions, 36 deletions
diff --git a/sound/soc/codecs/twl4030.c b/sound/soc/codecs/twl4030.c index d401c597d38..7b618bbff88 100644 --- a/sound/soc/codecs/twl4030.c +++ b/sound/soc/codecs/twl4030.c @@ -577,36 +577,6 @@ static const struct snd_kcontrol_new twl4030_dapm_dbypassv_control =  			TWL4030_REG_VSTPGA, 0, 0x29, 0,  			twl4030_dapm_dbypassv_tlv); -static int micpath_event(struct snd_soc_dapm_widget *w, -	struct snd_kcontrol *kcontrol, int event) -{ -	struct soc_enum *e = (struct soc_enum *)w->kcontrols->private_value; -	unsigned char adcmicsel, micbias_ctl; - -	adcmicsel = twl4030_read_reg_cache(w->codec, TWL4030_REG_ADCMICSEL); -	micbias_ctl = twl4030_read_reg_cache(w->codec, TWL4030_REG_MICBIAS_CTL); -	/* Prepare the bits for the given TX path: -	 * shift_l == 0: TX1 microphone path -	 * shift_l == 2: TX2 microphone path */ -	if (e->shift_l) { -		/* TX2 microphone path */ -		if (adcmicsel & TWL4030_TX2IN_SEL) -			micbias_ctl |= TWL4030_MICBIAS2_CTL; /* digimic */ -		else -			micbias_ctl &= ~TWL4030_MICBIAS2_CTL; -	} else { -		/* TX1 microphone path */ -		if (adcmicsel & TWL4030_TX1IN_SEL) -			micbias_ctl |= TWL4030_MICBIAS1_CTL; /* digimic */ -		else -			micbias_ctl &= ~TWL4030_MICBIAS1_CTL; -	} - -	twl4030_write(w->codec, TWL4030_REG_MICBIAS_CTL, micbias_ctl); - -	return 0; -} -  /*   * Output PGA builder:   * Handle the muting and unmuting of the given output (turning off the @@ -1430,12 +1400,10 @@ static const struct snd_soc_dapm_widget twl4030_dapm_widgets[] = {  	/* Analog/Digital mic path selection.  	   TX1 Left/Right: either analog Left/Right or Digimic0  	   TX2 Left/Right: either analog Left/Right or Digimic1 */ -	SND_SOC_DAPM_MUX_E("TX1 Capture Route", SND_SOC_NOPM, 0, 0, -		&twl4030_dapm_micpathtx1_control, micpath_event, -		SND_SOC_DAPM_POST_REG), -	SND_SOC_DAPM_MUX_E("TX2 Capture Route", SND_SOC_NOPM, 0, 0, -		&twl4030_dapm_micpathtx2_control, micpath_event, -		SND_SOC_DAPM_POST_REG), +	SND_SOC_DAPM_MUX("TX1 Capture Route", SND_SOC_NOPM, 0, 0, +		&twl4030_dapm_micpathtx1_control), +	SND_SOC_DAPM_MUX("TX2 Capture Route", SND_SOC_NOPM, 0, 0, +		&twl4030_dapm_micpathtx2_control),  	/* Analog input mixers for the capture amplifiers */  	SND_SOC_DAPM_MIXER("Analog Left", @@ -1459,6 +1427,11 @@ static const struct snd_soc_dapm_widget twl4030_dapm_widgets[] = {  		TWL4030_REG_ADCMICSEL, 3, 0, NULL, 0,  		digimic_event, SND_SOC_DAPM_POST_PMU), +	SND_SOC_DAPM_SUPPLY("micbias1 select", TWL4030_REG_MICBIAS_CTL, 5, 0, +			    NULL, 0), +	SND_SOC_DAPM_SUPPLY("micbias2 select", TWL4030_REG_MICBIAS_CTL, 6, 0, +			    NULL, 0), +  	SND_SOC_DAPM_MICBIAS("Mic Bias 1", TWL4030_REG_MICBIAS_CTL, 0, 0),  	SND_SOC_DAPM_MICBIAS("Mic Bias 2", TWL4030_REG_MICBIAS_CTL, 1, 0),  	SND_SOC_DAPM_MICBIAS("Headset Mic Bias", TWL4030_REG_MICBIAS_CTL, 2, 0), @@ -1590,6 +1563,9 @@ static const struct snd_soc_dapm_route intercon[] = {  	{"Digimic0 Enable", NULL, "DIGIMIC0"},  	{"Digimic1 Enable", NULL, "DIGIMIC1"}, +	{"DIGIMIC0", NULL, "micbias1 select"}, +	{"DIGIMIC1", NULL, "micbias2 select"}, +  	/* TX1 Left capture path */  	{"TX1 Capture Route", "Analog", "ADC Physical Left"},  	{"TX1 Capture Route", "Digimic0", "Digimic0 Enable"},  |