ChangeSet 1.1276.22.23, 2003/08/22 15:42:25-07:00, [EMAIL PROTECTED]

[PATCH] USB: convert stv680 driver to handle the driver core changes in the v4l layer


 drivers/usb/media/stv680.c |   50 +++++++++++++++++++++++++++++++--------------
 drivers/usb/media/stv680.h |    2 -
 2 files changed, 36 insertions(+), 16 deletions(-)


diff -Nru a/drivers/usb/media/stv680.c b/drivers/usb/media/stv680.c
--- a/drivers/usb/media/stv680.c        Tue Sep  2 12:46:47 2003
+++ b/drivers/usb/media/stv680.c        Tue Sep  2 12:46:47 2003
@@ -1000,7 +1000,7 @@
 static int stv_open (struct inode *inode, struct file *file)
 {
        struct video_device *dev = video_devdata(file);
-       struct usb_stv *stv680 = (struct usb_stv *) dev;
+       struct usb_stv *stv680 = video_get_drvdata(dev);
        int err = 0;
 
        /* we are called with the BKL held */
@@ -1024,7 +1024,7 @@
 static int stv_close (struct inode *inode, struct file *file)
 {
        struct video_device *dev = file->private_data;
-       struct usb_stv *stv680 = (struct usb_stv *) dev;
+       struct usb_stv *stv680 = video_get_drvdata(dev);
        int i;
 
        for (i = 0; i < STV680_NUMFRAMES; i++)
@@ -1051,7 +1051,7 @@
                            unsigned int cmd, void *arg)
 {
        struct video_device *vdev = file->private_data;
-       struct usb_stv *stv680 = (struct usb_stv *) vdev;
+       struct usb_stv *stv680 = video_get_drvdata(vdev);
 
        if (!stv680->udev)
                return -EIO;
@@ -1227,7 +1227,7 @@
 static int stv680_mmap (struct file *file, struct vm_area_struct *vma)
 {
        struct video_device *dev = file->private_data;
-       struct usb_stv *stv680 = (struct usb_stv *) dev;
+       struct usb_stv *stv680 = video_get_drvdata(dev);
        unsigned long start = vma->vm_start;
        unsigned long size  = vma->vm_end-vma->vm_start;
        unsigned long page, pos;
@@ -1268,7 +1268,7 @@
        struct video_device *dev = file->private_data;
        unsigned long int realcount = count;
        int ret = 0;
-       struct usb_stv *stv680 = (struct usb_stv *) dev;
+       struct usb_stv *stv680 = video_get_drvdata(dev);
        unsigned long int i;
 
        if (STV680_NUMFRAMES != 2) {
@@ -1325,14 +1325,17 @@
        .type =         VID_TYPE_CAPTURE,
        .hardware =     VID_HARDWARE_SE401,
        .fops =         &stv680_fops,
+       .release =      video_device_release,
+       .minor =        -1,
 };
 
 static int stv680_probe (struct usb_interface *intf, const struct usb_device_id *id)
 {
        struct usb_device *dev = interface_to_usbdev(intf);
        struct usb_host_interface *interface;
-       struct usb_stv *stv680;
+       struct usb_stv *stv680 = NULL;
        char *camera_name = NULL;
+       int retval = 0;
 
        /* We don't handle multi-config cameras */
        if (dev->descriptor.bNumConfigurations != 1) {
@@ -1348,12 +1351,14 @@
        } else {
                PDEBUG (0, "STV(e): Vendor/Product ID do not match STV0680 values.");
                PDEBUG (0, "STV(e): Check that the STV0680 camera is connected to the 
computer.");
-               return -ENODEV;
+               retval = -ENODEV;
+               goto error;
        }
        /* We found one */
        if ((stv680 = kmalloc (sizeof (*stv680), GFP_KERNEL)) == NULL) {
                PDEBUG (0, "STV(e): couldn't kmalloc stv680 struct.");
-               return -ENOMEM;
+               retval = -ENOMEM;
+               goto error;
        }
 
        memset (stv680, 0, sizeof (*stv680));
@@ -1361,21 +1366,33 @@
        stv680->udev = dev;
        stv680->camera_name = camera_name;
 
-       memcpy (&stv680->vdev, &stv680_template, sizeof (stv680_template));
-       memcpy (stv680->vdev.name, stv680->camera_name, strlen (stv680->camera_name));
+       stv680->vdev = video_device_alloc();
+       if (!stv680->vdev) {
+               retval = -ENOMEM;
+               goto error;
+       }
+       memcpy(stv680->vdev, &stv680_template, sizeof(stv680_template));
+       stv680->vdev->dev = &intf->dev;
+       video_set_drvdata(stv680->vdev, stv680);
+
+       memcpy (stv680->vdev->name, stv680->camera_name, strlen (stv680->camera_name));
        init_waitqueue_head (&stv680->wq);
        init_MUTEX (&stv680->lock);
        wmb ();
 
-       if (video_register_device (&stv680->vdev, VFL_TYPE_GRABBER, video_nr) == -1) {
-               kfree (stv680);
+       if (video_register_device (stv680->vdev, VFL_TYPE_GRABBER, video_nr) == -1) {
                PDEBUG (0, "STV(e): video_register_device failed");
-               return -EIO;
+               retval = -EIO;
+               goto error;
        }
-       PDEBUG (0, "STV(i): registered new video device: video%d", stv680->vdev.minor);
+       PDEBUG (0, "STV(i): registered new video device: video%d", 
stv680->vdev->minor);
 
        usb_set_intfdata (intf, stv680);
        return 0;
+
+error:
+       kfree(stv680);
+       return retval;
 }
 
 static inline void usb_stv680_remove_disconnected (struct usb_stv *stv680)
@@ -1414,7 +1431,10 @@
 
        if (stv680) {
                /* We don't want people trying to open up the device */
-               video_unregister_device (&stv680->vdev);
+               if (stv680->vdev) {
+                       video_unregister_device(stv680->vdev);
+                       stv680->vdev = NULL;
+               }
                if (!stv680->user) {
                        usb_stv680_remove_disconnected (stv680);
                } else {
diff -Nru a/drivers/usb/media/stv680.h b/drivers/usb/media/stv680.h
--- a/drivers/usb/media/stv680.h        Tue Sep  2 12:46:47 2003
+++ b/drivers/usb/media/stv680.h        Tue Sep  2 12:46:47 2003
@@ -89,7 +89,7 @@
 
 /* this is almost the video structure uvd_t, with extra parameters for stv */
 struct usb_stv {
-       struct video_device vdev;
+       struct video_device *vdev;
 
        struct usb_device *udev;
 



-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to