diff options
author | Takashi Iwai <tiwai@suse.de> | 2017-12-19 13:38:23 +0100 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2017-12-19 13:38:23 +0100 |
commit | 56a23ee52611ca76421f3d7cac100e1616716dae (patch) | |
tree | 22d1f1a6e3621161fcb05e4928fca2e9b0eed28b | |
parent | 50947fb04f3a8a5dbc355893c5bf25acaff71e86 (diff) | |
download | linux-56a23ee52611ca76421f3d7cac100e1616716dae.tar.bz2 |
ALSA: usb-audio: Proper fallback at get_term_name()
get_term_name() calls snd_usb_copy_string_desc() for retrieving the
name when a specific ID (name field) is given. When this returns an
error (zero), however, it simply returns as is. This will end up in a
fixed name string in the caller side, which often is meaningless.
For giving a bit more useful name string depending on the terminal
type, change the get_term_name() function to go through the fallback
mode.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r-- | sound/usb/mixer.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c index 2b4ceda36291..9afb8ab524c7 100644 --- a/sound/usb/mixer.c +++ b/sound/usb/mixer.c @@ -656,10 +656,14 @@ static int get_term_name(struct mixer_build *state, struct usb_audio_term *iterm unsigned char *name, int maxlen, int term_only) { struct iterm_name_combo *names; + int len; - if (iterm->name) - return snd_usb_copy_string_desc(state, iterm->name, + if (iterm->name) { + len = snd_usb_copy_string_desc(state, iterm->name, name, maxlen); + if (len) + return len; + } /* virtual type - not a real terminal */ if (iterm->type >> 16) { |