[alsa-devel] [PATCH 1/1] Echoaudio: fix broken Mia driver
This change: http://git.alsa-project.org/?p=alsa-kernel.git;a=blobdiff;f=sound/pci/echoau... broke the Mia driver because it removed the line-out control interface from all vmixer cards. But the Mia has that (undocumented!!) control and after the change it is impossible to raise the volume. I tested the driver with my IndigoIOx that was supposed to have the same set of controls... sorry. I hope it's not too late to merge this patch in linux-2.6.32.
----------
Re-enable the line-out control for the Mia card.
Signed-off-by: Giuliano Pochini pochini@shiny.it
diff -u alsa-driver-1.0.21/alsa-kernel/pci/echoaudio__orig/echoaudio.c alsa-driver-1.0.21/alsa-kernel/pci/echoaudio/echoaudio.c --- alsa-driver-1.0.21/alsa-kernel/pci/echoaudio__orig/echoaudio.c 2009-08-28 13:41:39.000000000 +0200 +++ alsa-driver-1.0.21/alsa-kernel/pci/echoaudio/echoaudio.c 2009-09-29 21:55:48.000000000 +0200 @@ -950,7 +950,7 @@ 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 @@ 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 @@ .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,14 @@ 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 + if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_line_output_gain, chip))) < 0) goto ctl_error; #endif +#else /* ECHOCARD_HAS_VMIXER */ + if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_pcm_output_gain, chip))) < 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) diff -u alsa-driver-1.0.21/alsa-kernel/pci/echoaudio__orig/mia.c alsa-driver-1.0.21/alsa-kernel/pci/echoaudio/mia.c --- alsa-driver-1.0.21/alsa-kernel/pci/echoaudio__orig/mia.c 2009-08-28 13:41:39.000000000 +0200 +++ alsa-driver-1.0.21/alsa-kernel/pci/echoaudio/mia.c 2009-09-29 21:55:48.000000000 +0200 @@ -29,6 +29,7 @@ #define ECHOCARD_HAS_ADAT FALSE #define ECHOCARD_HAS_STEREO_BIG_ENDIAN32 #define ECHOCARD_HAS_MIDI +#define ECHOCARD_HAS_LINE_OUT_GAIN
/* Pipe indexes */ #define PX_ANALOG_OUT 0 /* 8 */
-- Giuliano.
On Tue, 29 Sep 2009 22:21:28 +0200 Giuliano Pochini pochini@shiny.it wrote:
Same patch with style changes to make checkpatch.pl happy.
----------
Re-enable the line-out control for the Mia card.
Signed-off-by: Giuliano Pochini pochini@shiny.it
diff -u alsa-driver-1.0.21/alsa-kernel/pci/echoaudio__orig/echoaudio.c alsa-driver-1.0.21/alsa-kernel/pci/echoaudio/echoaudio.c --- alsa-driver-1.0.21/alsa-kernel/pci/echoaudio__orig/echoaudio.c 2009-08-28 13:41:39.000000000 +0200 +++ alsa-driver-1.0.21/alsa-kernel/pci/echoaudio/echoaudio.c 2009-09-29 23:00:56.000000000 +0200 @@ -950,7 +950,7 @@ 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 @@ 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 @@ .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 @@ 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) diff -u alsa-driver-1.0.21/alsa-kernel/pci/echoaudio__orig/mia.c alsa-driver-1.0.21/alsa-kernel/pci/echoaudio/mia.c --- alsa-driver-1.0.21/alsa-kernel/pci/echoaudio__orig/mia.c 2009-08-28 13:41:39.000000000 +0200 +++ alsa-driver-1.0.21/alsa-kernel/pci/echoaudio/mia.c 2009-09-29 22:19:31.000000000 +0200 @@ -29,6 +29,7 @@ #define ECHOCARD_HAS_ADAT FALSE #define ECHOCARD_HAS_STEREO_BIG_ENDIAN32 #define ECHOCARD_HAS_MIDI +#define ECHOCARD_HAS_LINE_OUT_GAIN
/* Pipe indexes */ #define PX_ANALOG_OUT 0 /* 8 */
At Tue, 29 Sep 2009 23:39:17 +0200, Giuliano Pochini wrote:
On Tue, 29 Sep 2009 22:21:28 +0200 Giuliano Pochini pochini@shiny.it wrote:
Same patch with style changes to make checkpatch.pl happy.
Re-enable the line-out control for the Mia card.
Signed-off-by: Giuliano Pochini pochini@shiny.it
Thanks, applied now.
Takashi
diff -u alsa-driver-1.0.21/alsa-kernel/pci/echoaudio__orig/echoaudio.c alsa-driver-1.0.21/alsa-kernel/pci/echoaudio/echoaudio.c --- alsa-driver-1.0.21/alsa-kernel/pci/echoaudio__orig/echoaudio.c 2009-08-28 13:41:39.000000000 +0200 +++ alsa-driver-1.0.21/alsa-kernel/pci/echoaudio/echoaudio.c 2009-09-29 23:00:56.000000000 +0200 @@ -950,7 +950,7 @@ 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 @@ 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 @@ .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 @@ 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) diff -u alsa-driver-1.0.21/alsa-kernel/pci/echoaudio__orig/mia.c alsa-driver-1.0.21/alsa-kernel/pci/echoaudio/mia.c --- alsa-driver-1.0.21/alsa-kernel/pci/echoaudio__orig/mia.c 2009-08-28 13:41:39.000000000 +0200 +++ alsa-driver-1.0.21/alsa-kernel/pci/echoaudio/mia.c 2009-09-29 22:19:31.000000000 +0200 @@ -29,6 +29,7 @@ #define ECHOCARD_HAS_ADAT FALSE #define ECHOCARD_HAS_STEREO_BIG_ENDIAN32 #define ECHOCARD_HAS_MIDI +#define ECHOCARD_HAS_LINE_OUT_GAIN
/* Pipe indexes */ #define PX_ANALOG_OUT 0 /* 8 */
-- Giuliano. _______________________________________________ Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
participants (2)
-
Giuliano Pochini
-
Takashi Iwai