Merge branch 'topic/audigy-capture-boost' into to-push
This commit is contained in:
Коммит
e4456e7161
|
@ -1639,6 +1639,45 @@ static struct snd_kcontrol_new snd_audigy_shared_spdif __devinitdata =
|
|||
.put = snd_emu10k1_shared_spdif_put
|
||||
};
|
||||
|
||||
/* workaround for too low volume on Audigy due to 16bit/24bit conversion */
|
||||
|
||||
#define snd_audigy_capture_boost_info snd_ctl_boolean_mono_info
|
||||
|
||||
static int snd_audigy_capture_boost_get(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
|
||||
unsigned int val;
|
||||
|
||||
/* FIXME: better to use a cached version */
|
||||
val = snd_ac97_read(emu->ac97, AC97_REC_GAIN);
|
||||
ucontrol->value.integer.value[0] = !!val;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int snd_audigy_capture_boost_put(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
|
||||
unsigned int val;
|
||||
|
||||
if (ucontrol->value.integer.value[0])
|
||||
val = 0x0f0f;
|
||||
else
|
||||
val = 0;
|
||||
return snd_ac97_update(emu->ac97, AC97_REC_GAIN, val);
|
||||
}
|
||||
|
||||
static struct snd_kcontrol_new snd_audigy_capture_boost __devinitdata =
|
||||
{
|
||||
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
|
||||
.name = "Analog Capture Boost",
|
||||
.info = snd_audigy_capture_boost_info,
|
||||
.get = snd_audigy_capture_boost_get,
|
||||
.put = snd_audigy_capture_boost_put
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
*/
|
||||
static void snd_emu10k1_mixer_free_ac97(struct snd_ac97 *ac97)
|
||||
|
@ -2087,5 +2126,12 @@ int __devinit snd_emu10k1_mixer(struct snd_emu10k1 *emu,
|
|||
}
|
||||
}
|
||||
|
||||
if (emu->card_capabilities->ac97_chip && emu->audigy) {
|
||||
err = snd_ctl_add(card, snd_ctl_new1(&snd_audigy_capture_boost,
|
||||
emu));
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче