Commit e8ff9c41 authored by Peter Ujfalusi's avatar Peter Ujfalusi Committed by Mark Brown
Browse files

ASoC: TWL4030: Add DAPM event handler for output MUX selection



DAPM event handler is set to filter out invalid MUX settings
for certain outputs.
Earpiece:
 - 0 = Off
 - 1 = DACL1
 - 2 = DACL2
 - 3 = *** Invalid ***
 - 4 = DACR1

PreDriveL/R:
 - 0 = Off/Off
 - 1 = DACL1/DACR1
 - 2 = DACL2/DACR2
 - 3 = *** Invalid/Invalid ***
 - 4 = DACR2/DACL2

Signed-off-by: default avatarPeter Ujfalusi <peter.ujfalusi@nokia.com>
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent 44c55870
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -190,6 +190,30 @@ static void twl4030_init_chip(struct snd_soc_codec *codec)

}

static int outmixer_event(struct snd_soc_dapm_widget *w,
	struct snd_kcontrol *kcontrol, int event)
{
	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
	int ret = 0;
	int val;

	switch (e->reg) {
	case TWL4030_REG_PREDL_CTL:
	case TWL4030_REG_PREDR_CTL:
	case TWL4030_REG_EAR_CTL:
		val = w->value >> e->shift_l;
		if (val == 3) {
			printk(KERN_WARNING
			"Invalid MUX setting for register 0x%02x (%d)\n",
			      e->reg, val);
			ret = -1;
		}
		break;
	}

	return ret;
}

/*
 * Some of the gain controls in TWL (mostly those which are associated with
 * the outputs) are implemented in an interesting way: