[PATCH v2] media: rkisp1: Adapt to different SoCs having different size limits
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Tue Jul 2 23:46:39 PDT 2024
Hi Ondřej,
On Wed, Jun 12, 2024 at 02:58:02PM +0200, Ondřej Jirman wrote:
> On Sat, Mar 16, 2024 at 12:02:41AM GMT, megi xff wrote:
> > From: Ondrej Jirman <megi at xff.cz>
> >
> > - RK3399 has input/output limit of main path 4416 x 3312
> > - PX30 has input/output limit of main path 3264 x 2448
> > - i.MX8MP has input/output limit of main path 4096 x 3072
> >
> > Use rkisp1_info struct to encode the limits.
>
> It would be nice to get this merged. It's reviewed and ready.
All my apologies for the delay. I'm catching up with my patch queue.
Thanks for the ping, and thanks for upstreaming this change.
> > Signed-off-by: Ondrej Jirman <megi at xff.cz>
> > ---
> > v2:
> > - adapt to i.MX8MP merged for v6.9
> >
> > drivers/media/platform/rockchip/rkisp1/rkisp1-common.h | 6 ++++--
> > drivers/media/platform/rockchip/rkisp1/rkisp1-csi.c | 5 +++--
> > drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c | 6 ++++++
> > drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c | 9 +++++----
> > drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c | 4 ++--
> > 5 files changed, 20 insertions(+), 10 deletions(-)
> >
> > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> > index 26573f6ae575..b4c958b93629 100644
> > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> > @@ -34,8 +34,6 @@ struct regmap;
> > #define RKISP1_ISP_SD_SINK BIT(1)
> >
> > /* min and max values for the widths and heights of the entities */
It's the min only now. I'll update this comment in my tree to
/*
* Minimum values for the width and height of entities. The maximum values are
* model-specific and stored in the rkisp1_info structure.
*/
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
and queued.
> > -#define RKISP1_ISP_MAX_WIDTH 4032
> > -#define RKISP1_ISP_MAX_HEIGHT 3024
> > #define RKISP1_ISP_MIN_WIDTH 32
> > #define RKISP1_ISP_MIN_HEIGHT 32
> >
> > @@ -140,6 +138,8 @@ enum rkisp1_feature {
> > * @isr_size: number of entries in the @isrs array
> > * @isp_ver: ISP version
> > * @features: bitmask of rkisp1_feature features implemented by the ISP
> > + * @max_width: maximum input frame width
> > + * @max_height: maximum input frame height
> > *
> > * This structure contains information about the ISP specific to a particular
> > * ISP model, version, or integration in a particular SoC.
> > @@ -151,6 +151,8 @@ struct rkisp1_info {
> > unsigned int isr_size;
> > enum rkisp1_cif_isp_version isp_ver;
> > unsigned int features;
> > + unsigned int max_width;
> > + unsigned int max_height;
> > };
> >
> > /*
> > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-csi.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-csi.c
> > index 4202642e0523..841e58c20f7f 100644
> > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-csi.c
> > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-csi.c
> > @@ -307,6 +307,7 @@ static int rkisp1_csi_set_fmt(struct v4l2_subdev *sd,
> > struct v4l2_subdev_state *sd_state,
> > struct v4l2_subdev_format *fmt)
> > {
> > + struct rkisp1_csi *csi = to_rkisp1_csi(sd);
> > const struct rkisp1_mbus_info *mbus_info;
> > struct v4l2_mbus_framefmt *sink_fmt, *src_fmt;
> >
> > @@ -326,10 +327,10 @@ static int rkisp1_csi_set_fmt(struct v4l2_subdev *sd,
> >
> > sink_fmt->width = clamp_t(u32, fmt->format.width,
> > RKISP1_ISP_MIN_WIDTH,
> > - RKISP1_ISP_MAX_WIDTH);
> > + csi->rkisp1->info->max_width);
> > sink_fmt->height = clamp_t(u32, fmt->format.height,
> > RKISP1_ISP_MIN_HEIGHT,
> > - RKISP1_ISP_MAX_HEIGHT);
> > + csi->rkisp1->info->max_height);
> >
> > fmt->format = *sink_fmt;
> >
> > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> > index bb0202386c70..0535ce57e862 100644
> > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> > @@ -510,6 +510,8 @@ static const struct rkisp1_info px30_isp_info = {
> > .features = RKISP1_FEATURE_MIPI_CSI2
> > | RKISP1_FEATURE_SELF_PATH
> > | RKISP1_FEATURE_DUAL_CROP,
> > + .max_width = 3264,
> > + .max_height = 2448,
> > };
> >
> > static const char * const rk3399_isp_clks[] = {
> > @@ -531,6 +533,8 @@ static const struct rkisp1_info rk3399_isp_info = {
> > .features = RKISP1_FEATURE_MIPI_CSI2
> > | RKISP1_FEATURE_SELF_PATH
> > | RKISP1_FEATURE_DUAL_CROP,
> > + .max_width = 4416,
> > + .max_height = 3312,
> > };
> >
> > static const char * const imx8mp_isp_clks[] = {
> > @@ -551,6 +555,8 @@ static const struct rkisp1_info imx8mp_isp_info = {
> > .isp_ver = RKISP1_V_IMX8MP,
> > .features = RKISP1_FEATURE_MAIN_STRIDE
> > | RKISP1_FEATURE_DMA_34BIT,
> > + .max_width = 4096,
> > + .max_height = 3072,
> > };
> >
> > static const struct of_device_id rkisp1_of_match[] = {
> > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> > index e45a213baf49..f787a7e91e3e 100644
> > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> > @@ -517,6 +517,7 @@ static int rkisp1_isp_enum_frame_size(struct v4l2_subdev *sd,
> > struct v4l2_subdev_state *sd_state,
> > struct v4l2_subdev_frame_size_enum *fse)
> > {
> > + struct rkisp1_isp *isp = to_rkisp1_isp(sd);
> > const struct rkisp1_mbus_info *mbus_info;
> >
> > if (fse->pad == RKISP1_ISP_PAD_SINK_PARAMS ||
> > @@ -539,9 +540,9 @@ static int rkisp1_isp_enum_frame_size(struct v4l2_subdev *sd,
> > return -EINVAL;
> >
> > fse->min_width = RKISP1_ISP_MIN_WIDTH;
> > - fse->max_width = RKISP1_ISP_MAX_WIDTH;
> > + fse->max_width = isp->rkisp1->info->max_width;
> > fse->min_height = RKISP1_ISP_MIN_HEIGHT;
> > - fse->max_height = RKISP1_ISP_MAX_HEIGHT;
> > + fse->max_height = isp->rkisp1->info->max_height;
> >
> > return 0;
> > }
> > @@ -772,10 +773,10 @@ static void rkisp1_isp_set_sink_fmt(struct rkisp1_isp *isp,
> >
> > sink_fmt->width = clamp_t(u32, format->width,
> > RKISP1_ISP_MIN_WIDTH,
> > - RKISP1_ISP_MAX_WIDTH);
> > + isp->rkisp1->info->max_width);
> > sink_fmt->height = clamp_t(u32, format->height,
> > RKISP1_ISP_MIN_HEIGHT,
> > - RKISP1_ISP_MAX_HEIGHT);
> > + isp->rkisp1->info->max_height);
> >
> > /*
> > * Adjust the color space fields. Accept any color primaries and
> > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c
> > index 6f3931ca5b51..e22cc2db24cf 100644
> > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c
> > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c
> > @@ -494,10 +494,10 @@ static void rkisp1_rsz_set_sink_fmt(struct rkisp1_resizer *rsz,
> >
> > sink_fmt->width = clamp_t(u32, format->width,
> > RKISP1_ISP_MIN_WIDTH,
> > - RKISP1_ISP_MAX_WIDTH);
> > + rsz->rkisp1->info->max_width);
> > sink_fmt->height = clamp_t(u32, format->height,
> > RKISP1_ISP_MIN_HEIGHT,
> > - RKISP1_ISP_MAX_HEIGHT);
> > + rsz->rkisp1->info->max_height);
> >
> > /*
> > * Adjust the color space fields. Accept any color primaries and
--
Regards,
Laurent Pinchart
More information about the Linux-rockchip
mailing list