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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox