[qc-usb] make it work with kernel 2.6.27 and 2.6.28.
authorHauke Mehrtens <hauke@hauke-m.de>
Sun, 14 Jun 2009 20:18:50 +0000 (20:18 +0000)
committerHauke Mehrtens <hauke@hauke-m.de>
Sun, 14 Jun 2009 20:18:50 +0000 (20:18 +0000)
SVN-Revision: 16454

multimedia/qc-usb/Makefile
multimedia/qc-usb/patches/001-linux_2_6.patch
multimedia/qc-usb/patches/002-qc_set_cross_compile.patch
multimedia/qc-usb/patches/003-linux_2_6_27.patch [new file with mode: 0644]
multimedia/qc-usb/patches/004-linux_2_6_28.patch [new file with mode: 0644]

index 36ee64603eda37fb8a2c4feb11b91e0fbd170cce..8c428ebf654f931afeeb43e79f85e1f01a5be221 100644 (file)
@@ -38,7 +38,7 @@ define KernelPackage/video-quickcam
 $(call Package/qc-usb/Default)
   SUBMENU:=Video Support
   TITLE:=QuickCam Express USB webcam support
-  DEPENDS:=@USB_SUPPORT @!LINUX_2_6_27 @!LINUX_2_6_28 +kmod-usb-core +kmod-video-core
+  DEPENDS:=@USB_SUPPORT @!LINUX_2_6_29 @!LINUX_2_6_30 +kmod-usb-core +kmod-video-core
   FILES:=$(PKG_BUILD_DIR)/quickcam.$(LINUX_KMOD_SUFFIX)
   AUTOLOAD:=$(call AutoLoad,90,quickcam)
 endef
index 34c73c4d307743a809f5a72801759bb0bb24f57d..0de4186778212546a89e79dd4736b885ca63d43f 100644 (file)
@@ -1,6 +1,6 @@
 --- a/qc-driver.c
 +++ b/qc-driver.c
-@@ -821,7 +821,9 @@
+@@ -821,7 +821,9 @@ static int qc_i2c_init(struct quickcam *
        if (!cr) goto fail2;
        urb->transfer_buffer = kmalloc(qc_i2c_maxbufsize*sizeof(u8), GFP_KERNEL);       /* Allocate maximum ever needed */
        if (!urb->transfer_buffer) goto fail3;
@@ -10,7 +10,7 @@
        urb->complete = qc_i2c_handler;
        urb->context  = qc;
  #if (LINUX_VERSION_CODE<KERNEL_VERSION(2,6,9) && !defined(CONFIG_SUSE_KERNEL)) || LINUX_VERSION_CODE<KERNEL_VERSION(2,6,8)
-@@ -3006,7 +3008,9 @@
+@@ -3006,7 +3008,9 @@ static struct file_operations qc_v4l_fop
  static struct video_device qc_v4l_template = {
        name:           "QuickCam USB",
        type:           VID_TYPE_CAPTURE | VID_TYPE_SUBCAPTURE,
@@ -22,7 +22,7 @@
        release:        qc_v4l_release,
 --- a/qc-memory.c
 +++ b/qc-memory.c
-@@ -78,15 +78,19 @@
+@@ -78,15 +78,19 @@ static inline int qc_remap_page_range(un
  #endif
  
  #if LINUX_VERSION_CODE>=KERNEL_VERSION(2,5,3) || defined(pte_offset_map)
index e3d8c2df9f7168ec5fbf88087f1fc40c273cef0e..a1a4a107d032c2e93514e7d2bfa5c6df302539fc 100644 (file)
@@ -1,6 +1,5 @@
-diff -rupN original/Makefile new/Makefile
---- original/Makefile  2006-10-23 21:06:19.000000000 -0500
-+++ new/Makefile       2009-02-03 08:57:20.000000000 -0600
+--- a/Makefile
++++ b/Makefile
 @@ -183,7 +183,7 @@ install: $(MODULE_NAME)
        -$(DEPMOD) -a
  
diff --git a/multimedia/qc-usb/patches/003-linux_2_6_27.patch b/multimedia/qc-usb/patches/003-linux_2_6_27.patch
new file mode 100644 (file)
index 0000000..c7ee993
--- /dev/null
@@ -0,0 +1,25 @@
+---
+--- a/qc-driver.c
++++ b/qc-driver.c
+@@ -2528,7 +2528,11 @@ static int qc_v4l_ioctl(struct video_dev
+                       if (qcdebug&QC_DEBUGUSER) PDEBUG("VIDIOCGCAP");
+                       memset(&b, 0, sizeof(b));
+                       strcpy(b.name, "Logitech QuickCam USB");        /* Max 31 characters */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
++                      b.type      = VID_TYPE_CAPTURE | VID_TYPE_SUBCAPTURE;
++#else
+                       b.type      = qc->vdev.type;
++#endif
+                       b.channels  = 1;
+                       b.audios    = 0;
+                       b.maxwidth  = qc->sensor_data.maxwidth;
+@@ -3007,7 +3011,9 @@ static struct file_operations qc_v4l_fop
+ static struct video_device qc_v4l_template = {
+       name:           "QuickCam USB",
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
+       type:           VID_TYPE_CAPTURE | VID_TYPE_SUBCAPTURE,
++#endif
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)
+       hardware:       VID_HARDWARE_QCAM_USB,
+ #endif
diff --git a/multimedia/qc-usb/patches/004-linux_2_6_28.patch b/multimedia/qc-usb/patches/004-linux_2_6_28.patch
new file mode 100644 (file)
index 0000000..851af75
--- /dev/null
@@ -0,0 +1,108 @@
+The following upstream commit renders qc-usb FTBS:
+
+Gitweb:     http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=601e9444f249d219009ec05674268d90f6f1cdcb
+Commit:     601e9444f249d219009ec05674268d90f6f1cdcb
+Parent:     e138c592b50370621653fd962b2bc3f4e25dfe78
+Author:     Hans Verkuil <hverkuil@xs4all.nl>
+AuthorDate: Sat Aug 23 07:24:07 2008 -0300
+Committer:  Mauro Carvalho Chehab <mchehab@redhat.com>
+CommitDate: Sun Oct 12 09:36:54 2008 -0200
+
+    V4L/DVB (8786): v4l2: remove the priv field, use dev_get_drvdata instead
+    
+    Remove the priv field and let video_get/set_drvdata use dev_get_drvdata
+    and dev_set_drvdata instead.
+    
+    Convert all drivers that still used priv directly.
+    
+    Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
+    Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+
+Copyright (C) 2008 Stefan Lippers-Hollmann <s.l-h@gmx.de>
+
+--- a/qc-driver.c
++++ b/qc-driver.c
+@@ -2255,7 +2255,11 @@ static unsigned int qc_v4l_poll(struct v
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
+       struct video_device *dev = video_devdata(file);
+ #endif
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28)
++      struct quickcam *qc = (struct quickcam *)video_get_drvdata(dev);
++#else
+       struct quickcam *qc = (struct quickcam *)dev->priv;
++#endif
+       struct qc_frame_data *fd = &qc->frame_data;
+       int mask;
+@@ -2307,7 +2311,11 @@ static int qc_v4l_open(struct video_devi
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
+       struct video_device *dev = video_devdata(file);
+ #endif
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28)
++      struct quickcam *qc = video_get_drvdata(dev);
++#else
+       struct quickcam *qc = dev->priv;
++#endif
+       int r;
+       if (qcdebug&QC_DEBUGLOGIC || qcdebug&QC_DEBUGUSER) PDEBUG("qc_v4l_open(qc=%p)", qc);
+@@ -2375,7 +2383,11 @@ static void qc_v4l_close(struct video_de
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
+       struct video_device *dev = video_devdata(file);
+ #endif
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28)
++      struct quickcam *qc = (struct quickcam *)video_get_drvdata(dev);
++#else
+       struct quickcam *qc = (struct quickcam *)dev->priv;
++#endif
+       if (qcdebug&QC_DEBUGLOGIC || qcdebug&QC_DEBUGUSER) PDEBUG("qc_v4l_close(dev=%p,qc=%p)",dev,qc);
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
+       TEST_BUGR_MSG(qc==NULL, "qc==NULL");
+@@ -2423,7 +2435,11 @@ static long qc_v4l_read(struct video_dev
+       struct video_device *dev = video_devdata(file);
+       int noblock = file->f_flags & O_NONBLOCK;
+ #endif
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28)
++      struct quickcam *qc = (struct quickcam *)video_get_drvdata(dev);
++#else
+       struct quickcam *qc = (struct quickcam *)dev->priv;
++#endif
+       int frame_len;
+       unsigned char *frame;
+       long r = 0;
+@@ -2478,7 +2494,11 @@ static int qc_v4l_mmap(
+       const void *start = (void *)vma->vm_start;
+       unsigned long size  = vma->vm_end - vma->vm_start;
+ #endif
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28)
++      struct quickcam *qc = (struct quickcam *)video_get_drvdata(dev);
++#else
+       struct quickcam *qc = (struct quickcam *)dev->priv;
++#endif
+       unsigned char *frame;
+       int ret = 0,  frame_size;
+ #if !HAVE_VMA && LINUX_VERSION_CODE<KERNEL_VERSION(2,6,0)
+@@ -2510,7 +2530,11 @@ static int qc_v4l_ioctl(struct video_dev
+       struct video_device *dev = video_devdata(file);
+       void *argp = (void *)arg;
+ #endif
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28)
++      struct quickcam *qc = (struct quickcam *)video_get_drvdata(dev);
++#else
+       struct quickcam *qc = (struct quickcam *)dev->priv;
++#endif
+       int i, retval = 0;
+       if (qcdebug&QC_DEBUGLOGIC || qcdebug&QC_DEBUGUSER) PDEBUG("qc_v4l_ioctl(dev=%p,cmd=%u,arg=%p,qc=%p)",dev,cmd,argp,qc);
+@@ -3165,7 +3189,11 @@ PDEBUG("poisoning qc in qc_usb_init");
+               /* Register V4L video device */
+               memcpy(&qc->vdev, &qc_v4l_template, sizeof(qc_v4l_template));
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28)
++              video_set_drvdata(&qc->vdev, qc);
++#else
+               qc->vdev.priv = qc;
++#endif
+               r = video_register_device(&qc->vdev, VFL_TYPE_GRABBER, video_nr);
+               if (r<0) goto fail3;
+               PRINTK(KERN_INFO, "Registered device: /dev/video%i", qc->vdev.minor);