From 2c2545da4d6f060cd6b64c71469a61cd455ba6d9 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Tue, 11 Nov 2008 17:43:40 +0100 Subject: uvcvideo: Enable compilation on kernels older than 2.6.22 From: Laurent Pinchart The uvcvideo driver makes use of the usb_endpoint_* functions as well as the list_first_entry and uninitialized_var macros. Add them to v4l/compat.h and update the driver with kernel version-based conditional compilation sections. Priority: normal Signed-off-by: Laurent Pinchart --- v4l/compat.h | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) (limited to 'v4l/compat.h') diff --git a/v4l/compat.h b/v4l/compat.h index 3c0c2e345..d041cbe38 100644 --- a/v4l/compat.h +++ b/v4l/compat.h @@ -258,4 +258,69 @@ static inline int list_is_singular(const struct list_head *head) #define PCI_DEVICE_ID_MARVELL_88ALP01_CCIC 0x4102 #endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) +#ifdef __LINUX_USB_H +/* + * usb_endpoint_* functions + * + * Included in Linux 2.6.19 + * Backported to 2.6.18 in Red Hat Enterprise Linux 5.2 + */ + +#ifdef RHEL_RELEASE_CODE +#if RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(5, 2) +#define RHEL_HAS_USB_ENDPOINT +#endif +#endif + +#ifndef RHEL_HAS_USB_ENDPOINT +static inline int +usb_endpoint_dir_in(const struct usb_endpoint_descriptor *epd) +{ + return (epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN; +} + +static inline int +usb_endpoint_xfer_int(const struct usb_endpoint_descriptor *epd) +{ + return (epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == + USB_ENDPOINT_XFER_INT; +} + +static inline int +usb_endpoint_xfer_isoc(const struct usb_endpoint_descriptor *epd) +{ + return (epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == + USB_ENDPOINT_XFER_ISOC; +} + +static inline int +usb_endpoint_xfer_bulk(const struct usb_endpoint_descriptor *epd) +{ + return (epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == + USB_ENDPOINT_XFER_BULK; +} + +static inline int +usb_endpoint_is_int_in(const struct usb_endpoint_descriptor *epd) +{ + return usb_endpoint_xfer_int(epd) && usb_endpoint_dir_in(epd); +} +#endif /* RHEL_HAS_USB_ENDPOINT */ +#endif /* __LINUX_USB_H */ +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 22) +/* + * Linked list API + */ +#define list_first_entry(ptr, type, member) \ + list_entry((ptr)->next, type, member) + +/* + * uninitialized_var() macro + */ +#define uninitialized_var(x) x +#endif + #endif -- cgit v1.2.3