The patch number 10873 was added via Hans Verkuil <[email protected]>
to http://linuxtv.org/hg/v4l-dvb master development tree.

Kernel patches in this development tree may be modified to be backward
compatible with older kernels. Compatibility modifications will be
removed before inclusion into the mainstream Kernel

If anyone has any objections, please let us know by sending a message to:
        Linux Media Mailing List <[email protected]>

------

From: Hans Verkuil  <[email protected]>
w9968cf: add v4l2_device.


Priority: normal

Signed-off-by: Hans Verkuil <[email protected]>


---

 linux/drivers/media/video/w9968cf.c |   20 +++++++++++++-------
 linux/drivers/media/video/w9968cf.h |   16 ++++++++--------
 2 files changed, 21 insertions(+), 15 deletions(-)

diff -r 6bd427caa0cb -r e8c008b9e211 linux/drivers/media/video/w9968cf.c
--- a/linux/drivers/media/video/w9968cf.c       Fri Mar 06 08:31:39 2009 -0300
+++ b/linux/drivers/media/video/w9968cf.c       Sun Mar 08 10:56:19 2009 +0100
@@ -3506,12 +3506,14 @@ w9968cf_usb_probe(struct usb_interface* 
        if (!cam)
                return -ENOMEM;
 
+       err = v4l2_device_register(&udev->dev, &cam->v4l2_dev);
+       if (err)
+               goto fail0;
+
        mutex_init(&cam->dev_mutex);
        mutex_lock(&cam->dev_mutex);
 
        cam->usbdev = udev;
-       /* NOTE: a local copy is used to avoid possible race conditions */
-       memcpy(&cam->dev, &udev->dev, sizeof(struct device));
 
        DBG(2, "%s detected", symbolic(camlist, mod_id))
 
@@ -3560,7 +3562,7 @@ w9968cf_usb_probe(struct usb_interface* 
        cam->v4ldev->minor = video_nr[dev_nr];
        cam->v4ldev->release = video_device_release;
        video_set_drvdata(cam->v4ldev, cam);
-       cam->v4ldev->parent = &cam->dev;
+       cam->v4ldev->v4l2_dev = &cam->v4l2_dev;
 
        err = video_register_device(cam->v4ldev, VFL_TYPE_GRABBER,
                                    video_nr[dev_nr]);
@@ -3590,6 +3592,9 @@ w9968cf_usb_probe(struct usb_interface* 
 
        usb_set_intfdata(intf, cam);
        mutex_unlock(&cam->dev_mutex);
+
+       if (ovmod_load)
+               request_module("ovcamchip");
        return 0;
 
 fail: /* Free unused memory */
@@ -3598,6 +3603,8 @@ fail: /* Free unused memory */
        if (cam->v4ldev)
                video_device_release(cam->v4ldev);
        mutex_unlock(&cam->dev_mutex);
+       v4l2_device_unregister(&cam->v4l2_dev);
+fail0:
        kfree(cam);
        return err;
 }
@@ -3633,8 +3640,10 @@ static void w9968cf_usb_disconnect(struc
 
                mutex_unlock(&cam->dev_mutex);
 
-               if (!cam->users)
+               if (!cam->users) {
+                       v4l2_device_unregister(&cam->v4l2_dev);
                        kfree(cam);
+               }
        }
 
        up_write(&w9968cf_disconnect);
@@ -3661,9 +3670,6 @@ static int __init w9968cf_module_init(vo
        KDBG(2, W9968CF_MODULE_NAME" "W9968CF_MODULE_VERSION)
        KDBG(3, W9968CF_MODULE_AUTHOR)
 
-       if (ovmod_load)
-               request_module("ovcamchip");
-
        if ((err = usb_register(&w9968cf_usb_driver)))
                return err;
 
diff -r 6bd427caa0cb -r e8c008b9e211 linux/drivers/media/video/w9968cf.h
--- a/linux/drivers/media/video/w9968cf.h       Fri Mar 06 08:31:39 2009 -0300
+++ b/linux/drivers/media/video/w9968cf.h       Sun Mar 08 10:56:19 2009 +0100
@@ -33,6 +33,7 @@
 #include <linux/rwsem.h>
 #include <linux/mutex.h>
 
+#include <media/v4l2-device.h>
 #include <media/ovcamchip.h>
 #include "compat.h"
 
@@ -196,10 +197,9 @@ enum w9968cf_vpp_flag {
 
 /* Main device driver structure */
 struct w9968cf_device {
-       struct device dev; /* device structure */
-
        enum w9968cf_model_id id;   /* private device identifier */
 
+       struct v4l2_device v4l2_dev;
        struct video_device* v4ldev; /* -> V4L structure */
        struct list_head v4llist;    /* entry of the list of V4L cameras */
 
@@ -292,14 +292,14 @@ struct w9968cf_device {
        if ( ((specific_debug) && (debug == (level))) ||                      \
             ((!specific_debug) && (debug >= (level))) ) {                    \
                if ((level) == 1)                                             \
-                       dev_err(&cam->dev, fmt "\n", ## args);                \
+                       v4l2_err(&cam->v4l2_dev, fmt "\n", ## args);          \
                else if ((level) == 2 || (level) == 3)                        \
-                       dev_info(&cam->dev, fmt "\n", ## args);               \
+                       v4l2_info(&cam->v4l2_dev, fmt "\n", ## args);         \
                else if ((level) == 4)                                        \
-                       dev_warn(&cam->dev, fmt "\n", ## args);               \
+                       v4l2_warn(&cam->v4l2_dev, fmt "\n", ## args);         \
                else if ((level) >= 5)                                        \
-                       dev_info(&cam->dev, "[%s:%d] " fmt "\n",              \
-                                __func__, __LINE__ , ## args);           \
+                       v4l2_info(&cam->v4l2_dev, "[%s:%d] " fmt "\n",        \
+                                __func__, __LINE__ , ## args);               \
        }                                                                     \
 }
 /* For generic kernel (not device specific) messages */
@@ -322,7 +322,7 @@ struct w9968cf_device {
 
 #undef PDBG
 #define PDBG(fmt, args...)                                                    \
-dev_info(&cam->dev, "[%s:%d] " fmt "\n", __func__, __LINE__ , ## args);
+v4l2_info(&cam->v4l2_dev, "[%s:%d] " fmt "\n", __func__, __LINE__ , ## args);
 
 #undef PDBGG
 #define PDBGG(fmt, args...) do {;} while(0); /* nothing: it's a placeholder */


---

Patch is available at: 
http://linuxtv.org/hg/v4l-dvb/rev/e8c008b9e211b539feee083b7174ca393d1446bf

_______________________________________________
linuxtv-commits mailing list
[email protected]
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to