public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: mchehab@infradead.org
To: linux-kernel@vger.kernel.org
Cc: linux-dvb-maintainer@linuxtv.org,
	Mauro Carvalho Chehab <mchehab@infradead.org>
Subject: [PATCH 022/141] V4L/DVB (3421): Several fixes to prepare for VBI
Date: Mon, 20 Mar 2006 12:08:40 -0300	[thread overview]
Message-ID: <20060320150840.PS695488000022@infradead.org> (raw)
In-Reply-To: <20060320150819.PS760228000000@infradead.org>

From: Mauro Carvalho Chehab <mchehab@infradead.org>
Date: 1138043468 -0200

- Fixed VBI compilation.
- Included capacity to specify vbi and video number.
- Added a better control for using more than one em28xx device.
- VIDIOC_G_FMT now calls a function.

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
---

diff --git a/drivers/media/video/em28xx/em28xx-video.c b/drivers/media/video/em28xx/em28xx-video.c
diff --git a/drivers/media/video/em28xx/em28xx-video.c b/drivers/media/video/em28xx/em28xx-video.c
index 94a14a2..e4e82ae 100644
--- a/drivers/media/video/em28xx/em28xx-video.c
+++ b/drivers/media/video/em28xx/em28xx-video.c
@@ -28,6 +28,7 @@
 #include <linux/list.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
+#include <linux/bitmap.h>
 #include <linux/usb.h>
 #include <linux/i2c.h>
 #include <linux/version.h>
@@ -59,8 +60,14 @@ MODULE_LICENSE("GPL");
 static LIST_HEAD(em28xx_devlist);
 
 static unsigned int card[]     = {[0 ... (EM28XX_MAXBOARDS - 1)] = UNSET };
+static unsigned int video_nr[] = {[0 ... (EM28XX_MAXBOARDS - 1)] = UNSET };
+static unsigned int vbi_nr[] = {[0 ... (EM28XX_MAXBOARDS - 1)] = UNSET };
 module_param_array(card,  int, NULL, 0444);
+module_param_array(video_nr, int, NULL, 0444);
+module_param_array(vbi_nr, int, NULL, 0444);
 MODULE_PARM_DESC(card,"card type");
+MODULE_PARM_DESC(video_nr,"video device numbers");
+MODULE_PARM_DESC(vbi_nr,"vbi device numbers");
 
 static int tuner = -1;
 module_param(tuner, int, 0444);
@@ -70,6 +77,9 @@ static unsigned int video_debug = 0;
 module_param(video_debug,int,0644);
 MODULE_PARM_DESC(video_debug,"enable debug messages [video]");
 
+/* Bitmask marking allocated devices from 0 to EM28XX_MAXBOARDS */
+static unsigned long em28xx_devused;
+
 /* supported tv norms */
 static struct em28xx_tvnorm tvnorms[] = {
 	{
@@ -211,6 +221,11 @@ static int em28xx_config(struct em28xx *
 	em28xx_write_regs_req(dev, 0x00, 0x06, "\x40", 1);
 
 	/* enable vbi capturing */
+
+	em28xx_write_regs_req(dev,0x00,0x0e,"\xC0",1);
+	em28xx_write_regs_req(dev,0x00,0x0f,"\x80",1);
+	em28xx_write_regs_req(dev,0x00,0x11,"\x51",1);
+
 	em28xx_audio_usb_mute(dev, 1);
 	dev->mute = 1;		/* maybe not the right place... */
 	dev->volume = 0x1f;
@@ -323,13 +338,20 @@ static int em28xx_v4l2_open(struct inode
 		h = list_entry(list, struct em28xx, devlist);
 		if (h->vdev->minor == minor) {
 			dev  = h;
+			dev->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+		}
+		if (h->vbi_dev->minor == minor) {
+			dev  = h;
+			dev->type = V4L2_BUF_TYPE_VBI_CAPTURE;
 		}
 	}
+	if (NULL == dev)
+		return -ENODEV;
 
 	filp->private_data=dev;
 
-
-	em28xx_videodbg("users=%d\n", dev->users);
+	em28xx_videodbg("open minor=%d type=%s users=%d\n",
+				minor,v4l2_type_names[dev->type],dev->users);
 
 	if (!down_read_trylock(&em28xx_disconnect))
 		return -ERESTARTSYS;
@@ -340,13 +362,6 @@ static int em28xx_v4l2_open(struct inode
 		return -EBUSY;
 	}
 
-/*	if(dev->vbi_dev->minor == minor){
-		dev->type=V4L2_BUF_TYPE_VBI_CAPTURE;
-	}*/
-	if (dev->vdev->minor == minor) {
-		dev->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
-	}
-
 	init_MUTEX(&dev->fileop_lock);	/* to 1 == available */
 	spin_lock_init(&dev->queue_lock);
 	init_waitqueue_head(&dev->wait_frame);
@@ -354,23 +369,27 @@ static int em28xx_v4l2_open(struct inode
 
 	down(&dev->lock);
 
-	em28xx_set_alternate(dev);
+	if (dev->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
+		em28xx_set_alternate(dev);
+
+		dev->width = norm_maxw(dev);
+		dev->height = norm_maxh(dev);
+		dev->frame_size = dev->width * dev->height * 2;
+		dev->field_size = dev->frame_size >> 1;	/*both_fileds ? dev->frame_size>>1 : dev->frame_size; */
+		dev->bytesperline = dev->width * 2;
+		dev->hscale = 0;
+		dev->vscale = 0;
 
-	dev->width = norm_maxw(dev);
-	dev->height = norm_maxh(dev);
-	dev->frame_size = dev->width * dev->height * 2;
-	dev->field_size = dev->frame_size >> 1;	/*both_fileds ? dev->frame_size>>1 : dev->frame_size; */
-	dev->bytesperline = dev->width * 2;
-	dev->hscale = 0;
-	dev->vscale = 0;
+		em28xx_capture_start(dev, 1);
+		em28xx_resolution_set(dev);
 
-	em28xx_capture_start(dev, 1);
-	em28xx_resolution_set(dev);
+		/* start the transfer */
+		errCode = em28xx_init_isoc(dev);
+		if (errCode)
+			goto err;
 
-	/* start the transfer */
-	errCode = em28xx_init_isoc(dev);
-	if (errCode)
-		goto err;
+		video_mux(dev, 0);
+	}
 
 	dev->users++;
 	filp->private_data = dev;
@@ -383,8 +402,6 @@ static int em28xx_v4l2_open(struct inode
 
 	dev->state |= DEV_INITIALIZED;
 
-	video_mux(dev, 0);
-
       err:
 	up(&dev->lock);
 	up_read(&em28xx_disconnect);
@@ -400,14 +417,21 @@ static void em28xx_release_resources(str
 {
 	mutex_lock(&em28xx_sysfs_lock);
 
-	em28xx_info("V4L2 device /dev/video%d deregistered\n",
-		    dev->vdev->minor);
+	/*FIXME: I2C IR should be disconnected */
+
+	em28xx_info("V4L2 devices /dev/video%d and /dev/vbi%d deregistered\n",
+				dev->vdev->minor-MINOR_VFL_TYPE_GRABBER_MIN,
+				dev->vbi_dev->minor-MINOR_VFL_TYPE_VBI_MIN);
 	list_del(&dev->devlist);
 	video_unregister_device(dev->vdev);
-/*	video_unregister_device(dev->vbi_dev); */
+	video_unregister_device(dev->vbi_dev);
 	em28xx_i2c_unregister(dev);
 	usb_put_dev(dev->udev);
 	mutex_unlock(&em28xx_sysfs_lock);
+
+
+	/* Mark device as unused */
+	em28xx_devused&=~(1<<dev->devno);
 }
 
 /*
@@ -463,6 +487,28 @@ em28xx_v4l2_read(struct file *filp, char
 	int ret = 0;
 	struct em28xx *dev = filp->private_data;
 
+	if (dev->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
+		em28xx_videodbg("V4l2_Buf_type_videocapture is set\n");
+	}
+	if (dev->type == V4L2_BUF_TYPE_VBI_CAPTURE) {
+		em28xx_videodbg("V4L2_BUF_TYPE_VBI_CAPTURE is set\n");
+		em28xx_videodbg("not supported yet! ...\n");
+		if (copy_to_user(buf, "", 1)) {
+			up(&dev->fileop_lock);
+			return -EFAULT;
+		}
+		return (1);
+	}
+	if (dev->type == V4L2_BUF_TYPE_SLICED_VBI_CAPTURE) {
+		em28xx_videodbg("V4L2_BUF_TYPE_SLICED_VBI_CAPTURE is set\n");
+		em28xx_videodbg("not supported yet! ...\n");
+		if (copy_to_user(buf, "", 1)) {
+			up(&dev->fileop_lock);
+			return -EFAULT;
+		}
+		return (1);
+	}
+
 	if (down_interruptible(&dev->fileop_lock))
 		return -ERESTARTSYS;
 
@@ -799,7 +845,8 @@ static int em28xx_stream_interrupt(struc
 	else if (ret) {
 		dev->state |= DEV_MISCONFIGURED;
 		em28xx_videodbg("device is misconfigured; close and "
-			"open /dev/video%d again\n", dev->vdev->minor);
+			"open /dev/video%d again\n",
+				dev->vdev->minor-MINOR_VFL_TYPE_GRABBER_MIN);
 		return ret;
 	}
 
@@ -850,6 +897,36 @@ static int em28xx_set_norm(struct em28xx
 	return 0;
 }
 
+
+static int em28xx_get_fmt(struct em28xx *dev, struct v4l2_format *format)
+{
+	em28xx_videodbg("VIDIOC_G_FMT: type=%s\n",
+		(format->type ==V4L2_BUF_TYPE_VIDEO_CAPTURE) ?
+		"V4L2_BUF_TYPE_VIDEO_CAPTURE" :
+		(format->type ==V4L2_BUF_TYPE_VBI_CAPTURE) ?
+		"V4L2_BUF_TYPE_VBI_CAPTURE" :
+		(format->type ==V4L2_CAP_SLICED_VBI_CAPTURE) ?
+		"V4L2_BUF_TYPE_SLICED_VBI_CAPTURE " :
+		"not supported");
+
+	if (format->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
+		format->fmt.pix.width = dev->width;
+		format->fmt.pix.height = dev->height;
+		format->fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;
+		format->fmt.pix.bytesperline = dev->bytesperline;
+		format->fmt.pix.sizeimage = dev->frame_size;
+		format->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
+		format->fmt.pix.field = dev->interlaced ? V4L2_FIELD_INTERLACED : V4L2_FIELD_TOP;	/* FIXME: TOP? NONE? BOTTOM? ALTENATE? */
+
+		em28xx_videodbg("VIDIOC_G_FMT: %dx%d\n", dev->width,
+			dev->height);
+		return 0;
+	}
+
+	return -EINVAL;
+}
+
+
 /*
  * em28xx_v4l2_do_ioctl()
  * This function is _not_ called directly, but from
@@ -1290,6 +1367,7 @@ static int em28xx_video_do_ioctl(struct 
 				sizeof(cap->bus_info));
 			cap->version = EM28XX_VERSION_CODE;
 			cap->capabilities =
+			    V4L2_CAP_SLICED_VBI_CAPTURE |
 			    V4L2_CAP_VIDEO_CAPTURE |
 			    V4L2_CAP_AUDIO |
 			    V4L2_CAP_READWRITE | V4L2_CAP_STREAMING;
@@ -1314,32 +1392,7 @@ static int em28xx_video_do_ioctl(struct 
 		}
 
 	case VIDIOC_G_FMT:
-		{
-			struct v4l2_format *format = arg;
-
-			em28xx_videodbg("VIDIOC_G_FMT: type=%s\n",
-				 format->type ==
-				 V4L2_BUF_TYPE_VIDEO_CAPTURE ?
-				 "V4L2_BUF_TYPE_VIDEO_CAPTURE" : format->type ==
-				 V4L2_BUF_TYPE_VBI_CAPTURE ?
-				 "V4L2_BUF_TYPE_VBI_CAPTURE " :
-				 "not supported");
-
-			if (format->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
-				return -EINVAL;
-
-			format->fmt.pix.width = dev->width;
-			format->fmt.pix.height = dev->height;
-			format->fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;
-			format->fmt.pix.bytesperline = dev->bytesperline;
-			format->fmt.pix.sizeimage = dev->frame_size;
-			format->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
-			format->fmt.pix.field = dev->interlaced ? V4L2_FIELD_INTERLACED : V4L2_FIELD_TOP;	/* FIXME: TOP? NONE? BOTTOM? ALTENATE? */
-
-			em28xx_videodbg("VIDIOC_G_FMT: %dx%d\n", dev->width,
-				 dev->height);
-			return 0;
-		}
+		return em28xx_get_fmt(dev, (struct v4l2_format *) arg);
 
 	case VIDIOC_TRY_FMT:
 	case VIDIOC_S_FMT:
@@ -1741,6 +1794,7 @@ static int em28xx_init_dev(struct em28xx
 	if (errCode) {
 		em28xx_errdev("error configuring device\n");
 		kfree(dev);
+		em28xx_devused&=~(1<<dev->devno);
 		return -ENOMEM;
 	}
 
@@ -1767,9 +1821,30 @@ static int em28xx_init_dev(struct em28xx
 	if (NULL == dev->vdev) {
 		em28xx_errdev("cannot allocate video_device.\n");
 		kfree(dev);
+		em28xx_devused&=~(1<<dev->devno);
 		return -ENOMEM;
 	}
 
+	dev->vbi_dev = video_device_alloc();
+	if (NULL == dev->vbi_dev) {
+		em28xx_errdev("cannot allocate video_device.\n");
+		kfree(dev->vdev);
+		kfree(dev);
+		em28xx_devused&=~(1<<dev->devno);
+		return -ENOMEM;
+	}
+
+	/* Fills VBI device info */
+	dev->vbi_dev->type = VFL_TYPE_VBI;
+	dev->vbi_dev->hardware = 0;
+	dev->vbi_dev->fops = &em28xx_v4l_fops;
+	dev->vbi_dev->minor = -1;
+	dev->vbi_dev->dev = &dev->udev->dev;
+	dev->vbi_dev->release = video_device_release;
+	snprintf(dev->vbi_dev->name, sizeof(dev->vbi_dev->name), "%s#%d %s",
+							 "em28xx",dev->devno,"vbi");
+
+	/* Fills CAPTURE device info */
 	dev->vdev->type = VID_TYPE_CAPTURE;
 	if (dev->has_tuner)
 		dev->vdev->type |= VID_TYPE_TUNER;
@@ -1778,21 +1853,39 @@ static int em28xx_init_dev(struct em28xx
 	dev->vdev->minor = -1;
 	dev->vdev->dev = &dev->udev->dev;
 	dev->vdev->release = video_device_release;
-	snprintf(dev->vdev->name, sizeof(dev->vdev->name), "%s",
-		 "em28xx video");
+	snprintf(dev->vdev->name, sizeof(dev->vbi_dev->name), "%s#%d %s",
+							 "em28xx",dev->devno,"video");
+
 	list_add_tail(&dev->devlist,&em28xx_devlist);
 
 	/* register v4l2 device */
 	down(&dev->lock);
-	if ((retval = video_register_device(dev->vdev, VFL_TYPE_GRABBER, -1))) {
+	if ((retval = video_register_device(dev->vdev, VFL_TYPE_GRABBER,
+					 video_nr[dev->devno]))) {
 		em28xx_errdev("unable to register video device (error=%i).\n",
 			      retval);
 		up(&dev->lock);
 		list_del(&dev->devlist);
 		video_device_release(dev->vdev);
 		kfree(dev);
+		em28xx_devused&=~(1<<dev->devno);
 		return -ENODEV;
 	}
+
+	if (video_register_device(dev->vbi_dev, VFL_TYPE_VBI,
+					vbi_nr[dev->devno]) < 0) {
+		printk("unable to register vbi device\n");
+		up(&dev->lock);
+		list_del(&dev->devlist);
+		video_device_release(dev->vbi_dev);
+		video_device_release(dev->vdev);
+		kfree(dev);
+		em28xx_devused&=~(1<<dev->devno);
+		return -ENODEV;
+	} else {
+		printk("registered VBI\n");
+	}
+
 	if (dev->has_msp34xx) {
 		/* Send a reset to other chips via gpio */
 		em28xx_write_regs_req(dev, 0x00, 0x08, "\xf7", 1);
@@ -1805,8 +1898,9 @@ static int em28xx_init_dev(struct em28xx
 
 	up(&dev->lock);
 
-	em28xx_info("V4L2 device registered as /dev/video%d\n",
-		    dev->vdev->minor);
+	em28xx_info("V4L2 device registered as /dev/video%d and /dev/vbi%d\n",
+				dev->vdev->minor-MINOR_VFL_TYPE_GRABBER_MIN,
+				dev->vbi_dev->minor-MINOR_VFL_TYPE_VBI_MIN);
 
 	return 0;
 }
@@ -1828,6 +1922,9 @@ static int em28xx_usb_probe(struct usb_i
 	udev = usb_get_dev(interface_to_usbdev(interface));
 	ifnum = interface->altsetting[0].desc.bInterfaceNumber;
 
+	/* Check to see next free device and mark as used */
+	nr=find_first_zero_bit(&em28xx_devused,EM28XX_MAXBOARDS);
+	em28xx_devused|=1<<nr;
 
 	/* Don't register audio interfaces */
 	if (interface->altsetting[0].desc.bInterfaceClass == USB_CLASS_AUDIO) {
@@ -1835,6 +1932,8 @@ static int em28xx_usb_probe(struct usb_i
 				udev->descriptor.idVendor,udev->descriptor.idProduct,
 				ifnum,
 				interface->altsetting[0].desc.bInterfaceClass);
+
+		em28xx_devused&=~(1<<nr);
 		return -ENODEV;
 	}
 
@@ -1849,18 +1948,20 @@ static int em28xx_usb_probe(struct usb_i
 	if ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) !=
 	    USB_ENDPOINT_XFER_ISOC) {
 		em28xx_err(DRIVER_NAME " probing error: endpoint is non-ISO endpoint!\n");
+		em28xx_devused&=~(1<<nr);
 		return -ENODEV;
 	}
 	if ((endpoint->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT) {
 		em28xx_err(DRIVER_NAME " probing error: endpoint is ISO OUT endpoint!\n");
+		em28xx_devused&=~(1<<nr);
 		return -ENODEV;
 	}
 
 	model=id->driver_info;
-	nr=interface->minor;
 
-	if (nr>EM28XX_MAXBOARDS) {
+	if (nr > EM28XX_MAXBOARDS) {
 		printk (DRIVER_NAME ": Supports only %i em28xx boards.\n",EM28XX_MAXBOARDS);
+		em28xx_devused&=~(1<<nr);
 		return -ENOMEM;
 	}
 
@@ -1868,19 +1969,24 @@ static int em28xx_usb_probe(struct usb_i
 	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
 	if (dev == NULL) {
 		em28xx_err(DRIVER_NAME ": out of memory!\n");
+		em28xx_devused&=~(1<<nr);
 		return -ENOMEM;
 	}
 
+	snprintf(dev->name, 29, "em28xx #%d", nr);
+	dev->devno=nr;
+
 	/* compute alternate max packet sizes */
 	uif = udev->actconfig->interface[0];
 
 	dev->num_alt=uif->num_altsetting;
-	printk(DRIVER_NAME ": Alternate settings: %i\n",dev->num_alt);
+	em28xx_info("Alternate settings: %i\n",dev->num_alt);
 //	dev->alt_max_pkt_size = kmalloc(sizeof(*dev->alt_max_pkt_size)*
 	dev->alt_max_pkt_size = kmalloc(32*
 						dev->num_alt,GFP_KERNEL);
 	if (dev->alt_max_pkt_size == NULL) {
-		em28xx_err(DRIVER_NAME ": out of memory!\n");
+		em28xx_errdev("out of memory!\n");
+		em28xx_devused&=~(1<<nr);
 		return -ENOMEM;
 	}
 
@@ -1889,27 +1995,26 @@ static int em28xx_usb_probe(struct usb_i
 							wMaxPacketSize);
 		dev->alt_max_pkt_size[i] =
 		    (tmp & 0x07ff) * (((tmp & 0x1800) >> 11) + 1);
-		printk(DRIVER_NAME ": Alternate setting %i, max size= %i\n",i,
+		em28xx_info("Alternate setting %i, max size= %i\n",i,
 							dev->alt_max_pkt_size[i]);
 	}
 
-	snprintf(dev->name, 29, "em28xx #%d", nr);
-
 	if ((card[nr]>=0)&&(card[nr]<em28xx_bcount))
 		model=card[nr];
 
 	if ((model==EM2800_BOARD_UNKNOWN)||(model==EM2820_BOARD_UNKNOWN)) {
-		printk( "%s: Your board has no eeprom inside it and thus can't\n"
+		em28xx_errdev( "Your board has no eeprom inside it and thus can't\n"
 			"%s: be autodetected.  Please pass card=<n> insmod option to\n"
 			"%s: workaround that.  Redirect complaints to the vendor of\n"
-			"%s: the TV card.  Best regards,\n"
+			"%s: the TV card. Generic type will be used."
+			"%s: Best regards,\n"
 			"%s:         -- tux\n",
 			dev->name,dev->name,dev->name,dev->name,dev->name);
-		printk("%s: Here is a list of valid choices for the card=<n> insmod option:\n",
+		em28xx_errdev("%s: Here is a list of valid choices for the card=<n> insmod option:\n",
 			dev->name);
 		for (i = 0; i < em28xx_bcount; i++) {
-			printk("%s:    card=%d -> %s\n",
-				dev->name, i, em28xx_boards[i].name);
+			em28xx_errdev("    card=%d -> %s\n", i,
+							em28xx_boards[i].name);
 		}
 	}
 
@@ -1935,12 +2040,9 @@ static void em28xx_usb_disconnect(struct
 	struct em28xx *dev = usb_get_intfdata(interface);
 	usb_set_intfdata(interface, NULL);
 
-/*FIXME: IR should be disconnected */
-
 	if (!dev)
 		return;
 
-
 	down_write(&em28xx_disconnect);
 
 	down(&dev->lock);
@@ -1952,7 +2054,9 @@ static void em28xx_usb_disconnect(struct
 	if (dev->users) {
 		em28xx_warn
 		    ("device /dev/video%d is open! Deregistration and memory "
-		     "deallocation are deferred on close.\n", dev->vdev->minor);
+		     "deallocation are deferred on close.\n",
+				dev->vdev->minor-MINOR_VFL_TYPE_GRABBER_MIN);
+
 		dev->state |= DEV_MISCONFIGURED;
 		em28xx_uninit_isoc(dev);
 		dev->state |= DEV_DISCONNECTED;
diff --git a/drivers/media/video/em28xx/em28xx.h b/drivers/media/video/em28xx/em28xx.h
diff --git a/drivers/media/video/em28xx/em28xx.h b/drivers/media/video/em28xx/em28xx.h
index 33de9d8..119fdbe 100644
--- a/drivers/media/video/em28xx/em28xx.h
+++ b/drivers/media/video/em28xx/em28xx.h
@@ -209,6 +209,7 @@ struct em28xx {
 	/* generic device properties */
 	char name[30];		/* name (including minor) of the device */
 	int model;		/* index in the device_data struct */
+	int devno;		/* marks the number of this device */
 	unsigned int is_em2800;
 	int video_inputs;	/* number of video inputs */
 	struct list_head	devlist;


  parent reply	other threads:[~2006-03-20 15:17 UTC|newest]

Thread overview: 158+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-03-20 15:08 [PATCH 000/141] V4L/DVB updates part 1 mchehab
2006-03-20 15:08 ` [PATCH 003/141] V4L/DVB (3393): Move all IR keymaps to ir-common module mchehab
2006-03-20 15:08 ` [PATCH 001/141] V4L/DVB (3392): Add PCI ID for DigitalNow DVB-T Dual, rebranded DViCO FusionHDTV DVB-T Dual mchehab
2006-03-20 15:08 ` [PATCH 006/141] V4L/DVB (3403): Add probe check for the tda9840 mchehab
2006-03-20 15:08 ` [PATCH 009/141] V4L/DVB (3406): Added credits for em28xx-video.c mchehab
2006-03-20 15:08 ` [PATCH 005/141] V4L/DVB (3402): Fix handling of VIDIOC_G_TUNER audmode in msp3400 mchehab
2006-03-20 15:08 ` [PATCH 011/141] V4L/DVB (3408): Included new sliced VBI types to videodev2.h and tvp5150 mchehab
2006-03-20 15:08 ` [PATCH 008/141] V4L/DVB (3405): Fixes tvp5150a/am1 detection mchehab
2006-03-20 15:08 ` [PATCH 010/141] V4L/DVB (3407): added some code for VBI processing and cleanup debug dump mchehab
2006-03-20 15:08 ` [PATCH 007/141] V4L/DVB: VIDEO_CX88_ALSA must select SND_PCM mchehab
2006-03-20 15:08 ` [PATCH 013/141] V4L/DVB (3410): Implemented sliced VBI set on VIDIOC_S_FMT mchehab
2006-03-20 15:08 ` [PATCH 017/141] V4L/DVB (3416): Recognise Hauppauge card #34519 mchehab
2006-03-20 15:08 ` [PATCH 015/141] V4L/DVB (3413): Kill nxt2002 in favor of the nxt200x module mchehab
2006-03-20 15:08 ` [PATCH 014/141] V4L/DVB (3411): group dvb-bt8xx Subsystem ID's together, in order mchehab
2006-03-20 15:08 ` [PATCH 016/141] V4L/DVB (3414): rename dvb_pll_tbmv30111in to dvb_pll_samsung_tbmv mchehab
2006-03-20 15:08 ` [PATCH 020/141] V4L/DVB (3419): added some VBI macros and moved minor definitions to header file mchehab
2006-03-20 15:08 ` mchehab [this message]
2006-03-20 15:08 ` [PATCH 019/141] V4L/DVB (3418): Cause tda9887 to use I2C_DRIVERID_TDA9887 mchehab
2006-03-20 15:08 ` [PATCH 021/141] V4L/DVB (3420): Added iocls to configure VBI on tvp5150 mchehab
2006-03-20 15:08 ` [PATCH 023/141] V4L/DVB (3422): Implemented VIDIOC_G_FMT/S_FMT for sliced VBI mchehab
2006-03-20 15:08 ` [PATCH 018/141] V4L/DVB (3417): make VP-3054 Secondary I2C Bus Support a Kconfig option mchehab
2006-03-20 15:08 ` [PATCH 026/141] V4L/DVB (3428): drivers/media/dvb/ possible cleanups mchehab
2006-03-20 15:08 ` [PATCH 029/141] V4L/DVB (3431): fixed spelling error, exectuted --> executed mchehab
2006-03-20 15:08 ` [PATCH 025/141] V4L/DVB (3427): audmode and rxsubchans fixes (VIDIOC_G/S_TUNER) mchehab
2006-03-20 15:08 ` [PATCH 028/141] V4L/DVB (3430): Add new internal VIDIOC_INT commands mchehab
2006-03-20 15:08 ` [PATCH 024/141] V4L/DVB (3423): CodingStyle fixes mchehab
2006-03-20 15:08 ` [PATCH 027/141] V4L/DVB (3429): Missing break statement on tuner-core mchehab
2006-03-20 15:08 ` [PATCH 035/141] V4L/DVB (3439): removed duplicated tuner_ranges mchehab
2006-03-20 15:08 ` [PATCH 030/141] V4L/DVB (3432): Hauppauge HVR 900 Composite support mchehab
2006-03-20 15:08 ` [PATCH 033/141] V4L/DVB (3435): rename cb variable names in tuner structures for global consistency mchehab
2006-03-20 15:08 ` [PATCH 031/141] V4L/DVB (3433): Fix printk type warning mchehab
2006-03-20 15:08 ` [PATCH 032/141] V4L/DVB (3434): changed comment in tuner-core.c mchehab
2006-03-20 15:08 ` [PATCH 034/141] V4L/DVB (3436): move config byte from tuner_params to tuner_range struct mchehab
2006-03-20 15:08 ` [PATCH 036/141] V4L/DVB (3439a): media video stradis memory fix mchehab
2006-03-20 15:08 ` [PATCH 040/141] V4L/DVB (3266): Fix NICAM buzz on analog sound mchehab
2006-03-20 15:08 ` [PATCH 037/141] V4L/DVB (3442): Allow tristate build for cx88-vp3054-i2c mchehab
2006-03-20 15:08 ` [PATCH 038/141] V4L/DVB (3453a): Alters MAINTAINERS file to point to newer v4l-dvb email mchehab
2006-03-20 15:08 ` [PATCH 041/141] V4L/DVB (3267): Add support for the Avermedia 777 DVB-T card mchehab
2006-03-20 15:08 ` [PATCH 039/141] V4L/DVB (3265): Add count to tunertype struct mchehab
2006-03-20 15:08 ` [PATCH 042/141] V4L/DVB (3268): Move video std detection to top of set_tv_freq function mchehab
2006-03-20 15:08 ` [PATCH 043/141] V4L/DVB (3269): Allow multiple tuner params in each tuner definition mchehab
2006-03-20 15:08 ` [PATCH 047/141] V4L/DVB (3276): Added terratec hybrid xs and kworld 2800rf support mchehab
2006-03-20 15:08 ` [PATCH 045/141] V4L/DVB (3271): Update tuner comments mchehab
2006-03-20 15:08 ` [PATCH 046/141] V4L/DVB (3275): Allow SAA7134 to fall back to AM sound when there is NICAM-L mchehab
2006-03-20 15:08 ` [PATCH 044/141] V4L/DVB (3270): Tuner_dbg will show tuner param and range selected mchehab
2006-03-20 15:08 ` [PATCH 050/141] V4L/DVB (3280): Changed description of KWorld PVR TV 2800RF mchehab
2006-03-20 15:08 ` [PATCH 052/141] V4L/DVB (3294): Fix [Bug 5895] to correct snd_87x autodetect mchehab
2006-03-20 15:08 ` [PATCH 051/141] V4L/DVB (3281): Added signal detection support to tvp5150 mchehab
2006-03-20 15:08 ` [PATCH 049/141] V4L/DVB (3278): Show debug for tuners trying to use unsupported video standards mchehab
2006-03-20 15:08 ` [PATCH 048/141] V4L/DVB (3277): Use default tuner_params if desired_type not available mchehab
2006-03-20 15:08 ` [PATCH 053/141] V4L/DVB (3297): Add IR support to KWorld DVB-T (cx22702-based) mchehab
2006-03-20 15:08 ` [PATCH 057/141] V4L/DVB (3303): TDA8290 update mchehab
2006-03-20 15:08 ` [PATCH 059/141] V4L/DVB (3305): Added support for the ADS Instant TV DUO Cardbus PTV331 mchehab
2006-03-20 15:08 ` [PATCH 056/141] V4L/DVB (3302): Added support for the LifeView FlyDVB-T LR301 card mchehab
2006-03-20 15:08 ` [PATCH 058/141] V4L/DVB (3304): TDA10046 Driver update mchehab
2006-03-20 15:08 ` [PATCH 055/141] V4L/DVB (3300): Add standard for South Korean NTSC-M using A2 audio mchehab
2006-03-20 15:08 ` [PATCH 054/141] V4L/DVB (3299): Kconfig: DVB_USB_CXUSB depends on DVB_LGDT330X and DVB_MT352 mchehab
2006-03-20 15:08 ` [PATCH 060/141] V4L/DVB (3306): Fixed i2c return value, conversion mdelay to msleep mchehab
2006-03-20 15:08 ` [PATCH 062/141] V4L/DVB (3308): Use parallel transport for FusionHDTV Dual Digital USB mchehab
2006-03-20 15:08 ` [PATCH 061/141] V4L/DVB (3307): Support for Galaxis DVB-S rev1.3 mchehab
2006-03-20 15:08 ` [PATCH 063/141] V4L/DVB (3310): Use MT352 parallel transport function for all Bluebird FusionHDTV DVB-T boxes mchehab
2006-03-20 15:08 ` [PATCH 064/141] V4L/DVB (3312): FIX: Multiple usage of VP7045-based devices mchehab
2006-03-20 15:08 ` [PATCH 065/141] V4L/DVB (3313): FIX: Check if FW was downloaded or not + new firmware file mchehab
2006-03-20 15:08 ` [PATCH 069/141] V4L/DVB (3318a): Makes Some symbols static mchehab
2006-03-20 15:08 ` [PATCH 071/141] V4L/DVB (3318c): fix saa7146 kobject register failure mchehab
2006-03-20 15:08 ` [PATCH 068/141] V4L/DVB (3316): Add initial support for KWorld HardwareMpegTV XPert mchehab
2006-03-20 15:08 ` [PATCH 066/141] V4L/DVB (3314): Fixed em28xx based system lockup mchehab
2006-03-20 15:08 ` [PATCH 067/141] V4L/DVB (3315): Added support for the Tevion DVB-T 220RF card mchehab
2006-03-20 15:08 ` [PATCH 074/141] V4L/DVB (3325): Disabled debug on by default in tvp5150 mchehab
2006-03-20 15:08 ` [PATCH 077/141] V4L/DVB (3300b): .gitignore should also ignore StGit generated dirs mchehab
2006-03-21 12:20   ` Andrew Morton
2006-03-20 15:08 ` [PATCH 075/141] V4L/DVB (3326): Adding support for Terratec Prodigy XS mchehab
2006-03-20 15:08 ` [PATCH 072/141] V4L/DVB (3318e): DVB: remove the at76c651/tda80xx frontends mchehab
2006-03-20 15:08 ` [PATCH 073/141] V4L/DVB (3324): Fix Samsung tuner frequency ranges mchehab
2006-03-20 15:08 ` [PATCH 076/141] V4L/DVB (3300a): Removing personal email from DVB maintainers mchehab
2006-03-20 15:08 ` [PATCH 081/141] V4L/DVB (3332): XC3028 code marked with an special define option mchehab
2006-03-20 15:08 ` [PATCH 078/141] V4L/DVB (3291): Added support for xc3028 analogue tuner (Hauppauge HVR900, Terratec Hybrid XS) mchehab
2006-03-20 15:08 ` [PATCH 079/141] V4L/DVB (3292): Fixed xc3028 firmware extractor, added terratec fw support mchehab
2006-03-20 15:08 ` [PATCH 080/141] V4L/DVB (3293): Fixed amux hauppauge hvr900/terratec hybrid xs mchehab
2006-03-20 15:08 ` [PATCH 082/141] V4L/DVB (3334): Added ET61X251 fourcc type mchehab
2006-03-20 15:08 ` [PATCH 083/141] V4L/DVB (3335): Fix in-kernel build mchehab
2006-03-20 15:08 ` [PATCH 089/141] V4L/DVB (3344): KWorld HardwareMpegTV XPert must set gpio2 mchehab
2006-03-20 15:08 ` [PATCH 086/141] V4L/DVB (3340): Make a struct static mchehab
2006-03-20 15:08 ` [PATCH 085/141] V4L/DVB (3337): Drivers/media/dvb/frontends/mt312.c: cleanups mchehab
2006-03-20 15:08 ` [PATCH 088/141] V4L/DVB (3343): KWorld HardwareMpegTV XPert: Add radio support mchehab
2006-03-20 15:08 ` [PATCH 084/141] V4L/DVB (3336): Bt8xx documentation authors fix mchehab
2006-03-20 15:08 ` [PATCH 087/141] V4L/DVB (3341): Upstream sync - make 2 structs static mchehab
2006-03-20 15:08 ` [PATCH 095/141] V4L/DVB (3354): Fix maximum for the saturation and contrast controls mchehab
2006-03-20 15:08 ` [PATCH 094/141] V4L/DVB (3352): Cxusb: fix lgdt3303 naming mchehab
2006-03-20 15:08 ` [PATCH 093/141] V4L/DVB (3349): Remote control codes for BTTV_BOARD_CONTVFMI mchehab
2006-03-20 15:08 ` [PATCH 090/141] V4L/DVB (3346): Add saa713x card: ELSA EX-VISION 700TV (saa7130) mchehab
2006-03-20 15:08 ` [PATCH 092/141] V4L/DVB (3348): Fixed saa7134 ALSA initialization with multiple cards mchehab
2006-03-20 15:08 ` [PATCH 091/141] V4L/DVB (3347): Pinnacle PCTV 40i: add filtered Composite2 input mchehab
2006-03-20 15:08 ` [PATCH 097/141] V4L/DVB (3362): KWorld ATSC110: implement set_pll_input mchehab
2006-03-20 15:08 ` [PATCH 100/141] V4L/DVB (3366): Kworld ATSC110: initialize the tuner for analog mode on module load mchehab
2006-03-20 15:08 ` [PATCH 098/141] V4L/DVB (3363): Kworld ATSC110: enable composite and svideo inputs mchehab
2006-03-20 15:08 ` [PATCH 096/141] V4L/DVB (3361): Add support for Kworld ATSC110 mchehab
2006-03-20 15:08 ` [PATCH 099/141] V4L/DVB (3365): Kworld ATSC110: cleanups mchehab
2006-03-20 15:08 ` [PATCH 101/141] V4L/DVB (3368): KWorld HardwareMpegTV XPert: update comments mchehab
2006-03-20 15:08 ` [PATCH 103/141] V4L/DVB (3371): Add debug to ioctl arguments mchehab
2006-03-20 15:08 ` [PATCH 106/141] V4L/DVB (3374): Adds debuging v4l2_memory enum mchehab
2006-03-20 15:08 ` [PATCH 107/141] V4L/DVB (3375): Add AUDIO_GET_PTS and VIDEO_GET_PTS ioctls mchehab
2006-03-20 15:08 ` [PATCH 105/141] V4L/DVB (3373): Debug messages for ioctl improved mchehab
2006-03-20 15:08 ` [PATCH 102/141] V4L/DVB (3369): LifeView FlyDVB-T Duo: add support for remote control mchehab
2006-03-20 15:08 ` [PATCH 104/141] V4L/DVB (3372): Fix a small bug when constructing fps and line numbers mchehab
2006-03-20 15:08 ` [PATCH 109/141] V4L/DVB (3377): Support for Satelco EasyWatch DVB-S light mchehab
2006-03-20 15:08 ` [PATCH 111/141] V4L/DVB (3380): TUV1236d: declare buffer as static const mchehab
2006-03-20 15:08 ` [PATCH 110/141] V4L/DVB (3378): Restore power on defaults of tda9887 after tda8290 probe mchehab
2006-03-20 15:08 ` [PATCH 112/141] V4L/DVB (3382): Fix stv0297 for qam128 on tt c1500 (saa7146) mchehab
2006-03-20 15:08 ` [PATCH 114/141] V4L/DVB (3386): Dvb-core: remove dead code mchehab
2006-03-20 15:08 ` [PATCH 116/141] V4L/DVB (3389): Fix broken IF-OUT Relay handling mchehab
2006-03-20 15:08 ` [PATCH 118/141] V4L/DVB (3391): Documentation update mchehab
2006-03-20 15:08 ` [PATCH 113/141] V4L/DVB (3385): Dvb: fix __init/__exit section references in av7110 driver mchehab
2006-03-20 15:08 ` [PATCH 117/141] V4L/DVB (3390): Fix module parameters mchehab
2006-03-20 15:56   ` Duncan Sands
2006-03-20 19:10     ` Edgar Toernig
2006-03-21 11:18       ` Duncan Sands
2006-03-20 15:08 ` [PATCH 115/141] V4L/DVB (3388): Ignore DiSEqC messages > 6 and < 3 mchehab
2006-03-20 15:08 ` [PATCH 120/141] V4L/DVB (3392a): XC3028 code removed from -git versions mchehab
2006-03-20 15:08 ` [PATCH 122/141] V4L/DVB (3394): Bttv: correct bttv_risc_packed buffer size mchehab
2006-03-20 15:08 ` [PATCH 124/141] V4L/DVB (3396): Add DVB-T support for the LifeView DVB Trio PCI card mchehab
2006-03-20 15:08 ` [PATCH 123/141] V4L/DVB (3395): Fixed Pinnacle 300i DVB-T support mchehab
2006-03-20 15:08 ` [PATCH 121/141] V4L/DVB (3393): Cx88: reduce excessive logging mchehab
2006-03-20 15:08 ` [PATCH 119/141] V4L/DVB (3392): Do a RESYNC for all cards mchehab
2006-03-20 15:08 ` [PATCH 128/141] V4L/DVB (3399a): cpia2/cpia2_v4l.c cleanups mchehab
2006-03-20 15:08 ` [PATCH 131/141] V4L/DVB (3403): Workaround to fix initialization for Nexus CA mchehab
2006-03-20 15:08 ` [PATCH 125/141] V4L/DVB (3398): ELSA EX-VISION 700TV: fix incorrect PCI subsystem ID mchehab
2006-03-20 15:08 ` [PATCH 126/141] V4L/DVB (3399): ELSA EX-VISION 500TV: " mchehab
2006-03-20 15:08 ` [PATCH 130/141] V4L/DVB (3401): Coding style fixes in saa7134-dvb.c mchehab
2006-03-20 15:08 ` [PATCH 129/141] V4L/DVB (3400): Fixes for Lifeview Trio non fatal bugs mchehab
2006-03-20 15:08 ` [PATCH 127/141] V4L/DVB (3197a): IR keymaps are exported by the ir-common module now mchehab
2006-03-20 15:08 ` [PATCH 132/141] V4L/DVB (3404): Refactored LNBP21 and BSBE1 support mchehab
2006-03-20 15:08 ` [PATCH 134/141] V4L/DVB (3406): Use refactored LNBP21 and BSBE1 code mchehab
2006-03-20 15:08 ` [PATCH 137/141] V4L/DVB (3410): Move DViCO hybrid initialisation data from stack mchehab
2006-03-20 15:08 ` [PATCH 135/141] V4L/DVB (3408): DViCO FusionHDTV DVB-T Hybrid and ZL10353-based FusionHDTV DVB-T Plus support mchehab
2006-03-20 15:08 ` [PATCH 133/141] V4L/DVB (3405): TechnoTrend S-1500 card handling moved from budget.c to budget-ci.c mchehab
2006-03-20 15:08 ` [PATCH 136/141] V4L/DVB (3409): Kconfig: fix in-kernel build for cx88-dvb: zl10353 frontend mchehab
2006-03-20 15:09 ` [PATCH 141/141] V4L/DVB (3415): Msp3400-kthreads.c: make 3 functions static mchehab
2006-03-20 15:09 ` [PATCH 140/141] V4L/DVB (3414): Saa7134: document that there's also a 220RF from KWorld mchehab
2006-03-20 15:09 ` [PATCH 139/141] V4L/DVB (3413): Typos grab bag of the month mchehab
2006-03-20 15:09 ` [PATCH 138/141] V4L/DVB (3411): FE6600 is a Thomson tuner mchehab
2006-03-20 15:49 ` [PATCH 000/141] V4L/DVB updates part 1 Kyle McMartin
2006-03-20 15:50 ` Arjan van de Ven
2006-03-20 17:51 ` Valdis.Kletnieks
2006-03-20 17:55   ` Mauro Carvalho Chehab
2006-03-21 15:47 ` Linus Torvalds
2006-03-21 16:26   ` Linus Torvalds
2006-03-21 17:43     ` Mauro Carvalho Chehab
2006-03-21 18:03       ` Linus Torvalds
2006-03-21 18:24         ` Mauro Carvalho Chehab
2006-03-21 18:42           ` Linus Torvalds
2006-03-21 19:15             ` Mauro Carvalho Chehab
2006-03-21 19:32               ` Linus Torvalds
2006-03-21 23:53                 ` Daniel Barkalow
2006-03-22  0:33                   ` Linus Torvalds
2006-03-22 21:32                     ` Junio C Hamano
2006-03-23  3:31                       ` Linus Torvalds
2006-03-22 12:05                   ` Mauro Carvalho Chehab

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20060320150840.PS695488000022@infradead.org \
    --to=mchehab@infradead.org \
    --cc=linux-dvb-maintainer@linuxtv.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox