History

media: uvcvideo: Store device information pointer in struct uvc_device

The device information structure is currently copied field by field in the uvc_device structure. As we only have two fields at the moment this isn't much of an issue, but it prevents easy addition of new info fields. Fix this by storing the uvc_device_info pointer in the uvc_device structure. As a result the uvc_device meta_format field can be removed. The quirks field, however, needs to stay as it can be modified through a module parameter. As not all device have an information structure, we declare a global "NULL" info instance that is used as a fallback when the driver_info is empty.

Laurent Pinchart committed 8 years ago

Commit 3a032841 parent 88d80343 files · +16 −14Browse files

Unified · Split

3 files
  1. drivers/media/usb/uvc/uvc_driver.c +5 −10
  2. drivers/media/usb/uvc/uvc_metadata.c +4 −3
  3. drivers/media/usb/uvc/uvcvideo.h +7 −1
drivers/media/usb/uvc/uvc_driver.c+5−10
@@ -2040,10 +2040,7 @@ static int uvc_register_chains(struct uvc_device *dev) · 2039 unmodified lines
20402040 * USB probe, disconnect, suspend and resume
20412041 */
20422042
2043−struct uvc_device_info {
2044− u32 quirks;
2045− u32 meta_format;
2046−};
2043+static const struct uvc_device_info uvc_quirk_none = { 0 };
20472044
20482045 static int uvc_probe(struct usb_interface *intf,
20492046 const struct usb_device_id *id)
@@ -2052,7 +2049,6 @@ static int uvc_probe(struct usb_interface *intf, · 2 unmodified lines
20522049 struct uvc_device *dev;
20532050 const struct uvc_device_info *info =
20542051 (const struct uvc_device_info *)id->driver_info;
2055− u32 quirks = info ? info->quirks : 0;
20562052 int function;
20572053 int ret;
20582054
@@ -2079,10 +2075,9 @@ static int uvc_probe(struct usb_interface *intf, · 20 unmodified lines
20792075 dev->udev = usb_get_dev(udev);
20802076 dev->intf = usb_get_intf(intf);
20812077 dev->intfnum = intf->cur_altsetting->desc.bInterfaceNumber;
2082− dev->quirks = (uvc_quirks_param == -1)
2083− ? quirks : uvc_quirks_param;
2084− if (info)
2085− dev->meta_format = info->meta_format;
2078+ dev->info = info ? info : &uvc_quirk_none;
2079+ dev->quirks = uvc_quirks_param == -1
2080+ ? dev->info->quirks : uvc_quirks_param;
20862081
20872082 if (udev->product != NULL)
20882083 strlcpy(dev->name, udev->product, sizeof(dev->name));
@@ -2123,7 +2118,7 @@ static int uvc_probe(struct usb_interface *intf, · 34 unmodified lines
21232118 le16_to_cpu(udev->descriptor.idVendor),
21242119 le16_to_cpu(udev->descriptor.idProduct));
21252120
2126− if (dev->quirks != quirks) {
2121+ if (dev->quirks != dev->info->quirks) {
21272122 uvc_printk(KERN_INFO, "Forcing device quirks to 0x%x by module "
21282123 "parameter for testing purpose.\n", dev->quirks);
21292124 uvc_printk(KERN_INFO, "Please report required quirks to the "
drivers/media/usb/uvc/uvc_metadata.c+4−3
@@ -74,7 +74,8 @@ static int uvc_meta_v4l2_try_format(struct file *file, void *fh, · 73 unmodified lines
7474
7575 memset(fmt, 0, sizeof(*fmt));
7676
77− fmt->dataformat = fmeta == dev->meta_format ? fmeta : V4L2_META_FMT_UVC;
77+ fmt->dataformat = fmeta == dev->info->meta_format
78+ ? fmeta : V4L2_META_FMT_UVC;
7879 fmt->buffersize = UVC_METATADA_BUF_SIZE;
7980
8081 return 0;
@@ -118,14 +119,14 @@ static int uvc_meta_v4l2_enum_formats(struct file *file, void *fh, · 37 unmodified lines
118119 u32 index = fdesc->index;
119120
120121 if (fdesc->type != vfh->vdev->queue->type ||
121− index > 1U || (index && !dev->meta_format))
122+ index > 1U || (index && !dev->info->meta_format))
122123 return -EINVAL;
123124
124125 memset(fdesc, 0, sizeof(*fdesc));
125126
126127 fdesc->type = vfh->vdev->queue->type;
127128 fdesc->index = index;
128− fdesc->pixelformat = index ? dev->meta_format : V4L2_META_FMT_UVC;
129+ fdesc->pixelformat = index ? dev->info->meta_format : V4L2_META_FMT_UVC;
129130
130131 return 0;
131132 }
drivers/media/usb/uvc/uvcvideo.h+7−1
@@ -572,15 +572,21 @@ struct uvc_streaming { · 571 unmodified lines
572572 } clock;
573573 };
574574
575+struct uvc_device_info {
576+ u32 quirks;
577+ u32 meta_format;
578+};
579+
575580 struct uvc_device {
576581 struct usb_device *udev;
577582 struct usb_interface *intf;
578583 unsigned long warnings;
579584 u32 quirks;
580− u32 meta_format;
581585 int intfnum;
582586 char name[32];
583587
588+ const struct uvc_device_info *info;
589+
584590 struct mutex lock; /* Protects users */
585591 unsigned int users;
586592 atomic_t nmappings;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t