Make drivers which do *not* adverise AUDIO_PROP_FULLDPLEX return ENXIO
in their open() if full-duplex mode was requested.

This way, sys/dev/audio.c:audio_open() will fail immediately rather than
later through the to-be-removed get_props() check.

utvfu(4) seems to be the only driver that currently supports recording
but not playing, so I just factored it out into its own diff.

Builds fine.
Feedback? Objection? OK?
---
 sys/dev/usb/utvfu.c | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/sys/dev/usb/utvfu.c b/sys/dev/usb/utvfu.c
index 930f2d12568..dc43144adac 100644
--- a/sys/dev/usb/utvfu.c
+++ b/sys/dev/usb/utvfu.c
@@ -795,7 +795,6 @@ int         utvfu_audio_halt_in(void *);
 int            utvfu_audio_mixer_set_port(void *, struct mixer_ctrl *);
 int            utvfu_audio_mixer_get_port(void *, struct mixer_ctrl *);
 int            utvfu_audio_query_devinfo(void *, struct mixer_devinfo *);
-int            utvfu_audio_get_props(void *);
 int            utvfu_audio_trigger_output(void *, void *, void *, int,
                    void (*)(void *), void *, struct audio_params *);
 int            utvfu_audio_trigger_input(void *, void *, void *, int,
@@ -851,7 +850,6 @@ const struct audio_hw_if utvfu_au_hw_if = {
        .set_port = utvfu_audio_mixer_set_port,
        .get_port = utvfu_audio_mixer_get_port,
        .query_devinfo = utvfu_audio_query_devinfo,
-       .get_props = utvfu_audio_get_props,
        .trigger_output = utvfu_audio_trigger_output,
        .trigger_input = utvfu_audio_trigger_input,
 };
@@ -1859,6 +1857,9 @@ utvfu_audio_open(void *v, int flags)
        if (usbd_is_dying(sc->sc_udev))
                return (EIO);
 
+       if ((flags & (FWRITE | FREAD)))
+               return (ENXIO);
+
        if ((flags & FWRITE))
                return (ENXIO);
 
@@ -1995,12 +1996,6 @@ utvfu_audio_query_devinfo(void *v, struct mixer_devinfo 
*mi)
        return (0);
 }
 
-int
-utvfu_audio_get_props(void *v)
-{
-       return (0);
-}
-
 int
 utvfu_audio_trigger_output(void *v, void *start, void *end, int blksize,
     void (*intr)(void *), void *arg, struct audio_params *param)
-- 
2.38.1

Reply via email to