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: fugazzi® <fugazzi99@gmail.com> Signed-off-by: Clemens Ladisch <clemens@ladisch.de> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
49f4b4d15c
commit
dd38dc1a9b
1 changed files with 10 additions and 8 deletions
|
@ -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,
|
static int st_hp_volume_offset_info(struct snd_kcontrol *ctl,
|
||||||
struct snd_ctl_elem_info *info)
|
struct snd_ctl_elem_info *info)
|
||||||
{
|
{
|
||||||
static const char *const names[3] = {
|
static const char *const names[4] = {
|
||||||
"< 64 ohms", "64-300 ohms", "300-600 ohms"
|
"< 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,
|
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;
|
struct xonar_pcm179x *data = chip->model_data;
|
||||||
|
|
||||||
mutex_lock(&chip->mutex);
|
mutex_lock(&chip->mutex);
|
||||||
if (data->hp_gain_offset < 2*-6)
|
if (data->hp_gain_offset < 2*-12)
|
||||||
value->value.enumerated.item[0] = 0;
|
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;
|
value->value.enumerated.item[0] = 1;
|
||||||
else
|
else if (data->hp_gain_offset < 0)
|
||||||
value->value.enumerated.item[0] = 2;
|
value->value.enumerated.item[0] = 2;
|
||||||
|
else
|
||||||
|
value->value.enumerated.item[0] = 3;
|
||||||
mutex_unlock(&chip->mutex);
|
mutex_unlock(&chip->mutex);
|
||||||
return 0;
|
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,
|
static int st_hp_volume_offset_put(struct snd_kcontrol *ctl,
|
||||||
struct snd_ctl_elem_value *value)
|
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 oxygen *chip = ctl->private_data;
|
||||||
struct xonar_pcm179x *data = chip->model_data;
|
struct xonar_pcm179x *data = chip->model_data;
|
||||||
s8 offset;
|
s8 offset;
|
||||||
int changed;
|
int changed;
|
||||||
|
|
||||||
if (value->value.enumerated.item[0] > 2)
|
if (value->value.enumerated.item[0] > 3)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
offset = offsets[value->value.enumerated.item[0]];
|
offset = offsets[value->value.enumerated.item[0]];
|
||||||
mutex_lock(&chip->mutex);
|
mutex_lock(&chip->mutex);
|
||||||
|
|
Loading…
Add table
Reference in a new issue