mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 20:07:46 +09:00
UPSTREAM: media: uvcvideo: Add extensible device information
Currently the UVC driver assigns a quirk bitmask to the .driver_info
field of struct usb_device_id. This patch instroduces a struct to store
quirks and possibly other per-device parameters in the future.
Conflicts:
drivers/media/usb/uvc/uvc_driver.c
Change-Id: I0c823a17cc15f73eb7806804b9b8d42c109c86b9
Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@intel.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit 3bc85817d7)
This commit is contained in:
committed by
Tao Huang
parent
679182db69
commit
31a4fbf741
@@ -2000,11 +2000,18 @@ static int uvc_register_chains(struct uvc_device *dev)
|
||||
* USB probe, disconnect, suspend and resume
|
||||
*/
|
||||
|
||||
struct uvc_device_info {
|
||||
u32 quirks;
|
||||
};
|
||||
|
||||
static int uvc_probe(struct usb_interface *intf,
|
||||
const struct usb_device_id *id)
|
||||
{
|
||||
struct usb_device *udev = interface_to_usbdev(intf);
|
||||
struct uvc_device *dev;
|
||||
const struct uvc_device_info *info =
|
||||
(const struct uvc_device_info *)id->driver_info;
|
||||
u32 quirks = info ? info->quirks : 0;
|
||||
int ret;
|
||||
|
||||
if (id->idVendor && id->idProduct)
|
||||
@@ -2030,7 +2037,7 @@ static int uvc_probe(struct usb_interface *intf,
|
||||
dev->intf = usb_get_intf(intf);
|
||||
dev->intfnum = intf->cur_altsetting->desc.bInterfaceNumber;
|
||||
dev->quirks = (uvc_quirks_param == -1)
|
||||
? id->driver_info : uvc_quirks_param;
|
||||
? quirks : uvc_quirks_param;
|
||||
|
||||
if (udev->product != NULL)
|
||||
strlcpy(dev->name, udev->product, sizeof dev->name);
|
||||
@@ -2053,7 +2060,7 @@ static int uvc_probe(struct usb_interface *intf,
|
||||
le16_to_cpu(udev->descriptor.idVendor),
|
||||
le16_to_cpu(udev->descriptor.idProduct));
|
||||
|
||||
if (dev->quirks != id->driver_info) {
|
||||
if (dev->quirks != quirks) {
|
||||
uvc_printk(KERN_INFO, "Forcing device quirks to 0x%x by module "
|
||||
"parameter for testing purpose.\n", dev->quirks);
|
||||
uvc_printk(KERN_INFO, "Please report required quirks to the "
|
||||
@@ -2252,6 +2259,28 @@ MODULE_PARM_DESC(timeout, "Streaming control requests timeout");
|
||||
* Driver initialization and cleanup
|
||||
*/
|
||||
|
||||
static const struct uvc_device_info uvc_quirk_probe_minmax = {
|
||||
.quirks = UVC_QUIRK_PROBE_MINMAX,
|
||||
};
|
||||
|
||||
static const struct uvc_device_info uvc_quirk_fix_bandwidth = {
|
||||
.quirks = UVC_QUIRK_FIX_BANDWIDTH,
|
||||
};
|
||||
|
||||
static const struct uvc_device_info uvc_quirk_probe_def = {
|
||||
.quirks = UVC_QUIRK_PROBE_DEF,
|
||||
};
|
||||
|
||||
static const struct uvc_device_info uvc_quirk_stream_no_fid = {
|
||||
.quirks = UVC_QUIRK_STREAM_NO_FID,
|
||||
};
|
||||
|
||||
static const struct uvc_device_info uvc_quirk_force_y8 = {
|
||||
.quirks = UVC_QUIRK_FORCE_Y8,
|
||||
};
|
||||
|
||||
#define UVC_QUIRK_INFO(q) (kernel_ulong_t)&(struct uvc_device_info){.quirks = q}
|
||||
|
||||
/*
|
||||
* The Logitech cameras listed below have their interface class set to
|
||||
* VENDOR_SPEC because they don't announce themselves as UVC devices, even
|
||||
@@ -2266,7 +2295,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_PROBE_MINMAX },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax },
|
||||
/* Genius eFace 2025 */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2275,7 +2304,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_PROBE_MINMAX },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax },
|
||||
/* Microsoft Lifecam NX-6000 */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2284,7 +2313,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_PROBE_MINMAX },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax },
|
||||
/* Microsoft Lifecam NX-3000 */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2293,7 +2322,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_PROBE_DEF },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_probe_def },
|
||||
/* Microsoft Lifecam VX-7000 */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2302,7 +2331,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_PROBE_MINMAX },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax },
|
||||
/* Logitech Quickcam Fusion */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2359,7 +2388,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_RESTORE_CTRLS_ON_INIT },
|
||||
.driver_info = UVC_QUIRK_INFO(UVC_QUIRK_RESTORE_CTRLS_ON_INIT) },
|
||||
/* Chicony CNF7129 (Asus EEE 100HE) */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2368,7 +2397,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_RESTRICT_FRAME_RATE },
|
||||
.driver_info = UVC_QUIRK_INFO(UVC_QUIRK_RESTRICT_FRAME_RATE) },
|
||||
/* Alcor Micro AU3820 (Future Boy PC USB Webcam) */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2377,7 +2406,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_PROBE_MINMAX },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax },
|
||||
/* Dell XPS m1530 */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2386,7 +2415,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_PROBE_DEF },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_probe_def },
|
||||
/* Dell SP2008WFP Monitor */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2395,7 +2424,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_PROBE_DEF },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_probe_def },
|
||||
/* Dell Alienware X51 */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2404,7 +2433,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_PROBE_DEF },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_probe_def },
|
||||
/* Dell Studio Hybrid 140g (OmniVision webcam) */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2413,7 +2442,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_PROBE_DEF },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_probe_def },
|
||||
/* Dell XPS M1330 (OmniVision OV7670 webcam) */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2422,7 +2451,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_PROBE_DEF },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_probe_def },
|
||||
/* Apple Built-In iSight */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2431,8 +2460,17 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_PROBE_MINMAX
|
||||
| UVC_QUIRK_BUILTIN_ISIGHT },
|
||||
.driver_info = UVC_QUIRK_INFO(UVC_QUIRK_PROBE_MINMAX
|
||||
| UVC_QUIRK_BUILTIN_ISIGHT) },
|
||||
/* Apple Built-In iSight via iBridge */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
.idVendor = 0x05ac,
|
||||
.idProduct = 0x8600,
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_probe_def },
|
||||
/* Foxlink ("HP Webcam" on HP Mini 5103) */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2441,7 +2479,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_FIX_BANDWIDTH },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_fix_bandwidth },
|
||||
/* Genesys Logic USB 2.0 PC Camera */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2450,7 +2488,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_STREAM_NO_FID },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
|
||||
/* Hercules Classic Silver */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2459,7 +2497,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_FIX_BANDWIDTH },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_fix_bandwidth },
|
||||
/* ViMicro Vega */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2468,7 +2506,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_FIX_BANDWIDTH },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_fix_bandwidth },
|
||||
/* ViMicro - Minoru3D */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2477,7 +2515,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_FIX_BANDWIDTH },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_fix_bandwidth },
|
||||
/* ViMicro Venus - Minoru3D */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2486,7 +2524,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_FIX_BANDWIDTH },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_fix_bandwidth },
|
||||
/* Ophir Optronics - SPCAM 620U */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2495,7 +2533,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_PROBE_MINMAX },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax },
|
||||
/* MT6227 */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2504,8 +2542,8 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_PROBE_MINMAX
|
||||
| UVC_QUIRK_PROBE_DEF },
|
||||
.driver_info = UVC_QUIRK_INFO(UVC_QUIRK_PROBE_MINMAX
|
||||
| UVC_QUIRK_PROBE_DEF) },
|
||||
/* IMC Networks (Medion Akoya) */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2514,7 +2552,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_STREAM_NO_FID },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
|
||||
/* JMicron USB2.0 XGA WebCam */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2523,7 +2561,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_PROBE_MINMAX },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax },
|
||||
/* Syntek (HP Spartan) */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2532,7 +2570,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_STREAM_NO_FID },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
|
||||
/* Syntek (Samsung Q310) */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2541,7 +2579,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_STREAM_NO_FID },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
|
||||
/* Syntek (Packard Bell EasyNote MX52 */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2550,7 +2588,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_STREAM_NO_FID },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
|
||||
/* Syntek (Asus F9SG) */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2559,7 +2597,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_STREAM_NO_FID },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
|
||||
/* Syntek (Asus U3S) */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2568,7 +2606,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_STREAM_NO_FID },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
|
||||
/* Syntek (JAOtech Smart Terminal) */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2577,7 +2615,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_STREAM_NO_FID },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
|
||||
/* Miricle 307K */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2586,7 +2624,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_STREAM_NO_FID },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
|
||||
/* Lenovo Thinkpad SL400/SL500 */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2595,7 +2633,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_STREAM_NO_FID },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
|
||||
/* Aveo Technology USB 2.0 Camera */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2604,8 +2642,8 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_PROBE_MINMAX
|
||||
| UVC_QUIRK_PROBE_EXTRAFIELDS },
|
||||
.driver_info = UVC_QUIRK_INFO(UVC_QUIRK_PROBE_MINMAX
|
||||
| UVC_QUIRK_PROBE_EXTRAFIELDS) },
|
||||
/* Aveo Technology USB 2.0 Camera (Tasco USB Microscope) */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2622,7 +2660,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_PROBE_EXTRAFIELDS },
|
||||
.driver_info = UVC_QUIRK_INFO(UVC_QUIRK_PROBE_EXTRAFIELDS) },
|
||||
/* Manta MM-353 Plako */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2631,7 +2669,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_PROBE_MINMAX },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax },
|
||||
/* FSC WebCam V30S */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2640,7 +2678,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_PROBE_MINMAX },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax },
|
||||
/* Arkmicro unbranded */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2649,7 +2687,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_PROBE_DEF },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_probe_def },
|
||||
/* The Imaging Source USB CCD cameras */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2668,7 +2706,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_STATUS_INTERVAL },
|
||||
.driver_info = UVC_QUIRK_INFO(UVC_QUIRK_STATUS_INTERVAL) },
|
||||
/* MSI StarCam 370i */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2677,7 +2715,7 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_PROBE_MINMAX },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax },
|
||||
/* SiGma Micro USB Web Camera */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2686,8 +2724,8 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_PROBE_MINMAX
|
||||
| UVC_QUIRK_IGNORE_SELECTOR_UNIT },
|
||||
.driver_info = UVC_QUIRK_INFO(UVC_QUIRK_PROBE_MINMAX
|
||||
| UVC_QUIRK_IGNORE_SELECTOR_UNIT) },
|
||||
/* Oculus VR Positional Tracker DK2 */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
@@ -2696,7 +2734,16 @@ static struct usb_device_id uvc_ids[] = {
|
||||
.bInterfaceClass = USB_CLASS_VIDEO,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_QUIRK_FORCE_Y8 },
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_force_y8 },
|
||||
/* Oculus VR Rift Sensor */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
.idVendor = 0x2833,
|
||||
.idProduct = 0x0211,
|
||||
.bInterfaceClass = USB_CLASS_VENDOR_SPEC,
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = (kernel_ulong_t)&uvc_quirk_force_y8 },
|
||||
/* Generic USB Video Class */
|
||||
{ USB_INTERFACE_INFO(USB_CLASS_VIDEO, 1, 0) },
|
||||
{}
|
||||
|
||||
Reference in New Issue
Block a user