Hi Alexander, On Mon, Feb 07, 2022 at 10:22:25AM +0100, Alexander Stein wrote: > Am Samstag, 5. Februar 2022, 04:21:34 CET schrieb Laurent Pinchart: > > On Fri, Feb 04, 2022 at 01:15:07PM +0100, Alexander Stein wrote: > > > From: Dorota Czaplejewicz <dorota.czaplejewicz@xxxxxxx> > > > > > > The driver covers i.MX5/6, as well as i.MX7/8 hardware. > > > Those implementations differ, e.g. in the sizes of buffers they accept. > > > > > > Some functionality should be abstracted, and storing type achieves that. > > > > I think that longer term (which ideally shouldn't be too far in the > > future) we should decouple the i.MX5/6 and i.MX7/8 drivers (this naming > > is actually not quite correct, there are i.MX6 SoCs that have a CSI > > bridge, not an IPUv3). The platforms are completely different at the > > hardware level, they shouldn't share the same code. That would allow us > > to evolve the CSI bridge driver independently from the IPUv3 driver, and > > move it from staging to drivers/media/. > > That sounds reasonable. Although I'm not sure where to start. Split it for > i.MX6 in the first place (CSI bridge vs. IPUv3)? Or start splitting across > i.MX generation? I've yet to have broad knowledge about the internals to be > able to come up with a good decision. There are only two camera interfaces supported in this directory at this point, IPUv3 and CSI bridge (the latter implemented in imx7-media-csi). There's no need to split across i.MX generations. > > I'm not against merging this if it can help short term, but please also > > feel free to start decoupling the drivers, even if it results in some > > duplicated code. > > Thanks for willing to accept this short term patches. I'm hesitating to > decoupling for now as I haven't fully grasped all the details and small > similarities and differences. I started giving it a try, but it will take some more work. > > > Signed-off-by: Dorota Czaplejewicz <dorota.czaplejewicz@xxxxxxx> > > > Signed-off-by: Alexander Stein <alexander.stein@xxxxxxxxxxxxxxx> > > > --- > > > Changes in comparison to original commit from Dorota: > > > * Applied the suggestion from Hans at [1]. > > > > > > [1] https://patchwork.linuxtv.org/project/linux-media/patch/20211104113631.206899-2-dorota.czaplejewicz@xxxxxxx/ > > > drivers/staging/media/imx/imx-ic-prpencvf.c | 3 ++- > > > drivers/staging/media/imx/imx-media-capture.c | 5 ++++- > > > drivers/staging/media/imx/imx-media-csi.c | 3 ++- > > > drivers/staging/media/imx/imx-media.h | 3 ++- > > > drivers/staging/media/imx/imx7-media-csi.c | 3 ++- > > > 5 files changed, 12 insertions(+), 5 deletions(-) > > > > > > diff --git a/drivers/staging/media/imx/imx-ic-prpencvf.c b/drivers/staging/media/imx/imx-ic-prpencvf.c > > > index 9b81cfbcd777..caaaac1a515a 100644 > > > --- a/drivers/staging/media/imx/imx-ic-prpencvf.c > > > +++ b/drivers/staging/media/imx/imx-ic-prpencvf.c > > > @@ -1266,7 +1266,8 @@ static int prp_registered(struct v4l2_subdev *sd) > > > > > > priv->vdev = imx_media_capture_device_init(ic_priv->ipu_dev, > > > &ic_priv->sd, > > > - PRPENCVF_SRC_PAD, true); > > > + PRPENCVF_SRC_PAD, true, > > > + true); > > > if (IS_ERR(priv->vdev)) > > > return PTR_ERR(priv->vdev); > > > > > > diff --git a/drivers/staging/media/imx/imx-media-capture.c b/drivers/staging/media/imx/imx-media-capture.c > > > index 93ba09236010..b61bf9f8ddf8 100644 > > > --- a/drivers/staging/media/imx/imx-media-capture.c > > > +++ b/drivers/staging/media/imx/imx-media-capture.c > > > @@ -47,6 +47,7 @@ struct capture_priv { > > > > > > struct v4l2_ctrl_handler ctrl_hdlr; /* Controls inherited from subdevs */ > > > > > > bool legacy_api; /* Use the legacy (pre-MC) API */ > > > + bool is_imx56; /* Hardware is i.MX5/i.MX6 */ > > > > Can we create an enum type instead, to make the code more explicit ? > > I don't mind. So I will pick up the original patches from Dorota at [1] > instead which already had an enum. > > [1] https://patchwork.kernel.org/project/linux-arm-kernel/patch/ > 20211104113631.206899-2-dorota.czaplejewicz@xxxxxxx/ > > > > }; > > > > > > #define to_capture_priv(v) container_of(v, struct capture_priv, vdev) > > > @@ -957,7 +958,8 @@ > > > EXPORT_SYMBOL_GPL(imx_media_capture_device_unregister); > > > struct imx_media_video_dev * > > > imx_media_capture_device_init(struct device *dev, struct v4l2_subdev *src_sd, > > > - int pad, bool legacy_api) > > > + int pad, bool legacy_api, > > > + bool is_imx56) > > > { > > > struct capture_priv *priv; > > > struct video_device *vfd; > > > @@ -972,6 +974,7 @@ imx_media_capture_device_init(struct device *dev, struct v4l2_subdev *src_sd, > > > priv->src_sd_pad = pad; > > > priv->dev = dev; > > > priv->legacy_api = legacy_api; > > > + priv->is_imx56 = is_imx56; > > > > > > mutex_init(&priv->mutex); > > > INIT_LIST_HEAD(&priv->ready_q); > > > diff --git a/drivers/staging/media/imx/imx-media-csi.c b/drivers/staging/media/imx/imx-media-csi.c > > > index bd7f156f2d52..c8f6add00dbb 100644 > > > --- a/drivers/staging/media/imx/imx-media-csi.c > > > +++ b/drivers/staging/media/imx/imx-media-csi.c > > > @@ -1803,7 +1803,8 @@ static int csi_registered(struct v4l2_subdev *sd) > > > } > > > > > > priv->vdev = imx_media_capture_device_init(priv->sd.dev, &priv->sd, > > > - CSI_SRC_PAD_IDMAC, true); > > > + CSI_SRC_PAD_IDMAC, true, > > > + true); > > > if (IS_ERR(priv->vdev)) { > > > ret = PTR_ERR(priv->vdev); > > > goto free_fim; > > > diff --git a/drivers/staging/media/imx/imx-media.h b/drivers/staging/media/imx/imx-media.h > > > index f263fc3adbb9..73e8e6e0d8e8 100644 > > > --- a/drivers/staging/media/imx/imx-media.h > > > +++ b/drivers/staging/media/imx/imx-media.h > > > @@ -282,7 +282,8 @@ int imx_media_ic_unregister(struct v4l2_subdev *sd); > > > /* imx-media-capture.c */ > > > struct imx_media_video_dev * > > > imx_media_capture_device_init(struct device *dev, struct v4l2_subdev *src_sd, > > > - int pad, bool legacy_api); > > > + int pad, bool legacy_api, > > > + bool is_imx56); > > > void imx_media_capture_device_remove(struct imx_media_video_dev *vdev); > > > int imx_media_capture_device_register(struct imx_media_video_dev *vdev, > > > u32 link_flags); > > > diff --git a/drivers/staging/media/imx/imx7-media-csi.c b/drivers/staging/media/imx/imx7-media-csi.c > > > index 32311fc0e2a4..158d2a736c6d 100644 > > > --- a/drivers/staging/media/imx/imx7-media-csi.c > > > +++ b/drivers/staging/media/imx/imx7-media-csi.c > > > @@ -1039,7 +1039,8 @@ static int imx7_csi_registered(struct v4l2_subdev *sd) > > > } > > > > > > csi->vdev = imx_media_capture_device_init(csi->sd.dev, &csi->sd, > > > - IMX7_CSI_PAD_SRC, false); > > > + IMX7_CSI_PAD_SRC, false, > > > + false); > > > if (IS_ERR(csi->vdev)) > > > return PTR_ERR(csi->vdev); > > > -- Regards, Laurent Pinchart