diff options
author | Hans Verkuil <hverkuil@xs4all.nl> | 2009-05-02 09:58:51 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2009-06-16 17:20:51 -0400 |
commit | b5b2b7ed569cedac4f5da38e08b01c88443187bd (patch) | |
tree | d21f735f5f50fd79ea72d176a2ec2872218ef0a2 /drivers/media/video/v4l2-device.c | |
parent | a79b11c025a5757a5129e716e7e66dc36a2dfe21 (diff) |
V4L/DVB (11673): v4l2-device: unregister i2c_clients when unregistering the v4l2_device.
Until now I relied on i2c_del_adapter to unregister the i2c_clients for
me, however, if the i2c bus is a platform bus then it is never deleted.
So instead I need to unregister i2c clients when unregistering the
v4l2_device.
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.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/media/video/v4l2-device.c b/drivers/media/video/v4l2-device.c index ffb425f7c24c..e1520bc84f71 100644 --- a/drivers/media/video/v4l2-device.c +++ b/drivers/media/video/v4l2-device.c | |||
@@ -83,8 +83,19 @@ void v4l2_device_unregister(struct v4l2_device *v4l2_dev) | |||
83 | v4l2_device_disconnect(v4l2_dev); | 83 | v4l2_device_disconnect(v4l2_dev); |
84 | 84 | ||
85 | /* Unregister subdevs */ | 85 | /* Unregister subdevs */ |
86 | list_for_each_entry_safe(sd, next, &v4l2_dev->subdevs, list) | 86 | list_for_each_entry_safe(sd, next, &v4l2_dev->subdevs, list) { |
87 | v4l2_device_unregister_subdev(sd); | 87 | v4l2_device_unregister_subdev(sd); |
88 | if (sd->flags & V4L2_SUBDEV_FL_IS_I2C) { | ||
89 | struct i2c_client *client = v4l2_get_subdevdata(sd); | ||
90 | |||
91 | /* We need to unregister the i2c client explicitly. | ||
92 | We cannot rely on i2c_del_adapter to always | ||
93 | unregister clients for us, since if the i2c bus | ||
94 | is a platform bus, then it is never deleted. */ | ||
95 | if (client) | ||
96 | i2c_unregister_device(client); | ||
97 | } | ||
98 | } | ||
88 | } | 99 | } |
89 | EXPORT_SYMBOL_GPL(v4l2_device_unregister); | 100 | EXPORT_SYMBOL_GPL(v4l2_device_unregister); |
90 | 101 | ||