summaryrefslogtreecommitdiff
path: root/sys/dev/usb
diff options
context:
space:
mode:
authorjmcneill <jmcneill@NetBSD.org>2008-09-20 15:55:38 +0000
committerjmcneill <jmcneill@NetBSD.org>2008-09-20 15:55:38 +0000
commit205dac9d2cd80f2682ebbfc9269d008c78a30a0b (patch)
tree09e7d5c788a2b8bda2f5d6a70922b456e12cbca7 /sys/dev/usb
parentf2865b8252199da95289a33f7827ac6d3105c473 (diff)
Use probe/GET_MAX to determine wCompQuality value during negotiation
Diffstat (limited to 'sys/dev/usb')
-rw-r--r--sys/dev/usb/uvideo.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/sys/dev/usb/uvideo.c b/sys/dev/usb/uvideo.c
index 9eeee964756..6803ae805f5 100644
--- a/sys/dev/usb/uvideo.c
+++ b/sys/dev/usb/uvideo.c
@@ -1,4 +1,4 @@
-/* $NetBSD: uvideo.c,v 1.13 2008/09/20 14:01:27 jmcneill Exp $ */
+/* $NetBSD: uvideo.c,v 1.14 2008/09/20 15:55:38 jmcneill Exp $ */
/*
* Copyright (c) 2008 Patrick Mahoney
@@ -42,7 +42,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvideo.c,v 1.13 2008/09/20 14:01:27 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvideo.c,v 1.14 2008/09/20 15:55:38 jmcneill Exp $");
#ifdef _MODULE
#include <sys/module.h>
@@ -1808,7 +1808,7 @@ uvideo_set_format(void *addr, struct video_format *format)
struct uvideo_softc *sc;
struct uvideo_stream *vs;
struct uvideo_format *uvfmt;
- uvideo_probe_and_commit_data_t probe;
+ uvideo_probe_and_commit_data_t probe, maxprobe;
uint8_t ifaceno;
usbd_status err;
@@ -1835,6 +1835,15 @@ uvideo_set_format(void *addr, struct video_format *format)
probe.bFrameIndex = UVIDEO_FORMAT_GET_FRAME_INDEX(uvfmt);
USETDW(probe.dwFrameInterval, vs->vs_frame_interval); /* XXX */
+ maxprobe = probe;
+ err = uvideo_stream_probe(vs, UR_GET_MAX, &maxprobe);
+ if (err) {
+ DPRINTF(("uvideo: error probe/GET_MAX: %s (%d)\n",
+ usbd_errstr(err), err));
+ } else {
+ USETW(probe.wCompQuality, UGETW(maxprobe.wCompQuality));
+ }
+
err = uvideo_stream_probe(vs, UR_SET_CUR, &probe);
if (err) {
DPRINTF(("uvideo: error commit/SET_CUR: %s (%d)\n",