Message ID | 20250221155532.576759-18-tommaso.merciai.xr@bp.renesas.com |
---|---|
State | New |
Headers | show |
Series | [v2,01/18] media: dt-bindings: renesas,rzg2l-csi2: Document Renesas RZ/V2H(P) SoC | expand |
Hi Tommaso, Thank you for the patch. On Fri, Feb 21, 2025 at 04:55:31PM +0100, Tommaso Merciai wrote: > From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> > > Add a `csi_setup` function pointer to the `rzg2l_cru_info` structure and > pass it as part of the OF data. On RZ/G3E and RZ/V2H(P) SoCs, additional > register configurations are required compared to the RZ/G2L SoC. > > Modify `rzg2l_cru_csi2_setup()` to be referenced through this function > pointer and update the code to use it accordingly. > > This change is in preparation for adding support for RZ/G3E and RZ/V2H(P) > SoCs. > > Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> > Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com> Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> > --- > drivers/media/platform/renesas/rzg2l-cru/rzg2l-core.c | 1 + > drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h | 6 ++++++ > drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c | 8 ++++---- > 3 files changed, 11 insertions(+), 4 deletions(-) > > diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-core.c b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-core.c > index e4fb3e12d6bf..3ae0cd83af16 100644 > --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-core.c > +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-core.c > @@ -363,6 +363,7 @@ static const struct rzg2l_cru_info rzgl2_cru_info = { > .enable_interrupts = rzg2l_cru_enable_interrupts, > .disable_interrupts = rzg2l_cru_disable_interrupts, > .fifo_empty = rzg2l_fifo_empty, > + .csi_setup = rzg2l_cru_csi2_setup, > }; > > static const struct of_device_id rzg2l_cru_of_id_table[] = { > diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h > index 2e17bfef43ce..ccaba5220f1c 100644 > --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h > +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h > @@ -89,6 +89,9 @@ struct rzg2l_cru_info { > void (*enable_interrupts)(struct rzg2l_cru_dev *cru); > void (*disable_interrupts)(struct rzg2l_cru_dev *cru); > bool (*fifo_empty)(struct rzg2l_cru_dev *cru); > + void (*csi_setup)(struct rzg2l_cru_dev *cru, > + const struct rzg2l_cru_ip_format *ip_fmt, > + u8 csi_vc); > }; > > /** > @@ -187,5 +190,8 @@ void rzg2l_cru_enable_interrupts(struct rzg2l_cru_dev *cru); > void rzg2l_cru_disable_interrupts(struct rzg2l_cru_dev *cru); > > bool rzg2l_fifo_empty(struct rzg2l_cru_dev *cru); > +void rzg2l_cru_csi2_setup(struct rzg2l_cru_dev *cru, > + const struct rzg2l_cru_ip_format *ip_fmt, > + u8 csi_vc); > > #endif > diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c > index 7cc83486ce03..637c9c9f9ba8 100644 > --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c > +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c > @@ -196,9 +196,9 @@ static void rzg2l_cru_initialize_axi(struct rzg2l_cru_dev *cru) > rzg2l_cru_write(cru, AMnAXIATTR, amnaxiattr); > } > > -static void rzg2l_cru_csi2_setup(struct rzg2l_cru_dev *cru, > - const struct rzg2l_cru_ip_format *ip_fmt, > - u8 csi_vc) > +void rzg2l_cru_csi2_setup(struct rzg2l_cru_dev *cru, > + const struct rzg2l_cru_ip_format *ip_fmt, > + u8 csi_vc) > { > const struct rzg2l_cru_info *info = cru->info; > u32 icnmc = ICnMC_INF(ip_fmt->datatype); > @@ -220,7 +220,7 @@ static int rzg2l_cru_initialize_image_conv(struct rzg2l_cru_dev *cru, > const struct rzg2l_cru_ip_format *cru_ip_fmt; > > cru_ip_fmt = rzg2l_cru_ip_code_to_fmt(ip_sd_fmt->code); > - rzg2l_cru_csi2_setup(cru, cru_ip_fmt, csi_vc); > + info->csi_setup(cru, cru_ip_fmt, csi_vc); > > /* Output format */ > cru_video_fmt = rzg2l_cru_ip_format_to_fmt(cru->format.pixelformat);
diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-core.c b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-core.c index e4fb3e12d6bf..3ae0cd83af16 100644 --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-core.c +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-core.c @@ -363,6 +363,7 @@ static const struct rzg2l_cru_info rzgl2_cru_info = { .enable_interrupts = rzg2l_cru_enable_interrupts, .disable_interrupts = rzg2l_cru_disable_interrupts, .fifo_empty = rzg2l_fifo_empty, + .csi_setup = rzg2l_cru_csi2_setup, }; static const struct of_device_id rzg2l_cru_of_id_table[] = { diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h index 2e17bfef43ce..ccaba5220f1c 100644 --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h @@ -89,6 +89,9 @@ struct rzg2l_cru_info { void (*enable_interrupts)(struct rzg2l_cru_dev *cru); void (*disable_interrupts)(struct rzg2l_cru_dev *cru); bool (*fifo_empty)(struct rzg2l_cru_dev *cru); + void (*csi_setup)(struct rzg2l_cru_dev *cru, + const struct rzg2l_cru_ip_format *ip_fmt, + u8 csi_vc); }; /** @@ -187,5 +190,8 @@ void rzg2l_cru_enable_interrupts(struct rzg2l_cru_dev *cru); void rzg2l_cru_disable_interrupts(struct rzg2l_cru_dev *cru); bool rzg2l_fifo_empty(struct rzg2l_cru_dev *cru); +void rzg2l_cru_csi2_setup(struct rzg2l_cru_dev *cru, + const struct rzg2l_cru_ip_format *ip_fmt, + u8 csi_vc); #endif diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c index 7cc83486ce03..637c9c9f9ba8 100644 --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c @@ -196,9 +196,9 @@ static void rzg2l_cru_initialize_axi(struct rzg2l_cru_dev *cru) rzg2l_cru_write(cru, AMnAXIATTR, amnaxiattr); } -static void rzg2l_cru_csi2_setup(struct rzg2l_cru_dev *cru, - const struct rzg2l_cru_ip_format *ip_fmt, - u8 csi_vc) +void rzg2l_cru_csi2_setup(struct rzg2l_cru_dev *cru, + const struct rzg2l_cru_ip_format *ip_fmt, + u8 csi_vc) { const struct rzg2l_cru_info *info = cru->info; u32 icnmc = ICnMC_INF(ip_fmt->datatype); @@ -220,7 +220,7 @@ static int rzg2l_cru_initialize_image_conv(struct rzg2l_cru_dev *cru, const struct rzg2l_cru_ip_format *cru_ip_fmt; cru_ip_fmt = rzg2l_cru_ip_code_to_fmt(ip_sd_fmt->code); - rzg2l_cru_csi2_setup(cru, cru_ip_fmt, csi_vc); + info->csi_setup(cru, cru_ip_fmt, csi_vc); /* Output format */ cru_video_fmt = rzg2l_cru_ip_format_to_fmt(cru->format.pixelformat);