git: 626d9b855302 - stable/14 - snd_uaudio: provide information about the device name and attached driver

From: Christos Margiolis <christos_at_FreeBSD.org>
Date: Tue, 30 Jan 2024 11:08:24 UTC
The branch stable/14 has been updated by christos:

URL: https://cgit.FreeBSD.org/src/commit/?id=626d9b855302ac97809bb429cfe5ae0e4c99c1ac

commit 626d9b855302ac97809bb429cfe5ae0e4c99c1ac
Author:     Christos Margiolis <christos@FreeBSD.org>
AuthorDate: 2024-01-16 16:46:49 +0000
Commit:     Christos Margiolis <christos@FreeBSD.org>
CommitDate: 2024-01-30 11:07:28 +0000

    snd_uaudio: provide information about the device name and attached driver
    
    Unlike the other sound drivers, snd_uaudio(4) doesn't provide
    information about the device's description and the driver it's attached
    to. A side-effect of this is that applications such as mixer(8), that
    fetch these strings through the OSS API's SNDCTL_CARDINFO ioctl will
    show a USB audio device as:
    
    pcm0:mixer: <USB Audio> at ? kld snd_uaudio
    
    This patch replaces the generic "USB Audio" description with the
    device's actual manufacturer and product strings, and the "at ?" string
    with the driver it's attached to:
    
    pcm0:mixer: <Focusrite Scarlett Solo USB> at uaudio0 kld snd_uaudio
    
    Sponsored by:   The FreeBSD Foundation
    MFC after:      2 weeks
    Reviewed by:    markj, emaste
    Differential Revision:  https://reviews.freebsd.org/D43347
    
    (cherry picked from commit 18d87fe4fe3b310796e138855016678453140423)
---
 sys/dev/sound/usb/uaudio.c     | 11 +++++++++--
 sys/dev/sound/usb/uaudio_pcm.c |  1 -
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/sys/dev/sound/usb/uaudio.c b/sys/dev/sound/usb/uaudio.c
index a14cdf805353..3237093bcbfa 100644
--- a/sys/dev/sound/usb/uaudio.c
+++ b/sys/dev/sound/usb/uaudio.c
@@ -1171,7 +1171,7 @@ uaudio_attach_sub(device_t dev, kobj_class_t mixer_class, kobj_class_t chan_clas
 {
 	struct uaudio_softc *sc = device_get_softc(device_get_parent(dev));
 	unsigned i = uaudio_get_child_index_by_dev(sc, dev);
-	char status[SND_STATUSLEN];
+	char status[SND_STATUSLEN], desc[128];
 
 	uaudio_mixer_init(sc, i);
 
@@ -1199,7 +1199,14 @@ uaudio_attach_sub(device_t dev, kobj_class_t mixer_class, kobj_class_t chan_clas
 
 	mixer_hwvol_init(dev);
 
-	snprintf(status, sizeof(status), "at ? %s", PCM_KLDSTRING(snd_uaudio));
+	snprintf(desc, sizeof(desc), "%s %s",
+	    usb_get_manufacturer(sc->sc_udev),
+	    usb_get_product(sc->sc_udev));
+	device_set_desc_copy(dev, desc);
+
+	snprintf(status, sizeof(status), "at %s %s",
+	    device_get_nameunit(device_get_parent(dev)),
+	    PCM_KLDSTRING(snd_uaudio));
 
 	if (pcm_register(dev, sc,
 	    (sc->sc_play_chan[i].num_alt > 0) ? 1 : 0,
diff --git a/sys/dev/sound/usb/uaudio_pcm.c b/sys/dev/sound/usb/uaudio_pcm.c
index 3236e1bd2e5c..bf1f2ebb5e33 100644
--- a/sys/dev/sound/usb/uaudio_pcm.c
+++ b/sys/dev/sound/usb/uaudio_pcm.c
@@ -201,7 +201,6 @@ ua_probe(device_t dev)
 	    (func->func != SCF_PCM)) {
 		return (ENXIO);
 	}
-	device_set_desc(dev, "USB audio");
 
 	return (BUS_PROBE_DEFAULT);
 }