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:
next 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.