On 11/25/24 1:25 AM, Takashi Iwai wrote: > On Sun, 24 Nov 2024 21:32:41 +0100, > Terry Junge wrote: >> >> Many Poly/Plantronics headset families name the feature, input, >> and/or output units in a such a way to produce control names >> that are not recognized by user space. As such, the volume and >> mute events do not get routed to the headset's audio controls. >> >> As an example from a product family: >> >> The microphone mute control is named >> Headset Microphone Capture Switch >> and the headset volume control is named >> Headset Earphone Playback Volume >> >> The quirk fixes these to become >> Headset Capture Switch >> Headset Playback Volume >> >> Signed-off-by: Terry Junge <linuxhid@xxxxxxxxxxxxxxxxxxxxxx> > > Thanks, this description looks much more understandable now. > Meanwhile... > >> --- >> sound/usb/mixer_quirks.c | 35 +++++++++++++++++++++++++++++++++++ >> 1 file changed, 35 insertions(+) >> >> diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c >> index 8bbf070b3676..20d63efd5498 100644 >> --- a/sound/usb/mixer_quirks.c >> +++ b/sound/usb/mixer_quirks.c >> @@ -4215,6 +4215,37 @@ static void snd_dragonfly_quirk_db_scale(struct usb_mixer_interface *mixer, >> } >> } >> >> +static void snd_fix_plt_control_name(struct snd_kcontrol *kctl) >> +{ >> + static const char * const names_to_remove[] = { >> + "Earphone", >> + "Microphone", >> + "Receive", >> + "Transmit", >> + NULL >> + }; >> + const char * const *n2r; >> + char *dst, *src; >> + size_t len; >> + >> + for (n2r = names_to_remove; *n2r; ++n2r) { >> + dst = strstr(kctl->id.name, *n2r); >> + if (dst) { >> + src = dst + strlen(*n2r); >> + len = strlen(src) + 1; >> + if ((char *)kctl->id.name != dst && *(dst - 1) == ' ') >> + --dst; >> + memmove(dst, src, len); >> + } >> + } >> + if (kctl->id.name[0] == ' ') { >> + char rcat[sizeof(kctl->id.name)] = { "Headset" }; >> + >> + strlcat(rcat, kctl->id.name, sizeof(rcat)); >> + strscpy(kctl->id.name, rcat, sizeof(kctl->id.name)); >> + } >> +} > > ... the code itself isn't really trivial (due to the poor string > handling by nature of C language), so it's better to put some brief > comment what this function really does, too. Thanks Takashi, I'll comment the function in v2 and send it out. > > > thanks, > > Takashi