From dc55a87943a667acb64c93f07125cb4fa8da009e Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Sun, 14 Jun 2009 20:18:50 +0000 Subject: [PATCH] [qc-usb] make it work with kernel 2.6.27 and 2.6.28. SVN-Revision: 16454 --- multimedia/qc-usb/Makefile | 2 +- multimedia/qc-usb/patches/001-linux_2_6.patch | 6 +- .../patches/002-qc_set_cross_compile.patch | 5 +- .../qc-usb/patches/003-linux_2_6_27.patch | 25 ++++ .../qc-usb/patches/004-linux_2_6_28.patch | 108 ++++++++++++++++++ 5 files changed, 139 insertions(+), 7 deletions(-) create mode 100644 multimedia/qc-usb/patches/003-linux_2_6_27.patch create mode 100644 multimedia/qc-usb/patches/004-linux_2_6_28.patch diff --git a/multimedia/qc-usb/Makefile b/multimedia/qc-usb/Makefile index 36ee64603e..8c428ebf65 100644 --- a/multimedia/qc-usb/Makefile +++ b/multimedia/qc-usb/Makefile @@ -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 diff --git a/multimedia/qc-usb/patches/001-linux_2_6.patch b/multimedia/qc-usb/patches/001-linux_2_6.patch index 34c73c4d30..0de4186778 100644 --- a/multimedia/qc-usb/patches/001-linux_2_6.patch +++ b/multimedia/qc-usb/patches/001-linux_2_6.patch @@ -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,5,3) || defined(pte_offset_map) diff --git a/multimedia/qc-usb/patches/002-qc_set_cross_compile.patch b/multimedia/qc-usb/patches/002-qc_set_cross_compile.patch index e3d8c2df9f..a1a4a107d0 100644 --- a/multimedia/qc-usb/patches/002-qc_set_cross_compile.patch +++ b/multimedia/qc-usb/patches/002-qc_set_cross_compile.patch @@ -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 index 0000000000..c7ee9932e9 --- /dev/null +++ b/multimedia/qc-usb/patches/003-linux_2_6_27.patch @@ -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 index 0000000000..851af75862 --- /dev/null +++ b/multimedia/qc-usb/patches/004-linux_2_6_28.patch @@ -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 +AuthorDate: Sat Aug 23 07:24:07 2008 -0300 +Committer: Mauro Carvalho Chehab +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 + Signed-off-by: Mauro Carvalho Chehab + +Copyright (C) 2008 Stefan Lippers-Hollmann + +--- 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,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); -- 2.30.2