uvc_video.c 35.6 KB
Newer Older
1 2 3
/*
 *      uvc_video.c  --  USB Video Class driver - Video handling
 *
4 5
 *      Copyright (C) 2005-2010
 *          Laurent Pinchart (laurent.pinchart@ideasonboard.com)
6 7 8 9 10 11 12 13 14 15 16
 *
 *      This program is free software; you can redistribute it and/or modify
 *      it under the terms of the GNU General Public License as published by
 *      the Free Software Foundation; either version 2 of the License, or
 *      (at your option) any later version.
 *
 */

#include <linux/kernel.h>
#include <linux/list.h>
#include <linux/module.h>
17
#include <linux/slab.h>
18 19 20 21
#include <linux/usb.h>
#include <linux/videodev2.h>
#include <linux/vmalloc.h>
#include <linux/wait.h>
A
Arun Sharma 已提交
22
#include <linux/atomic.h>
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
#include <asm/unaligned.h>

#include <media/v4l2-common.h>

#include "uvcvideo.h"

/* ------------------------------------------------------------------------
 * UVC Controls
 */

static int __uvc_query_ctrl(struct uvc_device *dev, __u8 query, __u8 unit,
			__u8 intfnum, __u8 cs, void *data, __u16 size,
			int timeout)
{
	__u8 type = USB_TYPE_CLASS | USB_RECIP_INTERFACE;
	unsigned int pipe;

	pipe = (query & 0x80) ? usb_rcvctrlpipe(dev->udev, 0)
			      : usb_sndctrlpipe(dev->udev, 0);
	type |= (query & 0x80) ? USB_DIR_IN : USB_DIR_OUT;

44
	return usb_control_msg(dev->udev, pipe, query, type, cs << 8,
45
			unit << 8 | intfnum, data, size, timeout);
46 47
}

48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
static const char *uvc_query_name(__u8 query)
{
	switch (query) {
	case UVC_SET_CUR:
		return "SET_CUR";
	case UVC_GET_CUR:
		return "GET_CUR";
	case UVC_GET_MIN:
		return "GET_MIN";
	case UVC_GET_MAX:
		return "GET_MAX";
	case UVC_GET_RES:
		return "GET_RES";
	case UVC_GET_LEN:
		return "GET_LEN";
	case UVC_GET_INFO:
		return "GET_INFO";
	case UVC_GET_DEF:
		return "GET_DEF";
	default:
		return "<invalid>";
	}
}

72 73 74 75
int uvc_query_ctrl(struct uvc_device *dev, __u8 query, __u8 unit,
			__u8 intfnum, __u8 cs, void *data, __u16 size)
{
	int ret;
76

77 78
	ret = __uvc_query_ctrl(dev, query, unit, intfnum, cs, data, size,
				UVC_CTRL_CONTROL_TIMEOUT);
79
	if (ret != size) {
80 81 82
		uvc_printk(KERN_ERR, "Failed to query (%s) UVC control %u on "
			"unit %u: %d (exp. %u).\n", uvc_query_name(query), cs,
			unit, ret, size);
83 84 85 86 87 88
		return -EIO;
	}

	return 0;
}

89
static void uvc_fixup_video_ctrl(struct uvc_streaming *stream,
90 91
	struct uvc_streaming_control *ctrl)
{
92
	struct uvc_format *format = NULL;
93 94
	struct uvc_frame *frame = NULL;
	unsigned int i;
95

96 97 98 99 100 101
	for (i = 0; i < stream->nformats; ++i) {
		if (stream->format[i].index == ctrl->bFormatIndex) {
			format = &stream->format[i];
			break;
		}
	}
102

103 104
	if (format == NULL)
		return;
105

106 107 108 109 110 111
	for (i = 0; i < format->nframes; ++i) {
		if (format->frame[i].bFrameIndex == ctrl->bFrameIndex) {
			frame = &format->frame[i];
			break;
		}
	}
112

113 114
	if (frame == NULL)
		return;
115 116 117

	if (!(format->flags & UVC_FMT_FLAG_COMPRESSED) ||
	     (ctrl->dwMaxVideoFrameSize == 0 &&
118
	      stream->dev->uvc_version < 0x0110))
119 120
		ctrl->dwMaxVideoFrameSize =
			frame->dwMaxVideoFrameBufferSize;
121

122 123
	if (!(format->flags & UVC_FMT_FLAG_COMPRESSED) &&
	    stream->dev->quirks & UVC_QUIRK_FIX_BANDWIDTH &&
124
	    stream->intf->num_altsetting > 1) {
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
		u32 interval;
		u32 bandwidth;

		interval = (ctrl->dwFrameInterval > 100000)
			 ? ctrl->dwFrameInterval
			 : frame->dwFrameInterval[0];

		/* Compute a bandwidth estimation by multiplying the frame
		 * size by the number of video frames per second, divide the
		 * result by the number of USB frames (or micro-frames for
		 * high-speed devices) per second and add the UVC header size
		 * (assumed to be 12 bytes long).
		 */
		bandwidth = frame->wWidth * frame->wHeight / 8 * format->bpp;
		bandwidth *= 10000000 / interval + 1;
		bandwidth /= 1000;
141
		if (stream->dev->udev->speed == USB_SPEED_HIGH)
142 143 144
			bandwidth /= 8;
		bandwidth += 12;

145 146 147 148 149 150 151 152 153
		/* The bandwidth estimate is too low for many cameras. Don't use
		 * maximum packet sizes lower than 1024 bytes to try and work
		 * around the problem. According to measurements done on two
		 * different camera models, the value is high enough to get most
		 * resolutions working while not preventing two simultaneous
		 * VGA streams at 15 fps.
		 */
		bandwidth = max_t(u32, bandwidth, 1024);

154 155
		ctrl->dwMaxPayloadTransferSize = bandwidth;
	}
156 157
}

158
static int uvc_get_video_ctrl(struct uvc_streaming *stream,
159 160
	struct uvc_streaming_control *ctrl, int probe, __u8 query)
{
161 162
	__u8 *data;
	__u16 size;
163 164
	int ret;

165
	size = stream->dev->uvc_version >= 0x0110 ? 34 : 26;
166 167 168 169
	if ((stream->dev->quirks & UVC_QUIRK_PROBE_DEF) &&
			query == UVC_GET_DEF)
		return -EIO;

170 171 172 173
	data = kmalloc(size, GFP_KERNEL);
	if (data == NULL)
		return -ENOMEM;

174
	ret = __uvc_query_ctrl(stream->dev, query, 0, stream->intfnum,
175
		probe ? UVC_VS_PROBE_CONTROL : UVC_VS_COMMIT_CONTROL, data,
176
		size, uvc_timeout_param);
177

178
	if ((query == UVC_GET_MIN || query == UVC_GET_MAX) && ret == 2) {
179 180 181 182
		/* Some cameras, mostly based on Bison Electronics chipsets,
		 * answer a GET_MIN or GET_MAX request with the wCompQuality
		 * field only.
		 */
183
		uvc_warn_once(stream->dev, UVC_WARN_MINMAX, "UVC non "
184 185
			"compliance - GET_MIN/MAX(PROBE) incorrectly "
			"supported. Enabling workaround.\n");
186
		memset(ctrl, 0, sizeof *ctrl);
187 188
		ctrl->wCompQuality = le16_to_cpup((__le16 *)data);
		ret = 0;
189
		goto out;
190
	} else if (query == UVC_GET_DEF && probe == 1 && ret != size) {
191 192 193 194
		/* Many cameras don't support the GET_DEF request on their
		 * video probe control. Warn once and return, the caller will
		 * fall back to GET_CUR.
		 */
195
		uvc_warn_once(stream->dev, UVC_WARN_PROBE_DEF, "UVC non "
196 197 198 199 200 201 202 203 204 205 206
			"compliance - GET_DEF(PROBE) not supported. "
			"Enabling workaround.\n");
		ret = -EIO;
		goto out;
	} else if (ret != size) {
		uvc_printk(KERN_ERR, "Failed to query (%u) UVC %s control : "
			"%d (exp. %u).\n", query, probe ? "probe" : "commit",
			ret, size);
		ret = -EIO;
		goto out;
	}
207 208 209 210 211 212 213 214 215 216

	ctrl->bmHint = le16_to_cpup((__le16 *)&data[0]);
	ctrl->bFormatIndex = data[2];
	ctrl->bFrameIndex = data[3];
	ctrl->dwFrameInterval = le32_to_cpup((__le32 *)&data[4]);
	ctrl->wKeyFrameRate = le16_to_cpup((__le16 *)&data[8]);
	ctrl->wPFrameRate = le16_to_cpup((__le16 *)&data[10]);
	ctrl->wCompQuality = le16_to_cpup((__le16 *)&data[12]);
	ctrl->wCompWindowSize = le16_to_cpup((__le16 *)&data[14]);
	ctrl->wDelay = le16_to_cpup((__le16 *)&data[16]);
217 218
	ctrl->dwMaxVideoFrameSize = get_unaligned_le32(&data[18]);
	ctrl->dwMaxPayloadTransferSize = get_unaligned_le32(&data[22]);
219 220

	if (size == 34) {
221
		ctrl->dwClockFrequency = get_unaligned_le32(&data[26]);
222 223 224 225 226
		ctrl->bmFramingInfo = data[30];
		ctrl->bPreferedVersion = data[31];
		ctrl->bMinVersion = data[32];
		ctrl->bMaxVersion = data[33];
	} else {
227
		ctrl->dwClockFrequency = stream->dev->clock_frequency;
228 229 230 231 232 233
		ctrl->bmFramingInfo = 0;
		ctrl->bPreferedVersion = 0;
		ctrl->bMinVersion = 0;
		ctrl->bMaxVersion = 0;
	}

234 235 236
	/* Some broken devices return null or wrong dwMaxVideoFrameSize and
	 * dwMaxPayloadTransferSize fields. Try to get the value from the
	 * format and frame descriptors.
237
	 */
238
	uvc_fixup_video_ctrl(stream, ctrl);
239
	ret = 0;
240

241 242 243
out:
	kfree(data);
	return ret;
244 245
}

246
static int uvc_set_video_ctrl(struct uvc_streaming *stream,
247 248
	struct uvc_streaming_control *ctrl, int probe)
{
249 250 251
	__u8 *data;
	__u16 size;
	int ret;
252

253
	size = stream->dev->uvc_version >= 0x0110 ? 34 : 26;
254 255 256
	data = kzalloc(size, GFP_KERNEL);
	if (data == NULL)
		return -ENOMEM;
257 258 259 260 261 262 263 264 265 266

	*(__le16 *)&data[0] = cpu_to_le16(ctrl->bmHint);
	data[2] = ctrl->bFormatIndex;
	data[3] = ctrl->bFrameIndex;
	*(__le32 *)&data[4] = cpu_to_le32(ctrl->dwFrameInterval);
	*(__le16 *)&data[8] = cpu_to_le16(ctrl->wKeyFrameRate);
	*(__le16 *)&data[10] = cpu_to_le16(ctrl->wPFrameRate);
	*(__le16 *)&data[12] = cpu_to_le16(ctrl->wCompQuality);
	*(__le16 *)&data[14] = cpu_to_le16(ctrl->wCompWindowSize);
	*(__le16 *)&data[16] = cpu_to_le16(ctrl->wDelay);
267 268
	put_unaligned_le32(ctrl->dwMaxVideoFrameSize, &data[18]);
	put_unaligned_le32(ctrl->dwMaxPayloadTransferSize, &data[22]);
269 270

	if (size == 34) {
271
		put_unaligned_le32(ctrl->dwClockFrequency, &data[26]);
272 273 274 275 276 277
		data[30] = ctrl->bmFramingInfo;
		data[31] = ctrl->bPreferedVersion;
		data[32] = ctrl->bMinVersion;
		data[33] = ctrl->bMaxVersion;
	}

278
	ret = __uvc_query_ctrl(stream->dev, UVC_SET_CUR, 0, stream->intfnum,
279
		probe ? UVC_VS_PROBE_CONTROL : UVC_VS_COMMIT_CONTROL, data,
280
		size, uvc_timeout_param);
281 282 283 284 285 286
	if (ret != size) {
		uvc_printk(KERN_ERR, "Failed to set UVC %s control : "
			"%d (exp. %u).\n", probe ? "probe" : "commit",
			ret, size);
		ret = -EIO;
	}
287 288 289

	kfree(data);
	return ret;
290 291
}

292
int uvc_probe_video(struct uvc_streaming *stream,
293 294 295 296 297 298 299 300 301 302 303 304 305 306
	struct uvc_streaming_control *probe)
{
	struct uvc_streaming_control probe_min, probe_max;
	__u16 bandwidth;
	unsigned int i;
	int ret;

	/* Perform probing. The device should adjust the requested values
	 * according to its capabilities. However, some devices, namely the
	 * first generation UVC Logitech webcams, don't implement the Video
	 * Probe control properly, and just return the needed bandwidth. For
	 * that reason, if the needed bandwidth exceeds the maximum available
	 * bandwidth, try to lower the quality.
	 */
307 308
	ret = uvc_set_video_ctrl(stream, probe, 1);
	if (ret < 0)
309 310 311
		goto done;

	/* Get the minimum and maximum values for compression settings. */
312 313
	if (!(stream->dev->quirks & UVC_QUIRK_PROBE_MINMAX)) {
		ret = uvc_get_video_ctrl(stream, &probe_min, 1, UVC_GET_MIN);
314 315
		if (ret < 0)
			goto done;
316
		ret = uvc_get_video_ctrl(stream, &probe_max, 1, UVC_GET_MAX);
317 318 319 320 321 322 323
		if (ret < 0)
			goto done;

		probe->wCompQuality = probe_max.wCompQuality;
	}

	for (i = 0; i < 2; ++i) {
324
		ret = uvc_set_video_ctrl(stream, probe, 1);
325 326
		if (ret < 0)
			goto done;
327
		ret = uvc_get_video_ctrl(stream, probe, 1, UVC_GET_CUR);
328
		if (ret < 0)
329 330
			goto done;

331
		if (stream->intf->num_altsetting == 1)
332 333 334
			break;

		bandwidth = probe->dwMaxPayloadTransferSize;
335
		if (bandwidth <= stream->maxpsize)
336 337
			break;

338
		if (stream->dev->quirks & UVC_QUIRK_PROBE_MINMAX) {
339 340 341 342 343 344 345 346 347 348 349 350 351 352 353
			ret = -ENOSPC;
			goto done;
		}

		/* TODO: negotiate compression parameters */
		probe->wKeyFrameRate = probe_min.wKeyFrameRate;
		probe->wPFrameRate = probe_min.wPFrameRate;
		probe->wCompQuality = probe_max.wCompQuality;
		probe->wCompWindowSize = probe_min.wCompWindowSize;
	}

done:
	return ret;
}

354
int uvc_commit_video(struct uvc_streaming *stream,
355 356
	struct uvc_streaming_control *probe)
{
357
	return uvc_set_video_ctrl(stream, probe, 0);
358 359
}

360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396
/* ------------------------------------------------------------------------
 * Video codecs
 */

/* Values for bmHeaderInfo (Video and Still Image Payload Headers, 2.4.3.3) */
#define UVC_STREAM_EOH	(1 << 7)
#define UVC_STREAM_ERR	(1 << 6)
#define UVC_STREAM_STI	(1 << 5)
#define UVC_STREAM_RES	(1 << 4)
#define UVC_STREAM_SCR	(1 << 3)
#define UVC_STREAM_PTS	(1 << 2)
#define UVC_STREAM_EOF	(1 << 1)
#define UVC_STREAM_FID	(1 << 0)

/* Video payload decoding is handled by uvc_video_decode_start(),
 * uvc_video_decode_data() and uvc_video_decode_end().
 *
 * uvc_video_decode_start is called with URB data at the start of a bulk or
 * isochronous payload. It processes header data and returns the header size
 * in bytes if successful. If an error occurs, it returns a negative error
 * code. The following error codes have special meanings.
 *
 * - EAGAIN informs the caller that the current video buffer should be marked
 *   as done, and that the function should be called again with the same data
 *   and a new video buffer. This is used when end of frame conditions can be
 *   reliably detected at the beginning of the next frame only.
 *
 * If an error other than -EAGAIN is returned, the caller will drop the current
 * payload. No call to uvc_video_decode_data and uvc_video_decode_end will be
 * made until the next payload. -ENODATA can be used to drop the current
 * payload if no other error code is appropriate.
 *
 * uvc_video_decode_data is called for every URB with URB data. It copies the
 * data to the video buffer.
 *
 * uvc_video_decode_end is called with header data at the end of a bulk or
 * isochronous payload. It performs any additional header data processing and
L
Lucas De Marchi 已提交
397
 * returns 0 or a negative error code if an error occurred. As header data have
398 399 400
 * already been processed by uvc_video_decode_start, this functions isn't
 * required to perform sanity checks a second time.
 *
L
Lucas De Marchi 已提交
401
 * For isochronous transfers where a payload is always transferred in a single
402 403 404 405 406 407 408
 * URB, the three functions will be called in a row.
 *
 * To let the decoder process header data and update its internal state even
 * when no video buffer is available, uvc_video_decode_start must be prepared
 * to be called with a NULL buf parameter. uvc_video_decode_data and
 * uvc_video_decode_end will never be called with a NULL buffer.
 */
409
static int uvc_video_decode_start(struct uvc_streaming *stream,
410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430
		struct uvc_buffer *buf, const __u8 *data, int len)
{
	__u8 fid;

	/* Sanity checks:
	 * - packet must be at least 2 bytes long
	 * - bHeaderLength value must be at least 2 bytes (see above)
	 * - bHeaderLength value can't be larger than the packet size.
	 */
	if (len < 2 || data[0] < 2 || data[0] > len)
		return -EINVAL;

	/* Skip payloads marked with the error bit ("error frames"). */
	if (data[1] & UVC_STREAM_ERR) {
		uvc_trace(UVC_TRACE_FRAME, "Dropping payload (error bit "
			  "set).\n");
		return -ENODATA;
	}

	fid = data[1] & UVC_STREAM_FID;

431 432 433 434 435 436
	/* Increase the sequence number regardless of any buffer states, so
	 * that discontinuous sequence numbers always indicate lost frames.
	 */
	if (stream->last_fid != fid)
		stream->sequence++;

437 438 439 440
	/* Store the payload FID bit and return immediately when the buffer is
	 * NULL.
	 */
	if (buf == NULL) {
441
		stream->last_fid = fid;
442 443 444 445 446
		return -ENODATA;
	}

	/* Synchronize to the input stream by waiting for the FID bit to be
	 * toggled when the the buffer state is not UVC_BUF_STATE_ACTIVE.
447
	 * stream->last_fid is initialized to -1, so the first isochronous
448 449
	 * frame will always be in sync.
	 *
450
	 * If the device doesn't toggle the FID bit, invert stream->last_fid
451 452 453
	 * when the EOF bit is set to force synchronisation on the next packet.
	 */
	if (buf->state != UVC_BUF_STATE_ACTIVE) {
454 455
		struct timespec ts;

456
		if (fid == stream->last_fid) {
457 458
			uvc_trace(UVC_TRACE_FRAME, "Dropping payload (out of "
				"sync).\n");
459
			if ((stream->dev->quirks & UVC_QUIRK_STREAM_NO_FID) &&
460
			    (data[1] & UVC_STREAM_EOF))
461
				stream->last_fid ^= UVC_STREAM_FID;
462 463 464
			return -ENODATA;
		}

465 466 467 468 469
		if (uvc_clock_param == CLOCK_MONOTONIC)
			ktime_get_ts(&ts);
		else
			ktime_get_real_ts(&ts);

470
		buf->buf.sequence = stream->sequence;
471 472 473
		buf->buf.timestamp.tv_sec = ts.tv_sec;
		buf->buf.timestamp.tv_usec = ts.tv_nsec / NSEC_PER_USEC;

474 475 476 477 478 479 480 481 482 483 484
		/* TODO: Handle PTS and SCR. */
		buf->state = UVC_BUF_STATE_ACTIVE;
	}

	/* Mark the buffer as done if we're at the beginning of a new frame.
	 * End of frame detection is better implemented by checking the EOF
	 * bit (FID bit toggling is delayed by one frame compared to the EOF
	 * bit), but some devices don't set the bit at end of frame (and the
	 * last payload can be lost anyway). We thus must check if the FID has
	 * been toggled.
	 *
485
	 * stream->last_fid is initialized to -1, so the first isochronous
486 487 488 489
	 * frame will never trigger an end of frame detection.
	 *
	 * Empty buffers (bytesused == 0) don't trigger end of frame detection
	 * as it doesn't make sense to return an empty buffer. This also
490
	 * avoids detecting end of frame conditions at FID toggling if the
491 492
	 * previous payload had the EOF bit set.
	 */
493
	if (fid != stream->last_fid && buf->buf.bytesused != 0) {
494 495
		uvc_trace(UVC_TRACE_FRAME, "Frame complete (FID bit "
				"toggled).\n");
496
		buf->state = UVC_BUF_STATE_READY;
497 498 499
		return -EAGAIN;
	}

500
	stream->last_fid = fid;
501 502 503 504

	return data[0];
}

505
static void uvc_video_decode_data(struct uvc_streaming *stream,
506 507
		struct uvc_buffer *buf, const __u8 *data, int len)
{
508
	struct uvc_video_queue *queue = &stream->queue;
509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524
	unsigned int maxlen, nbytes;
	void *mem;

	if (len <= 0)
		return;

	/* Copy the video data to the buffer. */
	maxlen = buf->buf.length - buf->buf.bytesused;
	mem = queue->mem + buf->buf.m.offset + buf->buf.bytesused;
	nbytes = min((unsigned int)len, maxlen);
	memcpy(mem, data, nbytes);
	buf->buf.bytesused += nbytes;

	/* Complete the current frame if the buffer size was exceeded. */
	if (len > maxlen) {
		uvc_trace(UVC_TRACE_FRAME, "Frame complete (overflow).\n");
525
		buf->state = UVC_BUF_STATE_READY;
526 527 528
	}
}

529
static void uvc_video_decode_end(struct uvc_streaming *stream,
530 531 532 533 534 535 536
		struct uvc_buffer *buf, const __u8 *data, int len)
{
	/* Mark the buffer as done if the EOF marker is set. */
	if (data[1] & UVC_STREAM_EOF && buf->buf.bytesused != 0) {
		uvc_trace(UVC_TRACE_FRAME, "Frame complete (EOF found).\n");
		if (data[0] == len)
			uvc_trace(UVC_TRACE_FRAME, "EOF in empty payload.\n");
537
		buf->state = UVC_BUF_STATE_READY;
538 539
		if (stream->dev->quirks & UVC_QUIRK_STREAM_NO_FID)
			stream->last_fid ^= UVC_STREAM_FID;
540 541 542
	}
}

543 544 545 546 547 548 549 550 551 552 553
/* Video payload encoding is handled by uvc_video_encode_header() and
 * uvc_video_encode_data(). Only bulk transfers are currently supported.
 *
 * uvc_video_encode_header is called at the start of a payload. It adds header
 * data to the transfer buffer and returns the header size. As the only known
 * UVC output device transfers a whole frame in a single payload, the EOF bit
 * is always set in the header.
 *
 * uvc_video_encode_data is called for every URB and copies the data from the
 * video buffer to the transfer buffer.
 */
554
static int uvc_video_encode_header(struct uvc_streaming *stream,
555 556 557 558
		struct uvc_buffer *buf, __u8 *data, int len)
{
	data[0] = 2;	/* Header length */
	data[1] = UVC_STREAM_EOH | UVC_STREAM_EOF
559
		| (stream->last_fid & UVC_STREAM_FID);
560 561 562
	return 2;
}

563
static int uvc_video_encode_data(struct uvc_streaming *stream,
564 565
		struct uvc_buffer *buf, __u8 *data, int len)
{
566
	struct uvc_video_queue *queue = &stream->queue;
567 568 569 570 571 572
	unsigned int nbytes;
	void *mem;

	/* Copy video data to the URB buffer. */
	mem = queue->mem + buf->buf.m.offset + queue->buf_used;
	nbytes = min((unsigned int)len, buf->buf.bytesused - queue->buf_used);
573
	nbytes = min(stream->bulk.max_payload_size - stream->bulk.payload_size,
574 575 576 577 578 579 580 581
			nbytes);
	memcpy(data, mem, nbytes);

	queue->buf_used += nbytes;

	return nbytes;
}

582 583 584 585 586 587 588
/* ------------------------------------------------------------------------
 * URB handling
 */

/*
 * Completion handler for video URBs.
 */
589 590
static void uvc_video_decode_isoc(struct urb *urb, struct uvc_streaming *stream,
	struct uvc_buffer *buf)
591 592 593 594 595 596 597 598
{
	u8 *mem;
	int ret, i;

	for (i = 0; i < urb->number_of_packets; ++i) {
		if (urb->iso_frame_desc[i].status < 0) {
			uvc_trace(UVC_TRACE_FRAME, "USB isochronous frame "
				"lost (%d).\n", urb->iso_frame_desc[i].status);
599 600 601
			/* Mark the buffer as faulty. */
			if (buf != NULL)
				buf->error = 1;
602 603 604 605 606 607
			continue;
		}

		/* Decode the payload header. */
		mem = urb->transfer_buffer + urb->iso_frame_desc[i].offset;
		do {
608
			ret = uvc_video_decode_start(stream, buf, mem,
609 610
				urb->iso_frame_desc[i].actual_length);
			if (ret == -EAGAIN)
611 612
				buf = uvc_queue_next_buffer(&stream->queue,
							    buf);
613 614 615 616 617 618
		} while (ret == -EAGAIN);

		if (ret < 0)
			continue;

		/* Decode the payload data. */
619
		uvc_video_decode_data(stream, buf, mem + ret,
620 621 622
			urb->iso_frame_desc[i].actual_length - ret);

		/* Process the header again. */
623
		uvc_video_decode_end(stream, buf, mem,
624
			urb->iso_frame_desc[i].actual_length);
625

626 627 628 629 630 631
		if (buf->state == UVC_BUF_STATE_READY) {
			if (buf->buf.length != buf->buf.bytesused &&
			    !(stream->cur_format->flags &
			      UVC_FMT_FLAG_COMPRESSED))
				buf->error = 1;

632
			buf = uvc_queue_next_buffer(&stream->queue, buf);
633
		}
634 635 636
	}
}

637 638
static void uvc_video_decode_bulk(struct urb *urb, struct uvc_streaming *stream,
	struct uvc_buffer *buf)
639 640 641 642
{
	u8 *mem;
	int len, ret;

643 644 645
	if (urb->actual_length == 0)
		return;

646 647
	mem = urb->transfer_buffer;
	len = urb->actual_length;
648
	stream->bulk.payload_size += len;
649 650 651 652

	/* If the URB is the first of its payload, decode and save the
	 * header.
	 */
653
	if (stream->bulk.header_size == 0 && !stream->bulk.skip_payload) {
654
		do {
655
			ret = uvc_video_decode_start(stream, buf, mem, len);
656
			if (ret == -EAGAIN)
657 658
				buf = uvc_queue_next_buffer(&stream->queue,
							    buf);
659 660
		} while (ret == -EAGAIN);

L
Lucas De Marchi 已提交
661
		/* If an error occurred skip the rest of the payload. */
662
		if (ret < 0 || buf == NULL) {
663
			stream->bulk.skip_payload = 1;
664
		} else {
665 666
			memcpy(stream->bulk.header, mem, ret);
			stream->bulk.header_size = ret;
667

668 669 670
			mem += ret;
			len -= ret;
		}
671 672 673 674 675 676 677 678
	}

	/* The buffer queue might have been cancelled while a bulk transfer
	 * was in progress, so we can reach here with buf equal to NULL. Make
	 * sure buf is never dereferenced if NULL.
	 */

	/* Process video data. */
679 680
	if (!stream->bulk.skip_payload && buf != NULL)
		uvc_video_decode_data(stream, buf, mem, len);
681 682 683 684 685

	/* Detect the payload end by a URB smaller than the maximum size (or
	 * a payload size equal to the maximum) and process the header again.
	 */
	if (urb->actual_length < urb->transfer_buffer_length ||
686 687 688 689
	    stream->bulk.payload_size >= stream->bulk.max_payload_size) {
		if (!stream->bulk.skip_payload && buf != NULL) {
			uvc_video_decode_end(stream, buf, stream->bulk.header,
				stream->bulk.payload_size);
690
			if (buf->state == UVC_BUF_STATE_READY)
691 692
				buf = uvc_queue_next_buffer(&stream->queue,
							    buf);
693 694
		}

695 696 697
		stream->bulk.header_size = 0;
		stream->bulk.skip_payload = 0;
		stream->bulk.payload_size = 0;
698 699 700
	}
}

701 702
static void uvc_video_encode_bulk(struct urb *urb, struct uvc_streaming *stream,
	struct uvc_buffer *buf)
703 704
{
	u8 *mem = urb->transfer_buffer;
705
	int len = stream->urb_size, ret;
706 707 708 709 710 711 712

	if (buf == NULL) {
		urb->transfer_buffer_length = 0;
		return;
	}

	/* If the URB is the first of its payload, add the header. */
713 714 715 716
	if (stream->bulk.header_size == 0) {
		ret = uvc_video_encode_header(stream, buf, mem, len);
		stream->bulk.header_size = ret;
		stream->bulk.payload_size += ret;
717 718 719 720 721
		mem += ret;
		len -= ret;
	}

	/* Process video data. */
722
	ret = uvc_video_encode_data(stream, buf, mem, len);
723

724
	stream->bulk.payload_size += ret;
725 726
	len -= ret;

727 728 729 730
	if (buf->buf.bytesused == stream->queue.buf_used ||
	    stream->bulk.payload_size == stream->bulk.max_payload_size) {
		if (buf->buf.bytesused == stream->queue.buf_used) {
			stream->queue.buf_used = 0;
731
			buf->state = UVC_BUF_STATE_READY;
732
			buf->buf.sequence = ++stream->sequence;
733 734
			uvc_queue_next_buffer(&stream->queue, buf);
			stream->last_fid ^= UVC_STREAM_FID;
735 736
		}

737 738
		stream->bulk.header_size = 0;
		stream->bulk.payload_size = 0;
739 740
	}

741
	urb->transfer_buffer_length = stream->urb_size - len;
742 743
}

744 745
static void uvc_video_complete(struct urb *urb)
{
746 747
	struct uvc_streaming *stream = urb->context;
	struct uvc_video_queue *queue = &stream->queue;
748 749 750 751 752 753 754 755 756 757 758 759 760
	struct uvc_buffer *buf = NULL;
	unsigned long flags;
	int ret;

	switch (urb->status) {
	case 0:
		break;

	default:
		uvc_printk(KERN_WARNING, "Non-zero status (%d) in video "
			"completion handler.\n", urb->status);

	case -ENOENT:		/* usb_kill_urb() called. */
761
		if (stream->frozen)
762 763 764 765 766 767 768 769 770 771 772 773 774 775
			return;

	case -ECONNRESET:	/* usb_unlink_urb() called. */
	case -ESHUTDOWN:	/* The endpoint is being disabled. */
		uvc_queue_cancel(queue, urb->status == -ESHUTDOWN);
		return;
	}

	spin_lock_irqsave(&queue->irqlock, flags);
	if (!list_empty(&queue->irqqueue))
		buf = list_first_entry(&queue->irqqueue, struct uvc_buffer,
				       queue);
	spin_unlock_irqrestore(&queue->irqlock, flags);

776
	stream->decode(urb, stream, buf);
777 778 779 780 781 782 783

	if ((ret = usb_submit_urb(urb, GFP_ATOMIC)) < 0) {
		uvc_printk(KERN_ERR, "Failed to resubmit video URB (%d).\n",
			ret);
	}
}

784 785 786
/*
 * Free transfer buffers.
 */
787
static void uvc_free_urb_buffers(struct uvc_streaming *stream)
788 789 790 791
{
	unsigned int i;

	for (i = 0; i < UVC_URBS; ++i) {
792
		if (stream->urb_buffer[i]) {
793
			usb_free_coherent(stream->dev->udev, stream->urb_size,
794 795
				stream->urb_buffer[i], stream->urb_dma[i]);
			stream->urb_buffer[i] = NULL;
796 797 798
		}
	}

799
	stream->urb_size = 0;
800 801 802 803 804 805 806
}

/*
 * Allocate transfer buffers. This function can be called with buffers
 * already allocated when resuming from suspend, in which case it will
 * return without touching the buffers.
 *
807 808 809 810 811
 * Limit the buffer size to UVC_MAX_PACKETS bulk/isochronous packets. If the
 * system is too low on memory try successively smaller numbers of packets
 * until allocation succeeds.
 *
 * Return the number of allocated packets on success or 0 when out of memory.
812
 */
813
static int uvc_alloc_urb_buffers(struct uvc_streaming *stream,
814
	unsigned int size, unsigned int psize, gfp_t gfp_flags)
815
{
816
	unsigned int npackets;
817 818 819
	unsigned int i;

	/* Buffers are already allocated, bail out. */
820 821
	if (stream->urb_size)
		return stream->urb_size / psize;
822

823
	/* Compute the number of packets. Bulk endpoints might transfer UVC
L
Lucas De Marchi 已提交
824
	 * payloads across multiple URBs.
825 826 827 828 829 830 831 832
	 */
	npackets = DIV_ROUND_UP(size, psize);
	if (npackets > UVC_MAX_PACKETS)
		npackets = UVC_MAX_PACKETS;

	/* Retry allocations until one succeed. */
	for (; npackets > 1; npackets /= 2) {
		for (i = 0; i < UVC_URBS; ++i) {
833
			stream->urb_size = psize * npackets;
834
			stream->urb_buffer[i] = usb_alloc_coherent(
835
				stream->dev->udev, stream->urb_size,
836 837 838
				gfp_flags | __GFP_NOWARN, &stream->urb_dma[i]);
			if (!stream->urb_buffer[i]) {
				uvc_free_urb_buffers(stream);
839 840 841 842 843
				break;
			}
		}

		if (i == UVC_URBS) {
844 845 846
			uvc_trace(UVC_TRACE_VIDEO, "Allocated %u URB buffers "
				"of %ux%u bytes each.\n", UVC_URBS, npackets,
				psize);
847
			return npackets;
848 849 850
		}
	}

851 852
	uvc_trace(UVC_TRACE_VIDEO, "Failed to allocate URB buffers (%u bytes "
		"per packet).\n", psize);
853 854 855
	return 0;
}

856 857 858
/*
 * Uninitialize isochronous/bulk URBs and free transfer buffers.
 */
859
static void uvc_uninit_video(struct uvc_streaming *stream, int free_buffers)
860 861 862 863 864
{
	struct urb *urb;
	unsigned int i;

	for (i = 0; i < UVC_URBS; ++i) {
865 866
		urb = stream->urb[i];
		if (urb == NULL)
867 868 869 870
			continue;

		usb_kill_urb(urb);
		usb_free_urb(urb);
871
		stream->urb[i] = NULL;
872
	}
873 874

	if (free_buffers)
875
		uvc_free_urb_buffers(stream);
876 877 878 879 880 881
}

/*
 * Initialize isochronous URBs and allocate transfer buffers. The packet size
 * is given by the endpoint.
 */
882
static int uvc_init_video_isoc(struct uvc_streaming *stream,
883
	struct usb_host_endpoint *ep, gfp_t gfp_flags)
884 885 886
{
	struct urb *urb;
	unsigned int npackets, i, j;
887 888
	u16 psize;
	u32 size;
889 890 891

	psize = le16_to_cpu(ep->desc.wMaxPacketSize);
	psize = (psize & 0x07ff) * (1 + ((psize >> 11) & 3));
892
	size = stream->ctrl.dwMaxVideoFrameSize;
893

894
	npackets = uvc_alloc_urb_buffers(stream, size, psize, gfp_flags);
895 896
	if (npackets == 0)
		return -ENOMEM;
897 898 899 900

	size = npackets * psize;

	for (i = 0; i < UVC_URBS; ++i) {
901
		urb = usb_alloc_urb(npackets, gfp_flags);
902
		if (urb == NULL) {
903
			uvc_uninit_video(stream, 1);
904 905 906
			return -ENOMEM;
		}

907 908 909
		urb->dev = stream->dev->udev;
		urb->context = stream;
		urb->pipe = usb_rcvisocpipe(stream->dev->udev,
910 911 912
				ep->desc.bEndpointAddress);
		urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP;
		urb->interval = ep->desc.bInterval;
913 914
		urb->transfer_buffer = stream->urb_buffer[i];
		urb->transfer_dma = stream->urb_dma[i];
915 916 917 918 919 920 921 922 923
		urb->complete = uvc_video_complete;
		urb->number_of_packets = npackets;
		urb->transfer_buffer_length = size;

		for (j = 0; j < npackets; ++j) {
			urb->iso_frame_desc[j].offset = j * psize;
			urb->iso_frame_desc[j].length = psize;
		}

924
		stream->urb[i] = urb;
925 926 927 928 929 930 931 932 933
	}

	return 0;
}

/*
 * Initialize bulk URBs and allocate transfer buffers. The packet size is
 * given by the endpoint.
 */
934
static int uvc_init_video_bulk(struct uvc_streaming *stream,
935
	struct usb_host_endpoint *ep, gfp_t gfp_flags)
936 937
{
	struct urb *urb;
938 939 940 941
	unsigned int npackets, pipe, i;
	u16 psize;
	u32 size;

942
	psize = le16_to_cpu(ep->desc.wMaxPacketSize) & 0x07ff;
943 944
	size = stream->ctrl.dwMaxPayloadTransferSize;
	stream->bulk.max_payload_size = size;
945

946
	npackets = uvc_alloc_urb_buffers(stream, size, psize, gfp_flags);
947
	if (npackets == 0)
948 949
		return -ENOMEM;

950 951
	size = npackets * psize;

952
	if (usb_endpoint_dir_in(&ep->desc))
953
		pipe = usb_rcvbulkpipe(stream->dev->udev,
954 955
				       ep->desc.bEndpointAddress);
	else
956
		pipe = usb_sndbulkpipe(stream->dev->udev,
957 958
				       ep->desc.bEndpointAddress);

959
	if (stream->type == V4L2_BUF_TYPE_VIDEO_OUTPUT)
960
		size = 0;
961 962

	for (i = 0; i < UVC_URBS; ++i) {
963
		urb = usb_alloc_urb(0, gfp_flags);
964
		if (urb == NULL) {
965
			uvc_uninit_video(stream, 1);
966 967 968
			return -ENOMEM;
		}

969 970 971
		usb_fill_bulk_urb(urb, stream->dev->udev, pipe,
			stream->urb_buffer[i], size, uvc_video_complete,
			stream);
972
		urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP;
973
		urb->transfer_dma = stream->urb_dma[i];
974

975
		stream->urb[i] = urb;
976 977 978 979 980 981 982 983
	}

	return 0;
}

/*
 * Initialize isochronous/bulk URBs and allocate transfer buffers.
 */
984
static int uvc_init_video(struct uvc_streaming *stream, gfp_t gfp_flags)
985
{
986
	struct usb_interface *intf = stream->intf;
987 988
	struct usb_host_endpoint *ep;
	unsigned int i;
989 990
	int ret;

991
	stream->sequence = -1;
992 993 994 995
	stream->last_fid = -1;
	stream->bulk.header_size = 0;
	stream->bulk.skip_payload = 0;
	stream->bulk.payload_size = 0;
996 997

	if (intf->num_altsetting > 1) {
998 999 1000 1001 1002 1003
		struct usb_host_endpoint *best_ep = NULL;
		unsigned int best_psize = 3 * 1024;
		unsigned int bandwidth;
		unsigned int uninitialized_var(altsetting);
		int intfnum = stream->intfnum;

1004
		/* Isochronous endpoint, select the alternate setting. */
1005
		bandwidth = stream->ctrl.dwMaxPayloadTransferSize;
1006 1007

		if (bandwidth == 0) {
1008 1009
			uvc_trace(UVC_TRACE_VIDEO, "Device requested null "
				"bandwidth, defaulting to lowest.\n");
1010
			bandwidth = 1;
1011 1012 1013
		} else {
			uvc_trace(UVC_TRACE_VIDEO, "Device requested %u "
				"B/frame bandwidth.\n", bandwidth);
1014 1015 1016
		}

		for (i = 0; i < intf->num_altsetting; ++i) {
1017 1018 1019
			struct usb_host_interface *alts;
			unsigned int psize;

1020 1021
			alts = &intf->altsetting[i];
			ep = uvc_find_endpoint(alts,
1022
				stream->header.bEndpointAddress);
1023 1024 1025 1026 1027 1028
			if (ep == NULL)
				continue;

			/* Check if the bandwidth is high enough. */
			psize = le16_to_cpu(ep->desc.wMaxPacketSize);
			psize = (psize & 0x07ff) * (1 + ((psize >> 11) & 3));
1029 1030 1031 1032 1033
			if (psize >= bandwidth && psize <= best_psize) {
				altsetting = i;
				best_psize = psize;
				best_ep = ep;
			}
1034 1035
		}

1036
		if (best_ep == NULL) {
1037 1038
			uvc_trace(UVC_TRACE_VIDEO, "No fast enough alt setting "
				"for requested bandwidth.\n");
1039
			return -EIO;
1040
		}
1041

1042 1043 1044 1045
		uvc_trace(UVC_TRACE_VIDEO, "Selecting alternate setting %u "
			"(%u B/frame bandwidth).\n", altsetting, best_psize);

		ret = usb_set_interface(stream->dev->udev, intfnum, altsetting);
1046
		if (ret < 0)
1047 1048
			return ret;

1049
		ret = uvc_init_video_isoc(stream, best_ep, gfp_flags);
1050 1051 1052
	} else {
		/* Bulk endpoint, proceed to URB initialization. */
		ep = uvc_find_endpoint(&intf->altsetting[0],
1053
				stream->header.bEndpointAddress);
1054 1055 1056
		if (ep == NULL)
			return -EIO;

1057
		ret = uvc_init_video_bulk(stream, ep, gfp_flags);
1058 1059 1060 1061 1062 1063 1064
	}

	if (ret < 0)
		return ret;

	/* Submit the URBs. */
	for (i = 0; i < UVC_URBS; ++i) {
1065 1066
		ret = usb_submit_urb(stream->urb[i], gfp_flags);
		if (ret < 0) {
1067 1068
			uvc_printk(KERN_ERR, "Failed to submit URB %u "
					"(%d).\n", i, ret);
1069
			uvc_uninit_video(stream, 1);
1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087
			return ret;
		}
	}

	return 0;
}

/* --------------------------------------------------------------------------
 * Suspend/resume
 */

/*
 * Stop streaming without disabling the video queue.
 *
 * To let userspace applications resume without trouble, we must not touch the
 * video buffers in any way. We mark the device as frozen to make sure the URB
 * completion handler won't try to cancel the queue when we kill the URBs.
 */
1088
int uvc_video_suspend(struct uvc_streaming *stream)
1089
{
1090
	if (!uvc_queue_streaming(&stream->queue))
1091 1092
		return 0;

1093 1094 1095
	stream->frozen = 1;
	uvc_uninit_video(stream, 0);
	usb_set_interface(stream->dev->udev, stream->intfnum, 0);
1096 1097 1098 1099
	return 0;
}

/*
1100
 * Reconfigure the video interface and restart streaming if it was enabled
1101 1102 1103 1104 1105 1106
 * before suspend.
 *
 * If an error occurs, disable the video queue. This will wake all pending
 * buffers, making sure userspace applications are notified of the problem
 * instead of waiting forever.
 */
1107
int uvc_video_resume(struct uvc_streaming *stream, int reset)
1108 1109 1110
{
	int ret;

1111 1112 1113 1114 1115 1116 1117 1118
	/* If the bus has been reset on resume, set the alternate setting to 0.
	 * This should be the default value, but some devices crash or otherwise
	 * misbehave if they don't receive a SET_INTERFACE request before any
	 * other video control request.
	 */
	if (reset)
		usb_set_interface(stream->dev->udev, stream->intfnum, 0);

1119
	stream->frozen = 0;
1120

1121 1122 1123
	ret = uvc_commit_video(stream, &stream->ctrl);
	if (ret < 0) {
		uvc_queue_enable(&stream->queue, 0);
1124 1125 1126
		return ret;
	}

1127
	if (!uvc_queue_streaming(&stream->queue))
1128 1129
		return 0;

1130 1131 1132
	ret = uvc_init_video(stream, GFP_NOIO);
	if (ret < 0)
		uvc_queue_enable(&stream->queue, 0);
1133 1134 1135 1136 1137 1138 1139 1140 1141

	return ret;
}

/* ------------------------------------------------------------------------
 * Video device
 */

/*
1142 1143
 * Initialize the UVC video device by switching to alternate setting 0 and
 * retrieve the default format.
1144 1145 1146 1147 1148 1149 1150
 *
 * Some cameras (namely the Fuji Finepix) set the format and frame
 * indexes to zero. The UVC standard doesn't clearly make this a spec
 * violation, so try to silently fix the values if possible.
 *
 * This function is called before registering the device with V4L.
 */
1151
int uvc_video_init(struct uvc_streaming *stream)
1152
{
1153
	struct uvc_streaming_control *probe = &stream->ctrl;
1154 1155 1156 1157 1158
	struct uvc_format *format = NULL;
	struct uvc_frame *frame = NULL;
	unsigned int i;
	int ret;

1159
	if (stream->nformats == 0) {
1160 1161 1162 1163
		uvc_printk(KERN_INFO, "No supported video formats found.\n");
		return -EINVAL;
	}

1164 1165 1166
	atomic_set(&stream->active, 0);

	/* Initialize the video buffers queue. */
1167
	uvc_queue_init(&stream->queue, stream->type, !uvc_no_drop_param);
1168

1169 1170 1171 1172 1173
	/* Alternate setting 0 should be the default, yet the XBox Live Vision
	 * Cam (and possibly other devices) crash or otherwise misbehave if
	 * they don't receive a SET_INTERFACE request before any other video
	 * control request.
	 */
1174
	usb_set_interface(stream->dev->udev, stream->intfnum, 0);
1175

1176 1177 1178 1179
	/* Set the streaming probe control with default streaming parameters
	 * retrieved from the device. Webcams that don't suport GET_DEF
	 * requests on the probe control will just keep their current streaming
	 * parameters.
1180
	 */
1181 1182
	if (uvc_get_video_ctrl(stream, probe, 1, UVC_GET_DEF) == 0)
		uvc_set_video_ctrl(stream, probe, 1);
1183 1184 1185 1186 1187 1188

	/* Initialize the streaming parameters with the probe control current
	 * value. This makes sure SET_CUR requests on the streaming commit
	 * control will always use values retrieved from a successful GET_CUR
	 * request on the probe control, as required by the UVC specification.
	 */
1189
	ret = uvc_get_video_ctrl(stream, probe, 1, UVC_GET_CUR);
1190
	if (ret < 0)
1191 1192 1193 1194 1195
		return ret;

	/* Check if the default format descriptor exists. Use the first
	 * available format otherwise.
	 */
1196 1197
	for (i = stream->nformats; i > 0; --i) {
		format = &stream->format[i-1];
1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210
		if (format->index == probe->bFormatIndex)
			break;
	}

	if (format->nframes == 0) {
		uvc_printk(KERN_INFO, "No frame descriptor found for the "
			"default format.\n");
		return -EINVAL;
	}

	/* Zero bFrameIndex might be correct. Stream-based formats (including
	 * MPEG-2 TS and DV) do not support frames but have a dummy frame
	 * descriptor with bFrameIndex set to zero. If the default frame
1211
	 * descriptor is not found, use the first available frame.
1212 1213 1214 1215 1216 1217 1218 1219 1220 1221
	 */
	for (i = format->nframes; i > 0; --i) {
		frame = &format->frame[i-1];
		if (frame->bFrameIndex == probe->bFrameIndex)
			break;
	}

	probe->bFormatIndex = format->index;
	probe->bFrameIndex = frame->bFrameIndex;

1222 1223
	stream->cur_format = format;
	stream->cur_frame = frame;
1224 1225

	/* Select the video decoding function */
1226 1227 1228 1229 1230
	if (stream->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
		if (stream->dev->quirks & UVC_QUIRK_BUILTIN_ISIGHT)
			stream->decode = uvc_video_decode_isight;
		else if (stream->intf->num_altsetting > 1)
			stream->decode = uvc_video_decode_isoc;
1231
		else
1232
			stream->decode = uvc_video_decode_bulk;
1233
	} else {
1234 1235
		if (stream->intf->num_altsetting == 1)
			stream->decode = uvc_video_encode_bulk;
1236 1237 1238 1239 1240 1241
		else {
			uvc_printk(KERN_INFO, "Isochronous endpoints are not "
				"supported for video output devices.\n");
			return -EINVAL;
		}
	}
1242 1243 1244 1245 1246 1247 1248

	return 0;
}

/*
 * Enable or disable the video stream.
 */
1249
int uvc_video_enable(struct uvc_streaming *stream, int enable)
1250 1251 1252 1253
{
	int ret;

	if (!enable) {
1254 1255 1256
		uvc_uninit_video(stream, 1);
		usb_set_interface(stream->dev->udev, stream->intfnum, 0);
		uvc_queue_enable(&stream->queue, 0);
1257 1258 1259
		return 0;
	}

1260 1261
	ret = uvc_queue_enable(&stream->queue, 1);
	if (ret < 0)
1262 1263
		return ret;

1264
	/* Commit the streaming parameters. */
1265
	ret = uvc_commit_video(stream, &stream->ctrl);
1266 1267
	if (ret < 0) {
		uvc_queue_enable(&stream->queue, 0);
1268
		return ret;
1269
	}
1270

1271
	return uvc_init_video(stream, GFP_KERNEL);
1272
}
1273