|
@@ -950,7 +950,7 @@ static int __devinit snd_echo_new_pcm(struct echoaudio *chip)
|
|
|
Control interface
|
|
|
******************************************************************************/
|
|
|
|
|
|
-#ifndef ECHOCARD_HAS_VMIXER
|
|
|
+#if !defined(ECHOCARD_HAS_VMIXER) || defined(ECHOCARD_HAS_LINE_OUT_GAIN)
|
|
|
|
|
|
/******************* PCM output volume *******************/
|
|
|
static int snd_echo_output_gain_info(struct snd_kcontrol *kcontrol,
|
|
@@ -1003,6 +1003,19 @@ static int snd_echo_output_gain_put(struct snd_kcontrol *kcontrol,
|
|
|
return changed;
|
|
|
}
|
|
|
|
|
|
+#ifdef ECHOCARD_HAS_LINE_OUT_GAIN
|
|
|
+/* On the Mia this one controls the line-out volume */
|
|
|
+static struct snd_kcontrol_new snd_echo_line_output_gain __devinitdata = {
|
|
|
+ .name = "Line Playback Volume",
|
|
|
+ .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
|
|
|
+ .access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
|
|
|
+ SNDRV_CTL_ELEM_ACCESS_TLV_READ,
|
|
|
+ .info = snd_echo_output_gain_info,
|
|
|
+ .get = snd_echo_output_gain_get,
|
|
|
+ .put = snd_echo_output_gain_put,
|
|
|
+ .tlv = {.p = db_scale_output_gain},
|
|
|
+};
|
|
|
+#else
|
|
|
static struct snd_kcontrol_new snd_echo_pcm_output_gain __devinitdata = {
|
|
|
.name = "PCM Playback Volume",
|
|
|
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
|
|
@@ -1012,9 +1025,10 @@ static struct snd_kcontrol_new snd_echo_pcm_output_gain __devinitdata = {
|
|
|
.put = snd_echo_output_gain_put,
|
|
|
.tlv = {.p = db_scale_output_gain},
|
|
|
};
|
|
|
-
|
|
|
#endif
|
|
|
|
|
|
+#endif /* !ECHOCARD_HAS_VMIXER || ECHOCARD_HAS_LINE_OUT_GAIN */
|
|
|
+
|
|
|
|
|
|
|
|
|
#ifdef ECHOCARD_HAS_INPUT_GAIN
|
|
@@ -2030,10 +2044,18 @@ static int __devinit snd_echo_probe(struct pci_dev *pci,
|
|
|
snd_echo_vmixer.count = num_pipes_out(chip) * num_busses_out(chip);
|
|
|
if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_vmixer, chip))) < 0)
|
|
|
goto ctl_error;
|
|
|
-#else
|
|
|
- if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_pcm_output_gain, chip))) < 0)
|
|
|
+#ifdef ECHOCARD_HAS_LINE_OUT_GAIN
|
|
|
+ err = snd_ctl_add(chip->card,
|
|
|
+ snd_ctl_new1(&snd_echo_line_output_gain, chip));
|
|
|
+ if (err < 0)
|
|
|
goto ctl_error;
|
|
|
#endif
|
|
|
+#else /* ECHOCARD_HAS_VMIXER */
|
|
|
+ err = snd_ctl_add(chip->card,
|
|
|
+ snd_ctl_new1(&snd_echo_pcm_output_gain, chip));
|
|
|
+ if (err < 0)
|
|
|
+ goto ctl_error;
|
|
|
+#endif /* ECHOCARD_HAS_VMIXER */
|
|
|
|
|
|
#ifdef ECHOCARD_HAS_INPUT_GAIN
|
|
|
if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_line_input_gain, chip))) < 0)
|