From: Hoan Nguyen An <na-hoan@xxxxxxxxxxx> Add function support for Module Standby Mode Signed-off-by: Hoan Nguyen An <na-hoan@xxxxxxxxxxx> --- drivers/gpu/drm/rcar-du/rcar_du_crtc.c | 26 ++++++++++++++++++++++++++ drivers/gpu/drm/rcar-du/rcar_du_crtc.h | 1 + 2 files changed, 27 insertions(+) diff --git a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c index 90dacab..935cdd1 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c +++ b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c @@ -651,6 +651,32 @@ static void rcar_du_crtc_stop(struct rcar_du_crtc *rcrtc) rcar_du_group_start_stop(rcrtc->group, false); } +int rcar_du_crtc_standby(struct rcar_du_crtc *rcrtc) +{ + u32 val_reg; + unsigned int i = 0; + + /* Enter Standby mode */ + rcar_du_crtc_dsysr_clr_set(rcrtc, DSYSR_DRES | DSYSR_DEN, 0); + + for(i = 100; i > 0; i--) + { + val_reg = rcar_du_crtc_read(rcrtc, DSSR); + if(!(val_reg & DSSR_VBK)) + break; + udelay(10); + } + + if(!(i > 0)) + return -ETIMEDOUT; + + /* Stop clock */ + clk_set_rate(rcrtc->extclock, 0); + clk_set_rate(rcrtc->clock, 0); + + return 0; +} + /* ----------------------------------------------------------------------------- * CRTC Functions */ diff --git a/drivers/gpu/drm/rcar-du/rcar_du_crtc.h b/drivers/gpu/drm/rcar-du/rcar_du_crtc.h index 59ac6e7..6e0de42 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_crtc.h +++ b/drivers/gpu/drm/rcar-du/rcar_du_crtc.h @@ -99,6 +99,7 @@ enum rcar_du_output { int rcar_du_crtc_create(struct rcar_du_group *rgrp, unsigned int swindex, unsigned int hwindex); +int rcar_du_crtc_standby(struct rcar_du_crtc *rcrtc); void rcar_du_crtc_suspend(struct rcar_du_crtc *rcrtc); void rcar_du_crtc_resume(struct rcar_du_crtc *rcrtc); -- 2.7.4