|
@@ -2035,11 +2035,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 function;
|
|
|
int ret;
|
|
|
|
|
@@ -2066,7 +2073,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);
|
|
@@ -2107,7 +2114,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 "
|
|
@@ -2305,6 +2312,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
|
|
@@ -2319,7 +2348,7 @@ static const 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,
|
|
@@ -2328,7 +2357,7 @@ static const 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,
|
|
@@ -2337,7 +2366,7 @@ static const 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,
|
|
@@ -2346,7 +2375,7 @@ static const 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,
|
|
@@ -2355,7 +2384,7 @@ static const 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,
|
|
@@ -2412,7 +2441,7 @@ static const 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,
|
|
@@ -2421,7 +2450,7 @@ static const 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,
|
|
@@ -2430,7 +2459,7 @@ static const 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,
|
|
@@ -2439,7 +2468,7 @@ static const 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,
|
|
@@ -2448,7 +2477,7 @@ static const 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,
|
|
@@ -2457,7 +2486,7 @@ static const 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,
|
|
@@ -2466,7 +2495,7 @@ static const 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,
|
|
@@ -2475,7 +2504,7 @@ static const 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,
|
|
@@ -2484,8 +2513,8 @@ static const 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,
|
|
@@ -2494,7 +2523,7 @@ static const 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 },
|
|
|
/* Foxlink ("HP Webcam" on HP Mini 5103) */
|
|
|
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
|
| USB_DEVICE_ID_MATCH_INT_INFO,
|
|
@@ -2503,7 +2532,7 @@ static const 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,
|
|
@@ -2512,7 +2541,7 @@ static const 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,
|
|
@@ -2521,7 +2550,7 @@ static const 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,
|
|
@@ -2530,7 +2559,7 @@ static const 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,
|
|
@@ -2539,7 +2568,7 @@ static const 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,
|
|
@@ -2548,7 +2577,7 @@ static const 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,
|
|
@@ -2557,7 +2586,7 @@ static const 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,
|
|
@@ -2566,8 +2595,8 @@ static const 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,
|
|
@@ -2576,7 +2605,7 @@ static const 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,
|
|
@@ -2585,7 +2614,7 @@ static const 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,
|
|
@@ -2594,7 +2623,7 @@ static const 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,
|
|
@@ -2603,7 +2632,7 @@ static const 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,
|
|
@@ -2612,7 +2641,7 @@ static const 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,
|
|
@@ -2621,7 +2650,7 @@ static const 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,
|
|
@@ -2630,7 +2659,7 @@ static const 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,
|
|
@@ -2639,7 +2668,7 @@ static const 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,
|
|
@@ -2648,7 +2677,7 @@ static const 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,
|
|
@@ -2657,7 +2686,7 @@ static const 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,
|
|
@@ -2666,8 +2695,8 @@ static const 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,
|
|
@@ -2684,7 +2713,7 @@ static const 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,
|
|
@@ -2693,7 +2722,7 @@ static const 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,
|
|
@@ -2702,7 +2731,7 @@ static const 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,
|
|
@@ -2711,7 +2740,7 @@ static const 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,
|
|
@@ -2730,7 +2759,7 @@ static const 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,
|
|
@@ -2739,7 +2768,7 @@ static const 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,
|
|
@@ -2748,8 +2777,8 @@ static const 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,
|
|
@@ -2758,7 +2787,7 @@ static const 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,
|
|
@@ -2767,7 +2796,7 @@ static const struct usb_device_id uvc_ids[] = {
|
|
|
.bInterfaceClass = USB_CLASS_VENDOR_SPEC,
|
|
|
.bInterfaceSubClass = 1,
|
|
|
.bInterfaceProtocol = 0,
|
|
|
- .driver_info = UVC_QUIRK_FORCE_Y8 },
|
|
|
+ .driver_info = (kernel_ulong_t)&uvc_quirk_force_y8 },
|
|
|
/* Generic USB Video Class */
|
|
|
{ USB_INTERFACE_INFO(USB_CLASS_VIDEO, 1, UVC_PC_PROTOCOL_UNDEFINED) },
|
|
|
{ USB_INTERFACE_INFO(USB_CLASS_VIDEO, 1, UVC_PC_PROTOCOL_15) },
|