diff mbox series

[v2,48/55] media: rkisp1: Add match data for i.MX8MP ISP

Message ID 20220630230713.10580-49-laurent.pinchart@ideasonboard.com (mailing list archive)
State New, archived
Headers show
Series media: rkisp1: Cleanups and add support for i.MX8MP | expand

Commit Message

Laurent Pinchart June 30, 2022, 11:07 p.m. UTC
From: Paul Elder <paul.elder@ideasonboard.com>

Add match data to the rkisp1 driver to match the i.MX8MP ISP.

Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
---
 .../platform/rockchip/rkisp1/rkisp1-dev.c     | 22 +++++++++++++++++++
 include/uapi/linux/rkisp1-config.h            |  3 +++
 2 files changed, 25 insertions(+)

Comments

Adam Ford July 15, 2022, 11:56 a.m. UTC | #1
On Thu, Jun 30, 2022 at 6:27 PM Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
>
> From: Paul Elder <paul.elder@ideasonboard.com>
>
> Add match data to the rkisp1 driver to match the i.MX8MP ISP.
>

I am testing this series on an i.MX8MP with two Sony IMX219 cameras in
4-lane mode.
From what I can tell, the ISP_1 doesn't enumerate if ISP_0 is already
enumerated.  My guess is that the name of the ISP is hard-coded so the
second instance isn't able to load because the names conflict.  I
don't see any errors, so it's just a guess.



> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
> ---
>  .../platform/rockchip/rkisp1/rkisp1-dev.c     | 22 +++++++++++++++++++
>  include/uapi/linux/rkisp1-config.h            |  3 +++
>  2 files changed, 25 insertions(+)
>
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> index f2475c6235ea..a41f89807dd7 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> @@ -496,6 +496,24 @@ static const struct rkisp1_info rk3399_isp_info = {
>         .features = RKISP1_FEATURE_MIPI_CSI2,
>  };
>
> +static const char * const imx8mp_isp_clks[] = {
> +       "isp",
> +       "hclk",
> +       "aclk",
> +};
> +
> +static const struct rkisp1_isr_data imx8mp_isp_isrs[] = {
> +       { NULL, rkisp1_isr },
> +};
> +
> +static const struct rkisp1_info imx8mp_isp_info = {
> +       .clks = imx8mp_isp_clks,
> +       .clk_size = ARRAY_SIZE(imx8mp_isp_clks),
> +       .isrs = imx8mp_isp_isrs,
> +       .isr_size = ARRAY_SIZE(imx8mp_isp_isrs),
> +       .isp_ver = IMX8MP_V10,
> +};
> +
>  static const struct of_device_id rkisp1_of_match[] = {
>         {
>                 .compatible = "rockchip,px30-cif-isp",
> @@ -505,6 +523,10 @@ static const struct of_device_id rkisp1_of_match[] = {
>                 .compatible = "rockchip,rk3399-cif-isp",
>                 .data = &rk3399_isp_info,
>         },
> +       {
> +               .compatible = "fsl,imx8mp-isp",
> +               .data = &imx8mp_isp_info,
> +       },
>         {},
>  };
>  MODULE_DEVICE_TABLE(of, rkisp1_of_match);
> diff --git a/include/uapi/linux/rkisp1-config.h b/include/uapi/linux/rkisp1-config.h
> index 583ca0d9a79d..40677d47825c 100644
> --- a/include/uapi/linux/rkisp1-config.h
> +++ b/include/uapi/linux/rkisp1-config.h
> @@ -140,12 +140,15 @@
>   * @RKISP1_V11: declared in the original vendor code, but not used
>   * @RKISP1_V12: used at least in rk3326 and px30
>   * @RKISP1_V13: used at least in rk1808
> + * @IMX8MP_V10: used in at least imx8mp
>   */
>  enum rkisp1_cif_isp_version {
>         RKISP1_V10 = 10,
>         RKISP1_V11,
>         RKISP1_V12,
>         RKISP1_V13,
> +       /* TODO Choose a better version for this */
> +       IMX8MP_V10,
>  };
>
>  enum rkisp1_cif_isp_histogram_mode {
> --
> Regards,
>
> Laurent Pinchart
>
Laurent Pinchart July 17, 2022, 2:56 p.m. UTC | #2
Hi Adam,

On Fri, Jul 15, 2022 at 06:56:57AM -0500, Adam Ford wrote:
> On Thu, Jun 30, 2022 at 6:27 PM Laurent Pinchart
> <laurent.pinchart@ideasonboard.com> wrote:
> >
> > From: Paul Elder <paul.elder@ideasonboard.com>
> >
> > Add match data to the rkisp1 driver to match the i.MX8MP ISP.
> 
> I am testing this series on an i.MX8MP with two Sony IMX219 cameras in
> 4-lane mode.
> From what I can tell, the ISP_1 doesn't enumerate if ISP_0 is already
> enumerated.  My guess is that the name of the ISP is hard-coded so the
> second instance isn't able to load because the names conflict.  I
> don't see any errors, so it's just a guess.

I'll have a look.

> > Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
> > ---
> >  .../platform/rockchip/rkisp1/rkisp1-dev.c     | 22 +++++++++++++++++++
> >  include/uapi/linux/rkisp1-config.h            |  3 +++
> >  2 files changed, 25 insertions(+)
> >
> > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> > index f2475c6235ea..a41f89807dd7 100644
> > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> > @@ -496,6 +496,24 @@ static const struct rkisp1_info rk3399_isp_info = {
> >         .features = RKISP1_FEATURE_MIPI_CSI2,
> >  };
> >
> > +static const char * const imx8mp_isp_clks[] = {
> > +       "isp",
> > +       "hclk",
> > +       "aclk",
> > +};
> > +
> > +static const struct rkisp1_isr_data imx8mp_isp_isrs[] = {
> > +       { NULL, rkisp1_isr },
> > +};
> > +
> > +static const struct rkisp1_info imx8mp_isp_info = {
> > +       .clks = imx8mp_isp_clks,
> > +       .clk_size = ARRAY_SIZE(imx8mp_isp_clks),
> > +       .isrs = imx8mp_isp_isrs,
> > +       .isr_size = ARRAY_SIZE(imx8mp_isp_isrs),
> > +       .isp_ver = IMX8MP_V10,
> > +};
> > +
> >  static const struct of_device_id rkisp1_of_match[] = {
> >         {
> >                 .compatible = "rockchip,px30-cif-isp",
> > @@ -505,6 +523,10 @@ static const struct of_device_id rkisp1_of_match[] = {
> >                 .compatible = "rockchip,rk3399-cif-isp",
> >                 .data = &rk3399_isp_info,
> >         },
> > +       {
> > +               .compatible = "fsl,imx8mp-isp",
> > +               .data = &imx8mp_isp_info,
> > +       },
> >         {},
> >  };
> >  MODULE_DEVICE_TABLE(of, rkisp1_of_match);
> > diff --git a/include/uapi/linux/rkisp1-config.h b/include/uapi/linux/rkisp1-config.h
> > index 583ca0d9a79d..40677d47825c 100644
> > --- a/include/uapi/linux/rkisp1-config.h
> > +++ b/include/uapi/linux/rkisp1-config.h
> > @@ -140,12 +140,15 @@
> >   * @RKISP1_V11: declared in the original vendor code, but not used
> >   * @RKISP1_V12: used at least in rk3326 and px30
> >   * @RKISP1_V13: used at least in rk1808
> > + * @IMX8MP_V10: used in at least imx8mp
> >   */
> >  enum rkisp1_cif_isp_version {
> >         RKISP1_V10 = 10,
> >         RKISP1_V11,
> >         RKISP1_V12,
> >         RKISP1_V13,
> > +       /* TODO Choose a better version for this */
> > +       IMX8MP_V10,
> >  };
> >
> >  enum rkisp1_cif_isp_histogram_mode {
Laurent Pinchart July 17, 2022, 3:23 p.m. UTC | #3
Hi Adam,

On Sun, Jul 17, 2022 at 05:56:56PM +0300, Laurent Pinchart wrote:
> On Fri, Jul 15, 2022 at 06:56:57AM -0500, Adam Ford wrote:
> > On Thu, Jun 30, 2022 at 6:27 PM Laurent Pinchart wrote:
> > >
> > > From: Paul Elder <paul.elder@ideasonboard.com>
> > >
> > > Add match data to the rkisp1 driver to match the i.MX8MP ISP.
> > 
> > I am testing this series on an i.MX8MP with two Sony IMX219 cameras in
> > 4-lane mode.
> > From what I can tell, the ISP_1 doesn't enumerate if ISP_0 is already
> > enumerated.  My guess is that the name of the ISP is hard-coded so the
> > second instance isn't able to load because the names conflict.  I
> > don't see any errors, so it's just a guess.
> 
> I'll have a look.

Both ISP instances probe successfully for me, with two different sensors
though (IMX327 and IMX296). Can you share more information about your
issue ?

> > > Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
> > > ---
> > >  .../platform/rockchip/rkisp1/rkisp1-dev.c     | 22 +++++++++++++++++++
> > >  include/uapi/linux/rkisp1-config.h            |  3 +++
> > >  2 files changed, 25 insertions(+)
> > >
> > > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> > > index f2475c6235ea..a41f89807dd7 100644
> > > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> > > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> > > @@ -496,6 +496,24 @@ static const struct rkisp1_info rk3399_isp_info = {
> > >         .features = RKISP1_FEATURE_MIPI_CSI2,
> > >  };
> > >
> > > +static const char * const imx8mp_isp_clks[] = {
> > > +       "isp",
> > > +       "hclk",
> > > +       "aclk",
> > > +};
> > > +
> > > +static const struct rkisp1_isr_data imx8mp_isp_isrs[] = {
> > > +       { NULL, rkisp1_isr },
> > > +};
> > > +
> > > +static const struct rkisp1_info imx8mp_isp_info = {
> > > +       .clks = imx8mp_isp_clks,
> > > +       .clk_size = ARRAY_SIZE(imx8mp_isp_clks),
> > > +       .isrs = imx8mp_isp_isrs,
> > > +       .isr_size = ARRAY_SIZE(imx8mp_isp_isrs),
> > > +       .isp_ver = IMX8MP_V10,
> > > +};
> > > +
> > >  static const struct of_device_id rkisp1_of_match[] = {
> > >         {
> > >                 .compatible = "rockchip,px30-cif-isp",
> > > @@ -505,6 +523,10 @@ static const struct of_device_id rkisp1_of_match[] = {
> > >                 .compatible = "rockchip,rk3399-cif-isp",
> > >                 .data = &rk3399_isp_info,
> > >         },
> > > +       {
> > > +               .compatible = "fsl,imx8mp-isp",
> > > +               .data = &imx8mp_isp_info,
> > > +       },
> > >         {},
> > >  };
> > >  MODULE_DEVICE_TABLE(of, rkisp1_of_match);
> > > diff --git a/include/uapi/linux/rkisp1-config.h b/include/uapi/linux/rkisp1-config.h
> > > index 583ca0d9a79d..40677d47825c 100644
> > > --- a/include/uapi/linux/rkisp1-config.h
> > > +++ b/include/uapi/linux/rkisp1-config.h
> > > @@ -140,12 +140,15 @@
> > >   * @RKISP1_V11: declared in the original vendor code, but not used
> > >   * @RKISP1_V12: used at least in rk3326 and px30
> > >   * @RKISP1_V13: used at least in rk1808
> > > + * @IMX8MP_V10: used in at least imx8mp
> > >   */
> > >  enum rkisp1_cif_isp_version {
> > >         RKISP1_V10 = 10,
> > >         RKISP1_V11,
> > >         RKISP1_V12,
> > >         RKISP1_V13,
> > > +       /* TODO Choose a better version for this */
> > > +       IMX8MP_V10,
> > >  };
> > >
> > >  enum rkisp1_cif_isp_histogram_mode {
Adam Ford July 17, 2022, 6:04 p.m. UTC | #4
On Sun, Jul 17, 2022 at 10:23 AM Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
>
> Hi Adam,
>
> On Sun, Jul 17, 2022 at 05:56:56PM +0300, Laurent Pinchart wrote:
> > On Fri, Jul 15, 2022 at 06:56:57AM -0500, Adam Ford wrote:
> > > On Thu, Jun 30, 2022 at 6:27 PM Laurent Pinchart wrote:
> > > >
> > > > From: Paul Elder <paul.elder@ideasonboard.com>
> > > >
> > > > Add match data to the rkisp1 driver to match the i.MX8MP ISP.
> > >
> > > I am testing this series on an i.MX8MP with two Sony IMX219 cameras in
> > > 4-lane mode.
> > > From what I can tell, the ISP_1 doesn't enumerate if ISP_0 is already
> > > enumerated.  My guess is that the name of the ISP is hard-coded so the
> > > second instance isn't able to load because the names conflict.  I
> > > don't see any errors, so it's just a guess.
> >
> > I'll have a look.
Thanks!
>
> Both ISP instances probe successfully for me, with two different sensors
> though (IMX327 and IMX296). Can you share more information about your
> issue ?

I'll double check the repo I am using as my starting base when I get
back into the office tomorrow.  I'll rebase my device tree changes if
I don't have the latest and let you know what I am seeing.

adam
>
> > > > Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
> > > > ---
> > > >  .../platform/rockchip/rkisp1/rkisp1-dev.c     | 22 +++++++++++++++++++
> > > >  include/uapi/linux/rkisp1-config.h            |  3 +++
> > > >  2 files changed, 25 insertions(+)
> > > >
> > > > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> > > > index f2475c6235ea..a41f89807dd7 100644
> > > > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> > > > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> > > > @@ -496,6 +496,24 @@ static const struct rkisp1_info rk3399_isp_info = {
> > > >         .features = RKISP1_FEATURE_MIPI_CSI2,
> > > >  };
> > > >
> > > > +static const char * const imx8mp_isp_clks[] = {
> > > > +       "isp",
> > > > +       "hclk",
> > > > +       "aclk",
> > > > +};
> > > > +
> > > > +static const struct rkisp1_isr_data imx8mp_isp_isrs[] = {
> > > > +       { NULL, rkisp1_isr },
> > > > +};
> > > > +
> > > > +static const struct rkisp1_info imx8mp_isp_info = {
> > > > +       .clks = imx8mp_isp_clks,
> > > > +       .clk_size = ARRAY_SIZE(imx8mp_isp_clks),
> > > > +       .isrs = imx8mp_isp_isrs,
> > > > +       .isr_size = ARRAY_SIZE(imx8mp_isp_isrs),
> > > > +       .isp_ver = IMX8MP_V10,
> > > > +};
> > > > +
> > > >  static const struct of_device_id rkisp1_of_match[] = {
> > > >         {
> > > >                 .compatible = "rockchip,px30-cif-isp",
> > > > @@ -505,6 +523,10 @@ static const struct of_device_id rkisp1_of_match[] = {
> > > >                 .compatible = "rockchip,rk3399-cif-isp",
> > > >                 .data = &rk3399_isp_info,
> > > >         },
> > > > +       {
> > > > +               .compatible = "fsl,imx8mp-isp",
> > > > +               .data = &imx8mp_isp_info,
> > > > +       },
> > > >         {},
> > > >  };
> > > >  MODULE_DEVICE_TABLE(of, rkisp1_of_match);
> > > > diff --git a/include/uapi/linux/rkisp1-config.h b/include/uapi/linux/rkisp1-config.h
> > > > index 583ca0d9a79d..40677d47825c 100644
> > > > --- a/include/uapi/linux/rkisp1-config.h
> > > > +++ b/include/uapi/linux/rkisp1-config.h
> > > > @@ -140,12 +140,15 @@
> > > >   * @RKISP1_V11: declared in the original vendor code, but not used
> > > >   * @RKISP1_V12: used at least in rk3326 and px30
> > > >   * @RKISP1_V13: used at least in rk1808
> > > > + * @IMX8MP_V10: used in at least imx8mp
> > > >   */
> > > >  enum rkisp1_cif_isp_version {
> > > >         RKISP1_V10 = 10,
> > > >         RKISP1_V11,
> > > >         RKISP1_V12,
> > > >         RKISP1_V13,
> > > > +       /* TODO Choose a better version for this */
> > > > +       IMX8MP_V10,
> > > >  };
> > > >
> > > >  enum rkisp1_cif_isp_histogram_mode {
>
> --
> Regards,
>
> Laurent Pinchart
diff mbox series

Patch

diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
index f2475c6235ea..a41f89807dd7 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
@@ -496,6 +496,24 @@  static const struct rkisp1_info rk3399_isp_info = {
 	.features = RKISP1_FEATURE_MIPI_CSI2,
 };
 
+static const char * const imx8mp_isp_clks[] = {
+	"isp",
+	"hclk",
+	"aclk",
+};
+
+static const struct rkisp1_isr_data imx8mp_isp_isrs[] = {
+	{ NULL, rkisp1_isr },
+};
+
+static const struct rkisp1_info imx8mp_isp_info = {
+	.clks = imx8mp_isp_clks,
+	.clk_size = ARRAY_SIZE(imx8mp_isp_clks),
+	.isrs = imx8mp_isp_isrs,
+	.isr_size = ARRAY_SIZE(imx8mp_isp_isrs),
+	.isp_ver = IMX8MP_V10,
+};
+
 static const struct of_device_id rkisp1_of_match[] = {
 	{
 		.compatible = "rockchip,px30-cif-isp",
@@ -505,6 +523,10 @@  static const struct of_device_id rkisp1_of_match[] = {
 		.compatible = "rockchip,rk3399-cif-isp",
 		.data = &rk3399_isp_info,
 	},
+	{
+		.compatible = "fsl,imx8mp-isp",
+		.data = &imx8mp_isp_info,
+	},
 	{},
 };
 MODULE_DEVICE_TABLE(of, rkisp1_of_match);
diff --git a/include/uapi/linux/rkisp1-config.h b/include/uapi/linux/rkisp1-config.h
index 583ca0d9a79d..40677d47825c 100644
--- a/include/uapi/linux/rkisp1-config.h
+++ b/include/uapi/linux/rkisp1-config.h
@@ -140,12 +140,15 @@ 
  * @RKISP1_V11: declared in the original vendor code, but not used
  * @RKISP1_V12: used at least in rk3326 and px30
  * @RKISP1_V13: used at least in rk1808
+ * @IMX8MP_V10: used in at least imx8mp
  */
 enum rkisp1_cif_isp_version {
 	RKISP1_V10 = 10,
 	RKISP1_V11,
 	RKISP1_V12,
 	RKISP1_V13,
+	/* TODO Choose a better version for this */
+	IMX8MP_V10,
 };
 
 enum rkisp1_cif_isp_histogram_mode {