Hi Laurent, Thank you for the review. On Sun, Feb 23, 2025 at 6:18 PM Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> wrote: > > Hi Tommaso, > > Thank you for the patch. > > On Fri, Feb 21, 2025 at 04:55:22PM +0100, Tommaso Merciai wrote: > > From: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx> > > > > In preparation for adding support for the RZ/V2H(P) SoC, where the D-PHY > > differs from the existing RZ/G2L implementation, introduce a new > > rzg2l_csi2_info structure. This structure provides function pointers for > > SoC-specific D-PHY enable and disable operations. > > > > Modify rzg2l_csi2_dphy_setting() to use these function pointers instead of > > calling rzg2l_csi2_dphy_enable() and rzg2l_csi2_dphy_disable() directly. > > Update the device match table to store the appropriate function pointers > > for each compatible SoC. > > > > This change prepares the driver for future extensions without affecting > > the current functionality for RZ/G2L. > > > > Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx> > > Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@xxxxxxxxxxxxxx> > > --- > > .../platform/renesas/rzg2l-cru/rzg2l-csi2.c | 24 ++++++++++++++++--- > > 1 file changed, 21 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-csi2.c b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-csi2.c > > index 4ccf7c5ea58b..3a4e720ba732 100644 > > --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-csi2.c > > +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-csi2.c > > @@ -107,6 +107,7 @@ struct rzg2l_csi2 { > > void __iomem *base; > > struct reset_control *presetn; > > struct reset_control *cmn_rstb; > > + const struct rzg2l_csi2_info *info; > > struct clk *sysclk; > > struct clk *vclk; > > unsigned long vclk_rate; > > @@ -123,6 +124,11 @@ struct rzg2l_csi2 { > > bool dphy_enabled; > > }; > > > > +struct rzg2l_csi2_info { > > + int (*dphy_enable)(struct rzg2l_csi2 *csi2); > > + int (*dphy_disable)(struct rzg2l_csi2 *csi2); > > +}; > > Unless you'll need to add non-function fields later, I'd name the > structure rzg2l_csi2_phy_ops. > As based on the feedback on patch 09/18 I will keep the struct name as is. > > + > > struct rzg2l_csi2_timings { > > u32 t_init; > > u32 tclk_miss; > > @@ -360,9 +366,9 @@ static int rzg2l_csi2_dphy_setting(struct v4l2_subdev *sd, bool on) > > struct rzg2l_csi2 *csi2 = sd_to_csi2(sd); > > > > if (on) > > - return rzg2l_csi2_dphy_enable(csi2); > > + return csi2->info->dphy_enable(csi2); > > > > - return rzg2l_csi2_dphy_disable(csi2); > > + return csi2->info->dphy_disable(csi2); > > } > > > > static int rzg2l_csi2_mipi_link_enable(struct rzg2l_csi2 *csi2) > > @@ -772,6 +778,10 @@ static int rzg2l_csi2_probe(struct platform_device *pdev) > > if (!csi2) > > return -ENOMEM; > > > > + csi2->info = of_device_get_match_data(dev); > > + if (!csi2->info) > > + return dev_err_probe(dev, -EINVAL, "Failed to get OF match data\n"); > > + > > csi2->base = devm_platform_ioremap_resource(pdev, 0); > > if (IS_ERR(csi2->base)) > > return PTR_ERR(csi2->base); > > @@ -890,8 +900,16 @@ static const struct dev_pm_ops rzg2l_csi2_pm_ops = { > > rzg2l_csi2_pm_runtime_resume, NULL) > > }; > > > > +static const struct rzg2l_csi2_info rzg2l_csi2_info = { > > + .dphy_enable = rzg2l_csi2_dphy_enable, > > + .dphy_disable = rzg2l_csi2_dphy_disable, > > +}; > > I'd recommend moving this just below the definition of the > rzg2l_csi2_dphy_enable() function. > Ok. > Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@xxxxxxxxxxxxxxxx> > > > + > > static const struct of_device_id rzg2l_csi2_of_table[] = { > > - { .compatible = "renesas,rzg2l-csi2", }, > > + { > > + .compatible = "renesas,rzg2l-csi2", > > + .data = &rzg2l_csi2_info, > > + }, > > { /* sentinel */ } > > }; > > MODULE_DEVICE_TABLE(of, rzg2l_csi2_of_table); > > -- > Regards, > > Laurent Pinchart > Chers, Prabhakar