All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Dean A." <dean@sensoray.com>
To: linux-media@vger.kernel.org
Cc: hverkuil@xs4all.nl
Subject: [PATCH] s2255drv: v4l2 device added
Date: Wed, 31 Mar 2010 09:34:39 -0700 (PDT)	[thread overview]
Message-ID: <tkrat.6506e871933e5a00@sensoray.com> (raw)

# HG changeset patch
# User Dean Anderson <dean@sensoray.com>
# Date 1270053044 25200
# Node ID 0690e4e1d81e785af1a5f06a13573dcf2cc5cb0c
# Parent  c72bdc8732abc0cf7bc376babfd06b2d999bdcf4
s2255drv: adding v4l2_device structure. video_register_device cleanup

From: Dean Anderson <dean@sensoray.com>

adding v4l2_device structure.
if one video_register_device call fails, allows use of other devices
or channels.

Priority: normal

Signed-off-by: Dean Anderson <dean@sensoray.com>

diff -r c72bdc8732ab -r 0690e4e1d81e linux/drivers/media/video/s2255drv.c
--- a/linux/drivers/media/video/s2255drv.c	Wed Mar 31 07:38:11 2010 -0700
+++ b/linux/drivers/media/video/s2255drv.c	Wed Mar 31 09:30:44 2010 -0700
@@ -51,6 +51,7 @@
 #include <linux/smp_lock.h>
 #include <media/videobuf-vmalloc.h>
 #include <media/v4l2-common.h>
+#include <media/v4l2-device.h>
 #include <media/v4l2-ioctl.h>
 #include <linux/vmalloc.h>
 #include <linux/usb.h>
@@ -77,7 +78,6 @@
 #define S2255_DEF_BUFS          16
 #define S2255_SETMODE_TIMEOUT   500
 #define S2255_VIDSTATUS_TIMEOUT 350
-#define MAX_CHANNELS		4
 #define S2255_MARKER_FRAME	cpu_to_le32(0x2255DA4AL)
 #define S2255_MARKER_RESPONSE	cpu_to_le32(0x2255ACACL)
 #define S2255_RESPONSE_SETMODE  cpu_to_le32(0x01)
@@ -225,6 +225,8 @@
 
 struct s2255_dev {
 	struct video_device	vdev[MAX_CHANNELS];
+	struct v4l2_device 	v4l2_dev[MAX_CHANNELS];
+	int                     channels; /* number of channels registered */
 	int			frames;
 	struct mutex		lock;
 	struct mutex		open_lock;
@@ -1753,7 +1755,8 @@
 	int state;
 	dprintk(1, "s2255: open called (dev=%s)\n",
 		video_device_node_name(vdev));
-	for (i = 0; i < MAX_CHANNELS; i++)
+
+	for (i = 0; i < dev->channels; i++)
 		if (&dev->vdev[i] == vdev) {
 			cur_channel = i;
 			break;
@@ -1994,7 +1997,11 @@
 	int ret;
 	int i;
 	int cur_nr = video_nr;
-
+	for (i = 0; i < MAX_CHANNELS; i++) {
+		ret = v4l2_device_register(&dev->udev->dev, &dev->v4l2_dev[i]);
+		if (ret)
+			goto unreg_v4l2;
+	}
 	/* initialize all video 4 linux */
 	/* register 4 video devices */
 	for (i = 0; i < MAX_CHANNELS; i++) {
@@ -2014,16 +2021,29 @@
 						    VFL_TYPE_GRABBER,
 						    cur_nr + i);
 		video_set_drvdata(&dev->vdev[i], dev);
-
-		if (ret != 0) {
+		if (ret) {
 			dev_err(&dev->udev->dev,
 				"failed to register video device!\n");
-			return ret;
+			break;
 		}
+		dev->channels++;
+		v4l2_info(&dev->v4l2_dev[i], "V4L2 device registered as %s\n",
+			  video_device_node_name(&dev->vdev[i]));
+
 	}
+
 	printk(KERN_INFO "Sensoray 2255 V4L driver Revision: %d.%d\n",
 	       S2255_MAJOR_VERSION,
 	       S2255_MINOR_VERSION);
+	/* if no channels registered, return error and probe will fail*/
+	if (dev->channels == 0)
+		return ret;
+	if (dev->channels != MAX_CHANNELS)
+		printk(KERN_WARNING "s2255: Not all channels available.\n");
+	return 0;
+unreg_v4l2:
+	for (i-- ; i > 0; i--)
+		v4l2_device_unregister(&dev->v4l2_dev[i]);
 	return ret;
 }
 
@@ -2705,13 +2725,9 @@
 	/* loads v4l specific */
 	retval = s2255_probe_v4l(dev);
 	if (retval)
-		goto errorV4L;
+		goto errorBOARDINIT;
 	dev_info(&interface->dev, "Sensoray 2255 detected\n");
 	return 0;
-errorV4L:
-	for (i = 0; i < MAX_CHANNELS; i++)
-		if (video_is_registered(&dev->vdev[i]))
-			video_unregister_device(&dev->vdev[i]);
 errorBOARDINIT:
 	s2255_board_shutdown(dev);
 errorFWMARKER:


             reply	other threads:[~2010-03-31 16:41 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-31 16:34 Dean A. [this message]
2010-03-31 19:03 ` [PATCH] s2255drv: v4l2 device added Hans Verkuil
2010-03-31 19:35   ` dean

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=tkrat.6506e871933e5a00@sensoray.com \
    --to=dean@sensoray.com \
    --cc=hverkuil@xs4all.nl \
    --cc=linux-media@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.