From: Zain Wang <wzz@rock-chips.com> To: Sean Paul <seanpaul@chromium.org>, Daniel Vetter <daniel.vetter@ffwll.ch>, Inki Dae <inki.dae@samsung.com>, David Airlie <airlied@linux.ie> Cc: "Tomeu Vizoso" <tomeu.vizoso@collabora.com>, "Mika Kahola" <mika.kahola@intel.com>, "Stéphane Marchesin" <marcheu@chromium.org>, "Tomasz Figa" <tfiga@chromium.org>, dianders@chromium.org, "Thierry Reding" <treding@nvidia.com>, "Krzysztof Kozlowski" <k.kozlowski@samsung.com>, "Heiko Stuebner" <heiko@sntech.de>, "Jingoo Han" <jingoohan1@gmail.com>, "Javier Martinez Canillas" <javier@osg.samsung.com>, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org, linux-rockchip@lists.infradead.org, "zain wang" <wzz@rock-chips.com> Subject: [PATCH 6/6] drm: bridge/analogix: enable vop standby when entry PSR Date: Tue, 18 Oct 2016 14:22:36 +0800 [thread overview] Message-ID: <1476771756-12045-1-git-send-email-wzz@rock-chips.com> (raw) From: zain wang <wzz@rock-chips.com> make VOP standby when entry PSR to save some power. Signed-off-by: zain wang <wzz@rock-chips.com> --- drivers/gpu/drm/rockchip/analogix_dp-rockchip.c | 29 ++++++++++++++++++------- drivers/gpu/drm/rockchip/rockchip_drm_drv.h | 1 + drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 19 ++++++++++++++++ 3 files changed, 41 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c index 1c2d756..e0f3ed3 100644 --- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c +++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c @@ -113,6 +113,13 @@ static void analogix_dp_psr_work(struct work_struct *work) if (!crtc) return; + spin_lock_irqsave(&dp->psr_lock, flags); + psr_state = dp->psr_state; + spin_unlock_irqrestore(&dp->psr_lock, flags); + + if (psr_state != EDP_VSC_PSR_STATE_ACTIVE) + rockchip_drm_vop_set_standby(crtc, false); + vact_end = crtc->mode.vtotal - crtc->mode.vsync_start + crtc->mode.vdisplay; ret = rockchip_drm_wait_line_flag(dp->encoder.crtc, vact_end, @@ -122,14 +129,20 @@ static void analogix_dp_psr_work(struct work_struct *work) return; } - spin_lock_irqsave(&dp->psr_lock, flags); - psr_state = dp->psr_state; - spin_unlock_irqrestore(&dp->psr_lock, flags); - - if (psr_state == EDP_VSC_PSR_STATE_ACTIVE) - analogix_dp_enable_psr(dp->dev); - else - analogix_dp_disable_psr(dp->dev); + if (psr_state == EDP_VSC_PSR_STATE_ACTIVE) { + ret = analogix_dp_enable_psr(dp->dev); + if (ret) { + dev_err(dp->dev, "failed to enable psr\n"); + return; + } + rockchip_drm_vop_set_standby(crtc, true); + } else { + ret = analogix_dp_disable_psr(dp->dev); + if (ret) { + dev_err(dp->dev, "failed to disable psr\n"); + return; + } + } } static int rockchip_dp_pre_init(struct rockchip_dp_device *dp) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h b/drivers/gpu/drm/rockchip/rockchip_drm_drv.h index fb6226c..7149c69 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.h @@ -74,5 +74,6 @@ void rockchip_drm_dma_detach_device(struct drm_device *drm_dev, struct device *dev); int rockchip_drm_wait_line_flag(struct drm_crtc *crtc, unsigned int line_num, unsigned int mstimeout); +void rockchip_drm_vop_set_standby(struct drm_crtc *crtc, bool enabled); #endif /* _ROCKCHIP_DRM_DRV_H_ */ diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index 1740a0b..13eabda 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -1478,6 +1478,25 @@ int rockchip_drm_wait_line_flag(struct drm_crtc *crtc, unsigned int line_num, } EXPORT_SYMBOL(rockchip_drm_wait_line_flag); +void rockchip_drm_vop_set_standby(struct drm_crtc *crtc, bool enabled) +{ + struct vop *vop = to_vop(crtc); + + if (!crtc || !vop->is_enabled) + return; + + spin_lock(&vop->reg_lock); + + if (enabled) + VOP_CTRL_SET(vop, standby, 1); + else + VOP_CTRL_SET(vop, standby, 0); + + spin_unlock(&vop->reg_lock); + +} +EXPORT_SYMBOL(rockchip_drm_vop_set_standby); + static int vop_bind(struct device *dev, struct device *master, void *data) { struct platform_device *pdev = to_platform_device(dev); -- 1.9.1
WARNING: multiple messages have this Message-ID (diff)
From: Zain Wang <wzz-TNX95d0MmH7DzftRWevZcw@public.gmane.org> To: Sean Paul <seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>, Daniel Vetter <daniel.vetter-/w4YWyX8dFk@public.gmane.org>, Inki Dae <inki.dae-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>, David Airlie <airlied-cv59FeDIM0c@public.gmane.org> Cc: "Krzysztof Kozlowski" <k.kozlowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>, linux-samsung-soc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, "Heiko Stuebner" <heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org>, "Tomeu Vizoso" <tomeu.vizoso-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org>, linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, "Jingoo Han" <jingoohan1-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>, dianders-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, "Tomasz Figa" <tfiga-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>, "Javier Martinez Canillas" <javier-JPH+aEBZ4P+UEJcrhfAQsw@public.gmane.org>, "zain wang" <wzz-TNX95d0MmH7DzftRWevZcw@public.gmane.org>, "Mika Kahola" <mika.kahola-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>, "Stéphane Marchesin" <marcheu-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>, "Thierry Reding" <treding-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Subject: [PATCH 6/6] drm: bridge/analogix: enable vop standby when entry PSR Date: Tue, 18 Oct 2016 14:22:36 +0800 [thread overview] Message-ID: <1476771756-12045-1-git-send-email-wzz@rock-chips.com> (raw) From: zain wang <wzz-TNX95d0MmH7DzftRWevZcw@public.gmane.org> make VOP standby when entry PSR to save some power. Signed-off-by: zain wang <wzz-TNX95d0MmH7DzftRWevZcw@public.gmane.org> --- drivers/gpu/drm/rockchip/analogix_dp-rockchip.c | 29 ++++++++++++++++++------- drivers/gpu/drm/rockchip/rockchip_drm_drv.h | 1 + drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 19 ++++++++++++++++ 3 files changed, 41 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c index 1c2d756..e0f3ed3 100644 --- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c +++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c @@ -113,6 +113,13 @@ static void analogix_dp_psr_work(struct work_struct *work) if (!crtc) return; + spin_lock_irqsave(&dp->psr_lock, flags); + psr_state = dp->psr_state; + spin_unlock_irqrestore(&dp->psr_lock, flags); + + if (psr_state != EDP_VSC_PSR_STATE_ACTIVE) + rockchip_drm_vop_set_standby(crtc, false); + vact_end = crtc->mode.vtotal - crtc->mode.vsync_start + crtc->mode.vdisplay; ret = rockchip_drm_wait_line_flag(dp->encoder.crtc, vact_end, @@ -122,14 +129,20 @@ static void analogix_dp_psr_work(struct work_struct *work) return; } - spin_lock_irqsave(&dp->psr_lock, flags); - psr_state = dp->psr_state; - spin_unlock_irqrestore(&dp->psr_lock, flags); - - if (psr_state == EDP_VSC_PSR_STATE_ACTIVE) - analogix_dp_enable_psr(dp->dev); - else - analogix_dp_disable_psr(dp->dev); + if (psr_state == EDP_VSC_PSR_STATE_ACTIVE) { + ret = analogix_dp_enable_psr(dp->dev); + if (ret) { + dev_err(dp->dev, "failed to enable psr\n"); + return; + } + rockchip_drm_vop_set_standby(crtc, true); + } else { + ret = analogix_dp_disable_psr(dp->dev); + if (ret) { + dev_err(dp->dev, "failed to disable psr\n"); + return; + } + } } static int rockchip_dp_pre_init(struct rockchip_dp_device *dp) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h b/drivers/gpu/drm/rockchip/rockchip_drm_drv.h index fb6226c..7149c69 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.h @@ -74,5 +74,6 @@ void rockchip_drm_dma_detach_device(struct drm_device *drm_dev, struct device *dev); int rockchip_drm_wait_line_flag(struct drm_crtc *crtc, unsigned int line_num, unsigned int mstimeout); +void rockchip_drm_vop_set_standby(struct drm_crtc *crtc, bool enabled); #endif /* _ROCKCHIP_DRM_DRV_H_ */ diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index 1740a0b..13eabda 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -1478,6 +1478,25 @@ int rockchip_drm_wait_line_flag(struct drm_crtc *crtc, unsigned int line_num, } EXPORT_SYMBOL(rockchip_drm_wait_line_flag); +void rockchip_drm_vop_set_standby(struct drm_crtc *crtc, bool enabled) +{ + struct vop *vop = to_vop(crtc); + + if (!crtc || !vop->is_enabled) + return; + + spin_lock(&vop->reg_lock); + + if (enabled) + VOP_CTRL_SET(vop, standby, 1); + else + VOP_CTRL_SET(vop, standby, 0); + + spin_unlock(&vop->reg_lock); + +} +EXPORT_SYMBOL(rockchip_drm_vop_set_standby); + static int vop_bind(struct device *dev, struct device *master, void *data) { struct platform_device *pdev = to_platform_device(dev); -- 1.9.1
next reply other threads:[~2016-10-18 6:23 UTC|newest] Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-10-18 6:22 Zain Wang [this message] 2016-10-18 6:22 ` [PATCH 6/6] drm: bridge/analogix: enable vop standby when entry PSR Zain Wang 2016-10-18 15:54 ` Sean Paul
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1476771756-12045-1-git-send-email-wzz@rock-chips.com \ --to=wzz@rock-chips.com \ --cc=airlied@linux.ie \ --cc=daniel.vetter@ffwll.ch \ --cc=dianders@chromium.org \ --cc=dri-devel@lists.freedesktop.org \ --cc=heiko@sntech.de \ --cc=inki.dae@samsung.com \ --cc=javier@osg.samsung.com \ --cc=jingoohan1@gmail.com \ --cc=k.kozlowski@samsung.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-rockchip@lists.infradead.org \ --cc=linux-samsung-soc@vger.kernel.org \ --cc=marcheu@chromium.org \ --cc=mika.kahola@intel.com \ --cc=seanpaul@chromium.org \ --cc=tfiga@chromium.org \ --cc=tomeu.vizoso@collabora.com \ --cc=treding@nvidia.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.