* Re: [PATCH] media: staging/imx: add media device to capture register
2019-04-12 16:44 [PATCH] media: staging/imx: add media device to capture register Rui Miguel Silva
@ 2019-04-18 21:57 ` Laurent Pinchart
2019-04-18 22:13 ` Steve Longerbeam
2019-04-28 18:53 ` Steve Longerbeam
2 siblings, 0 replies; 5+ messages in thread
From: Laurent Pinchart @ 2019-04-18 21:57 UTC (permalink / raw)
To: Rui Miguel Silva
Cc: Hans Verkuil, Steve Longerbeam, Philipp Zabel, devel, linux-media
Hi Rui,
Thank you for the patch.
On Fri, Apr 12, 2019 at 05:44:00PM +0100, Rui Miguel Silva wrote:
> When register the capture media device it is assumed that the device
> data is the media device. In the imx6 case is but in the imx7 is not
> case. The device data is the csi structure.
>
> Add the explicit argument of the media device that we want to
> associate with the capture device.
I've tested this, and the driver no longer deadlocks. I can't capture
images though, but that may well be due to my platform, the sensor
driver hasn't been validated yet.
Thank you for your help, I will report any progress. In any case there's
certainly room for improvement in the i.MX6/7 camera driver if we want
to get it out of staging, the way the multiple components are backed by
separate drivers that access each other's device data is a big hack at
best. If time permits, after getting capture working, I'll see if I can
start cleaning it up.
> Reported-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
> ---
> drivers/staging/media/imx/imx-ic-prpencvf.c | 2 +-
> drivers/staging/media/imx/imx-media-capture.c | 6 +++---
> drivers/staging/media/imx/imx-media-csi.c | 2 +-
> drivers/staging/media/imx/imx-media.h | 3 ++-
> drivers/staging/media/imx/imx7-media-csi.c | 2 +-
> 5 files changed, 8 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/staging/media/imx/imx-ic-prpencvf.c b/drivers/staging/media/imx/imx-ic-prpencvf.c
> index 5c8e6ad8c025..3ca1422f6154 100644
> --- a/drivers/staging/media/imx/imx-ic-prpencvf.c
> +++ b/drivers/staging/media/imx/imx-ic-prpencvf.c
> @@ -1270,7 +1270,7 @@ static int prp_registered(struct v4l2_subdev *sd)
> if (ret)
> return ret;
>
> - ret = imx_media_capture_device_register(priv->vdev);
> + ret = imx_media_capture_device_register(priv->md, priv->vdev);
> if (ret)
> return ret;
>
> diff --git a/drivers/staging/media/imx/imx-media-capture.c b/drivers/staging/media/imx/imx-media-capture.c
> index 9703c85b19c4..7688238a3396 100644
> --- a/drivers/staging/media/imx/imx-media-capture.c
> +++ b/drivers/staging/media/imx/imx-media-capture.c
> @@ -706,7 +706,8 @@ void imx_media_capture_device_error(struct imx_media_video_dev *vdev)
> }
> EXPORT_SYMBOL_GPL(imx_media_capture_device_error);
>
> -int imx_media_capture_device_register(struct imx_media_video_dev *vdev)
> +int imx_media_capture_device_register(struct imx_media_dev *md,
> + struct imx_media_video_dev *vdev)
> {
> struct capture_priv *priv = to_capture_priv(vdev);
> struct v4l2_subdev *sd = priv->src_sd;
> @@ -715,8 +716,7 @@ int imx_media_capture_device_register(struct imx_media_video_dev *vdev)
> struct v4l2_subdev_format fmt_src;
> int ret;
>
> - /* get media device */
> - priv->md = dev_get_drvdata(sd->v4l2_dev->dev);
> + priv->md = md;
>
> vfd->v4l2_dev = sd->v4l2_dev;
>
> diff --git a/drivers/staging/media/imx/imx-media-csi.c b/drivers/staging/media/imx/imx-media-csi.c
> index 3b7517348666..3408ec023d29 100644
> --- a/drivers/staging/media/imx/imx-media-csi.c
> +++ b/drivers/staging/media/imx/imx-media-csi.c
> @@ -1806,7 +1806,7 @@ static int csi_registered(struct v4l2_subdev *sd)
> if (ret)
> goto free_fim;
>
> - ret = imx_media_capture_device_register(priv->vdev);
> + ret = imx_media_capture_device_register(priv->md, priv->vdev);
> if (ret)
> goto free_fim;
>
> diff --git a/drivers/staging/media/imx/imx-media.h b/drivers/staging/media/imx/imx-media.h
> index ae964c8d5be1..c3a8512bd10f 100644
> --- a/drivers/staging/media/imx/imx-media.h
> +++ b/drivers/staging/media/imx/imx-media.h
> @@ -271,7 +271,8 @@ int imx_media_of_add_csi(struct imx_media_dev *imxmd,
> struct imx_media_video_dev *
> imx_media_capture_device_init(struct v4l2_subdev *src_sd, int pad);
> void imx_media_capture_device_remove(struct imx_media_video_dev *vdev);
> -int imx_media_capture_device_register(struct imx_media_video_dev *vdev);
> +int imx_media_capture_device_register(struct imx_media_dev *md,
> + struct imx_media_video_dev *vdev);
> void imx_media_capture_device_unregister(struct imx_media_video_dev *vdev);
> struct imx_media_buffer *
> imx_media_capture_device_next_buf(struct imx_media_video_dev *vdev);
> diff --git a/drivers/staging/media/imx/imx7-media-csi.c b/drivers/staging/media/imx/imx7-media-csi.c
> index 3fba7c27c0ec..a907c5feb3eb 100644
> --- a/drivers/staging/media/imx/imx7-media-csi.c
> +++ b/drivers/staging/media/imx/imx7-media-csi.c
> @@ -1124,7 +1124,7 @@ static int imx7_csi_registered(struct v4l2_subdev *sd)
> if (ret < 0)
> return ret;
>
> - ret = imx_media_capture_device_register(csi->vdev);
> + ret = imx_media_capture_device_register(csi->imxmd, csi->vdev);
> if (ret < 0)
> return ret;
>
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH] media: staging/imx: add media device to capture register
2019-04-12 16:44 [PATCH] media: staging/imx: add media device to capture register Rui Miguel Silva
2019-04-18 21:57 ` Laurent Pinchart
@ 2019-04-18 22:13 ` Steve Longerbeam
2019-04-28 18:53 ` Steve Longerbeam
2 siblings, 0 replies; 5+ messages in thread
From: Steve Longerbeam @ 2019-04-18 22:13 UTC (permalink / raw)
To: Rui Miguel Silva, Hans Verkuil, Laurent Pinchart, Philipp Zabel
Cc: devel, linux-media
Acked-by: Steve Longerbeam <slongerbeam@gmail.com>
On 4/12/19 9:44 AM, Rui Miguel Silva wrote:
> When register the capture media device it is assumed that the device
> data is the media device. In the imx6 case is but in the imx7 is not
> case. The device data is the csi structure.
>
> Add the explicit argument of the media device that we want to
> associate with the capture device.
>
> Reported-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
> ---
> drivers/staging/media/imx/imx-ic-prpencvf.c | 2 +-
> drivers/staging/media/imx/imx-media-capture.c | 6 +++---
> drivers/staging/media/imx/imx-media-csi.c | 2 +-
> drivers/staging/media/imx/imx-media.h | 3 ++-
> drivers/staging/media/imx/imx7-media-csi.c | 2 +-
> 5 files changed, 8 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/staging/media/imx/imx-ic-prpencvf.c b/drivers/staging/media/imx/imx-ic-prpencvf.c
> index 5c8e6ad8c025..3ca1422f6154 100644
> --- a/drivers/staging/media/imx/imx-ic-prpencvf.c
> +++ b/drivers/staging/media/imx/imx-ic-prpencvf.c
> @@ -1270,7 +1270,7 @@ static int prp_registered(struct v4l2_subdev *sd)
> if (ret)
> return ret;
>
> - ret = imx_media_capture_device_register(priv->vdev);
> + ret = imx_media_capture_device_register(priv->md, priv->vdev);
> if (ret)
> return ret;
>
> diff --git a/drivers/staging/media/imx/imx-media-capture.c b/drivers/staging/media/imx/imx-media-capture.c
> index 9703c85b19c4..7688238a3396 100644
> --- a/drivers/staging/media/imx/imx-media-capture.c
> +++ b/drivers/staging/media/imx/imx-media-capture.c
> @@ -706,7 +706,8 @@ void imx_media_capture_device_error(struct imx_media_video_dev *vdev)
> }
> EXPORT_SYMBOL_GPL(imx_media_capture_device_error);
>
> -int imx_media_capture_device_register(struct imx_media_video_dev *vdev)
> +int imx_media_capture_device_register(struct imx_media_dev *md,
> + struct imx_media_video_dev *vdev)
> {
> struct capture_priv *priv = to_capture_priv(vdev);
> struct v4l2_subdev *sd = priv->src_sd;
> @@ -715,8 +716,7 @@ int imx_media_capture_device_register(struct imx_media_video_dev *vdev)
> struct v4l2_subdev_format fmt_src;
> int ret;
>
> - /* get media device */
> - priv->md = dev_get_drvdata(sd->v4l2_dev->dev);
> + priv->md = md;
>
> vfd->v4l2_dev = sd->v4l2_dev;
>
> diff --git a/drivers/staging/media/imx/imx-media-csi.c b/drivers/staging/media/imx/imx-media-csi.c
> index 3b7517348666..3408ec023d29 100644
> --- a/drivers/staging/media/imx/imx-media-csi.c
> +++ b/drivers/staging/media/imx/imx-media-csi.c
> @@ -1806,7 +1806,7 @@ static int csi_registered(struct v4l2_subdev *sd)
> if (ret)
> goto free_fim;
>
> - ret = imx_media_capture_device_register(priv->vdev);
> + ret = imx_media_capture_device_register(priv->md, priv->vdev);
> if (ret)
> goto free_fim;
>
> diff --git a/drivers/staging/media/imx/imx-media.h b/drivers/staging/media/imx/imx-media.h
> index ae964c8d5be1..c3a8512bd10f 100644
> --- a/drivers/staging/media/imx/imx-media.h
> +++ b/drivers/staging/media/imx/imx-media.h
> @@ -271,7 +271,8 @@ int imx_media_of_add_csi(struct imx_media_dev *imxmd,
> struct imx_media_video_dev *
> imx_media_capture_device_init(struct v4l2_subdev *src_sd, int pad);
> void imx_media_capture_device_remove(struct imx_media_video_dev *vdev);
> -int imx_media_capture_device_register(struct imx_media_video_dev *vdev);
> +int imx_media_capture_device_register(struct imx_media_dev *md,
> + struct imx_media_video_dev *vdev);
> void imx_media_capture_device_unregister(struct imx_media_video_dev *vdev);
> struct imx_media_buffer *
> imx_media_capture_device_next_buf(struct imx_media_video_dev *vdev);
> diff --git a/drivers/staging/media/imx/imx7-media-csi.c b/drivers/staging/media/imx/imx7-media-csi.c
> index 3fba7c27c0ec..a907c5feb3eb 100644
> --- a/drivers/staging/media/imx/imx7-media-csi.c
> +++ b/drivers/staging/media/imx/imx7-media-csi.c
> @@ -1124,7 +1124,7 @@ static int imx7_csi_registered(struct v4l2_subdev *sd)
> if (ret < 0)
> return ret;
>
> - ret = imx_media_capture_device_register(csi->vdev);
> + ret = imx_media_capture_device_register(csi->imxmd, csi->vdev);
> if (ret < 0)
> return ret;
>
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH] media: staging/imx: add media device to capture register
2019-04-12 16:44 [PATCH] media: staging/imx: add media device to capture register Rui Miguel Silva
2019-04-18 21:57 ` Laurent Pinchart
2019-04-18 22:13 ` Steve Longerbeam
@ 2019-04-28 18:53 ` Steve Longerbeam
2019-04-28 20:35 ` Rui Miguel Silva
2 siblings, 1 reply; 5+ messages in thread
From: Steve Longerbeam @ 2019-04-28 18:53 UTC (permalink / raw)
To: Rui Miguel Silva, Hans Verkuil, Laurent Pinchart, Philipp Zabel
Cc: devel, linux-media
Hi Rui,
On second thought, there is no reason to pass the media device to
imx_media_capture_device_register(), because it is already available via
v4l2_dev->mdev. I will be posting a patch in v2 of the "Switch to sync
registration for IPU subdevs" series that fixes this.
Steve
On 4/12/19 9:44 AM, Rui Miguel Silva wrote:
> When register the capture media device it is assumed that the device
> data is the media device. In the imx6 case is but in the imx7 is not
> case. The device data is the csi structure.
>
> Add the explicit argument of the media device that we want to
> associate with the capture device.
>
> Reported-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
> ---
> drivers/staging/media/imx/imx-ic-prpencvf.c | 2 +-
> drivers/staging/media/imx/imx-media-capture.c | 6 +++---
> drivers/staging/media/imx/imx-media-csi.c | 2 +-
> drivers/staging/media/imx/imx-media.h | 3 ++-
> drivers/staging/media/imx/imx7-media-csi.c | 2 +-
> 5 files changed, 8 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/staging/media/imx/imx-ic-prpencvf.c b/drivers/staging/media/imx/imx-ic-prpencvf.c
> index 5c8e6ad8c025..3ca1422f6154 100644
> --- a/drivers/staging/media/imx/imx-ic-prpencvf.c
> +++ b/drivers/staging/media/imx/imx-ic-prpencvf.c
> @@ -1270,7 +1270,7 @@ static int prp_registered(struct v4l2_subdev *sd)
> if (ret)
> return ret;
>
> - ret = imx_media_capture_device_register(priv->vdev);
> + ret = imx_media_capture_device_register(priv->md, priv->vdev);
> if (ret)
> return ret;
>
> diff --git a/drivers/staging/media/imx/imx-media-capture.c b/drivers/staging/media/imx/imx-media-capture.c
> index 9703c85b19c4..7688238a3396 100644
> --- a/drivers/staging/media/imx/imx-media-capture.c
> +++ b/drivers/staging/media/imx/imx-media-capture.c
> @@ -706,7 +706,8 @@ void imx_media_capture_device_error(struct imx_media_video_dev *vdev)
> }
> EXPORT_SYMBOL_GPL(imx_media_capture_device_error);
>
> -int imx_media_capture_device_register(struct imx_media_video_dev *vdev)
> +int imx_media_capture_device_register(struct imx_media_dev *md,
> + struct imx_media_video_dev *vdev)
> {
> struct capture_priv *priv = to_capture_priv(vdev);
> struct v4l2_subdev *sd = priv->src_sd;
> @@ -715,8 +716,7 @@ int imx_media_capture_device_register(struct imx_media_video_dev *vdev)
> struct v4l2_subdev_format fmt_src;
> int ret;
>
> - /* get media device */
> - priv->md = dev_get_drvdata(sd->v4l2_dev->dev);
> + priv->md = md;
>
> vfd->v4l2_dev = sd->v4l2_dev;
>
> diff --git a/drivers/staging/media/imx/imx-media-csi.c b/drivers/staging/media/imx/imx-media-csi.c
> index 3b7517348666..3408ec023d29 100644
> --- a/drivers/staging/media/imx/imx-media-csi.c
> +++ b/drivers/staging/media/imx/imx-media-csi.c
> @@ -1806,7 +1806,7 @@ static int csi_registered(struct v4l2_subdev *sd)
> if (ret)
> goto free_fim;
>
> - ret = imx_media_capture_device_register(priv->vdev);
> + ret = imx_media_capture_device_register(priv->md, priv->vdev);
> if (ret)
> goto free_fim;
>
> diff --git a/drivers/staging/media/imx/imx-media.h b/drivers/staging/media/imx/imx-media.h
> index ae964c8d5be1..c3a8512bd10f 100644
> --- a/drivers/staging/media/imx/imx-media.h
> +++ b/drivers/staging/media/imx/imx-media.h
> @@ -271,7 +271,8 @@ int imx_media_of_add_csi(struct imx_media_dev *imxmd,
> struct imx_media_video_dev *
> imx_media_capture_device_init(struct v4l2_subdev *src_sd, int pad);
> void imx_media_capture_device_remove(struct imx_media_video_dev *vdev);
> -int imx_media_capture_device_register(struct imx_media_video_dev *vdev);
> +int imx_media_capture_device_register(struct imx_media_dev *md,
> + struct imx_media_video_dev *vdev);
> void imx_media_capture_device_unregister(struct imx_media_video_dev *vdev);
> struct imx_media_buffer *
> imx_media_capture_device_next_buf(struct imx_media_video_dev *vdev);
> diff --git a/drivers/staging/media/imx/imx7-media-csi.c b/drivers/staging/media/imx/imx7-media-csi.c
> index 3fba7c27c0ec..a907c5feb3eb 100644
> --- a/drivers/staging/media/imx/imx7-media-csi.c
> +++ b/drivers/staging/media/imx/imx7-media-csi.c
> @@ -1124,7 +1124,7 @@ static int imx7_csi_registered(struct v4l2_subdev *sd)
> if (ret < 0)
> return ret;
>
> - ret = imx_media_capture_device_register(csi->vdev);
> + ret = imx_media_capture_device_register(csi->imxmd, csi->vdev);
> if (ret < 0)
> return ret;
>
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH] media: staging/imx: add media device to capture register
2019-04-28 18:53 ` Steve Longerbeam
@ 2019-04-28 20:35 ` Rui Miguel Silva
0 siblings, 0 replies; 5+ messages in thread
From: Rui Miguel Silva @ 2019-04-28 20:35 UTC (permalink / raw)
To: driverdev-devel
Cc: Hans Verkuil, Laurent Pinchart, Philipp Zabel, devel, linux-media
Hi Steve,
On Sun 28 Apr 2019 at 19:53, Steve Longerbeam wrote:
> Hi Rui,
>
> On second thought, there is no reason to pass the media device to
> imx_media_capture_device_register(), because it is already available via
> v4l2_dev->mdev. I will be posting a patch in v2 of the "Switch to sync
> registration for IPU subdevs" series that fixes this.
That make sense to me. I've already took a look to v2 and I like
the ideas in there, I will give it a proper test and review
tomorrow. Will send feedback afterwards.
Thanks so much for your work on this.
---
Cheers,
Rui
>
> Steve
>
>
> On 4/12/19 9:44 AM, Rui Miguel Silva wrote:
>> When register the capture media device it is assumed that the device
>> data is the media device. In the imx6 case is but in the imx7 is not
>> case. The device data is the csi structure.
>>
>> Add the explicit argument of the media device that we want to
>> associate with the capture device.
>>
>> Reported-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
>> Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
>> ---
>> drivers/staging/media/imx/imx-ic-prpencvf.c | 2 +-
>> drivers/staging/media/imx/imx-media-capture.c | 6 +++---
>> drivers/staging/media/imx/imx-media-csi.c | 2 +-
>> drivers/staging/media/imx/imx-media.h | 3 ++-
>> drivers/staging/media/imx/imx7-media-csi.c | 2 +-
>> 5 files changed, 8 insertions(+), 7 deletions(-)
>>
>> diff --git a/drivers/staging/media/imx/imx-ic-prpencvf.c b/drivers/staging/media/imx/imx-ic-prpencvf.c
>> index 5c8e6ad8c025..3ca1422f6154 100644
>> --- a/drivers/staging/media/imx/imx-ic-prpencvf.c
>> +++ b/drivers/staging/media/imx/imx-ic-prpencvf.c
>> @@ -1270,7 +1270,7 @@ static int prp_registered(struct v4l2_subdev *sd)
>> if (ret)
>> return ret;
>>
>> - ret = imx_media_capture_device_register(priv->vdev);
>> + ret = imx_media_capture_device_register(priv->md, priv->vdev);
>> if (ret)
>> return ret;
>>
>> diff --git a/drivers/staging/media/imx/imx-media-capture.c b/drivers/staging/media/imx/imx-media-capture.c
>> index 9703c85b19c4..7688238a3396 100644
>> --- a/drivers/staging/media/imx/imx-media-capture.c
>> +++ b/drivers/staging/media/imx/imx-media-capture.c
>> @@ -706,7 +706,8 @@ void imx_media_capture_device_error(struct imx_media_video_dev *vdev)
>> }
>> EXPORT_SYMBOL_GPL(imx_media_capture_device_error);
>>
>> -int imx_media_capture_device_register(struct imx_media_video_dev *vdev)
>> +int imx_media_capture_device_register(struct imx_media_dev *md,
>> + struct imx_media_video_dev *vdev)
>> {
>> struct capture_priv *priv = to_capture_priv(vdev);
>> struct v4l2_subdev *sd = priv->src_sd;
>> @@ -715,8 +716,7 @@ int imx_media_capture_device_register(struct imx_media_video_dev *vdev)
>> struct v4l2_subdev_format fmt_src;
>> int ret;
>>
>> - /* get media device */
>> - priv->md = dev_get_drvdata(sd->v4l2_dev->dev);
>> + priv->md = md;
>>
>> vfd->v4l2_dev = sd->v4l2_dev;
>>
>> diff --git a/drivers/staging/media/imx/imx-media-csi.c b/drivers/staging/media/imx/imx-media-csi.c
>> index 3b7517348666..3408ec023d29 100644
>> --- a/drivers/staging/media/imx/imx-media-csi.c
>> +++ b/drivers/staging/media/imx/imx-media-csi.c
>> @@ -1806,7 +1806,7 @@ static int csi_registered(struct v4l2_subdev *sd)
>> if (ret)
>> goto free_fim;
>>
>> - ret = imx_media_capture_device_register(priv->vdev);
>> + ret = imx_media_capture_device_register(priv->md, priv->vdev);
>> if (ret)
>> goto free_fim;
>>
>> diff --git a/drivers/staging/media/imx/imx-media.h b/drivers/staging/media/imx/imx-media.h
>> index ae964c8d5be1..c3a8512bd10f 100644
>> --- a/drivers/staging/media/imx/imx-media.h
>> +++ b/drivers/staging/media/imx/imx-media.h
>> @@ -271,7 +271,8 @@ int imx_media_of_add_csi(struct imx_media_dev *imxmd,
>> struct imx_media_video_dev *
>> imx_media_capture_device_init(struct v4l2_subdev *src_sd, int pad);
>> void imx_media_capture_device_remove(struct imx_media_video_dev *vdev);
>> -int imx_media_capture_device_register(struct imx_media_video_dev *vdev);
>> +int imx_media_capture_device_register(struct imx_media_dev *md,
>> + struct imx_media_video_dev *vdev);
>> void imx_media_capture_device_unregister(struct imx_media_video_dev *vdev);
>> struct imx_media_buffer *
>> imx_media_capture_device_next_buf(struct imx_media_video_dev *vdev);
>> diff --git a/drivers/staging/media/imx/imx7-media-csi.c b/drivers/staging/media/imx/imx7-media-csi.c
>> index 3fba7c27c0ec..a907c5feb3eb 100644
>> --- a/drivers/staging/media/imx/imx7-media-csi.c
>> +++ b/drivers/staging/media/imx/imx7-media-csi.c
>> @@ -1124,7 +1124,7 @@ static int imx7_csi_registered(struct v4l2_subdev *sd)
>> if (ret < 0)
>> return ret;
>>
>> - ret = imx_media_capture_device_register(csi->vdev);
>> + ret = imx_media_capture_device_register(csi->imxmd, csi->vdev);
>> if (ret < 0)
>> return ret;
>>
>
> _______________________________________________
> devel mailing list
> devel@linuxdriverproject.org
> http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
^ permalink raw reply [flat|nested] 5+ messages in thread