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