linux/drivers/media/usb/uvc/uvc_driver.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 *      uvc_driver.c  --  USB Video Class driver
   4 *
   5 *      Copyright (C) 2005-2010
   6 *          Laurent Pinchart (laurent.pinchart@ideasonboard.com)
   7 */
   8
   9#include <linux/atomic.h>
  10#include <linux/gpio/consumer.h>
  11#include <linux/kernel.h>
  12#include <linux/list.h>
  13#include <linux/module.h>
  14#include <linux/slab.h>
  15#include <linux/usb.h>
  16#include <linux/videodev2.h>
  17#include <linux/vmalloc.h>
  18#include <linux/wait.h>
  19#include <linux/version.h>
  20#include <asm/unaligned.h>
  21
  22#include <media/v4l2-common.h>
  23#include <media/v4l2-ioctl.h>
  24
  25#include "uvcvideo.h"
  26
  27#define DRIVER_AUTHOR           "Laurent Pinchart " \
  28                                "<laurent.pinchart@ideasonboard.com>"
  29#define DRIVER_DESC             "USB Video Class driver"
  30
  31unsigned int uvc_clock_param = CLOCK_MONOTONIC;
  32unsigned int uvc_hw_timestamps_param;
  33unsigned int uvc_no_drop_param;
  34static unsigned int uvc_quirks_param = -1;
  35unsigned int uvc_dbg_param;
  36unsigned int uvc_timeout_param = UVC_CTRL_STREAMING_TIMEOUT;
  37
  38/* ------------------------------------------------------------------------
  39 * Video formats
  40 */
  41
  42static struct uvc_format_desc uvc_fmts[] = {
  43        {
  44                .name           = "YUV 4:2:2 (YUYV)",
  45                .guid           = UVC_GUID_FORMAT_YUY2,
  46                .fcc            = V4L2_PIX_FMT_YUYV,
  47        },
  48        {
  49                .name           = "YUV 4:2:2 (YUYV)",
  50                .guid           = UVC_GUID_FORMAT_YUY2_ISIGHT,
  51                .fcc            = V4L2_PIX_FMT_YUYV,
  52        },
  53        {
  54                .name           = "YUV 4:2:0 (NV12)",
  55                .guid           = UVC_GUID_FORMAT_NV12,
  56                .fcc            = V4L2_PIX_FMT_NV12,
  57        },
  58        {
  59                .name           = "MJPEG",
  60                .guid           = UVC_GUID_FORMAT_MJPEG,
  61                .fcc            = V4L2_PIX_FMT_MJPEG,
  62        },
  63        {
  64                .name           = "YVU 4:2:0 (YV12)",
  65                .guid           = UVC_GUID_FORMAT_YV12,
  66                .fcc            = V4L2_PIX_FMT_YVU420,
  67        },
  68        {
  69                .name           = "YUV 4:2:0 (I420)",
  70                .guid           = UVC_GUID_FORMAT_I420,
  71                .fcc            = V4L2_PIX_FMT_YUV420,
  72        },
  73        {
  74                .name           = "YUV 4:2:0 (M420)",
  75                .guid           = UVC_GUID_FORMAT_M420,
  76                .fcc            = V4L2_PIX_FMT_M420,
  77        },
  78        {
  79                .name           = "YUV 4:2:2 (UYVY)",
  80                .guid           = UVC_GUID_FORMAT_UYVY,
  81                .fcc            = V4L2_PIX_FMT_UYVY,
  82        },
  83        {
  84                .name           = "Greyscale 8-bit (Y800)",
  85                .guid           = UVC_GUID_FORMAT_Y800,
  86                .fcc            = V4L2_PIX_FMT_GREY,
  87        },
  88        {
  89                .name           = "Greyscale 8-bit (Y8  )",
  90                .guid           = UVC_GUID_FORMAT_Y8,
  91                .fcc            = V4L2_PIX_FMT_GREY,
  92        },
  93        {
  94                .name           = "Greyscale 8-bit (D3DFMT_L8)",
  95                .guid           = UVC_GUID_FORMAT_D3DFMT_L8,
  96                .fcc            = V4L2_PIX_FMT_GREY,
  97        },
  98        {
  99                .name           = "IR 8-bit (L8_IR)",
 100                .guid           = UVC_GUID_FORMAT_KSMEDIA_L8_IR,
 101                .fcc            = V4L2_PIX_FMT_GREY,
 102        },
 103        {
 104                .name           = "Greyscale 10-bit (Y10 )",
 105                .guid           = UVC_GUID_FORMAT_Y10,
 106                .fcc            = V4L2_PIX_FMT_Y10,
 107        },
 108        {
 109                .name           = "Greyscale 12-bit (Y12 )",
 110                .guid           = UVC_GUID_FORMAT_Y12,
 111                .fcc            = V4L2_PIX_FMT_Y12,
 112        },
 113        {
 114                .name           = "Greyscale 16-bit (Y16 )",
 115                .guid           = UVC_GUID_FORMAT_Y16,
 116                .fcc            = V4L2_PIX_FMT_Y16,
 117        },
 118        {
 119                .name           = "BGGR Bayer (BY8 )",
 120                .guid           = UVC_GUID_FORMAT_BY8,
 121                .fcc            = V4L2_PIX_FMT_SBGGR8,
 122        },
 123        {
 124                .name           = "BGGR Bayer (BA81)",
 125                .guid           = UVC_GUID_FORMAT_BA81,
 126                .fcc            = V4L2_PIX_FMT_SBGGR8,
 127        },
 128        {
 129                .name           = "GBRG Bayer (GBRG)",
 130                .guid           = UVC_GUID_FORMAT_GBRG,
 131                .fcc            = V4L2_PIX_FMT_SGBRG8,
 132        },
 133        {
 134                .name           = "GRBG Bayer (GRBG)",
 135                .guid           = UVC_GUID_FORMAT_GRBG,
 136                .fcc            = V4L2_PIX_FMT_SGRBG8,
 137        },
 138        {
 139                .name           = "RGGB Bayer (RGGB)",
 140                .guid           = UVC_GUID_FORMAT_RGGB,
 141                .fcc            = V4L2_PIX_FMT_SRGGB8,
 142        },
 143        {
 144                .name           = "RGB565",
 145                .guid           = UVC_GUID_FORMAT_RGBP,
 146                .fcc            = V4L2_PIX_FMT_RGB565,
 147        },
 148        {
 149                .name           = "BGR 8:8:8 (BGR3)",
 150                .guid           = UVC_GUID_FORMAT_BGR3,
 151                .fcc            = V4L2_PIX_FMT_BGR24,
 152        },
 153        {
 154                .name           = "H.264",
 155                .guid           = UVC_GUID_FORMAT_H264,
 156                .fcc            = V4L2_PIX_FMT_H264,
 157        },
 158        {
 159                .name           = "Greyscale 8 L/R (Y8I)",
 160                .guid           = UVC_GUID_FORMAT_Y8I,
 161                .fcc            = V4L2_PIX_FMT_Y8I,
 162        },
 163        {
 164                .name           = "Greyscale 12 L/R (Y12I)",
 165                .guid           = UVC_GUID_FORMAT_Y12I,
 166                .fcc            = V4L2_PIX_FMT_Y12I,
 167        },
 168        {
 169                .name           = "Depth data 16-bit (Z16)",
 170                .guid           = UVC_GUID_FORMAT_Z16,
 171                .fcc            = V4L2_PIX_FMT_Z16,
 172        },
 173        {
 174                .name           = "Bayer 10-bit (SRGGB10P)",
 175                .guid           = UVC_GUID_FORMAT_RW10,
 176                .fcc            = V4L2_PIX_FMT_SRGGB10P,
 177        },
 178        {
 179                .name           = "Bayer 16-bit (SBGGR16)",
 180                .guid           = UVC_GUID_FORMAT_BG16,
 181                .fcc            = V4L2_PIX_FMT_SBGGR16,
 182        },
 183        {
 184                .name           = "Bayer 16-bit (SGBRG16)",
 185                .guid           = UVC_GUID_FORMAT_GB16,
 186                .fcc            = V4L2_PIX_FMT_SGBRG16,
 187        },
 188        {
 189                .name           = "Bayer 16-bit (SRGGB16)",
 190                .guid           = UVC_GUID_FORMAT_RG16,
 191                .fcc            = V4L2_PIX_FMT_SRGGB16,
 192        },
 193        {
 194                .name           = "Bayer 16-bit (SGRBG16)",
 195                .guid           = UVC_GUID_FORMAT_GR16,
 196                .fcc            = V4L2_PIX_FMT_SGRBG16,
 197        },
 198        {
 199                .name           = "Depth data 16-bit (Z16)",
 200                .guid           = UVC_GUID_FORMAT_INVZ,
 201                .fcc            = V4L2_PIX_FMT_Z16,
 202        },
 203        {
 204                .name           = "Greyscale 10-bit (Y10 )",
 205                .guid           = UVC_GUID_FORMAT_INVI,
 206                .fcc            = V4L2_PIX_FMT_Y10,
 207        },
 208        {
 209                .name           = "IR:Depth 26-bit (INZI)",
 210                .guid           = UVC_GUID_FORMAT_INZI,
 211                .fcc            = V4L2_PIX_FMT_INZI,
 212        },
 213        {
 214                .name           = "4-bit Depth Confidence (Packed)",
 215                .guid           = UVC_GUID_FORMAT_CNF4,
 216                .fcc            = V4L2_PIX_FMT_CNF4,
 217        },
 218        {
 219                .name           = "HEVC",
 220                .guid           = UVC_GUID_FORMAT_HEVC,
 221                .fcc            = V4L2_PIX_FMT_HEVC,
 222        },
 223};
 224
 225/* ------------------------------------------------------------------------
 226 * Utility functions
 227 */
 228
 229struct usb_host_endpoint *uvc_find_endpoint(struct usb_host_interface *alts,
 230                u8 epaddr)
 231{
 232        struct usb_host_endpoint *ep;
 233        unsigned int i;
 234
 235        for (i = 0; i < alts->desc.bNumEndpoints; ++i) {
 236                ep = &alts->endpoint[i];
 237                if (ep->desc.bEndpointAddress == epaddr)
 238                        return ep;
 239        }
 240
 241        return NULL;
 242}
 243
 244static struct uvc_format_desc *uvc_format_by_guid(const u8 guid[16])
 245{
 246        unsigned int len = ARRAY_SIZE(uvc_fmts);
 247        unsigned int i;
 248
 249        for (i = 0; i < len; ++i) {
 250                if (memcmp(guid, uvc_fmts[i].guid, 16) == 0)
 251                        return &uvc_fmts[i];
 252        }
 253
 254        return NULL;
 255}
 256
 257static enum v4l2_colorspace uvc_colorspace(const u8 primaries)
 258{
 259        static const enum v4l2_colorspace colorprimaries[] = {
 260                V4L2_COLORSPACE_DEFAULT,  /* Unspecified */
 261                V4L2_COLORSPACE_SRGB,
 262                V4L2_COLORSPACE_470_SYSTEM_M,
 263                V4L2_COLORSPACE_470_SYSTEM_BG,
 264                V4L2_COLORSPACE_SMPTE170M,
 265                V4L2_COLORSPACE_SMPTE240M,
 266        };
 267
 268        if (primaries < ARRAY_SIZE(colorprimaries))
 269                return colorprimaries[primaries];
 270
 271        return V4L2_COLORSPACE_DEFAULT;  /* Reserved */
 272}
 273
 274static enum v4l2_xfer_func uvc_xfer_func(const u8 transfer_characteristics)
 275{
 276        /*
 277         * V4L2 does not currently have definitions for all possible values of
 278         * UVC transfer characteristics. If v4l2_xfer_func is extended with new
 279         * values, the mapping below should be updated.
 280         *
 281         * Substitutions are taken from the mapping given for
 282         * V4L2_XFER_FUNC_DEFAULT documented in videodev2.h.
 283         */
 284        static const enum v4l2_xfer_func xfer_funcs[] = {
 285                V4L2_XFER_FUNC_DEFAULT,    /* Unspecified */
 286                V4L2_XFER_FUNC_709,
 287                V4L2_XFER_FUNC_709,        /* Substitution for BT.470-2 M */
 288                V4L2_XFER_FUNC_709,        /* Substitution for BT.470-2 B, G */
 289                V4L2_XFER_FUNC_709,        /* Substitution for SMPTE 170M */
 290                V4L2_XFER_FUNC_SMPTE240M,
 291                V4L2_XFER_FUNC_NONE,
 292                V4L2_XFER_FUNC_SRGB,
 293        };
 294
 295        if (transfer_characteristics < ARRAY_SIZE(xfer_funcs))
 296                return xfer_funcs[transfer_characteristics];
 297
 298        return V4L2_XFER_FUNC_DEFAULT;  /* Reserved */
 299}
 300
 301static enum v4l2_ycbcr_encoding uvc_ycbcr_enc(const u8 matrix_coefficients)
 302{
 303        /*
 304         * V4L2 does not currently have definitions for all possible values of
 305         * UVC matrix coefficients. If v4l2_ycbcr_encoding is extended with new
 306         * values, the mapping below should be updated.
 307         *
 308         * Substitutions are taken from the mapping given for
 309         * V4L2_YCBCR_ENC_DEFAULT documented in videodev2.h.
 310         *
 311         * FCC is assumed to be close enough to 601.
 312         */
 313        static const enum v4l2_ycbcr_encoding ycbcr_encs[] = {
 314                V4L2_YCBCR_ENC_DEFAULT,  /* Unspecified */
 315                V4L2_YCBCR_ENC_709,
 316                V4L2_YCBCR_ENC_601,      /* Substitution for FCC */
 317                V4L2_YCBCR_ENC_601,      /* Substitution for BT.470-2 B, G */
 318                V4L2_YCBCR_ENC_601,
 319                V4L2_YCBCR_ENC_SMPTE240M,
 320        };
 321
 322        if (matrix_coefficients < ARRAY_SIZE(ycbcr_encs))
 323                return ycbcr_encs[matrix_coefficients];
 324
 325        return V4L2_YCBCR_ENC_DEFAULT;  /* Reserved */
 326}
 327
 328/* Simplify a fraction using a simple continued fraction decomposition. The
 329 * idea here is to convert fractions such as 333333/10000000 to 1/30 using
 330 * 32 bit arithmetic only. The algorithm is not perfect and relies upon two
 331 * arbitrary parameters to remove non-significative terms from the simple
 332 * continued fraction decomposition. Using 8 and 333 for n_terms and threshold
 333 * respectively seems to give nice results.
 334 */
 335void uvc_simplify_fraction(u32 *numerator, u32 *denominator,
 336                unsigned int n_terms, unsigned int threshold)
 337{
 338        u32 *an;
 339        u32 x, y, r;
 340        unsigned int i, n;
 341
 342        an = kmalloc_array(n_terms, sizeof(*an), GFP_KERNEL);
 343        if (an == NULL)
 344                return;
 345
 346        /* Convert the fraction to a simple continued fraction. See
 347         * https://mathforum.org/dr.math/faq/faq.fractions.html
 348         * Stop if the current term is bigger than or equal to the given
 349         * threshold.
 350         */
 351        x = *numerator;
 352        y = *denominator;
 353
 354        for (n = 0; n < n_terms && y != 0; ++n) {
 355                an[n] = x / y;
 356                if (an[n] >= threshold) {
 357                        if (n < 2)
 358                                n++;
 359                        break;
 360                }
 361
 362                r = x - an[n] * y;
 363                x = y;
 364                y = r;
 365        }
 366
 367        /* Expand the simple continued fraction back to an integer fraction. */
 368        x = 0;
 369        y = 1;
 370
 371        for (i = n; i > 0; --i) {
 372                r = y;
 373                y = an[i-1] * y + x;
 374                x = r;
 375        }
 376
 377        *numerator = y;
 378        *denominator = x;
 379        kfree(an);
 380}
 381
 382/* Convert a fraction to a frame interval in 100ns multiples. The idea here is
 383 * to compute numerator / denominator * 10000000 using 32 bit fixed point
 384 * arithmetic only.
 385 */
 386u32 uvc_fraction_to_interval(u32 numerator, u32 denominator)
 387{
 388        u32 multiplier;
 389
 390        /* Saturate the result if the operation would overflow. */
 391        if (denominator == 0 ||
 392            numerator/denominator >= ((u32)-1)/10000000)
 393                return (u32)-1;
 394
 395        /* Divide both the denominator and the multiplier by two until
 396         * numerator * multiplier doesn't overflow. If anyone knows a better
 397         * algorithm please let me know.
 398         */
 399        multiplier = 10000000;
 400        while (numerator > ((u32)-1)/multiplier) {
 401                multiplier /= 2;
 402                denominator /= 2;
 403        }
 404
 405        return denominator ? numerator * multiplier / denominator : 0;
 406}
 407
 408/* ------------------------------------------------------------------------
 409 * Terminal and unit management
 410 */
 411
 412struct uvc_entity *uvc_entity_by_id(struct uvc_device *dev, int id)
 413{
 414        struct uvc_entity *entity;
 415
 416        list_for_each_entry(entity, &dev->entities, list) {
 417                if (entity->id == id)
 418                        return entity;
 419        }
 420
 421        return NULL;
 422}
 423
 424static struct uvc_entity *uvc_entity_by_reference(struct uvc_device *dev,
 425        int id, struct uvc_entity *entity)
 426{
 427        unsigned int i;
 428
 429        if (entity == NULL)
 430                entity = list_entry(&dev->entities, struct uvc_entity, list);
 431
 432        list_for_each_entry_continue(entity, &dev->entities, list) {
 433                for (i = 0; i < entity->bNrInPins; ++i)
 434                        if (entity->baSourceID[i] == id)
 435                                return entity;
 436        }
 437
 438        return NULL;
 439}
 440
 441static struct uvc_streaming *uvc_stream_by_id(struct uvc_device *dev, int id)
 442{
 443        struct uvc_streaming *stream;
 444
 445        list_for_each_entry(stream, &dev->streams, list) {
 446                if (stream->header.bTerminalLink == id)
 447                        return stream;
 448        }
 449
 450        return NULL;
 451}
 452
 453/* ------------------------------------------------------------------------
 454 * Streaming Object Management
 455 */
 456
 457static void uvc_stream_delete(struct uvc_streaming *stream)
 458{
 459        if (stream->async_wq)
 460                destroy_workqueue(stream->async_wq);
 461
 462        mutex_destroy(&stream->mutex);
 463
 464        usb_put_intf(stream->intf);
 465
 466        kfree(stream->format);
 467        kfree(stream->header.bmaControls);
 468        kfree(stream);
 469}
 470
 471static struct uvc_streaming *uvc_stream_new(struct uvc_device *dev,
 472                                            struct usb_interface *intf)
 473{
 474        struct uvc_streaming *stream;
 475
 476        stream = kzalloc(sizeof(*stream), GFP_KERNEL);
 477        if (stream == NULL)
 478                return NULL;
 479
 480        mutex_init(&stream->mutex);
 481
 482        stream->dev = dev;
 483        stream->intf = usb_get_intf(intf);
 484        stream->intfnum = intf->cur_altsetting->desc.bInterfaceNumber;
 485
 486        /* Allocate a stream specific work queue for asynchronous tasks. */
 487        stream->async_wq = alloc_workqueue("uvcvideo", WQ_UNBOUND | WQ_HIGHPRI,
 488                                           0);
 489        if (!stream->async_wq) {
 490                uvc_stream_delete(stream);
 491                return NULL;
 492        }
 493
 494        return stream;
 495}
 496
 497/* ------------------------------------------------------------------------
 498 * Descriptors parsing
 499 */
 500
 501static int uvc_parse_format(struct uvc_device *dev,
 502        struct uvc_streaming *streaming, struct uvc_format *format,
 503        u32 **intervals, unsigned char *buffer, int buflen)
 504{
 505        struct usb_interface *intf = streaming->intf;
 506        struct usb_host_interface *alts = intf->cur_altsetting;
 507        struct uvc_format_desc *fmtdesc;
 508        struct uvc_frame *frame;
 509        const unsigned char *start = buffer;
 510        unsigned int width_multiplier = 1;
 511        unsigned int interval;
 512        unsigned int i, n;
 513        u8 ftype;
 514
 515        format->type = buffer[2];
 516        format->index = buffer[3];
 517
 518        switch (buffer[2]) {
 519        case UVC_VS_FORMAT_UNCOMPRESSED:
 520        case UVC_VS_FORMAT_FRAME_BASED:
 521                n = buffer[2] == UVC_VS_FORMAT_UNCOMPRESSED ? 27 : 28;
 522                if (buflen < n) {
 523                        uvc_dbg(dev, DESCR,
 524                                "device %d videostreaming interface %d FORMAT error\n",
 525                                dev->udev->devnum,
 526                                alts->desc.bInterfaceNumber);
 527                        return -EINVAL;
 528                }
 529
 530                /* Find the format descriptor from its GUID. */
 531                fmtdesc = uvc_format_by_guid(&buffer[5]);
 532
 533                if (fmtdesc != NULL) {
 534                        strscpy(format->name, fmtdesc->name,
 535                                sizeof(format->name));
 536                        format->fcc = fmtdesc->fcc;
 537                } else {
 538                        dev_info(&streaming->intf->dev,
 539                                 "Unknown video format %pUl\n", &buffer[5]);
 540                        snprintf(format->name, sizeof(format->name), "%pUl\n",
 541                                &buffer[5]);
 542                        format->fcc = 0;
 543                }
 544
 545                format->bpp = buffer[21];
 546
 547                /* Some devices report a format that doesn't match what they
 548                 * really send.
 549                 */
 550                if (dev->quirks & UVC_QUIRK_FORCE_Y8) {
 551                        if (format->fcc == V4L2_PIX_FMT_YUYV) {
 552                                strscpy(format->name, "Greyscale 8-bit (Y8  )",
 553                                        sizeof(format->name));
 554                                format->fcc = V4L2_PIX_FMT_GREY;
 555                                format->bpp = 8;
 556                                width_multiplier = 2;
 557                        }
 558                }
 559
 560                /* Some devices report bpp that doesn't match the format. */
 561                if (dev->quirks & UVC_QUIRK_FORCE_BPP) {
 562                        const struct v4l2_format_info *info =
 563                                v4l2_format_info(format->fcc);
 564
 565                        if (info) {
 566                                unsigned int div = info->hdiv * info->vdiv;
 567
 568                                n = info->bpp[0] * div;
 569                                for (i = 1; i < info->comp_planes; i++)
 570                                        n += info->bpp[i];
 571
 572                                format->bpp = DIV_ROUND_UP(8 * n, div);
 573                        }
 574                }
 575
 576                if (buffer[2] == UVC_VS_FORMAT_UNCOMPRESSED) {
 577                        ftype = UVC_VS_FRAME_UNCOMPRESSED;
 578                } else {
 579                        ftype = UVC_VS_FRAME_FRAME_BASED;
 580                        if (buffer[27])
 581                                format->flags = UVC_FMT_FLAG_COMPRESSED;
 582                }
 583                break;
 584
 585        case UVC_VS_FORMAT_MJPEG:
 586                if (buflen < 11) {
 587                        uvc_dbg(dev, DESCR,
 588                                "device %d videostreaming interface %d FORMAT error\n",
 589                                dev->udev->devnum,
 590                                alts->desc.bInterfaceNumber);
 591                        return -EINVAL;
 592                }
 593
 594                strscpy(format->name, "MJPEG", sizeof(format->name));
 595                format->fcc = V4L2_PIX_FMT_MJPEG;
 596                format->flags = UVC_FMT_FLAG_COMPRESSED;
 597                format->bpp = 0;
 598                ftype = UVC_VS_FRAME_MJPEG;
 599                break;
 600
 601        case UVC_VS_FORMAT_DV:
 602                if (buflen < 9) {
 603                        uvc_dbg(dev, DESCR,
 604                                "device %d videostreaming interface %d FORMAT error\n",
 605                                dev->udev->devnum,
 606                                alts->desc.bInterfaceNumber);
 607                        return -EINVAL;
 608                }
 609
 610                switch (buffer[8] & 0x7f) {
 611                case 0:
 612                        strscpy(format->name, "SD-DV", sizeof(format->name));
 613                        break;
 614                case 1:
 615                        strscpy(format->name, "SDL-DV", sizeof(format->name));
 616                        break;
 617                case 2:
 618                        strscpy(format->name, "HD-DV", sizeof(format->name));
 619                        break;
 620                default:
 621                        uvc_dbg(dev, DESCR,
 622                                "device %d videostreaming interface %d: unknown DV format %u\n",
 623                                dev->udev->devnum,
 624                                alts->desc.bInterfaceNumber, buffer[8]);
 625                        return -EINVAL;
 626                }
 627
 628                strlcat(format->name, buffer[8] & (1 << 7) ? " 60Hz" : " 50Hz",
 629                        sizeof(format->name));
 630
 631                format->fcc = V4L2_PIX_FMT_DV;
 632                format->flags = UVC_FMT_FLAG_COMPRESSED | UVC_FMT_FLAG_STREAM;
 633                format->bpp = 0;
 634                ftype = 0;
 635
 636                /* Create a dummy frame descriptor. */
 637                frame = &format->frame[0];
 638                memset(&format->frame[0], 0, sizeof(format->frame[0]));
 639                frame->bFrameIntervalType = 1;
 640                frame->dwDefaultFrameInterval = 1;
 641                frame->dwFrameInterval = *intervals;
 642                *(*intervals)++ = 1;
 643                format->nframes = 1;
 644                break;
 645
 646        case UVC_VS_FORMAT_MPEG2TS:
 647        case UVC_VS_FORMAT_STREAM_BASED:
 648                /* Not supported yet. */
 649        default:
 650                uvc_dbg(dev, DESCR,
 651                        "device %d videostreaming interface %d unsupported format %u\n",
 652                        dev->udev->devnum, alts->desc.bInterfaceNumber,
 653                        buffer[2]);
 654                return -EINVAL;
 655        }
 656
 657        uvc_dbg(dev, DESCR, "Found format %s\n", format->name);
 658
 659        buflen -= buffer[0];
 660        buffer += buffer[0];
 661
 662        /* Parse the frame descriptors. Only uncompressed, MJPEG and frame
 663         * based formats have frame descriptors.
 664         */
 665        while (buflen > 2 && buffer[1] == USB_DT_CS_INTERFACE &&
 666               buffer[2] == ftype) {
 667                frame = &format->frame[format->nframes];
 668                if (ftype != UVC_VS_FRAME_FRAME_BASED)
 669                        n = buflen > 25 ? buffer[25] : 0;
 670                else
 671                        n = buflen > 21 ? buffer[21] : 0;
 672
 673                n = n ? n : 3;
 674
 675                if (buflen < 26 + 4*n) {
 676                        uvc_dbg(dev, DESCR,
 677                                "device %d videostreaming interface %d FRAME error\n",
 678                                dev->udev->devnum,
 679                                alts->desc.bInterfaceNumber);
 680                        return -EINVAL;
 681                }
 682
 683                frame->bFrameIndex = buffer[3];
 684                frame->bmCapabilities = buffer[4];
 685                frame->wWidth = get_unaligned_le16(&buffer[5])
 686                              * width_multiplier;
 687                frame->wHeight = get_unaligned_le16(&buffer[7]);
 688                frame->dwMinBitRate = get_unaligned_le32(&buffer[9]);
 689                frame->dwMaxBitRate = get_unaligned_le32(&buffer[13]);
 690                if (ftype != UVC_VS_FRAME_FRAME_BASED) {
 691                        frame->dwMaxVideoFrameBufferSize =
 692                                get_unaligned_le32(&buffer[17]);
 693                        frame->dwDefaultFrameInterval =
 694                                get_unaligned_le32(&buffer[21]);
 695                        frame->bFrameIntervalType = buffer[25];
 696                } else {
 697                        frame->dwMaxVideoFrameBufferSize = 0;
 698                        frame->dwDefaultFrameInterval =
 699                                get_unaligned_le32(&buffer[17]);
 700                        frame->bFrameIntervalType = buffer[21];
 701                }
 702                frame->dwFrameInterval = *intervals;
 703
 704                /* Several UVC chipsets screw up dwMaxVideoFrameBufferSize
 705                 * completely. Observed behaviours range from setting the
 706                 * value to 1.1x the actual frame size to hardwiring the
 707                 * 16 low bits to 0. This results in a higher than necessary
 708                 * memory usage as well as a wrong image size information. For
 709                 * uncompressed formats this can be fixed by computing the
 710                 * value from the frame size.
 711                 */
 712                if (!(format->flags & UVC_FMT_FLAG_COMPRESSED))
 713                        frame->dwMaxVideoFrameBufferSize = format->bpp
 714                                * frame->wWidth * frame->wHeight / 8;
 715
 716                /* Some bogus devices report dwMinFrameInterval equal to
 717                 * dwMaxFrameInterval and have dwFrameIntervalStep set to
 718                 * zero. Setting all null intervals to 1 fixes the problem and
 719                 * some other divisions by zero that could happen.
 720                 */
 721                for (i = 0; i < n; ++i) {
 722                        interval = get_unaligned_le32(&buffer[26+4*i]);
 723                        *(*intervals)++ = interval ? interval : 1;
 724                }
 725
 726                /* Make sure that the default frame interval stays between
 727                 * the boundaries.
 728                 */
 729                n -= frame->bFrameIntervalType ? 1 : 2;
 730                frame->dwDefaultFrameInterval =
 731                        min(frame->dwFrameInterval[n],
 732                            max(frame->dwFrameInterval[0],
 733                                frame->dwDefaultFrameInterval));
 734
 735                if (dev->quirks & UVC_QUIRK_RESTRICT_FRAME_RATE) {
 736                        frame->bFrameIntervalType = 1;
 737                        frame->dwFrameInterval[0] =
 738                                frame->dwDefaultFrameInterval;
 739                }
 740
 741                uvc_dbg(dev, DESCR, "- %ux%u (%u.%u fps)\n",
 742                        frame->wWidth, frame->wHeight,
 743                        10000000 / frame->dwDefaultFrameInterval,
 744                        (100000000 / frame->dwDefaultFrameInterval) % 10);
 745
 746                format->nframes++;
 747                buflen -= buffer[0];
 748                buffer += buffer[0];
 749        }
 750
 751        if (buflen > 2 && buffer[1] == USB_DT_CS_INTERFACE &&
 752            buffer[2] == UVC_VS_STILL_IMAGE_FRAME) {
 753                buflen -= buffer[0];
 754                buffer += buffer[0];
 755        }
 756
 757        if (buflen > 2 && buffer[1] == USB_DT_CS_INTERFACE &&
 758            buffer[2] == UVC_VS_COLORFORMAT) {
 759                if (buflen < 6) {
 760                        uvc_dbg(dev, DESCR,
 761                                "device %d videostreaming interface %d COLORFORMAT error\n",
 762                                dev->udev->devnum,
 763                                alts->desc.bInterfaceNumber);
 764                        return -EINVAL;
 765                }
 766
 767                format->colorspace = uvc_colorspace(buffer[3]);
 768                format->xfer_func = uvc_xfer_func(buffer[4]);
 769                format->ycbcr_enc = uvc_ycbcr_enc(buffer[5]);
 770
 771                buflen -= buffer[0];
 772                buffer += buffer[0];
 773        }
 774
 775        return buffer - start;
 776}
 777
 778static int uvc_parse_streaming(struct uvc_device *dev,
 779        struct usb_interface *intf)
 780{
 781        struct uvc_streaming *streaming = NULL;
 782        struct uvc_format *format;
 783        struct uvc_frame *frame;
 784        struct usb_host_interface *alts = &intf->altsetting[0];
 785        unsigned char *_buffer, *buffer = alts->extra;
 786        int _buflen, buflen = alts->extralen;
 787        unsigned int nformats = 0, nframes = 0, nintervals = 0;
 788        unsigned int size, i, n, p;
 789        u32 *interval;
 790        u16 psize;
 791        int ret = -EINVAL;
 792
 793        if (intf->cur_altsetting->desc.bInterfaceSubClass
 794                != UVC_SC_VIDEOSTREAMING) {
 795                uvc_dbg(dev, DESCR,
 796                        "device %d interface %d isn't a video streaming interface\n",
 797                        dev->udev->devnum,
 798                        intf->altsetting[0].desc.bInterfaceNumber);
 799                return -EINVAL;
 800        }
 801
 802        if (usb_driver_claim_interface(&uvc_driver.driver, intf, dev)) {
 803                uvc_dbg(dev, DESCR,
 804                        "device %d interface %d is already claimed\n",
 805                        dev->udev->devnum,
 806                        intf->altsetting[0].desc.bInterfaceNumber);
 807                return -EINVAL;
 808        }
 809
 810        streaming = uvc_stream_new(dev, intf);
 811        if (streaming == NULL) {
 812                usb_driver_release_interface(&uvc_driver.driver, intf);
 813                return -ENOMEM;
 814        }
 815
 816        /* The Pico iMage webcam has its class-specific interface descriptors
 817         * after the endpoint descriptors.
 818         */
 819        if (buflen == 0) {
 820                for (i = 0; i < alts->desc.bNumEndpoints; ++i) {
 821                        struct usb_host_endpoint *ep = &alts->endpoint[i];
 822
 823                        if (ep->extralen == 0)
 824                                continue;
 825
 826                        if (ep->extralen > 2 &&
 827                            ep->extra[1] == USB_DT_CS_INTERFACE) {
 828                                uvc_dbg(dev, DESCR,
 829                                        "trying extra data from endpoint %u\n",
 830                                        i);
 831                                buffer = alts->endpoint[i].extra;
 832                                buflen = alts->endpoint[i].extralen;
 833                                break;
 834                        }
 835                }
 836        }
 837
 838        /* Skip the standard interface descriptors. */
 839        while (buflen > 2 && buffer[1] != USB_DT_CS_INTERFACE) {
 840                buflen -= buffer[0];
 841                buffer += buffer[0];
 842        }
 843
 844        if (buflen <= 2) {
 845                uvc_dbg(dev, DESCR,
 846                        "no class-specific streaming interface descriptors found\n");
 847                goto error;
 848        }
 849
 850        /* Parse the header descriptor. */
 851        switch (buffer[2]) {
 852        case UVC_VS_OUTPUT_HEADER:
 853                streaming->type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
 854                size = 9;
 855                break;
 856
 857        case UVC_VS_INPUT_HEADER:
 858                streaming->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
 859                size = 13;
 860                break;
 861
 862        default:
 863                uvc_dbg(dev, DESCR,
 864                        "device %d videostreaming interface %d HEADER descriptor not found\n",
 865                        dev->udev->devnum, alts->desc.bInterfaceNumber);
 866                goto error;
 867        }
 868
 869        p = buflen >= 4 ? buffer[3] : 0;
 870        n = buflen >= size ? buffer[size-1] : 0;
 871
 872        if (buflen < size + p*n) {
 873                uvc_dbg(dev, DESCR,
 874                        "device %d videostreaming interface %d HEADER descriptor is invalid\n",
 875                        dev->udev->devnum, alts->desc.bInterfaceNumber);
 876                goto error;
 877        }
 878
 879        streaming->header.bNumFormats = p;
 880        streaming->header.bEndpointAddress = buffer[6];
 881        if (buffer[2] == UVC_VS_INPUT_HEADER) {
 882                streaming->header.bmInfo = buffer[7];
 883                streaming->header.bTerminalLink = buffer[8];
 884                streaming->header.bStillCaptureMethod = buffer[9];
 885                streaming->header.bTriggerSupport = buffer[10];
 886                streaming->header.bTriggerUsage = buffer[11];
 887        } else {
 888                streaming->header.bTerminalLink = buffer[7];
 889        }
 890        streaming->header.bControlSize = n;
 891
 892        streaming->header.bmaControls = kmemdup(&buffer[size], p * n,
 893                                                GFP_KERNEL);
 894        if (streaming->header.bmaControls == NULL) {
 895                ret = -ENOMEM;
 896                goto error;
 897        }
 898
 899        buflen -= buffer[0];
 900        buffer += buffer[0];
 901
 902        _buffer = buffer;
 903        _buflen = buflen;
 904
 905        /* Count the format and frame descriptors. */
 906        while (_buflen > 2 && _buffer[1] == USB_DT_CS_INTERFACE) {
 907                switch (_buffer[2]) {
 908                case UVC_VS_FORMAT_UNCOMPRESSED:
 909                case UVC_VS_FORMAT_MJPEG:
 910                case UVC_VS_FORMAT_FRAME_BASED:
 911                        nformats++;
 912                        break;
 913
 914                case UVC_VS_FORMAT_DV:
 915                        /* DV format has no frame descriptor. We will create a
 916                         * dummy frame descriptor with a dummy frame interval.
 917                         */
 918                        nformats++;
 919                        nframes++;
 920                        nintervals++;
 921                        break;
 922
 923                case UVC_VS_FORMAT_MPEG2TS:
 924                case UVC_VS_FORMAT_STREAM_BASED:
 925                        uvc_dbg(dev, DESCR,
 926                                "device %d videostreaming interface %d FORMAT %u is not supported\n",
 927                                dev->udev->devnum,
 928                                alts->desc.bInterfaceNumber, _buffer[2]);
 929                        break;
 930
 931                case UVC_VS_FRAME_UNCOMPRESSED:
 932                case UVC_VS_FRAME_MJPEG:
 933                        nframes++;
 934                        if (_buflen > 25)
 935                                nintervals += _buffer[25] ? _buffer[25] : 3;
 936                        break;
 937
 938                case UVC_VS_FRAME_FRAME_BASED:
 939                        nframes++;
 940                        if (_buflen > 21)
 941                                nintervals += _buffer[21] ? _buffer[21] : 3;
 942                        break;
 943                }
 944
 945                _buflen -= _buffer[0];
 946                _buffer += _buffer[0];
 947        }
 948
 949        if (nformats == 0) {
 950                uvc_dbg(dev, DESCR,
 951                        "device %d videostreaming interface %d has no supported formats defined\n",
 952                        dev->udev->devnum, alts->desc.bInterfaceNumber);
 953                goto error;
 954        }
 955
 956        size = nformats * sizeof(*format) + nframes * sizeof(*frame)
 957             + nintervals * sizeof(*interval);
 958        format = kzalloc(size, GFP_KERNEL);
 959        if (format == NULL) {
 960                ret = -ENOMEM;
 961                goto error;
 962        }
 963
 964        frame = (struct uvc_frame *)&format[nformats];
 965        interval = (u32 *)&frame[nframes];
 966
 967        streaming->format = format;
 968        streaming->nformats = nformats;
 969
 970        /* Parse the format descriptors. */
 971        while (buflen > 2 && buffer[1] == USB_DT_CS_INTERFACE) {
 972                switch (buffer[2]) {
 973                case UVC_VS_FORMAT_UNCOMPRESSED:
 974                case UVC_VS_FORMAT_MJPEG:
 975                case UVC_VS_FORMAT_DV:
 976                case UVC_VS_FORMAT_FRAME_BASED:
 977                        format->frame = frame;
 978                        ret = uvc_parse_format(dev, streaming, format,
 979                                &interval, buffer, buflen);
 980                        if (ret < 0)
 981                                goto error;
 982
 983                        frame += format->nframes;
 984                        format++;
 985
 986                        buflen -= ret;
 987                        buffer += ret;
 988                        continue;
 989
 990                default:
 991                        break;
 992                }
 993
 994                buflen -= buffer[0];
 995                buffer += buffer[0];
 996        }
 997
 998        if (buflen)
 999                uvc_dbg(dev, DESCR,
1000                        "device %d videostreaming interface %d has %u bytes of trailing descriptor garbage\n",
1001                        dev->udev->devnum, alts->desc.bInterfaceNumber, buflen);
1002
1003        /* Parse the alternate settings to find the maximum bandwidth. */
1004        for (i = 0; i < intf->num_altsetting; ++i) {
1005                struct usb_host_endpoint *ep;
1006                alts = &intf->altsetting[i];
1007                ep = uvc_find_endpoint(alts,
1008                                streaming->header.bEndpointAddress);
1009                if (ep == NULL)
1010                        continue;
1011
1012                psize = le16_to_cpu(ep->desc.wMaxPacketSize);
1013                psize = (psize & 0x07ff) * (1 + ((psize >> 11) & 3));
1014                if (psize > streaming->maxpsize)
1015                        streaming->maxpsize = psize;
1016        }
1017
1018        list_add_tail(&streaming->list, &dev->streams);
1019        return 0;
1020
1021error:
1022        usb_driver_release_interface(&uvc_driver.driver, intf);
1023        uvc_stream_delete(streaming);
1024        return ret;
1025}
1026
1027static const u8 uvc_camera_guid[16] = UVC_GUID_UVC_CAMERA;
1028static const u8 uvc_gpio_guid[16] = UVC_GUID_EXT_GPIO_CONTROLLER;
1029static const u8 uvc_media_transport_input_guid[16] =
1030        UVC_GUID_UVC_MEDIA_TRANSPORT_INPUT;
1031static const u8 uvc_processing_guid[16] = UVC_GUID_UVC_PROCESSING;
1032
1033static struct uvc_entity *uvc_alloc_entity(u16 type, u16 id,
1034                unsigned int num_pads, unsigned int extra_size)
1035{
1036        struct uvc_entity *entity;
1037        unsigned int num_inputs;
1038        unsigned int size;
1039        unsigned int i;
1040
1041        extra_size = roundup(extra_size, sizeof(*entity->pads));
1042        if (num_pads)
1043                num_inputs = type & UVC_TERM_OUTPUT ? num_pads : num_pads - 1;
1044        else
1045                num_inputs = 0;
1046        size = sizeof(*entity) + extra_size + sizeof(*entity->pads) * num_pads
1047             + num_inputs;
1048        entity = kzalloc(size, GFP_KERNEL);
1049        if (entity == NULL)
1050                return NULL;
1051
1052        entity->id = id;
1053        entity->type = type;
1054
1055        /*
1056         * Set the GUID for standard entity types. For extension units, the GUID
1057         * is initialized by the caller.
1058         */
1059        switch (type) {
1060        case UVC_EXT_GPIO_UNIT:
1061                memcpy(entity->guid, uvc_gpio_guid, 16);
1062                break;
1063        case UVC_ITT_CAMERA:
1064                memcpy(entity->guid, uvc_camera_guid, 16);
1065                break;
1066        case UVC_ITT_MEDIA_TRANSPORT_INPUT:
1067                memcpy(entity->guid, uvc_media_transport_input_guid, 16);
1068                break;
1069        case UVC_VC_PROCESSING_UNIT:
1070                memcpy(entity->guid, uvc_processing_guid, 16);
1071                break;
1072        }
1073
1074        entity->num_links = 0;
1075        entity->num_pads = num_pads;
1076        entity->pads = ((void *)(entity + 1)) + extra_size;
1077
1078        for (i = 0; i < num_inputs; ++i)
1079                entity->pads[i].flags = MEDIA_PAD_FL_SINK;
1080        if (!UVC_ENTITY_IS_OTERM(entity) && num_pads)
1081                entity->pads[num_pads-1].flags = MEDIA_PAD_FL_SOURCE;
1082
1083        entity->bNrInPins = num_inputs;
1084        entity->baSourceID = (u8 *)(&entity->pads[num_pads]);
1085
1086        return entity;
1087}
1088
1089/* Parse vendor-specific extensions. */
1090static int uvc_parse_vendor_control(struct uvc_device *dev,
1091        const unsigned char *buffer, int buflen)
1092{
1093        struct usb_device *udev = dev->udev;
1094        struct usb_host_interface *alts = dev->intf->cur_altsetting;
1095        struct uvc_entity *unit;
1096        unsigned int n, p;
1097        int handled = 0;
1098
1099        switch (le16_to_cpu(dev->udev->descriptor.idVendor)) {
1100        case 0x046d:            /* Logitech */
1101                if (buffer[1] != 0x41 || buffer[2] != 0x01)
1102                        break;
1103
1104                /* Logitech implements several vendor specific functions
1105                 * through vendor specific extension units (LXU).
1106                 *
1107                 * The LXU descriptors are similar to XU descriptors
1108                 * (see "USB Device Video Class for Video Devices", section
1109                 * 3.7.2.6 "Extension Unit Descriptor") with the following
1110                 * differences:
1111                 *
1112                 * ----------------------------------------------------------
1113                 * 0            bLength         1        Number
1114                 *      Size of this descriptor, in bytes: 24+p+n*2
1115                 * ----------------------------------------------------------
1116                 * 23+p+n       bmControlsType  N       Bitmap
1117                 *      Individual bits in the set are defined:
1118                 *      0: Absolute
1119                 *      1: Relative
1120                 *
1121                 *      This bitset is mapped exactly the same as bmControls.
1122                 * ----------------------------------------------------------
1123                 * 23+p+n*2     bReserved       1       Boolean
1124                 * ----------------------------------------------------------
1125                 * 24+p+n*2     iExtension      1       Index
1126                 *      Index of a string descriptor that describes this
1127                 *      extension unit.
1128                 * ----------------------------------------------------------
1129                 */
1130                p = buflen >= 22 ? buffer[21] : 0;
1131                n = buflen >= 25 + p ? buffer[22+p] : 0;
1132
1133                if (buflen < 25 + p + 2*n) {
1134                        uvc_dbg(dev, DESCR,
1135                                "device %d videocontrol interface %d EXTENSION_UNIT error\n",
1136                                udev->devnum, alts->desc.bInterfaceNumber);
1137                        break;
1138                }
1139
1140                unit = uvc_alloc_entity(UVC_VC_EXTENSION_UNIT, buffer[3],
1141                                        p + 1, 2*n);
1142                if (unit == NULL)
1143                        return -ENOMEM;
1144
1145                memcpy(unit->guid, &buffer[4], 16);
1146                unit->extension.bNumControls = buffer[20];
1147                memcpy(unit->baSourceID, &buffer[22], p);
1148                unit->extension.bControlSize = buffer[22+p];
1149                unit->extension.bmControls = (u8 *)unit + sizeof(*unit);
1150                unit->extension.bmControlsType = (u8 *)unit + sizeof(*unit)
1151                                               + n;
1152                memcpy(unit->extension.bmControls, &buffer[23+p], 2*n);
1153
1154                if (buffer[24+p+2*n] != 0)
1155                        usb_string(udev, buffer[24+p+2*n], unit->name,
1156                                   sizeof(unit->name));
1157                else
1158                        sprintf(unit->name, "Extension %u", buffer[3]);
1159
1160                list_add_tail(&unit->list, &dev->entities);
1161                handled = 1;
1162                break;
1163        }
1164
1165        return handled;
1166}
1167
1168static int uvc_parse_standard_control(struct uvc_device *dev,
1169        const unsigned char *buffer, int buflen)
1170{
1171        struct usb_device *udev = dev->udev;
1172        struct uvc_entity *unit, *term;
1173        struct usb_interface *intf;
1174        struct usb_host_interface *alts = dev->intf->cur_altsetting;
1175        unsigned int i, n, p, len;
1176        u16 type;
1177
1178        switch (buffer[2]) {
1179        case UVC_VC_HEADER:
1180                n = buflen >= 12 ? buffer[11] : 0;
1181
1182                if (buflen < 12 + n) {
1183                        uvc_dbg(dev, DESCR,
1184                                "device %d videocontrol interface %d HEADER error\n",
1185                                udev->devnum, alts->desc.bInterfaceNumber);
1186                        return -EINVAL;
1187                }
1188
1189                dev->uvc_version = get_unaligned_le16(&buffer[3]);
1190                dev->clock_frequency = get_unaligned_le32(&buffer[7]);
1191
1192                /* Parse all USB Video Streaming interfaces. */
1193                for (i = 0; i < n; ++i) {
1194                        intf = usb_ifnum_to_if(udev, buffer[12+i]);
1195                        if (intf == NULL) {
1196                                uvc_dbg(dev, DESCR,
1197                                        "device %d interface %d doesn't exists\n",
1198                                        udev->devnum, i);
1199                                continue;
1200                        }
1201
1202                        uvc_parse_streaming(dev, intf);
1203                }
1204                break;
1205
1206        case UVC_VC_INPUT_TERMINAL:
1207                if (buflen < 8) {
1208                        uvc_dbg(dev, DESCR,
1209                                "device %d videocontrol interface %d INPUT_TERMINAL error\n",
1210                                udev->devnum, alts->desc.bInterfaceNumber);
1211                        return -EINVAL;
1212                }
1213
1214                /*
1215                 * Reject invalid terminal types that would cause issues:
1216                 *
1217                 * - The high byte must be non-zero, otherwise it would be
1218                 *   confused with a unit.
1219                 *
1220                 * - Bit 15 must be 0, as we use it internally as a terminal
1221                 *   direction flag.
1222                 *
1223                 * Other unknown types are accepted.
1224                 */
1225                type = get_unaligned_le16(&buffer[4]);
1226                if ((type & 0x7f00) == 0 || (type & 0x8000) != 0) {
1227                        uvc_dbg(dev, DESCR,
1228                                "device %d videocontrol interface %d INPUT_TERMINAL %d has invalid type 0x%04x, skipping\n",
1229                                udev->devnum, alts->desc.bInterfaceNumber,
1230                                buffer[3], type);
1231                        return 0;
1232                }
1233
1234                n = 0;
1235                p = 0;
1236                len = 8;
1237
1238                if (type == UVC_ITT_CAMERA) {
1239                        n = buflen >= 15 ? buffer[14] : 0;
1240                        len = 15;
1241
1242                } else if (type == UVC_ITT_MEDIA_TRANSPORT_INPUT) {
1243                        n = buflen >= 9 ? buffer[8] : 0;
1244                        p = buflen >= 10 + n ? buffer[9+n] : 0;
1245                        len = 10;
1246                }
1247
1248                if (buflen < len + n + p) {
1249                        uvc_dbg(dev, DESCR,
1250                                "device %d videocontrol interface %d INPUT_TERMINAL error\n",
1251                                udev->devnum, alts->desc.bInterfaceNumber);
1252                        return -EINVAL;
1253                }
1254
1255                term = uvc_alloc_entity(type | UVC_TERM_INPUT, buffer[3],
1256                                        1, n + p);
1257                if (term == NULL)
1258                        return -ENOMEM;
1259
1260                if (UVC_ENTITY_TYPE(term) == UVC_ITT_CAMERA) {
1261                        term->camera.bControlSize = n;
1262                        term->camera.bmControls = (u8 *)term + sizeof(*term);
1263                        term->camera.wObjectiveFocalLengthMin =
1264                                get_unaligned_le16(&buffer[8]);
1265                        term->camera.wObjectiveFocalLengthMax =
1266                                get_unaligned_le16(&buffer[10]);
1267                        term->camera.wOcularFocalLength =
1268                                get_unaligned_le16(&buffer[12]);
1269                        memcpy(term->camera.bmControls, &buffer[15], n);
1270                } else if (UVC_ENTITY_TYPE(term) ==
1271                           UVC_ITT_MEDIA_TRANSPORT_INPUT) {
1272                        term->media.bControlSize = n;
1273                        term->media.bmControls = (u8 *)term + sizeof(*term);
1274                        term->media.bTransportModeSize = p;
1275                        term->media.bmTransportModes = (u8 *)term
1276                                                     + sizeof(*term) + n;
1277                        memcpy(term->media.bmControls, &buffer[9], n);
1278                        memcpy(term->media.bmTransportModes, &buffer[10+n], p);
1279                }
1280
1281                if (buffer[7] != 0)
1282                        usb_string(udev, buffer[7], term->name,
1283                                   sizeof(term->name));
1284                else if (UVC_ENTITY_TYPE(term) == UVC_ITT_CAMERA)
1285                        sprintf(term->name, "Camera %u", buffer[3]);
1286                else if (UVC_ENTITY_TYPE(term) == UVC_ITT_MEDIA_TRANSPORT_INPUT)
1287                        sprintf(term->name, "Media %u", buffer[3]);
1288                else
1289                        sprintf(term->name, "Input %u", buffer[3]);
1290
1291                list_add_tail(&term->list, &dev->entities);
1292                break;
1293
1294        case UVC_VC_OUTPUT_TERMINAL:
1295                if (buflen < 9) {
1296                        uvc_dbg(dev, DESCR,
1297                                "device %d videocontrol interface %d OUTPUT_TERMINAL error\n",
1298                                udev->devnum, alts->desc.bInterfaceNumber);
1299                        return -EINVAL;
1300                }
1301
1302                /* Make sure the terminal type MSB is not null, otherwise it
1303                 * could be confused with a unit.
1304                 */
1305                type = get_unaligned_le16(&buffer[4]);
1306                if ((type & 0xff00) == 0) {
1307                        uvc_dbg(dev, DESCR,
1308                                "device %d videocontrol interface %d OUTPUT_TERMINAL %d has invalid type 0x%04x, skipping\n",
1309                                udev->devnum, alts->desc.bInterfaceNumber,
1310                                buffer[3], type);
1311                        return 0;
1312                }
1313
1314                term = uvc_alloc_entity(type | UVC_TERM_OUTPUT, buffer[3],
1315                                        1, 0);
1316                if (term == NULL)
1317                        return -ENOMEM;
1318
1319                memcpy(term->baSourceID, &buffer[7], 1);
1320
1321                if (buffer[8] != 0)
1322                        usb_string(udev, buffer[8], term->name,
1323                                   sizeof(term->name));
1324                else
1325                        sprintf(term->name, "Output %u", buffer[3]);
1326
1327                list_add_tail(&term->list, &dev->entities);
1328                break;
1329
1330        case UVC_VC_SELECTOR_UNIT:
1331                p = buflen >= 5 ? buffer[4] : 0;
1332
1333                if (buflen < 5 || buflen < 6 + p) {
1334                        uvc_dbg(dev, DESCR,
1335                                "device %d videocontrol interface %d SELECTOR_UNIT error\n",
1336                                udev->devnum, alts->desc.bInterfaceNumber);
1337                        return -EINVAL;
1338                }
1339
1340                unit = uvc_alloc_entity(buffer[2], buffer[3], p + 1, 0);
1341                if (unit == NULL)
1342                        return -ENOMEM;
1343
1344                memcpy(unit->baSourceID, &buffer[5], p);
1345
1346                if (buffer[5+p] != 0)
1347                        usb_string(udev, buffer[5+p], unit->name,
1348                                   sizeof(unit->name));
1349                else
1350                        sprintf(unit->name, "Selector %u", buffer[3]);
1351
1352                list_add_tail(&unit->list, &dev->entities);
1353                break;
1354
1355        case UVC_VC_PROCESSING_UNIT:
1356                n = buflen >= 8 ? buffer[7] : 0;
1357                p = dev->uvc_version >= 0x0110 ? 10 : 9;
1358
1359                if (buflen < p + n) {
1360                        uvc_dbg(dev, DESCR,
1361                                "device %d videocontrol interface %d PROCESSING_UNIT error\n",
1362                                udev->devnum, alts->desc.bInterfaceNumber);
1363                        return -EINVAL;
1364                }
1365
1366                unit = uvc_alloc_entity(buffer[2], buffer[3], 2, n);
1367                if (unit == NULL)
1368                        return -ENOMEM;
1369
1370                memcpy(unit->baSourceID, &buffer[4], 1);
1371                unit->processing.wMaxMultiplier =
1372                        get_unaligned_le16(&buffer[5]);
1373                unit->processing.bControlSize = buffer[7];
1374                unit->processing.bmControls = (u8 *)unit + sizeof(*unit);
1375                memcpy(unit->processing.bmControls, &buffer[8], n);
1376                if (dev->uvc_version >= 0x0110)
1377                        unit->processing.bmVideoStandards = buffer[9+n];
1378
1379                if (buffer[8+n] != 0)
1380                        usb_string(udev, buffer[8+n], unit->name,
1381                                   sizeof(unit->name));
1382                else
1383                        sprintf(unit->name, "Processing %u", buffer[3]);
1384
1385                list_add_tail(&unit->list, &dev->entities);
1386                break;
1387
1388        case UVC_VC_EXTENSION_UNIT:
1389                p = buflen >= 22 ? buffer[21] : 0;
1390                n = buflen >= 24 + p ? buffer[22+p] : 0;
1391
1392                if (buflen < 24 + p + n) {
1393                        uvc_dbg(dev, DESCR,
1394                                "device %d videocontrol interface %d EXTENSION_UNIT error\n",
1395                                udev->devnum, alts->desc.bInterfaceNumber);
1396                        return -EINVAL;
1397                }
1398
1399                unit = uvc_alloc_entity(buffer[2], buffer[3], p + 1, n);
1400                if (unit == NULL)
1401                        return -ENOMEM;
1402
1403                memcpy(unit->guid, &buffer[4], 16);
1404                unit->extension.bNumControls = buffer[20];
1405                memcpy(unit->baSourceID, &buffer[22], p);
1406                unit->extension.bControlSize = buffer[22+p];
1407                unit->extension.bmControls = (u8 *)unit + sizeof(*unit);
1408                memcpy(unit->extension.bmControls, &buffer[23+p], n);
1409
1410                if (buffer[23+p+n] != 0)
1411                        usb_string(udev, buffer[23+p+n], unit->name,
1412                                   sizeof(unit->name));
1413                else
1414                        sprintf(unit->name, "Extension %u", buffer[3]);
1415
1416                list_add_tail(&unit->list, &dev->entities);
1417                break;
1418
1419        default:
1420                uvc_dbg(dev, DESCR,
1421                        "Found an unknown CS_INTERFACE descriptor (%u)\n",
1422                        buffer[2]);
1423                break;
1424        }
1425
1426        return 0;
1427}
1428
1429static int uvc_parse_control(struct uvc_device *dev)
1430{
1431        struct usb_host_interface *alts = dev->intf->cur_altsetting;
1432        unsigned char *buffer = alts->extra;
1433        int buflen = alts->extralen;
1434        int ret;
1435
1436        /* Parse the default alternate setting only, as the UVC specification
1437         * defines a single alternate setting, the default alternate setting
1438         * zero.
1439         */
1440
1441        while (buflen > 2) {
1442                if (uvc_parse_vendor_control(dev, buffer, buflen) ||
1443                    buffer[1] != USB_DT_CS_INTERFACE)
1444                        goto next_descriptor;
1445
1446                if ((ret = uvc_parse_standard_control(dev, buffer, buflen)) < 0)
1447                        return ret;
1448
1449next_descriptor:
1450                buflen -= buffer[0];
1451                buffer += buffer[0];
1452        }
1453
1454        /* Check if the optional status endpoint is present. Built-in iSight
1455         * webcams have an interrupt endpoint but spit proprietary data that
1456         * don't conform to the UVC status endpoint messages. Don't try to
1457         * handle the interrupt endpoint for those cameras.
1458         */
1459        if (alts->desc.bNumEndpoints == 1 &&
1460            !(dev->quirks & UVC_QUIRK_BUILTIN_ISIGHT)) {
1461                struct usb_host_endpoint *ep = &alts->endpoint[0];
1462                struct usb_endpoint_descriptor *desc = &ep->desc;
1463
1464                if (usb_endpoint_is_int_in(desc) &&
1465                    le16_to_cpu(desc->wMaxPacketSize) >= 8 &&
1466                    desc->bInterval != 0) {
1467                        uvc_dbg(dev, DESCR,
1468                                "Found a Status endpoint (addr %02x)\n",
1469                                desc->bEndpointAddress);
1470                        dev->int_ep = ep;
1471                }
1472        }
1473
1474        return 0;
1475}
1476
1477/* -----------------------------------------------------------------------------
1478 * Privacy GPIO
1479 */
1480
1481static void uvc_gpio_event(struct uvc_device *dev)
1482{
1483        struct uvc_entity *unit = dev->gpio_unit;
1484        struct uvc_video_chain *chain;
1485        u8 new_val;
1486
1487        if (!unit)
1488                return;
1489
1490        new_val = gpiod_get_value_cansleep(unit->gpio.gpio_privacy);
1491
1492        /* GPIO entities are always on the first chain. */
1493        chain = list_first_entry(&dev->chains, struct uvc_video_chain, list);
1494        uvc_ctrl_status_event(chain, unit->controls, &new_val);
1495}
1496
1497static int uvc_gpio_get_cur(struct uvc_device *dev, struct uvc_entity *entity,
1498                            u8 cs, void *data, u16 size)
1499{
1500        if (cs != UVC_CT_PRIVACY_CONTROL || size < 1)
1501                return -EINVAL;
1502
1503        *(u8 *)data = gpiod_get_value_cansleep(entity->gpio.gpio_privacy);
1504
1505        return 0;
1506}
1507
1508static int uvc_gpio_get_info(struct uvc_device *dev, struct uvc_entity *entity,
1509                             u8 cs, u8 *caps)
1510{
1511        if (cs != UVC_CT_PRIVACY_CONTROL)
1512                return -EINVAL;
1513
1514        *caps = UVC_CONTROL_CAP_GET | UVC_CONTROL_CAP_AUTOUPDATE;
1515        return 0;
1516}
1517
1518static irqreturn_t uvc_gpio_irq(int irq, void *data)
1519{
1520        struct uvc_device *dev = data;
1521
1522        uvc_gpio_event(dev);
1523        return IRQ_HANDLED;
1524}
1525
1526static int uvc_gpio_parse(struct uvc_device *dev)
1527{
1528        struct uvc_entity *unit;
1529        struct gpio_desc *gpio_privacy;
1530        int irq;
1531
1532        gpio_privacy = devm_gpiod_get_optional(&dev->udev->dev, "privacy",
1533                                               GPIOD_IN);
1534        if (IS_ERR_OR_NULL(gpio_privacy))
1535                return PTR_ERR_OR_ZERO(gpio_privacy);
1536
1537        unit = uvc_alloc_entity(UVC_EXT_GPIO_UNIT, UVC_EXT_GPIO_UNIT_ID, 0, 1);
1538        if (!unit)
1539                return -ENOMEM;
1540
1541        irq = gpiod_to_irq(gpio_privacy);
1542        if (irq < 0) {
1543                if (irq != EPROBE_DEFER)
1544                        dev_err(&dev->udev->dev,
1545                                "No IRQ for privacy GPIO (%d)\n", irq);
1546                return irq;
1547        }
1548
1549        unit->gpio.gpio_privacy = gpio_privacy;
1550        unit->gpio.irq = irq;
1551        unit->gpio.bControlSize = 1;
1552        unit->gpio.bmControls = (u8 *)unit + sizeof(*unit);
1553        unit->gpio.bmControls[0] = 1;
1554        unit->get_cur = uvc_gpio_get_cur;
1555        unit->get_info = uvc_gpio_get_info;
1556        strscpy(unit->name, "GPIO", sizeof(unit->name));
1557
1558        list_add_tail(&unit->list, &dev->entities);
1559
1560        dev->gpio_unit = unit;
1561
1562        return 0;
1563}
1564
1565static int uvc_gpio_init_irq(struct uvc_device *dev)
1566{
1567        struct uvc_entity *unit = dev->gpio_unit;
1568
1569        if (!unit || unit->gpio.irq < 0)
1570                return 0;
1571
1572        return devm_request_threaded_irq(&dev->udev->dev, unit->gpio.irq, NULL,
1573                                         uvc_gpio_irq,
1574                                         IRQF_ONESHOT | IRQF_TRIGGER_FALLING |
1575                                         IRQF_TRIGGER_RISING,
1576                                         "uvc_privacy_gpio", dev);
1577}
1578
1579/* ------------------------------------------------------------------------
1580 * UVC device scan
1581 */
1582
1583/*
1584 * Scan the UVC descriptors to locate a chain starting at an Output Terminal
1585 * and containing the following units:
1586 *
1587 * - one or more Output Terminals (USB Streaming or Display)
1588 * - zero or one Processing Unit
1589 * - zero, one or more single-input Selector Units
1590 * - zero or one multiple-input Selector Units, provided all inputs are
1591 *   connected to input terminals
1592 * - zero, one or mode single-input Extension Units
1593 * - one or more Input Terminals (Camera, External or USB Streaming)
1594 *
1595 * The terminal and units must match on of the following structures:
1596 *
1597 * ITT_*(0) -> +---------+    +---------+    +---------+ -> TT_STREAMING(0)
1598 * ...         | SU{0,1} | -> | PU{0,1} | -> | XU{0,n} |    ...
1599 * ITT_*(n) -> +---------+    +---------+    +---------+ -> TT_STREAMING(n)
1600 *
1601 *                 +---------+    +---------+ -> OTT_*(0)
1602 * TT_STREAMING -> | PU{0,1} | -> | XU{0,n} |    ...
1603 *                 +---------+    +---------+ -> OTT_*(n)
1604 *
1605 * The Processing Unit and Extension Units can be in any order. Additional
1606 * Extension Units connected to the main chain as single-unit branches are
1607 * also supported. Single-input Selector Units are ignored.
1608 */
1609static int uvc_scan_chain_entity(struct uvc_video_chain *chain,
1610        struct uvc_entity *entity)
1611{
1612        switch (UVC_ENTITY_TYPE(entity)) {
1613        case UVC_VC_EXTENSION_UNIT:
1614                uvc_dbg_cont(PROBE, " <- XU %d", entity->id);
1615
1616                if (entity->bNrInPins != 1) {
1617                        uvc_dbg(chain->dev, DESCR,
1618                                "Extension unit %d has more than 1 input pin\n",
1619                                entity->id);
1620                        return -1;
1621                }
1622
1623                break;
1624
1625        case UVC_VC_PROCESSING_UNIT:
1626                uvc_dbg_cont(PROBE, " <- PU %d", entity->id);
1627
1628                if (chain->processing != NULL) {
1629                        uvc_dbg(chain->dev, DESCR,
1630                                "Found multiple Processing Units in chain\n");
1631                        return -1;
1632                }
1633
1634                chain->processing = entity;
1635                break;
1636
1637        case UVC_VC_SELECTOR_UNIT:
1638                uvc_dbg_cont(PROBE, " <- SU %d", entity->id);
1639
1640                /* Single-input selector units are ignored. */
1641                if (entity->bNrInPins == 1)
1642                        break;
1643
1644                if (chain->selector != NULL) {
1645                        uvc_dbg(chain->dev, DESCR,
1646                                "Found multiple Selector Units in chain\n");
1647                        return -1;
1648                }
1649
1650                chain->selector = entity;
1651                break;
1652
1653        case UVC_ITT_VENDOR_SPECIFIC:
1654        case UVC_ITT_CAMERA:
1655        case UVC_ITT_MEDIA_TRANSPORT_INPUT:
1656                uvc_dbg_cont(PROBE, " <- IT %d\n", entity->id);
1657
1658                break;
1659
1660        case UVC_OTT_VENDOR_SPECIFIC:
1661        case UVC_OTT_DISPLAY:
1662        case UVC_OTT_MEDIA_TRANSPORT_OUTPUT:
1663                uvc_dbg_cont(PROBE, " OT %d", entity->id);
1664
1665                break;
1666
1667        case UVC_TT_STREAMING:
1668                if (UVC_ENTITY_IS_ITERM(entity))
1669                        uvc_dbg_cont(PROBE, " <- IT %d\n", entity->id);
1670                else
1671                        uvc_dbg_cont(PROBE, " OT %d", entity->id);
1672
1673                break;
1674
1675        default:
1676                uvc_dbg(chain->dev, DESCR,
1677                        "Unsupported entity type 0x%04x found in chain\n",
1678                        UVC_ENTITY_TYPE(entity));
1679                return -1;
1680        }
1681
1682        list_add_tail(&entity->chain, &chain->entities);
1683        return 0;
1684}
1685
1686static int uvc_scan_chain_forward(struct uvc_video_chain *chain,
1687        struct uvc_entity *entity, struct uvc_entity *prev)
1688{
1689        struct uvc_entity *forward;
1690        int found;
1691
1692        /* Forward scan */
1693        forward = NULL;
1694        found = 0;
1695
1696        while (1) {
1697                forward = uvc_entity_by_reference(chain->dev, entity->id,
1698                        forward);
1699                if (forward == NULL)
1700                        break;
1701                if (forward == prev)
1702                        continue;
1703                if (forward->chain.next || forward->chain.prev) {
1704                        uvc_dbg(chain->dev, DESCR,
1705                                "Found reference to entity %d already in chain\n",
1706                                forward->id);
1707                        return -EINVAL;
1708                }
1709
1710                switch (UVC_ENTITY_TYPE(forward)) {
1711                case UVC_VC_EXTENSION_UNIT:
1712                        if (forward->bNrInPins != 1) {
1713                                uvc_dbg(chain->dev, DESCR,
1714                                        "Extension unit %d has more than 1 input pin\n",
1715                                        forward->id);
1716                                return -EINVAL;
1717                        }
1718
1719                        /*
1720                         * Some devices reference an output terminal as the
1721                         * source of extension units. This is incorrect, as
1722                         * output terminals only have an input pin, and thus
1723                         * can't be connected to any entity in the forward
1724                         * direction. The resulting topology would cause issues
1725                         * when registering the media controller graph. To
1726                         * avoid this problem, connect the extension unit to
1727                         * the source of the output terminal instead.
1728                         */
1729                        if (UVC_ENTITY_IS_OTERM(entity)) {
1730                                struct uvc_entity *source;
1731
1732                                source = uvc_entity_by_id(chain->dev,
1733                                                          entity->baSourceID[0]);
1734                                if (!source) {
1735                                        uvc_dbg(chain->dev, DESCR,
1736                                                "Can't connect extension unit %u in chain\n",
1737                                                forward->id);
1738                                        break;
1739                                }
1740
1741                                forward->baSourceID[0] = source->id;
1742                        }
1743
1744                        list_add_tail(&forward->chain, &chain->entities);
1745                        if (!found)
1746                                uvc_dbg_cont(PROBE, " (->");
1747
1748                        uvc_dbg_cont(PROBE, " XU %d", forward->id);
1749                        found = 1;
1750                        break;
1751
1752                case UVC_OTT_VENDOR_SPECIFIC:
1753                case UVC_OTT_DISPLAY:
1754                case UVC_OTT_MEDIA_TRANSPORT_OUTPUT:
1755                case UVC_TT_STREAMING:
1756                        if (UVC_ENTITY_IS_ITERM(forward)) {
1757                                uvc_dbg(chain->dev, DESCR,
1758                                        "Unsupported input terminal %u\n",
1759                                        forward->id);
1760                                return -EINVAL;
1761                        }
1762
1763                        if (UVC_ENTITY_IS_OTERM(entity)) {
1764                                uvc_dbg(chain->dev, DESCR,
1765                                        "Unsupported connection between output terminals %u and %u\n",
1766                                        entity->id, forward->id);
1767                                break;
1768                        }
1769
1770                        list_add_tail(&forward->chain, &chain->entities);
1771                        if (!found)
1772                                uvc_dbg_cont(PROBE, " (->");
1773
1774                        uvc_dbg_cont(PROBE, " OT %d", forward->id);
1775                        found = 1;
1776                        break;
1777                }
1778        }
1779        if (found)
1780                uvc_dbg_cont(PROBE, ")");
1781
1782        return 0;
1783}
1784
1785static int uvc_scan_chain_backward(struct uvc_video_chain *chain,
1786        struct uvc_entity **_entity)
1787{
1788        struct uvc_entity *entity = *_entity;
1789        struct uvc_entity *term;
1790        int id = -EINVAL, i;
1791
1792        switch (UVC_ENTITY_TYPE(entity)) {
1793        case UVC_VC_EXTENSION_UNIT:
1794        case UVC_VC_PROCESSING_UNIT:
1795                id = entity->baSourceID[0];
1796                break;
1797
1798        case UVC_VC_SELECTOR_UNIT:
1799                /* Single-input selector units are ignored. */
1800                if (entity->bNrInPins == 1) {
1801                        id = entity->baSourceID[0];
1802                        break;
1803                }
1804
1805                uvc_dbg_cont(PROBE, " <- IT");
1806
1807                chain->selector = entity;
1808                for (i = 0; i < entity->bNrInPins; ++i) {
1809                        id = entity->baSourceID[i];
1810                        term = uvc_entity_by_id(chain->dev, id);
1811                        if (term == NULL || !UVC_ENTITY_IS_ITERM(term)) {
1812                                uvc_dbg(chain->dev, DESCR,
1813                                        "Selector unit %d input %d isn't connected to an input terminal\n",
1814                                        entity->id, i);
1815                                return -1;
1816                        }
1817
1818                        if (term->chain.next || term->chain.prev) {
1819                                uvc_dbg(chain->dev, DESCR,
1820                                        "Found reference to entity %d already in chain\n",
1821                                        term->id);
1822                                return -EINVAL;
1823                        }
1824
1825                        uvc_dbg_cont(PROBE, " %d", term->id);
1826
1827                        list_add_tail(&term->chain, &chain->entities);
1828                        uvc_scan_chain_forward(chain, term, entity);
1829                }
1830
1831                uvc_dbg_cont(PROBE, "\n");
1832
1833                id = 0;
1834                break;
1835
1836        case UVC_ITT_VENDOR_SPECIFIC:
1837        case UVC_ITT_CAMERA:
1838        case UVC_ITT_MEDIA_TRANSPORT_INPUT:
1839        case UVC_OTT_VENDOR_SPECIFIC:
1840        case UVC_OTT_DISPLAY:
1841        case UVC_OTT_MEDIA_TRANSPORT_OUTPUT:
1842        case UVC_TT_STREAMING:
1843                id = UVC_ENTITY_IS_OTERM(entity) ? entity->baSourceID[0] : 0;
1844                break;
1845        }
1846
1847        if (id <= 0) {
1848                *_entity = NULL;
1849                return id;
1850        }
1851
1852        entity = uvc_entity_by_id(chain->dev, id);
1853        if (entity == NULL) {
1854                uvc_dbg(chain->dev, DESCR,
1855                        "Found reference to unknown entity %d\n", id);
1856                return -EINVAL;
1857        }
1858
1859        *_entity = entity;
1860        return 0;
1861}
1862
1863static int uvc_scan_chain(struct uvc_video_chain *chain,
1864                          struct uvc_entity *term)
1865{
1866        struct uvc_entity *entity, *prev;
1867
1868        uvc_dbg(chain->dev, PROBE, "Scanning UVC chain:");
1869
1870        entity = term;
1871        prev = NULL;
1872
1873        while (entity != NULL) {
1874                /* Entity must not be part of an existing chain */
1875                if (entity->chain.next || entity->chain.prev) {
1876                        uvc_dbg(chain->dev, DESCR,
1877                                "Found reference to entity %d already in chain\n",
1878                                entity->id);
1879                        return -EINVAL;
1880                }
1881
1882                /* Process entity */
1883                if (uvc_scan_chain_entity(chain, entity) < 0)
1884                        return -EINVAL;
1885
1886                /* Forward scan */
1887                if (uvc_scan_chain_forward(chain, entity, prev) < 0)
1888                        return -EINVAL;
1889
1890                /* Backward scan */
1891                prev = entity;
1892                if (uvc_scan_chain_backward(chain, &entity) < 0)
1893                        return -EINVAL;
1894        }
1895
1896        return 0;
1897}
1898
1899static unsigned int uvc_print_terms(struct list_head *terms, u16 dir,
1900                char *buffer)
1901{
1902        struct uvc_entity *term;
1903        unsigned int nterms = 0;
1904        char *p = buffer;
1905
1906        list_for_each_entry(term, terms, chain) {
1907                if (!UVC_ENTITY_IS_TERM(term) ||
1908                    UVC_TERM_DIRECTION(term) != dir)
1909                        continue;
1910
1911                if (nterms)
1912                        p += sprintf(p, ",");
1913                if (++nterms >= 4) {
1914                        p += sprintf(p, "...");
1915                        break;
1916                }
1917                p += sprintf(p, "%u", term->id);
1918        }
1919
1920        return p - buffer;
1921}
1922
1923static const char *uvc_print_chain(struct uvc_video_chain *chain)
1924{
1925        static char buffer[43];
1926        char *p = buffer;
1927
1928        p += uvc_print_terms(&chain->entities, UVC_TERM_INPUT, p);
1929        p += sprintf(p, " -> ");
1930        uvc_print_terms(&chain->entities, UVC_TERM_OUTPUT, p);
1931
1932        return buffer;
1933}
1934
1935static struct uvc_video_chain *uvc_alloc_chain(struct uvc_device *dev)
1936{
1937        struct uvc_video_chain *chain;
1938
1939        chain = kzalloc(sizeof(*chain), GFP_KERNEL);
1940        if (chain == NULL)
1941                return NULL;
1942
1943        INIT_LIST_HEAD(&chain->entities);
1944        mutex_init(&chain->ctrl_mutex);
1945        chain->dev = dev;
1946        v4l2_prio_init(&chain->prio);
1947
1948        return chain;
1949}
1950
1951/*
1952 * Fallback heuristic for devices that don't connect units and terminals in a
1953 * valid chain.
1954 *
1955 * Some devices have invalid baSourceID references, causing uvc_scan_chain()
1956 * to fail, but if we just take the entities we can find and put them together
1957 * in the most sensible chain we can think of, turns out they do work anyway.
1958 * Note: This heuristic assumes there is a single chain.
1959 *
1960 * At the time of writing, devices known to have such a broken chain are
1961 *  - Acer Integrated Camera (5986:055a)
1962 *  - Realtek rtl157a7 (0bda:57a7)
1963 */
1964static int uvc_scan_fallback(struct uvc_device *dev)
1965{
1966        struct uvc_video_chain *chain;
1967        struct uvc_entity *iterm = NULL;
1968        struct uvc_entity *oterm = NULL;
1969        struct uvc_entity *entity;
1970        struct uvc_entity *prev;
1971
1972        /*
1973         * Start by locating the input and output terminals. We only support
1974         * devices with exactly one of each for now.
1975         */
1976        list_for_each_entry(entity, &dev->entities, list) {
1977                if (UVC_ENTITY_IS_ITERM(entity)) {
1978                        if (iterm)
1979                                return -EINVAL;
1980                        iterm = entity;
1981                }
1982
1983                if (UVC_ENTITY_IS_OTERM(entity)) {
1984                        if (oterm)
1985                                return -EINVAL;
1986                        oterm = entity;
1987                }
1988        }
1989
1990        if (iterm == NULL || oterm == NULL)
1991                return -EINVAL;
1992
1993        /* Allocate the chain and fill it. */
1994        chain = uvc_alloc_chain(dev);
1995        if (chain == NULL)
1996                return -ENOMEM;
1997
1998        if (uvc_scan_chain_entity(chain, oterm) < 0)
1999                goto error;
2000
2001        prev = oterm;
2002
2003        /*
2004         * Add all Processing and Extension Units with two pads. The order
2005         * doesn't matter much, use reverse list traversal to connect units in
2006         * UVC descriptor order as we build the chain from output to input. This
2007         * leads to units appearing in the order meant by the manufacturer for
2008         * the cameras known to require this heuristic.
2009         */
2010        list_for_each_entry_reverse(entity, &dev->entities, list) {
2011                if (entity->type != UVC_VC_PROCESSING_UNIT &&
2012                    entity->type != UVC_VC_EXTENSION_UNIT)
2013                        continue;
2014
2015                if (entity->num_pads != 2)
2016                        continue;
2017
2018                if (uvc_scan_chain_entity(chain, entity) < 0)
2019                        goto error;
2020
2021                prev->baSourceID[0] = entity->id;
2022                prev = entity;
2023        }
2024
2025        if (uvc_scan_chain_entity(chain, iterm) < 0)
2026                goto error;
2027
2028        prev->baSourceID[0] = iterm->id;
2029
2030        list_add_tail(&chain->list, &dev->chains);
2031
2032        uvc_dbg(dev, PROBE, "Found a video chain by fallback heuristic (%s)\n",
2033                uvc_print_chain(chain));
2034
2035        return 0;
2036
2037error:
2038        kfree(chain);
2039        return -EINVAL;
2040}
2041
2042/*
2043 * Scan the device for video chains and register video devices.
2044 *
2045 * Chains are scanned starting at their output terminals and walked backwards.
2046 */
2047static int uvc_scan_device(struct uvc_device *dev)
2048{
2049        struct uvc_video_chain *chain;
2050        struct uvc_entity *term;
2051
2052        list_for_each_entry(term, &dev->entities, list) {
2053                if (!UVC_ENTITY_IS_OTERM(term))
2054                        continue;
2055
2056                /* If the terminal is already included in a chain, skip it.
2057                 * This can happen for chains that have multiple output
2058                 * terminals, where all output terminals beside the first one
2059                 * will be inserted in the chain in forward scans.
2060                 */
2061                if (term->chain.next || term->chain.prev)
2062                        continue;
2063
2064                chain = uvc_alloc_chain(dev);
2065                if (chain == NULL)
2066                        return -ENOMEM;
2067
2068                term->flags |= UVC_ENTITY_FLAG_DEFAULT;
2069
2070                if (uvc_scan_chain(chain, term) < 0) {
2071                        kfree(chain);
2072                        continue;
2073                }
2074
2075                uvc_dbg(dev, PROBE, "Found a valid video chain (%s)\n",
2076                        uvc_print_chain(chain));
2077
2078                list_add_tail(&chain->list, &dev->chains);
2079        }
2080
2081        if (list_empty(&dev->chains))
2082                uvc_scan_fallback(dev);
2083
2084        if (list_empty(&dev->chains)) {
2085                dev_info(&dev->udev->dev, "No valid video chain found.\n");
2086                return -1;
2087        }
2088
2089        /* Add GPIO entity to the first chain. */
2090        if (dev->gpio_unit) {
2091                chain = list_first_entry(&dev->chains,
2092                                         struct uvc_video_chain, list);
2093                list_add_tail(&dev->gpio_unit->chain, &chain->entities);
2094        }
2095
2096        return 0;
2097}
2098
2099/* ------------------------------------------------------------------------
2100 * Video device registration and unregistration
2101 */
2102
2103/*
2104 * Delete the UVC device.
2105 *
2106 * Called by the kernel when the last reference to the uvc_device structure
2107 * is released.
2108 *
2109 * As this function is called after or during disconnect(), all URBs have
2110 * already been cancelled by the USB core. There is no need to kill the
2111 * interrupt URB manually.
2112 */
2113static void uvc_delete(struct kref *kref)
2114{
2115        struct uvc_device *dev = container_of(kref, struct uvc_device, ref);
2116        struct list_head *p, *n;
2117
2118        uvc_status_cleanup(dev);
2119        uvc_ctrl_cleanup_device(dev);
2120
2121        usb_put_intf(dev->intf);
2122        usb_put_dev(dev->udev);
2123
2124#ifdef CONFIG_MEDIA_CONTROLLER
2125        media_device_cleanup(&dev->mdev);
2126#endif
2127
2128        list_for_each_safe(p, n, &dev->chains) {
2129                struct uvc_video_chain *chain;
2130                chain = list_entry(p, struct uvc_video_chain, list);
2131                kfree(chain);
2132        }
2133
2134        list_for_each_safe(p, n, &dev->entities) {
2135                struct uvc_entity *entity;
2136                entity = list_entry(p, struct uvc_entity, list);
2137#ifdef CONFIG_MEDIA_CONTROLLER
2138                uvc_mc_cleanup_entity(entity);
2139#endif
2140                kfree(entity);
2141        }
2142
2143        list_for_each_safe(p, n, &dev->streams) {
2144                struct uvc_streaming *streaming;
2145                streaming = list_entry(p, struct uvc_streaming, list);
2146                usb_driver_release_interface(&uvc_driver.driver,
2147                        streaming->intf);
2148                uvc_stream_delete(streaming);
2149        }
2150
2151        kfree(dev);
2152}
2153
2154static void uvc_release(struct video_device *vdev)
2155{
2156        struct uvc_streaming *stream = video_get_drvdata(vdev);
2157        struct uvc_device *dev = stream->dev;
2158
2159        kref_put(&dev->ref, uvc_delete);
2160}
2161
2162/*
2163 * Unregister the video devices.
2164 */
2165static void uvc_unregister_video(struct uvc_device *dev)
2166{
2167        struct uvc_streaming *stream;
2168
2169        list_for_each_entry(stream, &dev->streams, list) {
2170                if (!video_is_registered(&stream->vdev))
2171                        continue;
2172
2173                video_unregister_device(&stream->vdev);
2174                video_unregister_device(&stream->meta.vdev);
2175
2176                uvc_debugfs_cleanup_stream(stream);
2177        }
2178
2179        uvc_status_unregister(dev);
2180
2181        if (dev->vdev.dev)
2182                v4l2_device_unregister(&dev->vdev);
2183#ifdef CONFIG_MEDIA_CONTROLLER
2184        if (media_devnode_is_registered(dev->mdev.devnode))
2185                media_device_unregister(&dev->mdev);
2186#endif
2187}
2188
2189int uvc_register_video_device(struct uvc_device *dev,
2190                              struct uvc_streaming *stream,
2191                              struct video_device *vdev,
2192                              struct uvc_video_queue *queue,
2193                              enum v4l2_buf_type type,
2194                              const struct v4l2_file_operations *fops,
2195                              const struct v4l2_ioctl_ops *ioctl_ops)
2196{
2197        int ret;
2198
2199        /* Initialize the video buffers queue. */
2200        ret = uvc_queue_init(queue, type, !uvc_no_drop_param);
2201        if (ret)
2202                return ret;
2203
2204        /* Register the device with V4L. */
2205
2206        /*
2207         * We already hold a reference to dev->udev. The video device will be
2208         * unregistered before the reference is released, so we don't need to
2209         * get another one.
2210         */
2211        vdev->v4l2_dev = &dev->vdev;
2212        vdev->fops = fops;
2213        vdev->ioctl_ops = ioctl_ops;
2214        vdev->release = uvc_release;
2215        vdev->prio = &stream->chain->prio;
2216        if (type == V4L2_BUF_TYPE_VIDEO_OUTPUT)
2217                vdev->vfl_dir = VFL_DIR_TX;
2218        else
2219                vdev->vfl_dir = VFL_DIR_RX;
2220
2221        switch (type) {
2222        case V4L2_BUF_TYPE_VIDEO_CAPTURE:
2223        default:
2224                vdev->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
2225                break;
2226        case V4L2_BUF_TYPE_VIDEO_OUTPUT:
2227                vdev->device_caps = V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_STREAMING;
2228                break;
2229        case V4L2_BUF_TYPE_META_CAPTURE:
2230                vdev->device_caps = V4L2_CAP_META_CAPTURE | V4L2_CAP_STREAMING;
2231                break;
2232        }
2233
2234        strscpy(vdev->name, dev->name, sizeof(vdev->name));
2235
2236        /*
2237         * Set the driver data before calling video_register_device, otherwise
2238         * the file open() handler might race us.
2239         */
2240        video_set_drvdata(vdev, stream);
2241
2242        ret = video_register_device(vdev, VFL_TYPE_VIDEO, -1);
2243        if (ret < 0) {
2244                dev_err(&stream->intf->dev,
2245                        "Failed to register %s device (%d).\n",
2246                        v4l2_type_names[type], ret);
2247                return ret;
2248        }
2249
2250        kref_get(&dev->ref);
2251        return 0;
2252}
2253
2254static int uvc_register_video(struct uvc_device *dev,
2255                struct uvc_streaming *stream)
2256{
2257        int ret;
2258
2259        /* Initialize the streaming interface with default parameters. */
2260        ret = uvc_video_init(stream);
2261        if (ret < 0) {
2262                dev_err(&stream->intf->dev,
2263                        "Failed to initialize the device (%d).\n", ret);
2264                return ret;
2265        }
2266
2267        if (stream->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
2268                stream->chain->caps |= V4L2_CAP_VIDEO_CAPTURE
2269                        | V4L2_CAP_META_CAPTURE;
2270        else
2271                stream->chain->caps |= V4L2_CAP_VIDEO_OUTPUT;
2272
2273        uvc_debugfs_init_stream(stream);
2274
2275        /* Register the device with V4L. */
2276        return uvc_register_video_device(dev, stream, &stream->vdev,
2277                                         &stream->queue, stream->type,
2278                                         &uvc_fops, &uvc_ioctl_ops);
2279}
2280
2281/*
2282 * Register all video devices in all chains.
2283 */
2284static int uvc_register_terms(struct uvc_device *dev,
2285        struct uvc_video_chain *chain)
2286{
2287        struct uvc_streaming *stream;
2288        struct uvc_entity *term;
2289        int ret;
2290
2291        list_for_each_entry(term, &chain->entities, chain) {
2292                if (UVC_ENTITY_TYPE(term) != UVC_TT_STREAMING)
2293                        continue;
2294
2295                stream = uvc_stream_by_id(dev, term->id);
2296                if (stream == NULL) {
2297                        dev_info(&dev->udev->dev,
2298                                 "No streaming interface found for terminal %u.",
2299                                 term->id);
2300                        continue;
2301                }
2302
2303                stream->chain = chain;
2304                ret = uvc_register_video(dev, stream);
2305                if (ret < 0)
2306                        return ret;
2307
2308                /* Register a metadata node, but ignore a possible failure,
2309                 * complete registration of video nodes anyway.
2310                 */
2311                uvc_meta_register(stream);
2312
2313                term->vdev = &stream->vdev;
2314        }
2315
2316        return 0;
2317}
2318
2319static int uvc_register_chains(struct uvc_device *dev)
2320{
2321        struct uvc_video_chain *chain;
2322        int ret;
2323
2324        list_for_each_entry(chain, &dev->chains, list) {
2325                ret = uvc_register_terms(dev, chain);
2326                if (ret < 0)
2327                        return ret;
2328
2329#ifdef CONFIG_MEDIA_CONTROLLER
2330                ret = uvc_mc_register_entities(chain);
2331                if (ret < 0)
2332                        dev_info(&dev->udev->dev,
2333                                 "Failed to register entities (%d).\n", ret);
2334#endif
2335        }
2336
2337        return 0;
2338}
2339
2340/* ------------------------------------------------------------------------
2341 * USB probe, disconnect, suspend and resume
2342 */
2343
2344static const struct uvc_device_info uvc_quirk_none = { 0 };
2345
2346static int uvc_probe(struct usb_interface *intf,
2347                     const struct usb_device_id *id)
2348{
2349        struct usb_device *udev = interface_to_usbdev(intf);
2350        struct uvc_device *dev;
2351        const struct uvc_device_info *info =
2352                (const struct uvc_device_info *)id->driver_info;
2353        int function;
2354        int ret;
2355
2356        /* Allocate memory for the device and initialize it. */
2357        dev = kzalloc(sizeof(*dev), GFP_KERNEL);
2358        if (dev == NULL)
2359                return -ENOMEM;
2360
2361        INIT_LIST_HEAD(&dev->entities);
2362        INIT_LIST_HEAD(&dev->chains);
2363        INIT_LIST_HEAD(&dev->streams);
2364        kref_init(&dev->ref);
2365        atomic_set(&dev->nmappings, 0);
2366        mutex_init(&dev->lock);
2367
2368        dev->udev = usb_get_dev(udev);
2369        dev->intf = usb_get_intf(intf);
2370        dev->intfnum = intf->cur_altsetting->desc.bInterfaceNumber;
2371        dev->info = info ? info : &uvc_quirk_none;
2372        dev->quirks = uvc_quirks_param == -1
2373                    ? dev->info->quirks : uvc_quirks_param;
2374
2375        if (id->idVendor && id->idProduct)
2376                uvc_dbg(dev, PROBE, "Probing known UVC device %s (%04x:%04x)\n",
2377                        udev->devpath, id->idVendor, id->idProduct);
2378        else
2379                uvc_dbg(dev, PROBE, "Probing generic UVC device %s\n",
2380                        udev->devpath);
2381
2382        if (udev->product != NULL)
2383                strscpy(dev->name, udev->product, sizeof(dev->name));
2384        else
2385                snprintf(dev->name, sizeof(dev->name),
2386                         "UVC Camera (%04x:%04x)",
2387                         le16_to_cpu(udev->descriptor.idVendor),
2388                         le16_to_cpu(udev->descriptor.idProduct));
2389
2390        /*
2391         * Add iFunction or iInterface to names when available as additional
2392         * distinguishers between interfaces. iFunction is prioritized over
2393         * iInterface which matches Windows behavior at the point of writing.
2394         */
2395        if (intf->intf_assoc && intf->intf_assoc->iFunction != 0)
2396                function = intf->intf_assoc->iFunction;
2397        else
2398                function = intf->cur_altsetting->desc.iInterface;
2399        if (function != 0) {
2400                size_t len;
2401
2402                strlcat(dev->name, ": ", sizeof(dev->name));
2403                len = strlen(dev->name);
2404                usb_string(udev, function, dev->name + len,
2405                           sizeof(dev->name) - len);
2406        }
2407
2408        /* Initialize the media device. */
2409#ifdef CONFIG_MEDIA_CONTROLLER
2410        dev->mdev.dev = &intf->dev;
2411        strscpy(dev->mdev.model, dev->name, sizeof(dev->mdev.model));
2412        if (udev->serial)
2413                strscpy(dev->mdev.serial, udev->serial,
2414                        sizeof(dev->mdev.serial));
2415        usb_make_path(udev, dev->mdev.bus_info, sizeof(dev->mdev.bus_info));
2416        dev->mdev.hw_revision = le16_to_cpu(udev->descriptor.bcdDevice);
2417        media_device_init(&dev->mdev);
2418
2419        dev->vdev.mdev = &dev->mdev;
2420#endif
2421
2422        /* Parse the Video Class control descriptor. */
2423        if (uvc_parse_control(dev) < 0) {
2424                uvc_dbg(dev, PROBE, "Unable to parse UVC descriptors\n");
2425                goto error;
2426        }
2427
2428        /* Parse the associated GPIOs. */
2429        if (uvc_gpio_parse(dev) < 0) {
2430                uvc_dbg(dev, PROBE, "Unable to parse UVC GPIOs\n");
2431                goto error;
2432        }
2433
2434        dev_info(&dev->udev->dev, "Found UVC %u.%02x device %s (%04x:%04x)\n",
2435                 dev->uvc_version >> 8, dev->uvc_version & 0xff,
2436                 udev->product ? udev->product : "<unnamed>",
2437                 le16_to_cpu(udev->descriptor.idVendor),
2438                 le16_to_cpu(udev->descriptor.idProduct));
2439
2440        if (dev->quirks != dev->info->quirks) {
2441                dev_info(&dev->udev->dev,
2442                         "Forcing device quirks to 0x%x by module parameter for testing purpose.\n",
2443                         dev->quirks);
2444                dev_info(&dev->udev->dev,
2445                         "Please report required quirks to the linux-uvc-devel mailing list.\n");
2446        }
2447
2448        if (dev->info->uvc_version) {
2449                dev->uvc_version = dev->info->uvc_version;
2450                dev_info(&dev->udev->dev, "Forcing UVC version to %u.%02x\n",
2451                         dev->uvc_version >> 8, dev->uvc_version & 0xff);
2452        }
2453
2454        /* Register the V4L2 device. */
2455        if (v4l2_device_register(&intf->dev, &dev->vdev) < 0)
2456                goto error;
2457
2458        /* Initialize controls. */
2459        if (uvc_ctrl_init_device(dev) < 0)
2460                goto error;
2461
2462        /* Scan the device for video chains. */
2463        if (uvc_scan_device(dev) < 0)
2464                goto error;
2465
2466        /* Register video device nodes. */
2467        if (uvc_register_chains(dev) < 0)
2468                goto error;
2469
2470#ifdef CONFIG_MEDIA_CONTROLLER
2471        /* Register the media device node */
2472        if (media_device_register(&dev->mdev) < 0)
2473                goto error;
2474#endif
2475        /* Save our data pointer in the interface data. */
2476        usb_set_intfdata(intf, dev);
2477
2478        /* Initialize the interrupt URB. */
2479        if ((ret = uvc_status_init(dev)) < 0) {
2480                dev_info(&dev->udev->dev,
2481                         "Unable to initialize the status endpoint (%d), status interrupt will not be supported.\n",
2482                         ret);
2483        }
2484
2485        ret = uvc_gpio_init_irq(dev);
2486        if (ret < 0) {
2487                dev_err(&dev->udev->dev,
2488                        "Unable to request privacy GPIO IRQ (%d)\n", ret);
2489                goto error;
2490        }
2491
2492        uvc_dbg(dev, PROBE, "UVC device initialized\n");
2493        usb_enable_autosuspend(udev);
2494        return 0;
2495
2496error:
2497        uvc_unregister_video(dev);
2498        kref_put(&dev->ref, uvc_delete);
2499        return -ENODEV;
2500}
2501
2502static void uvc_disconnect(struct usb_interface *intf)
2503{
2504        struct uvc_device *dev = usb_get_intfdata(intf);
2505
2506        /* Set the USB interface data to NULL. This can be done outside the
2507         * lock, as there's no other reader.
2508         */
2509        usb_set_intfdata(intf, NULL);
2510
2511        if (intf->cur_altsetting->desc.bInterfaceSubClass ==
2512            UVC_SC_VIDEOSTREAMING)
2513                return;
2514
2515        uvc_unregister_video(dev);
2516        kref_put(&dev->ref, uvc_delete);
2517}
2518
2519static int uvc_suspend(struct usb_interface *intf, pm_message_t message)
2520{
2521        struct uvc_device *dev = usb_get_intfdata(intf);
2522        struct uvc_streaming *stream;
2523
2524        uvc_dbg(dev, SUSPEND, "Suspending interface %u\n",
2525                intf->cur_altsetting->desc.bInterfaceNumber);
2526
2527        /* Controls are cached on the fly so they don't need to be saved. */
2528        if (intf->cur_altsetting->desc.bInterfaceSubClass ==
2529            UVC_SC_VIDEOCONTROL) {
2530                mutex_lock(&dev->lock);
2531                if (dev->users)
2532                        uvc_status_stop(dev);
2533                mutex_unlock(&dev->lock);
2534                return 0;
2535        }
2536
2537        list_for_each_entry(stream, &dev->streams, list) {
2538                if (stream->intf == intf)
2539                        return uvc_video_suspend(stream);
2540        }
2541
2542        uvc_dbg(dev, SUSPEND,
2543                "Suspend: video streaming USB interface mismatch\n");
2544        return -EINVAL;
2545}
2546
2547static int __uvc_resume(struct usb_interface *intf, int reset)
2548{
2549        struct uvc_device *dev = usb_get_intfdata(intf);
2550        struct uvc_streaming *stream;
2551        int ret = 0;
2552
2553        uvc_dbg(dev, SUSPEND, "Resuming interface %u\n",
2554                intf->cur_altsetting->desc.bInterfaceNumber);
2555
2556        if (intf->cur_altsetting->desc.bInterfaceSubClass ==
2557            UVC_SC_VIDEOCONTROL) {
2558                if (reset) {
2559                        ret = uvc_ctrl_restore_values(dev);
2560                        if (ret < 0)
2561                                return ret;
2562                }
2563
2564                mutex_lock(&dev->lock);
2565                if (dev->users)
2566                        ret = uvc_status_start(dev, GFP_NOIO);
2567                mutex_unlock(&dev->lock);
2568
2569                return ret;
2570        }
2571
2572        list_for_each_entry(stream, &dev->streams, list) {
2573                if (stream->intf == intf) {
2574                        ret = uvc_video_resume(stream, reset);
2575                        if (ret < 0)
2576                                uvc_queue_streamoff(&stream->queue,
2577                                                    stream->queue.queue.type);
2578                        return ret;
2579                }
2580        }
2581
2582        uvc_dbg(dev, SUSPEND,
2583                "Resume: video streaming USB interface mismatch\n");
2584        return -EINVAL;
2585}
2586
2587static int uvc_resume(struct usb_interface *intf)
2588{
2589        return __uvc_resume(intf, 0);
2590}
2591
2592static int uvc_reset_resume(struct usb_interface *intf)
2593{
2594        return __uvc_resume(intf, 1);
2595}
2596
2597/* ------------------------------------------------------------------------
2598 * Module parameters
2599 */
2600
2601static int uvc_clock_param_get(char *buffer, const struct kernel_param *kp)
2602{
2603        if (uvc_clock_param == CLOCK_MONOTONIC)
2604                return sprintf(buffer, "CLOCK_MONOTONIC");
2605        else
2606                return sprintf(buffer, "CLOCK_REALTIME");
2607}
2608
2609static int uvc_clock_param_set(const char *val, const struct kernel_param *kp)
2610{
2611        if (strncasecmp(val, "clock_", strlen("clock_")) == 0)
2612                val += strlen("clock_");
2613
2614        if (strcasecmp(val, "monotonic") == 0)
2615                uvc_clock_param = CLOCK_MONOTONIC;
2616        else if (strcasecmp(val, "realtime") == 0)
2617                uvc_clock_param = CLOCK_REALTIME;
2618        else
2619                return -EINVAL;
2620
2621        return 0;
2622}
2623
2624module_param_call(clock, uvc_clock_param_set, uvc_clock_param_get,
2625                  &uvc_clock_param, S_IRUGO|S_IWUSR);
2626MODULE_PARM_DESC(clock, "Video buffers timestamp clock");
2627module_param_named(hwtimestamps, uvc_hw_timestamps_param, uint, S_IRUGO|S_IWUSR);
2628MODULE_PARM_DESC(hwtimestamps, "Use hardware timestamps");
2629module_param_named(nodrop, uvc_no_drop_param, uint, S_IRUGO|S_IWUSR);
2630MODULE_PARM_DESC(nodrop, "Don't drop incomplete frames");
2631module_param_named(quirks, uvc_quirks_param, uint, S_IRUGO|S_IWUSR);
2632MODULE_PARM_DESC(quirks, "Forced device quirks");
2633module_param_named(trace, uvc_dbg_param, uint, S_IRUGO|S_IWUSR);
2634MODULE_PARM_DESC(trace, "Trace level bitmask");
2635module_param_named(timeout, uvc_timeout_param, uint, S_IRUGO|S_IWUSR);
2636MODULE_PARM_DESC(timeout, "Streaming control requests timeout");
2637
2638/* ------------------------------------------------------------------------
2639 * Driver initialization and cleanup
2640 */
2641
2642static const struct uvc_device_info uvc_quirk_probe_minmax = {
2643        .quirks = UVC_QUIRK_PROBE_MINMAX,
2644};
2645
2646static const struct uvc_device_info uvc_quirk_fix_bandwidth = {
2647        .quirks = UVC_QUIRK_FIX_BANDWIDTH,
2648};
2649
2650static const struct uvc_device_info uvc_quirk_probe_def = {
2651        .quirks = UVC_QUIRK_PROBE_DEF,
2652};
2653
2654static const struct uvc_device_info uvc_quirk_stream_no_fid = {
2655        .quirks = UVC_QUIRK_STREAM_NO_FID,
2656};
2657
2658static const struct uvc_device_info uvc_quirk_force_y8 = {
2659        .quirks = UVC_QUIRK_FORCE_Y8,
2660};
2661
2662#define UVC_INFO_QUIRK(q) (kernel_ulong_t)&(struct uvc_device_info){.quirks = q}
2663#define UVC_INFO_META(m) (kernel_ulong_t)&(struct uvc_device_info) \
2664        {.meta_format = m}
2665
2666/*
2667 * The Logitech cameras listed below have their interface class set to
2668 * VENDOR_SPEC because they don't announce themselves as UVC devices, even
2669 * though they are compliant.
2670 */
2671static const struct usb_device_id uvc_ids[] = {
2672        /* LogiLink Wireless Webcam */
2673        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2674                                | USB_DEVICE_ID_MATCH_INT_INFO,
2675          .idVendor             = 0x0416,
2676          .idProduct            = 0xa91a,
2677          .bInterfaceClass      = USB_CLASS_VIDEO,
2678          .bInterfaceSubClass   = 1,
2679          .bInterfaceProtocol   = 0,
2680          .driver_info          = (kernel_ulong_t)&uvc_quirk_probe_minmax },
2681        /* Genius eFace 2025 */
2682        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2683                                | USB_DEVICE_ID_MATCH_INT_INFO,
2684          .idVendor             = 0x0458,
2685          .idProduct            = 0x706e,
2686          .bInterfaceClass      = USB_CLASS_VIDEO,
2687          .bInterfaceSubClass   = 1,
2688          .bInterfaceProtocol   = 0,
2689          .driver_info          = (kernel_ulong_t)&uvc_quirk_probe_minmax },
2690        /* Microsoft Lifecam NX-6000 */
2691        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2692                                | USB_DEVICE_ID_MATCH_INT_INFO,
2693          .idVendor             = 0x045e,
2694          .idProduct            = 0x00f8,
2695          .bInterfaceClass      = USB_CLASS_VIDEO,
2696          .bInterfaceSubClass   = 1,
2697          .bInterfaceProtocol   = 0,
2698          .driver_info          = (kernel_ulong_t)&uvc_quirk_probe_minmax },
2699        /* Microsoft Lifecam NX-3000 */
2700        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2701                                | USB_DEVICE_ID_MATCH_INT_INFO,
2702          .idVendor             = 0x045e,
2703          .idProduct            = 0x0721,
2704          .bInterfaceClass      = USB_CLASS_VIDEO,
2705          .bInterfaceSubClass   = 1,
2706          .bInterfaceProtocol   = 0,
2707          .driver_info          = (kernel_ulong_t)&uvc_quirk_probe_def },
2708        /* Microsoft Lifecam VX-7000 */
2709        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2710                                | USB_DEVICE_ID_MATCH_INT_INFO,
2711          .idVendor             = 0x045e,
2712          .idProduct            = 0x0723,
2713          .bInterfaceClass      = USB_CLASS_VIDEO,
2714          .bInterfaceSubClass   = 1,
2715          .bInterfaceProtocol   = 0,
2716          .driver_info          = (kernel_ulong_t)&uvc_quirk_probe_minmax },
2717        /* Logitech Quickcam Fusion */
2718        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2719                                | USB_DEVICE_ID_MATCH_INT_INFO,
2720          .idVendor             = 0x046d,
2721          .idProduct            = 0x08c1,
2722          .bInterfaceClass      = USB_CLASS_VENDOR_SPEC,
2723          .bInterfaceSubClass   = 1,
2724          .bInterfaceProtocol   = 0 },
2725        /* Logitech Quickcam Orbit MP */
2726        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2727                                | USB_DEVICE_ID_MATCH_INT_INFO,
2728          .idVendor             = 0x046d,
2729          .idProduct            = 0x08c2,
2730          .bInterfaceClass      = USB_CLASS_VENDOR_SPEC,
2731          .bInterfaceSubClass   = 1,
2732          .bInterfaceProtocol   = 0 },
2733        /* Logitech Quickcam Pro for Notebook */
2734        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2735                                | USB_DEVICE_ID_MATCH_INT_INFO,
2736          .idVendor             = 0x046d,
2737          .idProduct            = 0x08c3,
2738          .bInterfaceClass      = USB_CLASS_VENDOR_SPEC,
2739          .bInterfaceSubClass   = 1,
2740          .bInterfaceProtocol   = 0 },
2741        /* Logitech Quickcam Pro 5000 */
2742        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2743                                | USB_DEVICE_ID_MATCH_INT_INFO,
2744          .idVendor             = 0x046d,
2745          .idProduct            = 0x08c5,
2746          .bInterfaceClass      = USB_CLASS_VENDOR_SPEC,
2747          .bInterfaceSubClass   = 1,
2748          .bInterfaceProtocol   = 0 },
2749        /* Logitech Quickcam OEM Dell Notebook */
2750        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2751                                | USB_DEVICE_ID_MATCH_INT_INFO,
2752          .idVendor             = 0x046d,
2753          .idProduct            = 0x08c6,
2754          .bInterfaceClass      = USB_CLASS_VENDOR_SPEC,
2755          .bInterfaceSubClass   = 1,
2756          .bInterfaceProtocol   = 0 },
2757        /* Logitech Quickcam OEM Cisco VT Camera II */
2758        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2759                                | USB_DEVICE_ID_MATCH_INT_INFO,
2760          .idVendor             = 0x046d,
2761          .idProduct            = 0x08c7,
2762          .bInterfaceClass      = USB_CLASS_VENDOR_SPEC,
2763          .bInterfaceSubClass   = 1,
2764          .bInterfaceProtocol   = 0 },
2765        /* Logitech HD Pro Webcam C920 */
2766        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2767                                | USB_DEVICE_ID_MATCH_INT_INFO,
2768          .idVendor             = 0x046d,
2769          .idProduct            = 0x082d,
2770          .bInterfaceClass      = USB_CLASS_VIDEO,
2771          .bInterfaceSubClass   = 1,
2772          .bInterfaceProtocol   = 0,
2773          .driver_info          = UVC_INFO_QUIRK(UVC_QUIRK_RESTORE_CTRLS_ON_INIT) },
2774        /* Chicony CNF7129 (Asus EEE 100HE) */
2775        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2776                                | USB_DEVICE_ID_MATCH_INT_INFO,
2777          .idVendor             = 0x04f2,
2778          .idProduct            = 0xb071,
2779          .bInterfaceClass      = USB_CLASS_VIDEO,
2780          .bInterfaceSubClass   = 1,
2781          .bInterfaceProtocol   = 0,
2782          .driver_info          = UVC_INFO_QUIRK(UVC_QUIRK_RESTRICT_FRAME_RATE) },
2783        /* Alcor Micro AU3820 (Future Boy PC USB Webcam) */
2784        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2785                                | USB_DEVICE_ID_MATCH_INT_INFO,
2786          .idVendor             = 0x058f,
2787          .idProduct            = 0x3820,
2788          .bInterfaceClass      = USB_CLASS_VIDEO,
2789          .bInterfaceSubClass   = 1,
2790          .bInterfaceProtocol   = 0,
2791          .driver_info          = (kernel_ulong_t)&uvc_quirk_probe_minmax },
2792        /* Dell XPS m1530 */
2793        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2794                                | USB_DEVICE_ID_MATCH_INT_INFO,
2795          .idVendor             = 0x05a9,
2796          .idProduct            = 0x2640,
2797          .bInterfaceClass      = USB_CLASS_VIDEO,
2798          .bInterfaceSubClass   = 1,
2799          .bInterfaceProtocol   = 0,
2800          .driver_info          = (kernel_ulong_t)&uvc_quirk_probe_def },
2801        /* Dell SP2008WFP Monitor */
2802        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2803                                | USB_DEVICE_ID_MATCH_INT_INFO,
2804          .idVendor             = 0x05a9,
2805          .idProduct            = 0x2641,
2806          .bInterfaceClass      = USB_CLASS_VIDEO,
2807          .bInterfaceSubClass   = 1,
2808          .bInterfaceProtocol   = 0,
2809          .driver_info          = (kernel_ulong_t)&uvc_quirk_probe_def },
2810        /* Dell Alienware X51 */
2811        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2812                                | USB_DEVICE_ID_MATCH_INT_INFO,
2813          .idVendor             = 0x05a9,
2814          .idProduct            = 0x2643,
2815          .bInterfaceClass      = USB_CLASS_VIDEO,
2816          .bInterfaceSubClass   = 1,
2817          .bInterfaceProtocol   = 0,
2818          .driver_info          = (kernel_ulong_t)&uvc_quirk_probe_def },
2819        /* Dell Studio Hybrid 140g (OmniVision webcam) */
2820        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2821                                | USB_DEVICE_ID_MATCH_INT_INFO,
2822          .idVendor             = 0x05a9,
2823          .idProduct            = 0x264a,
2824          .bInterfaceClass      = USB_CLASS_VIDEO,
2825          .bInterfaceSubClass   = 1,
2826          .bInterfaceProtocol   = 0,
2827          .driver_info          = (kernel_ulong_t)&uvc_quirk_probe_def },
2828        /* Dell XPS M1330 (OmniVision OV7670 webcam) */
2829        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2830                                | USB_DEVICE_ID_MATCH_INT_INFO,
2831          .idVendor             = 0x05a9,
2832          .idProduct            = 0x7670,
2833          .bInterfaceClass      = USB_CLASS_VIDEO,
2834          .bInterfaceSubClass   = 1,
2835          .bInterfaceProtocol   = 0,
2836          .driver_info          = (kernel_ulong_t)&uvc_quirk_probe_def },
2837        /* Apple Built-In iSight */
2838        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2839                                | USB_DEVICE_ID_MATCH_INT_INFO,
2840          .idVendor             = 0x05ac,
2841          .idProduct            = 0x8501,
2842          .bInterfaceClass      = USB_CLASS_VIDEO,
2843          .bInterfaceSubClass   = 1,
2844          .bInterfaceProtocol   = 0,
2845          .driver_info          = UVC_INFO_QUIRK(UVC_QUIRK_PROBE_MINMAX
2846                                        | UVC_QUIRK_BUILTIN_ISIGHT) },
2847        /* Apple Built-In iSight via iBridge */
2848        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2849                                | USB_DEVICE_ID_MATCH_INT_INFO,
2850          .idVendor             = 0x05ac,
2851          .idProduct            = 0x8600,
2852          .bInterfaceClass      = USB_CLASS_VIDEO,
2853          .bInterfaceSubClass   = 1,
2854          .bInterfaceProtocol   = 0,
2855          .driver_info          = (kernel_ulong_t)&uvc_quirk_probe_def },
2856        /* Foxlink ("HP Webcam" on HP Mini 5103) */
2857        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2858                                | USB_DEVICE_ID_MATCH_INT_INFO,
2859          .idVendor             = 0x05c8,
2860          .idProduct            = 0x0403,
2861          .bInterfaceClass      = USB_CLASS_VIDEO,
2862          .bInterfaceSubClass   = 1,
2863          .bInterfaceProtocol   = 0,
2864          .driver_info          = (kernel_ulong_t)&uvc_quirk_fix_bandwidth },
2865        /* Genesys Logic USB 2.0 PC Camera */
2866        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2867                                | USB_DEVICE_ID_MATCH_INT_INFO,
2868          .idVendor             = 0x05e3,
2869          .idProduct            = 0x0505,
2870          .bInterfaceClass      = USB_CLASS_VIDEO,
2871          .bInterfaceSubClass   = 1,
2872          .bInterfaceProtocol   = 0,
2873          .driver_info          = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
2874        /* Hercules Classic Silver */
2875        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2876                                | USB_DEVICE_ID_MATCH_INT_INFO,
2877          .idVendor             = 0x06f8,
2878          .idProduct            = 0x300c,
2879          .bInterfaceClass      = USB_CLASS_VIDEO,
2880          .bInterfaceSubClass   = 1,
2881          .bInterfaceProtocol   = 0,
2882          .driver_info          = (kernel_ulong_t)&uvc_quirk_fix_bandwidth },
2883        /* ViMicro Vega */
2884        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2885                                | USB_DEVICE_ID_MATCH_INT_INFO,
2886          .idVendor             = 0x0ac8,
2887          .idProduct            = 0x332d,
2888          .bInterfaceClass      = USB_CLASS_VIDEO,
2889          .bInterfaceSubClass   = 1,
2890          .bInterfaceProtocol   = 0,
2891          .driver_info          = (kernel_ulong_t)&uvc_quirk_fix_bandwidth },
2892        /* ViMicro - Minoru3D */
2893        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2894                                | USB_DEVICE_ID_MATCH_INT_INFO,
2895          .idVendor             = 0x0ac8,
2896          .idProduct            = 0x3410,
2897          .bInterfaceClass      = USB_CLASS_VIDEO,
2898          .bInterfaceSubClass   = 1,
2899          .bInterfaceProtocol   = 0,
2900          .driver_info          = (kernel_ulong_t)&uvc_quirk_fix_bandwidth },
2901        /* ViMicro Venus - Minoru3D */
2902        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2903                                | USB_DEVICE_ID_MATCH_INT_INFO,
2904          .idVendor             = 0x0ac8,
2905          .idProduct            = 0x3420,
2906          .bInterfaceClass      = USB_CLASS_VIDEO,
2907          .bInterfaceSubClass   = 1,
2908          .bInterfaceProtocol   = 0,
2909          .driver_info          = (kernel_ulong_t)&uvc_quirk_fix_bandwidth },
2910        /* Ophir Optronics - SPCAM 620U */
2911        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2912                                | USB_DEVICE_ID_MATCH_INT_INFO,
2913          .idVendor             = 0x0bd3,
2914          .idProduct            = 0x0555,
2915          .bInterfaceClass      = USB_CLASS_VIDEO,
2916          .bInterfaceSubClass   = 1,
2917          .bInterfaceProtocol   = 0,
2918          .driver_info          = (kernel_ulong_t)&uvc_quirk_probe_minmax },
2919        /* MT6227 */
2920        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2921                                | USB_DEVICE_ID_MATCH_INT_INFO,
2922          .idVendor             = 0x0e8d,
2923          .idProduct            = 0x0004,
2924          .bInterfaceClass      = USB_CLASS_VIDEO,
2925          .bInterfaceSubClass   = 1,
2926          .bInterfaceProtocol   = 0,
2927          .driver_info          = UVC_INFO_QUIRK(UVC_QUIRK_PROBE_MINMAX
2928                                        | UVC_QUIRK_PROBE_DEF) },
2929        /* IMC Networks (Medion Akoya) */
2930        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2931                                | USB_DEVICE_ID_MATCH_INT_INFO,
2932          .idVendor             = 0x13d3,
2933          .idProduct            = 0x5103,
2934          .bInterfaceClass      = USB_CLASS_VIDEO,
2935          .bInterfaceSubClass   = 1,
2936          .bInterfaceProtocol   = 0,
2937          .driver_info          = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
2938        /* JMicron USB2.0 XGA WebCam */
2939        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2940                                | USB_DEVICE_ID_MATCH_INT_INFO,
2941          .idVendor             = 0x152d,
2942          .idProduct            = 0x0310,
2943          .bInterfaceClass      = USB_CLASS_VIDEO,
2944          .bInterfaceSubClass   = 1,
2945          .bInterfaceProtocol   = 0,
2946          .driver_info          = (kernel_ulong_t)&uvc_quirk_probe_minmax },
2947        /* Syntek (HP Spartan) */
2948        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2949                                | USB_DEVICE_ID_MATCH_INT_INFO,
2950          .idVendor             = 0x174f,
2951          .idProduct            = 0x5212,
2952          .bInterfaceClass      = USB_CLASS_VIDEO,
2953          .bInterfaceSubClass   = 1,
2954          .bInterfaceProtocol   = 0,
2955          .driver_info          = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
2956        /* Syntek (Samsung Q310) */
2957        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2958                                | USB_DEVICE_ID_MATCH_INT_INFO,
2959          .idVendor             = 0x174f,
2960          .idProduct            = 0x5931,
2961          .bInterfaceClass      = USB_CLASS_VIDEO,
2962          .bInterfaceSubClass   = 1,
2963          .bInterfaceProtocol   = 0,
2964          .driver_info          = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
2965        /* Syntek (Packard Bell EasyNote MX52 */
2966        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2967                                | USB_DEVICE_ID_MATCH_INT_INFO,
2968          .idVendor             = 0x174f,
2969          .idProduct            = 0x8a12,
2970          .bInterfaceClass      = USB_CLASS_VIDEO,
2971          .bInterfaceSubClass   = 1,
2972          .bInterfaceProtocol   = 0,
2973          .driver_info          = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
2974        /* Syntek (Asus F9SG) */
2975        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2976                                | USB_DEVICE_ID_MATCH_INT_INFO,
2977          .idVendor             = 0x174f,
2978          .idProduct            = 0x8a31,
2979          .bInterfaceClass      = USB_CLASS_VIDEO,
2980          .bInterfaceSubClass   = 1,
2981          .bInterfaceProtocol   = 0,
2982          .driver_info          = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
2983        /* Syntek (Asus U3S) */
2984        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2985                                | USB_DEVICE_ID_MATCH_INT_INFO,
2986          .idVendor             = 0x174f,
2987          .idProduct            = 0x8a33,
2988          .bInterfaceClass      = USB_CLASS_VIDEO,
2989          .bInterfaceSubClass   = 1,
2990          .bInterfaceProtocol   = 0,
2991          .driver_info          = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
2992        /* Syntek (JAOtech Smart Terminal) */
2993        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
2994                                | USB_DEVICE_ID_MATCH_INT_INFO,
2995          .idVendor             = 0x174f,
2996          .idProduct            = 0x8a34,
2997          .bInterfaceClass      = USB_CLASS_VIDEO,
2998          .bInterfaceSubClass   = 1,
2999          .bInterfaceProtocol   = 0,
3000          .driver_info          = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
3001        /* Miricle 307K */
3002        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
3003                                | USB_DEVICE_ID_MATCH_INT_INFO,
3004          .idVendor             = 0x17dc,
3005          .idProduct            = 0x0202,
3006          .bInterfaceClass      = USB_CLASS_VIDEO,
3007          .bInterfaceSubClass   = 1,
3008          .bInterfaceProtocol   = 0,
3009          .driver_info          = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
3010        /* Lenovo Thinkpad SL400/SL500 */
3011        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
3012                                | USB_DEVICE_ID_MATCH_INT_INFO,
3013          .idVendor             = 0x17ef,
3014          .idProduct            = 0x480b,
3015          .bInterfaceClass      = USB_CLASS_VIDEO,
3016          .bInterfaceSubClass   = 1,
3017          .bInterfaceProtocol   = 0,
3018          .driver_info          = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
3019        /* Aveo Technology USB 2.0 Camera */
3020        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
3021                                | USB_DEVICE_ID_MATCH_INT_INFO,
3022          .idVendor             = 0x1871,
3023          .idProduct            = 0x0306,
3024          .bInterfaceClass      = USB_CLASS_VIDEO,
3025          .bInterfaceSubClass   = 1,
3026          .bInterfaceProtocol   = 0,
3027          .driver_info          = UVC_INFO_QUIRK(UVC_QUIRK_PROBE_MINMAX
3028                                        | UVC_QUIRK_PROBE_EXTRAFIELDS) },
3029        /* Aveo Technology USB 2.0 Camera (Tasco USB Microscope) */
3030        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
3031                                | USB_DEVICE_ID_MATCH_INT_INFO,
3032          .idVendor             = 0x1871,
3033          .idProduct            = 0x0516,
3034          .bInterfaceClass      = USB_CLASS_VENDOR_SPEC,
3035          .bInterfaceSubClass   = 1,
3036          .bInterfaceProtocol   = 0 },
3037        /* Ecamm Pico iMage */
3038        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
3039                                | USB_DEVICE_ID_MATCH_INT_INFO,
3040          .idVendor             = 0x18cd,
3041          .idProduct            = 0xcafe,
3042          .bInterfaceClass      = USB_CLASS_VIDEO,
3043          .bInterfaceSubClass   = 1,
3044          .bInterfaceProtocol   = 0,
3045          .driver_info          = UVC_INFO_QUIRK(UVC_QUIRK_PROBE_EXTRAFIELDS) },
3046        /* Manta MM-353 Plako */
3047        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
3048                                | USB_DEVICE_ID_MATCH_INT_INFO,
3049          .idVendor             = 0x18ec,
3050          .idProduct            = 0x3188,
3051          .bInterfaceClass      = USB_CLASS_VIDEO,
3052          .bInterfaceSubClass   = 1,
3053          .bInterfaceProtocol   = 0,
3054          .driver_info          = (kernel_ulong_t)&uvc_quirk_probe_minmax },
3055        /* FSC WebCam V30S */
3056        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
3057                                | USB_DEVICE_ID_MATCH_INT_INFO,
3058          .idVendor             = 0x18ec,
3059          .idProduct            = 0x3288,
3060          .bInterfaceClass      = USB_CLASS_VIDEO,
3061          .bInterfaceSubClass   = 1,
3062          .bInterfaceProtocol   = 0,
3063          .driver_info          = (kernel_ulong_t)&uvc_quirk_probe_minmax },
3064        /* Arkmicro unbranded */
3065        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
3066                                | USB_DEVICE_ID_MATCH_INT_INFO,
3067          .idVendor             = 0x18ec,
3068          .idProduct            = 0x3290,
3069          .bInterfaceClass      = USB_CLASS_VIDEO,
3070          .bInterfaceSubClass   = 1,
3071          .bInterfaceProtocol   = 0,
3072          .driver_info          = (kernel_ulong_t)&uvc_quirk_probe_def },
3073        /* The Imaging Source USB CCD cameras */
3074        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
3075                                | USB_DEVICE_ID_MATCH_INT_INFO,
3076          .idVendor             = 0x199e,
3077          .idProduct            = 0x8102,
3078          .bInterfaceClass      = USB_CLASS_VENDOR_SPEC,
3079          .bInterfaceSubClass   = 1,
3080          .bInterfaceProtocol   = 0 },
3081        /* Bodelin ProScopeHR */
3082        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
3083                                | USB_DEVICE_ID_MATCH_DEV_HI
3084                                | USB_DEVICE_ID_MATCH_INT_INFO,
3085          .idVendor             = 0x19ab,
3086          .idProduct            = 0x1000,
3087          .bcdDevice_hi         = 0x0126,
3088          .bInterfaceClass      = USB_CLASS_VIDEO,
3089          .bInterfaceSubClass   = 1,
3090          .bInterfaceProtocol   = 0,
3091          .driver_info          = UVC_INFO_QUIRK(UVC_QUIRK_STATUS_INTERVAL) },
3092        /* MSI StarCam 370i */
3093        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
3094                                | USB_DEVICE_ID_MATCH_INT_INFO,
3095          .idVendor             = 0x1b3b,
3096          .idProduct            = 0x2951,
3097          .bInterfaceClass      = USB_CLASS_VIDEO,
3098          .bInterfaceSubClass   = 1,
3099          .bInterfaceProtocol   = 0,
3100          .driver_info          = (kernel_ulong_t)&uvc_quirk_probe_minmax },
3101        /* Generalplus Technology Inc. 808 Camera */
3102        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
3103                                | USB_DEVICE_ID_MATCH_INT_INFO,
3104          .idVendor             = 0x1b3f,
3105          .idProduct            = 0x2002,
3106          .bInterfaceClass      = USB_CLASS_VIDEO,
3107          .bInterfaceSubClass   = 1,
3108          .bInterfaceProtocol   = 0,
3109          .driver_info          = (kernel_ulong_t)&uvc_quirk_probe_minmax },
3110        /* Shenzhen Aoni Electronic Co.,Ltd 2K FHD camera */
3111        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
3112                                | USB_DEVICE_ID_MATCH_INT_INFO,
3113          .idVendor             = 0x1bcf,
3114          .idProduct            = 0x0b40,
3115          .bInterfaceClass      = USB_CLASS_VIDEO,
3116          .bInterfaceSubClass   = 1,
3117          .bInterfaceProtocol   = 0,
3118          .driver_info          = (kernel_ulong_t)&(const struct uvc_device_info){
3119                .uvc_version = 0x010a,
3120          } },
3121        /* SiGma Micro USB Web Camera */
3122        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
3123                                | USB_DEVICE_ID_MATCH_INT_INFO,
3124          .idVendor             = 0x1c4f,
3125          .idProduct            = 0x3000,
3126          .bInterfaceClass      = USB_CLASS_VIDEO,
3127          .bInterfaceSubClass   = 1,
3128          .bInterfaceProtocol   = 0,
3129          .driver_info          = UVC_INFO_QUIRK(UVC_QUIRK_PROBE_MINMAX
3130                                        | UVC_QUIRK_IGNORE_SELECTOR_UNIT) },
3131        /* Oculus VR Positional Tracker DK2 */
3132        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
3133                                | USB_DEVICE_ID_MATCH_INT_INFO,
3134          .idVendor             = 0x2833,
3135          .idProduct            = 0x0201,
3136          .bInterfaceClass      = USB_CLASS_VIDEO,
3137          .bInterfaceSubClass   = 1,
3138          .bInterfaceProtocol   = 0,
3139          .driver_info          = (kernel_ulong_t)&uvc_quirk_force_y8 },
3140        /* Oculus VR Rift Sensor */
3141        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
3142                                | USB_DEVICE_ID_MATCH_INT_INFO,
3143          .idVendor             = 0x2833,
3144          .idProduct            = 0x0211,
3145          .bInterfaceClass      = USB_CLASS_VENDOR_SPEC,
3146          .bInterfaceSubClass   = 1,
3147          .bInterfaceProtocol   = 0,
3148          .driver_info          = (kernel_ulong_t)&uvc_quirk_force_y8 },
3149        /* GEO Semiconductor GC6500 */
3150        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
3151                                | USB_DEVICE_ID_MATCH_INT_INFO,
3152          .idVendor             = 0x29fe,
3153          .idProduct            = 0x4d53,
3154          .bInterfaceClass      = USB_CLASS_VIDEO,
3155          .bInterfaceSubClass   = 1,
3156          .bInterfaceProtocol   = 0,
3157          .driver_info          = UVC_INFO_QUIRK(UVC_QUIRK_FORCE_BPP) },
3158        /* Intel RealSense D4M */
3159        { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
3160                                | USB_DEVICE_ID_MATCH_INT_INFO,
3161          .idVendor             = 0x8086,
3162          .idProduct            = 0x0b03,
3163          .bInterfaceClass      = USB_CLASS_VIDEO,
3164          .bInterfaceSubClass   = 1,
3165          .bInterfaceProtocol   = 0,
3166          .driver_info          = UVC_INFO_META(V4L2_META_FMT_D4XX) },
3167        /* Generic USB Video Class */
3168        { USB_INTERFACE_INFO(USB_CLASS_VIDEO, 1, UVC_PC_PROTOCOL_UNDEFINED) },
3169        { USB_INTERFACE_INFO(USB_CLASS_VIDEO, 1, UVC_PC_PROTOCOL_15) },
3170        {}
3171};
3172
3173MODULE_DEVICE_TABLE(usb, uvc_ids);
3174
3175struct uvc_driver uvc_driver = {
3176        .driver = {
3177                .name           = "uvcvideo",
3178                .probe          = uvc_probe,
3179                .disconnect     = uvc_disconnect,
3180                .suspend        = uvc_suspend,
3181                .resume         = uvc_resume,
3182                .reset_resume   = uvc_reset_resume,
3183                .id_table       = uvc_ids,
3184                .supports_autosuspend = 1,
3185        },
3186};
3187
3188static int __init uvc_init(void)
3189{
3190        int ret;
3191
3192        uvc_debugfs_init();
3193
3194        ret = usb_register(&uvc_driver.driver);
3195        if (ret < 0) {
3196                uvc_debugfs_cleanup();
3197                return ret;
3198        }
3199
3200        return 0;
3201}
3202
3203static void __exit uvc_cleanup(void)
3204{
3205        usb_deregister(&uvc_driver.driver);
3206        uvc_debugfs_cleanup();
3207}
3208
3209module_init(uvc_init);
3210module_exit(uvc_cleanup);
3211
3212MODULE_AUTHOR(DRIVER_AUTHOR);
3213MODULE_DESCRIPTION(DRIVER_DESC);
3214MODULE_LICENSE("GPL");
3215MODULE_VERSION(DRIVER_VERSION);
3216
3217