If it's relevant:
Reported-and-tested-by: Niklāvs Koļesņikovs <pinkflames.linux@xxxxxxxxx>
sestd., 2024. g. 16. marts, plkst. 10:37 — lietotājs Takashi Iwai
(<tiwai@xxxxxxx>) rakstīja:
>
> This reverts commit 1601cd53c7e3197181277326dbfc131d20a74e46.
>
> This fix is applied globally to all devices, and it may change the
> existing control names. When the devices are managed with the fixed
> configuration like UCM, such control name mismatch may lead to
> significant regressions.
>
> For avoiding that kind of regression, we would need to apply such
> changes conditionally, but it'd take time to settle down.
> While the original fix is a good thing in general, in order to address
> the regression, let's revert the change for now.
>
> Link: https://bugzilla.kernel.org/show_bug.cgi?id=218605
> Signed-off-by: Takashi Iwai <tiwai@xxxxxxx>
> ---
> sound/usb/mixer.c | 49 ++++++++++++++---------------------------------
> 1 file changed, 14 insertions(+), 35 deletions(-)
>
> diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
> index 81256ab56835..409fc1164694 100644
> --- a/sound/usb/mixer.c
> +++ b/sound/usb/mixer.c
> @@ -1652,34 +1652,6 @@ static const struct usb_feature_control_info *get_feature_control_info(int contr
> return NULL;
> }
>
> -static int feature_unit_mutevol_ctl_name(struct usb_mixer_interface *mixer,
> - struct snd_kcontrol *kctl,
> - struct usb_audio_term *iterm,
> - struct usb_audio_term *oterm)
> -{
> - struct usb_audio_term *aterm, *bterm;
> - bool output_first;
> - int len = 0;
> -
> - /*
> - * If the input terminal is USB Streaming, we try getting the name of
> - * the output terminal first in hopes of getting something more
> - * descriptive than "PCM".
> - */
> - output_first = iterm && !(iterm->type >> 16) && (iterm->type & 0xff00) == 0x0100;
> -
> - aterm = output_first ? oterm : iterm;
> - bterm = output_first ? iterm : oterm;
> -
> - if (aterm)
> - len = get_term_name(mixer->chip, aterm, kctl->id.name,
> - sizeof(kctl->id.name), 1);
> - if (!len && bterm)
> - len = get_term_name(mixer->chip, bterm, kctl->id.name,
> - sizeof(kctl->id.name), 1);
> - return len;
> -}
> -
> static void __build_feature_ctl(struct usb_mixer_interface *mixer,
> const struct usbmix_name_map *imap,
> unsigned int ctl_mask, int control,
> @@ -1761,15 +1733,22 @@ static void __build_feature_ctl(struct usb_mixer_interface *mixer,
> case UAC_FU_MUTE:
> case UAC_FU_VOLUME:
> /*
> - * Determine the control name:
> - * - If a name id is given in descriptor, use it.
> - * - If input and output terminals are present, try to derive
> - * the name from either of these.
> - * - Otherwise, make up a name using the feature unit ID.
> + * determine the control name. the rule is:
> + * - if a name id is given in descriptor, use it.
> + * - if the connected input can be determined, then use the name
> + * of terminal type.
> + * - if the connected output can be determined, use it.
> + * - otherwise, anonymous name.
> */
> if (!len) {
> - len = feature_unit_mutevol_ctl_name(mixer, kctl, iterm,
> - oterm);
> + if (iterm)
> + len = get_term_name(mixer->chip, iterm,
> + kctl->id.name,
> + sizeof(kctl->id.name), 1);
> + if (!len && oterm)
> + len = get_term_name(mixer->chip, oterm,
> + kctl->id.name,
> + sizeof(kctl->id.name), 1);
> if (!len)
> snprintf(kctl->id.name, sizeof(kctl->id.name),
> "Feature %d", unitid);
> --
> 2.43.0
>
[Index of Archives]
[Pulseaudio]
[Linux Audio Users]
[ALSA Devel]
[Fedora Desktop]
[Fedora SELinux]
[Big List of Linux Books]
[Yosemite News]
[KDE Users]