aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Verkuil <hans.verkuil@cisco.com>2013-06-12 04:46:30 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2013-06-21 10:03:18 -0400
commitf1741fa8dd4a561e883cf60f103c40eda8790d80 (patch)
tree0015fd229a623885c4785f341a81a18e11ed7e40
parent9592bd0a9e74c344f674663137e5ccff7a39f7d0 (diff)
[media] sn9c102_core: add v4l2_device and replace parent with v4l2_dev
This driver did not yet support struct v4l2_device, so add it. This make it possible to replace the deprecated parent field with the v4l2_dev field, allowing the eventual removal of the parent field. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/usb/sn9c102/sn9c102.h3
-rw-r--r--drivers/media/usb/sn9c102/sn9c102_core.c13
2 files changed, 15 insertions, 1 deletions
diff --git a/drivers/media/usb/sn9c102/sn9c102.h b/drivers/media/usb/sn9c102/sn9c102.h
index 2bc153e869be..8a917f060503 100644
--- a/drivers/media/usb/sn9c102/sn9c102.h
+++ b/drivers/media/usb/sn9c102/sn9c102.h
@@ -25,6 +25,7 @@
25#include <linux/videodev2.h> 25#include <linux/videodev2.h>
26#include <media/v4l2-common.h> 26#include <media/v4l2-common.h>
27#include <media/v4l2-ioctl.h> 27#include <media/v4l2-ioctl.h>
28#include <media/v4l2-device.h>
28#include <linux/device.h> 29#include <linux/device.h>
29#include <linux/list.h> 30#include <linux/list.h>
30#include <linux/spinlock.h> 31#include <linux/spinlock.h>
@@ -100,6 +101,8 @@ static DECLARE_RWSEM(sn9c102_dev_lock);
100struct sn9c102_device { 101struct sn9c102_device {
101 struct video_device* v4ldev; 102 struct video_device* v4ldev;
102 103
104 struct v4l2_device v4l2_dev;
105
103 enum sn9c102_bridge bridge; 106 enum sn9c102_bridge bridge;
104 struct sn9c102_sensor sensor; 107 struct sn9c102_sensor sensor;
105 108
diff --git a/drivers/media/usb/sn9c102/sn9c102_core.c b/drivers/media/usb/sn9c102/sn9c102_core.c
index c957e9aa6077..2cb44de2b92c 100644
--- a/drivers/media/usb/sn9c102/sn9c102_core.c
+++ b/drivers/media/usb/sn9c102/sn9c102_core.c
@@ -1737,6 +1737,7 @@ static void sn9c102_release_resources(struct kref *kref)
1737 video_device_node_name(cam->v4ldev)); 1737 video_device_node_name(cam->v4ldev));
1738 video_set_drvdata(cam->v4ldev, NULL); 1738 video_set_drvdata(cam->v4ldev, NULL);
1739 video_unregister_device(cam->v4ldev); 1739 video_unregister_device(cam->v4ldev);
1740 v4l2_device_unregister(&cam->v4l2_dev);
1740 usb_put_dev(cam->usbdev); 1741 usb_put_dev(cam->usbdev);
1741 kfree(cam->control_buffer); 1742 kfree(cam->control_buffer);
1742 kfree(cam); 1743 kfree(cam);
@@ -3254,6 +3255,13 @@ sn9c102_usb_probe(struct usb_interface* intf, const struct usb_device_id* id)
3254 3255
3255 cam->usbdev = udev; 3256 cam->usbdev = udev;
3256 3257
3258 /* register v4l2_device early so it can be used for printks */
3259 if (v4l2_device_register(&intf->dev, &cam->v4l2_dev)) {
3260 dev_err(&intf->dev, "v4l2_device_register failed\n");
3261 err = -ENOMEM;
3262 goto fail;
3263 }
3264
3257 if (!(cam->control_buffer = kzalloc(8, GFP_KERNEL))) { 3265 if (!(cam->control_buffer = kzalloc(8, GFP_KERNEL))) {
3258 DBG(1, "kzalloc() failed"); 3266 DBG(1, "kzalloc() failed");
3259 err = -ENOMEM; 3267 err = -ENOMEM;
@@ -3325,7 +3333,7 @@ sn9c102_usb_probe(struct usb_interface* intf, const struct usb_device_id* id)
3325 strcpy(cam->v4ldev->name, "SN9C1xx PC Camera"); 3333 strcpy(cam->v4ldev->name, "SN9C1xx PC Camera");
3326 cam->v4ldev->fops = &sn9c102_fops; 3334 cam->v4ldev->fops = &sn9c102_fops;
3327 cam->v4ldev->release = video_device_release; 3335 cam->v4ldev->release = video_device_release;
3328 cam->v4ldev->parent = &udev->dev; 3336 cam->v4ldev->v4l2_dev = &cam->v4l2_dev;
3329 3337
3330 init_completion(&cam->probe); 3338 init_completion(&cam->probe);
3331 3339
@@ -3377,6 +3385,7 @@ fail:
3377 kfree(cam->control_buffer); 3385 kfree(cam->control_buffer);
3378 if (cam->v4ldev) 3386 if (cam->v4ldev)
3379 video_device_release(cam->v4ldev); 3387 video_device_release(cam->v4ldev);
3388 v4l2_device_unregister(&cam->v4l2_dev);
3380 kfree(cam); 3389 kfree(cam);
3381 } 3390 }
3382 return err; 3391 return err;
@@ -3407,6 +3416,8 @@ static void sn9c102_usb_disconnect(struct usb_interface* intf)
3407 3416
3408 wake_up_interruptible_all(&cam->wait_open); 3417 wake_up_interruptible_all(&cam->wait_open);
3409 3418
3419 v4l2_device_disconnect(&cam->v4l2_dev);
3420
3410 kref_put(&cam->kref, sn9c102_release_resources); 3421 kref_put(&cam->kref, sn9c102_release_resources);
3411 3422
3412 up_write(&sn9c102_dev_lock); 3423 up_write(&sn9c102_dev_lock);