Guennadi, Can you review/ack this? This patch series really should be merged for 3.11 to prevent problems with the debug ioctls being unable to discover and access subdevices in the v4l2-core code. I've tested this on my renesas board. If you prefer, you can also take care of this patch yourself. Regards, Hans On Wed June 12 2013 17:00:52 Hans Verkuil wrote: > From: Hans Verkuil <hans.verkuil@xxxxxxxxx> > > The parent field will eventually disappear to be replaced by v4l2_dev. > soc_camera does provide a v4l2_device struct but did not point to it in > struct video_device. This is now fixed. > > Now the video nodes can be found under the correct platform bus, and > the advanced debug ioctls work correctly as well (the core implementation > of those ioctls requires that v4l2_dev is set correctly). > > Signed-off-by: Hans Verkuil <hans.verkuil@xxxxxxxxx> > --- > drivers/media/platform/soc_camera/soc_camera.c | 5 +++-- > include/media/soc_camera.h | 4 ++-- > 2 files changed, 5 insertions(+), 4 deletions(-) > > diff --git a/drivers/media/platform/soc_camera/soc_camera.c b/drivers/media/platform/soc_camera/soc_camera.c > index 0252fbb..9a43560 100644 > --- a/drivers/media/platform/soc_camera/soc_camera.c > +++ b/drivers/media/platform/soc_camera/soc_camera.c > @@ -524,7 +524,7 @@ static int soc_camera_open(struct file *file) > return -ENODEV; > } > > - icd = dev_get_drvdata(vdev->parent); > + icd = video_get_drvdata(vdev); > ici = to_soc_camera_host(icd->parent); > > ret = try_module_get(ici->ops->owner) ? 0 : -ENODEV; > @@ -1477,7 +1477,7 @@ static int video_dev_create(struct soc_camera_device *icd) > > strlcpy(vdev->name, ici->drv_name, sizeof(vdev->name)); > > - vdev->parent = icd->pdev; > + vdev->v4l2_dev = &ici->v4l2_dev; > vdev->fops = &soc_camera_fops; > vdev->ioctl_ops = &soc_camera_ioctl_ops; > vdev->release = video_device_release; > @@ -1500,6 +1500,7 @@ static int soc_camera_video_start(struct soc_camera_device *icd) > if (!icd->parent) > return -ENODEV; > > + video_set_drvdata(icd->vdev, icd); > ret = video_register_device(icd->vdev, VFL_TYPE_GRABBER, -1); > if (ret < 0) { > dev_err(icd->pdev, "video_register_device failed: %d\n", ret); > diff --git a/include/media/soc_camera.h b/include/media/soc_camera.h > index ff77d08..31a4bfe 100644 > --- a/include/media/soc_camera.h > +++ b/include/media/soc_camera.h > @@ -346,9 +346,9 @@ static inline struct soc_camera_subdev_desc *soc_camera_i2c_to_desc(const struct > return client->dev.platform_data; > } > > -static inline struct v4l2_subdev *soc_camera_vdev_to_subdev(const struct video_device *vdev) > +static inline struct v4l2_subdev *soc_camera_vdev_to_subdev(struct video_device *vdev) > { > - struct soc_camera_device *icd = dev_get_drvdata(vdev->parent); > + struct soc_camera_device *icd = video_get_drvdata(vdev); > return soc_camera_to_subdev(icd); > } > > -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html