[alsa-devel] [PATCH 1/5] ALSA: snd-usb: don't fail hard if mixer creation fails
Takashi Iwai
tiwai at suse.de
Wed Jul 13 07:29:13 CEST 2011
At Wed, 13 Jul 2011 02:13:25 +0200,
Daniel Mack wrote:
>
> There are cards that the mixer code fails to create controls for, and
> currently, the whole sound device creation fails in such cases. This
> patch changes the code so that it just spits out warnings and continues
> looking at other functions of the descriptor set which might work just
> fine.
It depends. If a serious error like -ENOMEM, we should abort
immediately. It means something is really bad.
> The worst thing that can happen now is that people see soundcards that
> don't have all funcions supported, but rejecting the whole device is
> not any better.
Then it'd be better to check some "easy" errors to be ignored (or
check serious errors to abort). I don't like ignoring all errors
blindly.
thanks,
Takashi
>
> Signed-off-by: Daniel Mack <zonque at gmail.com>
> ---
> sound/usb/card.c | 5 ++---
> sound/usb/mixer.c | 9 ++++++---
> 2 files changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/sound/usb/card.c b/sound/usb/card.c
> index 220c616..8990b49 100644
> --- a/sound/usb/card.c
> +++ b/sound/usb/card.c
> @@ -512,9 +512,8 @@ static void *snd_usb_audio_probe(struct usb_device *dev,
> if (err > 0) {
> /* create normal USB audio interfaces */
> if (snd_usb_create_streams(chip, ifnum) < 0 ||
> - snd_usb_create_mixer(chip, ifnum, ignore_ctl_error) < 0) {
> - goto __error;
> - }
> + snd_usb_create_mixer(chip, ifnum, ignore_ctl_error) < 0)
> + snd_printk(KERN_WARNING "snd_usb_create_mixer() failed\n");
> }
>
> /* we are allowed to call snd_card_register() many times */
> diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
> index c22fa76..c43dbea 100644
> --- a/sound/usb/mixer.c
> +++ b/sound/usb/mixer.c
> @@ -1967,7 +1967,8 @@ static int snd_usb_mixer_controls(struct usb_mixer_interface *mixer)
> state.oterm.name = desc->iTerminal;
> err = parse_audio_unit(&state, desc->bSourceID);
> if (err < 0)
> - return err;
> + snd_printk(KERN_WARNING "Unable to parse terminal with bSourceID %d\n",
> + desc->bSourceID);
> } else { /* UAC_VERSION_2 */
> struct uac2_output_terminal_descriptor *desc = p;
>
> @@ -1979,12 +1980,14 @@ static int snd_usb_mixer_controls(struct usb_mixer_interface *mixer)
> state.oterm.name = desc->iTerminal;
> err = parse_audio_unit(&state, desc->bSourceID);
> if (err < 0)
> - return err;
> + snd_printk(KERN_WARNING "Unable to parse terminal with bSourceID %d\n",
> + desc->bSourceID);
>
> /* for UAC2, use the same approach to also add the clock selectors */
> err = parse_audio_unit(&state, desc->bCSourceID);
> if (err < 0)
> - return err;
> + snd_printk(KERN_WARNING "Unable to parse clock terminal with bCSourceID %d\n",
> + desc->bCSourceID);
> }
> }
>
> --
> 1.7.5.4
>
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>
More information about the Alsa-devel
mailing list