diff options
author | Hans Verkuil <hans.verkuil@cisco.com> | 2013-06-12 04:46:30 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2013-06-21 10:03:18 -0400 |
commit | f1741fa8dd4a561e883cf60f103c40eda8790d80 (patch) | |
tree | 0015fd229a623885c4785f341a81a18e11ed7e40 | |
parent | 9592bd0a9e74c344f674663137e5ccff7a39f7d0 (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.h | 3 | ||||
-rw-r--r-- | drivers/media/usb/sn9c102/sn9c102_core.c | 13 |
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); | |||
100 | struct sn9c102_device { | 101 | struct 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); |