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
[Index of Archives]
[Pulseaudio]
[Linux Audio Users]
[ALSA Devel]
[Fedora Desktop]
[Fedora SELinux]
[Big List of Linux Books]
[Yosemite News]
[KDE Users]