Currently, wskbd_set_mixervolume() only adjusts the volume of the first
authoranton <anton@openbsd.org>
Wed, 16 Feb 2022 06:23:42 +0000 (06:23 +0000)
committeranton <anton@openbsd.org>
Wed, 16 Feb 2022 06:23:42 +0000 (06:23 +0000)
commit7d7b0e490bd226ab07e62d86710dae583d063b13
treebb3b25d03c17679fcda2e3fd7d2e00b8b02d03cb
parent2baa08e2d3c5f080938f9e6e6241ed77ae632585
Currently, wskbd_set_mixervolume() only adjusts the volume of the first
attached audio device, i.e. audio0. This approach does not work well
while using additional audio devices equipped with physical volume keys
since those would only affect the volume of audio0.

Instead, correlate audio and ucc devices attached over USB in order to
adjust the volume of the correct audio device. This is done by passing a
cookie from the common point of attachment which is later used to
correlate the audio and wskbd device.

The same approach could be adopted for audio and wskbd devices attaching
on a different bus. Keep in mind that it's of importance to make use of
and increment the same global cookie identifier to avoid collisions.

Makes the volume keys on my Logitech G435 Headset do the right thing.

ok ratchov@
sys/dev/audio.c
sys/dev/usb/uaudio.c
sys/dev/usb/ucc.c
sys/dev/usb/usb_subr.c
sys/dev/usb/usbdi.h
sys/dev/wscons/wskbd.c
sys/dev/wscons/wskbdvar.h