aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/v4l2-device.c
diff options
context:
space:
mode:
authorHans Verkuil <hverkuil@xs4all.nl>2009-03-14 07:28:45 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-03-30 11:43:22 -0400
commitae6cfaace120f4330715b56265ce0e4a710e1276 (patch)
treeed01c11218132e92ce8fe4872fe26c572c3c8842 /drivers/media/video/v4l2-device.c
parent6273fda6e32e2cd9a478545d0cbc15ac497b1f4b (diff)
V4L/DVB (11044): v4l2-device: add v4l2_device_disconnect
Call v4l2_device_disconnect when the parent of a hotpluggable device disconnects. This ensures that you do not have a pointer to a device that is no longer present. Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/v4l2-device.c')
-rw-r--r--drivers/media/video/v4l2-device.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/drivers/media/video/v4l2-device.c b/drivers/media/video/v4l2-device.c
index b3dcb8454379..94aa485ade52 100644
--- a/drivers/media/video/v4l2-device.c
+++ b/drivers/media/video/v4l2-device.c
@@ -49,19 +49,26 @@ int v4l2_device_register(struct device *dev, struct v4l2_device *v4l2_dev)
49} 49}
50EXPORT_SYMBOL_GPL(v4l2_device_register); 50EXPORT_SYMBOL_GPL(v4l2_device_register);
51 51
52void v4l2_device_disconnect(struct v4l2_device *v4l2_dev)
53{
54 if (v4l2_dev->dev) {
55 dev_set_drvdata(v4l2_dev->dev, NULL);
56 v4l2_dev->dev = NULL;
57 }
58}
59EXPORT_SYMBOL_GPL(v4l2_device_disconnect);
60
52void v4l2_device_unregister(struct v4l2_device *v4l2_dev) 61void v4l2_device_unregister(struct v4l2_device *v4l2_dev)
53{ 62{
54 struct v4l2_subdev *sd, *next; 63 struct v4l2_subdev *sd, *next;
55 64
56 if (v4l2_dev == NULL) 65 if (v4l2_dev == NULL)
57 return; 66 return;
58 if (v4l2_dev->dev) 67 v4l2_device_disconnect(v4l2_dev);
59 dev_set_drvdata(v4l2_dev->dev, NULL); 68
60 /* Unregister subdevs */ 69 /* Unregister subdevs */
61 list_for_each_entry_safe(sd, next, &v4l2_dev->subdevs, list) 70 list_for_each_entry_safe(sd, next, &v4l2_dev->subdevs, list)
62 v4l2_device_unregister_subdev(sd); 71 v4l2_device_unregister_subdev(sd);
63
64 v4l2_dev->dev = NULL;
65} 72}
66EXPORT_SYMBOL_GPL(v4l2_device_unregister); 73EXPORT_SYMBOL_GPL(v4l2_device_unregister);
67 74