Loading sound/pci/emu10k1/emumixer.c +46 −0 Original line number Diff line number Diff line Loading @@ -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) Loading Loading @@ -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; } Loading
sound/pci/emu10k1/emumixer.c +46 −0 Original line number Diff line number Diff line Loading @@ -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) Loading Loading @@ -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; }