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

Commit dd38dc1a authored by Clemens Ladisch's avatar Clemens Ladisch Committed by Takashi Iwai
Browse files

ALSA: virtuoso: add one more headphone impedance setting



Add one more option to the "Headphones Impedance" control to synchronize
with recent versions of the Windows driver.

Tested-by: default avatarfugazzi® <fugazzi99@gmail.com>
Signed-off-by: default avatarClemens Ladisch <clemens@ladisch.de>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 49f4b4d1
Loading
Loading
Loading
Loading
+10 −8
Original line number Diff line number Diff line
@@ -795,11 +795,11 @@ static int st_output_switch_put(struct snd_kcontrol *ctl,
static int st_hp_volume_offset_info(struct snd_kcontrol *ctl,
				    struct snd_ctl_elem_info *info)
{
	static const char *const names[3] = {
		"< 64 ohms", "64-300 ohms", "300-600 ohms"
	static const char *const names[4] = {
		"< 32 ohms", "32-64 ohms", "64-300 ohms", "300-600 ohms"
	};

	return snd_ctl_enum_info(info, 1, 3, names);
	return snd_ctl_enum_info(info, 1, 4, names);
}

static int st_hp_volume_offset_get(struct snd_kcontrol *ctl,
@@ -809,12 +809,14 @@ static int st_hp_volume_offset_get(struct snd_kcontrol *ctl,
	struct xonar_pcm179x *data = chip->model_data;

	mutex_lock(&chip->mutex);
	if (data->hp_gain_offset < 2*-6)
	if (data->hp_gain_offset < 2*-12)
		value->value.enumerated.item[0] = 0;
	else if (data->hp_gain_offset < 0)
	else if (data->hp_gain_offset < 2*-6)
		value->value.enumerated.item[0] = 1;
	else
	else if (data->hp_gain_offset < 0)
		value->value.enumerated.item[0] = 2;
	else
		value->value.enumerated.item[0] = 3;
	mutex_unlock(&chip->mutex);
	return 0;
}
@@ -823,13 +825,13 @@ static int st_hp_volume_offset_get(struct snd_kcontrol *ctl,
static int st_hp_volume_offset_put(struct snd_kcontrol *ctl,
				   struct snd_ctl_elem_value *value)
{
	static const s8 offsets[] = { 2*-18, 2*-6, 0 };
	static const s8 offsets[] = { 2*-18, 2*-12, 2*-6, 0 };
	struct oxygen *chip = ctl->private_data;
	struct xonar_pcm179x *data = chip->model_data;
	s8 offset;
	int changed;

	if (value->value.enumerated.item[0] > 2)
	if (value->value.enumerated.item[0] > 3)
		return -EINVAL;
	offset = offsets[value->value.enumerated.item[0]];
	mutex_lock(&chip->mutex);