On Fri, Jan 20, 2023 at 06:18:07PM +0200, Laurent Pinchart wrote:
> Hi Tomi,
> 
> Thank you for the patch.

Another small comment: in the commit message, s/lvsd/lvds/

> On Fri, Jan 20, 2023 at 10:50:05AM +0200, Tomi Valkeinen wrote:
> > Reset LVDS using the reset control as CPG reset/release is required in
> > the hardware manual sequence.
> > 
> > Based on a BSP patch from Koji Matsuoka <koji.matsuoka...@renesas.com>.
> > 
> > Signed-off-by: Tomi Valkeinen <tomi.valkeinen+rene...@ideasonboard.com>
> > ---
> >  drivers/gpu/drm/rcar-du/Kconfig     |  1 +
> >  drivers/gpu/drm/rcar-du/rcar_lvds.c | 19 ++++++++++++++++++-
> >  2 files changed, 19 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/gpu/drm/rcar-du/Kconfig 
> > b/drivers/gpu/drm/rcar-du/Kconfig
> > index a8f862c68b4f..151e400b996d 100644
> > --- a/drivers/gpu/drm/rcar-du/Kconfig
> > +++ b/drivers/gpu/drm/rcar-du/Kconfig
> > @@ -43,6 +43,7 @@ config DRM_RCAR_LVDS
> >     select DRM_PANEL
> >     select OF_FLATTREE
> >     select OF_OVERLAY
> > +   select RESET_CONTROLLER
> >  
> >  config DRM_RCAR_USE_MIPI_DSI
> >     bool "R-Car DU MIPI DSI Encoder Support"
> > diff --git a/drivers/gpu/drm/rcar-du/rcar_lvds.c 
> > b/drivers/gpu/drm/rcar-du/rcar_lvds.c
> > index 8e1be51fbee6..668604616bfd 100644
> > --- a/drivers/gpu/drm/rcar-du/rcar_lvds.c
> > +++ b/drivers/gpu/drm/rcar-du/rcar_lvds.c
> > @@ -17,6 +17,7 @@
> >  #include <linux/of_graph.h>
> >  #include <linux/platform_device.h>
> >  #include <linux/pm_runtime.h>
> > +#include <linux/reset.h>
> >  #include <linux/slab.h>
> >  #include <linux/sys_soc.h>
> >  
> > @@ -61,6 +62,7 @@ struct rcar_lvds_device_info {
> >  struct rcar_lvds {
> >     struct device *dev;
> >     const struct rcar_lvds_device_info *info;
> > +   struct reset_control *rstc;
> >  
> >     struct drm_bridge bridge;
> >  
> > @@ -845,6 +847,10 @@ static int rcar_lvds_probe(struct platform_device 
> > *pdev)
> >     if (ret < 0)
> >             return ret;
> >  
> > +   lvds->rstc = devm_reset_control_get_exclusive(&pdev->dev, NULL);
> > +   if (IS_ERR(lvds->rstc))
> > +           return dev_err_probe(&pdev->dev, PTR_ERR(lvds->rstc),
> > +                                "failed to get cpg reset\n");
> 
> Missing blank line.
> 
> Reviewed-by: Laurent Pinchart <laurent.pinch...@ideasonboard.com>
> 
> >     pm_runtime_enable(&pdev->dev);
> >  
> >     drm_bridge_add(&lvds->bridge);
> > @@ -924,6 +930,8 @@ static int rcar_lvds_runtime_suspend(struct device *dev)
> >  
> >     clk_disable_unprepare(lvds->clocks.mod);
> >  
> > +   reset_control_assert(lvds->rstc);
> > +
> >     return 0;
> >  }
> >  
> > @@ -932,11 +940,20 @@ static int rcar_lvds_runtime_resume(struct device 
> > *dev)
> >     struct rcar_lvds *lvds = dev_get_drvdata(dev);
> >     int ret;
> >  
> > +   ret = reset_control_deassert(lvds->rstc);
> > +   if (ret)
> > +           return ret;
> > +
> >     ret = clk_prepare_enable(lvds->clocks.mod);
> >     if (ret < 0)
> > -           return ret;
> > +           goto err_reset_assert;
> >  
> >     return 0;
> > +
> > +err_reset_assert:
> > +   reset_control_assert(lvds->rstc);
> > +
> > +   return ret;
> >  }
> >  
> >  static const struct dev_pm_ops rcar_lvds_pm_ops = {
> 
> -- 
> Regards,
> 
> Laurent Pinchart

-- 
Regards,

Laurent Pinchart

Reply via email to